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

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論