浙工大嵌入式考點整理21頁_第1頁
浙工大嵌入式考點整理21頁_第2頁
浙工大嵌入式考點整理21頁_第3頁
浙工大嵌入式考點整理21頁_第4頁
浙工大嵌入式考點整理21頁_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式系統(tǒng)定義以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),軟件、硬件可裁減,功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。ARM7架構(gòu)的3級流水線取指級:取指級完成程序存儲器中指令的讀取,并放入指令流水線中。譯碼級:對指令進行譯碼 ,為下一周期準備數(shù)據(jù)路徑需要的控制信號。這一級指令“占有”譯碼邏輯,而不“占有”數(shù)據(jù)路徑。執(zhí)行級:指令“占有”數(shù)據(jù)路徑,寄存器被讀取,運算單元產(chǎn)生相應(yīng)的運算結(jié)果并回寫到目的寄存器中,運算單元的結(jié)果則根據(jù)指令需求來更改狀態(tài)寄存器的條件位。ARM9的5級流水線取指:指令從存儲器中取出,放入指令流水線。譯碼:指令譯碼,從寄存器中讀取寄存器操作數(shù)。執(zhí)行:產(chǎn)生邏輯運算的結(jié)果或

2、存儲器地址。訪存/緩沖:如果需要,則訪問數(shù)據(jù)存儲器。否則,ALU的結(jié)果只是簡單地緩沖一個時鐘周期,以便使所有指令具有同樣的流水線流程?;貙懀簩⒅噶町a(chǎn)生的結(jié)果回寫到寄存器,包括任何從存儲器讀取的數(shù)據(jù)。復(fù)雜指令集CISC 精簡指令集RISCCISC處理器的實現(xiàn)復(fù)雜性更高,而RISC編譯器的復(fù)雜性更高;CISC處理器功耗高、流水線效率低;RISC代碼密度不高,可執(zhí)行文件體積較大,匯編代碼可讀性較差總線分類 按相對于CPU的位置劃分 片內(nèi)總線 片外總線:按功能類型 數(shù)據(jù)總線Dbus 地址總線Abus 控制總線Cbus總線的主要參數(shù) 總線寬度 又稱總線位寬,指的是總線能同時傳送數(shù)據(jù)的位數(shù)。如16位總線就

3、是具有16位數(shù)據(jù)傳送能力??偩€頻率 總線工作速度的一個重要參數(shù),工作頻率越高,速度越快。通常用MHz表示??偩€帶寬 又稱總線的數(shù)據(jù)傳送率,是指在一定時間內(nèi)總線上可傳送的數(shù)據(jù)總量,用每秒最大傳送數(shù)據(jù)量來衡量??偩€帶寬越寬,傳輸率越高。總線帶寬(單位:MB/s) =(總線寬度/8) 總線頻率如:總線寬度32位,頻率66MHZ,則總線帶寬=(32/8)* 66MHz=264MB/s一個微處理器系統(tǒng)可能含有多條總線 高速總線AHB 低速總線APB嵌入式存儲系統(tǒng)是由寄存器、高速緩沖區(qū)Cache、主存儲器和輔助存儲器組成。SDRAM存儲單元可以理解為一個電容,總是傾向于放電,為避免數(shù)據(jù)丟失,必須定時刷新。

4、FLASH存儲器(可在線進行電寫入、電擦除的ROM存儲器)有兩種主要技術(shù)NOR FLASH:具有SRAM接口,可字節(jié)讀寫、操作速度慢、10萬次壽命NAND FLASH:多周期尋址,頁讀寫、速度快、需ECC校驗、100萬次壽命、易產(chǎn)生壞塊存儲格式大端格式:高位字節(jié)排放在內(nèi)存的低地址端,低位字節(jié)排放在內(nèi)存的高地址端小端格式:低位字節(jié)排放在內(nèi)存的低地址端,高位字節(jié)排放在內(nèi)存的高地址端32bit的數(shù)0x12345678在Little-endian模式以及Big-endian模式CPU內(nèi)存中的存放方式設(shè)計一個C語言程序,判定CPU的大、小端模式short int x;char x0,x1;x=0x112

5、2;x0=(char*)&x)0; /低地址單元x1=(char*)&x)1; /高地址單元若x0=0x11,則是大端; 若x0=0x22,則是小端.嵌入式軟件分類 系統(tǒng)軟件 控制、管理計算機系統(tǒng)的資源 支撐軟件 輔助軟件開發(fā)的工具應(yīng)用軟件 面向應(yīng)用領(lǐng)域ARM指令集變種:T、M、E、D、I、J、F、S 標志 含義 說明T支持Thumb指令集Thumb指令集版本1:ARMv4TThumb指令集版本2:ARMv5TThumb-2:ARMv6TD片上調(diào)試DebugM支持長乘法32位乘32位得到64位,32位的乘加得到64位IEmbedded ICE在線仿真EDSP指令增加了DSP算法處理器指令:16

6、位乘加指令,帶符號數(shù)的加減法,雙字數(shù)據(jù)操作,cache預(yù)取指令JJava加速器Jazelle提高java代碼的運行速度S可綜合提供VHDL或Verilog語言設(shè)計文件ARM處理器工作狀態(tài)ARM狀態(tài),執(zhí)行32位的、字對齊的ARM指令 操作數(shù)寄存器的狀態(tài)(位0)為0Thumb狀態(tài),執(zhí)行16位的、半字對齊的Thumb指令 操作數(shù)寄存器的狀態(tài)(位0)為1處理器模式說明備注用戶(usr)正常程序工作模式不能直接切換到其它模式系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務(wù)等(系統(tǒng)調(diào)用)與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)快中斷 (fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時進入此模式中斷(i

7、rq)用于通用中斷處理IRQ異常響應(yīng)時進入此模式管理(svc)操作系統(tǒng)保護代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時進入此模式中止(abt)用于支持虛擬內(nèi)存和/或存儲器保護訪問無效的地址空間時會進入此模式未定義(und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應(yīng)時進入此模式內(nèi)部寄存器31個通用32位寄存器;6個狀態(tài)寄存器。 R0R13為保存數(shù)據(jù)或地址值的通用寄存器。它們是完全通用的寄存器,不會被體系結(jié)構(gòu)作為特殊用途,并且可用于任何使用通用寄存器的指令。R0R7為未分組的寄存器,對應(yīng)于相同的32位物理寄存器。R8R14為分組寄存器。它們所對應(yīng)的物理寄存器取決于當(dāng)前的處理器模式,幾乎所有允許使用通用寄存器的指

8、令都允許使用分組寄存器。R8R12有兩個分組的物理寄存器。一個用于除FIQ模式之外的所有寄存器模式,另一個用于FIQ模式。這樣在發(fā)生FIQ中斷后,可以加速FIQ的處理速度。寄存器R13、R14分別有6個分組的物理寄存器。一個用于用戶和系統(tǒng)模式,其余5個分別用于5種異常模式。R13堆棧指針(SP)。在ARM指令集當(dāng)中,沒有以特殊方式使用R13的指令或其它功能,只是習(xí)慣上都這樣使用R14鏈接寄存器(LR)在每種模式下,模式自身的R14版本用于保存子程序返回地址,當(dāng)發(fā)生異常時,將R14對應(yīng)的異常模式版本設(shè)置為異常返回地址(有些異常有一個小的固定偏移量)。R15為程序計數(shù)器(PC),指向正在取指的地址

9、。 R14寄存器與異常異常類型偏移數(shù)據(jù)中止8PC=ADDR+12,返回當(dāng)前指令未定義0PC=ADDR+8,返回下一條指令軟中斷0PC=ADDR+8,返回下一條指令取指異常4PC=ADDR+8,返回當(dāng)前指令I(lǐng)RQ/FIQ4PC=ADDR+12,返回下一條指令寄存器CPSR為程序狀態(tài)寄存器,在異常模式中,另外一個寄存器“程序狀態(tài)保存寄存器(SPSR)”可以被訪問。每種異常都有自己的SPSR,在因為異常事件而進入異常時它保存CPSR的當(dāng)前值,異常退出時可通過它恢復(fù)CPSR。CPSR寄存器的格式N:運算結(jié)果的最高位。對于有符號二進制補碼,結(jié)果為負數(shù)時N=1,為正數(shù)或零時N=0;Z:指令結(jié)果為0時Z=1

10、(通常表示比較結(jié)果“相等”),否則Z=0;C:當(dāng)進行加法運算最高位產(chǎn)生進位時C=1,否則C=0。當(dāng)進行減法運算最高位產(chǎn)生借位時C=0,否則C=1。對于結(jié)合移位操作的非加法/減法指令,C為從最高位最后移出的值,其它指令C通常不變; V:當(dāng)進行加法/減法運算,并且發(fā)生有符號溢出時V=1,否則V=0,其它指令V通常不變。立即尋址 操作數(shù)直接通過指令給出,數(shù)據(jù)包含在32位指令編碼中,以#為前綴。0x, 0b, 0d分別對應(yīng)16進制、2進制和10進制 例:MOV R1,#0x56000000寄存器尋址 把寄存器中的數(shù)值作為操作數(shù),指令執(zhí)行時直接取出寄存器值進行操作。寄存器內(nèi)容并不變化 例:MOV R2,

11、 R3 ;R2R3 ;R3中的內(nèi)容賦給R2寄存器移位尋址 操作數(shù)由寄存器的值做相應(yīng)移位而得到。移位的方式在指令中以助記符的形式給出,而移位的位數(shù)可用立即數(shù)或寄存器尋址方式表示。寄存器內(nèi)容并不變化例:MOV R0,R1,LSL R3;R1 = R3 R0 = R15種位移操作:LSL/ASL 邏輯/算術(shù)左移,寄存器中字的低位空出位補0LSR邏輯右移,寄存器中字的高位空出位補0ASR算術(shù)右移,移位過程中保持符號位不變,即若源操作數(shù)為正數(shù),則字的高位空出位補0,否則補1ROR循環(huán)右移,由字的低位移出位填入字的高位空出位RRX帶擴展的循環(huán)右移,操作數(shù)右移一位高位空出位用原C標志值填充;寄存器間接尋址

12、寄存器的內(nèi)容為操作數(shù)的地址指針,用 標示。操作數(shù)存放在存儲單元中例:LDR R0,R1變址尋址 將基址寄存器的內(nèi)容與指令中給出的偏移量(不超過4KB)相加,形成操作數(shù)的有效地址 變址尋址包括基址加偏移和基址加索引尋址兩種方式基址加偏移前索引尋址LDR R0,R1,4;R0R14基址加偏移帶自動索引的前索引尋址LDR R0,R1,4! ;R0R14、R1R14基址加偏移后索引尋址LDR R0,R1,4;R0R1、R1R14基址加索引尋址LDR R0,R1,R2;R0R1R2相對尋址 由程序計數(shù)器PC提供基準地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址BL SUBR

13、l ;調(diào)用到SUBRl子程序SUBR1 ; BL 使用了相對尋址方式多寄存器尋址 一條指令可以完成多個寄存器值的傳送。這種尋址方式可以一次對多個寄存器尋址,最多可傳送16個寄存器。LDMIA R1!,R2-R4,R5 ;R2R1,R3R14,R4R18,R5R112堆棧尋址 堆棧是一個按特定順序進行存取的存儲區(qū),操作順序為“后進先出” 。堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區(qū)域(堆棧),指針所指向的存儲單元即是堆棧的棧頂。存儲器堆??煞譃閮煞N: 向上生長:向高地址方向生長,稱為遞增堆棧 向下生長:向低地址方向生長,遞減堆棧滿堆棧 堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)

14、項 空堆棧 堆棧指針指向下一個待壓入數(shù)據(jù)的空位置堆棧尋址命令包括LDMFA/STMFA、LDMEA/STMEA、LDMFD/STMFD、LDMED/STMED。LDM和STM表示多寄存器尋址,即一次可傳送多個寄存器值。LDM:一次裝載多個,這里用來出棧。 STM:一次存儲多個,這里用來入棧。F/E表示指針指向的位置F:full滿堆棧,表示堆棧指針指向最后一個入棧的有效數(shù)據(jù)項E:empty空堆棧,表示堆棧指針指向下一個要放入的空地址A/D表示堆棧的生長方式A:堆棧向高地址生長,即遞增堆棧(Ascend)。D:堆棧向低地址生長,即遞減堆棧(Descend)。塊復(fù)制尋址 多寄存器傳送指令用于將一塊數(shù)

15、據(jù)從存儲器的某一位置拷貝到另一位置。 如:STMIAR0!,R1-R7;將R1R7的數(shù)據(jù)保存到存儲器中。;存儲指針在保存第一個值之后增加,;增長方向為向上增長。A存儲指針在保存第一個值前增加 B存儲指針在保存第一個值后增加I增加方向為向上增長 D增加方向為向下增長通過控制GPF3,GPF4,GPF5,GPF6的控制實現(xiàn)對LED1,LED2,LED3,LED4 亮滅的控制。LED燈通過電源、限流電阻與ARM的I/O口相連,設(shè)計程序使得4個LED輪流閃爍。 #define GPFCON (*(volatile unsigned *)0x56000050)#define GPFDAT (*(vola

16、tile unsigned *)0x56000054)#define GPFUP (*(volatile unsigned *)0x56000058)void main()/流水燈程序 unsigned char ledtab=0xf7,0xef,0xdf,0xbf; int i;GPFUP &= 0xFFFFFF87; /使能上拉F3-6GPFCON &= 0xC03f;GPFCON |= 0x1540; /將F3-6 設(shè)為輸出口while(1)for(i=0; i8)&0xff; 3rd.Cycle NF_ADDR=(page_address16)&0xff; 4th.Cycle讀頁操作時

17、序 NAND 讀整頁函數(shù)static void ReadPage(U32 addr, U8 *buf) /addr表示flash中的第幾頁,即flash地址9U16 i;NFChipEn(); /使能NandFlashWrNFCmd(READCMD0); /發(fā)送讀指令0x00,由于是整頁讀取,所以選用指令0x00WrNFAddr(0); /寫地址的第1個cycle,即Column Address,由于是整頁讀取所以取0WrNFAddr(addr); /寫地址的第2個cycle,即A9:16WrNFAddr(addr8); /寫地址的第3個cycle,即A17:24WrNFAddr(addr16

18、); /寫地址的第4個cycle,即A25WaitNFBusy(); /等待系統(tǒng)不忙for(i=0; i9U32 i;NFChipEn(); /使能NandFlashWrNFCmd(PROGCMD0); /發(fā)送寫開始指令0x80WrNFAddr(0); /寫地址的第1個cycleWrNFAddr(addr); /寫地址的第2個cycleWrNFAddr(addr8); /寫地址的第3個cycleWrNFAddr(addr16); 寫地址的第4個cycleWaitNFBusy(); /等待系統(tǒng)不忙for(i=0; i512; i+) WrNFDat(bufi); /循環(huán)寫入1頁數(shù)據(jù)WrNFCmd

19、(PROGCMD1); /發(fā)送寫結(jié)束指令0x10WaitNFBusy(); /等待系統(tǒng)不忙WrNFCmd(PROGCMD3); /發(fā)送讀狀態(tài)指令0x70 NFChipDs(); /釋放NandFlash return RdNFDat&0x01; /返回寫操作結(jié)果在中斷控制器中有五個控制寄存器:中斷源未決寄存器,中斷模式寄存器,屏蔽寄存器, 優(yōu)先級寄存器和中斷未決寄存器中斷源未決寄存器(SRCPND)由32位構(gòu)成,每位與一個中斷源相關(guān)。當(dāng)某個中斷源產(chǎn)生中斷請求服務(wù),則對相應(yīng)的位置1。因此該寄存器記錄了哪個中斷源在等待處理。注意:SRCPND寄存器的每一位都由中斷源自動置位,而不管中斷屏蔽寄存器(

20、INTMASK)中對應(yīng)的位是否被屏蔽。在某個特定中斷源的中斷服務(wù)程序中,SRCPND寄存器的相應(yīng)位必須被清除從而保證能收到同一中斷源的下一次中斷請求。換言之,如果SRCPND寄存器的某位始終置1,則總是被認為一個有效的中斷請求等待處理。用戶可以通過寫數(shù)據(jù)到SRCPND寄存器來清除未決位。數(shù)據(jù)位為1表示該位置的未決位將清除,而0表示該位置的未決位保持不變。SRCPND寄存器的地址是0x4A000000,復(fù)位后為0x00000000。中斷模式寄存器(INTMOD)是32位的,S3C2440的中斷模式有2種:FIQ模式和IRQ模式。如果某位設(shè)置成1,則相應(yīng)的中斷按FIQ模式處理。若設(shè)置成0,則按IR

21、Q模式處理。僅有一個中斷源能夠在FIQ模式下處理,也就是說,INTMOD僅有一個位可以被置1。因此,用戶應(yīng)該將最緊迫的中斷源設(shè)置為FIQ模式使用。INTMOD寄存器的地址是0x4A000004,復(fù)位后為0x00000000。中斷屏蔽寄存器(INTMSK)也是由32位組成,每一位與一個中斷源相對應(yīng)。若某位設(shè)置為1,則中斷控制器不會處理該位所對應(yīng)的中斷源提出的中斷請求。如果設(shè)置為0,則對應(yīng)的中斷源提出的中斷請求可以被處理。INTMSK寄存器的地址是0x4A000008,復(fù)位后為0xFFFFFFFF。中斷優(yōu)先級寄存器(PRIORITY)是IRQ中斷模式下的中斷優(yōu)先級控制寄存器,每個中斷源在寄存器中有

22、3位對應(yīng),分別代表ARB_SEL的2位和ARB_MODE的1位。該寄存器的地址是0x4A00000C,復(fù)位后0x0000007F。中斷未決寄存器(INTPND)是32位寄存器,寄存器中的每一位對應(yīng)一個中斷源。經(jīng)過中斷優(yōu)先級仲裁器選出的優(yōu)先級最高的中斷后,這個中斷在INTPND對應(yīng)的位會被置1。在對于IRQ的中斷服務(wù)程序中,可以讀取寄存器決定那個中斷源被處理。在該位寫入1可以清除中斷。該寄存器的地址是0x4A000010,復(fù)位后0x00000000。外部中斷控制寄存器共有3個,分別為EXTINT0、EXTINT1、EXTINT2,它們均是可讀/可寫的,用于對24個外部中斷請求信號的有效方式進行選

23、擇。其地址分別為0x56000088、0x5600008c、0x56000090,復(fù)位后均為:0x00000000。外部中斷屏蔽寄存器(EINTMASK)用來作為20個外部中斷的屏蔽寄存器。其地址為0x560000A4,復(fù)位后為0x00FFFFF0,此寄存器是可讀可寫的。外部中斷懸掛寄存器(EINTPEND)用來作為20個外部中斷的未決定寄存器。其地址為0x560000A8,復(fù)位后為0x00,此寄存器是可讀可寫的例:利用兩個按鍵觸發(fā)外部中斷EINT0、EINT2,寫出中斷初始化和服務(wù)程序。static void _irq Eint0_ISR(void) Delay(10);ClearPendi

24、ng(BIT_EINT0);Uart_Printf(EINT0 is occurred.n);static void _irq Eint2_ISR(void) Delay(10);ClearPending(BIT_EINT2);Uart_Printf(EINT2 is occurred.n);/中斷初始化函數(shù)void Eint_Init(void)rGPFCON = rGPFCON & (3)|(11); /GPF0 設(shè)置為EINT0rGPFCON = rGPFCON & (34)|(15); /GPF2 設(shè)置為EINT2rGPFUP|=(10); /disable GPF0 pull upr

25、GPFUP|=(12); /disable GPF2 pull uprEXTINT0 = (rEXTINT0 & (70)|(2falling edge triggeredrEXTINT0 = (rEXTINT0 & (78)|(2falling edge triggeredpISR_EINT0 = (unsigned)Eint0_ISR;pISR_EINT2 = (unsigned)Eint2_ISR; /開外部中斷void Enable_Eint(void)rEINTPEND = 0xffffff; /to clear the previous pending statesrSRCPND

26、|= BIT_EINT0|BIT_EINT2;rINTPND |= BIT_EINT0|BIT_EINT2;rEINTMASK=( (111)|(119) );rINTMSK=(BIT_EINT0|BIT_EINT2); int Main()Uart_Init(115200);Eint_Init();Enable_Eint();while(1) /等待中斷,死循環(huán)Uart_Printf(the main is runningn);Delay(50); 時鐘計算FCLKUCLK看門狗基本原理預(yù)分頻器的值和頻率除數(shù)因子存放在看門狗定時器控制寄存器(WTCON)中,預(yù)分頻器的值有效范圍0 - 255

27、。頻率除數(shù)因子可以設(shè)定為 16、32、64 或128分頻。看門狗定時器的定時器時鐘周期公式:S3C2440A芯片的看門狗定時器邏輯中有3個控制其操作的專用寄存器:看門狗定時器控制寄存器(WTCON)、看門狗定時器數(shù)據(jù)寄存器(WTDAT)和看門狗計數(shù)器寄存器(WTCNT)??撮T狗定時器控制寄存器(WTCON)是設(shè)定預(yù)分頻器的值、設(shè)定看門狗是否有效、設(shè)定4種頻率除數(shù)因子、設(shè)定看門狗復(fù)位及中斷使能。其地址為0x53000000,復(fù)位后為0x8021,此寄存器是可讀可寫的??撮T狗定時器數(shù)據(jù)寄存器(WTDAT),其地址為0x53000004,復(fù)位后為0x8000,此寄存器是可讀可寫的。它用于存放看門狗定

28、時器的溢出時間間隔值,即從定時器的計數(shù)器開始工作,到計數(shù)器值變?yōu)?的時間間隔。WTDAT寄存器通常存儲的是一個計數(shù)常數(shù),計數(shù)常數(shù)=所需時間間隔/計數(shù)時鐘周期=所需時間間隔(PCLK/(預(yù)分頻器+1)/除數(shù)因子)看門狗定時器計數(shù)寄存器(WTCNT),其地址0x53000008,復(fù)位后為0x8000,此寄存器是可讀可寫的。它用作減1計數(shù)器,它對計數(shù)時鐘信號進行減1計數(shù),即每來一個計數(shù)時鐘脈沖,計數(shù)器內(nèi)的值減1。因為WTDAT寄存器的值在看門狗定時器初始使能時,不能自動裝載到WTCNT中,所以必須第一次要給WTCNT設(shè)定一個初始值??撮T狗應(yīng)用實例 P163/主功能函數(shù)void wtMain(void

29、) Uart_Init(115200);Uart_Printf(watchdog test is beginningn);watchdog_test();/看門狗復(fù)位功能程序?qū)崿F(xiàn)void watchdog_test(void) rWTCON=(prescaler_value8)|(clock_select3);rWTDAT=15000;rWTCNT=15000;rWTCON &= (31);rWTCON|=(15)|(10);while(1);/看門狗定時器功能程序?qū)崿F(xiàn)void watchdog_test(void) /*初始化*/建立WatchDog 中斷服務(wù)程序句柄pISR_WDT = (

30、unsigned)watchdog_isr;/initialize interrupt registersClearPending(BIT_WDT_AC97);ClearSubPending(BIT_WDT);/*啟動看門狗*/Prescaler value=100、clock division factor=128、PCLK=50M/t_watchdog=1/PCLK/(Prescaler value+1)/Division_factor=0.00025856/disable watchdogrWTCON=(prescaler_value8)|(clock_select3);/看門狗時鐘周期

31、T=WTCNT*t_watchdog=3.8784S/看門狗喂狗rWTDAT=15000;rWTCNT=15000;rWTCON|=(15)|(12); /使能WDT 定時器和中斷/開中斷EnableIrq(BIT_WDT_AC97);EnableSubIrq(BIT_WDT);while(1) ;S3C2440定時器Timer部件主要用于提供定時功能、脈寬調(diào)制(PWM)功能,它的應(yīng)用比較靈活,對于需要一定頻率的脈沖信號、一定時間間隔的定時信號的應(yīng)用場合,它都能提供應(yīng)用支持。S3C2440A有5 個16 位的定時器。定時器0、1、2、3 有脈寬調(diào)制功能(PWM),定時器4是一個沒有輸出引腳的內(nèi)

32、部定時器。定時器0 有一個用于驅(qū)動大電流設(shè)備的死區(qū)生成器。定時器從分頻器接收自己的時鐘信號,時鐘分頻器從相應(yīng)的預(yù)分頻器接收時鐘信號。寄存器TCFG0配置8位預(yù)分頻器的分頻值,寄存器TCFG1配置4位預(yù)分頻器的分頻值。定時器0 和1共享一個8 位的預(yù)分頻器,定時器2,3,4 共享另一個8位預(yù)分頻器。定時器輸入時鐘頻率fTclk :fTclk=fpclk(Prescaler+1) /分頻值式中:Prescaler,預(yù)分頻值,0-255;分頻值為1/2、1/4、1/8、1/16。 三個相關(guān)寄存器:TCNTBx、TCNTOx、TCMPBxTCNTBx:定時器緩存計數(shù)器TCNTOx:定時器觀測值TCMP

33、Bx:定時器比較緩存計數(shù)器 預(yù)分頻器 8位 分頻器 1/2 1/4 1/8 1/16 外部TCK 計數(shù)器 觀 察 寄 存 器 比較寄存器 PCLK 五 選 一 開 關(guān) 初 值 寄 存 器 控 制 邏 輯TOUT中斷當(dāng)計數(shù)器TCNTBx中的值減到與TCMPBx的值相同時,TOUT的輸出值取反。改變TCMPB的值,便改變了輸出方波的占空比。定時器工作原理圖每個定時器有一個自己的由定時器時鐘驅(qū)動的16 位遞減計數(shù)器TCNTn。當(dāng)遞減計數(shù)器為零時,定時器向CPU發(fā)出中斷請求,同時相應(yīng)的TCNTBn 的值自動加載到遞減計數(shù)器。但是TCONn 的定時器使能位清零時(即定時器停止時),則相應(yīng)的TCNTBn值

34、不會裝載到計數(shù)器中。TCMPBn 的值用于脈寬調(diào)制。當(dāng)遞減計數(shù)器的值和定時器控制邏輯中的比較寄存器的值匹配時,定時器控制邏輯改變輸出電平。因此,比較寄存器決定了PWM 輸出的開啟時間(上升或下降時間)。定時器有TCNTBn、TCNTn、TCMPBn、TCMPn和TCNTOn 寄存器。TCNTBn和TCMPn是內(nèi)部寄存器的名字。TCNTn寄存器的值可以從TCNTOn寄存器中讀取、當(dāng)定時器為0,TCNTBn和TCMPBn可以被裝載到TCNTn和TCMPn中。如果中斷使能,當(dāng)TCNTn為0時,則向CPU發(fā)出中斷請求。 定時器基本操作 P156S3C2440A的定時器有一個雙緩沖功能,在刷新一個定時器

35、的同時,不會影響另一個正在運行的定時器正常運行。 TCNTBn中的值,不是計數(shù)器的當(dāng)前狀態(tài)值,而是下個定時器的重載值。當(dāng)TCNTn為0時,自動重載TCNTBn的值到TCNTn中。注意:如果自動重載位為設(shè)定為0,即使TCNTn遞減為零,TCNTn也不再進一步操作。自動裝載 P157定時器初值在開始計數(shù)前必須由手動裝載:寫初始值到TCNTBn和TCMPBn中。設(shè)置相應(yīng)定時器的手動更新位。 設(shè)置相應(yīng)定時器的啟動位來啟動定時器(且清除手動更新位)。如果定時器被強行停止,TCNTn保留計數(shù)器值且不從TCNTBn重載。如果要設(shè)置新值,必須執(zhí)行手動更新。 定時器操作實例 P1571、使能自動重載功能。設(shè)置T

36、CNTBn 為160(50+110),TCMPBn 為110。設(shè)置手動更新位且配置反相器位使能。手動更新位將TCNTBn 和TCMPBn 的值分別置給TCNTn 和TCMPn。然后分別設(shè)置TCNTBn 和TCMPBn 的值為80(40+40)和40 以決定下一個重載值。2、設(shè)置起始位,手動更新位為0,反相器關(guān)閉且自動重載開啟。在等待時間后定時器開始倒計數(shù)。3、當(dāng)TCNTn 的值和TCMPn 的值相同,TOUTn 的邏輯電平從低變?yōu)楦摺?、當(dāng)TCNTn 為0,中斷請求生成且TCNTBn 的值裝載到一個臨時寄存器中。在下一個定時器周期開始時,TCNTn 會從臨時寄存器中重新加載計數(shù)值。5、在中斷服

37、務(wù)程序中,TCNTBn 和TCMPBn 的值被分別設(shè)置為80和60,用于下一輪的定時操作。6、當(dāng)TCNTn 的值和TCMPn 的值相同,TOUTn 的邏輯電平從低變成高。7、當(dāng)TCNTn 為0,TCNTn 用TCNTBn 的值自動重載,并觸發(fā)中斷請求。8、在中斷服務(wù)程序中,自動重載和自動請求被設(shè)禁止,從而停止定時器工作。9、當(dāng)TCNTn 的值和TCMPn 的值相同,TOUTn 的邏輯電平從低變成高。10、TCNTn 為0,因為自動重載被設(shè)為禁止,TCNTn 不再被重載且定時器停止。11、沒有其他的自動請求產(chǎn)生。定時器相關(guān)寄存器 共有6種、17個寄存器Register Address R/WDe

38、scription Reset Value TCFG00x51000000R/W配置寄存器 00x00000000 TCFG10x51000004R/W配置寄存器 10x00000000TCON 0x51000008R/W控制寄存器0x00000000TCNTBn0x510000xx R/W 計數(shù)初值寄存器(5個)0x0000TCMPBn0x510000xxR/W比較寄存器(4個)0x0000TCNTOn0x510000xxR觀察寄存器(5個)0x0000定時器應(yīng)用實例 P168 volatile int variable0 = 0;int ctime = 0;void Test_TimerI

39、nt(void) rINTMSK = BIT_TIMER0;pISR_TIMER0 = (int)Timer0Done;Uart_Printf(nTimer0 Interrupt Testn);/ 每0.2秒產(chǎn)生一個中斷/ 設(shè)定TCFG0, rTCFG1, rTCNTB0寄存器/ Timer Output Period = (TCNTB+1) x (Presc.+1) x Divider / PCLKrTCFG0 = 0xff;/ 預(yù)分頻計數(shù)器= 255rTCFG1 = 0x03; / 0011 : 1/16設(shè)定為16分頻rTCNTB0 = 2440; / (TCNT + 1) * 81.92

40、 = 0.2*1000000rTCON = 0x02; /裝載初值rTCON = 0x09; / 自動重載 while(1) if (variable0 = 5) variable0 = 0;ctime+;Uart_Printf(%d secondsn, ctime);rINTMSK |= (BIT_TIMER0);void _irq Timer0Done(void)/Timer定時器中斷子函數(shù)rSRCPND = BIT_TIMER0; /清掛起位rINTPND = BIT_TIMER0;variable0+;Uart_Printf(variable0=%d ,variable0); 四線電阻

41、屏測量原理 測量X坐標時:1)在X+,X-兩電極加上一個電壓Vref,Y+接一個高阻抗的ADC。2)兩電極間的電場呈均勻分布,方向為X+到X-。3)手觸摸時,兩個導(dǎo)電層在觸摸點接觸,觸摸點X層的電位被導(dǎo)至 Y層所接的ADC,得到電壓Vx。4)通過Lx/L=Vx/Vref,即可得到x點的坐標。觸摸屏測量實例 P183void Touch_Screen_Init(void) rADCDLY=50000; /轉(zhuǎn)換延時 (1/3.6864M)*50000=13.56msrADCCON = (114)|(396)|(03)|(02)|(01)|(0);rADCTSC = (08)|(17)|(16)|(

42、05)|(14)|(03)|(02)|(3);/等待按下中斷pISR_ADC = (unsigned)ADC_ISR;ClearSubPending(BIT_SUB_TC);ClearSubPending(BIT_SUB_ADC);ClearPending(BIT_ADC);EnableSubIrq(BIT_SUB_TC);EnableIrq(BIT_ADC);Uart_Printf( nNow touchpanel controler is initial!n ) ;Uart_Printf( Press it with touch pen and see what happendn ) ;U

43、art_Printf( nAny key to exit the touchpanel testn ) ;Uart_Getch() ;Touch_Screen_Off() ;/ 觸摸屏中斷服務(wù)子函數(shù)void _irq ADC_ISR(void) int i; DisableIrq(BIT_ADC); DisableSubIrq(BIT_SUB_TC); rADCTSC=(13)|(12); /連續(xù)轉(zhuǎn)換 rADCCON|=0x1; /ADC啟動 while(rADCCON & 0x1); /等待啟動完成 while(!(rADCCON & 0x8000); /等待轉(zhuǎn)換完成 for(i=0;i5;

44、i+) while(!(115)&rADCCON); /檢查轉(zhuǎn)換是否結(jié)束 bufi0 = (0x3ff&rADCDAT0);/坐標的位置數(shù)據(jù) bufi1 = (0x3ff&rADCDAT1);/Y坐標的位置數(shù)據(jù) for(i=0;i5;i+) Uart_Printf(X %4d, Y %4dn, bufi0, bufi1);Uart_Printf(the next touchn);rADCTSC =0xd3; /等待下次中斷 ClearPending(BIT_ADC); ClearSubPending(BIT_SUB_TC); EnableSubIrq(BIT_SUB_TC); EnableIr

45、q(BIT_ADC);/觸摸屏關(guān)閉void Touch_Screen_Off(void) DisableIrq(BIT_ADC); DisableSubIrq(BIT_SUB_TC); rADCCON |= (12); /ADC待機模式 rADCCON |= (1); /ADC無操作LCD顯示原理VSYNC :幀同步信號 VD23:0 :LCD像素數(shù)據(jù)HSYNC :行同步脈沖信號 VCLK :像素時鐘信號 DEN:Data Enable REGBANK:17個可編程的LCD寄存器 LCDCDMA:LCD數(shù)據(jù)DMA REGBANK是LCD控制器的寄存器組,含17個寄存器,用來設(shè)置各項參數(shù)。LCD

46、CDMA是LCD控制器專用DMA通道,可以自動地從系統(tǒng)總線上取得圖像數(shù)據(jù),使得顯示圖像時不需要CPU的干涉。VIDPRCS將LCDCDMA中的數(shù)據(jù)組合成特定的格式(比如4位單掃、4位雙掃和8位單掃),然后從VD23:0發(fā)給LCD屏TIMEGEN和LPC3600負責(zé)產(chǎn)生LCD屏所需要的控制時序,如VSYNC、HSYNC、VCLK、VDEN,然后從VIDEO MUX送給LCD屏。 每個VSYNC信號表示一幀數(shù)據(jù)的開始;每個HSYNC信號表示一行數(shù)據(jù)的開始。每個VCLK信號表示正在傳輸一個像素的數(shù)據(jù)。 行時序HSYNC信號有效時,表示一行數(shù)據(jù)的開始。HSPW表示HSYNC信號的脈沖寬度為(HSPW+

47、1)個VCLK信號周期,即(HSPW+1)個像素,這(HSPW+1)個像素數(shù)據(jù)無效HSYNC信號后,還要經(jīng)過(HBPD+1)個VCLK信號周期,有效的行數(shù)據(jù)才出現(xiàn)。所以,在HSYNC信號有效之后,還要經(jīng)過(HSPW+1+HBPD+1)個無效的像素。隨后連續(xù)發(fā)出(HOZVAL+1)個像素的有效數(shù)據(jù)。最后是(HFPD+1)個無效的像素 幀時序VSYNC信號有效時,表示一幀數(shù)據(jù)的開始。VSPW表示VSYNC信號的脈沖寬度為(VSPW+1)個HSYNC信號周期,即(VSPW+1)行,這(VSPW+1)行數(shù)據(jù)無效。VSYNC信號后,還要經(jīng)過(VBPD+1)個HSYNC信號周期,有效的行數(shù)據(jù)才出現(xiàn)。所以,在VSYNC信號有效之后,還要經(jīng)過(VSPW+1+VBPD+1)個無效的行。隨后連續(xù)發(fā)出(LINVAL+1)行的有效數(shù)據(jù)。最后是

溫馨提示

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

評論

0/150

提交評論