.text
.global _start
_start:
LDR R0,=0X50000A28 @设置时钟寄存器地址用于读取时钟寄存器中的值
LDR R1,[R0] @读取时钟寄存器中的内容
ORR R1,R1,#(0x3<<4) @设置让GPIO的E口使能值
STR R1,[R0] @将设置好的时钟GPIOE口寄存器值放到时钟寄存器对应的地址中
LDR R0,=0X50006000 @找到gpio口的工作模式寄存器的地址 GPIOE_MODER[21:20]->01 为输出模式
LDR R1,[R0] @读取gpio工作模式寄存器地址中的内容到R1中
BIC R1,R1,#(0X33<<16) @按位清先让工作模式寄存器的21,20两位清零,接下来对这两位置位设置使其gpioE10引脚工作在输出模式
ORR R1,R1,#(0X01<<20) @工作模式的值01送入寄存器中用或的方式
ORR R1,R1,#(0X01<<16)
STR R1,[R0] @将设置组装好的工作模式值放入工作模式寄存器中
LDR R0,=0X50006004 @找出GPIOE_OTYPER 输出方式的寄存器地址,将对应引脚位的输出方式改为推挽方式0
LDR R1,[R0 ] @先读出gpioe端口输出方式寄存器的值,再对其进行修改
BIC R1,R1,#(0x5<<8) @让端口第4引脚的位输出模式设置为0,为推挽输出
STR R1,[R0] @将设置好的输出模式寄存器值送入对应寄存器的内存地址中
LDR R0,=0X50006008 @设置gpio的数据传输速度模式,找出传输速度寄存器的内存地址放在r0寄存器中,防止地址不合法
LDR R1,[R0] @取出R0内存地址的值到R1中,将寄存器中管理pe10对应的位修改为低速模式00
BIC R1,R1,#(0X33<<16) @对应位清零送入R1寄存器中
STR R1,[R0] @将修改好的值送到速度寄存器对应的地址内存上
LDR R0,=0X5000600C @设置上下拉电阻寄存器,先找出上下拉电阻模式的寄存器地址再取出地址中的值
LDR R1,[R0] @取出上下拉方式寄存器的值设置为00无上拉下拉模式
BIC R1,R1,#(0x33<<16) @清零
STR R1,[R0] @向对应地址中写入修改好的值
@**********************GPIOF_PF10*******************************
LDR R0,=0X50007000 @找到gpio口的工作模式寄存器的地址 GPIOF_MODER[21:20]->01 为输出模式
LDR R1,[R0] @读取gpio工作模式寄存器地址中的内容到R1中
BIC R1,R1,#(0X3<<20) @按位清先让工作模式寄存器的21,20两位清零,接下来对这两位置位设置使其gpioE10引脚工作在输出模式
ORR R1,R1,#(0X01<<20) @工作模式的值01送入寄存器中用或的方式
STR R1,[R0] @将设置组装好的工作模式值放入工作模式寄存器中
LDR R0,=0X50007004 @找出GPIOE_OTYPER 输出方式的寄存器地址,将对应引脚位的输出方式改为推挽方式0
LDR R1,[R0 ] @先读出gpioe端口输出方式寄存器的值,再对其进行修改
BIC R1,R1,#(0x1<<10) @让端口第4引脚的位输出模式设置为0,为推挽输出
STR R1,[R0] @将设置好的输出模式寄存器值送入对应寄存器的内存地址中
LDR R0,=0X50007008 @设置gpio的数据传输速度模式,找出传输速度寄存器的内存地址放在r0寄存器中,防止地址不合法
LDR R1,[R0] @取出R0内存地址的值到R1中,将寄存器中管理pe10对应的位修改为低速模式00
BIC R1,R1,#(0X3<<20) @对应位清零送入R1寄存器中
STR R1,[R0] @将修改好的值送到速度寄存器对应的地址内存上
LDR R0,=0X5000700C @设置上下拉电阻寄存器,先找出上下拉电阻模式的寄存器地址再取出地址中的值
LDR R1,[R0] @取出上下拉方式寄存器的值设置为00无上拉下拉模式
BIC R1,R1,#(0x3<<20) @清零
STR R1,[R0] @向对应地址中写入修改好的值
@**********************GPIOF_PF10*******************************
LOOP:
BL LED_ON
BL delay
BL LED_OFF
BL delay
BL LED2_ON
BL delay
BL LED2_OFF
BL delay
BL LOOP
@封装汇编的延时函数
delay:
LDR R1,=0X10000000
mm:
cmp R1,#0
SUBNE R1,R1,#1
BNE mm
mov pc,lr
LED_OFF:
LDR R0,=0x50006014 @设置数据输出寄存器输出的值为0还是1高低电平,先找到输出数据寄存器的地址GPIOE_ODR直接输出
LDR R1,[R0] @取出数据传出寄存器地址对应的值
BIC R1,R1,#(0x5<<8) @修改对相应gpioe P10位的值第10位设置为高电平1
STR R1,[R0] @将修改好的高电位值输出传回数据传输寄存器对应的地址内存中
MOV PC,lr @将跳转前保存的下一条要执行的指令程地址传给要执行程序寄存器返回继续执行
LED2_OFF:
LDR R0,=0x50007014 @设置数据输出寄存器输出的值为0还是1高低电平,先找到输出数据寄存器的地址GPIOE_ODR直接输出
LDR R1,[R0] @取出数据传出寄存器地址对应的值
BIC R1,R1,#(0x1<<10) @修改对相应gpioe P10位的值第10位设置为高电平1
STR R1,[R0] @将修改好的高电位值输出传回数据传输寄存器对应的地址内存中
MOV PC,lr @将跳转前保存的下一条要执行的指令程地址传给要执行程序寄存器返回继续执行
LED_ON:
LDR R0,=0x50006014 @设置数据输出寄存器输出的值为0还是1高低电平,先找到输出数据寄存器的地址GPIOE_ODR直接输出
LDR R1,[R0] @取出数据传出寄存器地址对应的值
ORR R1,R1,#(0x5<<8) @修改对相应gpioe P
、10位的值第10位设置为高电平1
STR R1,[R0] @将修改好的高电位值输出传回数据传输寄存器对应的地址内存中
mov pc,lr
LED2_ON:
LDR R0,=0x50007014 @设置数据输出寄存器输出的值为0还是1高低电平,先找到输出数据寄存器的地址GPIOE_ODR直接输出
LDR R1,[R0] @取出数据传出寄存器地址对应的值
ORR R1,R1,#(0x1<<10) @修改对相应gpioe P10位的值第10位设置为高电平1
STR R1,[R0] @将修改好的高电位值输出传回数据传输寄存器对应的地址内存中
mov pc,lr
.end
ARM4 汇编点亮灯
最新推荐文章于 2024-07-11 14:14:38 发布