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
相关推荐
斑马1396 小时前
ARM学习笔记(二)——ARM汇编基础
汇编·arm开发·arm
Riwuarua6 小时前
从近似0基础开始FPGA开发 -- part.14 JESD204协议、IP核与嵌入式初始化
fpga开发·jesd
wechatbot8889 小时前
【极客互动】企业微信Spring Boot 调度 SearchContact开发自动添加外部联系人网关
汇编·微信·自动化·企业微信·rpa
第二层皮-合肥21 小时前
Vivado 自动生成的 AXI‑Lite 从机 IP 的操作步骤
fpga开发
blue_ice .1 天前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
薛定谔的bug~1 天前
【vivado】10G ibert 工程
fpga开发
博览鸿蒙1 天前
新手怎么挑一块靠谱的FPGA开发板?
fpga开发·fpga·fpga开发板
ARM&开发(Haidong)1 天前
ADRV9026 Linux驱动文档详解
arm开发
斑马1391 天前
ARM学习笔记(一)——基本概念
arm开发·arm
斑马1391 天前
ARM学习笔记(三)——i.MX6ULL—LED点灯
arm开发