by Martin THOMAS
Please: Before asking any questions by e-mail or in the forum make sure that you are using the latest version of the examples and/or tools. Some problems have already been fixed.
"Last updated" may be just additional information not always a new version of a software-package. All presented LPC2106, LPC2129 and LPC2138 projects should work with minimal modifications in the linker-scripts and source-code on all Philips LPC2xxx controllers. Most of the code should also work on other ARM7TDMI controllers after small modifications.
If you think that I could help you with your projects: just send an e-mail. I'm looking for "freelance"-jobs.
You may also find useful code and information on my Atmel AVR-Projects page
If you send me an e-mail: Please use your full name (your _real_ full name). And it's always nice to get some kind of feedback if an answer to a question did help or did not help. I often spend a lot of time answering e-mails and would at least like to know if my suggestions did or did not help solving a problem.
Questions or suggestions? Please use the support-forum for WinARM/arm-elf-gcc and the example-projects.
WinARM is a collection of GNU and other tools to develop software for the ARM-family of controllers/processors on MS-Windows-hosts. Unlike other collections WinARM does not depend on a cygwin or mingw-environment. All needed tools are in the distribution-package. WinARM has been tested with Philips LPC2106, Philips LPC2129, Philips LPC2138, Philips LPC2148 and Atmel AT91SAM7S64, AT91SAM7S256, AT91RM9200 ARM7TDMI(-S) controllers (the list is based on own tests and user feedback). The gnu-toolchain and the supplied tools should work with all microcontrollers based on ARM(-TDMI/Thumb etc.) architecture. WinARM has been made in the spirit of WinAVR which is a collection for Atmel AVR 8bit-Controllers.
WinARM includes in Version 20060606:
User-Forum: A support-forum for WinARM/arm-elf-gcc and the example-projects. You are invited to visit this forum and ask questions or help others.
Download by right-click->save as, please download only one of the archives either the zip or the self-extracting-archive. The contents is the same. Please respect all licenses of the included components. WinARM itself has no additional license.
Please do not use download-managers with more than 5 parallel connections! (There are people who use >30 parallel connections.) Download only one of the archives (zip or the self-extracting archive). Both archives have the same content, which has just been packed with a different method. I will be forced to throttle the server and use traffic-shaping if this habbits do not stop.
While the WinARM package might still be useful because of the included examples and tools the GNU tools (Compiler, binutils etc) in the WinARM package are rather outdated. Packages with more recent versions of the GNU ARM-cross-toolchain for MS Windows hosts:
Updates and Add-Ons:
WinARM and Keil/ARM uVision
Jaroslav Ban from the Technical University Kosice kindly contributed some files which help to integrate the GNU-Tools from WinARM (arm-elf-gcc/arm-elf-as) into the Keil/ARM uVision IDE. There is a readme-file in the archive with installation- and usage-instructions. (Update mthomas 20070913: objcopy-"glue" for "create hex-file"). [Download] (glue-package version 20070913).
WinARM and Microsoft Vista
Adriaan Beluga has sent the following e-mail:
Thanks for your suggestions. With them I managed to get everything to work again under Vista ! ;-)
In the end I only needed to modify the path in my batch file which starts "pn.exe". Here is what it looks like now:
start /b pn
Thanks to Adriaan for testing WinARM with Vista (I currently do not have access to a PC running Vista). Users who do not use a batch-file to start Programmers-Notepad or another editor may add the entries to the system search-path from the Workplace properties. So where Windows NT/2K/XP users just added C:\WinARM\bin;C:\WinARM\utils\bin Vista users add C:\WinARM\libexec\gcc\arm-elf\4.1.1;C:\WinARM\bin;C:\WinARM\arm-elf\bin;C:\WinARM\utils\bin .
Information from Michael Langfort: I’m using the 20060606 version of WinARM on Vista Home Premium. When I tried to build a WinARM-based project (that builds fine on WinXp), I got an error:
1>arm-elf-objdump -h -S -C app.elf > app.lss 1>/usr/bin/sh: /c/winarm/bin/arm-elf-objdump: Invalid argument
This is related to the invalid parameter being passed to a windows api. Aaron Giles page talks about this in relation to MinGW. I went ahead and did his fix, and downloaded MinGW 5.1.3. I deleted the WinARM make and replaced it with the MinGW 5.1.3 make (Its called MinGW-make) and added all the paths spoken about on his page, and now WinARM works. Please think about changing the WinARM Make to match that version. --Michael (mthomas: I will include the mentioned version in to the next WinARM-relase.)
The old WinARM Version 20060331 with gcc 4.1.0 is still available. [Download] (zip, ca. 90 Megabytes, "Readme.htm" of this version).
The old WinARM Version 20060117 with gcc 4.0.2 is still available. [Download] (zip, ca. 80 Megabytes, "Readme.htm" of this version). In case you have problems with make ("e=2", "file not found") with the old Version 20060117 please replace the complete WinARM/utils/bin directory with the one from the alternate-utilites for version 20060117. Take care: the make version 3.80 included in the archive is case sensitive even on MS-Windows systems, so filenames in the makefile have to be given in correct upper- and lowercase.
The old WinARM Version 20050209-2 with gcc 3.4.3, binutils 2.15.94, newlib 1.13 is still available. Download the old WinARM 20050202 zip-Archive here (zip, ca. 49 Megabytes) or here (tar.bz2, ca. 41 Megabytes).
This is a simple example to let a LED blink and test button-input (GPIO) on a Philips LPC2106 (ARM7TDMI-S-architecture). The demo-board LPC-P2106 from Olimex has been used. The project-setup is adapted for the arm-elf GNU-toolchain on MS-Windows "hosts" but since the GNU-tools are used, the changes needed to build the project on Unix/Linux are minimal. Please read the readme.txt and comments in the source-code and the makefile for further information. Download the complete archive here (timestamp 20060629, updated Makefile, tested with WinARM 6/2006)
A blink-switch-example for the Philips LPC2129. Code prepared for a Olimex LPC-P2129 demo-board(*1) but can be adapted to other hardware easily. Tested with WinARM 4/05. [Download] (Timestamp 20070319, fixed stack-align in linker-scripts)
Another blink-switch-example with a little C++ support (just one class). The example has been made to verify the function of makefile, linker-scripts and startup-code. Code prepared for a LPC2106, tested with WinARM 2/05 and 4/05. [Download] (Timestamp 20050429)
This is a simple example to let a LED blink and test switch-input on a Philips LPC2106 (ARM7TDMI-architecture). The delay for the blink-routines is timed by a system-timer which updates a "timebase" in an interrupt service routine (very much like the Blinky_IRQ sample from Keil GmbH). The demo-board LPC-P2106 from Olimex has been used. Please read the readme.txt and the comments in the source-code and the makefile for further information. The code and makefile are prepared to be built with WinARM but should be rather portable among other gcc-based toolsets. Download the complete archive here (timestamp 20050514, makefile (with thumb-interwork-options), headers, linker-scripts and startup-code included). Make sure to use a new version of arm-elf-gcc (>=3.3.1?) since the interrupt-code did not compile correctly in old gcc-versions. Code has been tested with gcc V4.0.0 (WinARM 4/05).
A similar example for the Philips LPC2129. Demonstrates timer-irq, VIC, thumb-interwork, linker-scripts, startup-code etc. Code prepared for the Olimex LPC-P2129 Rev A demo-board(*1) but can be adapted to other hardware easily. Tested with WinARM 4/05. [Download] (Timestamp 20070319, fixed stack-align in linker-scritps)
Another Blinky-Example for the Philips LPC2129. This one is for the Keil MCB2100 evaluation board. Beside of the adaption for the Keil board this example includes an updated makefile and updated linker-scripts. The source-code has been extended and comments have been added. Tested with WinARM 1/06. [Download] (Timestamp 20060223)
This sample-application demonstrates interfacing the ARM7-UART(0) in polled ("simple" non-interrupt) mode with a LPC2106 ARM7TDMI. Derived from open-source/free code by R O Software. The demo-board LPC-P2106 has been used. Please read the readme.txt and the comments in the source-code and the makefile for further information. The code and makefile are prepared to be built with WinARM but should be rather portable among other gcc-based toolsets. Download the complete archive here (timestamp 20041214, makefile, headers, linker-scripts and startup-code included). Code has been tested with arm-elf-gcc V3.4.2. Thanks to Murray Horn for reporting a bug in the PLL-Setup. Fix applied in 20041214.
This sample-application demonstrates interfacing the ARM7-UART(0) in "interrupt-mode" with a LPC2106 ARM7TDMI-S. Adaption and slightly modified and extended version from open-source/free code by R O Software for the demo-board LPC-P2106. Please read the readme.txt and the comments in the source-code and the makefile for further information. The code and makefile are prepared to be built with WinARM but should be rather portable among other gcc-based toolsets. Download the complete archive here (timestamp 20041028, makefile, headers, linker-scripts and startup-code included). Code has been tested with arm-elf-gcc V3.4.2.
A similar example for the Philips LPC2129 ARM7TDMI-S, tested with WinARM 4/05 (gcc 4.0.0). Download the complete source-archive here (timestamp 20050514).
A similar example for the Philips LPC2138. Demonstrates interfacing both UARTs, timer-irq, VIC, thumb-interwork, linker-scripts, startup-code etc. Code prepared for the Keil MCB2130 demo-board but can be adapted to other hardware easily. Tested with WinARM 8/05. [Download] (Timestamp 20051008)
An improved version of the example for the NXP LPC23xx and LPC24xx family. Beside the demonstration for interrupt-driven UART control which is still based on the R O software-code. This example also demonstrates how to configure the clock-system in the LPC23xx/24xx controllers. The clock-system is a little different from the "older" devices. The code also demonstrates how to use the "new" vectored interrupt controller. The VIC in the LPC23xx/LPC24xx family is based on another ARM primecell than the VIC in the LPC21xx/22xx so this had to be taken into account. Additionaly the code has some functions to connect "call-backs" to a timer-IRQ (not LPC specific). The code has been tested with an LPC2378 on an Olimex LPC-2378-EK using the GNU-toolchain as in my WinARM collection 6/06. [Download] (Timestamp 20070502)
This is just a port of the example "CANall V1.10" from Embedded Systems Academy to WinARM and the Olimex LPC-P2129 board(*1) (Philips LPC2129 ARM7TDMI-S). Some minor cleanup has been done in the CAN-code to avoid compiler warnings. Just connect CANL/CANH of both CAN channels and the on-board LEDs will blink. Tested with WinARM 4/05 (gcc 4.0.0). Download the complete source-archive here (timestamp 20050514).
This example-application demonstrates interfacing C-standard I/O ("printf") with the ARM7-UART(0). A minimal set of reentrant support functions for newlib's stdio and malloc is included. This code does not need newlib-lpc itself (some code of newlib-lpc has been copied into the source). It may be easier to port this code to other ARM-based controllers. Additionaly the demo-application includes a small example which shows how to interface the build-in analog-digital converter (ADC) of a LPC2129 (AIN0).
Download the complete archive [here] (timestamp 20070313, makefile, headers, linker-scripts and startup-code included, includes fixes from Alexey Shusharin - Thanks). Code has been tested with arm-elf-gcc V4.0.0 and a Philips LPC2129 ARM7TDMI-S on a LPC-P2129-board.
old version 20060710 still available here
This example-application demonstrates C++ on ARM-controllers with the gnu/gcc-toolchain. The gnu libstdc++ is in use. The newlib and newlib-lpc provide the needed "low level" functions. C++ inheritance and polymorphism are implemented in this example. Target is a Philips LPC2129 ARM7TDMI-S but the code should be rather portable as long as a gnu/gcc-toolchain is used and libstdc++ is supported for the target. Code, linker-scripts and makefile have been tested with WinARM. Download the complete source-archive here (timestamp 20060711, makefile, headers, linker-scripts and startup-code included). The newlib and newlib-lpc (syscalls for Philips LPC2000) must be provided by the build-environment as done by WinARM. (updates: added extern "C", added demo for classes from different object-files).
This example-application demonstrates C++ on ARM-controllers with Cortex-M3 with the GNU cross-toolchain. The gnu libstdc++ is in use. C++ inheritance and polymorphism are implemented in this example. Target is a STM32F10x controller with ARM Cortex-M3 core but the code should be rather portable (i.e. for ARM7TDMI based controllers) as long as a GNU toolchain is used. The application has been tested with Codesourcery CodeBench lite for arm-eabi (Q4/2011) and a MINI STM32 board (medium density STM32F103). The package includes full source-code with a minimal syscall implemenation, Makefile and linker-script.
[Download] of the complete package (timestamp 20120422)Changelog:
This example-application demonstrates how to set-up the compiler and linker to execute selected functions from RAM. Shown in this example:
Target for this example is a Philips LPC2129 ARM7TDMI-S but the code should be rather portable as long as a gcc-toolchain is used. Code, linker-scripts and makefile have been tested with WinARM (4/05). Download the complete source-archive here (timestamp 20050510, makefile, headers, linker-scripts and startup-code included).
This code example demonstrates using the GNU-toolchain with the NXP LPC23xx/24xx family. It shows how to configure and use GPIO (i.e. LED blink, Button read), UART (buffered RX, interrupt) and timer-interrupts. and more. The basic C source-code is from the NXP example-collection (available from nxp.com) and has been adapted and extended a little bit. I have ported the startup assembler-code and added an interrupt-wrapper (incl. nesting) so porting of existing code for other toolchains is rather easy. Also included are scripts to upload the user-application to the internal flash with OpenOCD (testing).
Download the example [here] (timestamp 20070629, makefile, headers, linker-scripts and startup-code, OpenOCD configuration and -scripts included). Code has been tested with arm-elf-gcc V4.1.2 (as in my WinARM 5/07-testing collection) with a NXP LPC2378 ARM7TDMI-S on an Olimex LPC-2378-STK board.Changelog:
A ported version of the Philips LPC213x/LPC214x example "code bundle" to the GNU-toolchain (arm-elf-gcc) can be found on this page.
An example for the LPC2106 on the Olimex LPC-P2106-board comes with the FreeRTOS-code. This is a ported version of the example to the LPC2138. The LED-handling has been adapted to the Keil MCB2130 evaluation-board. The code has been tested with WinARM 3/06 (arm-elf-gcc 4.1.0). [Download] (timestamp 20060519, zip-Archive, ca. 200kBytes).
On my AT91 projects page you can find:
All AT91 projects are now on my AT91 projects page
Please visit my ADI ARM-controller page.
Please visit my STR7 page for information end example-codes.
Please visit this page for further information and examples-applications controllers with a Cortex-M3 or M4 ARM-core.
A short introduction on how to use OpenOCD as flash-programming tool can be found on this page.
I've got the Keil ULINK debugging-inferface togehter with the MCB2100 evalation board. The ULINK-driver on the CD included with the kit and the updated version of the driver available on the Keil Web-Site (written: 7.9.2005) did not work on my development-machine (Windows2000SP4+Rollup, old Intel "BX" board, USB1.1 onboard hostchip). I've spent some hours with this and even installed an additional PCI-USB-Card with a NEC USB 2.0 controller. But the problem is not caused by the hardware. Only a modified inf-file solved this issue. With this inf-File the ULINK could be used with the 1.1 and 2.0 USB-Ports. Get the inoffical inf-File here(zip-Archive, ca. 19kB, Timestamp 20050824).
Update: Keil has fixed the inf-file. An official version is available from keil.com (search the knowledge base for ulink driver).
This sample-application demonstrates interfacing Maxim/Dallas DS1820/DS18S20/DS18B20 with a LPC2106 ARM7TDMI controller using the Onewire-interface. The code detects all DS18x20 sensors on a bus and sends information via UART/RS232. Tested with a Philips LPC2106 at FOSC=14,7MHz/CCLK=58MHz. Timing has to be very precise for Onewire. This preliminary code still has a "tuning value" (see delay.h). Based on the AVR code. Code is not very "clean" since it has just been a test during the "T-Clock" development. Download the ARM7 source code here (Timestamp 20041114, makefile for WinARM and hex-file for the LPC-P2106 board included, 1-Wire Pin: P0.4).
This sample-application demonstrates interfacing a KS0108/KS0107 graphics-LCD with a LPC2106 ARM7TDMI. Based on the "LPC2106 interrupt-UART"-sample (see above) which has been extended with a glcd-module. Find out more on this page.
This sample-application demonstrates interfacing a KS0108/KS0107 graphics-LCD, Onewire Temperature-Sensor and a DCF77 time-signal receiver with a LPC2106 ARM7TDMI. Find out more on this page.
(*) Remark about Olimex ARM Demo-Boards: Please verify that the definitions for connected hardware (like LED, Buttons etc.) in the source-code match the connections on the demo-board in use. Olimex produces different versions of the boards and sometimes the version is not obvious. If in doubt: measure the connections. I have the Olimex LPC P-1 which has been replaced by the LPC-P2106 and the LPC-P2129 which has been replaced by the LPC-P2129-B. Both successor boards differ from the old boards. I.E.: Buttons on LPC-P2129 are connected to P0.10 and P0.11 on the LPC-P2129_B they are connected to P0.15 and P0.16. (Thanks to Chris "O2" for the information about the P2129-B-Board.)
To my Atmel AVR-Projects page
21870 hits since
Last mod.: Sunday, 24-Jun-2012 18:48:23 CEST