arm-4-裸板开发
程序鏈接(運行)地址和程序地址
ld文件就是鏈接文件,鏈接地址是指程序運行的地址在哪里(運行的時候,放到內存里去運行),程序地址是指程序儲存在哪里
在芯片手冊中找到gpio,控制地址,設置接口,最核心的就是start.s文件
make – 燒錄到sd卡(自帶的工具) – evm設置 – 上電
使用minitool
200000是鏈接地址
使用sd卡,可以將程序拷貝到0x0000,沒有superboot也可以運行
使用minitool,可以將程序拷貝到0x2000,必須要有superboot才可以運行
那么其中到底發生了什么事情呢,為什么他們兩個有差異
arm啟動順序
1.看文檔
2.看文檔,芯片手冊-overview
dmz:隔離區
sfrs;特殊寄存器
這塊叫什么呢?
這塊叫boot area 啟動區,裸板程序就在這里,因為irom里面有一塊固化代碼,包含了看門狗等,這也就是為什么裸板不用看門狗,把程序放在這里,他就直接跑起來了
外設總線尋址地址
控制器–onenand
所以有boot就燒到20000,沒有就燒到0000(起始地址)
看看啟動了
gpio和boot啟動
rom里面的固有程序會把硬盤中的第一段bootloader程序(16k校驗)搬到芯片內部iram,如果運行成功,就搬第二段,全成功了就啟動os,再把os轉到內存里
1.啟動irom上面的code
2.搬bl1到iram
3.搬bl2到ram
4.bl2啟動os kernel
5…os kernel 到dram
裸板程序是在iram上運行的
superboot是在第6步完成,superboot實際上幫忙完成了2,3兩步驟
因為有一個16k的偏移,所以才會是D002001
燒錄bin文件,連接開發板,打開minitool和開發板
2.使用c語言
凡是和寄存器相關的地址,都要用到volatile,防止被修改優化
1.#define JPGCON ( * (volatile unsigned long * )0xE0200280)
(volatile unsigned long * )0xE0200280 指向地址
* (volatile unsigned long * )0xE0200280 指向地址的值
2.#define JPGDAT ( * (volatile unsigned long * )0xE0200284)
#define JPGCON ( * (volatile unsigned long * )0xE0200280)#define JPGDAT ( * (volatile unsigned long * )0xE0200284)int main (){JPGCON = 0x00001111;JPGDAT = 0x00;return 0;}修改匯編代碼
源代碼:
修改后的代碼
.text.global _start_start:BL mainB loop/*LDR R0 ,= 0xE0200280MOV R1 , 0x00001111STR R1,[R0]LDR R0 ,= 0xE0200284MOV R1 , 0x00STR R1,[R0]`loop: B loop/*在makefile中加入c的東西:
make,燒錄
3.制作一個蜂鳴器的程序
匯編代碼
.text .global _start _start:BL main_loop:B _loop電路圖找到蜂鳴器–
通過引腳在芯片手冊找到io口
在芯片手冊,找到控制寄存器以及數字寄存器地址值
完善下思路
開始編寫main。c
makefile
然后再燒寫運行
使用button控制
找到button的引腳,再找到值,在找到地址
在芯片手冊里面找到
修改makefile
特別注意的事情是,因為死循環太占用資源而且不方便,所以通常不采用這種輪詢的方式,而是采用中斷的方式
總結
以上是生活随笔為你收集整理的arm-4-裸板开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt C++ 命名空间namespace
- 下一篇: android音乐播放器完整教程,and