畢業(yè)論文_基于ARM9的BOOTLOADER啟動設計.doc_第1頁
畢業(yè)論文_基于ARM9的BOOTLOADER啟動設計.doc_第2頁
畢業(yè)論文_基于ARM9的BOOTLOADER啟動設計.doc_第3頁
畢業(yè)論文_基于ARM9的BOOTLOADER啟動設計.doc_第4頁
畢業(yè)論文_基于ARM9的BOOTLOADER啟動設計.doc_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

長治學院 課程設計報告 課程名稱:課程名稱: 嵌入式系統(tǒng)原理與應用技術(shù)嵌入式系統(tǒng)原理與應用技術(shù) 設計題目設計題目: bootloader 程序設計 系系 別:別: 計算機系 專專 業(yè):業(yè): 計算機科學與技術(shù) 組組 別:別: 第 7 組(韓偉偉、王富涌) 學生姓名學生姓名: : 韓偉偉 學學 號號: 08407106 起止日期起止日期: 2011 年 12 月 15 日 - 2011 年 12 月 22 日 指導教師指導教師: 劉麗麗 目錄 第一章 概述.1 1.1 課程設計名稱 1 1.2 課程設計目的 1 1.3 要求 1 第二章 背景分析.1 2.1 bootloader的概念1 2.2 bootloader的主要任務與典型結(jié)構(gòu)框架1 第三章 bootloader 串口驅(qū)動程序的設計 2 4.1 uart 寄存器簡介2 4.2 uart 串口工作原理5 4.3 uart 驅(qū)動程序詳細設計5 第四章 總結(jié).9 參考文獻.10 1 第一章 概述 1.1 課程設計名稱 bootloader 程序設計 1.2 課程設計目的 串口驅(qū)動和網(wǎng)口驅(qū)動程序的設計,可以通過串口或網(wǎng)口接收數(shù)據(jù)或文件, 并且可以寫到 flash 中 1.3 要求 編寫 bootloader 程序 uart.h uart.c 串口驅(qū)動測試程序 main.c 第二章 背景分析 2.1 bootloader 的概念 簡單地說,bootloader 就是在操作系統(tǒng)內(nèi)核運行之前運行的一段小程序。 通過這段小程序,可以初始化硬件設備、建立內(nèi)存空間的映射圖,從而將系統(tǒng) 的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準備好正確 的環(huán)境。 2.2 bootloader 的主要任務與典型結(jié)構(gòu)框架 從操作系統(tǒng)的角度看,bootloader 的總目標就是正確地調(diào)用內(nèi)核來執(zhí)行。 另外,由于 bootloader 的實現(xiàn)依賴于 cpu 的體系結(jié)構(gòu),因此大多數(shù) bootloader 都分為 stage1 和 stage2 兩大部分。依賴于 cpu 體系結(jié)構(gòu)的代碼,比 如設備初始化代碼等,通常都放在 stage1 中,而且通常都用匯編語言來實現(xiàn), 以達到短小精悍的目的。而 stage2 則通常用 c 語言來實現(xiàn),這樣可以實現(xiàn)更復 雜的功能,而且代碼會具有更好的可讀性和可移植性。 bootloader 的 stage1 通常包括一下步驟(以執(zhí)行的先后順序): (1) 硬件設備初始化。 (2) 為加載 bootloader 的 stage2 準備 ram 空間。 2 (3) 復制 bootloader 的 stage2 到 ram 空間中。 (4) 設置好堆棧。 (5) 跳轉(zhuǎn)到 stage2 的 c 入口點。 bootloader 的 stage2 通常包括一下步驟(以執(zhí)行的先后順序): (1) 初始化本階段要使用的硬件設備。 (2) 檢測系統(tǒng)內(nèi)存映射。 (3) 將 kernel 映像和根文件系統(tǒng)映像從 flash 上獨到 ram 空間中。 (4) 為內(nèi)核設置啟動參數(shù)。 (5) 調(diào)用內(nèi)核。 第三章 bootloader 串口驅(qū)動程序的設計 3.1 uart 寄存器簡介 s3c2440auart 控制器,提供 3 個獨立的異步串行 i/o 端口,每個端口都 可以在中斷模式或 dma 模式下工作。uart 可以產(chǎn)生中斷請求或 dma 請求, 以便在 cpu 和 uart 之間傳輸數(shù)據(jù)。在使用系統(tǒng)時鐘的情況下,uart 可以 支持最高 115.2kbps 的傳輸速率。如果外部設備通過 uextclk 為 uart 提供 時鐘,那么 uart 的傳輸速率可以更高。每個 uart 通道包含兩個用于接收和 發(fā)送數(shù)據(jù)的 16 字節(jié)的 fifo 緩沖寄存器。 由于 uart 是串行異步通信方式,因此在 uart 通信過程中每次只能傳輸 1 位(bit),若干位組成一個數(shù)據(jù)幀(frame),幀是 uart 通信中最基本單元,它 主要包含開始位、數(shù)據(jù)位、校驗位(如果開啟了數(shù)據(jù)校驗,要包含校驗位)和停 止位。uart 在通信之前要在發(fā)送端和接受端約定好幀的結(jié)構(gòu),也就是約定好 傳輸數(shù)據(jù)幀格式。 (1) 開始位:必須包含在數(shù)據(jù)幀中,表示一個幀的開始。 (2) 數(shù)據(jù)位:可選 5、6、7、8 位,該長度可由編程人員指定。 (3) 校驗位:如果在開啟了數(shù)據(jù)校驗時,該位必須指定。 (4) 停止位:可選 1、2 位,該位長度可由編程人員指定。 通信雙方約定好幀格式后,指定同一波特率,以保證雙方數(shù)據(jù)傳輸?shù)耐健?3 uart 串口驅(qū)動需要設置的寄存器及其具體特性如表 4-1表 4-8 所示: 表 3-1 uart0 串行控制寄存器(ulcon0) 寄存器名地址是否讀寫描述復位默認值 ulcon00x50000000r/w串口 0 串行控制寄存器0x00 ulcon0位描述初始值 保留70 紅外模式6選擇串口 0 是否使用紅外模式: 0 = 正常通信模式 1 = 紅外通信模式 0 校驗模式5:3設置串口 0 在數(shù)據(jù)接收和發(fā)送時采用的校驗方式: 0xx = 無校驗 100 = 奇校驗 101 = 偶校驗 110 = 強制校驗/檢測是否為 1 111 = 強制校驗/檢測是否為 0 000 停止位2設置串口 0 停止位數(shù): 0 = 每個數(shù)據(jù)幀一個停止位 1 = 每個數(shù)據(jù)幀二個停止位 0 數(shù)據(jù)位1:0設置串口 0 數(shù)據(jù)位數(shù): 00 = 5 個數(shù)據(jù)位 01 = 6 個數(shù)據(jù)位 10 = 7 個數(shù)據(jù)位 11 = 8 個數(shù)據(jù)位 00 表 3-2 uart0 串口控制寄存器(ucon0) 寄存器名地址是否讀寫描述復位默認值 ucon00x50000004r/w串口 0 控制寄存器0x00 ucon0位描述初始值 fclk 分頻因 子 15:12當 uart0 選擇 fclk 作為時鐘源時,設置其 fclk 的分頻因子 uart0 工作時鐘頻率 = fclk/fclk 分頻因子 + 6 0000 uart 時鐘源 選擇 11:10選擇 uart0 的工作時鐘 pclk,uextclk,fclk/n: 00,10 = pclk 01 = uextclk 11 = fclk/n 00 發(fā)送數(shù)據(jù)中 斷產(chǎn)生類型 9設置 uart0 中斷請求類型,在非 fifo 傳輸模 式下,一旦發(fā)送數(shù)據(jù)緩沖區(qū)為空,立即產(chǎn)生中 斷信號,在 fifo 傳輸模式下達到發(fā)送數(shù)據(jù)觸發(fā) 條件時立即產(chǎn)生中斷信號: 0 = 脈沖觸發(fā) 1 = 電平觸發(fā) 0 接收數(shù)據(jù)中 斷產(chǎn)生類型 8設置 uart0 中斷請求類型,在非 fifo 傳輸模 式下,一旦接收到數(shù)據(jù),立即產(chǎn)生中斷信號, 在 fifo 傳輸模式下達到接收數(shù)據(jù)觸發(fā)條件時立 即產(chǎn)生中斷信號: 0 = 脈沖觸發(fā) 1 = 電平觸發(fā) 0 接收數(shù)據(jù)超 時 7設置當接收數(shù)據(jù)時,如果數(shù)據(jù)超時,是否產(chǎn)生 接收中斷: 0 = 不開啟超時中斷 1 = 開啟超時中斷 0 4 接收數(shù)據(jù)錯 誤中斷 6設置當接收數(shù)據(jù)時,如果產(chǎn)生異常,如傳輸中 止,幀錯誤,校驗錯誤時,是否產(chǎn)生接收中斷: 0 = 不產(chǎn)生錯誤狀態(tài)中斷 1 = 產(chǎn)生錯誤狀態(tài)中斷 0 回送模式5設置該位時 uart 會進入回送模式,該模式僅 用于測試 0 = 正常模式 1 = 回送模式 0 發(fā)送終止信 號 4設置該位時,uart 會發(fā)送一個幀長度的終止 信號,發(fā)送完畢后,該位自動恢復為 0 0 = 正常傳輸 1 = 發(fā)送終止信號 0 發(fā)送模式3:2設置采用哪個方式執(zhí)行數(shù)據(jù)寫入發(fā)送緩沖區(qū) 00 = 無效 01 = 中斷請求或查詢模式 10 = dma0 請求 00 接收模式1:0設置采用哪個方式執(zhí)行數(shù)據(jù)寫入接收緩沖區(qū) 00 = 無效 01 = 中斷請求或查詢模式 10 = dma0 請求 0 表 3-3 uart fifo 控制寄存器(ufcon0) 寄存器名地址是否讀寫描述復位默認值 ufcon00x50000008r/w串口 0 fifo 控制寄存器0x00 ufcon0位描述初始值 發(fā)送數(shù)據(jù) 觸發(fā)級別 7:6設置 fifo 發(fā)送模式的觸發(fā)級別: 00 = fifo 為空觸發(fā) 01 = 16 字節(jié)觸發(fā) 10 = 32 字節(jié)觸發(fā) 11 = 48 字節(jié)觸發(fā) 0 接收數(shù)據(jù) 觸發(fā)級別 5:4設置 fifo 接收模式的觸發(fā)級別: 00 = fifo 為空觸發(fā) 01 = 16 字節(jié)觸發(fā) 10 = 32 字節(jié)觸發(fā) 11 = 48 字節(jié)觸發(fā) 00 保留30 發(fā)送 fifo 重置2在重置 fifo 后自動清除發(fā)送緩沖區(qū) 0 = 正常模式 1 = 自動清除 0 接收 fifo 重置1在重置 fifo 后自動清除接收緩沖區(qū) 0 = 正常模式 1 = 自動清除 0 啟用 fifo00 = 不啟用 fifo 1 = 啟用 fifo0 表 3-4 uart modem 控制寄存器(umcon0) 寄存器名地址是否讀寫描述復位默 認值 umcon00x5000000cr/w串口 0 modem 控制寄存器0x00 umcon0位描述初始值 保留7:5必須全部置 00 afc 自動 流控 40 = 不開啟流控 1 = 開啟流控0 保留3:1必須全部置 0000 5 請求發(fā)送0如果啟用 afc,該位無效,s3c2440a 會自動控制 nrts,如果不啟用 afc,nrts 必須由軟件控制 0 = 高電平激活 nrts 1 = 低電平激活 nrts 0 表 3-5 uart 發(fā)送/接收狀態(tài)寄存器(utrstat0) 寄存器名地址是否讀寫描述復位默認 值 utrstat00x50000010r/w串口 0 發(fā)送/接收狀態(tài)寄存器0x06 utrstat0位描述初始值 發(fā)送器為 空 2當發(fā)送緩存寄存器中沒有數(shù)據(jù)要發(fā)送且發(fā)送移位寄 存器為空時,自動置 1 0 = 非空 1 = 發(fā)送器為空 1 發(fā)送緩存 寄存器為 空 1當發(fā)送緩存寄存器為空時,自動置 1 0 = 發(fā)送緩存寄存器非空 1 = 發(fā)送緩存寄存器為空 1 接收緩存 寄存器為 空 0當接收緩存寄存器有數(shù)據(jù)到達是,自動置 1 0 = 接收緩存寄存器為空 1 = 緩存寄存器接收數(shù)據(jù) 0 表 3-6 uart 發(fā)送緩存寄存器(utxh0) 寄存器名地址是否讀寫描述復位默認值 utxh00x50000020(l) 0x50000023(b ) w串口 0 發(fā)送緩存寄存器 表 3-7 uart 接收緩存寄存器(urxh0) 寄存器名地址是否讀寫描述復位默認值 urxh00x50000024(l) 0x50000027(b ) r串口 0 接收緩存寄存器 表 3-8 uart 比特率除數(shù)寄存器(ubrdiv0) 寄存器名地址是否讀寫描述復位默認值 ubrdiv00x5000002 8 r/w串口 0 比特率除數(shù)寄存器0x00 ubrdiv0位描述初始值 比特率除數(shù)15:0設置比特率除數(shù)(大于 0)使用外部輸 入時可以置 0 3.2 uart 串口工作原理 每個 uart 包含一個波特率產(chǎn)生器、發(fā)送器、接收器和一個控制單元。 波特率發(fā)生器的時鐘可以由 pclk 或 uextclk 提供。發(fā)送器和接收器包 含 64 字節(jié)的 fifo 緩沖寄存器和數(shù)據(jù)移位器。發(fā)送時,數(shù)據(jù)被寫入 fifo,然后 拷貝到發(fā)送移位器中(1 字節(jié)大小),接下來數(shù)據(jù)通過發(fā)送數(shù)據(jù)引腳(txdn)被發(fā)送。 6 接收時,接收到的數(shù)據(jù)從接收數(shù)據(jù)引腳(rxdn)移入,然后從移位器(1 字節(jié)大小) 拷貝到 fifo 中。 3.3 uart 驅(qū)動程序詳細設計 uart 驅(qū)動程序設計到的函數(shù)主要有初始化函數(shù)、串口發(fā)送字節(jié)函數(shù)、串 口發(fā)送字符串函數(shù)、串口接收字節(jié)函數(shù) 新建 uart.h 頭文件,編寫代碼如下: #ifndef _uart_h #define _uart_h /串口寄存器宏定義 #define rulcon0 (*(volatile unsigned long *)0x50000000) #define rucon0 (*(volatile unsigned long *)0x50000004) #define rufcon0 (*(volatile unsigned long *)0x50000008) #define rumcon0 (*(volatile unsigned long *)0x5000000c) #define rutrstat0 (*(volatile unsigned long *)0x50000010) #define rutxh0 (*(volatile unsigned long *)0x50000020) #define rurxh0 (*(volatile unsigned long *)0x50000024) #define rubrdiv0 (*(volatile unsigned long *)0x50000028) #define rgphcon (*(volatile unsigned long *)0x56000070) #define rgphdat (*(volatile unsigned long *)0x56000074) #define rgphup (*(volatile unsigned long *)0x56000078) extern int uart_select(uint8 no); extern void uart_init(void); extern void uart_sendbyte(uint8 data); extern void uart_sendstr(char const *str); extern int uart_getkey(void); #endif 新建 uart.c 文件,用于具體實現(xiàn)上述函數(shù),代碼如下: #include “config.h“ /串口初始化函數(shù) 7 void uart_init(void) int i; rgphup = rgphup | (0x032); rgphcon = (rgphcon rufcon0 = 0x00; / 禁止 fifo 功能 rumcon0 = 0x00; / afc(流控制)禁能 rulcon0 = 0x03; / 禁止 irda,無奇偶校驗,1 位停止位,8 位數(shù)據(jù) 位 rucon0 = 0x245; / 使用 pclk 來生成波特率,發(fā)送中斷為電平觸發(fā) 模式,接收中斷為邊沿觸發(fā)模式,禁止接收超時中斷,使能接收錯誤中斷, 正常工作模式,中斷或查詢方式(非 dma) rubrdiv0=(int)(pclk/16.0/uart_bps + 0.5) -1; / 串口波特率設置 for(i=0;i100;i+); /串口發(fā)送字節(jié)函數(shù) void uart_sendbyte(uint8 data) int i; while(!(rutrstat0 / 等待發(fā)送器為空 for(i=0; i10; i+); rutxh0 = data;/ 發(fā)送數(shù)據(jù) /串口發(fā)送字符串函數(shù) void uart_sendstr(char const *str) while(*str != 0) if(*str = n) uart_sendbyte(r); 8 uart_sendbyte(*str+);/ 發(fā)送數(shù)據(jù) /串口接收字節(jié)函數(shù) int uart_getkey(void) int i; while(!(rutrstat0 for(i=0; i10; i+); return(rurxh0); 編寫 main.c,內(nèi)容如下: int main(void) char cmd20; uint8 rece256; memset(cmd,0,20); uart_select(0); uart_init(); clk_init(); delayns(10); uart_sendstr(“串口初始化完成!rn“); uart_sendstr(“時鐘初始化完成!rn“); while(1) memset(cmd,0,20); uart_receive(cmd); /uart_sendstr(cmd); if(memcmp(cmd,“exit“,4) = 0) break; 9 uart_sendstr(“rngood bye!rn“); return 0; 第四章 總結(jié) 課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題, 鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程.隨著 科

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論