华清远见嵌入式学习——ARM——作业2

目录

作业要求:

现象:

代码:

思维导图:

模拟面试题:


作业要求:

GPIO实验------3颗LED灯的流水灯实现

现象:

代码:

bash 复制代码
.text 
.global _start
_start: 
    
    @设置GPIOEF时钟使能    0X50000A28
    LDR R0,=0X50000A28         @指定寄存器地址
    LDR R1,[R0]                @将寄存器数值取出来放在R1中
    ORR R1,R1,#(0x3<<4)        @将第4位设置为1
    STR R1,[R0]                @将修改后的值写回去
 
    /************对led1的设置************/
    @设置PE10为输出  GPIOE_MODER[21:20]->01   0X50006000
    ldr r0,=0x50006000         @指定寄存器地址
    ldr r1,[r0]                @将寄存器数值取出来放在r1中
    bic r1,r1,#(0x3<<20)      @将第20位和21位清零
    orr r1,r1,#(0x1<<20)      @将第20位和21位设置为01
    STR r1,[r0]

 
    @设置PE10为推挽输出 GPIOE_OTYPER[10]->0  0X50006004
    ldr r0,=0x50006004
    ldr r1,[r0]
    bic r1,r1,#(0x1<<10)
    STR r1,[r0]
 
    @设置PE10为低速输出 GPIOE_OSPEEDR[21:20]->00  0x50006008
    ldr r0,=0x50006008
    ldr r1,[r0]
    bic r1,r1,#(0x3<<20)
    STR r1,[r0]
 
    @设置PE10输出时无上拉下拉电阻  GPIOE_PUPDR[21:20]->00  0X5000600C
    ldr r0,=0x5000600c
    ldr r1,[r0]
    bic r1,r1,#(0x3<<20)
    STR r1,[r0]

    /************对led2的设置************/
    @设置PF10为输出  GPIOF_MODER[21:20]->01   0X50007000
    ldr r0,=0x50007000         @指定寄存器地址
    ldr r1,[r0]                @将寄存器数值取出来放在r1中
    bic r1,r1,#(0x3<<20)      @将第20位和21位清零
    orr r1,r1,#(0x1<<20)      @将第20位和21位设置为01
    STR r1,[r0]

 
    @设置PF10为推挽输出 GPIOF_OTYPER[10]->0  0X50007004
    ldr r0,=0x50007004
    ldr r1,[r0]
    bic r1,r1,#(0x1<<10)
    STR r1,[r0]
 
    @设置PF10为低速输出 GPIOF_OSPEEDR[21:20]->00  0x50007008
    ldr r0,=0x50006008
    ldr r1,[r0]
    bic r1,r1,#(0x3<<20)
    STR r1,[r0]
 
    @设置PF10输出时无上拉下拉电阻  GPIOF_PUPDR[21:20]->00  0X5000700C
    ldr r0,=0x5000700c
    ldr r1,[r0]
    bic r1,r1,#(0x3<<20)
    STR r1,[r0]


    /************对led3的设置************/ 
    @设置PE8为输出  GPIOE_MODER[17:16]->01   0X50006000
    ldr r0,=0x50006000         @指定寄存器地址
    ldr r1,[r0]                @将寄存器数值取出来放在r1中
    bic r1,r1,#(0x3<<16)      @将第20位和21位清零
    orr r1,r1,#(0x1<<16)      @将第20位和21位设置为01
    STR r1,[r0]

 
    @设置PE8为推挽输出 GPIOE_OTYPER[8]->0  0X50006004
    ldr r0,=0x50006004
    ldr r1,[r0]
    bic r1,r1,#(0x1<<8)
    STR r1,[r0]
 
    @设置PE8为低速输出 GPIOE_OSPEEDR[21:20]->00  0x50006008
    ldr r0,=0x50006008
    ldr r1,[r0]
    bic r1,r1,#(0x3<<20)
    STR r1,[r0]
 
    @设置PE8输出时无上拉下拉电阻  GPIOE_PUPDR[17:16]->00  0X5000600C
    ldr r0,=0x5000600c
    ldr r1,[r0]
    bic r1,r1,#(0x3<<16)
    STR r1,[r0]

 
flash:
    @ led1亮
    bl led1_on
    bl delay

    @ led1灭且led2亮
    bl led1_off
    bl led2_on
    bl delay

    @ led2灭且led3亮
    bl led2_off
    bl led3_on
    bl delay

    @ led3灭 再 三灯同时亮
    bl led3_off
    bl led1_on
    bl led2_on
    bl led3_on
    bl delay

    @ 三灯同时灭
    bl led1_off
    bl led2_off
    bl led3_off
    bl delay

    b flash

led1_on:
    @设置PE10输出高电平     GPIOE_ODR[10]->1    0X50006014
    ldr r0,=0x50006014
    ldr r1,[r0]
    orr r1,r1,#(0x1<<10)
    STR r1,[r0]
    mov pc,lr

led1_off:
    @设置PE10输出低电平     GPIOE_ODR[10]->0    0X50006014
    ldr r0,=0x50006014
    ldr r1,[r0]
    bic r1,r1,#(0x1<<10)
    STR r1,[r0]
    mov pc,lr

led2_on:
    @设置PF10输出高电平     GPIOF_ODR[10]->1    0X50007014
    ldr r0,=0x50007014
    ldr r1,[r0]
    orr r1,r1,#(0x1<<10)
    STR r1,[r0]
    mov pc,lr

led2_off:
    @设置PF10输出低电平     GPIOF_ODR[10]->0    0X50007014
    ldr r0,=0x50007014
    ldr r1,[r0]
    bic r1,r1,#(0x1<<10)
    STR r1,[r0]
    mov pc,lr

led3_on:
    @设置PE8输出高电平     GPIOE_ODR[8]->1    0X50006014
    ldr r0,=0x50006014
    ldr r1,[r0]
    orr r1,r1,#(0x1<<8)
    STR r1,[r0]
    mov pc,lr

led3_off:
    @设置PE8输出低电平     GPIOE_ODR[8]->0    0X50006014
    ldr r0,=0x50006014
    ldr r1,[r0]
    bic r1,r1,#(0x1<<8)
    STR r1,[r0]
    mov pc,lr

delay:
    @延时函数
    ldr r2,=0x10000000
dd:
    cmp r2,#0
    subne r2,#1
    bne dd
    mov pc,lr	

.end

思维导图:

模拟面试题:

相关推荐
handler013 小时前
从源码到二进制:深度拆解 Linux 下 C 程序的编译与链接全流程
linux·c语言·开发语言·c++·笔记·学习
电子云与长程纠缠3 小时前
UE5 两种方式解决Decal Actor贴花拉伸问题
学习·ue5·游戏引擎
red_redemption4 小时前
自由学习记录(172)
学习·cache line 64b·重用距离
阿荻在肝了4 小时前
Agent学习六:LangGraph学习-持久化与记忆一
python·学习·agent
寒秋花开曾相惜6 小时前
(学习笔记)4.1 Y86-64指令集体系结构(4.1.4 Y86-64异常&4.1.5 Y86-64程序)
开发语言·jvm·数据结构·笔记·学习
莹宝思密达6 小时前
【AI学习】 playwright-cli + SKILL 替换 chrom-devTools-MCP
学习
cyr___7 小时前
Unity教程(二十七)技能系统 黑洞技能(下)黑洞状态
学习·游戏·unity·游戏引擎
豆瓣鸡8 小时前
Gradle学习
学习
海绵宝宝的月光宝盒8 小时前
2-非金属材料
经验分享·笔记·学习·其他·职场和发展·课程设计·制造
小饕9 小时前
RAG学习之- RAG 数据导入完整指南
人工智能·python·学习