mini2440开发板学习裸机开发——day1 裸机运行LED灯程序

开发背景:系统:ubuntu18.04系统
开发板:mini2440 串口连接工具 J-link连接工具
工具:secureCRT J-link
本次学习基于韦东山老师的嵌入式linux应用开发手册书,结合友善之臂给出的官方资料以及申嵌视频中的一些知识。
day1完成的主要工作就是编写mini2440开发的键盘点亮led灯的裸机程序,并下载到nandflash中,在开发板中成功运行。本次学习中遇到主要的问题有:
一、用汇编语句编写点亮led灯时,对汇编语句不是很熟悉,将韦老师书中的ARM的指令作了简单的概括如下:
1、相对跳转指令:b、bl
两个指令的不同之处,b直接跳转,bl除了跳转外还将返回下一条指令的地址。
具体示例:
b fun1

fun1:
b1 fun2

fun2:

2、数据传送指令mov,地址读取伪指令ldr
伪指令(Pseudo instruction)是用于告诉汇编程序如何进行汇编的指令。
它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行
mov指令主要是寄存器的赋值(可以是寄存器的值也可以是常数)
ldr伪指令标志(参数前面有=)主要用来读取地址
3、内存访问指令:ldr、str、ldm、stm
ldr指令从内存中读取数据到寄存器中 str把寄存器数据存储到内存中
ldr r1,[r2,#4] /将地址r2+4的内存中的数据读取到r1寄存器中/
ldr r1,[r2] /将地址为r2的内存中的数据读取到r1寄存器中/
ldr r1,[r2],#4 /将地址为r2的内存中的数据读取到r1寄存器中,r2=r2+4/
str指令操作相反
4、加减指令:add、sub
add r1, r2, #1 r1=r2+1;
sub r1, r2, #1 r1=r2-1;
5、程序状态寄存器访问指令:msr、mrs
控制处理arm处理器中的程序状态寄存器(cprs),用来控制处理器的工作模式,设置中断总开关
msr cpsr, r0 复制r0到cprs中
mrs r0, cpsr 复制cpsr到r0中
6、其他伪指令:
.extern定义一个外部符号(变量或函数)
.text表示下面是代码段
.global 将文件中的某个程序标号定义为全局
二、裸机开发程序生成好的.bin文件如何下载到开发板中:
针对这个问题在网上找了很多资料,网上提供的方法较多,但不同的电脑由于系统或者其他问题并不能够通用,本次我用的是申嵌视频中提到的J-LINK下载u-boot.bin到nandflsh的方法,具体步骤如下:
连接好开发板与电脑(包括J-LINK连接与串口连接),打开到nandflash端启动
上电后打开安装的jlink连接工具中的J-COMMANDER软件
1、在打开的软件中输入r,回车,确保找到CPU(如果后续出现CPU is not halted,可能就是没有r)
2、speed 12000设置下载速度
3、下载并运行init.bin文件(如果有人没有的话,可以在最下方的百度云链接中下载)具体语句:loadbin d:\init.bin 0 (d:\代表存放的路径)
setpc 0
g
4、下载uboot.bin_openjtag至SDRAM中
h
loadbin d:\uboot.bin_openjtag 0x33f80000
setpc 0x33f80000(如果没有出现问题会听到蜂鸣器响一声)
g
5、下载自己编译好的led_key.bin
h
loadbin d:\led_key.bin 0x30000000
g
并没有结束,打开secureCRT连接上端口,如果端口正常连接的话会出现openjtag的一个输入,在里面依次输入以下语句:
nand scrub
在出现提示后输入y(输入后直接回车就可以,屏幕不会显示)
nand erase 0 30000
nand write.jffs2 30000000 0 30000
完成上诉操作后,拔掉jlink接口重启就可以。
三、具体的mini2440的键盘控制led灯的程序
裸机键盘控制led的程序: https://github.com/yantu711/mini2440-----/tree/master
百度网盘连接:https://pan.baidu.com/s/1J4sJa-8tc7CJzcDRYvujiQ 提取码:7vvt

上诉文章为自己学习中遇到的问题解决的办法,有一些是借助于网上各位老师的经验,如有任何问题请联系删除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章