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

下載本文檔

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

文檔簡介

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

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

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

4、須定時(shí)刷新。FLASH存儲(chǔ)器(可在線進(jìn)行電寫入、電擦除的ROM存儲(chǔ)器)有兩種主要技術(shù)NOR FLASH:具有SRAM接口,可字節(jié)讀寫、操作速度慢、10萬次壽命NAND FLASH:多周期尋址,頁讀寫、速度快、需ECC校驗(yàn)、100萬次壽命、易產(chǎn)生壞塊存儲(chǔ)格式大端格式:高位字節(jié)排放在內(nèi)存的低地址端,低位字節(jié)排放在內(nèi)存的高地址端小端格式:低位字節(jié)排放在內(nèi)存的低地址端,高位字節(jié)排放在內(nèi)存的高地址端32bit的數(shù)0x12345678在Little-endian模式以及Big-endian模式CPU內(nèi)存中的存放方式設(shè)計(jì)一個(gè)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)軟件 控制、管理計(jì)算機(jī)系統(tǒng)的資源 支撐軟件 輔助軟件開發(fā)的工具應(yīng)用軟件 面向應(yīng)用領(lǐng)域ARM指令集變種:T、M、E、D、I、J、F、S 標(biāo)志 含義 說明T支持Thumb指令集Thumb指令集版本1:ARMv4TThumb指令集版本2:ARMv5TThumb-2:ARMv6TD片上調(diào)試DebugM支持長乘法32位乘32位得到64位,32位的乘加得到64位IEmbedded ICE在線仿真EDSP指令增加

6、了DSP算法處理器指令:16位乘加指令,帶符號(hào)數(shù)的加減法,雙字?jǐn)?shù)據(jù)操作,cache預(yù)取指令JJava加速器Jazelle提高java代碼的運(yùn)行速度S可綜合提供VHDL或Verilog語言設(shè)計(jì)文件ARM處理器工作狀態(tài)ARM狀態(tài),執(zhí)行32位的、字對(duì)齊的ARM指令 操作數(shù)寄存器的狀態(tài)(位0)為0Thumb狀態(tài),執(zhí)行16位的、半字對(duì)齊的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

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

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

9、(PC),指向正在取指的地址。 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)寄存器,在異常模式中,另外一個(gè)寄存器“程序狀態(tài)保存寄存器(SPSR)”可以被訪問。每種異常都有自己的SPSR,在因?yàn)楫惓J录M(jìn)入異常時(shí)它保存CPSR的當(dāng)前值,異常退出時(shí)可通過它恢復(fù)CPSR。CPSR寄存器的格式N:運(yùn)算結(jié)果的最高位。對(duì)于有符號(hào)二進(jìn)制補(bǔ)碼,結(jié)果為負(fù)數(shù)時(shí)N=1,為正數(shù)或零時(shí)N=

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

11、并不變化 例:MOV R2, 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ù)左移,寄存器中字的低位空出位補(bǔ)0LSR邏輯右移,寄存器中字的高位空出位補(bǔ)0ASR算術(shù)右移,移位過程中保持符號(hào)位不變,即若源操作數(shù)為正數(shù),則字的高位空出位補(bǔ)0,否則補(bǔ)1ROR循環(huán)右移,由字的低位移出位填入字的高位空出位RRX帶擴(kuò)展的循環(huán)右移,操作數(shù)右移一位

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

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

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

15、)。塊復(fù)制尋址 多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲(chǔ)器的某一位置拷貝到另一位置。 如:STMIAR0!,R1-R7;將R1R7的數(shù)據(jù)保存到存儲(chǔ)器中。;存儲(chǔ)指針在保存第一個(gè)值之后增加,;增長方向?yàn)橄蛏显鲩L。A存儲(chǔ)指針在保存第一個(gè)值前增加 B存儲(chǔ)指針在保存第一個(gè)值后增加I增加方向?yàn)橄蛏显鲩L D增加方向?yàn)橄蛳略鲩L通過控制GPF3,GPF4,GPF5,GPF6的控制實(shí)現(xiàn)對(duì)LED1,LED2,LED3,LED4 亮滅的控制。LED燈通過電源、限流電阻與ARM的I/O口相連,設(shè)計(jì)程序使得4個(gè)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 設(shè)為輸出口while(1)for(i=0; i<4; i+)GPFDAT=ledtabi;Delay(70)

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

18、000,其片選端接到GCS4,則內(nèi)部位于300H地址處的寄存器的實(shí)際地址為:0x2000 0000 + 0x0300 = 0x2000 0300按照K9F1208的組織方式可以分四類地址: Column Address、halfpage pointer、Page Address 、Block Address。Column Address表示數(shù)據(jù)在半頁中的地址,大小范圍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個(gè)周期尋址某一存儲(chǔ)單元相關(guān)寄存器NAND Flash配置寄存器 NFCONF    地址0x4E000000NAND Flash命令設(shè)置寄存器 NFCMD     地址0x4E000004NAND Flash地址設(shè)置寄存器 NFADDR    地址0x4E000008NAND Flash數(shù)據(jù)寄存器 NFDATA     地址0x4E00000CNAND Flash操作狀態(tài)寄存器 N

20、FSTAT     地址0x4E000010NAND Flash ECC寄存器 NFECC     地址0x4E000014Nand Flash的尋址把一個(gè)完整的Nand Flash地址分解成Column Address與Page Address進(jìn)行尋址。Column Address只有8位,需配合A8完成一頁范圍內(nèi)尋址。在0255內(nèi)時(shí)用00h命令,當(dāng)讀取的起始地址是在256511時(shí),則使用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讀頁操作時(shí)序 NAND 讀整頁函數(shù)static void ReadPage(U32 addr, U8 *buf)   /addr表示flash中的第幾頁,即flash地址>>9U16 i;NFChipEn();   /使能NandFla

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

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

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

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

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

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

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

30、為:0x00000000。外部中斷屏蔽寄存器(EINTMASK)用來作為20個(gè)外部中斷的屏蔽寄存器。其地址為0x560000A4,復(fù)位后為0x00FFFFF0,此寄存器是可讀可寫的。外部中斷懸掛寄存器(EINTPEND)用來作為20個(gè)外部中斷的未決定寄存器。其地址為0x560000A8,復(fù)位后為0x00,此寄存器是可讀可寫的例:利用兩個(gè)按鍵觸發(fā)外部中斷EINT0、EINT2,寫出中斷初始化和服務(wù)程序。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");/中斷初始化函數(shù)void Eint_Init(void)rGPFCON = rGPFCON & (3)|(1<<1); /GPF0 設(shè)置為EINT0rGPFCON = rGPFCON & (3<<4)|(1<<5); /GPF2 設(shè)置為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); 時(shí)鐘計(jì)算FCLKUCLK看門狗基本原理預(yù)分頻器的值和頻率除數(shù)因子存放在看門狗定時(shí)器控制寄存器(WTCON)中,預(yù)分頻器的值有效范圍0 - 255。頻率除數(shù)因子可以設(shè)定為 16、32、64 或128分頻??撮T狗定時(shí)器的定時(shí)器時(shí)鐘周期公式:S3C2440A芯片的看門狗定時(shí)器邏輯中有3個(gè)控制其操作的專用寄存器:看門狗定時(shí)器控制寄存器(WTCON)、看門狗定時(shí)器數(shù)據(jù)寄存器(WTDAT)和看門狗計(jì)數(shù)器寄存器(WTCNT)??撮T狗定時(shí)器控制寄存器(WTCON)是設(shè)定預(yù)分頻器的值、設(shè)定看門狗是否有效、設(shè)

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

36、它對(duì)計(jì)數(shù)時(shí)鐘信號(hào)進(jìn)行減1計(jì)數(shù),即每來一個(gè)計(jì)數(shù)時(shí)鐘脈沖,計(jì)數(shù)器內(nèi)的值減1。因?yàn)閃TDAT寄存器的值在看門狗定時(shí)器初始使能時(shí),不能自動(dòng)裝載到WTCNT中,所以必須第一次要給WTCNT設(shè)定一個(gè)初始值??撮T狗應(yīng)用實(shí)例 P163/主功能函數(shù)void wtMain(void) Uart_Init(115200);Uart_Printf("watchdog test is beginningn");watchdog_test();/看門狗復(fù)位功能程序?qū)崿F(xiàn)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);/看門狗定時(shí)器功能程序?qū)崿F(xiàn)void watchdog_test(void) /*初始化*/建立WatchDog 中斷服務(wù)程序句柄pISR_WDT = (unsigned)watchdog_isr;/initialize interrupt registersClearPending(BIT_WDT_AC97);ClearSubPending(BIT_WDT);/*啟動(dòng)看門狗*

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);/看門狗時(shí)鐘周期T=WTCNT*t_watchdog=3.8784S/看門狗喂狗rWTDAT=15000;rWTCNT=15000;rWTCON|=(1<<5)|(1<<2); /使能W

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

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

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

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

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

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

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

46、 10x00000000TCON 0x51000008R/W控制寄存器0x00000000TCNTBn0x510000xx R/W 計(jì)數(shù)初值寄存器(5個(gè))0x0000TCMPBn0x510000xxR/W比較寄存器(4個(gè))0x0000TCNTOn0x510000xxR觀察寄存器(5個(gè))0x0000定時(shí)器應(yīng)用實(shí)例 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秒產(chǎn)生一個(gè)中斷/ 設(shè)定TCFG0, rTCFG1, rTCNTB0寄存器/ Timer Output Period = (TCNTB+1) x (Presc.+1) x Divider / PCLKrTCFG0 = 0xff;/ 預(yù)分頻計(jì)數(shù)器= 255rTCFG1 = 0x03; / 0011 : 1/16設(shè)定為16分頻rTCNTB0 = 2440; / (TCNT + 1) * 81.92 = 0.2*1000000rTCON = 0x02; /裝載初值rTCON = 0x09; / 自動(dòng)重載 while(1) if (va

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

49、DC。2)兩電極間的電場呈均勻分布,方向?yàn)閄+到X-。3)手觸摸時(shí),兩個(gè)導(dǎo)電層在觸摸點(diǎn)接觸,觸摸點(diǎn)X層的電位被導(dǎo)至 Y層所接的ADC,得到電壓Vx。4)通過Lx/L=Vx/Vref,即可得到x點(diǎn)的坐標(biāo)。觸摸屏測量實(shí)例 P183void Touch_Screen_Init(void) rADCDLY=50000; /轉(zhuǎn)換延時(shí) (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() ;/ 觸摸屏中斷服務(wù)子函數(shù)void _irq ADC_ISR(void) int i; DisableIrq(BIT_ADC); DisableSubIrq(BIT_SUB_TC); rADCTSC=(1<<3)|(1<<2);

52、/連續(xù)轉(zhuǎn)換 rADCCON|=0x1; /ADC啟動(dòng) while(rADCCON & 0x1); /等待啟動(dòng)完成 while(!(rADCCON & 0x8000); /等待轉(zhuǎn)換完成 for(i=0;i<5;i+) while(!(1<<15)&rADCCON); /檢查轉(zhuǎn)換是否結(jié)束 bufi0 = (0x3ff&rADCDAT0);/坐標(biāo)的位置數(shù)據(jù) bufi1 = (0x3ff&rADCDAT1);/Y坐標(biāo)的位置數(shù)據(jù) 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);/觸摸屏關(guān)閉void Touch_Screen_Off(void) DisableIrq(BIT_ADC); DisableSubIrq(BIT_SUB_TC); rADCCON |= (1<<2); /ADC待機(jī)模式 rADCCON |=

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

溫馨提示

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