版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、嵌入式系統(tǒng)開發(fā)技術課程設計(實習)報告信息工程學院編制任務項目2 按鍵中斷控制串口31. 目的32. 內(nèi)容33. 要求3任務項目3 PWM控制蜂鳴器以及通過串口控制其頻率61. 目的62. 內(nèi)容63. 要求6任務項目4看門狗定時器編程91. 目的92. 內(nèi)容93. 要求9任務項目5 u-boot源碼詳細分析121. 目的122. 內(nèi)容123. 要求124. 附錄125.代碼注釋15心得體會18任務項目2 按鍵中斷控制串口1. 目的(1)熟悉裸機按鍵中斷的發(fā)生及通過串口輸出字符過程。2. 內(nèi)容獨立編寫程序?qū)崿F(xiàn):(1) 當按下按鍵SW7時發(fā)生中斷,設計中斷服務函數(shù)使得蜂鳴器鳴響同時串口輸出SW7。
2、(2) 當按下按鍵SW8時發(fā)生中斷,設計中斷服務函數(shù)使得蜂鳴器結(jié)束鳴響同時串口輸出SW8;3. 要求請將實驗過程截圖黏貼到下面的空白處。任務項目3 PWM控制蜂鳴器以及通過串口控制其頻率1. 目的(1)熟悉裸機下PWM定時器、串口程序的編寫。2. 內(nèi)容 (1)參照課本程序調(diào)試運行使得PWM定時器能控制蜂鳴器;(2)加入串口程序使得當在串口輸入“A”和“B”時蜂鳴器能以不同的頻率鳴響。提示:可參看教材中斷這一章編寫程序。3. 要求請將實驗過程截圖黏貼到下面的空白處。任務項目4看門狗定時器編程1. 目的(1)熟悉裸機下看門狗定時器程序的編寫、測試及運行。2. 內(nèi)容 (1)參看課本程序,調(diào)試運行,實
3、現(xiàn)通過定時器精確控制蜂鳴器延時1秒鐘; (2)控制蜂鳴器鳴響使之模仿簡單歌曲讀書郎。提示:參看系統(tǒng)時鐘和定時器這一章編寫程序。3. 要求請將實驗過程截圖黏貼到下面的空白處。任務項目5 u-boot源碼詳細分析1. 目的(1)熟悉u-boot工程的總體結(jié)構。(2)熟悉u-boot的流程、主要的數(shù)據(jù)結(jié)構、內(nèi)存分配。(3)熟悉u-boot的重要細節(jié),主要分析流程中各函數(shù)的功能。2. 內(nèi)容 S5PV210 u-boot源碼分析 3. 要求請?zhí)砑觰-boot源碼注釋,查看相關數(shù)據(jù)手冊,添加代碼注釋,以實驗臺為基數(shù),每組完成i部分的50行代碼。注釋添加示例:Start.S中一段程序:.globl _sta
4、rt_start: b reset / b是跳轉(zhuǎn)指令,即跳轉(zhuǎn)到reset標簽處。接著返回到此處。 ldr pc, _undefined_instruction /設置中斷向量表 0x0 0x4.0x8 0xc ldr pc, _so
5、ftware_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq ldr pc,
6、_fiq4. 附錄1. u-boot啟動流程1.1 啟動階段分為3個,bl0,bl1,bl2。下面只是就功能方面對它們做說明,實際設計的時候,也許會對其具體功能做出調(diào)整,也就是說,這幾個階段的劃分是就功能而言的,不能看得太死。 bl0:出廠的時候就固化在irom中一段代碼,主要負責拷貝8kb的bl1到s5pv210的一個96kb大小內(nèi)部sram(Internal SRAM)中運行。值得注意的是s5pv210的Internal SRAM支持的bl1的大小可以達到16kb,容量的擴增是為了適應bootloder變得越來復雜而做的。雖然如此,但目前我們制作出來
7、的bl1的大小仍然可以保持在8kb以內(nèi),同樣能滿足需求。 bl1:u-boot的前8kb代碼(s5pv210也支持16kb大小,原因上一點提過了),除了初始化系統(tǒng)時鐘和一些基本的硬件外,主要負責完成代碼 的搬運工作(我設計成搬運bl1+bl2,而不僅僅是bl2),也就是將完整的u-boot代碼(bl1+bl2)從nand flash或者mmcSD等的存儲器中讀取到內(nèi)存中,然后跳轉(zhuǎn)到內(nèi)存中運行u-boot。 bl2:完成全面的硬件初始化和加載OS到內(nèi)存中,接著運行OS。上述幾個階段的流程描述在s5pv210_irom
8、_application手冊中有詳細描述。見下圖1:圖11.2 首先把啟動部分的代碼分為3部分,以start.S為主,另外還有l(wèi)owlevel_init.S,mem_setup.S,ctr0.S。 其中l(wèi)owlevel_init.S主要是一部分硬件的初始化,尤其是系統(tǒng)時鐘和DRAM的初始化。如果u-boot一旦被搬運到內(nèi)存中運行,那么是必須要跳過時鐘和DRAM的初始化的,因為這在搬運之前已經(jīng)做過了。并且如果代碼在內(nèi)存中運行的時侯你卻去初始化DRAM,那必然導致崩潰! mem_setup.S:DRAM初始化代
9、碼和MMU相關代碼放在這個文件中。 ctr0.S:u-boot自帶的代碼文件,存放匯編函數(shù)main。1.3 啟動代碼相關的幾個文件在u-boot中的路徑 start.S: /arch/arm/cpu/armv7/start.S (需要自己修改) lowlevel_init.S:/board/samsung/zsy210/ lowlevel_init.S (需要自己修改)
10、 mem_setup.S: /board/samsung/zsy210/ mem_setup.S (u-boot沒有,需要自己添加) ctr0.S: /arch/arm/lib/ctr0.S (u-boot自帶,一般不需要修改)2. 啟動過程原理 必 須要明白的一點是,當代碼從存儲介質(zhì)(nand flash,SD,norflash,onenand等
11、)中搬運到了DRAM中后隨即會跳轉(zhuǎn)到內(nèi)存中運行u-boot,接著會有一個重定位 (relocate_code)的過程,relocate_code子函數(shù)在start.S中,而給relocate_code子函數(shù)傳參數(shù)的是 crt0.S中的main子函數(shù)。當判斷到當前u-boot在內(nèi)存的低地址處,那么relocate_code就會工作,把u-boot代碼從低地址處再 搬運到內(nèi)存地址的頂端,然后跳轉(zhuǎn)到新的位置去繼續(xù)運行u-boot。而搬運的目標地址是在board_init_f()函數(shù)(此函數(shù)在/arch/arm/lib/board.c中)中計算出來的,見圖2。
12、 圖2
13、0; 下面,以start.S為主線,畫出了其程序流程圖,圖中同樣也表現(xiàn)出啟動的整個流程和啟動代碼文件間的組織關系。所以后面直接貼出start.S的完整代碼,大家結(jié)合流程圖相信都可以看明白,至于逐句匯編的分析不是本文的重點。見圖3.圖35.代碼注釋relocate_done:/ 搬遷完成1. bxlr /即跳轉(zhuǎn)到lr中存放的地址處。2. _rel_dyn_start_ofs:/* r2 <- rel dyn start ofs */ /r2=0x64854(反匯編) 3. .
14、word _rel_dyn_start - _start /* r2 <- rel dyn start ofs */ /r2=0x64854(反匯編) 4. _rel_dyn_end_ofs: /* r3 <- rel dyn end ofs */ /r3=0x6d104(反匯編) 5. .word _rel_dyn_end - _start6. _dynsym
15、_start_ofs:/* r10 <- sym table ofs */ /r10=0x6d104(反匯編)7. .word _dynsym_start - _start8. ENDPROC(relocate_code)9. #endif/預編譯10. ENTRY(c_runtime_cpu_setup)/進入CPu啟動11. /*12. * If I-cache is enabled invalidate it13. */14. #ifndef CONFIG_SYS_ICACHE_OFF /結(jié)束預編譯mcrp15,
16、 0, r0, c7, c5, 0 invalidate icache/ARM的協(xié)處理命令mcr p15, 0, r0, c7, c10, 4 DSB/ARM的協(xié)處理命令mcr p15, 0, r0, c7, c5, 4 ISB/ARM的協(xié)處理命令15. #endif/預編譯16. /*17. * Move vector table/移動向量表18. */19. #if !defined(CONFIG_TEGRA20)/結(jié)束預編譯20. /* Set vector address in CP15 VBAR register */21. ldr r0, =_start/從內(nèi)存中讀出22. add
17、 r0, r0, r9 /三項相加23. mcr p15, 0, r0, c12, c0, 0 Set VBAR/協(xié)處理24. #endif /* !Tegra20 */結(jié)束預編譯25. bxlr/跳轉(zhuǎn)到lr26. ENDPROC(c_runtime_cpu_setup)/cpu開始27. /*28. *29. * void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3)/無效啟動參數(shù)保存30. *_attribute_(weak);31. *32. * Stack pointer is not yet initialized at this moment/堆棧指針尚未初始化33. * Don't save anything to stack even if compiled with -O0/不保存任何堆棧即使編譯34. *35. */36
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026廣東佛山市高明區(qū)荷城街道西安社區(qū)衛(wèi)生服務中心招聘合同制人員2人(河江衛(wèi)生站)筆試備考題庫及答案解析
- 2026重慶涪陵區(qū)人民法院招聘司法警察2人考試參考題庫及答案解析
- 2026北京經(jīng)濟技術開發(fā)區(qū)衛(wèi)生健康領域事業(yè)單位招聘28人考試備考試題及答案解析
- 2026年萍鄉(xiāng)市人才發(fā)展集團見習生招聘4人考試備考題庫及答案解析
- 2026廣東中山市東鳳中學招聘臨聘教師6人筆試備考題庫及答案解析
- 2026浙江溫州長安集團平陽誠眾汽車維修有限公司招聘編外人員(勞務派遣)補充8人(二)考試參考題庫及答案解析
- 2026廣東湛江市住房和城鄉(xiāng)建設局事業(yè)單位急需緊缺人才招聘1人考試備考題庫及答案解析
- 2026中國人民解放軍聯(lián)勤保障部隊機關幼兒園招聘5人(湖北)考試參考題庫及答案解析
- 2026廣西玉林市遴選公務員28人筆試參考題庫及答案解析
- 2026北京空間機電研究所招聘筆試備考試題及答案解析
- 《中華人民共和國危險化學品安全法》全套解讀
- 推拿按摩腰背部課件
- 散養(yǎng)土雞養(yǎng)雞課件
- 戰(zhàn)略屋策略體系roadmapPP T模板(101 頁)
- 2025年醫(yī)療輔助崗面試題及答案
- T-CI 1078-2025 堿性電解水復合隔膜測試方法
- 新入職小學教師如何快速成長個人專業(yè)發(fā)展計劃
- 門診導診工作流程
- 寫字樓物業(yè)安全管理實務操作手冊
- 解析卷蘇科版八年級物理下冊《物質(zhì)的物理屬性》單元測試試題(含解析)
- 2025年及未來5年中國飲料工業(yè)行業(yè)競爭格局分析及發(fā)展趨勢預測報告
評論
0/150
提交評論