27
\$\begingroup\$

I'm looking for a good beginner book for ARM microcontrollers. It should cover the CPU architecture and the boot sequence and ideally also assembler, C and peripherals.

I have a book like this for AVRs and there seem to be several good choices for Atmel chips. The ARM landscape is is more complex with multiple vendors and several classes of chips. A look on Amazon did not reveal a clear favorite. Would appreciate some recommendations.

\$\endgroup\$
5
  • \$\begingroup\$ What's your book for AVRs? I'm curious. Also, I have a course pack from my university for ARMs, but I'm afraid it will never see publication... \$\endgroup\$ Commented Jun 15, 2011 at 13:29
  • 1
    \$\begingroup\$ @kevin-vermeer It's a German book: Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie written by a retired professor. Her covers all the topics I mentioned in my question even including some cool stuff like how to count assembler instructions to determine how much time a loop will need per iteration. \$\endgroup\$
    – kwo
    Commented Jun 15, 2011 at 13:48
  • \$\begingroup\$ Guess I need to learn German... \$\endgroup\$ Commented Jun 15, 2011 at 17:30
  • \$\begingroup\$ That looks an interesting book shame I don't know german that well to be able to read it and understand it. \$\endgroup\$
    – Dean
    Commented Jun 16, 2011 at 2:22
  • \$\begingroup\$ @kwo I guess there's no hope of getting a translated version right? \$\endgroup\$
    – NickHalden
    Commented Nov 7, 2012 at 16:59

5 Answers 5

4
\$\begingroup\$

I suggest you go to the ARM information center. That's a good start as far as I am concern. A lot of information it provides even when you are migrating from one MCU to ARM. http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0211a/index.html Also the ATMEL site on their ARM chips will do a lot good. Good documentations and a lot of application notes. All the best.

\$\endgroup\$
1
  • \$\begingroup\$ Thanks. There are some recommended books at the site as well. \$\endgroup\$
    – kwo
    Commented Jun 19, 2011 at 20:08
13
\$\begingroup\$

Search for the ARM ARM, ARM Architectural Reference manual. Covers the boot process, architecture, assembly (ARM, thumb and thumb2), everything. The ARM ARM is generic, for the specific core you are interested in there will also be a TRM, Technical Reference Manual. All of these documents are available for free from ARM's website. The TRM will get into the specific details for that core, in particular if you want to use one of the newer Cortex-M3 based microcontrollers, the boot sequence or lets say the exception table is different from the traditional ARM and you need the TRM for the Cortex-M3 to find the information.

if you end up with an arm with a cache or mmu, you may also need to get the TRM for that from ARM's website. You need to know the specific core built into the particular vendors chip, for example the PL310 r2p0 can/may be different from the r3p0. The vendor should have this info and might provide links to or perhaps the arm docs directly, normally they do not embed the arm docs in their own documentation. I think ARM prefers it that way.

As far as C goes, it is just C, nothing special, ARM is supported by the mainstream compilers, gcc, llvm, Keil (now owned by ARM), IAR, green hills, etc. Microsoft even has/had one (would avoid it though). Nothing special for the ARM, but you need to know the nuances for the specific compiler and its linking. Code Sourcery is the way to go these days for a ready to use gcc based ARM compiler, the LITE version is free to download and use, and there are pay for versions if you want support (more free gcc arm support at google.com than you have time to read). Prior to code sourcery emdebian was a place to go, for some things yagarto and devkitarm and winarm all had/have ready to use solutions (for embedded and not necessarily linux, Code Sourcery or emdebian if you want to cross compile for linux).

I have a few blogs which are not really blogs, but places to put some sample programs and information on how to bring up a few different ARM based microcontrollers. Some asm some C, the older blogs I show how to build your own gcc based cross compiler. I may have llvm info too (thumbulator has a couple of examples, not documented though), out of the box llvm can be used as a cross compiler for a number of platforms, you dont have to build it to a target like gcc. And llvm's code generation has caught up to gcc 4.x (gcc 4.x is not necessarily better than gcc 3.x and neither gcc or llvm are as good as other expensive pay for ones like ARMs own compilers).

http://stm32stuff.blogspot.com/

From there you can click on my profile and find similar info for lpc, lmi (luminary micro, the stellaris parts, now owned by ti) sam7. I am not as much of a fan of the lpc family, mbed2 is okay other than the painful blue leds. right now there is a $12 stm32 based board, some discovery something, ready to play with out of the box. coridium has a board that matches the arduino footprint as does maple, can get one or both at sparkfun (lots of goodies at sparkfun). if you are looking for something more powerful the beagleboard was painful for the lack of interfaces, the chinese version for the same price is/was better (showed up in a week or two but no tracking info of any kind), has ethernet and a not-screwed-up serial port. I like the hawkboard but I think they failed to follow the design guide and they may have problems with the omap. Liked the openrd from the plug computing folks, but hated the plug version. The openrd has a sata power and data connector on the board, simply plug a hard drive in, other boards in this class are going to force you to something flash based (read: very slow). the marvell cores are running circles around the ti omaps at the moment anyway.

or try my thumbulator (github) thumb instruction set simulator for free, but limited to thumb, no arm (you can take your code from it to the stm32 boards though, like the $12 one). the armulator which is in gdb and elsewhere is probably more painful to use, but does support arm and thumb, and qemu is easy to use if you have no interest in seeing what your code is doing other than serial port output. qemu supports arm, thumb and thumb2, I think a stellaris board or two is modeled there.

If you already know AVR assembler, which is not that great of an instruction set (better than some, worse than others) you should not have any problem with ARM or thumb, a little cleaner, a little simpler. Likewise if you have done embedded C (outside of a sandbox) with the AVR, then ARM will be the same or easier. You can go with the mbed or maple where they have sandboxes that should make it easy to get started and then if you want to venture off on your own you can without much trouble. the mbed you simply copy the .bin to the virtual flash drive, the maple you use their loader or dfu-util or something like that I dont remember.

\$\endgroup\$
1
  • \$\begingroup\$ Fantastic answer. \$\endgroup\$
    – NickHalden
    Commented Jun 14, 2013 at 17:56
3
\$\begingroup\$

Good books on ARM are:

"ARM SOC Architecure" by Steve Furber

"ARM System Developers Guide" by Andrew Sloss, Dominic Symes and Chris Wright

"ARM Architecture Reference Manual" by ARM

The last one is available for free at ARM's site.

Sloss, Symes and Wright is excellent if you want to step away from the trees to see the forest, specially if you have embedded systems work to do.

Furber is one of the original ARM architects and does an excellent job taking you through the rationale of ARM's design and how ARM processor cores work in general.

Of course all of the above is just a recommendation based on my personal/subjective opinion and is noot to be seen as plug for a particular product or author.

\$\endgroup\$
1
  • \$\begingroup\$ Formatting the list of books as a list would be useful, also including links for those books is useful. \$\endgroup\$ Commented Nov 7, 2012 at 16:02
1
\$\begingroup\$

Hitex has these books that you can download:

http://www.hitex.com/index.php?id=download-insiders-guides

\$\endgroup\$
0
\$\begingroup\$

there is a good series tutorial under name : "Building Bare-Metal ARM Systems with GNU"

http://www.embedded.com/design/mcus-processors-and-socs/4007119/Building-Bare-Metal-ARM-Systems-with-GNU-Part-1--Getting-Started

\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged or ask your own question.