准备分析
看似就一个LED,但是S5PV210不同于S3C2440,不是在于LED,而是在于从NandFlash启动的过程中不一样。对于S3C2440,只要程序没有问题,想办法下载程序到NandFlash的0地址处一般都是可以正常运行的,下载的方法无非采用开发板厂家下载BOOTLOADER的方法来下载。S5PV210启动时从NandFlash的0地址拷贝时候会拷贝前16k,但是会读取前16byte进行与和校验值做比较。所以略显麻烦。
资源工具
1.开发板:tiny210v2
2.关于头信息使用:mkv210_image.c
3.交叉工具链:arm-linux-gcc-4.5.1
4.LED1对应的管脚:GPI2_0
着手写程序
- @******************************************************************************
- @ File:start.S
- @ 功能:LED点灯程序,点亮LED1
- @******************************************************************************
- .text
- .global _start
- _start:
- ldr R0,=0xE0200280 @ R0设为GPJ2CON寄存器。此寄存器
- @ 用于选择端口J各引脚的功能:
- @ 是输出、是输入、还是其他
- mov R1,#0x00000001
- str R1,[R0] @ 设置GPJ2_0为输出口, 位[10:9]=0b01
- ldr R0,=0xE0200284 @ R0设为GPJ2DAT寄存器。此寄存器
- @ 用于读/写端口GPJ2各引脚的数据
- mov R1,#0x00000000 @ 此值改为0x00000001,
- @ 可让LED1熄灭
- str R1,[R0] @ GPJ2_0输出0,LED1点亮
- MAIN_LOOP:
- b MAIN_LOOP
Makefile:
- led.bin: start.o
- arm-linux-ld -Ttext 0x0 -o led.elf $^
- arm-linux-objcopy -O binary led.elf led.bin
- arm-linux-objdump -D led.elf > led_elf.dis
- gcc mkv210_image.c -o mkv210
- ./mkv210 led.bin 210.bin
- %.o : %.S
- arm-linux-gcc -o $@ $< -c
- %.o : %.c
- arm-linux-gcc -o $@ $< -c
- clean:
- rm *.o *.elf *.bin *.dis mkv210 -f
下载运行
1.根据开发板使用手册先将superboot烧到SD卡上,在images/FriendlyARM.ini中添加"USB-Mode = yes",然后以SD卡方式启动开发板。
2.按照下图配置进行烧写,这样就烧写到了NandFlash的0地址处。
运行调试
程序简单,运行正常。