Linux-ubuntu通过USB传输程序点亮LED灯
- 一,初始化GPIO配置
- 1.使能时钟
- 2.其他寄存器配置
- 二,程序编译
- 三,USB传输程序
一,初始化GPIO配置
1.使能时钟
使能就是一个控制信号,用于决定时钟信号是否能够有效的传递或者被使用,就像一个开关,当使能信号有效时,时钟信号能够正常工作。每个模块都有自己的工作时钟,通过控制使能信号控制每个模块的时钟输入,能够实现启动或停止这个模块的工作。
2.其他寄存器配置
复用功能(MUX_MODE),由于LDE等连接在GOIP1-IO03上,因此将复用功能设置为该GPIO打开。
电器属性(pad settings),比如低转换率,驱动能力,传输速度等。
IO作为GPIO时,要设置八个寄存器,DR、GDIR、PSR、ICR1、ICR2、EDGE_SEL、IMR 和 ISR,对于点灯,设置GDIP为输出模式,DR设置为低电平,即让GPIO1-IO03输出低电平。(设置为0,即开灯,设置为0x8开灯,因为这个灯对应的是bit3)。
二,程序编译
建立ldes.s文件,编写汇编程序:
.global _start /**/
_start:
/*使能外部时钟 */
ldr r0,=0x020c4068 @ccgr0
ldr r1,=0xffffffff
str r1,[r0]
ldr r0,=0x020c406c @ccgr1
str r1,[r0]
ldr r0,=0x020c4070 @ccgr2
str r1,[r0]
ldr r0,=0x020c4074 @ccgr3
str r1,[r0]
ldr r0,=0x020c4078 @ccgr4
str r1,[r0]
ldr r0,=0x020c407c @ccgr5
str r1,[r0]
ldr r0,=0x020c4080 @ccgr6
str r1,[r0]
/*IO复用,配置为GPIO1-I003*/
ldr r0,=0x020e0068 @寄存器地址
ldr r1,=0x000005 @设置为0101
str r1,[r0]
/* 配置电器属性*/
ldr r0,=0x020e02f4
ldr r1,=0x10b0
str r1,[r0]
/*设置GPIO1-I003输出 */
ldr r0,=0x0209c004
ldr r1,=0x00000008
str r1,[r0]
/*设置GPIO1-I003为低点平 */
ldr r0,=0x0209c000
ldr r1,=0
str r1,[r0]
loop:
b loop
将leds.s转化为led.o文件:arm-linux-gnueabihf-gcc -g -c leds.s -o led.o
将led.o转化为led.elf文件:arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf
将led.elf转化为为bin文件:arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
为了以后检查方便,反编译:arm-linux-gnueabihf-objdump -D led.elf > led.dis
三,USB传输程序
最终放到板子上的是imx类型文件,是镜像文件,这种镜像文件格式这个镜像文件包含了设备启动和运行所需的软件程序以及配置信息。镜像文件包含头部(Header:用于描述镜像文件的版本,大小和目标设备型号),代码段(处理器可执行的机器码指令),数据段(存储全局变量,常量)以及校验和等,打包成imx文件,通过下载uuu工具,直接不用读卡器就能传输到板子的闪存中。
bin文件时纯粹的二进制代码流,imx在此基础上添加头部信息等,便于设备的识别,与hex文件类似,都可存储固件的内容,但格式上不一样,hex更方便阅读(十六进制文本文件),imx更侧重设备直接识别。
Makefile:
led.bin : leds.s
arm-linux-gnueabihf-gcc -g -c leds.s -o led.o
arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf
arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
arm-linux-gnueabihf-objdump -D led.elf > led.dis
clean:
rm -rf *.o led.bin led.elf led.dis load.imx
run:
cat header led.bin > load.imx
sudo ./uuu load.imx
①在终端输入,安装USB传输工具:sudo snap install universal-update-utility
②在文件夹下添加header和uuu文件。
③将设备确保插到ubuntu上,并且USB线插到正点原子开发板的OTG接口,不是TTL接口。
④确保SD卡要拔出,并且将拨码开关的2打开,on。
⑤在终端运行make后,再运行make run,即可。
**header和uuu文件:链接: https://pan.baidu.com/s/1r66P0TqRS74JrOyyks-pHQ 提取码: 6666