JZ2440学习之gpio
第一步:开发环境配置
- 先安装linux操作系统。
在windows系统上安装linux子系统,或者在linux系统上安装windows虚拟机。(作者使用windowsOS,安装的ubuntu子系统,烧写工具用oflash工具) - 搭建交叉编译环境。 安装arm-linux-gcc, 或者其他的编译工具。
- 连接Opne JTAG线到开发板和电脑。
- 就可以进行裸机程序烧写。
第二步:查看原理图
-
查看原理图,看led接线原理。在这里插入图片描述
因为Led一端为3.3v高电平,所有要点亮Led需要2440这边的管脚为低电平时,Led才会点亮。
在这里插入图片描述
由图显示,led1与GPF4相连。因此要点亮led必须让GPF4处于低电平。 让GPF4处于低电平
- 配置GPF4功能。 输入:输出:其他
- 设置GPF4电平。 高:低
-
从用户手册中查找GPF4设置功能和电平。
在这里插入图片描述
由图可以看出GPF4控制寄存器地址为:0x56000050, 它的第【8:9】位用来设置该引脚功能,8:9位为01时为输出功能。
在这里插入图片描述
由图中翻译:当端口配置为输出端口时,引脚状态与相应位相同。
则GPF4就是第【4】位。 则: 给0x56000054的第4位置0(低电平)时,则灯亮。
第三步:编写代码
至此,原理已经分析完成,就剩写代码了。
.text
.global _start
_start:
LDR R0,=0x56000050 @ R0设为GPFCON寄存器。此寄存器
@ 用于选择端口B各引脚的功能:
@ 是输出、是输入、还是其他
MOV R1,#0x00000100
STR R1,[R0] @ 设置GPF4为输出口, 位[8:7]=01
LDR R0,=0x56000054 @ R0设为GPBDAT寄存器。此寄存器
@ 用于读/写端口B各引脚的数据
MOV R1,#0x00000000 @ 此值改为0x00000010,
@ 可让LED1熄灭
STR R1,[R0] @ GPF4输出0,LED1点亮
MAIN_LOOP:
B MAIN_LOOP
16进制0x100转为二进制为:1 0000 0000
在这里插入图片描述
几个命令解释一下:
LDR{条件} 目的寄存器 <存储器地址>
作用:将 存储器地址 所指地址处连续的4个字节(1个字)的数据传送到目的寄存器中。
MOV{条件}{S} 目的寄存器,源操作数
MOV指令可完成从另一个寄存器、被移位的寄存器或立即数赋值到目的寄存器。
其中S选项为指令的操作结果是否操作CPSR中的条件标志位,
当没有S选项时指令不更新CPSR中的条件标志位结果。
STR{条件} 源寄存器,<存储器地址>
STR指令用亍从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常
用,丏寻址方式灵活多样,使用方式可参考指令LDR。
b
引起处理器转移到“子程序名”处开始执行,不能返回,只能跳转。