第4章b 基于S3C2410的硬件結(jié)構(gòu)與接口編程_第1頁
第4章b 基于S3C2410的硬件結(jié)構(gòu)與接口編程_第2頁
第4章b 基于S3C2410的硬件結(jié)構(gòu)與接口編程_第3頁
第4章b 基于S3C2410的硬件結(jié)構(gòu)與接口編程_第4頁
第4章b 基于S3C2410的硬件結(jié)構(gòu)與接口編程_第5頁
已閱讀5頁,還剩148頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于S3C2410的硬件結(jié)構(gòu)與接口編程基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM自帶的10位A/D轉(zhuǎn)換器基于S3C2410的硬件結(jié)構(gòu)與接口編程編程注意事項(xiàng)如下。(1)A/D轉(zhuǎn)換的數(shù)據(jù)可以通過中斷或查詢的方式來訪問,如果是用中斷方式,全部的轉(zhuǎn)換時間(從A/D轉(zhuǎn)換的開始到數(shù)據(jù)讀出)要更長,因?yàn)橹袛喾?wù)程序返回和數(shù)據(jù)訪問的原因。如果是查詢方式則要檢測ADCCON[15](轉(zhuǎn)換結(jié)束標(biāo)志位)來確定從ADCDAT寄存器讀取的數(shù)據(jù)是否是最新的轉(zhuǎn)換數(shù)據(jù)。(2)A/D轉(zhuǎn)換開始的另一種方式是將ADCCON[1]置為1,這時只要有讀轉(zhuǎn)換數(shù)據(jù)的信號A/D轉(zhuǎn)換就會同步開始。(3)與AD相關(guān)的寄存器①A/D采樣控制寄存器ADCCON及其位描述(參見表4-77、表4-78)ARM自帶的10位A/D轉(zhuǎn)換器基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM自帶的10位A/D轉(zhuǎn)換器基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM自帶的10位A/D轉(zhuǎn)換器基于S3C2410的硬件結(jié)構(gòu)與接口編程A/D轉(zhuǎn)換器在擴(kuò)展版的接法基于S3C2410的硬件結(jié)構(gòu)與接口編程【例4-5】調(diào)節(jié)A/D轉(zhuǎn)換測試程序。功能:調(diào)節(jié)A/D轉(zhuǎn)換時的輸入電位器,從串行口0輸出A/D轉(zhuǎn)換結(jié)果數(shù)值。主參考代碼如下:

intmain(void){inti,j;floatd;ARMTargetInit(); //開發(fā)版初始化init_ADdevice(); //A/D初始化Uart_Printf(0,"\n");While

(1)A/D編程實(shí)例基于S3C2410的硬件結(jié)構(gòu)與接口編程{for(i=0;i<=2;i++) //采樣0~3路A/D值{for(j=0;j<=1;j++){d=GetADresult(i)*3.3/1023; //數(shù)據(jù)采集,處理}Uart_Printf(0,"a%d=%f\t",i,d);hudelay(1000); //延時}Uart_Printf(0,"\r");}return0;}A/D編程實(shí)例主要的定義和函數(shù)參考代碼如下:

#defineADCCON_FLAG(0x1<<15)#defineADCCON_ENABLE_START_BYREAD(0x1<<1)#definerADCCON(*(volatileunsigned*)0x58000000)#definerADCDAT0(*(volatileunsigned*)0x5800000C)#definePRSCVL(49<<6)#defineADCCON_ENABLE_START(0x1)#defineSTDBM(0x0<<2)#definePRSCEN(0x1<<14)voidARMTargetInit(void);voidinit_ADdevice() //初始化AD{rADCCON=(PRSCVL|ADCCON_ENABLE_START|STDBM|PRSCEN);}intGetADresult(intchannel) //取采樣值{rADCCON=ADCCON_ENABLE_START_BYREAD|(channel<<3)|PRSCEN|PRSCVL;hudelay(10);while(!(rADCCON&ADCCON_FLAG)); //轉(zhuǎn)換結(jié)束return(0x3ff&rADCDAT0); //返回采樣值}A/D編程實(shí)例基于S3C2410的硬件結(jié)構(gòu)與接口編程S3C2410X中斷控制器可以接收來自56個中斷源的中斷請求。這些中斷源來自DMA、UART、I2C等這樣的片內(nèi)外圍或片外外部引腳。其中24路為外部中斷EINTn,外部中斷中EINT4~EINT7、EINT8~EINT23是邏輯或的關(guān)系,它們共享一條中斷請求線。當(dāng)從內(nèi)部外設(shè)和外部中斷請求引腳接收到多個中斷請求時,經(jīng)過中斷仲裁后,中斷控制器向ARM920T請求FIQ或者IRQ中斷。仲裁過程與硬件優(yōu)先級有關(guān),仲裁結(jié)果寫入中斷請求寄存器。中斷請求寄存器幫助用戶確定哪個中斷產(chǎn)生。

ARM中斷

基于S3C2410的硬件結(jié)構(gòu)與接口編程1.中斷控制器的運(yùn)行程序狀態(tài)寄存器PSR中有F位和I位。如果PSR中的F位被置1,CPU不接收FIQ快速中斷,同樣如果I位PSR被置1,CPU不接收IRQ中斷,因此中斷控制器能夠通過將PSR的F位、I位和相應(yīng)的INTMSK中的位清零來接收中斷。2.中斷模式ARM920T有兩種中斷模式(INTMOD):FIQ和IRQ。在中斷請求時所有的中斷源要決定使用哪個模式。3.中斷請求寄存器S3C2410X有兩種中斷請求寄存器:源掛起寄存器(SRCPND)和中斷掛起寄存器(INTPND)。這些請求掛起寄存器揭示了一個中斷是否正在請求。當(dāng)中斷源請求中斷服務(wù)時,SRCPND寄存器中的相應(yīng)位肯定被置1,然而,中斷仲裁之后則只有INTPND寄存器的某1位被自動置1。即使該中斷被屏蔽,SRCPND寄存器中的相應(yīng)位也會被置1,但是INTPND寄存器將不會改變。當(dāng)INTPND寄存器的某位被置1,且I位或者F位清零時中斷服務(wù)即開始。SRCPND和INTPND寄存器能夠被讀和寫,因此服務(wù)函數(shù)必須通過向SRCPND和INTPND中相應(yīng)位寫入“1”來清除中斷請求條件。

ARM中斷

基于S3C2410的硬件結(jié)構(gòu)與接口編程4.中斷屏蔽寄存器INTMSK通過中斷屏蔽寄存器的哪個屏蔽位被置1可以知道哪個中斷被禁止。如果INTMSK的某個屏蔽位為0,此中斷將會被正常服務(wù)。如果中斷源產(chǎn)生了一個請求,SRCPND中的源請求位被置位,即使相應(yīng)屏蔽位為1。5.中斷源表4-81所示為中斷控制器支持的56個中斷源。

ARM中斷

基于S3C2410的硬件結(jié)構(gòu)與接口編程

ARM中斷

基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程6.中斷優(yōu)先級產(chǎn)生模塊其中32個中斷請求的優(yōu)先級邏輯由7個仲裁位組成:6個一級仲裁位和一個二級仲裁位,如圖4-21所示。每個仲裁器可以處理6個中斷請求,基于一位仲裁器模式(ARB_MODE)和兩位選擇信號(ARB_SEL)?!袢绻鸄RB_SEL位為00B,優(yōu)先級順序是:REQ0,REQ1,REQ2,REQ3,REQ4,andREQ5。●如果ARB_SEL位為01B,優(yōu)先級順序是:REQ0,REQ2,REQ3,REQ4,REQ1,andREQ5?!袢绻鸄RB_SEL位為10B,優(yōu)先級順序是:REQ0,REQ3,REQ4,REQ1,REQ2,andREQ5?!袢绻鸄RB_SEL位為11B,優(yōu)先級順序是:REQ0,REQ4,REQ1,REQ2,REQ3,andREQ5。ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程7.中斷控制器特殊寄存器SFR中斷控制器有5個控制寄存器:源掛起寄存器、中斷模式寄存器、屏蔽寄存器、優(yōu)先級寄存器和中斷請求寄存器。(1)源掛起寄存器(SRCPND)及其位描述(參見表4-82、表4-83)該寄存器是32位的,每一位都同一個中斷源相聯(lián)系。如果中斷源產(chǎn)生中斷請求并等待中斷服務(wù),那么相應(yīng)的位要設(shè)為1。相應(yīng)的,該寄存器表明哪個中斷源在等待請求被服務(wù)。注意,源掛起寄存器中的位被中斷源自動置1不管屏蔽寄存器的值。另外,源掛起寄存器也不被優(yōu)先級寄存器和中斷控制器影響。在一個特定的中斷源的中斷服務(wù)程序中,SRCPND中的相應(yīng)位應(yīng)該被清除,這樣才能正確得到下一次同一個中斷源的中斷。如果在中斷服務(wù)程序返回時沒有清除相應(yīng)的位,中斷控制器會認(rèn)為該中斷源又產(chǎn)生了一個中斷。換句話說,如果SRCPND中有一位為1,中斷控制器會始終認(rèn)為一個有效的中斷請求等待服務(wù)。ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程(5)中斷掛起寄存器(INTPND)(參見表4-88)32位的該寄存器顯示了那個沒有被屏蔽的,等待被服務(wù)的中斷請求是否擁有最高的優(yōu)先級。既然INTPND排在優(yōu)先級寄存器后面,顯然只有一位能夠被置1,并且該中斷請求向CPU產(chǎn)生一個IRQ。在IRQ的中斷服務(wù)程序中,可以讀取該寄存器以確定哪一個中斷源被服務(wù)。像SRCPND一樣,需要在中斷服務(wù)程序中將SRCPND清除后將INTPND相應(yīng)位清除。ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷ARM嵌入式系統(tǒng)原理與開發(fā)ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程(7)子源掛起寄存器(SUBSRCPND)及其位描述(參見表4-91、表4-92)ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程ARM920T有一個當(dāng)前程序狀態(tài)寄存器(CPSR)和5個保留程序狀態(tài)寄存器(SPSR)用于異常處理。這些寄存器的功能如下。①保存最常用的ALU操作的有關(guān)信息;②控制中斷的使能與禁止;③設(shè)定處理器的工作模式。寄存器的格式如下?!駰l件碼標(biāo)志:N、Z、C、V是條件碼標(biāo)志,它們可能會因?yàn)檫壿嫽蛩阈g(shù)運(yùn)算的結(jié)果變化。有時候可能會被檢測以決定某條指令是否執(zhí)行。●控制位:低8位被稱為控制位。當(dāng)異常發(fā)生時,它的值可能會發(fā)生變化。如果處理器工作在特權(quán)模式下,它們的值也可被軟件改變。●T位:它反應(yīng)了工作的狀態(tài),該位為1表示工作在Thumb狀態(tài)下,為0表示工作在Arm狀態(tài)下?!馡位、F位:這是中斷禁止位,當(dāng)被置1時,IRQ和FIQ就被禁止了?!衲J轿唬核鼈儧Q定了處理器的工作模式。并非任意一個組合就可以定義一個有效的工作模式。用戶需要注意,如果非法的值寫入這些位,處理器會進(jìn)入一個無法恢復(fù)的狀態(tài),只能復(fù)位解決。ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程8.異常中斷的響應(yīng)過程與返回過程異常中斷的響應(yīng)過程如下。①在合適的Lr寄存器中保存下一條指令的地址。②將處理器當(dāng)前狀態(tài)寄存器(CPSR)的值保存到異常中斷的SPSR中。③設(shè)置當(dāng)前狀態(tài)寄存器(CPSR)的值,包括設(shè)置CPSR相應(yīng)位的值使處理器進(jìn)入特定的處理器模式。按要求屏蔽中斷,通常應(yīng)該屏蔽IRQ中斷,在FIQ中斷時屏蔽FIQ中斷。④處理程序計(jì)數(shù)器(PC)。將PC值設(shè)為相應(yīng)的中斷服務(wù)程序的地址,從而實(shí)現(xiàn)跳轉(zhuǎn)以執(zhí)行中斷程序。異常中斷返回過程如下。①恢復(fù)狀態(tài)寄存器。將保存在中斷模式中的SPSR值賦予當(dāng)前的狀態(tài)寄存器。②將返回地址復(fù)制到程序計(jì)數(shù)器。這樣程序?qū)⒎祷氐疆惓V袛喈a(chǎn)生的下一條指令或出現(xiàn)問題的指令處執(zhí)行。③清除中斷禁止位,如果中斷入口處關(guān)閉了中斷。9.中斷編程實(shí)例中斷編程實(shí)例可參考本章4.4.6節(jié)的DMA編程實(shí)例,該實(shí)例是利用中斷的一個特例。ARM中斷基于S3C2410的硬件結(jié)構(gòu)與接口編程液晶得名于其物理特性:它的分子晶體以液態(tài)而非固態(tài)存在。這些晶體分子的液體特性使得它具有兩種非常有用的特點(diǎn):①如果讓電流通過液晶層,這些分子將會以電流的流向方向進(jìn)行排列,如果沒有電流,它們將會彼此平行排列。②如果提供了帶有細(xì)小溝槽的外層,將液晶倒入后,液晶分子會順著槽排列,并且內(nèi)層與外層以同樣的方式進(jìn)行排列。液晶的第3個特性是很神奇的:液晶層能使光線發(fā)生扭轉(zhuǎn)。液晶層表現(xiàn)的有些類似偏光器,這就意味著它能夠過濾除了那些從特殊方向射入之外的所有光線。此外,如果液晶層發(fā)生了扭轉(zhuǎn),光線將會隨之扭轉(zhuǎn),以不同的方向從另外一個面中射出。

LCD原理

基于S3C2410的硬件結(jié)構(gòu)與接口編程1.總線驅(qū)動方式一般帶有驅(qū)動模塊的LCD顯示屏使用這種驅(qū)動方式,由于LCD已經(jīng)帶有驅(qū)動硬件電路,因此模塊給出的是總線接口,便于與單片機(jī)的總線進(jìn)行接口。驅(qū)動模塊具有8位數(shù)據(jù)總線,外加一些電源接口和控制信號。而且自帶顯示緩存,只需要將要顯示的內(nèi)容送到顯示緩存中就可以實(shí)現(xiàn)內(nèi)容的顯示。由于只有8條數(shù)據(jù)線,因此,常常通過引腳信號來實(shí)現(xiàn)地址與數(shù)據(jù)線復(fù)用,以達(dá)到把相應(yīng)數(shù)據(jù)送到相應(yīng)顯示緩存的目的。

LCD的驅(qū)動控制

ARM嵌入式系統(tǒng)原理與開發(fā)2.控制器掃描方式內(nèi)置的LCD控制器提供了下列外部接口信號:VFRAME/VSYNC/STV:幀同步信號(STN)/垂直同步信號(TFT)/SECTFT信號;VLINE/HSYNC/CPV:行同步脈沖信號(STN)/水平同步信號(TFT)/SECTFT信號;VCLK/LCD_HCLK:像素時鐘信號(STN/TFT)/SECTFT信號;VD[23:0]:LCD像素?cái)?shù)據(jù)輸出端口(STN/TFT/SECTFT);VM/VDEN/TP:LCD驅(qū)動交流偏置信號(STN)/數(shù)據(jù)使能信號(TFT)/SECTFT信號;LEND/STH:行結(jié)束信號(TFT)/SECTFT信號;LCD_PWREN:LCD面板電源使能控制信號;LCDVF0:SECTFTOE信號;LCDVF1:SECTFTREV信號;LCDVF2:SECTFTREVB信號。

LCD的驅(qū)動控制

基于S3C2410的硬件結(jié)構(gòu)與接口編程端口D寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程LCD特殊控制寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程LCD特殊控制寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程LCD特殊控制寄存器LCD特殊控制寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程LCD特殊控制寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程LCD特殊控制寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程(5)LCD控制寄存器5(LCDCON5)及其位描述(參見表4-106、表4-107)LCD特殊控制寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程LCD特殊控制寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程LCD特殊控制寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程LCD特殊控制寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程LCD特殊控制寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程【例4-9】640x480TFTLCD屏測試。此程序完成640x480TFTLCD屏的初始化操作,并循環(huán)顯示各種顏色來實(shí)現(xiàn)對LCD屏的測試。主函數(shù)如下:

U32LCDBufferII2[480][640];intmain(void)/*在LCD上顯示16位色圖形的關(guān)鍵是填充二級顯示緩沖,將顯示像素的24位顏色信息寫

入LCDBufferII2。將RGB3種基本顏色按一定比例混合即可構(gòu)成更復(fù)雜的顏色,每個像素的3種基本顏色分別占一個字節(jié),可以方便地在程序里改寫各基本顏色的數(shù)值,從而改變該像素的混合顏色。*/{inti,j,k;U32jcolor;ARMTargetInit(); //開發(fā)版初始化LCD_Init(); //LCD初始化

for(i=0;i<9;i++) //以下循環(huán)為用不同顏色填充顯示緩沖區(qū){switch(i){case0:jcolor=0x00000000; //RGB均為0黑色break;case1:jcolor=0x000000f8; //R紅色break;case2:jcolor=0x0000f0f8; //RandG橙色break;case3:jcolor=0x0000fcf8; //RandG黃break;

LCD編程實(shí)例

基于S3C2410的硬件結(jié)構(gòu)與接口編程case4:jcolor=0x0000fc00; //G綠色break;case5:jcolor=0x00f8fc00; //GB青色break;case6:jcolor=0x00f80000; //B藍(lán)色break;case7:jcolor=0x00f800f8; //RandB紫色break;case8:jcolor=0x00f8fcf8; //RGB白色break;}for(k=0;k<480;k++)for(j=i*64;j<i*64+64;j++)LCDBufferII2[k][j]=jcolor;}jcolor=0x000000ff;for(i=0;i<480;i++){if(i==160||i==320)jcolor<<=8;for(j=576;j<640;j++)LCDBufferII2[i][j]=jcolor;}LCD_Refresh(); //LCD刷新while(1);return0;}LCD編程實(shí)例基于S3C2410的硬件結(jié)構(gòu)與接口編程主要參數(shù)的定義和功能函數(shù)如下:

#defineLCDCON1_CLKVAL(1<<8) //確定VCLK的頻率//VCLK=HCLK/[(CLKVAL+1)x2](CLKVAL>=0)#defineLCDCON1_MMODE(0<<7) //VM的啟動速率,每一幀#defineLCDCON1_PNRMODE(0x3<<5) //TFT顯示器#defineLCDCON1_BPPMODE(0xc<<1) //TFT16位/像素模式#defineLCDCON1_ENVID(1) //使視頻輸出和LCD控制信號使能#defineLCDCON2_VBPD32//VBPD是在垂直同步周期之后的在每一幀起始位置的不活動列的數(shù)目#defineLCDCON2_LINEVAL479//LCD面板的垂直尺寸#defineLCDCON2_VFPD9//在垂直同步周期之前的在每一幀結(jié)束位置的不活動列的數(shù)目#defineLCDCON2_VSPW1//垂直同步脈沖寬度通過計(jì)數(shù)不活動列的數(shù)目決定VSYNC脈沖的峰值寬度

LCD編程實(shí)例

基于S3C2410的硬件結(jié)構(gòu)與接口編程#defineLCDCON3_HBPD47//在HSYNC的下降沿和活動數(shù)據(jù)的起始位置之間的VCLK周期的數(shù)目#defineLCDCON3_HOZVAL639//這些位決定LCD面板的水平尺寸#defineLCDCON3_HFPD15//HFP是在HSYNC的上升沿和活動數(shù)據(jù)的結(jié)束位置之間的VCLK周期的數(shù)目#defineLCDCON4_HSPW95//水平同步脈沖寬度通過計(jì)數(shù)VCLK的數(shù)目決定HSYNC脈沖的峰值寬度#defineLCDCON5_FRM5651//這一位選擇16位/像素輸出視頻數(shù)據(jù)的格式。1=5:6:5格式#defineLCDCON5_INVVCLK0//這一位控制VCLK活動沿的極性。0=視頻數(shù)據(jù)在VCLK的下降沿取得#defineLCDCON5_INVVLINE1//這一位顯示VLINE/HSYNC脈沖的極性。1=倒向#defineLCDCON5_INVVFRAME1//這一位顯示VFRAME/VSYNC脈沖的極性。1=倒向#defineLCDCON5_INVVD0//這一位顯示VD(視頻數(shù)據(jù))脈沖的極性。0=正常#defineLCDCON5_INVVDEN0//這一位顯示VDEN信號的極性。0=正常#defineLCDCON5_INVPWREN0//這一位顯示PWREN信號的極性。0=正常#defineLCDCON5_INVLEND0//這一位顯示LEND信號的極性。0=正常#defineLCDCON5_PWREN1//LCD_PWREN輸出信號的使能/禁止。1=使PWREN信號使能#defineLCDCON5_ENLEND0//LEND輸出信號的使能/禁止。0=使LEND信號禁止

#defineLCDCON5_BSWP0//字節(jié)交換控制位。0=交換禁止#defineLCDCON5_HWSWP1//半字交換控制位。1=交換使能

LCD編程實(shí)例

基于S3C2410的硬件結(jié)構(gòu)與接口編程#defineBPP24BL0//這一位決定24位/像素視頻存儲器的次序。0=LSB有效#defineTPALEN1//臨時調(diào)色板寄存器使能位。1=使能#defineLPC_EN1//決定LPC3600使能/禁止。1=LPC3600使能#defineFIWSEL0//決定LCD的輸入輸出的觸發(fā)電平。0=4個字#defineINT_FrSyn1//屏蔽LCD幀同步中斷。1=中斷服務(wù)被屏蔽#defineINT_FiCnt1//屏蔽LCD輸入輸出中斷。1=中斷服務(wù)被屏蔽#defineMVAL13//由MVAL定義的VM速度U16*pLCDBuffer16I1=(U16*)0x32000000;U16*pLCDBuffer16I2=(U16*)0x32096000;U32LCDBufferII2[LCDHEIGHT][LCDWIDTH];U16LCDBufferII1[307200];

voidLCD_Init()//LCD初始化{U32i;U32LCDBASEU,LCDBASEL,LCDBANK;rGPCUP=0xffffffff;//禁止上拉電阻

LCD編程實(shí)例

基于S3C2410的硬件結(jié)構(gòu)與接口編程rGPCCON=0xaaaaaaaa;//初始化VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LENDrGPDUP=0xffffffff;//禁止上拉電阻rGPDCON=0xaaaaaaaa;//初始化VD[23:8]rLCDCON1=0|LCDCON1_BPPMODE|LCDCON1_PNRMODE|LCDCON1_MMODE|LCDCON1_CLKVAL;rLCDCON2=(LCDCON2_VBPD<<24)|(LCDCON2_LINEVAL<<14)|(LCDCON2_VFPD<<6)|LCDCON2_VSPW;rLCDCON3=(LCDCON3_HBPD<<19)|(LCDCON3_HOZVAL<<8)|LCDCON3_HFPD;rLCDCON4=LCDCON4_HSPW|(MVAL<<8);rLCDCON5=(BPP24BL<<12)|(LCDCON5_FRM565<<11)|(LCDCON5_INVVCLK<<10)|(LCDCON5_INVVLINE<<9)|(LCDCON5_INVVFRAME<<8)|(LCDCON5_INVVD<<7)|\(LCDCON5_INVVDEN<<6)|(LCDCON5_INVPWREN<<5)|(LCDCON5_

INVLEND<<4)|(LCDCON5_PWREN<<3)|(LCDCON5_ENLEND<<2)|(LCDCON5_BSWP<<1)|LCDCON5_HWSWP;LCDBANK=0x32000000>>22;LCDBASEU=0x0;LCDBASEL=LCDBASEU+(480)*640;rLCDADDR1=(LCDBANK<<21)|LCDBASEU;rLCDADDR2=LCDBASEL;rLCDADDR3=(640)|(0<<11);rLCDINTMSK=(INT_FrSyn<<1)|INT_FiCnt;

LCD編程實(shí)例

基于S3C2410的硬件結(jié)構(gòu)與接口編程rLCDLPCSEL=0;rTPAL=(0<<24);for(i=0;i<640*480;i++)*(pLCDBuffer16I1+i)=0x0;rLCDCON1+=LCDCON1_ENVID;}voidLCD_Refresh()/*此函數(shù)主要是將二級緩存LCDBufferII2的數(shù)據(jù)由32位彩色圖形信息轉(zhuǎn)換成16位的圖形信息,然后放到pLCDBuffer16I2指向的一級緩存轉(zhuǎn)換公式:pixcolor=((pbuf[0]&0xf8)<<11)|((pbuf[1]&0xfc)<<6)|(pbuf[2]&0xf8)其中,pbuf[0]、pbuf[1]、pbuf[2]是一個象素的32位彩色數(shù)據(jù)的前24位,分別代表R、G、B*/{inti,j;U32lcddata;U16pixcolor; //一個像素點(diǎn)的顏色U8*pbuf=(U8*)LCDBufferII2[0];U32LCDBASEU,LCDBASEL,LCDBANK;

LCD編程實(shí)例

基于S3C2410的硬件結(jié)構(gòu)與接口編程for(i=0;i<LCDWIDTH*LCDHEIGHT;i++){pixcolor=((pbuf[0]&0xf8)<<11)|((pbuf[1]&0xfc)<<6)|(pbuf[2]&0xf8); //變換RGBpbuf+=4;*(pLCDBuffer16I2+i)=pixcolor;}LCDBANK=0x32096000>>22;LCDBASEU=(0x32096000<<9)>>10;LCDBASEL=LCDBASEU+(480)*640;rLCDADDR1=(LCDBANK<<21)|LCDBASEU;rLCDADDR2=LCDBASEL;rLCDADDR3=(640)|(0<<11);}

LCD編程實(shí)例

基于S3C2410的硬件結(jié)構(gòu)與接口編程觸摸屏按其工作原理的不同分為表面聲波屏、電容屏、電阻屏和紅外屏幾種,常見的為電阻觸摸屏。如圖4-24所示,電阻觸摸屏的屏體部分是一塊與顯示器表面非常配合的多層復(fù)合薄膜,由一層玻璃或有機(jī)玻璃作為基層,表面涂有一層透明的導(dǎo)電層,上面再蓋有一層外表面硬化處理、光滑防刮的塑料層,它的內(nèi)表面也涂有一層透明導(dǎo)電層,在兩層導(dǎo)電層之間有許多細(xì)小(小于千分之一英寸)的透明隔離點(diǎn)把它們隔開絕緣。

觸摸屏的工作原理基于S3C2410的硬件結(jié)構(gòu)與接口編程觸摸屏的工作原理基于S3C2410的硬件結(jié)構(gòu)與接口編程如圖4-25所示,當(dāng)手指或筆觸摸屏幕時(見圖4-25(c)),平常相互絕緣的兩層導(dǎo)電層就在觸摸點(diǎn)位置有了一個接觸,因其中一面導(dǎo)電層(頂層)接通x軸方向的5V均勻電壓場(見圖4-25(a)),使得檢測層(底層)的電壓由零變?yōu)榉橇悖刂破鱾蓽y到這個接通后,進(jìn)行A/D轉(zhuǎn)換,并將得到的電壓值與5V相比即可得觸摸點(diǎn)的x軸坐標(biāo)為(原點(diǎn)在靠近接地點(diǎn)的那端): Xi=Lx

×

Vi/V(即分壓原理)同理得出y軸的坐標(biāo),這就是所有電阻觸摸屏共同的最基本原理。觸摸屏的工作原理基于S3C2410的硬件結(jié)構(gòu)與接口編程觸摸屏的工作原理基于S3C2410的硬件結(jié)構(gòu)與接口編程S3C2410X具有8通道模擬輸入的10位CMOS模/數(shù)轉(zhuǎn)換器(ADC)。它將輸入的模擬信號轉(zhuǎn)換為10位的二進(jìn)制數(shù)字代碼。在2.5MHz的A/D轉(zhuǎn)換器時鐘下,最大轉(zhuǎn)化速率可達(dá)到500KSPS。A/D轉(zhuǎn)換器支持片上采樣和保持功能,并支持掉電模式。一種ADC和觸摸屏推薦電路如圖4-26所示。觸摸屏的控制基于S3C2410的硬件結(jié)構(gòu)與接口編程觸摸屏的控制基于S3C2410的硬件結(jié)構(gòu)與接口編程1.針對圖4-26中的接口結(jié)構(gòu),推薦的操作步驟①采用外部晶體管連接觸摸屏到S3C2410X的接口電路。②選擇分離的x/y軸坐標(biāo)轉(zhuǎn)換模式或者自動(連續(xù)的)x/y軸坐標(biāo)轉(zhuǎn)換模式來獲取觸摸點(diǎn)的x/y坐標(biāo)。③設(shè)置觸摸屏接口為等待中斷模式(注意,等待的是INT_TC中斷)。④如果中斷(INT_TC)發(fā)生,那么立即激活相應(yīng)的A/D轉(zhuǎn)換(分離的x/y軸坐標(biāo)轉(zhuǎn)換或者自動(連續(xù)的)x/y軸坐標(biāo)轉(zhuǎn)換)。⑤在得到觸摸點(diǎn)的x/y軸坐標(biāo)值后,返回到等待中斷模式(第③步)。注意:(1)外部電壓源應(yīng)該是3.3V。(2)外部晶體管的內(nèi)部阻抗應(yīng)該小于5。觸摸屏的控制基于S3C2410的硬件結(jié)構(gòu)與接口編程2.觸摸屏接口的主要功能(1)A/D轉(zhuǎn)換時間當(dāng)PCLK頻率是50MHz且ADCCON寄存器中預(yù)標(biāo)定器的設(shè)置值是49時,轉(zhuǎn)換得到10位數(shù)字量時間,總共需要: A/D轉(zhuǎn)換器頻率

=

50MHz/(49+1)=1MHz

轉(zhuǎn)換時間

=

1/(1MHz/5周期)=1/200kHz=5s注:A/D轉(zhuǎn)換器最大可以工作在2.5MHz時鐘下(A/D轉(zhuǎn)換器頻率小于等于2.5MHz),因此最大轉(zhuǎn)換率能達(dá)到500KSPS。(2)屏接口工作模式①普通轉(zhuǎn)換模式。普通轉(zhuǎn)換模式(AUTO_PST

=

0,XY_PST

=

0)是用作一般目的下的ADC轉(zhuǎn)換。這個模式可以通過設(shè)置ADCCON和ADCTSC來進(jìn)行對AD轉(zhuǎn)換的初始化;而后讀取ADCDAT0(ADC數(shù)據(jù)寄存器0)的XPDATA域(普通ADC轉(zhuǎn)換)的值來完成轉(zhuǎn)換。②分離的x/y軸坐標(biāo)轉(zhuǎn)換模式。分離的x/y軸坐標(biāo)轉(zhuǎn)換模式可以分為兩個轉(zhuǎn)換步驟:x軸坐標(biāo)轉(zhuǎn)換和y軸坐標(biāo)轉(zhuǎn)換。x軸坐標(biāo)轉(zhuǎn)換(AUTO_PST=0且XY_PST=1)將x軸坐標(biāo)轉(zhuǎn)換數(shù)值寫入到ADCDAT0寄存器的XPDATA域。轉(zhuǎn)換后,觸摸屏接口將產(chǎn)生中斷源(INT_ADC)到中斷控制器。y軸坐標(biāo)轉(zhuǎn)換(AUTO_PST=0且XY_PST=2)將y軸坐標(biāo)轉(zhuǎn)換數(shù)值寫入到ADCDAT1寄存器的YPDATA域。轉(zhuǎn)換后,觸摸屏接口將產(chǎn)生中斷源(INT_ADC)到中斷控制器。分離x/y軸坐標(biāo)轉(zhuǎn)換模式下的觸摸屏引腳狀況哪表4-132所示。觸摸屏的控制基于S3C2410的硬件結(jié)構(gòu)與接口編程③自動(連續(xù))x/y軸坐標(biāo)轉(zhuǎn)換模式。自動(連續(xù))x/y軸坐標(biāo)轉(zhuǎn)換模式(AUTO_PST=1且XY_PST

=

0)以下面的步驟工作。觸摸屏控制器將自動地切換x軸坐標(biāo)和y軸坐標(biāo)并讀取兩個坐標(biāo)軸方向上的坐標(biāo)。觸摸屏控制器自動將測量得到的x軸數(shù)據(jù)寫入到ADCDAT0寄存器的XPDATA域,然后將測量到的y軸數(shù)據(jù)到ADCDAT1的YPDATA域。自動(連續(xù))轉(zhuǎn)換之后,觸摸屏控制器產(chǎn)生中斷源(INT_ADC)到中斷控制器。自動(連續(xù))x/y位置轉(zhuǎn)換模式下的觸模屏引腳狀況如表4-133所示,其時序圖如圖4-27所示。觸摸屏的控制基于S3C2410的硬件結(jié)構(gòu)與接口編程觸摸屏的控制基于S3C2410的硬件結(jié)構(gòu)與接口編程觸摸屏的控制基于S3C2410的硬件結(jié)構(gòu)與接口編程④等待中斷模式。當(dāng)觸摸屏控制器處于等待中斷模式下時,它實(shí)際上是在等待觸摸筆的點(diǎn)擊。在觸摸筆點(diǎn)擊到觸摸屏上時,控制器產(chǎn)生中斷信號(INC_TC)。中斷產(chǎn)生后,就可以通過設(shè)置適當(dāng)?shù)霓D(zhuǎn)換模式(分離的x/y軸坐標(biāo)轉(zhuǎn)換模式或自動x/y軸坐標(biāo)轉(zhuǎn)換模式)來讀取x和y的位置。等待中斷模式下的觸模屏引腳狀況如表4-134所示。觸摸屏的控制基于S3C2410的硬件結(jié)構(gòu)與接口編程⑤靜態(tài)(Standby)模式。當(dāng)ADCCON寄存器的STDBM位被設(shè)為1時,Standby模式被激活。在該模式下,A/D轉(zhuǎn)換操作停止,ADCDAT0寄存器的XPDATA域和ADCDAT1寄存器的YPDATA(正常ADC)域保持著先前轉(zhuǎn)換所得的值。

觸摸屏的控制基于S3C2410的硬件結(jié)構(gòu)與接口編程S3C2410X中觸摸屏接口的相關(guān)寄存器主要有:A/D采樣控制寄存器ADCCON,ADC轉(zhuǎn)換數(shù)據(jù)寄存器(ADCDAT0),ADC轉(zhuǎn)換數(shù)據(jù)寄存器(ADCDAT1),ADC觸摸屏控制寄存器(ADCTSC),ADC開始延遲寄存器(ADCDLY)。(1)A/D采樣控制寄存器(ADCCON)及其位描述的說明參見表4-77和表4-78。(2)AD

轉(zhuǎn)換結(jié)果數(shù)據(jù)寄存器(ADCDAT0、ADCDAT1)及其位描述參見表

4-79和

表4-80。(3)ADC觸摸屏控制寄存器(ADCTSC)及其位描述如表4-135和表4-136所示。S3C2410X中觸摸屏接口的相關(guān)寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程S3C2410X中觸摸屏接口的相關(guān)寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程S3C2410X中觸摸屏接口的相關(guān)寄存器基于S3C2410的硬件結(jié)構(gòu)與接口編程【例4-10】

觸摸屏測試程序。主程序如下:intmain(void){ARMTargetInit(); //開發(fā)版初始化TchScr_init(); //觸摸屏初始化TchScr_Test(); //觸摸屏測試}

主要的定義及實(shí)現(xiàn)函數(shù):

/*復(fù)用功能管腳定義宏*/#definenYPON0x3#defineYMON0x3#definenXPON0x3#defineXMON0x3/*ACDCON宏*/#defineECFLG_END1 //A/D轉(zhuǎn)換結(jié)束的標(biāo)志#definePRSCEN_Enable1 //A/D轉(zhuǎn)換時鐘使能#definePRSCVL49 //A/D轉(zhuǎn)換時鐘預(yù)標(biāo)定參數(shù)觸摸屏編程實(shí)例基于S3C2410的硬件結(jié)構(gòu)與接口編程#defineSEL_MUX7 //選擇需要進(jìn)行轉(zhuǎn)換的ADC信道(xp)#defineSTDBM_NORMAL0 //正常模式#defineSTDBM_STANDBY1 //閑置模式#defineREAD_START0 //A/D轉(zhuǎn)換由讀數(shù)據(jù)開始.0=禁止由讀操作開始轉(zhuǎn)換#defineENABLE_START0 //A/D由設(shè)置該位啟動A/D轉(zhuǎn)換.0=無操作/*ADC觸摸屏控制寄存器宏*/#defineYM_SEN_Hi_Z0 //YM=Hi-Z,選擇YMON的輸出值0(YM高阻)#defineYM_SEN_GND1 //YM=GND,選擇YMON的輸出值1(YM接地)#defineYP_SEN_External_voltage0 //選擇nYPON的輸出值0,YP=外部電壓#defineYP_SEN_AIN51 //選擇nYPON的輸出值1,連接到AIN5#defineXM_SEN_Hi_Z0 //XM=Hi-Z,選擇YMON的輸出值0(XM高阻)#defineXM_SEN_GND1 //XM=GND,選擇YMON的輸出值1(XM接地)#defineXP_SEN_External_voltage0 //選擇nXPON的輸出值0,XP=外部電壓#definexp_SEN_AIN71 //選擇nXPON的輸出值1,連接到AIN5#definePULL_UP_ENABLE0 //上拉使能#definePULL_UP_DISABLE1 //上拉禁止#defineAUTO_PST_Normal0 //正常ADC轉(zhuǎn)換#defineAUTO_PST_AUTO1 //自動連續(xù)轉(zhuǎn)換x/y軸坐標(biāo)模式#defineXY_PST0 //無操作模式#defineXY_PST_INT0x3 //等待中斷模式/*ADC開始延時寄存器宏*/觸摸屏編程實(shí)例基于S3C2410的硬件結(jié)構(gòu)與接口編程#defineDELAY0xff/*ADC轉(zhuǎn)換結(jié)果數(shù)據(jù)寄存器(ADCDAT0)宏*/#defineUPDOWN_DOWN_00 //選擇中斷等待模式的類型,0=按下產(chǎn)生中斷#defineUPDOWN_UP_01 //選擇中斷等待模式的類型,1=釋放產(chǎn)生中斷#defineAUTO_PST_sequencing_0 //1=自動連續(xù)轉(zhuǎn)換x軸坐標(biāo)和y軸坐標(biāo)

#defineXY_PST_00 //手動測量x軸坐標(biāo)和y軸坐標(biāo),00=無操作模式/*ADC轉(zhuǎn)換結(jié)果數(shù)據(jù)寄存器(ADCDAT0)宏*/#defineUPDOWN_DOWN_10 //選擇中斷等待模式的類型,0=按下產(chǎn)生中斷#defineUPDOWN_UP_11 //選擇中斷等待模式的類型,1=釋放產(chǎn)生中斷#defineAUTO_PST_sequencing_11 //1=自動連續(xù)轉(zhuǎn)換x軸坐標(biāo)和y軸坐標(biāo)#defineXY_PST_10 //手動測量x軸坐標(biāo)和y軸坐標(biāo),00=無操作模式#defineLCDWIDTH320 //觸摸屏寬度#defineLCDHEIGHT240 //觸摸屏高度觸摸屏編程實(shí)例基于S3C2410的硬件結(jié)構(gòu)與接口編程intTchScr_Xmin=145,TchScr_Xmax=902,TchScr_Ymin=142,TchScr_Ymax=902;voidTchScr_init(){/*復(fù)用管腳功能定義*/rGPGCON&=~((0x03<<30)|(0x03<<28)|(0x03<<26)|(0x03<<24));rGPGCON|=(nYPON<<30)|(YMON<<28)|(nXPON<<26)|(XMON<<24);/*setACDCON*/rADCCON=(PRSCEN_Enable<<14)|(PRSCVL<<6)|(SEL_MUX<<3);/*ADC開始延時寄存器*/rADCDLY=0xff;/*設(shè)置ADC觸摸屏控制寄存器*/rADCTSC=(0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);}

#defineCLOCK_DELAY()do{inti;for(i=0;i<20;i++);}while(0)voidTchScr_GetScrXY(int*x,int*y){//得到觸摸點(diǎn)坐標(biāo)intoldx,oldy;rADCTSC|=(1<<3)|(1<<2)|(0);rADCCON|=1;//CLOCK_DELAY();while(!(SUBSRCPND&(1<<10)));oldx=rADCDAT0&0x3ff;oldy=rADCDAT1&0x3ff;if(oldx!=0){觸摸屏編程實(shí)例基于S3C2410的硬件結(jié)構(gòu)與接口編程*x=oldx;*y=oldy;}rADCTSC=(0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);SUBSRCPND|=(1<<9);SUBSRCPND|=(1<<10);}

U32TchScr_GetOSXY(int*x,int*y){//獲得觸摸點(diǎn)坐標(biāo)并返回觸摸動作staticU32mode=0;staticintoldx,oldy;inti,j;for(;;){if((mode!=TCHSCR_ACTION_DOWN)&&(mode!=TCHSCR_ACTION_MOVE)){if(!(rADCDAT0&(1<<15))){ //有觸摸動作TchScr_GetScrXY(x,y); //得到觸摸點(diǎn)坐標(biāo)oldx=*x;oldy=*y;for(i=0;i<40;i++){if(rADCDAT0&(1<<15)){ //抬起break;}觸摸屏編程實(shí)例基于S3C2410的硬件結(jié)構(gòu)與接口編程hudelay(20);}if(i<40){//在規(guī)定的雙擊時間之內(nèi)抬起,檢測是不是及時按下for(i=0;i<60;i++){if(!(rADCDAT0&(1<<15))){SUBSRCPND|=(1<<9);if(i<10){i=60;break;}//如果單擊后很短時間內(nèi)按下,不視為雙擊

mode=TCHSCR_ACTION_DBCLICK;for(j=0;j<40;j++)hudelay(50);//檢測到雙擊后延時,防止拖尾break;}hudelay(20);}if(i==60) //沒有在規(guī)定的時間內(nèi)按下,視為單擊mode=TCHSCR_ACTION_CLICK;}else{ //沒有在規(guī)定的時間內(nèi)抬起,視為按下mode=TCHSCR_ACTION_DOWN;}break;}}else{TchScr_GetScrXY(x,y); //得到觸摸點(diǎn)坐標(biāo)if(rADCDAT0&(1<<15)){ //抬起mode=TCHSCR_ACTION_UP;break;}觸摸屏編程實(shí)例基于S3C2410的硬件結(jié)構(gòu)與接口編程

else{if(ABS(oldx-*x)>25||ABS(oldy-*y)>25){//有移動動作mode=TCHSCR_ACTION_MOVE;break;}}}hudelay(10);}oldx=*x;oldy=*y;returnmode;}

voidTchScr_Test(){U32mode;intx,y;Uart_Printf(0,"\npleasetouchthescreen\n");for(;;){mode=TchScr_GetOSXY(&x,&y);switch(mode){caseTCHSCR_ACTION_CLICK:Uart_Printf(0,"Action=click:x=%d,\ty=%d\n",x,y);觸摸屏編程實(shí)例基于S3C2410的硬件結(jié)構(gòu)與接口編程break;caseTCHSCR_ACTION_DBCLICK:Uart_Printf(0,"Action=doubleclick:x=%d,\ty=%d\n",x,y);break;caseTCHSCR_ACTION_DOWN:Uart_Printf(0,"Action=down:x=%d,\ty=%d\n",x,y);break;caseTCHSCR_ACTION_UP:Uart_Printf(0,"Action=up:x=%d,\ty=%d\n",x,y);break;caseTCHSCR_ACTION_MOVE:Uart_Printf(0,"Action=move:x=%d,\ty=%d\n",x,y);break;}hudelay(1000);}}觸摸屏編程實(shí)例基于S3C2410的硬件結(jié)構(gòu)與接口編程LED接口的特點(diǎn)如下?!馡2C串行接口提供鍵盤中斷信號方便與處理器接口;●可驅(qū)動8位共陰數(shù)碼管或64只獨(dú)立LED和64個按鍵;●可控掃描位數(shù)可控任一數(shù)碼管閃爍;●提供數(shù)據(jù)譯碼和循環(huán)移位段尋址等控制;●8個功能鍵可檢測任一鍵的連擊次數(shù);●無須外接元件即直接驅(qū)動LED,可擴(kuò)展驅(qū)動電流和驅(qū)動電壓;●提供工業(yè)級器件多種封裝形式PDIP24、SO24。鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程1.鍵盤及顯示處理說明(1)鍵盤部ZLG7290可采樣64個按鍵或傳感器可檢測每個按鍵的連擊次數(shù),其基本功能如下?!矜I盤去抖動處理:當(dāng)鍵被按下和放開時,可能會出現(xiàn)電平狀態(tài)反復(fù)變化,稱做鍵盤抖動。若不作處理會引起按鍵盤命令錯誤,所以要進(jìn)行去抖動處理,以讀取穩(wěn)定的鍵盤狀態(tài)為準(zhǔn)?!耠p鍵互鎖處理:當(dāng)有兩個以上按鍵被同時按下時,ZLG7290只采樣優(yōu)先級高的按鍵。優(yōu)先順序?yàn)镵1>K2>…>K64,如同時按下K2和K18時采樣到K2。●連擊鍵處理:當(dāng)某個按鍵按下時,輸出一次鍵值后,如果該按鍵還未釋放,該鍵值連續(xù)有效,就像連續(xù)壓按該鍵一樣,這種功能稱為連擊。連擊次數(shù)計(jì)數(shù)器RepeatCnt可區(qū)別出單擊(某些功能不允許連擊,如開/關(guān))或連擊。判斷連擊次數(shù)可以檢測被按時間,以防止某些功能誤操作(如連續(xù)按5s進(jìn)入?yún)?shù)設(shè)置狀態(tài))?!窆δ苕I處理:功能鍵能實(shí)現(xiàn)2個以上按鍵同時按下來擴(kuò)展按鍵數(shù)目或?qū)崿F(xiàn)特殊功能,如PC上的“Shift”鍵、“Ctrl”鍵、“Alt”鍵。鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程(2)顯示部分:在每個顯示刷新周期,ZLG7290按照掃描位數(shù)寄存器ScanNum指定的顯示位數(shù)N,把顯示緩存DpRam0~DpRamN的內(nèi)容按先后循序送入LED驅(qū)動器實(shí)現(xiàn)動態(tài)顯示,減少N值可提高每位顯示掃描時間的占空比,以提高LED亮度,顯示緩存中的內(nèi)容不受影響。修改閃爍控制寄器FlashOnOff可改變閃爍頻率和占空比(亮和滅的時間)。ZLG7290提供兩種控制方式:寄存器映像控制和命令解釋控制,如上述對顯示部分的控制。寄存器映像控制是指直接訪問底層寄存器,實(shí)現(xiàn)基本控制功能,這些寄存器須字節(jié)操作。命令解釋控制是指通過解釋命令緩沖區(qū)(CmdBuf0~CmdBuf1)中的指令,間接訪問底層寄存器實(shí)現(xiàn)擴(kuò)展控制功能。例如,實(shí)現(xiàn)寄存器的位操作:對顯示緩存循環(huán),移位;對操作數(shù)譯碼等操作。鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程2.寄存器詳解(1)系統(tǒng)狀態(tài)部分系統(tǒng)寄存器(SystemReg):地址00H,復(fù)位值11110000B,系統(tǒng)寄存器保存ZLG7290系統(tǒng)狀態(tài),并可對系統(tǒng)運(yùn)行狀態(tài)進(jìn)行配置,其功能分位描述如下。KeyAvi(SystemReg.0):置1時表示有效的按鍵動作(普通鍵的單擊、連擊和功能鍵狀態(tài)變化),/INT引腳信號有效(變?yōu)榈碗娖剑?;?表示無按鍵動作,/INT引腳信號無效(變?yōu)楦咦钁B(tài))。有效的按鍵動作消失后或讀Key后,KeyAvi位自動清0。(2)鍵盤部分●鍵值寄存器(Key):地址01H,復(fù)位值00H。Key表示被壓按鍵的鍵值,當(dāng)Key=0時,表示沒有鍵被壓按?!襁B擊次數(shù)計(jì)數(shù)器(RepeatCnt):地址02H,復(fù)位值00H。RepeatCnt=0時,表示單擊鍵。RepeatCnt大于0時,表示鍵的連擊次數(shù)。該計(jì)數(shù)器用于區(qū)別出單擊鍵或連擊,鍵判斷連擊次數(shù)可以檢測被按時間?!窆δ苕I寄存器(FunctionKey):地址03H,復(fù)位值0FFH。FunctionKey對應(yīng)位的值為0表示對應(yīng)功能鍵被壓按(FunctionKey7~FunctionKey0對應(yīng)K64~K57)。鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程(3)命令接口部分命令緩沖區(qū)(CmdBuf0~CmdBuf1):地址07H~08H,復(fù)位值00H~00H。用于傳輸指令。(4)顯示部分●閃爍控制寄存器(FlashOnOff):地址0CH,復(fù)位值0111B/0111B。高4位表示閃爍時亮的時間,低4位表示閃爍時滅的時間,改變其值同時也改變了閃爍頻率,也能改變亮和滅的占空比。FlashOnOff的1個單位相當(dāng)于150~250ms(亮和滅的時間范圍為1~160000B相當(dāng)1個時間單位),所有像素的閃爍頻率和占空比相同?!駫呙栉粩?shù)寄存器(ScanNum):地址0DH,復(fù)位值7。用于控制最大的掃描顯示位數(shù)(有效范圍為0~7,對應(yīng)的顯示位數(shù)為1~8),減少掃描位數(shù)可提高每位顯示掃描時間的占空比,以提高LED亮度。不掃描顯示的顯示緩存寄存器則保持不變,如ScanNum=3時只顯示DpRam0~DpRam3的內(nèi)容?!耧@示緩存寄存器(DpRam0~DpRam7):地址10H~17H,復(fù)位值00H~00H。緩存中一位置1表示該像素亮,DpRam7~DpRam0的顯示內(nèi)容對應(yīng)Dig7~Dig0引腳。鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程3.指令詳解一個有效的指令由一字節(jié)操作碼和數(shù)個操作數(shù)組成,只有操作碼的指令稱為純指令,帶操作數(shù)的指令稱為復(fù)合指令。一個完整的指令須在一個I2C幀中(起始信號和結(jié)束信號間)連續(xù)傳輸?shù)矫睿–mdBuf0~CmdBuf1)中,否則會引起錯誤。(1)純指令●左移指令(參見表4-140)鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程鍵盤及LED的接口原理的內(nèi)容影響。S6~S0

為像素地址,有效范圍從

00H~3FH,無效的地址不會產(chǎn)生任何

作用。像素位地址映像如表4-146所示?;赟3C2410的硬件結(jié)構(gòu)與接口編程鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程鍵盤及LED的接口原理基于S3C2410的硬件結(jié)構(gòu)與接口編程鍵盤及LED的接口原理4.通信接口ZLG7290的I2C接口傳輸速率可達(dá)32kbit/s,容易與處理器接口,可提供鍵盤中斷信號,提高主處理器的時間效率。ZLG7290的從地址(slaveaddress)為70H(01110000B)。有效的按鍵動作(普通鍵的單擊、連擊和功能鍵狀態(tài)變化),都會令系統(tǒng)寄存器SystemReg的KeyAvi位置1,/INT引腳信號有效(變?yōu)榈碗娖剑?,用戶的鍵盤處理程序可由/INT引腳低電平中斷觸發(fā),以提高程序效率;也可以不采樣/INT引腳信號節(jié)省系統(tǒng)的I/O數(shù),而輪詢系統(tǒng)寄存器的KeyAvi位。要注意讀鍵值寄存器會令KeyAvi位清0,并會令/INT引腳信號無效。為確保某個有效的按鍵動作所有參數(shù)寄存器的同步性,建議利用I2C通信的自動增址功能,連續(xù)讀RepeatCntFunctionKey和Key寄存器。但用戶無須擔(dān)心寄存器的同步性問題,因?yàn)殒I參數(shù)寄存器變化速度較緩慢(典型為250ms,最快

為9ms)。ZLG7290內(nèi)可通過I2C總線訪問的寄存器地址范圍為00H~17H。任一寄存器都可按字節(jié)直接讀寫,也可以通過命令接口間接讀寫或按位讀寫。支持自動增址功能(訪問一寄存器后,寄存器子地址自動加一)和地址翻轉(zhuǎn)功能(訪問最后一寄存器(子地址為17H)后,寄存器子地址翻轉(zhuǎn)為00H)。ZLG7290的控制和狀態(tài)查詢?nèi)慷际峭ㄟ^讀/寫寄存器實(shí)現(xiàn)的。關(guān)于I2C總線訪問的細(xì)節(jié)請參考I2C總線規(guī)范?;赟3C2410的硬件結(jié)構(gòu)與接口編程I2C總線簡介(1)I2C總線的信號線I2C總線由兩根信號線組成,一根是串行數(shù)據(jù)線SDA,另一根是串行時鐘線SCL。一般具有I2C總線的器件其SDA和SCL引腳都是漏極開路(或集電極開路)輸出結(jié)構(gòu)。因此,實(shí)際使用時,SDA和SCL信號線都必須要加上拉電阻(Rp,Pull-UpResistor)。上拉電阻一般取值3~10kΩ。開漏結(jié)構(gòu)的好處是:當(dāng)總線空閑時,這兩條信號線都保持高電平,幾乎不消耗電流;電氣兼容性好,上拉電阻接5V電源就能與5V邏輯器件接口,上拉電阻接3V電源又能與3V邏輯器件接口;因?yàn)槭情_漏結(jié)構(gòu),所以不同器件的SDA與SDA之間、SCL與SCL之間可以直接相連,不需要額外的轉(zhuǎn)換電路。I2C總線信號連接示意圖如圖4-30所示?;赟3C2410的硬件結(jié)構(gòu)與接口編程I2C總線簡介基于S3C2410的硬件結(jié)構(gòu)與接口編程I2C總線簡介(2)I2C總線基本概念●發(fā)送器(Transmitter):發(fā)送數(shù)據(jù)到總線的器件?!窠邮掌鳎≧eceiver):從總線接收數(shù)據(jù)的器件?!裰髟O(shè)備(Master):初始化發(fā)送、產(chǎn)生時鐘信號和終止發(fā)送的器件。●從設(shè)備(Slave):被主設(shè)備尋址的器件。I2C總線是雙向傳輸?shù)目偩€,因此主設(shè)備和從設(shè)備都可能成為發(fā)送器和接收器。如果主設(shè)備向從設(shè)備發(fā)送數(shù)據(jù),則主設(shè)備是發(fā)送器,而從設(shè)備是接收器;如果主設(shè)備從從設(shè)備讀取數(shù)據(jù),則主設(shè)備是接收器,而從設(shè)備是發(fā)送器。(3)I2C總線數(shù)據(jù)傳輸速率I2C總線的數(shù)據(jù)傳輸速率受主設(shè)備控制,能快能慢。但是最高速率是有限制的,I2C總線上數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式(Standard-mode)下最高可達(dá)100kbit/s。(4)I2C總線上數(shù)據(jù)的有效性數(shù)據(jù)線SDA的電平狀態(tài)必須在時鐘線SCL處于高電平期間保持穩(wěn)定不變。SDA的電平狀態(tài)只有在SCL處于低電平期間才允許改變。但是在I2C總線的起始和結(jié)束時例外。某些其他的串行總線協(xié)議可能規(guī)定數(shù)據(jù)在時鐘信號的邊沿(上升沿或下降沿)有效,而I2C總線則是電平有效。I2C總線上數(shù)據(jù)有效性(Datavalidity)示意圖如圖4-31所示。基

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論