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

上訴文章爲自己學習中遇到的問題解決的辦法,有一些是藉助於網上各位老師的經驗,如有任何問題請聯繫刪除。

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