LinuxCNCKnowledgeBase | RecentChanges | PageIndex | Preferences | LinuxCNC.org

How to Start with ARM Development

jjf 2011-02-28

find AVR page here http://wiki.linuxcnc.org/cgi-bin/wiki.pl?AVR
FPGA: http://wiki.linuxcnc.org/cgi-bin/wiki.pl?FPGA

ARM Micros and Boards


The STM32F207xx chips from ST have PTP. See Reference manual RM0033
file CD00225773.pdf, chapter 28.5.9

NXP library for motor control, MCPWM
Application Notes: AN10898.pdf AN10661.pdf

Luminary Micro / TI
The EKC-LM3S8962 may be a good starting point for development (Farnell 94)
3ph-PWM, 2x quadrature decoder with velocity, A/D(10bit), IEEE 1588 PTP, lwIP and uIP

My Setup

Ubuntu 10.10 64bit
Hardware http://www.luminarymicro.com/products/lm3s8962_can_ethernet_evaluation_kit.html
Software http://www.luminarymicro.com/products/software_updates.html download SW-EK-LM3S8962-6852.exe


I installed with Synaptic:


sudo apt-get install openocd
sudo rmmod ftdi_sio

Compile StellarisWare

assume pwd=<???>
extract SW-EK-LM3S8962-6852.exe (nautilus:open context menue, extract here)
cd SW-EK-LM3S8962-6852
gedit makedefs and change the PREFIX to:
#PREFIX=${shell type arm-stellaris-eabi-gcc > /dev/null 2>&1 &&
# echo arm-stellaris-eabi || echo arm-none-eabi}
PREFIX= arm-linux-gnueabi
check that /???/StellarisWare/Lib/SW-EK-LM3S8962-6852/boards/ek-lm3s8962/hello/gcc exists
make clean
check that /???/StellarisWare/Lib/SW-EK-LM3S8962-6852/boards/ek-lm3s8962/hello/gcc not exists
check that /???/StellarisWare/Lib/SW-EK-LM3S8962-6852/boards/ek-lm3s8962/hello/gcc exists
and hello.bin is there

Download with openocd

Userguide is here http://openocd.berlios.de/doc/pdf/openocd.pdf
look to /usr/share/openocd/scripts/
/usr/share/openocd/scripts/interface/luminary.cfg is for the build-in jtag interface
with lsusb see the id's
my lm3s8962.cfg
# target: lm3s8962 
if { [info exists CHIPNAME] } {	
} else {	 
   set  _CHIPNAME lm3s8962
if { [info exists CPUTAPID ] } {
} else {
   set _CPUTAPID 0x3ba00477
jtag_khz 500
jtag_nsrst_delay 100
jtag_ntrst_delay 100
reset_config srst_only
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 1 -irmask 0xf -expected-id $_CPUTAPID
target create $_TARGETNAME cortex_m3 -chain-position $_CHIPNAME.cpu -variant lm3s
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size 0x4000
flash bank $_FLASHNAME stellaris 0 0 0 0 0 $_TARGETNAME

mkdir <arm-dir> && cd <arm-dir>
cp /usr/share/openocd/scripts/interface/luminary.cfg luminary.cfg
lm3s8962.cfg is in <arm-dir>
<arm-dir>$ openocd -f luminary.cfg -f lm3s8962.cfg
Open On-Chip Debugger 0.4.0 (2010-10-08-15:44)
Licensed under GNU GPL v2
For bug reports, read	http://openocd.berlios.de/doc/doxygen/bugs.html
500 kHz
jtag_nsrst_delay: 100
jtag_ntrst_delay: 100
srst_only separate srst_gates_jtag srst_open_drain
Info : clock speed 500 kHz
Info : JTAG tap: lm3s8962.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3)
Info : lm3s8962.cpu: hardware has 6 breakpoints, 4 watchpoints
open a new terminal and
jjf@jf-q4:~$ telnet localhost 4444
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> scan_chain
   TapName             Enabled  IdCode     Expected   IrLen IrCap IrMask
-- ------------------- -------- ---------- ---------- ----- ----- ------
 0 lm3s8962.cpu           Y     0x3ba00477 0x3ba00477     4 0x01  0x0f
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x81000000 pc: 0x00000118 msp: 0x200000f8
> flash probe 0
flash 'stellaris' found at 0x00000000
flash protect_check 0
successfully checked protect state
> flash info 0
#0 : stellaris at 0x00000000, size 0x00040000, buswidth 0, chipwidth 0
	#  0: 0x00000000 (0x400 1kB) not protected
	#  1: 0x00000400 (0x400 1kB) not protected
	#255: 0x0003fc00 (0x400 1kB) not protected
TI/LMI Stellaris information: Chip is class 1 (Fury) LM3S8962 rev A2
did1: 0x10a6402d, arch: 0x10a6402d, eproc: ARMv7M, ramsize: 64k, flashsize: 256k
master clock: 12000kHz (30%), rcc is 0x7802810, rcc2 is 0x0
pagesize: 1024, pages: 256, lockbits: 128, pages per lockbit: 2
>flash erase_sector 0 0 4
erased sectors 0 through 4 on flash bank 0 in 0.132000s
> flash write_image hello.bin 0 bin
wrote 3144 bytes from file hello.bin in 0.280015s (10.965 kb/s)
JTAG tap: lm3s8962.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3)
and you see Hello World! in the display!


unfortunately enet_io example do not work with this compiler version!

download http://www.codesourcery.com/sgpp/lite/arm/portal/package7813/public/arm-none-eabi/arm-2010.09-51-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
works on 64bit compiling enet_io
extract to <path>
export PATH=<path>/arm-2010.09/bin:$PATH
change in makedefs PREFIX=arm-none-eabi
Ping statistics for non-realtime for enet_io example
jjf@jf-q4:$ ping -c 20
PING ( 56(84) bytes of data.
64 bytes from icmp_req=1 ttl=255 time=0.150 ms
64 bytes from icmp_req=2 ttl=255 time=0.167 ms
64 bytes from icmp_req=19 ttl=255 time=0.137 ms
64 bytes from icmp_req=20 ttl=255 time=0.133 ms

--- ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 18995ms
rtt min/avg/max/mdev = 0.123/0.144/0.182/0.021 ms


http://www.kunen.org/uC/LM3S1968/part1.html (a bit outdated)
http://www.dwelch.com/lumicro/ (on the bottom bootloader)
http://www.open-research.org.uk/ARMuC/ (wiki)

LinuxCNCKnowledgeBase | RecentChanges | PageIndex | Preferences | LinuxCNC.org
This page is read-only. Follow the BasicSteps to edit pages. | View other revisions
Last edited July 7, 2012 12:16 pm by Archivist (diff)
Published under a Creative Commons License