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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

16、#define GPFDAT (*(volatile 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 設為輸出口while(1)for(i=0; i<4; i+)GPFDAT=ledtabi;Delay(70)

17、;return(0);S3C2440的存儲空間分成8組,通過CS0:7選擇。最大容量是1GB,bank0-5為固定128MB,bank6-7的容量可編程改變,可以是2、4、8、16、32、64、128MB。S3C2440可以選擇從NAND FLASH或NOR FLASH啟動。啟動NOR FLASH只能接到Bank0,其數據線寬只能是16位和32位。其它存儲器的數據線寬可以是16位和32位。若定義SDRAM的起始地址#define _RAM_STARTADDRESS 0x30000000則可以確定該存儲器連接到哪一根GCSn外部存儲器中某一存儲單元的地址為:基地址+偏移地址外接網卡控制芯片DM9

18、000,其片選端接到GCS4,則內部位于300H地址處的寄存器的實際地址為:0x2000 0000 + 0x0300 = 0x2000 0300按照K9F1208的組織方式可以分四類地址: Column Address、halfpage pointer、Page Address 、Block Address。Column Address表示數據在半頁中的地址,大小范圍0-255,用A0:7表示;halfpage pointer表示半頁在整頁中的位置,即在0-255空間還是在256-511空間,用A8表示;Page Address表示頁在塊中的地址,大小范圍0-31,用A13:9表示; Bloc

19、k Address表示塊在flash中的位置,大小范圍04095,A25:14 表示。K9F1208通過4個周期尋址某一存儲單元相關寄存器NAND Flash配置寄存器 NFCONF    地址0x4E000000NAND Flash命令設置寄存器 NFCMD     地址0x4E000004NAND Flash地址設置寄存器 NFADDR    地址0x4E000008NAND Flash數據寄存器 NFDATA     地址0x4E00000CNAND Flash操作狀態(tài)寄存器 N

20、FSTAT     地址0x4E000010NAND Flash ECC寄存器 NFECC     地址0x4E000014Nand Flash的尋址把一個完整的Nand Flash地址分解成Column Address與Page Address進行尋址。Column Address只有8位,需配合A8完成一頁范圍內尋址。在0255內時用00h命令,當讀取的起始地址是在256511時,則使用01h命令。 column_addr=0x102; NF_CMD= ;       &

21、#160;                     從2nd half開始讀取 NF_ADDR= ;             1st Cycle NF_ADDR=page_address&0xff;      &

22、#160;    2nd.Cycle NF_ADDR=(page_address>>8)&0xff;   3rd.Cycle NF_ADDR=(page_address>>16)&0xff;  4th.Cycle讀頁操作時序 NAND 讀整頁函數static void ReadPage(U32 addr, U8 *buf)   /addr表示flash中的第幾頁,即flash地址>>9U16 i;NFChipEn();   /使能NandFla

23、shWrNFCmd(READCMD0); /發(fā)送讀指令0x00,由于是整頁讀取,所以選用指令0x00WrNFAddr(0);   /寫地址的第1個cycle,即Column Address,由于是整頁讀取所以取0WrNFAddr(addr);   /寫地址的第2個cycle,即A9:16WrNFAddr(addr>>8);   /寫地址的第3個cycle,即A17:24WrNFAddr(addr>>16); /寫地址的第4個cycle,即A25WaitNFBusy(); /等待系統(tǒng)不忙for(i=0; i<

24、;512; i+)   bufi = RdNFDat(); /循環(huán)讀出1頁數據NFChipDs();   /釋放NandFlash寫頁操作時序NAND 寫整頁函數static int WritePage(U32 addr, U8 *buf)   /addr表示flash中的第幾頁,即flash地址>>9U32 i;NFChipEn();   /使能NandFlashWrNFCmd(PROGCMD0);   /發(fā)送寫開始指令0x80WrNFAddr(0);   /寫

25、地址的第1個cycleWrNFAddr(addr);   /寫地址的第2個cycleWrNFAddr(addr>>8); /寫地址的第3個cycleWrNFAddr(addr>>16); 寫地址的第4個cycleWaitNFBusy();   /等待系統(tǒng)不忙for(i=0; i<512; i+)   WrNFDat(bufi); /循環(huán)寫入1頁數據WrNFCmd(PROGCMD1); /發(fā)送寫結束指令0x10WaitNFBusy();   /等待系統(tǒng)不忙WrNFCmd(PROGCMD3

26、); /發(fā)送讀狀態(tài)指令0x70 NFChipDs();   /釋放NandFlash return RdNFDat&0x01; /返回寫操作結果在中斷控制器中有五個控制寄存器:中斷源未決寄存器,中斷模式寄存器,屏蔽寄存器, 優(yōu)先級寄存器和中斷未決寄存器中斷源未決寄存器(SRCPND)由32位構成,每位與一個中斷源相關。當某個中斷源產生中斷請求服務,則對相應的位置1。因此該寄存器記錄了哪個中斷源在等待處理。注意:SRCPND寄存器的每一位都由中斷源自動置位,而不管中斷屏蔽寄存器(INTMASK)中對應的位是否被屏蔽。在某個特定中斷源的中斷服務程序中,SRCPND寄存器

27、的相應位必須被清除從而保證能收到同一中斷源的下一次中斷請求。換言之,如果SRCPND寄存器的某位始終置1,則總是被認為一個有效的中斷請求等待處理。用戶可以通過寫數據到SRCPND寄存器來清除未決位。數據位為1表示該位置的未決位將清除,而0表示該位置的未決位保持不變。SRCPND寄存器的地址是0x4A000000,復位后為0x00000000。中斷模式寄存器(INTMOD)是32位的,S3C2440的中斷模式有2種:FIQ模式和IRQ模式。如果某位設置成1,則相應的中斷按FIQ模式處理。若設置成0,則按IRQ模式處理。僅有一個中斷源能夠在FIQ模式下處理,也就是說,INTMOD僅有一個位可以被置

28、1。因此,用戶應該將最緊迫的中斷源設置為FIQ模式使用。INTMOD寄存器的地址是0x4A000004,復位后為0x00000000。中斷屏蔽寄存器(INTMSK)也是由32位組成,每一位與一個中斷源相對應。若某位設置為1,則中斷控制器不會處理該位所對應的中斷源提出的中斷請求。如果設置為0,則對應的中斷源提出的中斷請求可以被處理。INTMSK寄存器的地址是0x4A000008,復位后為0xFFFFFFFF。中斷優(yōu)先級寄存器(PRIORITY)是IRQ中斷模式下的中斷優(yōu)先級控制寄存器,每個中斷源在寄存器中有3位對應,分別代表ARB_SEL的2位和ARB_MODE的1位。該寄存器的地址是0x4A0

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

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

31、rred.n");static void _irq Eint2_ISR(void) Delay(10);ClearPending(BIT_EINT2);Uart_Printf("EINT2 is occurred.n");/中斷初始化函數void Eint_Init(void)rGPFCON = rGPFCON & (3)|(1<<1); /GPF0 設置為EINT0rGPFCON = rGPFCON & (3<<4)|(1<<5); /GPF2 設置為EINT2rGPFUP|=(1<<0); /di

32、sable GPF0 pull uprGPFUP|=(1<<2); /disable GPF2 pull uprEXTINT0 = (rEXTINT0 & (7<<0)|(2<<0); /EINT0 >falling edge triggeredrEXTINT0 = (rEXTINT0 & (7<<8)|(2<<8); /EINT2 >falling edge triggeredpISR_EINT0 = (unsigned)Eint0_ISR;pISR_EINT2 = (unsigned)Eint2_ISR

33、; /開外部中斷void Enable_Eint(void)rEINTPEND = 0xffffff; /to clear the previous pending statesrSRCPND |= BIT_EINT0|BIT_EINT2;rINTPND |= BIT_EINT0|BIT_EINT2;rEINTMASK=( (1<<11)|(1<<19) );rINTMSK=(BIT_EINT0|BIT_EINT2); int Main()Uart_Init(115200);Eint_Init();Enable_Eint();while(1) /等待中斷,死循環(huán)Uart

34、_Printf("the main is runningn");Delay(50); 時鐘計算FCLKUCLK看門狗基本原理預分頻器的值和頻率除數因子存放在看門狗定時器控制寄存器(WTCON)中,預分頻器的值有效范圍0 - 255。頻率除數因子可以設定為 16、32、64 或128分頻??撮T狗定時器的定時器時鐘周期公式:S3C2440A芯片的看門狗定時器邏輯中有3個控制其操作的專用寄存器:看門狗定時器控制寄存器(WTCON)、看門狗定時器數據寄存器(WTDAT)和看門狗計數器寄存器(WTCNT)??撮T狗定時器控制寄存器(WTCON)是設定預分頻器的值、設定看門狗是否有效、設

35、定4種頻率除數因子、設定看門狗復位及中斷使能。其地址為0x53000000,復位后為0x8021,此寄存器是可讀可寫的??撮T狗定時器數據寄存器(WTDAT),其地址為0x53000004,復位后為0x8000,此寄存器是可讀可寫的。它用于存放看門狗定時器的溢出時間間隔值,即從定時器的計數器開始工作,到計數器值變?yōu)?的時間間隔。WTDAT寄存器通常存儲的是一個計數常數,計數常數=所需時間間隔/計數時鐘周期=所需時間間隔×(PCLK/(預分頻器+1)/除數因子)看門狗定時器計數寄存器(WTCNT),其地址0x53000008,復位后為0x8000,此寄存器是可讀可寫的。它用作減1計數器,

36、它對計數時鐘信號進行減1計數,即每來一個計數時鐘脈沖,計數器內的值減1。因為WTDAT寄存器的值在看門狗定時器初始使能時,不能自動裝載到WTCNT中,所以必須第一次要給WTCNT設定一個初始值??撮T狗應用實例 P163/主功能函數void wtMain(void) Uart_Init(115200);Uart_Printf("watchdog test is beginningn");watchdog_test();/看門狗復位功能程序實現void watchdog_test(void) rWTCON=(prescaler_value<<8)|(clock_se

37、lect<<3);rWTDAT=15000;rWTCNT=15000;rWTCON &= (3<<1);rWTCON|=(1<<5)|(1<<0);while(1);/看門狗定時器功能程序實現void watchdog_test(void) /*初始化*/建立WatchDog 中斷服務程序句柄pISR_WDT = (unsigned)watchdog_isr;/initialize interrupt registersClearPending(BIT_WDT_AC97);ClearSubPending(BIT_WDT);/*啟動看門狗*

38、/Prescaler value=100、clock division factor=128、PCLK=50M/t_watchdog=1/PCLK/(Prescaler value+1)/Division_factor=0.00025856/disable watchdogrWTCON=(prescaler_value<<8)|(clock_select<<3);/看門狗時鐘周期T=WTCNT*t_watchdog=3.8784S/看門狗喂狗rWTDAT=15000;rWTCNT=15000;rWTCON|=(1<<5)|(1<<2); /使能W

39、DT 定時器和中斷/開中斷EnableIrq(BIT_WDT_AC97);EnableSubIrq(BIT_WDT);while(1) ;S3C2440定時器Timer部件主要用于提供定時功能、脈寬調制(PWM)功能,它的應用比較靈活,對于需要一定頻率的脈沖信號、一定時間間隔的定時信號的應用場合,它都能提供應用支持。S3C2440A有5 個16 位的定時器。定時器0、1、2、3 有脈寬調制功能(PWM),定時器4是一個沒有輸出引腳的內部定時器。定時器0 有一個用于驅動大電流設備的死區(qū)生成器。定時器從分頻器接收自己的時鐘信號,時鐘分頻器從相應的預分頻器接收時鐘信號。寄存器TCFG0配置8位預分頻

40、器的分頻值,寄存器TCFG1配置4位預分頻器的分頻值。定時器0 和1共享一個8 位的預分頻器,定時器2,3,4 共享另一個8位預分頻器。定時器輸入時鐘頻率fTclk :fTclk=fpclk(Prescaler+1) /分頻值式中:Prescaler,預分頻值,0-255;分頻值為1/2、1/4、1/8、1/16。 三個相關寄存器:TCNTBx、TCNTOx、TCMPBxTCNTBx:定時器緩存計數器TCNTOx:定時器觀測值TCMPBx:定時器比較緩存計數器 預分頻器 8位 分頻器 1/2 1/4 1/8 1/16 外部TCK 計數器 觀 察 寄 存 器 比較寄存器 PCLK 五 選 一 開

41、 關 初 值 寄 存 器 控 制 邏 輯TOUT中斷當計數器TCNTBx中的值減到與TCMPBx的值相同時,TOUT的輸出值取反。改變TCMPB的值,便改變了輸出方波的占空比。定時器工作原理圖每個定時器有一個自己的由定時器時鐘驅動的16 位遞減計數器TCNTn。當遞減計數器為零時,定時器向CPU發(fā)出中斷請求,同時相應的TCNTBn 的值自動加載到遞減計數器。但是TCONn 的定時器使能位清零時(即定時器停止時),則相應的TCNTBn值不會裝載到計數器中。TCMPBn 的值用于脈寬調制。當遞減計數器的值和定時器控制邏輯中的比較寄存器的值匹配時,定時器控制邏輯改變輸出電平。因此,比較寄存器決定了P

42、WM 輸出的開啟時間(上升或下降時間)。定時器有TCNTBn、TCNTn、TCMPBn、TCMPn和TCNTOn 寄存器。TCNTBn和TCMPn是內部寄存器的名字。TCNTn寄存器的值可以從TCNTOn寄存器中讀取、當定時器為0,TCNTBn和TCMPBn可以被裝載到TCNTn和TCMPn中。如果中斷使能,當TCNTn為0時,則向CPU發(fā)出中斷請求。 定時器基本操作 P156S3C2440A的定時器有一個雙緩沖功能,在刷新一個定時器的同時,不會影響另一個正在運行的定時器正常運行。 TCNTBn中的值,不是計數器的當前狀態(tài)值,而是下個定時器的重載值。當TCNTn為0時,自動重載TCNTBn的值

43、到TCNTn中。注意:如果自動重載位為設定為0,即使TCNTn遞減為零,TCNTn也不再進一步操作。自動裝載 P157定時器初值在開始計數前必須由手動裝載:寫初始值到TCNTBn和TCMPBn中。設置相應定時器的手動更新位。 設置相應定時器的啟動位來啟動定時器(且清除手動更新位)。如果定時器被強行停止,TCNTn保留計數器值且不從TCNTBn重載。如果要設置新值,必須執(zhí)行手動更新。 定時器操作實例 P1571、使能自動重載功能。設置TCNTBn 為160(50+110),TCMPBn 為110。設置手動更新位且配置反相器位使能。手動更新位將TCNTBn 和TCMPBn 的值分別置給TCNTn

44、和TCMPn。然后分別設置TCNTBn 和TCMPBn 的值為80(40+40)和40 以決定下一個重載值。2、設置起始位,手動更新位為0,反相器關閉且自動重載開啟。在等待時間后定時器開始倒計數。3、當TCNTn 的值和TCMPn 的值相同,TOUTn 的邏輯電平從低變?yōu)楦摺?、當TCNTn 為0,中斷請求生成且TCNTBn 的值裝載到一個臨時寄存器中。在下一個定時器周期開始時,TCNTn 會從臨時寄存器中重新加載計數值。5、在中斷服務程序中,TCNTBn 和TCMPBn 的值被分別設置為80和60,用于下一輪的定時操作。6、當TCNTn 的值和TCMPn 的值相同,TOUTn 的邏輯電平從低

45、變成高。7、當TCNTn 為0,TCNTn 用TCNTBn 的值自動重載,并觸發(fā)中斷請求。8、在中斷服務程序中,自動重載和自動請求被設禁止,從而停止定時器工作。9、當TCNTn 的值和TCMPn 的值相同,TOUTn 的邏輯電平從低變成高。10、TCNTn 為0,因為自動重載被設為禁止,TCNTn 不再被重載且定時器停止。11、沒有其他的自動請求產生。定時器相關寄存器 共有6種、17個寄存器Register Address R/WDescription Reset Value TCFG00x51000000R/W配置寄存器 00x00000000 TCFG10x51000004R/W配置寄存器

46、 10x00000000TCON 0x51000008R/W控制寄存器0x00000000TCNTBn0x510000xx R/W 計數初值寄存器(5個)0x0000TCMPBn0x510000xxR/W比較寄存器(4個)0x0000TCNTOn0x510000xxR觀察寄存器(5個)0x0000定時器應用實例 P168 volatile int variable0 = 0;int ctime = 0;void Test_TimerInt(void) rINTMSK = BIT_TIMER0;pISR_TIMER0 = (int)Timer0Done;Uart_Printf("nTi

47、mer0 Interrupt Testn");/ 每0.2秒產生一個中斷/ 設定TCFG0, rTCFG1, rTCNTB0寄存器/ Timer Output Period = (TCNTB+1) x (Presc.+1) x Divider / PCLKrTCFG0 = 0xff;/ 預分頻計數器= 255rTCFG1 = 0x03; / 0011 : 1/16設定為16分頻rTCNTB0 = 2440; / (TCNT + 1) * 81.92 = 0.2*1000000rTCON = 0x02; /裝載初值rTCON = 0x09; / 自動重載 while(1) if (va

48、riable0 = 5) variable0 = 0;ctime+;Uart_Printf("%d secondsn", ctime);rINTMSK |= (BIT_TIMER0);void _irq Timer0Done(void)/Timer定時器中斷子函數rSRCPND = BIT_TIMER0; /清掛起位rINTPND = BIT_TIMER0;variable0+;Uart_Printf("variable0=%d ",variable0); 四線電阻屏測量原理 測量X坐標時:1)在X+,X-兩電極加上一個電壓Vref,Y+接一個高阻抗的A

49、DC。2)兩電極間的電場呈均勻分布,方向為X+到X-。3)手觸摸時,兩個導電層在觸摸點接觸,觸摸點X層的電位被導至 Y層所接的ADC,得到電壓Vx。4)通過Lx/L=Vx/Vref,即可得到x點的坐標。觸摸屏測量實例 P183void Touch_Screen_Init(void) rADCDLY=50000; /轉換延時 (1/3.6864M)*50000=13.56msrADCCON = (1<<14)|(39<<6)|(0<<3)|(0<<2)|(0<<1)|(0);rADCTSC = (0<<8)|(1<&l

50、t;7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(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" ) ;

51、Uart_Printf( "Press it with touch pen and see what happendn" ) ;Uart_Printf( "nAny key to exit the touchpanel testn" ) ;Uart_Getch() ;Touch_Screen_Off() ;/ 觸摸屏中斷服務子函數void _irq ADC_ISR(void) int i; DisableIrq(BIT_ADC); DisableSubIrq(BIT_SUB_TC); rADCTSC=(1<<3)|(1<<2);

52、/連續(xù)轉換 rADCCON|=0x1; /ADC啟動 while(rADCCON & 0x1); /等待啟動完成 while(!(rADCCON & 0x8000); /等待轉換完成 for(i=0;i<5;i+) while(!(1<<15)&rADCCON); /檢查轉換是否結束 bufi0 = (0x3ff&rADCDAT0);/坐標的位置數據 bufi1 = (0x3ff&rADCDAT1);/Y坐標的位置數據 for(i=0;i<5;i+) Uart_Printf("X %4d, Y %4dn", b

53、ufi0, bufi1);Uart_Printf("the next touchn");rADCTSC =0xd3; /等待下次中斷 ClearPending(BIT_ADC); ClearSubPending(BIT_SUB_TC); EnableSubIrq(BIT_SUB_TC); EnableIrq(BIT_ADC);/觸摸屏關閉void Touch_Screen_Off(void) DisableIrq(BIT_ADC); DisableSubIrq(BIT_SUB_TC); rADCCON |= (1<<2); /ADC待機模式 rADCCON |=

54、 (1); /ADC無操作LCD顯示原理VSYNC :幀同步信號 VD23:0 :LCD像素數據HSYNC :行同步脈沖信號 VCLK :像素時鐘信號 DEN:Data Enable REGBANK:17個可編程的LCD寄存器 LCDCDMA:LCD數據DMA REGBANK是LCD控制器的寄存器組,含17個寄存器,用來設置各項參數。LCDCDMA是LCD控制器專用DMA通道,可以自動地從系統(tǒng)總線上取得圖像數據,使得顯示圖像時不需要CPU的干涉。VIDPRCS將LCDCDMA中的數據組合成特定的格式(比如4位單掃、4位雙掃和8位單掃),然后從VD23:0發(fā)給LCD屏TIMEGEN和LPC3600負責產生LCD屏所需要的控制時序,如VSYNC、HSYNC、VCLK、VDEN,然后從VIDEO MUX送給LCD屏。 每個VSYNC信號表示一幀數據的開始;每個HSYNC信號表示一行數據的開始。每個VCLK信號表示正在傳輸一個像素的數據。 行時序HSYNC信號有效時,表示一行數據的開始。HSPW表示HSYNC信號的脈沖寬度為(HSPW+1)個VCLK信號周期,即(HSPW+1)個像素,這(HSPW+1)個像素數據無效HSYNC信號后,還要經過(HBPD+1)個VCLK信號周期,有效的行數據才出現。所以,在HSYNC信號有效之后,

溫馨提示

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

評論

0/150

提交評論