嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序
使用的开发板是 韦东山老师的 JZ2440V3第一步就是找到灯的 IO根据原理图, 我们要想点亮 LED 需要给对应的 IO口 拉低也就是说 需要拉低 GPF4 GPF5 GPF6要设置一个 IO口的输出 第一步就是 设置IO的控制寄存器2440 是非常古老的芯片 IO的复用结构和 输出控制非常的简单(或者说是 单一 )这是对应的datesheet里面...
使用的开发板是 韦东山老师的 JZ2440V3
第一步就是找到灯的 IO
根据原理图, 我们要想点亮 LED 需要给对应的 IO口 拉低
也就是说 需要拉低 GPF4 GPF5 GPF6
要设置一个 IO口的输出 第一步就是 设置IO的控制寄存器
2440 是非常古老的芯片 IO的复用结构和 输出控制非常的简单(或者说是 单一 )
这是对应的datesheet里面关于IO部分的 寄存器 我们暂时用到的就只有上面两个寄存器
GPFCON 控制寄存器 (这里可以类比于stm32 系列的mode 寄存器 就是控制io的 输入输出选择的)
GPFDAT 数据寄存器
这个就是 输出的时候作为 输出数据寄存器 如果是输入的话 这个寄存器就是IO口当前的电平状态
接下来就是设置值了
我们先来点亮一个 LED GPF4 对应于D10
控制寄存器的值 我们需要将 GPFCON[9:8] 设置为01
简化程序 我们直接写入 0x10 到控制寄存器
为了输出低电平我们需要给 GPFDATA[4] 寄存器输出 0
简化程序 直接输出0
接下来就是汇编代码 我们只需要基本的寄存器写指令就可以了
ldr r1, =0x56000054
ldr r0, =0 /* mov r0, #0 */
str r0, [r1]
大概是这三行 ldr 指令是寄存器装载指令(load register)
https://www.jianshu.com/p/66d801c85ee9 这是LDR 指令的解释 我就不去班门弄斧了
这里的register应该是特指CPU中的 16个 特殊的寄存器 而为了访问内存中的数据我们需要进行寄存器间接寻址 通过上面的三行代码 就可以实现一个 寄存器的写。 所以我们的程序很容易就 做出来了
其实韦老师当时应该也提过 mov指令 和ldr 的伪指令 这里就不做赘述了, 最简单的能实现功能的代码就行了....
最后加一个死循环
将文件发送到服务器
输入命令 arm-linux-gcc -c -o led.o led.S 预编译 输出指定名为led.o的文件
接下来是链接文件
arm-linux-ld -Ttext 0 led.o -o led.elf
arm-linux-objcopy -O binary -S led.elf led.bin
这是单步的指令 可以编写Makefile文件来 替代人手工输入
这样我们就生成了 需要的一个bin 文件
使用 openjtag 下载到开发板上即可
更多推荐
所有评论(0)