ARM逻辑——点亮LED

ARM 242浏览

一.LED的工作特性及原理图

D26为电源指示灯
其他LED正极接到vdd3.3v 负极接到4个io口
要点亮LED要将负极所接到额IO口为低电平

发现gpio(通用输入输出)口之后需要去找到控制响应IO的寄存器
GPIO就是芯片的引脚 作为GPIO的这类引脚,功能和特点是可以被编程控制它的工作模式 也可以控制电压的高低
将LED接到FGPIO 就可以通过编程控制LED的亮灭

GPIO寄存器相关
通过设置控制GPIO的寄存器的值来控制GPIO
GPJO相关的寄存器
GPJ0CON(GPJO Control)控制寄存器 用来配置工作模式
GPJ0DAT (GPJO data)当配置为input output模式时 相应位对应引脚的电平高低
GPJ0PUD  控制引脚上拉 下拉 
GPJ0DRV, 配置GPIO的驱动能力 电流大小
GPJ0CONPDN 低功耗模式下的控制寄存器
GPJ0PUDPDN 低功耗模式下的上下拉寄存器
主要的是GPJ0CON, GPJ0DAT

二.汇编点亮LED

1.操作控制寄存器 用来配置工作模式为输出模式
2.GPJ0DAT寄存器 设置引脚输出电平

GPJO有8个引脚 GPJO_0~7,相关重要寄存器为GPJ0CON和GPJ0DAT
GPJ0CON控制8个引脚的工作模式(32/8=4 每个引脚有4位 工作的方法就是给相应的位给相应的值 则可以设置相应引脚的工作模式 0001为输出模式)

写代码操作寄存器
1.查硬件接法和引脚:GPJ0_3 GPJ0_4 GPJ0_5 
2.查寄存器的地址 GPJ0CON(0xE0200240) GPJ0DAT(0xE0200244)
3.工程管理 makefile等

遇到问题:
1.未找到命令 编码格式问题 设置为GB2312格式
2.make: Warning: File 'led.S' has modification time 43 s in the future  windows的时间比虚拟机中的时间快 则文件时间快于make 调整系统时间 

.global _start 将_start链接属性设置为外部 消除start警告

汇编中调用函数使用bl 子函数中使用mov pc,lr来返回

编程操作硬件的步骤:
1.分析硬件的工作原理
2.分析原理图
3.分析数据手册
4.找到相关的SFR
5.写代码设置寄存器

三.用到的汇编指令

1.ldr 将值写入到对应的寄存器中

2.str 将寄存器中的值写入到内存中

3.sub 减运算

4.cmp 比较是否相等 会影响Z标志

5.bne 条件跳转,“不相等(或不为0)跳转指令”。如果不为0就跳转到后面指定的地址,继续执行

6.bl 跳转前把返回地址放入lr中 以便于返回 以便于函数调用

7.b 直接跳转 不打算返回