最近开始学习了一小段时间ARM,了解到了许多之前不曾接触的知识,决定慢慢整理起来,,今天先从最基本的GPIO操作说起,通过配置相应的寄存器点亮4个LED灯。
步骤如下:
1. 查看原理图,找到LED对应的引脚(以我使用的开发板为例),找到4个LED对应的引脚为NELD1~NLED4。
2. 查看芯片引脚,NLED1~NLED4分别对应GPM0~GPM3 4个引脚。
3.配置相应寄存器
(1)通过原理图知道,要让LED点亮,就要让对应的GPM0~GPM3 4个引脚输出为低电平。
(2)配置GPMCON寄存器,使GPM0~GPM3 4个引脚为输出。
(3)配置GPMDAT寄存器, 使GPM0~GPM3 4个引脚输出低电平。
4. 进行编译,我的环境是在u-boot下运行的。
附上程序,不足之处请多多指教!
1. led.s
.text
.align 2
.global _start
_start:
stmfd sp!, {lr}
ldr r0, =0x7f008820 //GPMCON寄存器
ldr r1, [r0]
ldr r2, =0xffff //清除最低16位
bic r1, r1, r2
ldr r2, =0x1111 //配置为输出状态
orr r1, r1, r2
str r1, [r0]
ldr r0, =0x7f008824 //配置GPMDAT寄存器
ldr r1, [r0]
ldr r2, =0xf //配置为 低电平
bic r1, r1, r2
str r1, [r0]
ldr r0, =10000000 //延迟一下
bl delay
ldr r0, =0x7f008824 //将4个LED熄灭
ldr r1, [r0]
ldr r2, =0xf
orr r1, r1, r2
str r1, [r0]
ldmfd sp!, {pc}
.align 2
.global delay
delay:
subs r0, #1
bne delay
mov pc, lr