60、ARM/汇编实现控制外设

一、编写汇编程序,实现控制外设三个LED灯闪烁

代码:

复制代码
.text 
.global _start
_start: 
        @要使三个灯闪烁 需要设置三个灯的管脚输出高电平
        @对应到STM32MP157AAA的PE10、PF10、PE8

        @使能GPIOE、GPIOF的外设时钟 它们对应的总线均为AHB4
        @GPIOE在[4]位  GPIOF在[5]位
        LDR r0,=0x50000A28  @保存RCC寄存器基地址
        LDR r1,[R0]  @将寄存器数据读取出来保存到r1
        ORR R1,R1,#(0x1<<4)   @[5,4]设置为1
        ORR R1,R1,#(0x1<<5)   @[5,4]设置为1
        str  r1,[r0]    @将修改后的值写回原寄存器

        @设置PE10 PE8为输出模式 
        ldr r0,=0x50006000   @指定PGIOE_MODER基地址
        ldr r1,[r0]
        bic r1,r1,#(0x3<<20)   @先置零 后设置1
        BIC R1,R1,#(0x3<<16) @先置零 后设置1
        orr r1,r1,#(0x1<<20)   @GPIOE_MODEER第[21,20]位要设置为01
        ORR R1,R1,#(0X1<<16)
        str r1,[r0]    @管脚设置为输出模式
        @设置PF10为输出
        ldr r0,=0x50007000   @指定PGIOF_MODER基地址
        ldr r1,[r0]
        bic r1,r1,#(0x3<<20)   @先置零 后设置1
        orr r1,r1,#(0x1<<20)   @GPIOF_MODEER第[21,20]位要设置为01
        str r1,[r0]    @管脚为输出模式      
  
        @设置PE10 PE8为推挽输出
        ldr r0,=0x50006004   @指定基地址
        ldr r1,[r0]
        bic r1,r1,#(0x1<<10)   @[10]设置0
        bic r1,r1,#(0x1<<8)      @[8]设置0
        str r1,[r0]
        @设置PF10为推挽输出
        ldr r0,=0x50007004   @指定基地址
        ldr r1,[r0]
        bic r1,r1,#(0x1<<10)   @[10]设置0
        str r1,[r0]

        @设置PE10 PE8低速输出
        ldr r0,=0x50006008   @指定基地址
        ldr r1,[r0]
        bic r1,r1,#(0x3<<20)   @[21:20]设置0
        bic r1,r1,#(0x3<<16)   @[17:16]设置0
        str r1,[r0]
        @设置PF10低速输出
        ldr r0,=0x50007008   @指定基地址
        ldr r1,[r0]
        bic r1,r1,#(0x3<<20)   @[21:20]设置0
        str r1,[r0]            

        @设置PE10 PE8无上拉下拉电阻
        ldr r0,=0x5000600c   @指定基地址
        ldr r1,[r0]
        bic r1,r1,#(0x3<<20)   @[21:20]设置0
        bic r1,r1,#(0x3<<16)   @[17:16]设置0        
        str r1,[r0]
        @设置PF10无上拉下拉电阻
        ldr r0,=0x5000700C   @指定基地址
        ldr r1,[r0]
        bic r1,r1,#(0x3<<20)   @[21:20]设置0
        str r1,[r0]         

LOOP:  @不让程序结束
        BL  LED1_ON
        BL DELAY
        bl LED1_OFF
        bl DELAY
        B LOOP

LED1_ON:
        @点灯PE10 PE8
        ldr r0,=0x50006014 
        ldr r1,[r0]
        orr r1,r1,#(0x1<<10)
        ORR R1,R1,#(0X1<<8)
        str r1,[r0]
        @点灯PF10
        LDR R0,=0X50007014
        LDR R1,[R0]
        ORR R1,R1,#(0X1<<10)
        str r1,[r0]
        mov pc,lr

LED1_OFF:
        @灭灯
        LDR R0,=0X50006014
        ldr r1,[r0]
        BIC r1,r1,#(0x1<<10)
       BIC R1,R1,#(0X1<<8)
        str r1,[r0]
        LDR R0,=0X50007014
        LDR R1,[R0]
        BIC R1,R1,#(0X1<<10)
        STR R1,[R0]
        mov pc,lr


DELAY:  @延时函数
        LDR R3,=0X10000000
MM:
        CMP R3,#0
        SUBNE R3,R3,#1
        Bne MM
        MOV PC,LR

.end
相关推荐
无情的8869 小时前
硬件中的端接设计
fpga开发·硬件工程
快乐的划水a12 小时前
存储器介绍(2)
fpga开发
leixj02512 小时前
MultiBoot中的两个WatchDog时间设置及跳转调试
fpga开发
CHANG_THE_WORLD13 小时前
6.2.在汇编层面,数据本身没有类型
java·服务器·汇编
切糕师学AI14 小时前
ARM 汇编指令:TST
汇编·arm开发
Zeku15 小时前
20251201 - 指令集架构中ARM和RISC-V的关系
arm开发·架构·risc-v
切糕师学AI15 小时前
ARM 汇编指令:BEQ
汇编·arm开发
若风的雨16 小时前
ARM Trusted Firmware 启动流程:从汇编到 C 语言的渐进式初始化
c语言·汇编·arm开发
博览鸿蒙16 小时前
FPGA 经典面试题目及答案汇总
fpga开发·面试·职场和发展
步达硬件2 天前
【FPGA】DP、HDMI、USB4、GPMI、eDP、LVDS等音视频协议及性能对比
fpga开发