【Day4】ARM

思维导图:
在这里插入图片描述

作业:
01_cortex-A7核LED灯实验
让LD1、LD2、LD3轮流亮起
汇编语言实现
asm-led.S:

.text
.global _start
_start:
/LED1点灯****/
/初始化RCC章节/
RCC_INIT:
@通过RCC_MP_AHB4ENSETR寄存器,使能GPIOE组控制器
@1.准备一块地址0x50000A28空间
ldr r0,=0x50000A28
@2.将地址0x50000A28空间内容读出来
ldr r1,[r0]
@3.使能GPIOE组控制器,将地址0x50000A28空间第4位写1
orr r1,r1,#(0x1<<4)
@4.修改后的值,写回地址0x50000A28空间
str r1,[r0]
@通过RCC_MP_AHB4ENSETR寄存器,使能GPIOF组控制器
@1.准备一块地址0x50000A28空间
ldr r0,=0x50000A28
@2.将地址0x50000A28空间内容读出来
ldr r1,[r0]
@3.使能GPIOE组控制器,将地址0x50000A28空间第5位写1
orr r1,r1,#(0x1<<5)
@4.修改后的值,写回地址0x50000A28空间
str r1,[r0]

/初始化GPIO章节/
MODER_GPIO:
@1.设置GPIO引脚为输出模式
/*LD1 ------> SOC ------> PE10 ------>
GPIOE_MODER[21:20] = 01 ------>0x50006000[21:20] = 01 */
ldr r0,=0x50006000
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
orr r1,r1,#(0x1<<20)
str r1,[r0]

/*LD2 ------> SOC  ------> PF10 ------> 
GPIOF_MODER[21:20] = 01 ------> 0x50007000 [21:20] = 01*/
ldr r0,=0x50007000
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
orr r1,r1,#(0x1<<20)
str r1,[r0]

/*LD3 ------> SOC  ------> PE8  ------> 
GPIOE_MODER[17:16] = 01 ------> 0x50006000 [17:16] = 01*/
ldr r0,=0x50006000
ldr r1,[r0]
bic r1,r1,#(0x3<<16)
orr r1,r1,#(0x1<<16)
str r1,[r0]

@2.设置GPIO引脚为推挽输出模式
/*LD1 ------> SOC  ------> PE10 ------> 
GPIOE_OTYPER[10] = 0 ------> 0x50006004[10] = 0 */
ldr r0,=0x50006004
ldr r1,[r0]
bic r1,r1,#(0x1<<10)
str r1,[r0]

/*LD2 ------> SOC  ------> PF10 ------> 
GPIOF_OTYPER[10] = 0 ------> 0x50007004[10] = 0 */
ldr r0,=0x50007004
ldr r1,[r0]
bic r1,r1,#(0x1<<10)
str r1,[r0]

/*LD3 ------> SOC  ------> PE8  ------> 
GPIOE_OTYPER[8] = 0 ------> 0x50006004[8] = 0 */
ldr r0,=0x50006004
ldr r1,[r0]
bic r1,r1,#(0x1<<8)
str r1,[r0]

@3.设置GPIO引脚为低速
/*LD1 ------> SOC  ------> PE10 ------> 
GPIOE_OSPEEDR[21:20] = 00 ------> 0x50006008[21:20] = 00*/
ldr r0,=0x50006008
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
str r1,[r0]

/*LD2 ------> SOC  ------> PF10 ------> 
GPIOF_OSPEEDR[21:20] = 00 ------> 0x50007008[21:20] = 00*/
ldr r0,=0x50007008
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
str r1,[r0]

/*LD3 ------> SOC  ------> PE8  ------> 
GPIOE_OSPEEDR[17:16] = 00 ------> 0x50006008[17:16] = 00*/
ldr r0,=0x50006008
ldr r1,[r0]
bic r1,r1,#(0x3<<16)
str r1,[r0]

@4.设置GPIO引脚为禁止上下拉电阻
/*LD1 ------> SOC  ------> PE10 ------> 
GPIOE_PUPDR[21:20] = 00 ------> 0x5000600C[21:20] = 00*/
ldr r0,=0x5000600c
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
str r1,[r0]

/*LD2 ------> SOC  ------> PF10 ------> 
GPIOF_PUPDR[21:20] = 00 ------> 0x5000700C[21:20] = 00*/
ldr r0,=0x5000700c
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
str r1,[r0]

/*LD3 ------> SOC  ------> PE8  ------> 
GPIOE_PUPDR[17:16] = 00 ------> 0x5000600C[17:16] = 00*/
ldr r0,=0x5000600c
ldr r1,[r0]
bic r1,r1,#(0x3<<16)
str r1,[r0]

LOOP:
bl LD1_ON
bl delay_1s
bl LD1_OFF
bl delay_1s
bl LD2_ON
bl delay_1s
bl LD2_OFF
bl delay_1s
bl LD3_ON
bl delay_1s
bl LD3_OFF
bl delay_1s
b LOOP

LD1_ON:
@GPIOE_ODR输出高电平
/*LD1 ------> SOC ------> PE10 ------>
GPIOE_ODR[10] =1(点亮) ------> 0x50006014[10] */
ldr r0,=0x50006014
ldr r1,[r0]
orr r1,r1,#(0x1<<10)
str r1,[r0]
@函数返回
mov pc,lr

LD1_OFF:
@GPIOE_ODR输出低电平
/*LD1 ------> SOC ------> PE10 ------>
GPIOE_ODR[10] =0(熄灭) ------> 0x50006014[10] */
ldr r0,=0x50006014
ldr r1,[r0]
bic r1,r1,#(0x1<<10)
str r1,[r0]
@函数返回
mov pc,lr

LD2_ON:
@GPIOE_ODR输出高电平
/*LD2 ------> SOC ------> PF10 ------>
GPIOE_ODR[10] =1(点亮) ------> 0x50007014[10] */
ldr r0,=0x50007014
ldr r1,[r0]
orr r1,r1,#(0x1<<10)
str r1,[r0]
@函数返回
mov pc,lr

LD2_OFF:
@GPIOE_ODR输出低电平
/*LD2 ------> SOC ------> PF10 ------>
GPIOE_ODR[10] =0(熄灭) ------> 0x50006014[10] */
ldr r0,=0x50007014
ldr r1,[r0]
bic r1,r1,#(0x1<<10)
str r1,[r0]
@函数返回
mov pc,lr

LD3_ON:
@GPIOE_ODR输出高电平
/*LD3 ------> SOC ------> PE8 ------>
GPIOE_ODR[8] =1(点亮) ------> 0x50006014[10] */
ldr r0,=0x50006014
ldr r1,[r0]
orr r1,r1,#(0x1<<8)
str r1,[r0]
@函数返回
mov pc,lr

LD3_OFF:
@GPIOE_ODR输出低电平
/*LD1 ------> SOC ------> PE8 ------>
GPIOE_ODR[8] =0(熄灭) ------> 0x50006014[10] */
ldr r0,=0x50006014
ldr r1,[r0]
bic r1,r1,#(0x1<<8)
str r1,[r0]
@函数返回
mov pc,lr

@ 大概1s的延时函数
delay_1s:
mov r3, #0x10000000
mm:
cmp r3, #0
subne r3, r3, #1
bne mm
mov pc, lr

.end

LED实验

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值