嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序

使用的开发板是 韦东山老师的 JZ2440V3

第一步就是找到灯的 IO

嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序_第1张图片

嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序_第2张图片嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序_第3张图片

根据原理图, 我们要想点亮 LED  需要给对应的 IO口 拉低 

也就是说 需要拉低 GPF4  GPF5 GPF6

要设置一个 IO口的输出  第一步就是 设置IO的控制寄存器

2440 是非常古老的芯片 IO的复用结构和 输出控制非常的简单(或者说是 单一  )

嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序_第4张图片

这是对应的datesheet里面关于IO部分的 寄存器  我们暂时用到的就只有上面两个寄存器 

GPFCON  控制寄存器 (这里可以类比于stm32 系列的mode 寄存器   就是控制io的  输入输出选择的)嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序_第5张图片

GPFDAT 数据寄存器

嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序_第6张图片

这个就是  输出的时候作为 输出数据寄存器   如果是输入的话 这个寄存器就是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 的伪指令   这里就不做赘述了,  最简单的能实现功能的代码就行了....

 

嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序_第7张图片

最后加一个死循环  嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序_第8张图片

嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序_第9张图片

将文件发送到服务器

输入命令 arm-linux-gcc -c -o led.o led.S   预编译  输出指定名为led.o的文件

嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序_第10张图片

 

接下来是链接文件

嵌入式linux学习笔记-20200220-JZ2440 裸机001 汇编代码点灯程序_第11张图片

arm-linux-ld -Ttext 0 led.o -o led.elf

arm-linux-objcopy -O binary -S led.elf led.bin

 这是单步的指令  可以编写Makefile文件来 替代人手工输入

这样我们就生成了  需要的一个bin 文件

使用 openjtag 下载到开发板上即可

 

 

你可能感兴趣的:(嵌入式linux学习)