马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
Linux平台下UT4412BV03裸机开发指南(二)
第一章 汇编点亮LED第一节 查看原理图UT4412BV03开发板上提供了4个可编程用户LED,原理图如下:
在原理图中搜索引脚“EINT5”,可得:
可见,LED的D3、D4、D6、D7分别使用CPU端口资源为GPX0_5、GPX0_7、GPX2_4、GPX2_5. 第二节 程序相关讲解完整代码见目录1.leds_s。 [size=12.0000pt]1. start.S 由原理图可知,点亮UT4412BV03的4个LED需如下2个步骤: 第一步:设置寄存器GPX0CON和GPX2CON,使GPX0_5、GPX0_7、GPX2_4、GPX2_5四个引脚为输出功能; 第二步:往寄存器GPX0DAT/GPX2DAT相应的位写0,使GPX0_5、GPX0_7、GPX2_4、GPX2_5四个引脚输出低电平,4个LED会亮;相反,往寄存器GPJ2DAT写1,使GPX0_5、GPX0_7、GPX2_4、GPX2_5四个引脚输出高电平,4个LED会灭;
以上两个步骤即为start.S中的核心内容,start.S里面涉及的汇编指令请自行学习GNU汇编指令集,这里不再进行赘述。 [size=11.5000pt]2. Makefile led.bin: start.o
arm-linux-ld -Tled.lds -o led.elf $^
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led_elf.dis
gcc -o my_mkbl2 my_mktools.c
./my_mkbl2 $@ bl2.bin 14336
sudo ./sd_fusing.sh /dev/sdb bl2.bin
%.o : %.S
arm-linux-gcc -o $@ $< -c
%.o : %.c
arm-linux-gcc -o $@ $< -c
clean:
rm *.o *.elf *.bin *.dis my_mkbl2 –f
在Makefile所在的目录下执行make命令,系统会进行如下操作: 第一步 :执行arm-linux-gcc -o $@ $< -c命令将当前目录下存在的汇编文件和C文件编译生成.o文件; 第二步:执行arm-linux-ld -Tled.lds -o led.elf $^将所有.o文件链接成elf文件,-Tled.lds表示程序的链接地址,由于目前我们编写的代码是位置无关码,所以程序能在任何一个地址上运行; 第三步:执行arm-linux-objcopy -O binary led.elf led.bin将elf文件抽取为可在开发板上运行的bin文件; 第四步:执行arm-linux-objdump -D led.elf > led_elf.dis将elf文件反汇编后保存在dis文件中,调试程序时可能会用到; 第五步:执行./my_mkbl2 $@ bl2.bin 14336命令,my_mkbl2处理led.bin文件,my_mkbl2由my_mktools.c编译而来,具体解释请看my_mktools.c相关讲解; 第六步 :执行sudo ./sd_fusing.sh /dev/sdb bl2.bin将bl2.bin烧写进SD卡。(sd_fusing.sh脚本程序来自韦东山老师) 3. my_mktools.c 4412的启动过程,我们在下一章再说.my_mktools.c大家可以看看源码,韦东山老师已经做好了注释.现在只要知道my_mkbl2的作用是截取用户提供的bin文件前(14K-4)字节数据,算出4字节的校验码,然后这两部分数据组合成14KB的文件bl2.bin,它就是BL2. 4.led.lds SECTIONS {
. = 0x02023400;
.text : {
start.o
* (.text)
}
.rodata : {
* (.rodata)
}
.data : {
* (.data)
}
.bss : {
* (.bss)
}
} 0x02023400就是程序要加载的地址,.text是代码段,.rodata是只读数据段,.data是数据段,.bss 是bss段。 第三节 编译代码和烧写运行将sd卡插入PC,在Ubuntu终端执行如下命令: #cd 1.leds_s #make |