Moving from AVRs to ARMs

I have been using AVRs for over a year now, and I am ready to move up to something more powerful. Looking at dev boards, The Embedded Artists LPC2148 Education Board looks perfect for my purpose. However, I am not sure where to start with programmers. With AVRs it was simple because you could just use ATMEL’s programmers and software without problem. I would really like an “all in one” package that includes a programmer and software that “just work”.

Any suggestions?

Thanks.

I use Rowley CrossWorks with their CrossConnect Pro JTAG interface. They work together without any problems.

CrossWorks is great, especially with their non-professional option.

If you’re looking more at a $0 pricepoint for software, YAGARTO is a decent all-in-one compiler environment (does not include IDE ;)) for the ARM. OpenOCD with any number of JTAG units is a great software debug solution.

Thanks for mentioning that, CrossWorks seems great for my purposes.

It looks like when you buy the software, you get the programmers at a reduced price. Do you guys know the difference between the CrossConnect Classic and CrossConnect Lite?

Also, can C++ be used with CrossWorks?

I’d ask them to make sure, but I think that the Lite model is slower than the Classic.

C++ is supported, but I don’t think that many people use it.

I recommend that you start with what Embedded Artists provide - particularly as you will probably want to use their example code to begin with. The Embedded Artists LPC2148 Education Board is supplied with a CD ROM with a ‘QuickStart Build Environment’. You can use the FlashMagic software to program the board with the resulting hex files via the on-chip bootloader without any special programming hardware required.

Once you have experimented with this for a while you should have a better idea of what you need / don’t need in your eventual development tools.

So they come with a bootloader pre-programmed?

Yes indeed and it works very well - no jumpers to set, buttons to push etc. - the upload is all controlled by the FlashMagic software and the bootloader. The EA LPC2148 Education Board board comes with a very good 38-page User’s Guide. The section which explains how to use the In-system Programming (ISP) features of the LPC2xxx MCUs says (and I quote):

3.3 Program Download via ISP

UART#0 can be used to download program code into the internal FLASH of the LPC2148. The ISP (In-System Programming) feature of the LPC2148 is then used. ISP is enabled after reset by pulling pin P0.14 low. In order to enable automated ISP invocation, the LPC2148 Education Board allows control of both the reset signal and P0.14, via the USB-to-serial bridge (FT232RL from FTDI). Reset is controlled by the DTR serial signal and P0.14 via RTS. NXP has release a download program (no longer supported) and there is also the open source LPC21ISP program. FlashMagic from ES Academy is however the recommended ISP download program to use. The program can be downloaded from: http://www.flashmagictool.com/

That is just great!

Is the code you write going to be any different than when you use a proper JTAG programmer(once I get a JTAG programmer I will be able to use my existing code without any change).

Also, does EA have any distributer’s in the US that carry the LPC2148 Education Board?

Consider too using the free, 32KB code size limited version of IAR’s excellent IDE/compiler, and I think Keil has the same free version.

This is >if< your early efforts’ code fits.

stevech:
Consider too using the free, 32KB code size limited version of IAR’s excellent IDE/compiler, and I think Keil has the same free version.

This is >if< your early efforts’ code fits.

Just make sure you budget for the full version (~$4000 - $5000?) before you head down either of those paths so you do not get an unwelcome surprise if and when your later efforts do not fit.

The code limits are a great reason to stick with a GCC based tool (such as Crossworks). If you’ve weaned off of the IDE, the underlying compiler is open source and the same across products - meaning you’re not faced with refactoring a chunk of your firmware.

What do you guys think of this?

http://www.rowley.co.uk/crossfire/crossfire_lpc2138.htm

While the LPC2148 is probably the most popular ARM device on the planet.

If you’re starting from scratch, you’ll want to go with a Cortex part like the LPC17xx

They’ll be twice as fast, through raw clock speed and an improved pipeline. The code is alway Thumb2 code (16 bit), and the nested interrupt controller is MUCH easier to use. For the most part you just write a normal C routine, point the vector at it and enable it. There are seperate vectors for each peripheral so there’s not much code dealing with OK who interrupted me…

I second the recommendation to get an ARM Cortex-M3 device.

For low cost, you can’t beat the NXP LPC1000 lineup: LPC1300 for up to 8 KB RAM and $2 to $3 unit cost, or LPC1700 for much bigger apps, ethernet, and 80-100 pins. (Check out the [Olimex LPC-P1343 for less than USD$20.) Also look at Cortex-M3 devices from STM32, LM3S from TI, and some other new players like Energy Micro, Atmel SAM3U, and others.

I heartily recommend you consider the [Versaloon JTAG/SWD flash programmer/debugger from Simon Qian. Its firmware and the software tools for the PC are all free and open source software, and it is currently the only device supporting SWD debugging in OpenOCD. (Some Cortex-M3 devices, like the NXP LPC1100/LPC1300, don’t support JTAG, only SWD.)

I am using the GNU toolchain (gcc for C/C++, binutils, gdb) compiled from source myself, along with Versaloon’s flash programming tool and OpenOCD this makes a great set of development tools that does not limit you in any way. It’s really easy to use the Cortex-M3 once you learn a little about it. All you need is a little linker script (basically just 5 lines or so defining the particular MCU’s SRAM/FLASH memory spaces, then you just “include” the standard Cortex-M3 GNU ld linker script for all the boilerplate stuff), and some super easy startup code and interrupt vector table: All of this can be coded in portable C or C++! Contrast with ARM7 where you will need some compiler-specific things and assembly code to implement the startup process.](http://www.simonqian.com/en/Versaloon/)](LPC-P1343)

Cheapest and easiest entry point is the LPCXpresso with either an LPC1114 (Cortex-M0) or an LPC1343 (Cortex-M3):

http://ics.nxp.com/lpcxpresso/

They cost about $30.

There is now (actually currently out of stock until next week) an LPCXpresso board based on the more powerful LPC1768 (Cortex-M3) as well for the same price:

http://www.embeddedartists.com/products/lpcxpresso

http://www.lpctools.com/lpc1768.lpcxpresso.aspx

This site has it in stock.

I think that is what I’ll go with.

Thanks guys for your great suggestions and help!