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
相关推荐
坏孩子的诺亚方舟10 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
FPGA小徐10 天前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
AndyHeee10 天前
【SVC、PendSV(系统异常) 与 外设 IRQ 、NVIC笔记】
arm开发
FPGA小徐10 天前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
暮云星影10 天前
瑞芯微rk3588利用Rockchip NPU运行大语言模型(LLM)
arm开发·人工智能·语言模型·自然语言处理
techdashen10 天前
绕过系统 ICMP:用 rawsock、Npcap 和 WMI 找到默认网卡
开发语言·arm开发·rust
ThornArmor10 天前
【工具篇·番外】跨语言生态的主权回收:基于 ISA 说明书的 4-bit 双向汇编系统全线封顶
c语言·开发语言·汇编·c++·重构·架构
振南的单片机世界10 天前
ARM中断比51快在哪?硬件压栈+NVIC集中管理
arm开发·stm32·单片机·嵌入式硬件
墨绿色的摆渡人10 天前
论文笔记(一百三十七)Learning Dual-Arm Push and Grasp Synergy in Dense Clutter
arm开发·论文阅读
暮云星影11 天前
全志linux开发屏幕适配(一)屏幕参数设置说明
linux·arm开发