ARMd4 作业

实现3个LED亮灭

.text 
.global _start
_start: 
@----------------------------------1:  enable GPIOF and GPIOE clock in AHB4 bus register RCC_MP_AHB4ENSETR ( base=0x5000 0000  offset=0xA28)
ldr r0, =0x50000A28
ldr r1,[r0]
orr r1, r1,#(0x3<<0x4)            @enable both GPIOE and GPIOF
str r1,[r0]

@----------------------------------2:  init GPIOF
    @@set mode register to output
    ldr r0, =0x50007000
    ldr r1,[r0]
    bic r1,r1,#(0x3<<0x14)
    orr r1, r1,#(0x1<<0x14)
    str r1,[r0]

    @@set output type register to output push-pull
    ldr r0, =0x50007004
    ldr r1,[r0]
    bic r1,r1,#(0x1<<0xa)
    @orr r1, r1,#(0x1<<0xa)
    str r1,[r0]

    @@set output speed to low
    ldr r0, =0x50007008
    ldr r1,[r0]
    bic r1,r1,#(0x3<<0x14)
    @orr r1, r1,#(0x1<<0xa)
    str r1,[r0]

    @@set output to no pull-up or pull-down
    ldr r0, =0x5000700c
    ldr r1,[r0]
    bic r1,r1,#(0x3<<0x14)
    @orr r1, r1,#(0x1<<0xa)
    str r1,[r0]

@----------------------------------3:  init GPIOE(for both bit 8 and 10)
    @@set mode register to output
    ldr r0, =0x50006000
    ldr r1,[r0]
    bic r1,r1,#(0x1B<<0x10)
    orr r1, r1,#(0x5<<0x10)
    str r1,[r0]

    @@set output type register to output push-pull
    ldr r0, =0x50006004
    ldr r1,[r0]
    bic r1,r1,#(0x5<<0x8)
    str r1,[r0]

    @@set output speed to low
    ldr r0, =0x50006008
    ldr r1,[r0]
    bic r1,r1,#(0x1B<<0x10)
    str r1,[r0]

    @@set output to no pull-up or pull-down
    ldr r0, =0x5000600c
    ldr r1,[r0]
    bic r1,r1,#(0x1B<<0x10)
    str r1,[r0]

@----------------------------------4:  light LED1,2,3
loop:
    bl LED1_ON
    bl DELAY
    bl LED1_OFF
    bl DELAY
    bl LED2_ON
    bl DELAY
    bl LED2_OFF
    bl DELAY
    bl LED3_ON
    bl DELAY
    bl LED3_OFF
    bl DELAY
    b loop
    
@----------------------------------5:  functions
LED1_ON:
    @@write 1 to output data register to turn LED1 on
    ldr r0, =0x50006014
    ldr r1,[r0]
    orr r1, r1,#(0x1<<0xa)
    str r1,[r0]
    mov pc, lr

LED1_OFF:
    @@write 0 to output data register to turn LED1 off
    ldr r0, =0x50006014
    ldr r1,[r0]
    bic r1,r1,#(0x1<<0xa)
    str r1,[r0]
    mov pc, lr

LED2_ON:
    @@write 1 to output data register to turn LED2 on
    ldr r0, =0x50007014
    ldr r1,[r0]
    orr r1, r1,#(0x1<<0xa)
    str r1,[r0]
    mov pc, lr

LED2_OFF:
    @@write 0 to output data register to turn LED2 off
    ldr r0, =0x50007014
    ldr r1,[r0]
    bic r1,r1,#(0x1<<0xa)
    @orr r1, r1,#(0x1<<0xa)
    str r1,[r0]
    mov pc, lr

LED3_ON:
    @@write 1 to output data register to turn LED3 on
    ldr r0, =0x50006014
    ldr r1,[r0]
    orr r1, r1,#(0x1<<0x8)
    str r1,[r0]
    mov pc, lr

LED3_OFF:
    @@write 0 to output data register to turn LED3 off
    ldr r0, =0x50006014
    ldr r1,[r0]
    bic r1,r1,#(0x1<<0x8)
    str r1,[r0]
    mov pc, lr

DELAY:
    ldr r0,=0x10000000
FOR:
    sub r0,#0x1
    cmp r0,#0
    bne FOR
    mov pc, lr


.end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值