嵌入式應(yīng)用系統(tǒng)設(shè)計(jì)全套課件_第1頁
嵌入式應(yīng)用系統(tǒng)設(shè)計(jì)全套課件_第2頁
嵌入式應(yīng)用系統(tǒng)設(shè)計(jì)全套課件_第3頁
嵌入式應(yīng)用系統(tǒng)設(shè)計(jì)全套課件_第4頁
嵌入式應(yīng)用系統(tǒng)設(shè)計(jì)全套課件_第5頁
已閱讀5頁,還剩214頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第1章概述1.1嵌入式系統(tǒng) 8 1.1.1嵌入式系統(tǒng)的定義 8 1.1.2嵌入式系統(tǒng)的發(fā)展歷史 10 1.1.3嵌入式系統(tǒng)的特點(diǎn) 12 1.1.4典型嵌入式系統(tǒng)的基本組成 14 1.1.5嵌入式系統(tǒng)的應(yīng)用領(lǐng)域 151.2嵌入式處理器 17 1.2.1嵌入式微控制器 17 1.2.2數(shù)字信號(hào)處理器 18 1.2.3嵌入式微處理器 19 1.2.4片上系統(tǒng) 201.3嵌入式操作系統(tǒng) 211.4嵌入式系統(tǒng)的開發(fā)流程 251.5嵌入式系統(tǒng)的發(fā)展趨勢(shì)圖1-1無處不在的嵌入式產(chǎn)品1.1.2嵌入式系統(tǒng)的定義原則上講,嵌入式系統(tǒng)是對(duì)所有形態(tài)各異、功能有別的嵌入式產(chǎn)品所具備的共同特征的抽象和概括。IEEE(電氣和電子工程師協(xié)會(huì))組織對(duì)嵌入式系統(tǒng)下過定義,它的原文是:Devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants。翻譯成中文就是:用于對(duì)機(jī)器和設(shè)備進(jìn)行控制、監(jiān)視或者輔助操作的裝置。仔細(xì)揣摩這個(gè)定義,我們可以發(fā)現(xiàn),它主要是從應(yīng)用的角度為嵌入式系統(tǒng)所作出的定義。嵌入式系統(tǒng)是硬件和軟件的綜合體,同時(shí)還可以涵蓋機(jī)電等附屬裝置。

從技術(shù)的層面對(duì)嵌入式系統(tǒng)作的定義:除了IEEE組織對(duì)嵌入式系統(tǒng)的這個(gè)定義外,我們平時(shí)講到嵌入式系統(tǒng)時(shí),還會(huì)用到另一個(gè)大家都比較認(rèn)可的定義:以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。專用計(jì)算機(jī)系統(tǒng)是相對(duì)于通用計(jì)算機(jī)系統(tǒng)而提出的1.1.3嵌入式系統(tǒng)的發(fā)展歷史嵌入式的軟件和硬件總是呈交替上升的雙螺旋方式發(fā)展。而且一直是快速發(fā)展的狀態(tài),一方面得益于微電子技術(shù)的發(fā)展,另一方面也得益于人們對(duì)應(yīng)用需求的不斷深入。嵌入式技術(shù)的復(fù)雜性和難度不斷加大,對(duì)從業(yè)人員軟硬件開發(fā)能力的要求也越來越高,開發(fā)模式由原來更多地是由單兵或者二、三個(gè)人的開發(fā)逐步過渡到必需有具備多種技術(shù)背景的團(tuán)隊(duì)開發(fā)。第一階段:以單芯片為核心的系統(tǒng)。硬件以8位單片機(jī)為主,軟件開發(fā)以匯編語言為主,

直接編程實(shí)現(xiàn)系統(tǒng)功能多數(shù)系統(tǒng)中還沒有引入操作系統(tǒng)。第二階段:以嵌入式CPU為基礎(chǔ)

嵌入式操作系統(tǒng)為核心的嵌入式系統(tǒng)硬件:嵌入式CPU的種類和性能空前的豐富;微處理器是以32位機(jī)為主,軟件:不再以匯編為主,而是以C語言為主,用操作系統(tǒng)作為軟件開發(fā)的中間層,提高產(chǎn)品的開發(fā)速度和產(chǎn)品的可靠性、實(shí)時(shí)性。第三個(gè)階段:以基于Internet為標(biāo)志的嵌入式系統(tǒng),這是一個(gè)正在迅速發(fā)展的階段。1.1.1嵌入式

系統(tǒng)的應(yīng)用嵌入式系統(tǒng)的應(yīng)用觸及每一個(gè)領(lǐng)域,包括工業(yè)控制、交通管理、醫(yī)療儀(遠(yuǎn)程醫(yī)療)家庭智能管理系統(tǒng)、環(huán)境監(jiān)測(cè)和機(jī)器人、電子商務(wù)、汽車電子、信息家電圖1-6家庭智能管理系統(tǒng)圖1-8汽車控制系統(tǒng)1.1.4嵌入式系統(tǒng)的特點(diǎn)因?yàn)閷S眯院蛻?yīng)用為主的原因,導(dǎo)致嵌入式系統(tǒng)和其它計(jì)算機(jī)系統(tǒng)比起來有很多自己的特點(diǎn)和特色:

1、操作系統(tǒng)的系統(tǒng)內(nèi)核小2、專用性強(qiáng)嵌入式系統(tǒng)的個(gè)性化特征很明顯,在開發(fā)階段就要把軟件和硬件緊密結(jié)合起來,3、系統(tǒng)精簡(jiǎn)4、高實(shí)時(shí)性操作系統(tǒng)

5、嵌入式軟件開發(fā)逐步走向標(biāo)準(zhǔn)化。

6、嵌入式系統(tǒng)開發(fā)需要開發(fā)工具和環(huán)境1.1.5典型嵌入式系統(tǒng)的基本組成硬件:微處理器存儲(chǔ)器外設(shè)器件I/O端口圖1-4嵌入式系統(tǒng)的硬件結(jié)構(gòu)模型。軟件通常包括操作系統(tǒng)和應(yīng)用程序

圖1-5嵌入式系統(tǒng)的通用軟件結(jié)構(gòu)以及軟硬件關(guān)系示意圖1.2 嵌入式處理器嵌入式微控制器(MCU)數(shù)字信號(hào)處理器(DSP)嵌入式微器處理(MPU)片上系統(tǒng)(SOC)嵌入式微控制器 最典型代表就是單片機(jī)數(shù)字信號(hào)處理器 數(shù)字信號(hào)處理器是專門用于信號(hào)處理方面的處理器,根據(jù)信號(hào)處理的特點(diǎn)和要求,它在系統(tǒng)結(jié)構(gòu)和指令算法方面都做了特殊的設(shè)計(jì)。嵌入式微處理器其基礎(chǔ)是通用計(jì)算機(jī)中的CPU。將微處理器裝配在專門設(shè)計(jì)的電路板上,只保留和嵌入式應(yīng)用有關(guān)的母板功能,片上系統(tǒng)SOC最大的特點(diǎn)就是成功實(shí)現(xiàn)了軟硬件的無縫結(jié)合,1.3嵌入式操作系統(tǒng)圖1-12操作系統(tǒng)的分類及適用范圍1.4嵌入式系統(tǒng)的開發(fā)流程圖1-14嵌入式系統(tǒng)基本的開發(fā)流程第2章ARM微處理器基礎(chǔ)

2.1 ARM微處理器概述 29 2.1.1對(duì)ARM的認(rèn)識(shí) 29 2.1.2ARM微處理器的應(yīng)用領(lǐng)域及特點(diǎn) 30 2.1.3ARM微處理器系列 31 2.1.4ARM微處理器結(jié)構(gòu) 33 2.1.5ARM芯片的應(yīng)用選型 352.2 ARM7微處理器的編程模型 36 2.2.1指令長(zhǎng)度及數(shù)據(jù)類型 38 2.2.2ARM體系結(jié)構(gòu)的存儲(chǔ)器格式 39 2.2.3ARM微處理器的工作狀態(tài) 40 2.2.4處理器模式 41 2.2.5寄存器組織 41 2.2.6異常 462.1ARM微處理器概述作為公司,ARM在1990年成立于英國(guó)劍橋,主要出售芯片設(shè)計(jì)技術(shù)的授權(quán)。圖2-3ARM公司?ARM技術(shù)?都是它微處理器的市場(chǎng)增長(zhǎng)圖2-1近3年中嵌入式設(shè)計(jì)中各種架構(gòu)的微處理器的市場(chǎng)增長(zhǎng)2.1.2ARM微處理器的應(yīng)用領(lǐng)域及特點(diǎn)1.工業(yè)控制領(lǐng)域:ARM微控制器的低功耗、高性價(jià)比,向傳統(tǒng)的8位/16位微控制器提出了挑戰(zhàn)。2.無線通訊領(lǐng)域:目前已有超過85%的無線通訊設(shè)備采用了ARM技術(shù),ARM以其高性能和低成本,在該領(lǐng)域的地位日益鞏固。3.網(wǎng)絡(luò)應(yīng)用隨著寬帶技術(shù)的推廣,采用ARM技術(shù)的ADSL芯片正逐步獲得競(jìng)爭(zhēng)優(yōu)勢(shì)。此外,ARM在語音及視頻處理上行了優(yōu)化,并獲得廣泛支持,對(duì)傳統(tǒng)的DSP領(lǐng)域提出了挑戰(zhàn)。4.消費(fèi)類電子產(chǎn)品:在目前流行的數(shù)字音頻播放器、數(shù)字機(jī)頂盒和游戲機(jī)中得到廣泛采用。5.成像和安全產(chǎn)品:現(xiàn)在流行的數(shù)碼相機(jī)和打印機(jī)中絕大部分采用ARM技術(shù)。手機(jī)中的32位SIM智能卡也采用了ARM技術(shù)圖2-4今天的數(shù)字家庭2.1.3ARM微處理器系列圖2-5面向各種應(yīng)用的ARM家族成員2.1.4ARM微處理器結(jié)構(gòu)1.RISC體系結(jié)構(gòu)(1)采用固定長(zhǎng)度的指令格式

指令歸整、簡(jiǎn)單、基本尋址方式有2~3種。(2)使用單周期指令,便于流水線操作執(zhí)行。(3)大量使用寄存器

數(shù)據(jù)處理指令只對(duì)寄存器進(jìn)行操作,只有加載/存儲(chǔ)指令可以訪問存儲(chǔ)器,以提高指令的執(zhí)行效率。ARM體系結(jié)構(gòu)除此上面的特點(diǎn)外,ARM體系結(jié)構(gòu)還采用了一些特別的技術(shù),在保證高性能的前提下盡量縮小芯片的面積,并降低功耗:(1)所有的指令都可根據(jù)前面的執(zhí)行結(jié)果決定是否被執(zhí)行,從而提高指令的執(zhí)行效率。(2)可用加載/存儲(chǔ)指令批量傳輸數(shù)據(jù),以提高數(shù)據(jù)的傳輸效率。(3)可在一條數(shù)據(jù)處理指令中同時(shí)完成邏輯處理和移位處理。(4)在循環(huán)處理中使用地址的自動(dòng)增減來提高運(yùn)行效率。圖2.7ARM7TDMI結(jié)構(gòu)框圖嵌入式ICE宏單元掃描鏈2總線分割器ARM7TDMI主處理器邏輯TAP控制器RANGEOUT1RANGEOUT1EXTERN0EXTERN1掃描鏈1掃描鏈1掃描鏈0nOPCnRWMAS[1:0]nTRANSnMREQA[31:0]D[31:0]DIN[31:0]DOUT[31:0]所有其它信號(hào)SCREG[3:0]IR[3:0]TAPSM[3:0]TCKTMSnTRSTTDITDOARM7TDMI處理器框圖圖2-8ARM7TDMI

內(nèi)核框圖DBGACK掃描控制指令譯碼和邏輯控制指令流水線讀數(shù)據(jù)寄存器Thumb指令控制器寫數(shù)據(jù)寄存器32×8乘法器桶形移位器地址寄存器地址增量器寄存器組(31×32位寄存器)(6位狀態(tài)寄存器)32位ALU增量器總線A總線PC總線ALU總線B總線ALEA[31:0]ABED[31:0]DBEnENOUTnENININSTRVALIDDBGRQIBREAKPTIELCKnEXECISYNCBL[3:0]APEMCLKnWAITnRWMAS[1:0]nIRQnFIQnRESETABORTnTRANSnMRREQnOPCSEQLOCKnCPICPACPBnM[4:0]TBETBITHIGHZARM7TDMI主處理器邏輯NZCV□□□□□□IFTM4M3M2M1M0313029282726252423876543210條件代碼標(biāo)志保留控制位溢出進(jìn)位或借位或擴(kuò)展零負(fù)或小于模式位狀態(tài)位FIQ禁止IRQ禁止圖2-11程序狀態(tài)寄存器的格式表2-2運(yùn)行模式位M[4:0]的具體含義R0R1R2R3R4R5R6R7SPLRPCCPSRSPSRR0R1R2R3R4R5R6R7R8R9R10R11R12R13R14R15CPSRSPSR``````Thumb狀態(tài)ARM狀態(tài)低位寄存器高位寄存器圖2-5Thumb狀態(tài)下和ARM狀態(tài)下的寄存器對(duì)應(yīng)關(guān)系第3章ARM指令系統(tǒng)與編程基礎(chǔ)3.1ARM指令系統(tǒng) 3.1.1ARM指令集概述 52 3.1.2ARM指令的尋址方式 55 3.1.3ARM指令集 60 3.1.4Thumb指令及其應(yīng)用 73 3.2ARM程序設(shè)計(jì)基礎(chǔ) 3.2.1ARM偽指令 74 3.2.2匯編語言的語句格式 82 3.2.3匯編語言的程序設(shè)計(jì) 85 3.2.4匯編語言與C/C++的混合編程 883.3實(shí)驗(yàn)與練習(xí) 3.3.1EL-ARM(DSP)-E100/830教學(xué)實(shí)驗(yàn)系統(tǒng)簡(jiǎn)介(一) 90 3.3.2實(shí)驗(yàn)一ARMADS1.2開發(fā)環(huán)境創(chuàng)建及簡(jiǎn)要介紹 92 3.3.3實(shí)驗(yàn)二ARM的匯編語言程序設(shè)計(jì) 107 3.3.4實(shí)驗(yàn)三基于ARM的C語言程序設(shè)計(jì) 114表3-1ARM指令編碼格式表3-2ARM指令及功能描述ARM指令及功能描述表3-3ARM指令的條件碼表1.立即尋址ADDR0,R0,#1; R0←R0+1ADDR0,R0,#0x3f; R0←R0+0x3f

2.寄存器尋址ADDR0,R1,R2;R0←R1+R2。3.寄存器間接尋址LDRR0,[R1];R0←[R1]以R1值為地址的存儲(chǔ)器中的數(shù)據(jù)傳送到R0中。STRR0,[R1];[R1]←R0以R0的值傳送到以R1的值為地址的存儲(chǔ)器中。尋址方式14.變址尋址變址尋址就是將寄存器(該寄存器一般稱作基址寄存器)的內(nèi)容與指令中給出的地址偏移量相加從而得到一個(gè)操作數(shù)的有效地址。變址尋址方式常用于訪問某基地址附近的地址單元。采用變址尋址的方式通常有3種情況:(1)程序相對(duì)偏移基址是隱含的,通常是程序計(jì)數(shù)器PC,偏移量包含在指令代碼中。例如:LDR Address1+0x20;偏移表達(dá)式是語句標(biāo)號(hào)加一個(gè)正數(shù)B Address2-0x20*0x2;偏移表達(dá)式是語句標(biāo)號(hào)加一個(gè)負(fù)數(shù)(2)前索引(pre-indexed)的變址尋址基址先和偏移量相加(或相減),然后指向要尋址的地址進(jìn)行操作。在這種方式中,指令執(zhí)行以后,地址基址。例如:LDR R2,[R3,#08];先計(jì)算R3+08,結(jié)果作為地址,不改變R3STR R5,[R6,R0];先計(jì)算R6+R0,結(jié)果作為地址,不改變R6(3)后索引(post-indexed)的變址尋址先對(duì)基址指向的數(shù)據(jù)進(jìn)行操作,將基址和偏移量相加存儲(chǔ)在基址寄存器中。例如:LDR R0,[R1],#4;R0←[R1],R1←R1+04STR R5,[R7],#-2;R5←[R7],R7←R7-02尋址方式2尋址方式36.堆棧尋址(1)滿遞增堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。(2)滿遞減堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由高地址向低地址生成。(3)空遞增堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由低向高地址生成。(4)空遞減堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由高向低地址生成。5.多寄存器尋址這種尋址方式可以用一條指令完成對(duì)最多16個(gè)通用寄存器的數(shù)據(jù)傳送。LDMIAR0,{R1,R2,R3,R4} ;R1←[R0],R2←[R0+4] ;R3←[R0+8],R4←[R0+12]后綴IA表示在每次執(zhí)行完加載/存儲(chǔ)操作后,R0按字長(zhǎng)度增加,因此,指令可將連續(xù)存儲(chǔ)單元的值傳送到R1~R4,并使R0增加16(R0←R0+16)。7.寄存器移位尋址ARM指令集獨(dú)有的尋址方式操作數(shù)是對(duì)一個(gè)寄存器的內(nèi)容進(jìn)行移位(左移或者右移)后的結(jié)果,移位的位數(shù)必須寫在表達(dá)式中。例如:MOV R3,R4,LSL#2 ;對(duì)寄存器R4內(nèi)的數(shù)據(jù)邏輯左移2位

ADD R3,R4,R1,LSR#1 ;對(duì)寄存器R1內(nèi)的數(shù)據(jù)邏輯右移1位ARM指令集共有5種移位操作:(1)LSL(LogicShiftLeft) 邏輯左移。(2)LSR(LogicShiftright) 邏輯左移。(3)ROR(Rotateright) 循環(huán)右移。(4)ASR(ArithmeticShiftRight) 算術(shù)右移。(5)RRX(RotateRightextended) 擴(kuò)展的循環(huán)右移。指令LDMSTM尋址方式3.1.3ARM指令集分支指令可以完成從當(dāng)前指令向前或向后32MB的地址空間的跳轉(zhuǎn),(1)B分支指令:最簡(jiǎn)單的分支指令;(2)BL分支和鏈接指令:可以存儲(chǔ)分支處的地址,可用于子程序調(diào)用;(3)BX分支和交換指令:帶狀態(tài)切換的跳轉(zhuǎn)指令可以在ARM指令集和Thumb指令集之間跳轉(zhuǎn)。數(shù)據(jù)處理指令MOV、MVN、CMP、CMN、TST、TEQ、ADD、ADC、SUB、

SBC、RSB、RSC、AND、EOR、BIC數(shù)據(jù)處理指令的編碼格式數(shù)據(jù)處理指令的語法格式<opcode>{<cond>}{S}<Rd>,<Rn>,<shifter_operand>其中:

<opcode> 指令助記符,001代表是數(shù)據(jù)處理和PSR傳送類指令,如0010100表示算術(shù)加操作指令A(yù)DD。

{<cond>} 表示指令執(zhí)行的條件。

{S} 決定指令的操作是否影響CPSR的值。

<Rd> 表示目標(biāo)寄存器。

<Rn> 表示包含第1個(gè)操作數(shù)的寄存器。MOVPC,R14;將寄存器R14的值傳送到PC,常用于子程序返回MOVSR1,R0,LSL#3;將寄存器R0的值左移3位后傳送到R1,影響標(biāo)志位MVNR0,#0 ;將立即數(shù)0取反傳送到寄存器R0中,完成后R0=-1。SUBSR0,R1,R2;R0=R1-R2-!C,根據(jù)結(jié)果設(shè)置CPSR的進(jìn)位標(biāo)志位RSBR0,R1,#256;R0=256–R1RSCR0,R1,R2;R0=R2–R1-!C3.數(shù)據(jù)傳送指令不同于數(shù)據(jù)處理類指令中的MOV指令,此處是對(duì)存儲(chǔ)器的訪問。存儲(chǔ)器訪問指令中數(shù)據(jù)的源和目標(biāo)只有兩種:

ARM的寄存器R0-R15外部存儲(chǔ)器。(1)字傳送指令LDR和STR指令格式:LDR/STR{條件}寄存器Rd,<存儲(chǔ)器地址>STRR0,[R1,#8];將R0中的字?jǐn)?shù)據(jù)寫入以R1+8為地址的存儲(chǔ)器中。LDRR0,[R1,R2,LSL#2]??;將存儲(chǔ)器地址為R1+R2×4的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1。(2)無符號(hào)字節(jié)傳送指令LDRB和STRB(3)無符號(hào)半字傳送指令LDRH和STRH4.數(shù)據(jù)塊傳送指令LDM和和STM數(shù)據(jù)塊傳送指令可以一次在一片連續(xù)的存儲(chǔ)器單元和多個(gè)寄存器之間傳送數(shù)據(jù)。常用于將多個(gè)寄存器的內(nèi)容入?;虺鰲?。該指令將基址寄存器所指示的一片連續(xù)存儲(chǔ)器的數(shù)據(jù)傳送到寄存器列表所指示的多個(gè)寄存器.(4)數(shù)據(jù)塊傳送指令LDM和STM指令格式:LDM/STM{條件}{類型}基址寄存器{!},寄存器列表{∧}指令示例:STMFDR13!,{R0,R4-R12,LR} ;將寄存器列表中的寄存器(R0,R4到R12,LR)存入堆棧LDMFDR13!,{R0,R4-R12,PC};將堆棧內(nèi)容恢復(fù)到寄存器(R0,R4到R12,PC)。{!}可選后綴,用來設(shè)置指令中的W位。選擇該后綴時(shí),當(dāng)數(shù)據(jù)傳送完畢之后,將最后的地址寫入基址寄存器,否則基址寄存器的內(nèi)容不改變。基址寄存器不允許為R15,寄存器列表可以為R0~R15的任意組合。{∧}可選后綴,當(dāng)指令為L(zhǎng)DM且寄存器列表中包含R15,選用該后綴時(shí)表示:除了正常的數(shù)據(jù)傳送之外,還將SPSR復(fù)制到CPSR。同時(shí),該后綴還表示傳入或傳出的是用戶模式下的寄存器,而不是當(dāng)前模式下的寄存器。

{類型}包括以下幾種情況:

IA每次傳送后地址加1;IB每次傳送前地址加1;

DA每次傳送后地址減1;DB每次傳送前地址減1;

FD滿遞減堆棧;ED空遞減堆棧;

FA滿遞增堆棧;EA空遞增堆棧;3.2ARM程序設(shè)計(jì)基礎(chǔ)(1)滿遞增堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。(2)滿遞減堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由高地址向低地址生成。(3)空遞增堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由低向高地址生成。(4)空遞減堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由高向低地址生成。ARM(Thumb)匯編語言的語句格式為:{標(biāo)號(hào)}{指令或偽指令}{;注釋}在ARM(Thumb)匯編語言程序中,以程序段為單位組織代碼。段是相對(duì)獨(dú)立的指令或數(shù)據(jù)序列代碼段的內(nèi)容為執(zhí)行代碼,數(shù)據(jù)段存放代碼運(yùn)行時(shí)需要用到的數(shù)據(jù)。一個(gè)匯編程序至少應(yīng)該有一個(gè)代碼段,當(dāng)程序較長(zhǎng)時(shí),可以分割為多個(gè)代碼段和數(shù)據(jù)段,多個(gè)段在程序編譯鏈接時(shí)最終形成一個(gè)可執(zhí)行的映象文件。一個(gè)匯編語言源程序的基本結(jié)構(gòu)AREAInit,CODE,READONLYENTRYStartLDRR0,=0x3FF5000LDRR1,#0xFFSTRR1,[R0]LDRR0,=0x3FF5008LDRR1,#0x01STRR1,[R0]┉┉END使用BL指令調(diào)用子程序的匯編語言源程序的基本結(jié)構(gòu)

AREAInit,CODE,READONLY ENTRY Start LDRR0,=0x3FF5000 LDRR1,#0xFF STRR1,[R0] LDRR0,=0x3FF5008 LDRR1,#0x01 STRR1,[R0] BLPRINT_TEXT;調(diào)用子程序PRINT_TEXT ┉┉PRINT_TEXT ;子程序PRINT_TEXT入口

┉┉ MOVPC,BL ;從子程序返回

┉┉實(shí)現(xiàn)數(shù)據(jù)塊復(fù)制功能的匯編程序AREABlock,CODE,READONLY;程序名為Block,代碼段,只讀屬性numEQU20 ;設(shè)置將要復(fù)制的字?jǐn)?shù)ENTRY ;標(biāo)識(shí)程序入口點(diǎn)StartLDRr0,=src

;r0寄存器指向源數(shù)據(jù)區(qū)srcLDRrl,=dst

;r1寄存器指向目標(biāo)數(shù)據(jù)區(qū)dstMOVr2,#num ;r2寄存器指定將要復(fù)制的字?jǐn)?shù)MOVsp,#0x400 ;設(shè)置數(shù)據(jù)棧指針(r13),用于保存工作寄存器數(shù)值blockcopy

;以下進(jìn)行以8個(gè)字為單位的數(shù)據(jù)復(fù)制MOVSr3,r2,LSR#3 ;需要進(jìn)行的以8個(gè)字為單位的復(fù)制次數(shù)為r2<<3

;結(jié)果≠0,夠8個(gè)字,以r3計(jì)數(shù)BEQcopywords

;不足8個(gè)字,跳轉(zhuǎn)到copywords處,以字為單位復(fù)制STMFDsp!,{r4-r11} ;保存工作寄存器OctcopyLDMIAr0!,{r4-r11} ;從源數(shù)據(jù)區(qū)讀取8個(gè)字的數(shù)據(jù),分別放到8個(gè)寄存 ;器中,并更新目標(biāo)數(shù)據(jù)區(qū)指針r0STMIAr1!,{r4-r11} ;將這8個(gè)字?jǐn)?shù)據(jù)寫入到目標(biāo)數(shù)據(jù)區(qū)中,并更新;目標(biāo)數(shù)據(jù)區(qū)指針r1SUBSr3,r3,#1 ;將塊復(fù)制次數(shù)減1BNEoctcopy

;還沒完成以8個(gè)字為單位的塊復(fù)制,繼續(xù)循環(huán)LDMFDsp!,{r4-r11} ;恢復(fù)工作寄存器值CopywordsANDSr2,r2,#7 ;剩下不足8個(gè)字的數(shù)據(jù)的字?jǐn)?shù)BEQstop

;若r2=0,則說明數(shù)據(jù)復(fù)制完成Wordcopy

LDRr3,[r0],#4 ;從源數(shù)據(jù)區(qū)讀取1個(gè)字的數(shù)據(jù),放到r3寄存器 ;中,并更新目標(biāo)數(shù)據(jù)區(qū)指針r0STRr3,[r1],#4 ;將r3中的數(shù)據(jù)寫入到目標(biāo)數(shù)據(jù)區(qū)中,并更新 ;目標(biāo)數(shù)據(jù)區(qū)指針r1SUBSr2,r2,#1 ;將字?jǐn)?shù)減1BNEwordecopy

;以字為單位的數(shù)據(jù)復(fù)制沒完成,則循環(huán)stopMOVr0,#Ox18 ;設(shè)置r0=angel_SWIreason_ReportException(默認(rèn)0x18)LDRr1,0x20026 ;設(shè)置r1=ADP_Stopped_ApplicationExit(默認(rèn)0x20026)SWI0xl23456 ;終止應(yīng)用程序,將控制臺(tái)交還給調(diào)試器。AREABlockData,DATA,READWRITE ;定義名稱為BlockData的數(shù)據(jù)區(qū),可讀可寫srcDCD1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 ;源數(shù)據(jù)區(qū)dstDCD0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;目的數(shù)據(jù)區(qū)END ;匯編程序結(jié)束程序結(jié)構(gòu)1AREABlock,CODE,READONLY

;程序名為Block,代碼段,只讀屬性numEQU20 ;設(shè)置將要復(fù)制的字?jǐn)?shù)ENTRY ;標(biāo)識(shí)程序入口點(diǎn)StartLDRr0,=src

;r0寄存器指向源數(shù)據(jù)區(qū)srcLDRrl,=dst

;r1寄存器指向目標(biāo)數(shù)據(jù)區(qū)dstMOVr2,#num ;r2寄存器指定將要復(fù)制的字?jǐn)?shù)MOVsp,#0x400 ;設(shè)置數(shù)據(jù)棧指針(r13),用于保存工作寄存器數(shù)值blockcopy

;以下進(jìn)行以8個(gè)字為單位的數(shù)據(jù)復(fù)制MOVr0,#Ox18;設(shè)置r0=angel_SWIreason_ReportException(默認(rèn)0x18)LDRr1,0x20026;設(shè)置r1=ADP_Stopped_ApplicationExit(默認(rèn)0x20026)SWI0xl23456 ;終止應(yīng)用程序,將控制臺(tái)交還給調(diào)試器。AREABlockData,DATA,READWRITE

;定義名稱為BlockData的數(shù)據(jù)區(qū),可讀可寫srcDCD1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 ;源數(shù)據(jù)區(qū)dstDCD0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;目的數(shù)據(jù)區(qū)END ;匯編程序結(jié)束以8個(gè)字為單位的數(shù)據(jù)復(fù)制

MOVSr3,r2,LSR#3;需要進(jìn)行的以8個(gè)字為單位的復(fù)制次數(shù)為r2<<3

;結(jié)果≠0,夠8個(gè)字,以r3計(jì)數(shù)BEQcopywords

;不足8個(gè)字,跳轉(zhuǎn)到copywords處,以字為單位復(fù)制STMFDsp!,{r4-r11} ;保存工作寄存器OctcopyLDMIAr0!,{r4-r11} ;從源數(shù)據(jù)區(qū)讀取8個(gè)字的數(shù)據(jù),分別放到8個(gè)寄存 ;器中,并更新目標(biāo)數(shù)據(jù)區(qū)指針r0STMIAr1!,{r4-r11} ;將這8個(gè)字?jǐn)?shù)據(jù)寫入到目標(biāo)數(shù)據(jù)區(qū)中,并更新;目標(biāo)數(shù)據(jù)區(qū)指針r1SUBSr3,r3,#1 ;將塊復(fù)制次數(shù)減1BNEoctcopy

;還沒完成以8個(gè)字為單位的塊復(fù)制,繼續(xù)循環(huán)LDMFDsp!,{r4-r11} ;恢復(fù)工作寄存器值CopywordsANDSr2,r2,#7 ;剩下不足8個(gè)字的數(shù)據(jù)的字?jǐn)?shù)BEQstop

;若r2=0,則說明數(shù)據(jù)復(fù)制完成Wordcopy

LDRr3,[r0],#4 ;從源數(shù)據(jù)區(qū)讀取1個(gè)字的數(shù)據(jù),放到r3寄存器 ;中,并更新目標(biāo)數(shù)據(jù)區(qū)指針r0STRr3,[r1],#4 ;將r3中的數(shù)據(jù)寫入到目標(biāo)數(shù)據(jù)區(qū)中,并更新 ;目標(biāo)數(shù)據(jù)區(qū)指針r1SUBSr2,r2,#1 ;將字?jǐn)?shù)減1BNEwordecopy

;以字為單位的數(shù)據(jù)復(fù)制沒完成,則循環(huán)stop匯編語言與C/C++的混合編程//這是一個(gè)C程序,程序名為sum,功能為求5個(gè)整數(shù)的和int

sum(int

a,int

b,int

c,int

d,inte){returna+b+c+d+e;} ;匯編程序名func,功能為調(diào)用C程序sum()計(jì)算5個(gè)整數(shù)i,2*i,3*i,4*i,5*i的和EXPORTfunc

;用EXPORT偽指令聲明程序func可以被其他程序引用AREAfunc,CODE,READONLY

;定義了一個(gè)名稱為func的代碼段,只讀屬性IMPORTsum ;用IMPORT偽指令聲明引用變量sumSTRlr,[sp,#-4]! ;保存返回地址ADDr1,r0,r0 ;假設(shè)進(jìn)入程序func時(shí),r1=2r0=2*iADDr2,r1,r0 ;r2=3*iADDr3,r1,r2 ;r3=5*iSTRr3,[sp,#-4]! ;第5個(gè)參數(shù)5*i通過數(shù)據(jù)棧傳遞ADDr3,r1,r1 ;r3的值為4*iBLsum ;調(diào)用C程序sum()ADDsp,sp,#4 ;調(diào)整數(shù)據(jù)棧指針,準(zhǔn)備返回LDRpc,[sp],#4 ;返回END3.3實(shí)驗(yàn)與練習(xí)EL-ARM(DSP)-E100/830型教學(xué)實(shí)驗(yàn)系統(tǒng)是一款綜合的嵌入式教學(xué)實(shí)驗(yàn)系統(tǒng),該系統(tǒng)核心處理器選用S3C44B0x,它是32位微處理器,ARM7TDMI內(nèi)核。S3C44B0XCPLDUSB設(shè)備主USB10M網(wǎng)口UARTTech_V總線接口1Tech_V

總線接口2256色LCD5.7寸320X240320X240觸摸屏4X4鍵盤8位數(shù)碼管E_Lab總線接口數(shù)字量輸入輸出音頻錄放電機(jī)接口A/D轉(zhuǎn)換信號(hào)源圖1-1EL-ARM(DSP)-E100實(shí)驗(yàn)教學(xué)系統(tǒng)的功能框圖ARM7TDMICPU核8KBCache寫緩沖ROM/SRAMDRAM/SDRAM存儲(chǔ)管理帶DMALCD控制器中斷控制器2通道ZDMA系統(tǒng)總線橋接和仲裁2通道BDMA控制器SIO口控制2串行口控制ⅡS總線控制ⅡC總線控制電源管理RTC實(shí)時(shí)時(shí)鐘看門狗定時(shí)器A/D轉(zhuǎn)換器通用I/O控制時(shí)鐘發(fā)生器(PLL)ARM7TDMIJTAG控制器總線仲裁器PWM定時(shí)器0-4,5(內(nèi)部)CPU單元JPAGAIN[[7:0]32768Hz系統(tǒng)總線外設(shè)接口總線通用I/O接口SIOCKTCLKEXTCLK圖4-1S3C44B0X結(jié)構(gòu)圖3.3.2實(shí)驗(yàn)一ARMADS1.2開發(fā)環(huán)境創(chuàng)建一.實(shí)驗(yàn)?zāi)康?/p>

·熟悉ADS1.2開發(fā)環(huán)境。

·正確使用ARM并口仿真器(或者Wigger電纜)進(jìn)行編譯、下載和調(diào)試。二.實(shí)驗(yàn)設(shè)備

·EL-ARM(DSP)-E100/830教學(xué)實(shí)驗(yàn)箱,PentiumII以上的PC機(jī),硬件多功能仿真器或者Wigger調(diào)試電纜。

·操作系統(tǒng)Win98、2000或XP,ADS1.2集成開發(fā)環(huán)境,仿真器驅(qū)動(dòng)程序。三.實(shí)驗(yàn)內(nèi)容

·在ADS1.2下建立工程,配置開發(fā)環(huán)境,明確軟件中各配置選項(xiàng)的含義和作用。

·在ADS1.2下進(jìn)行仿真和調(diào)試,掌握ADS1.2下常用的仿真和調(diào)試的方法手段。3.3.3實(shí)驗(yàn)二ARM的匯編語言程序設(shè)計(jì)一.實(shí)驗(yàn)?zāi)康?/p>

·掌握ARM啟動(dòng)的基本知識(shí)和流程。

·掌握SoC

芯片系統(tǒng)的基本初始化內(nèi)容。二.實(shí)驗(yàn)設(shè)備

·EL-ARM(DSP)-E100/830教學(xué)實(shí)驗(yàn)箱,PentiumII以上的PC機(jī),仿真器電纜。

·PC機(jī)操作系統(tǒng)WinXP,ADS1.2集成開發(fā)環(huán)境,仿真器。三.實(shí)驗(yàn)內(nèi)容

·認(rèn)真學(xué)習(xí)ARM啟動(dòng)的流程,單步執(zhí)行程序,查看各寄存器的變化。

·學(xué)習(xí)中斷向量表的配置。

·學(xué)習(xí)堆棧的初始化工作。3.3.3實(shí)驗(yàn)三基于ARM的C語言程序的設(shè)計(jì)一.實(shí)驗(yàn)?zāi)康?/p>

·了解ARM的C語言程序的基本框架。

·學(xué)會(huì)使用ADS1.2進(jìn)行ARM的C語言程序編程。三.實(shí)驗(yàn)內(nèi)容

·匯編語言程序調(diào)用C語言程序。

·C語言程序調(diào)用匯編語言程序。

·用C語言程序編寫一個(gè)簡(jiǎn)單的應(yīng)用程序。第4章嵌入式應(yīng)用系統(tǒng)的設(shè)計(jì)4.1嵌入式硬件系統(tǒng)設(shè)計(jì)概述 1014.2S3C44B0x最小應(yīng)用系統(tǒng)的設(shè)計(jì) 104 4.2.1S3C44B0x概述 105 4.2.2S3C44B0x的引腳分布及信號(hào)描述 107 4.2.3S3C44B0x最小應(yīng)用系統(tǒng) 110

4.3最小應(yīng)用系統(tǒng)各單元電路設(shè)計(jì) 111 4.3.1S3C44B0x芯片引腳分析 111 4.3.2電源電路設(shè)計(jì) 111 4.3.3晶振電路與復(fù)位電路的設(shè)計(jì) 112 4.3.4Flash存儲(chǔ)器接口電路的設(shè)計(jì) 113 4.3.5SDRAM接口電路的設(shè)計(jì) 118 4.3.6UART串行接口電路的設(shè)計(jì) 122 4.3.7JTAG接口調(diào)試電路的設(shè)計(jì) 123第4章嵌入式應(yīng)用系統(tǒng)的設(shè)計(jì)4.4其他常用接口電路的設(shè)計(jì) 125 4.4.110M以太網(wǎng)接口電路的設(shè)計(jì) 125 4.2.2主/從USB接口電路的設(shè)計(jì) 1304.5印刷電路板的設(shè)計(jì) 132 4.5.1電源質(zhì)量與分配 132 4.5.2同類型信號(hào)線的分布 133

4.6嵌入式應(yīng)用系統(tǒng)的調(diào)試 133 4.6.1電源、晶振及復(fù)位電路的調(diào)試 134 4.6.2S3C44B0x及JTAG接口電路的調(diào)試134 4.6.3SDRAM接口電路的調(diào)試計(jì) 135 4.6.4Flash接口電路的調(diào)試 136 4.6.510M/100M以太網(wǎng)接口電路的調(diào)試136 第4章嵌入式應(yīng)用系統(tǒng)的設(shè)計(jì)本章的主要內(nèi)容包括:

嵌入式系統(tǒng)設(shè)計(jì)的基本原則和思路。

S3C44B0X微處理器及其基本工作原理。

基于S3C44B0X的基本硬件系統(tǒng)的設(shè)計(jì)。

硬件系統(tǒng)的調(diào)試。4.1嵌入式硬件系統(tǒng)設(shè)計(jì)概述[1]分析用戶對(duì)嵌入式系統(tǒng)的特定需求,把需求轉(zhuǎn)化成特定的嵌入式應(yīng)用系統(tǒng)的設(shè)計(jì)方案,是每一個(gè)嵌入式系統(tǒng)設(shè)計(jì)工程師首先要具備的能力。

這種方案的確定和產(chǎn)品的應(yīng)用領(lǐng)域有關(guān),同時(shí)也跟具體產(chǎn)品的主要消費(fèi)對(duì)象和功能定位有關(guān),方案最后必須細(xì)致到具體用什么型號(hào)的芯片,芯片的級(jí)別,芯片的封裝,包括產(chǎn)品的尺寸厚度,也就是說,設(shè)計(jì)的最終方案必須落實(shí)到物理可實(shí)現(xiàn)的元器件上。4.1嵌入式硬件系統(tǒng)設(shè)計(jì)概述[2]假設(shè)要設(shè)計(jì)的嵌入式硬件系統(tǒng)平臺(tái)有這樣的一個(gè)應(yīng)用背景和要求:

1.要開發(fā)的硬件系統(tǒng)平臺(tái)主要滿足嵌入式基礎(chǔ)實(shí)踐教學(xué)使用;

2.硬件平臺(tái)可以作為獨(dú)立、硬件配置又比較完善的基礎(chǔ)開發(fā)板使用;

3.CPU選用ARM7系列,外擴(kuò)存儲(chǔ)器可以保證完成基本嵌入式Linux操作系統(tǒng)外加中等規(guī)模的應(yīng)用程序的燒寫和下載;

4.嵌入式開發(fā)板要兼容某個(gè)已經(jīng)定義好的擴(kuò)展總線的標(biāo)準(zhǔn)。4.2S3C44B0x最小應(yīng)用系統(tǒng)的設(shè)計(jì)[1]4.2.1S3C44B0x概述[1]4.2.2S3C44B0x的引腳分布及信號(hào)描述[1]4.2.3S3C44B0x最小應(yīng)用系統(tǒng)[1]一個(gè)ARM的最小系統(tǒng)一般包括以下幾個(gè)部分:

(1)ARM微處理器;(2)電源電路;(3)復(fù)位電路;(4)晶振電路;(5)存儲(chǔ)器(Flash和SDRAM);(6)UART接口電路;(7)JTAG調(diào)試接口;(8)有時(shí),為了系統(tǒng)調(diào)試的方便,可以通過通用I/O口連接若干個(gè)LED,用以指示系統(tǒng)的工作狀態(tài)。4.3最小應(yīng)用系統(tǒng)各單元電路設(shè)計(jì)[1]4.3.2電源電路設(shè)計(jì)[1]4.3.3晶振電路與復(fù)位電路的設(shè)計(jì)[1]4.3.4Flash存儲(chǔ)器接口電路的設(shè)計(jì)[1]—關(guān)于FlashFlash存儲(chǔ)器簡(jiǎn)介:(1)NANDFlash和NORFlash的比較(2)性能比較(3)接口差別(4)容量和成本(5)可靠性和耐用性(6)軟件支持4.3.4Flash存儲(chǔ)器接口電路的設(shè)計(jì)[2]—SST39VF1604.3.4Flash存儲(chǔ)器接口電路的設(shè)計(jì)[3]—SST39VF1604.3.4Flash存儲(chǔ)器接口電路的設(shè)計(jì)[4]—SST39VF1604.3.4Flash存儲(chǔ)器接口電路的設(shè)計(jì)[5]—與CPU的連接Flash存儲(chǔ)器在系統(tǒng)中通常用于存放程序代碼,系統(tǒng)上電或復(fù)位后從此獲取指令并開始執(zhí)行。將存有程序代碼的Flash存儲(chǔ)器配置到ROM/SRAM/FLASHBank0,即將SST39VF160的CE#端接至S3C44B0X的nGCS0(Pin17)。OE#端接S3C44B0的nOE(Pin15);WE#端接S3C44B0的nWE(Pin16);地址總線[A19~A0]與S3C44B0X的地址總線[ADDR19~ADDR0]相連;16位數(shù)據(jù)總線[DQ15~DQ0]與S3C44B0X的16位數(shù)據(jù)總線[DATA15~DATA0]相連。4.3.5SDRAM接口電路的設(shè)計(jì)[1]—HY57V6416204.3.5SDRAM接口電路的設(shè)計(jì)[2]—HY57V6416204.3.5SDRAM接口電路的設(shè)計(jì)[3]—與CPU的連接4.3.6UART串行接口電路的設(shè)計(jì)[1]—RS-2324.3.6UART串行接口電路的設(shè)計(jì)[2]—連接4.3.7JTAG接口調(diào)試電路的設(shè)計(jì)[1]—JTAGJTAG(JointTestActionGroup)是一種國(guó)際標(biāo)準(zhǔn)測(cè)試協(xié)議,主要用于芯片內(nèi)部測(cè)試及對(duì)系統(tǒng)進(jìn)行仿真、調(diào)試,JTAG技術(shù)是一種嵌入式調(diào)試技術(shù),首先是在芯片內(nèi)部封裝了專門的測(cè)試電路TAP(TestAccessPort,測(cè)試訪問口),通過專用的JTAG測(cè)試工具對(duì)內(nèi)部節(jié)點(diǎn)進(jìn)行測(cè)試。4.3.7JTAG接口調(diào)試電路的設(shè)計(jì)[2]—JTAG4.3.7JTAG接口調(diào)試電路的設(shè)計(jì)[3]—連接4.4其他常用接口電路的設(shè)計(jì)[1]4.4.110M以太網(wǎng)接口電路的設(shè)計(jì)[1]—以太網(wǎng)協(xié)議4.4.110M以太網(wǎng)接口電路的設(shè)計(jì)[2]—RTL9019AS4.4.110M以太網(wǎng)接口電路的設(shè)計(jì)[3]—RTL9019AS4.4.110M以太網(wǎng)接口電路的設(shè)計(jì)[4]—連接4.4.2主/從USB接口電路的設(shè)計(jì)[1]—USBUSB(通用串行總線)是INTEL、MICROSOFT、IBM等公司聯(lián)合提出的、最近幾年逐步在PC領(lǐng)域廣為應(yīng)用的新型接口技術(shù)。USB接口通用性好、實(shí)時(shí)性強(qiáng)、傳輸方式多樣、成本低、支持即插即用、易于擴(kuò)展且便于使用。

USB的拓?fù)浣Y(jié)構(gòu)中居核心地位的是HOST(也稱為主機(jī)),任何一次USB數(shù)據(jù)傳輸都必須由主機(jī)發(fā)起和控制,所有的USB外設(shè)都只能和主機(jī)建立連接,任何兩個(gè)外設(shè)之間或是兩個(gè)主機(jī)之間無法直接通信。4.4.2主/從USB接口電路的設(shè)計(jì)[2]—SL811H/S4.4.2主/從USB接口電路的設(shè)計(jì)[3]—連接第5章嵌入式應(yīng)用系統(tǒng)的擴(kuò)展接口電路5.1中斷處理系統(tǒng)5.1.4實(shí)驗(yàn)四定時(shí)器中斷控制的LED顯示實(shí)驗(yàn)1.實(shí)驗(yàn)?zāi)康?1)掌握ARM7的中斷原理,能夠?qū)3C44B0X的中斷資源及其相關(guān)中斷寄存器的進(jìn)行合理配置。(2)掌握對(duì)S3C44B0X的中斷的編程的方法。3.實(shí)驗(yàn)內(nèi)容(1)學(xué)習(xí)處理器響應(yīng)外部中斷請(qǐng)求的程序配置。(2)根據(jù)第4章講述的S3C44B0x各端口外圍電路的擴(kuò)展情況,參考數(shù)據(jù)手冊(cè)中各端口控制寄存器的作用和各位的具體含義,分析并注釋參考程序中端口初始化函數(shù)(voidPort_Init())中各控制寄存器初始化值的具體含義。(3)運(yùn)行參考程序,使實(shí)驗(yàn)系統(tǒng)核心板上的LED指示燈D7閃爍。在AXD調(diào)試器中單步調(diào)試參考程序,仔細(xì)分析程序,理解程序的流程。(4)編寫IIC中斷服務(wù)程序(第7章第3節(jié)對(duì)IIC總線寄存器組的配置有詳細(xì)的說明,但需要把查詢方式改為中斷方式)。圖5-4S3C44B0x與LED連接的原理圖ARM接口設(shè)計(jì)S3C44B0X有71個(gè)多功能通用I/O口,分別包含在以下7組端口中:端口A:10位輸出端口B:11位輸出端口C:16位輸入/輸出端口D:8位輸入/輸出端口E:9位輸入/輸出端口F:9位輸入/輸出端口G:8位輸入/輸出PCONn:端口配置(控制)寄存器PUPn:端口上拉電阻寄存器*PDATn:端口數(shù)據(jù)寄存器

PB口控制寄存器PCONB位描述PB10[10]0=OUT1=NGCS5PB9[9]0=OUT1=NGCS4PB8[8]0=OUT1=NGCS3PB7[7]0=OUT1=NGCS2PB6[6]0=OUT1=NGCS1PB5[5]0=OUT1=nWBE3PB4[4]0=OUT1=nWBE2PB3[3]0=OUT1=nCAS3PB2[2]0=OUT1=NCAS2PB1[1]0=OUT1=SCLKPB0[0]0=OUT1=SCKErPCONB=11111001111B=0x7cfPB口數(shù)據(jù)寄存器PDATB位描述PB[10:0][10:0]當(dāng)端口設(shè)定為輸出口時(shí),輸出引腳的狀態(tài)與該寄存器的相應(yīng)為相同;當(dāng)端口設(shè)定為功能口時(shí),PDATF中的內(nèi)容無效rPDATB=Ox7ef;//PB5~PB4寫入10(11111101111)rPDATB=Ox7df;//PB5~PB4寫入01(11111011111)圖5-1S3C44B0X實(shí)現(xiàn)的鍵盤接口電路S3C44B0XPF0PF2PF1PF3PB4PB5PF6PF71001rPDATB=Ox7ef;//PB5~PB4寫入10(11111101111)rPDATB=Ox7df;

//PB5~PB4寫入01(11111011111)S3C44B0x的PB口控制發(fā)光二極管工作然后重復(fù)執(zhí)行以下兩條指令,即可以使兩個(gè)發(fā)光二極管輪流發(fā)光:rPDATB=Ox7ef;//PB5~PB4寫入10(11111101111)rPDATB=Ox7df;//PB5~PB4寫入01(11111011111)為了用PB口控制兩個(gè)發(fā)光二極管工作,需要將PB4、PB5設(shè)置為輸出狀態(tài):

rPCONB=11111001111B=0x7cf。定時(shí)器S3C44B0X有六個(gè)16位定時(shí)器,均可工作于中斷模式或DMA模式。其中:

定時(shí)器0、1、2、3、4有PWM功能,

定時(shí)器5是一個(gè)內(nèi)部定時(shí)器,沒有輸出腳。每個(gè)定時(shí)器有一個(gè)計(jì)數(shù)緩沖寄存器(TCNTBn),保持定時(shí)器的計(jì)數(shù)初始值,當(dāng)定時(shí)器的向下計(jì)數(shù)器計(jì)到0時(shí),該初始值重新

加載到定時(shí)器的向下計(jì)數(shù)器(TCNTOn),并產(chǎn)生中斷請(qǐng)求。每個(gè)定時(shí)器還有一個(gè)比較緩沖寄存器,初始值加載到定時(shí)器的比較寄存器,當(dāng)比較寄存器的值與定時(shí)器的向下計(jì)數(shù)器值相同時(shí),定時(shí)器控制邏輯改變TOUT的輸出電平。8位預(yù)定標(biāo)器和一個(gè)獨(dú)立的4位時(shí)鐘除法器形成的輸出頻率

位名稱BIT描述Deadzonelength[31:24]這8位確定deadzone的長(zhǎng)度。deadzone的長(zhǎng)度的一個(gè)時(shí)間單位與定時(shí)器0的一個(gè)時(shí)間單位相等。Prescaler2[23:16]這8位確定定時(shí)器4、5的預(yù)定標(biāo)器的值Prescaler1[15:8]這8位確定定時(shí)器2、3的預(yù)定標(biāo)器的值Prescaler0[7:0]這8位確定定時(shí)器0、1的預(yù)定標(biāo)器的值.定時(shí)器配置寄存器0(TCFG0)定時(shí)器配置寄存器1(TCFG1)位名稱BIT描述DMAmode[27:24]選擇DMA請(qǐng)求通道0000=Noselect(allinterrupt)0001=Timer00010=Timer10011=Timer20100=Timer30101=Timer40110=Timer50111=ReservedMUX5[23:20]選擇定時(shí)器5的MUX輸入0000=1/20001=1/40010=1/80011=1/1601xx=EXTCLKMUX4[19:16]選擇定時(shí)器4的MUX輸入0000=1/20001=1/40010=1/80011=1/1601xx=TCLKMUX3[15:12]選擇定時(shí)器3的MUX輸入0000=1/20001=1/40010=1/80011=1/1601xx=1/32MUX2[11:8]選擇定時(shí)器2的MUX輸入0000=1/20001=1/40010=1/80011=1/1601xx=1/32MUX1[7:4]選擇定時(shí)器1的MUX輸入0000=1/20001=1/40010=1/80011=1/1601xx=1/32MUX0[3:0]選擇定時(shí)器0的MUX輸入0000=1/20001=1/40010=1/80011=1/1601xx=1/32定時(shí)器控制寄存器(TCON)Timer5autoreloadon/off[26]定時(shí)器5的自動(dòng)加載的開/關(guān)0=One-shot1=Intervalmode(autoreload)Timer5manualupdate[25]定時(shí)器5的手動(dòng)更新0=Nooperation1=UpdateTCNTB5Timer5start/stop[24]定時(shí)器5的啟動(dòng)/停止0=Stop1=StartforTimer5Timer4autoreloadon/off[23]定時(shí)器4的自動(dòng)加載的開/關(guān)0=One-shot1=Intervalmode(autoreload)Timer4outputinverteron/off[22]定時(shí)器4的輸出反轉(zhuǎn)器的開/關(guān)0=Inverteroff1=InverteronforTOUT4Timer4manualupdate[21]定時(shí)器4的手動(dòng)更新0=Nooperation1=UpdateTCNTB4,TCMPB4Timer4start/stop[20]定時(shí)器5的啟動(dòng)/停止0=Stop1=StartforTimer4Timer3[19][16]定時(shí)器3的自動(dòng)加載的開/關(guān)、輸出反轉(zhuǎn)器的開/關(guān)、手動(dòng)更新、啟動(dòng)/停止Timer2[15][12]定時(shí)器2的自動(dòng)加載的開/關(guān)、輸出反轉(zhuǎn)器的開/關(guān)、手動(dòng)更新、啟動(dòng)/停止Timer1[11][8]定時(shí)器1的自動(dòng)加載的開/關(guān)、輸出反轉(zhuǎn)器的開/關(guān)、手動(dòng)更新、啟動(dòng)/停止Timer0[3][0]定時(shí)器1的自動(dòng)加載的開/關(guān)、輸出反轉(zhuǎn)器的開/關(guān)、手動(dòng)更新、啟動(dòng)/停止ARM中斷系統(tǒng)ARM中有兩種類型的中斷,一種是IRQ,另一種是FIQ。IRQ是普通中斷,F(xiàn)IQ是快速中斷,F(xiàn)IQ的優(yōu)先級(jí)高于IRQ。這兩種中斷都屬于ARM的異常模式,一旦有中斷發(fā)生,不管是外部中斷,還是內(nèi)部中斷,正在執(zhí)行的程序都會(huì)停下,PC指針跳入異常向量的地址處,若是IRQ中斷,則PC指針跳到0x18處,若是FIQ中斷,則跳到0x1C處。在異常向量地址處,一般都存有相應(yīng)中斷服務(wù)子程序的入口地址,

S3C44B0X共有30個(gè)中斷源。其中,4個(gè)外部中斷(EXTIN4/5/6/7)共用1個(gè)中斷控制器,兩個(gè)UART錯(cuò)誤中斷(UERROR0/1)共用一個(gè)中斷控制器因此共有26個(gè)中斷控制器。表5-2與S3C44B0x中斷控制相關(guān)的寄存器中斷的優(yōu)先級(jí)是由主組號(hào)和從ID號(hào)的級(jí)別控制的。sGA,sGB,sGC和sGD的優(yōu)先級(jí)別高于sGKA和sGKB的優(yōu)先級(jí)別。sGA,sGB,sGC和sGD可以編程確定中斷的優(yōu)先級(jí),sGKA總是高于sGKB的優(yōu)先級(jí)。mGA,mGB,mGC和mGD可以編程確定中斷的優(yōu)先級(jí),mGKA總是高于mGKB的優(yōu)先級(jí)。INT_RTC和INT_ADC中斷源在26個(gè)中斷源中優(yōu)先級(jí)最低,并且INT_RTC的優(yōu)先級(jí)高于INT_ADC的優(yōu)先級(jí)。(1)INTCON—中斷控制寄存器。主要是使能FIQ/IRQ中斷以及設(shè)定IRQ是向量或非向量模式。(2)INTPND—中斷掛起寄存器。相應(yīng)位置1,則說明有該中斷請(qǐng)求產(chǎn)生;相應(yīng)位為0,則該中斷沒有請(qǐng)求。(3)INTMOD—中斷模式寄存器。用于配置相應(yīng)的中斷是IRQ型還是FIQ型。(4)INTMSK—中斷屏蔽寄存器。作用是屏蔽相應(yīng)中斷的請(qǐng)求。(5)I_PSLV,I_PMST,I_CSLV,I_CMST這幾個(gè)寄存器是確定向量型IRQ中斷優(yōu)先級(jí)別的寄存器。(6)I_ISPR—向量IRQ中斷服務(wù)掛起狀態(tài)寄存器。當(dāng)向量IRQ中斷發(fā)生時(shí)只有當(dāng)前要服務(wù)的中斷標(biāo)志位置位。通過讀它的值,就能判斷出哪個(gè)中斷被響應(yīng)了。(7)I_ISPC和F_ISPC—IRQ中斷服務(wù)清除寄存器和FIQ中斷服務(wù)清除寄存器。表5-1S3C44B0X的中斷源中斷源描述主組從IDEINT0/1/2/3外部中斷0/1/2/3mGA

sGA/B/C/DEINT4/5/6/7外部中斷4/5/6/7mGA

sGKA

TICKRTC時(shí)鐘節(jié)拍中斷mGA

sGKB

INT_ZDMA0/1通用DMA0/1中斷mGB

sGA/BINT_BDMA0/1橋DMA0/1中斷mGB

sGC/DINT_WDT看門狗定時(shí)器中斷mGB

sGKA

INT_UERR0/1UART0/1錯(cuò)誤中斷mGB

sGKB

INT_TIMER0Timer03定時(shí)器中斷mGC

sGAD

INT_TIMER4Timer4/5

定時(shí)器中斷mGC

SGkA/BINT_TIMER5Timer5定時(shí)器中斷mGC

sGKB

INT_URXD0UART0/1接收中斷mGD

sGA/GBINT_IICIIC中斷mGD

sGC

INT_SIOSIO中斷mGD

sGD

INT_UTXD0UART0/1

發(fā)送中斷mGD

sGKA/BINT_RTCRTC警報(bào)中斷mGKA

—INT_ADCADC中斷mGKB

—5.2鍵盤與七段數(shù)碼管接口表5-7端口PF的控制寄存器PCONF的功能表PCONF位描述PF0[1:0]00:輸入01:輸出10:IICSCL11:保留PF1[3:2]00:輸入01:輸出10:IICSDA11:保留PF2[5:4]00:輸入01:輸出10:nWAIT11:保留PF3[7:6]00:輸入01:輸出10:nXBACK11:nXDACK0PF4[9:8]00:輸入01:輸出10:nXBREQ11:nXDREQ0PF5[12:10]000:輸入001:輸出010:nRTS1011:SIOTxD100:IISLRCK其他:保留PF6[15:13]000:輸入001:輸出010:TxD1011:SIORDY100:IISDO其他:保留PF7[18:16]000:輸入001:輸出010:RxD1011:SIORxD100:IISDI其他:保留PF8[21:19]000:輸入001:輸出010:nCTS1011:SIOCLK100:IISCLK其他:保留根據(jù)圖5-5的連線情況,設(shè)置PF0~PF3為輸出,PF4~PF7為輸入,即:rPCONF=000000

000000101

0101B=0x55在程序的初始化階段,需要對(duì)寄存器進(jìn)行如下設(shè)置PUPF為PF口上拉電阻寄存器,其功能如表5-8所示:表5-8端口PF的控制寄存器PCONF的功能表PUPF位描述PF[8:0][8:0]0:相應(yīng)位的上拉電阻使能1:相應(yīng)位的上拉電阻禁止設(shè)置PUPF寄存器為使能PF0PF7的內(nèi)部上拉電阻,即:rPUPF=000000

0000000

00

0000B=0x00rPCONF=0x55; //PF7PF4輸入,PF3PF0輸出rPDATF=Oxf0; //往PF0PF3輸出4個(gè)0Keyval=(rPDATF&0xf0)>>4; //從PF4PF7讀入鍵值rPUPF=0x00; //使能PF0PF7的內(nèi)部上拉電阻3.PDATF為PF口數(shù)據(jù)寄存器。它的功能定義為:(1)當(dāng)端口設(shè)定為輸入口時(shí),這個(gè)寄存器的相應(yīng)就對(duì)應(yīng)著引腳的狀態(tài);(2)當(dāng)端口設(shè)定為輸出口時(shí),輸出引腳的狀態(tài)與該寄存器的相應(yīng)為相同;(3)當(dāng)端口設(shè)定為多功能口時(shí),PDATF中的內(nèi)容無效。鍵盤掃描源程序,返回各個(gè)按鍵的鍵值:0FH#include<string.h>//。#include<stdio.h>charReadkeyVal(void){unsignedchari,j,H_val,L_val;

charkeyval=-1;//初始化健值為-1

rPCONF=0x55;//PF7PF4輸入,

PF3PF0輸出

rPUDF=0xff;//禁止PF0PF7的內(nèi)部上拉電阻

rPDATF=0xf0;//PF0PF3的4個(gè)位都輸出0

if((L_val=(rPDATF&0xf0))!=0xf0);//PF4PF7讀入不為全1,有鍵按下{H_val=0xfe; //D0=0從最低行開始掃描

for(i=0;i<4;i++); //依次掃描PF4PF7的每一行

{

rPDATF=H_val;PF0PF3輸出掃描碼

for(j=0;j<100;j++);延時(shí)

if((L_val=(rPDATF&0xf0))!=0xf0);PF4PF7讀入不為全1 {

L_val=((L_val>>4))|0xf0;

Keyval=get_val(H_val)×4+get_val(L_val);鍵值=行號(hào)+列號(hào)

returnkeyval;

}else;

H_val=H_val<<1;}}returnkeyval;}由掃描值、讀取的列值分別得到行號(hào)、列號(hào)的子函數(shù)Charget_val(unsignedcharval){unsignedchari,x;x=0;

for(i=0;i<4;i++){if((~val)==1)returnx;

val=(val>>1)|0x80;x=x+1;}5.2.3實(shí)驗(yàn)五鍵盤和七段數(shù)碼管控制實(shí)驗(yàn)1.實(shí)驗(yàn)?zāi)康?1)學(xué)習(xí)4×4鍵盤的與CPU的接口原理。(2)掌握鍵盤芯片HD7279的使用,以及8位數(shù)碼管的顯示方法。

3.實(shí)驗(yàn)內(nèi)容(1)通過4×4按鍵完成在數(shù)碼管上的各種顯示功能。(2)深入理解實(shí)驗(yàn)原理,參照HD7279A的相關(guān)文檔進(jìn)一步開發(fā)具體的應(yīng)用程序。HD7279A是一種智能顯示驅(qū)動(dòng)芯片具有串行接口,可同時(shí)驅(qū)動(dòng)8位共陰式數(shù)碼管或獨(dú)立的LED??梢酝瑫r(shí)連接最多64個(gè)鍵的鍵盤矩陣,可完成顯示鍵盤接口的全部功能。內(nèi)部含有譯碼器可直接接收BCD碼或16進(jìn)制碼,并且同時(shí)可以對(duì)這二種碼制進(jìn)行譯碼。還具有多種控制指令如消隱、閃爍、左移、右移、段尋址等可方便地實(shí)現(xiàn)多于8位的顯示或多于64個(gè)按鍵的鍵盤接口。圖5-64×4鍵盤、8位七段數(shù)碼管和HD7279A的硬件接線圖(1)主函數(shù)voidMain()voidMain(){charp;

Target_Init();

//目標(biāo)板初始化while(1){

switch(key_number){case0:

send_byte(cmd_test); //向HD7279A發(fā)送測(cè)試命令

break;

case1: for(p=0;p<8;p++) //數(shù)碼管右移8位

{

溫馨提示

  • 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)論