【OK210试用体验】裸机篇 -- 点亮LED增强版
上个帖子讲到了点亮一个LED的程序的编写全过程和烧写体验,完成这些,就算是对这块S5PV210芯片入门了,但是点亮一个LED,显然不能尽兴,我们接着这节奏,继续编写流水灯程序。因为流水灯的程序相对来说还是比较多的,所有应用 C和ASM混合编写,这也是开这个帖子来分享的原因哈。
汇编程序编写
在自己创建一个文件夹下创建一个leds_on.S文件,编写如下代码:
/* leds_on.S */
.global _start
_start :
bl main @jump to main function
halt :
b halt
C语言程序编写
在文件中创建 main.c文件并且编写代码:- /* main.c */
-
- #define GPMP0_4CON *((volatile unsigned int *) 0xE0200340)
- #define GPMP0_4DAT *((volatile unsigned int *) 0xE0200344)
-
- void delay(volatile unsigned int time)
- {
- volatile unsigned int cnt = 0xFFFF;
-
- while (time--)
- for (; cnt; cnt--) ;
- }
-
- int main(void)
- {
- int toggle = 0;
- GPMP0_4CON &= ~(0XFFFF << 16);
- GPMP0_4CON |= 0x1111 << 16;
-
- while (1)
- {
- GPMP0_4DAT &= ~(0XF << 4);
-
- if (toggle)
- GPMP0_4DAT |= 1 << 4;
- else
- GPMP0_4DAT |= 1 << 5;
-
- toggle != toggle;
- delay(0x50000);
- }
-
- return 0;
- }
Makefile
在点亮第一个LED的时候我们所用的Makefile,在这个文件的基础上修改一下就可以这个程序上使用- led.bin : led.o leds_on.o
- arm-linux-ld -Ttext 0xD0020010 -o led.elf $^
- arm-linux-objcopy -O binary led.elf $@
- arm-linux-objdump -D led.elf > led.dis
-
- led.o : main.c
- arm-linux-gcc -c [ DISCUZ_CODE_3 ]lt; -o $@
-
- leds_on.o : leds_on.S
- arm-linux-gcc -c [ DISCUZ_CODE_3 ]lt; -o $@
-
- clean :
- rm *.o *.elf *.bin *.dis
用make命令实现编译链接,生成对应的 .bin 文件。
实验现象
将生成的bin和对应的头信息 一并烧入SD卡,然后将SD卡插入开发板上,用SD卡启动,即可观察到LED灯交替闪烁现象。