刚开始学arm9,自己买的TQ2440的开发板,倒腾了好久,总算会控制LED灯了(偶的真正意义上的第一个能正常在arm上运行的程序)
虽然在大神看来很简单,但一个菜鸟自己学的话,还是不太容易入门。往往一个很小的问题就可能困惑很久
所以,我觉得有必要把这个简单而又意义重大的程序记录下来。一来勉励自己,算是学习arm的起步吧;二来也可以给同样初学arm的孩子一个参考。
;开发板上,4个LED分别连在GPB5,GPB6,GPB7,GPB8上,对应低电平LED被点亮
AREA LED_ON,CODE,READONLY ;声明代码段LED_ON
ENTRY ;标志程序入口
CODE32 ;声明32位ARM指令
START
LDR R0,=0x56000010 ;GPBCON寄存器的地址为0x56000010
MOV R1,#0x00015400 ;此3句作用就在于将GPBCON地址给R0
STR R1,[R0] ;并且赋值为0x00015400(将GPB5,GPB6,GPB7,GPB8选为输出端口)
LDR R0,=0x56000014 ;将GPBDAT寄存器地址0x56000014给R0
LEDLOOP
MOV R1,#0x00000070 ;给GPBDAT赋值0x00000070(GPB7,GPB8上的LED亮)
STR R1,[R0]
BL DELAY ;跳到延时子程序进行延时
MOV R1,#0x00000000 ;给GPBDAT赋值0x00000000(4个LED全亮)
STR R1,[R0]
BL DELAY ;调到延时子程序进行延时
B LEDLOOP ;一直循环,结果为:2个LED一直亮,2个LED不停闪烁
DELAY
LDR R3,=0xbffff ;延时子程序
DELAY1
SUB R3,R3,#1
CMP R3,#0x0
BNE DELAY1
MOV PC,LR
MAIN_LOOP
B MAIN_LOOP
END ;程序结束
开发环境为ADS1.2,将此汇编程序加入工程,编译得到.bin文件,然后用DNW软件将其下载到板子上,就可以看见LED灯的闪烁了!是不是好有成就感