EmbDev.net

Forum: ARM programming with GCC/GNU tools Newbie: Device Support


von Alexander Zaech (Guest)


Rate this post
useful
not useful
Hello folks,

sorry for this newbie question. I am plan to start an ARM based project
in the near future. So I google around and found WinARM. It sounds good
to me so I know WinAVR very well. I think, I will use an Atmel ARM7 MCU
- AT91SAM7A3 or AT91SAM7S256 - not clear by the moment. As far as I can
see on the WinARM homepage the AT91SAM7S family is supported. But
AT91SAM7A3? The SAM7A3 fits a little bit more into my design: MMC Card
IF and CAN :-) That's what I'm looking for...

So far so good. I download the WinARM .zip-file and take a look to the
include directory to find some header files for one of the chips -
nothing there...? For the AT91SAM7S64 I found an sample project. OK,
there I found what I expect for this MCU. Some of the header files are
from Atmel I think. Where I can found some identical for the SAM7256
and/or SAM7A3 (if supported)? And also a little bit unclear for me are
the Board.h, the ROM and RAM ld-files and the Cstartup files. Can some
one tell me more about the way to setup a project on an self-made
hardware?

Many thanks in advance!

Regards

  Alex Zaech

von Martin Thomas (Guest)


Rate this post
useful
not useful
Alexander Zaech wrote:

> [...] As far as I can
> see on the WinARM homepage the AT91SAM7S family is supported. But
> AT91SAM7A3?

The GNU-Tools (gcc c-compiler, linker at all) in WinARM (and other
precompiled packages based on GNU-tools) support the SAM7A-series since
ARM7TDMI is supported (and most other ARM architectures/cores too).

> Where I can found some identical for the SAM7256
> and/or SAM7A3 (if supported)?

at91.com -> kit -> (select eval kit) -> Software Packages -> download
one of them (I usualy download those for IAR) -> extract. Header-file
with register-defintions and "AT91-library" are included in the examples
and both can be used with gcc too.

> And also a little bit unclear for me are
> the Board.h,

Board.h is usualy used as "global config-header" for the project from
Atmel and projects based on Atmel-code. Nothing magic in it, the
comments in the source are obvious.

> the ROM and RAM ld-files

These are the linker-scripts: basicly to assign sections created by the
compiler to a memory-address/range. "*ROM.ld" is the usualy used to
create a binary/"load file" to be programmed into the controller's
flash-memory, "RAM" usualy is used to create a file to be located in the
controllers SRAM for debugging (but debugging in flash is also possible,
but remind the limited number of hardware-breakpoints).
The examples should give an idea. Search for "binutils manual" and read
the ld manual for further information.

> and the Cstartup files.

In short: code needed for the basic preparation of  hardware-registers
and the memory before the code created by the c-Compiler can be started.


Also read Jim Lynch's tutorial (i think it is available from atmel.com
and at91.com now). Also read the the html-documents which come with the
examples from Atmel, the application-notes from Atmel and for the "core"
the technical reference/manual available from ARM (arm.com).

> Can some
> one tell me more about the way to setup a project on an self-made
> hardware?

I'd recommend that you buy a ready-made evaluation-board to get started.
When you have a "feeling" for the tools (compiler, debugger etc.) and
the way how to access the controller's hardware it will be easier to get
your own hardware working. Your knowledge from the AVRs will help but
there is a lot more to learn for ARM (I have started with AVRs too).
Later study the schematics of the available eval.-boards from Atmel and
others and read the "hardware-design" application-notes before creating
your own hardware.


Martin Thomas

von Alexander Zaech (Guest)


Rate this post
useful
not useful
Martin Thomas wrote:

snip off

> Also read Jim Lynch's tutorial (i think it is available from atmel.com
> and at91.com now). Also read the the html-documents which come with the
> examples from Atmel, the application-notes from Atmel and for the "core"
> the technical reference/manual available from ARM (arm.com).
>
Many thanks for this hint. Jim Lynch's tutorial is great. Application
notes and the "core" docu are a must!
>
> I'd recommend that you buy a ready-made evaluation-board to get started.
> When you have a "feeling" for the tools (compiler, debugger etc.) and
> the way how to access the controller's hardware it will be easier to get
> your own hardware working. Your knowledge from the AVRs will help but
> there is a lot more to learn for ARM (I have started with AVRs too).
> Later study the schematics of the available eval.-boards from Atmel and
> others and read the "hardware-design" application-notes before creating
> your own hardware.
>
You are right, a ready-made evaluation-board is the best starting point.
The tools itself are already well known from Linux projects. Only the
differences to the embedded world and ARM needs hands-on training :-)

Do you know something about the CrossWorks IDE? I have read some entries
in other forums and it seems to be quite useful.

BTW: Many thanks for explanations!

Regards

  Alex Zaech

von Martin Thomas (Guest)


Rate this post
useful
not useful
Alexander Zaech wrote:

> Do you know something about the CrossWorks IDE? I have read some entries
> in other forums and it seems to be quite useful.

I have read some of the Crossworks-documentation but never used it so I
can not comment on this product. But maybe someone else can. Rowley
offers a time-limited evaluation-version.

von Jim K. (ancaritha)


Rate this post
useful
not useful
Alexander Zaech wrote:
> Where I can found some identical for the SAM7256
> and/or SAM7A3 (if supported)?

Heres a SAM7A3 example that I was able to put together with Martin's
help: http://users.wpi.edu/~jimmykaz/Arm/Sam7A3_Virt_Fnct.rar

That includes the linker scripts, assembly file, C init file and
Makefile.  The Linker scripts, Assembly file and makefile have been
modified to work with C++ virtual functions.

Enjoy :)

von Clifford S. (clifford)


Rate this post
useful
not useful
Alexander Zaech wrote:
> Do you know something about the CrossWorks IDE? I have read some entries
> in other forums and it seems to be quite useful.
>

You can download an evaluation copy of CrossWorks. I evaluated it
recently, it was fairly fully featured. The greatest benefit IMO is that
Rowley have their own debugger that is not merely a front end to GDB.
They also use their own C library rather than Newlib or GNU. C++ support
seemed limited (with respect to teh libarary). In the end I rejected it
because their VFP support was not yet mature (again w.r.t. the library).

I also looked at Green Hills Multi, Keil uVision/RealView, and IAR
Workbench. They all have their benefits, although you get most out of
Green Hills by having relatively expensive trace hardware (the
time-machine debugger is very clever) - without that, there is little to
distinguish it from other tools, and the IDE itself is very quirky.

If you are in a budget, CrossWorks is excellent value for money IMO, and
takes a lot of the pain out of getting started on a wide rang eof
hardware. I also got excellent support from Rowley during the
evaluation. On the other hand WinARM is entirely free, but you are on
your own for custom hardware and chips not directly supported. In my
case the hardware specific headers, C runtime initialisation and other
BSP code such as the syscalls interface and RTOS support were entirely
written in-house. In short you can use WinARM on any ARM based chip
supported by GCC, but the amount of work you have to do yourself depends
on the hardware you choose. ARM7 devices are relatively straightforward
since you do not normally have the complexity of an MMU to set up for
example. ARM9 is more complex generally. If you are using external
memory devices, there is additional complexity setting up bus-widths and
bus-timing.

Avoid Microcross GNU X-Tools IMO, what they are selling is a simple GNU
cross distribution with support at additional (and high) cost, from
experience WinARM is a better quality GCC build, does not need Cygwin,
and you get better and free support from Martin and the user community
right here.

Clifford

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.