ARM跑马灯·汇编程序详细解析 .

本人使用的是TQ2440开发板,主芯片是S3C2440,它一共有130个I/O端口,分为9组:GPA、GPB...GPJ。

   对于这几组GPIO引脚,它们的寄存器是相似的:

   GPxCON:用于选择引脚功能

   GPxDAT:用于读、写引脚数据

   GPxUP:用于确定是否使用内部上拉电阻 ,其中无GPAUP寄存器!

注意:PORT A与PORT B~PORT J 在功能选择方面有所不同。

GPxCON (x:B~J):00-----表示输入

                              01-----表示输出

                             10-----表示特殊功能

                              11-----保留不用

GPXUP:某位为1时,相应的引脚无内部上拉电阻;为0时,相应的引脚使用内部上拉电阻。

    我所使用的开发板LED部分的连接图:

其中:      nLED_1------------GPB5

             nLED_2------------GPB6

             nLED_3------------GPB7

             nLED_4------------GPB8

    通过查S3C2440的手册,我们得到:

        Register         Address

      GPBCON         0x56000010

      GPBDAT         0x56000014

       GPBUP           0x56000018

我们设置GPB5,GPB6,GPB7,GPB8为输出模式,则:

   GPBCON应该设置为:0b0000,0000,0000,0001,0101,0100,0000,0000=0x15400。

   GPBDAT 寄存器对应位为1 灯灭 ,为0灯亮!(由电路图可知)

   GPBUP5--GPBUP8设置为禁止上拉电阻,即:

   GPBUP设置为:0b0011,1110,0000=0x1E0。

到此,我们为程序所作的准备工作已经结束了,下面是程序代码:

       GPBCON   EQU        0x56000010

       GPBDAT     EQU       0x56000014

       GPBUP      EQU        0x56000018

        EXPORT LEDTEST

AREA LEDTESTASM ,CODE,READONLY ;该指令定义了一个代码段,段名为LEDTEST,属性只读

      ENTRY    ;程序入口标示符

LEDTEST

      ldr r0,=GPBCON      ;设置GPB5--GPB8 为output

      ldr r1,[r0]

      bic r1,r1,#0xFFF00

      orr r1,r1,#0x15400

      str r1,[r0]

      ldr r0,=GPBUP    ;设置GPB5--GPB8禁止上拉电阻

      ldr r1,[r0]

      orr r1,#0x1E0

      str r1,[r0]

looptest

      ldr r2,=GPBDAT

   

     ldr r3,[r2]

     bic r3,r3,#0xFFF

     orr r3,r3,#0x51F

     str r3,[r2]           ;全部点亮

      ldr r0,=0x2ffff

     bl delay

      

     ldr r3,[r2]

     bic r3,r3,#0xFFF

     str r3,[r2]           ;全部灭

      ldr r0,=0x2ffff

     bl delay

      ldr r3,[r2]

     bic r3,r3,#0xFFF

     orr r3,r3,#0x51F

     str r3,[r2]           ;全部点亮

      ldr r0,=0x2ffff

     bl delay

      ldr r3,[r2]

     bic r3,r3,#0xFFF

     orr r3,r3,#0x7DF

     str r3,[r2]           ;点亮与GPB5所连接的LED

      ldr r0,=0x2ffff

     bl delay

   

      ldr r3,[r2]

     bic r3,r3,#0xFFF

     orr r3,r3,#0x7BF

     str r3,[r2]           ;点亮与GPB6相连的LED

      ldr r0,=0x2ffff

     bl delay

     ldr r3,[r2]

     bic r3,r3,#0xFFF

     orr r3,r3,#0x77F

     str r3,[r2]           ;点亮和GPB7相连的LED

      ldr r0,=0x2ffff

     bl delay

    

     bic r3,r3,#0xFFF

     orr r3,r3,#0x5FF

     str r3,[r2]           ;点亮和GPB8相连的LED

      ldr r0,=0x2ffff

     bl delay

   

     b looptest

delay

     sub r0,r0,#1

     cmp r0,#0x0

     bne delay

     mov pc,lr ;返回

END

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值