新闻  |   论坛  |   博客  |   在线研讨会
板子上的调试--点灯调试法
lionwq | 2008-03-14 14:44:43    阅读:9586   发布文章

一、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 。 

参与讨论
登录后参与讨论
老菜鸟  2008-03-17 14:50:16 

LED直观可靠,用着舒服 呵呵

淡泊以明志 宁静以致远
推荐文章
最近访客