ARM4 汇编点亮灯



.text 
.global _start
_start: 


LDR R0,=0X50000A28   @设置时钟寄存器地址用于读取时钟寄存器中的值
LDR  R1,[R0]   @读取时钟寄存器中的内容
ORR  R1,R1,#(0x3<<4)  @设置让GPIO的E口使能值
STR R1,[R0]  @将设置好的时钟GPIOE口寄存器值放到时钟寄存器对应的地址中


LDR R0,=0X50006000   @找到gpio口的工作模式寄存器的地址 GPIOE_MODER[21:20]->01 为输出模式
LDR R1,[R0]    @读取gpio工作模式寄存器地址中的内容到R1中
BIC  R1,R1,#(0X33<<16)   @按位清先让工作模式寄存器的21,20两位清零,接下来对这两位置位设置使其gpioE10引脚工作在输出模式
ORR R1,R1,#(0X01<<20)   @工作模式的值01送入寄存器中用或的方式
ORR R1,R1,#(0X01<<16)
STR R1,[R0]  @将设置组装好的工作模式值放入工作模式寄存器中
 
LDR R0,=0X50006004   @找出GPIOE_OTYPER 输出方式的寄存器地址,将对应引脚位的输出方式改为推挽方式0
LDR R1,[R0 ]  @先读出gpioe端口输出方式寄存器的值,再对其进行修改
BIC R1,R1,#(0x5<<8)  @让端口第4引脚的位输出模式设置为0,为推挽输出
STR R1,[R0]  @将设置好的输出模式寄存器值送入对应寄存器的内存地址中

LDR R0,=0X50006008  @设置gpio的数据传输速度模式,找出传输速度寄存器的内存地址放在r0寄存器中,防止地址不合法
LDR R1,[R0]  @取出R0内存地址的值到R1中,将寄存器中管理pe10对应的位修改为低速模式00
BIC  R1,R1,#(0X33<<16)  @对应位清零送入R1寄存器中
STR  R1,[R0]   @将修改好的值送到速度寄存器对应的地址内存上

LDR R0,=0X5000600C   @设置上下拉电阻寄存器,先找出上下拉电阻模式的寄存器地址再取出地址中的值
LDR R1,[R0]  @取出上下拉方式寄存器的值设置为00无上拉下拉模式
BIC  R1,R1,#(0x33<<16) @清零
STR  R1,[R0]   @向对应地址中写入修改好的值

@**********************GPIOF_PF10*******************************




LDR R0,=0X50007000   @找到gpio口的工作模式寄存器的地址 GPIOF_MODER[21:20]->01 为输出模式
LDR R1,[R0]    @读取gpio工作模式寄存器地址中的内容到R1中
BIC  R1,R1,#(0X3<<20)   @按位清先让工作模式寄存器的21,20两位清零,接下来对这两位置位设置使其gpioE10引脚工作在输出模式

ORR R1,R1,#(0X01<<20)    @工作模式的值01送入寄存器中用或的方式
STR R1,[R0]  @将设置组装好的工作模式值放入工作模式寄存器中
 
LDR R0,=0X50007004   @找出GPIOE_OTYPER 输出方式的寄存器地址,将对应引脚位的输出方式改为推挽方式0
LDR R1,[R0 ]  @先读出gpioe端口输出方式寄存器的值,再对其进行修改
BIC R1,R1,#(0x1<<10)  @让端口第4引脚的位输出模式设置为0,为推挽输出
STR R1,[R0]  @将设置好的输出模式寄存器值送入对应寄存器的内存地址中

LDR R0,=0X50007008  @设置gpio的数据传输速度模式,找出传输速度寄存器的内存地址放在r0寄存器中,防止地址不合法
LDR R1,[R0]  @取出R0内存地址的值到R1中,将寄存器中管理pe10对应的位修改为低速模式00
BIC  R1,R1,#(0X3<<20)  @对应位清零送入R1寄存器中
STR  R1,[R0]   @将修改好的值送到速度寄存器对应的地址内存上

LDR R0,=0X5000700C   @设置上下拉电阻寄存器,先找出上下拉电阻模式的寄存器地址再取出地址中的值
LDR R1,[R0]  @取出上下拉方式寄存器的值设置为00无上拉下拉模式
BIC  R1,R1,#(0x3<<20) @清零
STR  R1,[R0]   @向对应地址中写入修改好的值

@**********************GPIOF_PF10*******************************

LOOP:
        BL LED_ON
        BL  delay
      BL  LED_OFF
      BL  delay
         BL  LED2_ON
          BL  delay
       BL  LED2_OFF
          BL  delay
        BL LOOP


@封装汇编的延时函数
delay:
    LDR R1,=0X10000000
mm:
    cmp R1,#0
    SUBNE R1,R1,#1
    BNE mm
    mov pc,lr

LED_OFF:
LDR R0,=0x50006014 @设置数据输出寄存器输出的值为0还是1高低电平,先找到输出数据寄存器的地址GPIOE_ODR直接输出
LDR R1,[R0] @取出数据传出寄存器地址对应的值
BIC R1,R1,#(0x5<<8) @修改对相应gpioe P10位的值第10位设置为高电平1
STR  R1,[R0] @将修改好的高电位值输出传回数据传输寄存器对应的地址内存中
MOV PC,lr @将跳转前保存的下一条要执行的指令程地址传给要执行程序寄存器返回继续执行
LED2_OFF:
LDR R0,=0x50007014 @设置数据输出寄存器输出的值为0还是1高低电平,先找到输出数据寄存器的地址GPIOE_ODR直接输出
LDR R1,[R0] @取出数据传出寄存器地址对应的值
BIC R1,R1,#(0x1<<10) @修改对相应gpioe P10位的值第10位设置为高电平1
STR  R1,[R0] @将修改好的高电位值输出传回数据传输寄存器对应的地址内存中
MOV PC,lr @将跳转前保存的下一条要执行的指令程地址传给要执行程序寄存器返回继续执行


LED_ON:
LDR R0,=0x50006014 @设置数据输出寄存器输出的值为0还是1高低电平,先找到输出数据寄存器的地址GPIOE_ODR直接输出
LDR R1,[R0] @取出数据传出寄存器地址对应的值
ORR R1,R1,#(0x5<<8) @修改对相应gpioe P
、10位的值第10位设置为高电平1
STR  R1,[R0] @将修改好的高电位值输出传回数据传输寄存器对应的地址内存中
mov pc,lr
LED2_ON:
LDR R0,=0x50007014 @设置数据输出寄存器输出的值为0还是1高低电平,先找到输出数据寄存器的地址GPIOE_ODR直接输出
LDR R1,[R0] @取出数据传出寄存器地址对应的值
ORR R1,R1,#(0x1<<10) @修改对相应gpioe P10位的值第10位设置为高电平1
STR  R1,[R0] @将修改好的高电位值输出传回数据传输寄存器对应的地址内存中
mov pc,lr
.end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值