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
相关推荐
橘子1317 小时前
Linux网络基础(一)
linux·网络·arm开发
Js_cold1 天前
Verilog函数function
开发语言·fpga开发·verilog
Js_cold1 天前
Verilog任务task
开发语言·fpga开发·verilog
brave and determined1 天前
可编程逻辑器件学习(day3):FPGA设计方法、开发流程与基于FPGA的SOC设计详解
嵌入式硬件·fpga开发·soc·仿真·电路·时序·可编程逻辑器件
咯哦哦哦哦1 天前
vscode arm交叉编译 中 cmakeTools 编译器设置
linux·arm开发·vscode·编辑器
Lee_yayayayaya1 天前
锁相环技术及FPGA实现
fpga开发
阿昭L1 天前
计算机外设与CPU通信
汇编·计算机外设
GilgameshJSS1 天前
STM32H743-ARM例程40-U_DISK_IAP
c语言·arm开发·stm32·单片机·嵌入式硬件
Js_cold2 天前
Verilog局部参数localparam
开发语言·fpga开发·verilog
promising-w2 天前
【FPGA】使用移位实现LED流水灯
fpga开发