"); //-->
一、WIN下的Makefile
Makefile
asmasm led.s -o led.o //汇编编译器,将.s源文件编译成目标文件
armlink -ro-base 0x0 -entry 0x0 led.o -o led.axf //连接器,参数1:运行.text段起始地址,基地址,参数2:调试用的入口地址;(可以不要)//.axf可调试的elf文件,带调试信息。
fromelf led.axf -bin -output led.bin //去掉.axf的调试信息,生成裸奔bin文件,在板子上执行用(可直接exec) ;
二、点灯****(很吊的debuger) my frist program
3步走:1.IOPMOD:设置gpio的输入输出方向,IO control set output(1)/input(0); 2、3: IOPDATA:直接对LED的管脚赋值 1亮,0灭;
1.IOPMOD
;首先是设置 gpio 的输入/输出方向,这个是通过设置
;S3C4510B 内部 IO 端口模式寄存器 IOPMOD (地址: 0x03FF5000) 来实现的:
ldr r1, =0x0003FFFF ;set all 18 gpios' direction to output
ldr r0, =0x03FF5000
str r1,[r0]
2. ;然后就是设置相关的 gpio 输出 1 ,即点亮相连的 led 。
;这个是通过设置 S3C4510B 内部 IO 端口数据寄存器 IOPDATA (地址: 0x03FF5008) 来实现的:
;实现原理上也很简单,led 灯是和 s3c4510 提供的 IO 相连,具体连接方式如下:
;
; hardware connection
; PIO17 PIO04 PIO05 PIO06 (gpio) ;查datasheet,可以找到置哪位为1既可使对应
;下面的led亮。
; D6 D7 D8 D9 (led) ;
; so output value = 0x00020070 = (0b0000 0000 0000 0010 0000 0000 0111 0000) ;查DS知,给IO寄存器的这几个位赋1后,即可将相应的gpio置1或0,然后控制led亮或灭。
;
;点亮LED,闪烁
ldr r1, =0x00020070 ; show led = 1111
loop:
ldr r0, =0x03FF5008
str r1,[r0]
b loop
3.
;熄灭LED
ldr r1, =0x00000000 ; show led = 0000
loop:
ldr r0, =0x03FF5008
str r1,[r0]
b loop
通过 ADS 1.2 的编译器,执行编译、链接、得到二进制可执行代码:
armasm led_1111.s -o led_1111.o
armlink -ro-base 0x0 -entry 0x0 led_1111.o -o led_1111.axf //file .axf
fromelf led_1111.axf -bin -output led_1111.bin
一块自己制作,焊接,调试的板子,能够首先把点灯的程序烧进去运行,看到 led 在闪烁的时候,至少说明 cpu 和 flash 的连接,焊接都没有问题,晶振也在正常工作。 //晶振??
printf 无法输出之前,led 总是我们最可信赖的 debuger 。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。