JZ2440裸机学习之从led学gpio

145 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

若看到相同文章,为本人其他平台。

第一步:开发环境配置

  1. 先安装 linux 操作系统。 在 windows 系统上安装 linux 子系统,或者在 linux 系统上安装 windows 虚拟机。(作者使用 windowsOS,安装的 ubuntu 子系统,烧写工具用 oflash 工具)
  2. 搭建交叉编译环境。安装 arm-linux-gcc, 或者其他的编译工具。
  3. 连接 Opne JTAG 线到开发板和电脑。
  4. 就可以进行裸机程序烧写。

第二步:查看原理图

  1. 查看原理图,看 led 接线原理。

    图片

    因为 Led 一端为 3.3v 高电平,所有要点亮 Led 需要 2440 这边的管脚为低电平时,Led 才会点亮。 图片 由图显示,led1 与 GPF4 相连。因此要点亮 led 必须让 GPF4 处于低电平。

  2. 让 GPF4 处于低电平

  • 配置 GPF4 功能。输入:输出:其他
  • 设置 GPF4 电平。高:低
  1. 从用户手册中查找 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输出0LED1点亮
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引起处理器转移到“子程序名”处开始执行,不能返回,只能跳转。