第5章 嵌入式系統(tǒng)輸入輸出設(shè)備接口課件_第1頁(yè)
第5章 嵌入式系統(tǒng)輸入輸出設(shè)備接口課件_第2頁(yè)
第5章 嵌入式系統(tǒng)輸入輸出設(shè)備接口課件_第3頁(yè)
第5章 嵌入式系統(tǒng)輸入輸出設(shè)備接口課件_第4頁(yè)
第5章 嵌入式系統(tǒng)輸入輸出設(shè)備接口課件_第5頁(yè)
已閱讀5頁(yè),還剩159頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式系統(tǒng)設(shè)計(jì)

—基于ARM9微處理器S3C2410A

第5章嵌入式系統(tǒng)輸入/輸出設(shè)備接口

5.1.1GPIO原理與結(jié)構(gòu)GPIO(GeneralPurposeI/O,通用輸入/輸出接口)也稱為并行I/O(parallelI/O),是最基本的I/O形式,由一組輸入引腳、輸出引腳或輸入/輸出引腳組成,CPU對(duì)它們能夠進(jìn)行存取操作。有些GPIO引腳能夠通過(guò)軟件編程改變輸入/輸出方向。I/O的應(yīng)用是處理器的基礎(chǔ)應(yīng)用。5.1GPIO(通用輸入/輸出接口)GPIO的應(yīng)用通用I/O口(接口,引腳);驅(qū)動(dòng)LED或其他指示器;控制片外器件;檢測(cè)數(shù)字輸入,如鍵盤(pán)或開(kāi)關(guān)信號(hào);檢測(cè)數(shù)字輸入,如鍵盤(pán)或開(kāi)關(guān)信號(hào)驅(qū)動(dòng)LED或其它指示器控制片外器件5.1.2S3C2410A的I/O口配置

S3C2410A共有117個(gè)多功能復(fù)用輸入/輸出端口(I/O口),分為端口A~H,共8組。

為了滿足不同系統(tǒng)設(shè)計(jì)的需要,每個(gè)I/O口可以很容易地通過(guò)軟件進(jìn)行配置。每個(gè)引腳的功能必須在啟動(dòng)主程序之前進(jìn)行定義。如果一個(gè)引腳沒(méi)有使用復(fù)用功能,那么它可以配置為I/O口。注意:端口A除了作為功能口外,只能夠作為輸出口使用。引腳示例如GPE端口共有16個(gè)GPIO引腳,功能如下;這些端口都具有多功能,通過(guò)引腳配置寄存器,可以將其設(shè)置為所需要的功能,如:I/O功能、中斷功能等等。5.1.3S3C2410A的I/O口寄存器引腳GPIO與控制寄存器的關(guān)系GPxCONGPxUP10GPxDATGPxDATGPIO相關(guān)寄存器描述GPxCONGPxUP10GPxDATGPxDATx=A、B、C、D、E、F、G、HGPIO相關(guān)寄存器描述——GPxCONGPxCONGPxUP10GPxDATGPxDATGPIO相關(guān)寄存器描述——GPxDATGPxCONGPxUP10GPxDATGPxDAT當(dāng)I/O設(shè)置為GPIO輸出模式(Output模式)時(shí),寫(xiě)GPxDAT控制相應(yīng)I/O口輸出高電平或低電平。

注:GPxDAT為1的位對(duì)應(yīng)I/O輸出高電平,為0的位對(duì)應(yīng)低電平;當(dāng)I/O設(shè)置為GPIO輸入模式(Input模式)時(shí),讀取GPxDAT寄存器即取得I/O口線上的電平狀態(tài)。GPIO相關(guān)寄存器描述——GPxUPGPxCONGPxUP10GPxDATGPxDATMISCCR:多控制寄存器。該寄存器有多個(gè)功能,可以用來(lái)對(duì)USB主機(jī)和USB設(shè)備進(jìn)行控制。DCLKCON:DCLK控制寄存器。該寄存器是可讀/寫(xiě)的,主要用于外部時(shí)鐘DCLK0、DCLK1進(jìn)行控制;通過(guò)該寄存器可以定義DCLKn信號(hào)的頻率和占空比。GSTATUSn:通用狀態(tài)寄存器,共有5個(gè),用來(lái)存放芯片的一些信息,如芯片的ID、電池狀態(tài)等。EXTINTn:外部中斷控制器。該類寄存器共有3個(gè),用于對(duì)24個(gè)外部中斷請(qǐng)求信號(hào)的有效方式進(jìn)行選擇EINTELTn:外部中斷過(guò)濾器。該類寄存器共有4個(gè),這些寄存器主用用來(lái)對(duì)外部中斷請(qǐng)求信號(hào)濾波器的時(shí)鐘、寬度進(jìn)行設(shè)置。EINTMASK:外部中斷屏蔽寄存器用來(lái)對(duì)外部中斷進(jìn)行屏蔽,相應(yīng)位為1表示屏蔽,為0表示不屏蔽。EINTPEND:外部中斷懸掛寄存器用來(lái)作為外部中斷未決位。5.1.4S3C2410A輸入/輸出端口編程實(shí)例

在S3C2410A中,大多數(shù)的引腳端都是復(fù)用的,所以對(duì)于每一個(gè)引腳端都需要定義其功能。為了使用I/O口,首先需要定義引腳的功能。

與配置I/O口相關(guān)的寄存器包括:端口控制寄存器(GPACON~GPHCON)、端口數(shù)據(jù)寄存器(GPADAT~GPHDAT)、端口上拉寄存器(GPBUP~GPHUP)、雜項(xiàng)控制寄存器以及外部中斷控制寄存器(EXTINTN)等。S3C2410A的I/O口配置情況請(qǐng)參考S3C2410A數(shù)據(jù)手冊(cè)。#definerGPACON(*(volatileunsigned*)0x56000000)//PortA控制寄存器#definerGPADAT(*(volati1eunsigned*)0x56000004)//PortA數(shù)據(jù)寄存器#definerGPBCON(*(volatileunsigned*)0x56000010)//PortB控制寄存器#definerGPBDAT(*(volatileunsigned*)0x56000014)//PortB數(shù)據(jù)寄存器#definerGPBUP(*(volatileunsigned*)0x56000018)//PortB上拉電阻禁止寄存器#definerGPCCON(*(volatileunsigned*)0x56000020)//PortC控制寄存器#definerGPCDAT(*(volatileunsigned*)0x56000024)//PortC數(shù)據(jù)寄存器#definerGPCUP(*(volatileunsigned*)0x56000028)//PortC上拉電阻禁止寄存器#definerGPDCON(*(volatileunsigned*)0x56000030)//PortD控制寄存器#definerGPDDAT(*(volatileunsigned*)0x56000034)//PortD數(shù)據(jù)寄存器#definerGPDUP(*(volatileunsigned*)0x56000038)//PortD上拉電阻禁止寄存器對(duì)I/O口的操作是通過(guò)對(duì)相關(guān)各個(gè)寄存器的讀/寫(xiě)實(shí)現(xiàn)的。要對(duì)寄存器進(jìn)行讀/寫(xiě)操作,首先要對(duì)寄存器進(jìn)行定義。有關(guān)I/O口相關(guān)寄存器的宏定義代碼如下:一般寫(xiě)成:#include“S3C2410.h”

寫(xiě)一個(gè)通過(guò)G口的控制發(fā)光二極管LED1和LED2輪流閃爍I/O口編程實(shí)例,電路如下所示:例1:#definerGPGCON(*(volati1eunsigned*)0x56000060)#definerGPGDAT(*(volatileunsigned*)0x56000064)#definerGPGUP(*(volatileunsigned*)0x56000068)//端口G的GPG8控制LED1的亮滅,低電平時(shí)為亮#defineled1light() #defineled1clear() //端口G的GPG9控制LED2的亮滅,低電平時(shí)為亮#defineled2light()

#defineled2clear() {rGPGDAT&=0xfeff;}{rGPGDAT|=0x0100;}{rGPGDAT&=0xfdff;}{rGPGDAT|=0x0200;}voidmain(){ inti; rGPGCON|=0x00050000;//配置第8位、第9位為輸出引腳 led1clear(); led2clear(); while(1)

{ led1light();led2clear(); for(i=0;i<10000000;i++);//延時(shí) led1clear(); led2light();

for(i=0;i<10000000;i++);//延時(shí) }}使用端口E作為普通I/O接口,端口E的GPE3位輸出控制一個(gè)LED指示燈,GPE4位輸出控制一個(gè)蜂鳴器。根據(jù)電路圖用C語(yǔ)言實(shí)現(xiàn)其功能。例2:#include“2410addr.h”//GPE4用作蜂鳴器輸出,高電平為鳴叫#definebeepon() {rGPEDAT=rGPEDAT|0x0010;}#definebeepoff() {rGPEDAT=rGPEDAT&0xffef;}//GPE3用作LED輸出控制端,宏定義LED亮滅,低電平為亮#defineledlight() {rGPEDAT=rGPEDAT&0xfff7;}#defineledclear() {rGPEDAT=rGPEDAT|0x0008;}voidmain(){rGPECON=rGPECON|0x00000140;//初始化端口E,使GPE4、GPE3為輸出beepoff(); //關(guān)蜂鳴器 while () {ledlight(); //LED指示燈亮 beepon(); //蜂鳴器發(fā)聲 Delay(3000); //延時(shí) beepoff(); //關(guān)蜂鳴器 ledclear(); //LED指示燈滅 }}例3:使用端口F、H作為普通I/O接口,端口E的GPF4位輸入控制一個(gè)按鍵,GPH10位輸出控制一個(gè)蜂鳴器。根據(jù)電路圖用C語(yǔ)言實(shí)現(xiàn)其功能。#include“2410addr.h”//定義獨(dú)立按鍵KEY1的輸入口#defineKEY_CON (1<<4)/*GPF4口*///定義蜂鳴器控制口#define BEEP (1<<10) /*GPH10口*/#define BEEP_MASK (~BEEP)intmain(void){ //初始化I/OrGPFCON=(rGPFCON&(~(0x03<<8)));//rGPFCON[9:8]=00b,設(shè)置GPF4為GPIO輸入模式rGPHCON=(rGPHCON&(~(0x03<<20)))|(0x01<<20);//rGPHCON[21:20]=01b,設(shè)置GPH10為GPIO輸出模式 while(1){if(rGPFDAT&KEY_CON)//讀取GPF口線上的電平,判斷GPF4是否為高電平{rGPHDAT=rGPHDAT|BEEP;//GPF4為高電平,則設(shè)置GPH10=1}else{rGPHDAT=rGPHDAT&BEEP_MASK;//GPF4為低電平,則設(shè)置GPH10=0}DelayNS(1);} return(0);}29A/D轉(zhuǎn)換基礎(chǔ)A/D轉(zhuǎn)換又稱模數(shù)轉(zhuǎn)換,顧名思義,就是把模擬信號(hào)數(shù)字化。完成一個(gè)或多個(gè)模擬信號(hào)到數(shù)字信號(hào)的轉(zhuǎn)換。A/D轉(zhuǎn)換的一般步驟5.2A/D轉(zhuǎn)換器接口30

A/D轉(zhuǎn)換的技術(shù)指標(biāo)1、分辨率(Resolution)數(shù)字量變化一個(gè)最小量時(shí)模擬信號(hào)的變化量,1/2n2、轉(zhuǎn)換速率(ConversionRate)完成一次從模擬轉(zhuǎn)換到數(shù)字的A/D轉(zhuǎn)換所需的時(shí)間的倒數(shù)3、量化誤差(Quantizing

Error)由于A/D的有限分辨率而引起的誤差(1LSB或1/2LSB)4、偏移誤差(Offset

Error)輸入信號(hào)為零時(shí)輸出信號(hào)不為零的值5、滿刻度誤差(Full

Scale

Error)滿度輸出時(shí)對(duì)應(yīng)的輸入信號(hào)與理想輸入信號(hào)值之差6、線性度(Linearity)實(shí)際轉(zhuǎn)換器的轉(zhuǎn)移函數(shù)與理想直線的最大偏移31

A/D轉(zhuǎn)換器類型1、積分型A/D轉(zhuǎn)換器2、逐次逼近型A/D3、并行比較/串行比較型A/D4、電容陣列逐次比較型5、壓頻變換型32

A/D轉(zhuǎn)換的一般步驟A/D轉(zhuǎn)換過(guò)程是通過(guò)取樣、保持、量化和編碼這四個(gè)步驟完成的。取樣和保持主要由采樣保持器來(lái)完成量化編碼就由A/D轉(zhuǎn)換器完成5.2.1S3C2410A的A/D轉(zhuǎn)換器1.S3C2410AA/D轉(zhuǎn)換器和觸摸屏接口電路S3C2410A包含一個(gè)8通道的A/D轉(zhuǎn)換器,內(nèi)部結(jié)構(gòu)見(jiàn)圖5.2.4,該電路可以將模擬輸入信號(hào)轉(zhuǎn)換成10位數(shù)字編碼(10位分辨率),差分線性誤差為1.0LSB,積分線性誤差為2.0LSB。在A/D轉(zhuǎn)換時(shí)鐘頻率為2.5MHz時(shí),其最大轉(zhuǎn)換率為500KSPS(千采樣點(diǎn)每秒),輸入電壓范圍是0~3.3V。A/D轉(zhuǎn)換器支持片上操作、采樣保持功能和掉電模式。S3C2410A的A/D轉(zhuǎn)換器和觸摸屏接口電路如圖5.2.1所示。圖5.2.1S3C2410A的A/D轉(zhuǎn)換器和觸摸屏接口電路

2.與S3C2410AA/D轉(zhuǎn)換器相關(guān)的寄存器使用S3C2410A的A/D轉(zhuǎn)換器進(jìn)行模擬信號(hào)到數(shù)字信號(hào)的轉(zhuǎn)換,需要配置以下相關(guān)的寄存器。(1)ADC控制寄存器(ADCCON)ADC控制寄存器(ADCCON)是一個(gè)16位的可讀/寫(xiě)的寄存器,地址為0x58000000,復(fù)位值為0x3FC4。ADCCON位的功能描述如表5.2.1所列。表5.2.1ADC控制寄存器(ADCCON)的位功能

(2)ADC觸摸屏控制寄存器(ADCTSC)ADC觸摸屏控制寄存器(ADCTSC)是一個(gè)可讀/寫(xiě)的寄存器,地址為0x58000004,復(fù)位值為0x058。ADCTSC的位功能描述如表5.2.2所列。在正常A/D轉(zhuǎn)換時(shí),AUTO_PST和XY_PST都置成0即可,其他各位與觸摸屏有關(guān),不需要進(jìn)行設(shè)置。表5.2.2ADC控制寄存器(ADCTSC)的位功能

(3)ADC轉(zhuǎn)換數(shù)據(jù)寄存器(ADCDAT0和ADCDAT1)

S3C2410A有ADCDAT0和ADCDAT1兩個(gè)ADC轉(zhuǎn)換數(shù)據(jù)寄存器。ADCDAT0和ADCDAT1為只讀寄存器,地址分別為0x5800000C和0x58000010。在觸摸屏應(yīng)用中,分別使用ADCDAT0和ADCDAT1保存X位置和Y位置的轉(zhuǎn)換數(shù)據(jù)。對(duì)于正常的A/D轉(zhuǎn)換,使用ADCDAT0來(lái)保存轉(zhuǎn)換后的數(shù)據(jù)。ADCDAT0的位功能描述如表5.2.3所列,ADCDAT1的位功能描述如表5.2.5所列,除了位[9:0]為Y位置的轉(zhuǎn)換數(shù)據(jù)值以外,其他與ADCDAT0類似。通過(guò)讀取該寄存器的位[9:0],可以獲得轉(zhuǎn)換后的數(shù)字量。表5.2.3ADCDAT0的位功能

ADC的使用分四個(gè)步驟:設(shè)置ADCCON寄存器,選擇輸入信號(hào)通道,設(shè)置A/D轉(zhuǎn)換器的時(shí)鐘。使能A/D轉(zhuǎn)換器的預(yù)分頻功能。計(jì)算A/D時(shí)鐘的公式:A/D時(shí)鐘頻率=PLCK/(預(yù)分頻值(PRSCVL)+1)。2)設(shè)置ADCTSC寄存器,使用設(shè)為普通轉(zhuǎn)換模式,這里不能使用觸摸屏功能。ADCTSC寄存器多用于觸摸屏,對(duì)于普通的ADC,使用默認(rèn)值即可。3)設(shè)置ADCCON寄存器,啟動(dòng)A/D轉(zhuǎn)換。如果設(shè)置READ_START位,則讀取轉(zhuǎn)換數(shù)據(jù)(讀ADCDAT0寄存器)時(shí)即啟動(dòng)下一次轉(zhuǎn)換;否則,就通過(guò)設(shè)置ENABLE_START位來(lái)啟動(dòng)A/D。4)轉(zhuǎn)換結(jié)束時(shí),讀取ADCDAT0寄存器來(lái)獲取數(shù)值。如果使用查詢方式,則可以不讀取ADCCON寄存器的ECFLG位(b15)來(lái)確定轉(zhuǎn)換是否結(jié)束;否則可以使用INT_ADC中斷,發(fā)生INT_ADC中斷時(shí)表示轉(zhuǎn)換結(jié)束。5.2.3S3C2410AA/D接口編程實(shí)例下面介紹一個(gè)A/D接口編程實(shí)例,其功能實(shí)現(xiàn)從A/D轉(zhuǎn)換器的通道0獲取模擬數(shù)據(jù),并將轉(zhuǎn)換后的數(shù)字量以波形的形式在LCD上顯示。模擬輸入信號(hào)的電壓范圍是0~2.5V。程序如下:1.定義與A/D轉(zhuǎn)換相關(guān)的寄存器#definerADCCON(*(volatileunsigned*)0x58000000)

//ADC控制寄存器#definerADCTSC(*(volatileunsigned*)0x58000004)

//ADC觸摸屏控制寄存器#definerADCDLY(*(volatileunsigned*)0x58000008)

//ADC啟動(dòng)延時(shí)寄存器#definerADCDAT0(*(volatileunsigned*)0x5800000c)

//ADC轉(zhuǎn)換數(shù)據(jù)寄存器0#definerADCDAT1(*(volati1eunsigned*)0x58000010)

//ADC轉(zhuǎn)換數(shù)據(jù)寄存器

2.對(duì)A/D轉(zhuǎn)換器進(jìn)行初始化程序中的參數(shù)ch表示所選擇的通道號(hào),程序如下:voidAD_Init(unsignedcharch){rADCDLY=100;//ADC啟動(dòng)延時(shí)rADCTSC=0;//選擇ADC模式rADCCON=(1<<14)|(49<<6)|(ch<<3)|(0<<2)|(0<<1)|(0);//設(shè)置ADC控制寄存器}3.獲取A/D的轉(zhuǎn)換值程序中的參數(shù)ch表示所選擇的通道號(hào),程序如下:intGet_AD(unsignedcharch){inti;intval=0;if(ch>7)return0;//通道不能大于7for(i=0;i<16;i++)//為轉(zhuǎn)換準(zhǔn)確,轉(zhuǎn)換16次{rADCCON|=0x1;//啟動(dòng)A/D轉(zhuǎn)換rADCCON=rADCCON&0xffc7|(ch<<3);while(rADCCON&0x1);//避免第一個(gè)標(biāo)志出錯(cuò)while(!(rADCCON&0x8000));//避免第二個(gè)標(biāo)志出錯(cuò)val+=(rADCDAT0&0x03ff);Delay(10);}return(val>>4);//為轉(zhuǎn)換準(zhǔn)確,除以16取均值}4.主函數(shù)實(shí)現(xiàn)將轉(zhuǎn)換后的數(shù)據(jù)在LCD上以波形的方式顯示,程序如下5.3.1D/A(數(shù)/模)轉(zhuǎn)換器的工作原理將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào)的過(guò)程稱為數(shù)/模轉(zhuǎn)換。能夠完成這種轉(zhuǎn)換的電路叫做數(shù)/模轉(zhuǎn)換器,簡(jiǎn)稱為D/A轉(zhuǎn)換器,簡(jiǎn)記為DAC(DigitaltoAnalogConverter)。D/A轉(zhuǎn)換器將輸入的數(shù)字量轉(zhuǎn)換為模擬量輸出,數(shù)字量是由若干數(shù)位構(gòu)成的,D/A轉(zhuǎn)換器把一個(gè)數(shù)字量變?yōu)槟M量,就是把每一位上的代碼按照權(quán)值轉(zhuǎn)換為對(duì)應(yīng)的模擬量,再把各位所對(duì)應(yīng)的模擬量相加,所得到各位模擬量的和便是數(shù)字量所對(duì)應(yīng)的模擬量。5.3D/A轉(zhuǎn)換器接口

5.3.2S3C2410A與D/A轉(zhuǎn)換器的接口電路1.MAX5380與S3C2410A的連接電路MAX5380是電壓輸出型的8位D/A轉(zhuǎn)換芯片,使用I2C串行接口,轉(zhuǎn)換速率高達(dá)400kHz,其輸入數(shù)字信號(hào)和輸出模擬信號(hào)的對(duì)應(yīng)關(guān)系如表5.3.1所列。MAX5380與S3C2410A的連接電路如圖5.3.1所示。表5.3.1MAX5380數(shù)字輸入與模擬輸出對(duì)照表圖5.3.1MAX5380與S3C2410A的連接電路圖5.3.1中,MAX5380的時(shí)鐘SCL和數(shù)據(jù)輸入SDA連接到S3C2410A的IICSCL(GPE15)和IICSDA(GPE14),CON2的1、2兩端輸出轉(zhuǎn)換后的模擬信號(hào)值,其輸出電壓范圍為0~2V。S3C2410A通過(guò)IIC接口向MAX5380發(fā)送數(shù)據(jù),MAX5380將接收IIC總線的數(shù)據(jù),并將其轉(zhuǎn)換為模擬電壓信號(hào)輸出到CON2。2.MAX5380的軟件編程MAX5380的編程動(dòng)作通過(guò)函數(shù)voidiic_write_max5380(U32slvAdd,U8data)完成,其中slvAddr為從設(shè)備地址,MAX5380使用0x60;data為待寫(xiě)入的數(shù)據(jù),即發(fā)送給MAX5380的數(shù)字值;iic_write_max5380的代碼請(qǐng)參考6.2節(jié)(I2C部分)。通過(guò)調(diào)用該函數(shù)可以實(shí)現(xiàn)給CON2輸出各種波形信號(hào)。

S3C2410A具有4路PWM輸出,輸出口分別為T(mén)OUT0-TOUT3。為了能夠正確輸出PWM信號(hào),需要設(shè)置GPBCON寄存器選擇相應(yīng)I/O為T(mén)OUTx功能。然后,通過(guò)TCFG0寄存器為PWM定時(shí)器時(shí)鐘源設(shè)置預(yù)分頻值,通過(guò)TCFG1寄存器選擇PWM定時(shí)器時(shí)鐘源。接著,通過(guò)TCNB0寄存器設(shè)置PWM周期,通過(guò)TCMPB0設(shè)置PWM占空比。最后,通過(guò)TCON寄存器啟動(dòng)PWM定時(shí)器,即可輸出PWM信號(hào)。PWMDAC控制S3C2410A的PWM控制器S3C2410A處理器有5個(gè)16位定時(shí)器,其中定時(shí)器0/1/2/3有PWM脈沖輸出功能;定時(shí)器4具有內(nèi)部定時(shí)作用,但是沒(méi)有輸出引腳。程序設(shè)計(jì):

使用PWM輸出實(shí)現(xiàn)DAC功能,輸出電壓分別為為0.0V、0.5V、1.0V、1.5V、2.0V、2.5V和3.0V。intmain(void){ uint16pwm_dac;

//獨(dú)立按鍵KEY1控制口設(shè)置rGPFCON=(rGPFCON&(~(0x03<<8)));//rGPFCON[9:8]=00b,設(shè)置GPF4為GPIO輸入模式

//TOUT0口設(shè)置rGPBCON=(rGPBCON&(~(0x03<<0)))|(0x02<<0);//rGPBCON[1:0]=10b,設(shè)置TOUT0功能rGPBUP=rGPBUP|0x0001;//禁止TOUT0口的上拉電阻//初始化PWM輸出。設(shè)PWM周期控制值為255(即DAC分辨率為8位)

pwm_dac=0;//初始化占空比為0,即輸出0V電壓PWM_Init(255,pwm_dac);//等待按鍵KEY1,改變占空比 while(1) {WaitKey(); //由于PWM周期控制值為255,所以0.5V對(duì)應(yīng)的PWM占空比的值為:0.5/3.3*256=39 pwm_dac=pwm_dac+39;//改變D/A輸出的電壓值 if(pwm_dac>255) {pwm_dac=0;} rTCMPB0=pwm_dac; } return(0);}voidPWM_Init(uint16cycle,uint16duty){ //參數(shù)過(guò)濾if(duty>cycle)duty=cycle;

//設(shè)置定時(shí)器0,即PWM周期和占空比//Fclk=200MHz,時(shí)鐘分頻配置為1:2:4,即Pclk=50MHz。 rTCFG0=97; //預(yù)分頻器0設(shè)置為98,取得510204Hz rTCFG1=0; //TIMER0再取1/2分頻,取得255102Hz rTCMPB0=duty; //設(shè)置PWM占空比 rTCNTB0=cycle; //定時(shí)值(PWM周期) if(rTCON&0x04)rTCON=(1<<1); //更新定時(shí)器數(shù)據(jù)(取反輸出inverter位) elserTCON=(1<<2)|(1<<1); rTCON=(1<<0)|(1<<3); //啟動(dòng)定時(shí)器 } 5.4.1鍵盤(pán)與LED數(shù)碼管接口基本原理與結(jié)構(gòu)1.鍵盤(pán)的分類鍵盤(pán)按與微控制器的連接方式,其結(jié)構(gòu)可分為線性鍵盤(pán)和矩陣鍵盤(pán)兩種形式。

線性鍵盤(pán)由若干個(gè)獨(dú)立的按鍵組成,每個(gè)按鍵的一端與微控制器的一個(gè)I/O口相連。有多少個(gè)鍵就要有多少根連線與微控制器的I/O口相連,適用于按鍵少的場(chǎng)合。5.4鍵盤(pán)與LED數(shù)碼管接口矩陣鍵盤(pán)的按鍵按N行M列排列,每個(gè)按鍵占據(jù)行列的一個(gè)交點(diǎn),需要的I/O口數(shù)目是N+M,容許的最大按鍵數(shù)是N×M。矩陣鍵盤(pán)可以減少與微控制器I/O接口的連線數(shù),是常用的一種鍵盤(pán)結(jié)構(gòu)形式。根據(jù)矩陣鍵盤(pán)的識(shí)鍵和譯鍵方法的不同,矩陣鍵盤(pán)又可以分為非編碼鍵盤(pán)和編碼鍵盤(pán)兩種。非編碼鍵盤(pán)主要用軟件的方法識(shí)鍵和譯鍵。根據(jù)掃描方法的不同,可以分為行掃描法、列掃描法和反轉(zhuǎn)法3種。編碼鍵盤(pán)主要用硬件(鍵盤(pán)和LED專用接口芯片)來(lái)實(shí)現(xiàn)鍵的掃描和識(shí)別,例如使用8279專用接口芯片。鍵盤(pán)的按鍵實(shí)際上就是一個(gè)開(kāi)關(guān),常用的按鍵開(kāi)關(guān)有機(jī)械式按鍵、電容式按鍵、薄膜式按鍵、霍耳效應(yīng)按鍵等。(1)機(jī)械式按鍵(2)電容式按鍵(3)薄膜式按鍵

(4)霍耳效應(yīng)按鍵2.LED數(shù)碼管LED(LightEmittingDiode,發(fā)光二極管)數(shù)碼管(也稱為七段數(shù)碼管)價(jià)格低廉、體積小、功耗低,而可靠性又很好,在嵌入式控制系統(tǒng)中應(yīng)用非常普遍。

如圖5.4.1(a)所示,LED數(shù)碼管一般由8個(gè)發(fā)光管組成,分別稱為a、b、c、d、e、f、g7個(gè)字段和一個(gè)小數(shù)點(diǎn)段DP。通過(guò)7個(gè)字段的不同組合,可以顯示0~9和A~F共16個(gè)字母數(shù)字,從而實(shí)現(xiàn)十六進(jìn)制的顯示。例如,控制a、b、c、d、e、f段亮,g段不亮,就顯示出數(shù)字零。(a)LED器件(b)共陽(yáng)極接法(c)共陰極接法圖5.4.17段LED顯示器LED字符與段碼對(duì)應(yīng)表1-燈亮0-燈滅LED數(shù)碼管可以分為共陽(yáng)極和共陰極兩種結(jié)構(gòu),如圖5.4.1(b)、(c)所示。在共陰極結(jié)構(gòu),各字段陰極控制端連接在一起接低電平,各字段陽(yáng)極控制端連接到高電平時(shí),則該段發(fā)光。例如,要顯示b字母,只要使c、d.、e、f、g陽(yáng)極接高電平即可實(shí)現(xiàn)。在共陽(yáng)極結(jié)構(gòu),各字段陽(yáng)極控制端連接在一起接高電平,各字段陰極控制端連接到低電平時(shí),則該段發(fā)光。例如,要顯示b字母,只要使c、d.、e、f、g陽(yáng)極接低電平即可實(shí)現(xiàn)。在多個(gè)LED數(shù)碼管顯示電路中,通常把陰(陽(yáng))極控制端連接到一個(gè)輸出端口,稱為位控端口;而把各字段(數(shù)據(jù)顯示段)連接到一個(gè)輸出端口,稱為段控端口。段控端口處應(yīng)輸出十六進(jìn)制數(shù)的7段代碼。

將一個(gè)4位的BCD碼譯為L(zhǎng)ED的7位顯示代碼,可以采用專用譯碼芯片,如7447即采用專用的帶驅(qū)動(dòng)器的LED段譯碼器,可以實(shí)現(xiàn)對(duì)BCD碼的譯碼。另一種常用的辦法是軟件譯碼法,將0~F共16個(gè)數(shù)字(也可以為0~9)對(duì)應(yīng)的顯示代碼組成一個(gè)表,直接輸出7段碼。5.4.2用I/O口實(shí)現(xiàn)鍵盤(pán)接口一個(gè)用I/O口實(shí)現(xiàn)的16個(gè)按鍵的鍵盤(pán)接口電路如圖5.4.2所示。在本例中,采用了節(jié)省口線的“行掃描法”方法來(lái)檢測(cè)鍵盤(pán),與4×4的矩陣鍵盤(pán)接口只需要8根口線,設(shè)置PF0~PF3為輸出掃描碼的端口,PF4~PF7為鍵值讀入口。圖5.4.2ARM微處理器實(shí)現(xiàn)的鍵盤(pán)接口電路行掃描法:使鍵盤(pán)上某一行線為低電平,而其余行接高電平,然后讀取列值,如果列值中有某位為低電平,則表明行列交點(diǎn)處的鍵被按下;否則掃描下一行,直到掃描完全部的行線為止。在圖5.4.2所示電路中,按鍵設(shè)置在行、列交叉點(diǎn)上,行、列分別連接到按鍵開(kāi)關(guān)的兩端。列線通過(guò)上拉電阻接到+5V上。平時(shí)無(wú)按鍵動(dòng)作時(shí),列線處于高電平狀態(tài);而當(dāng)有鍵按下時(shí),列線電平狀態(tài)將由通過(guò)此按鍵的行線電平?jīng)Q定:行線電平如果為低,列線電平為低;行線電平如果為高,則列線電平亦為高。通過(guò)這一點(diǎn)來(lái)識(shí)別矩陣式鍵盤(pán)是否被按下。因各按鍵之間相互發(fā)生影響,所以必須將行、列線信號(hào)配合起來(lái)并作適當(dāng)?shù)奶幚?,才能確定閉合鍵的位置。根據(jù)行掃描法的原理,識(shí)別矩陣鍵盤(pán)按鍵閉合分兩步進(jìn)行:(1)識(shí)別鍵盤(pán)哪一行的鍵被按下:讓所有行線均為低電平,檢查各列線電平是否為低,如果有列線為低,則說(shuō)明該列有鍵被按下,否則說(shuō)明無(wú)鍵被按下。(2)如果某列有鍵被按下,識(shí)別鍵盤(pán)哪一行的鍵被按下:逐行置低電平,并置其余各行為高電平,檢查各列線電平的變化,如果列電平變?yōu)榈碗娖剑瑒t可確定此行此列交叉點(diǎn)處按鍵被按下。5.4.3采用專用芯片實(shí)現(xiàn)鍵盤(pán)及LED接口一個(gè)5×4鍵盤(pán)及8位LED顯示電路如下圖所示,該電路采用支持IIC總線協(xié)議的ZLG7290芯片。ZLG7290是一個(gè)采用IIC接口的鍵盤(pán)及LED驅(qū)動(dòng)器芯片,IIC串行接口提供鍵盤(pán)中斷信號(hào)方便與處理器接口,IIC接口傳輸速率可達(dá)32kbit/s,可驅(qū)動(dòng)8位共陰數(shù)碼管或64只獨(dú)立LED和64個(gè)按鍵,可控掃描位數(shù)可控任一數(shù)碼管閃爍,提供數(shù)據(jù)譯碼和循環(huán)移位段尋址等控制,8個(gè)功能鍵可檢測(cè)任一鍵的連擊次數(shù),無(wú)需外接元件即直接驅(qū)LED,可擴(kuò)展驅(qū)動(dòng)電流和驅(qū)動(dòng)電壓,提供工業(yè)級(jí)器件多種封裝形式PDIP-24和SO-24,引腳端功能如表5.4.1所示。表5.4.1ZLG7290引腳端功能(a)ZLG7290控制電路(b)八段數(shù)碼管連接電路(c)鍵盤(pán)及LED顯示電路圖5.4.35×4鍵盤(pán)及8位LED顯示電路(圖與表中的引腳端符號(hào)統(tǒng)一,以表為準(zhǔn))注:訪問(wèn)這些寄存器需要通過(guò)IIC總線接口來(lái)實(shí)現(xiàn)。ZLG7290的IIC總線器件地址是70H(寫(xiě)操作)和71H(讀操作)。訪問(wèn)內(nèi)部寄存器要通過(guò)“子地址”來(lái)實(shí)現(xiàn)。1.系統(tǒng)寄存器SystemReg(地址:00H)系統(tǒng)寄存器的第0位(LSB)稱作KeyAvi,標(biāo)志著按鍵是否有效,0-沒(méi)有按鍵被按下,1-有某個(gè)按鍵被按下。SystemReg寄存器的其它位暫時(shí)沒(méi)有定義。當(dāng)按下某個(gè)鍵時(shí),ZLG7290B的INT引腳會(huì)產(chǎn)生一個(gè)低電平的中斷請(qǐng)求信號(hào)。當(dāng)讀走鍵值后,中斷信號(hào)就會(huì)自動(dòng)撤銷。而KeyAvi也同時(shí)予以反映。正常情況下,微控制器只需要判斷INT引腳就可以了。通過(guò)不斷查詢KeyAvi位也能判斷是否有鍵按下,這樣就可以節(jié)省微控制器的一根I/O口線,但是代價(jià)是IIC總線處于頻繁的活動(dòng)狀態(tài),多消耗電流并且不利于抗干擾。

寄存器詳解:2.鍵值寄存器Key(地址:01H)如果某個(gè)普通鍵被按下,則微控制器可以從鍵值寄存器Key中讀取相應(yīng)的鍵值1~56。如果微控制器發(fā)現(xiàn)ZLG7290B的INT引腳產(chǎn)生了中斷請(qǐng)求,而從Key中讀到的鍵值是0,則表示按下的可能是功能鍵。鍵值寄存器Key的值在被讀走后自動(dòng)變成0。

3.連擊次數(shù)計(jì)數(shù)器RepeatCnt(地址:02H)

ZLG7290B為普通鍵提供了連擊計(jì)數(shù)功能。所謂連擊是指按住某個(gè)普通鍵不松手,經(jīng)過(guò)一兩秒鐘的延遲后(在4MHz下約為2秒),開(kāi)始連續(xù)有效,連續(xù)有效間隔時(shí)間(在4MHz下約為170毫秒)在幾十到幾百個(gè)毫秒。這一特性跟電腦上的鍵盤(pán)很類似。4.功能鍵寄存器FunctionKey(地址:03H)ZLG7290B還提供有8個(gè)功能鍵。功能鍵常常是配合普通鍵一起使用的,就像電腦鍵盤(pán)上的Shift、Ctrl和Alt鍵。當(dāng)然功能鍵也可以單獨(dú)去使用,就像電腦鍵盤(pán)上的F1~F12。當(dāng)按下某個(gè)功能鍵時(shí),在INT引腳也會(huì)像按普通鍵那樣產(chǎn)生中斷信號(hào)。功能鍵的鍵值是被保存在FunctionKey寄存器中的。功能鍵寄存器FunctionKey的初始值是FFH,每一個(gè)位對(duì)應(yīng)一個(gè)功能鍵,第0位(LSB)對(duì)應(yīng)F0,第1位對(duì)應(yīng)F1,依次類推,第7位(MSB)對(duì)應(yīng)F7。某一功能鍵被按下時(shí),相應(yīng)的FunctionKey位就清零。5.命令緩沖區(qū)CmdBuf0CmdBuf1(地址:07H08H)通過(guò)向命令緩沖區(qū)寫(xiě)入相關(guān)的控制命令可以實(shí)現(xiàn)段尋址、下載顯示數(shù)據(jù)、控制閃爍等功能。

6.閃爍控制寄存器FlashOnOff(地址:0CH)

FlashOnOff寄存器決定閃爍頻率和占空比。7.掃描位數(shù)寄存器ScanNum(地址:0DH)

用于控制最大的掃描顯示位數(shù),有效范圍為0-7對(duì)應(yīng)的顯示位數(shù)為1-8.實(shí)際應(yīng)用中可能需要顯示的位數(shù)不足8位,例如只顯示3位,這時(shí)可以把ScanNum的值設(shè)置為2,則數(shù)碼管的第0、1、2位被掃描顯示,而第3~7位不會(huì)被分配掃描時(shí)間,所以不顯示。

8.顯示緩存寄存器DpRam0-DpRam7(地址:10H-17H)

DpRam0~DpRam7這8個(gè)寄存器的取值直接決定了數(shù)碼管的顯示內(nèi)容。

1.鍵盤(pán)控制初始化程序2.中斷服務(wù)程序5.5.1LCD顯示接口原理與結(jié)構(gòu)5.5LCD顯示接口LCD液晶顯示器是LiquidCrystalDisplay的簡(jiǎn)稱,LCD的構(gòu)造是在兩片平行的玻璃當(dāng)中放置液態(tài)的晶體,兩片玻璃中間有許多垂直和水平的細(xì)小電線,透過(guò)通電與否來(lái)控制桿狀水晶分子改變方向,將光線折射出來(lái)產(chǎn)生畫(huà)面。(一)液晶的物理特性液晶的物理特性是:當(dāng)通電時(shí)導(dǎo)通,排列變的有秩序,使光線容易通過(guò);不通電時(shí)排列混亂,阻止光線通過(guò)。讓液晶如閘門(mén)般地阻隔或讓光線穿透。從技術(shù)上簡(jiǎn)單地說(shuō),液晶面板包含了兩片相當(dāng)精致的無(wú)鈉玻璃素材,稱為Substrates,中間夾著一層液晶。當(dāng)光束通過(guò)這層液晶時(shí),液晶本身會(huì)排排站立或扭轉(zhuǎn)呈不規(guī)則狀,因而阻隔或使光束順利通過(guò)。大多數(shù)液晶都屬于有機(jī)復(fù)合物,由長(zhǎng)棒狀的分子構(gòu)成。在自然狀態(tài)下,這些棒狀分子的長(zhǎng)軸大致平行。將液晶倒入一個(gè)經(jīng)精良加工的開(kāi)槽平面,液晶分子會(huì)順著槽排列,所以假如那些槽非常平行,則各分子也是完全平行的。(二)單色液晶顯示器的原理

LCD技術(shù)是把液晶灌入兩個(gè)列有細(xì)槽的平面之間。這兩個(gè)平面上的槽互相垂直(相交成90度)。也就是說(shuō),若一個(gè)平面上的分子南北向排列,則另一平面上的分子?xùn)|西向排列,而位于兩個(gè)平面之間的分子被強(qiáng)迫進(jìn)入一種90度扭轉(zhuǎn)的狀態(tài)。由于光線順著分子的排列方向傳播,所以光線經(jīng)過(guò)液晶時(shí)也被扭轉(zhuǎn)90度。但當(dāng)液晶上加一個(gè)電壓時(shí),分子便會(huì)重新垂直排列,使光線能直射出去,而不發(fā)生任何扭轉(zhuǎn)。

LCD是依賴極化濾光器(片)和光線本身。自然光線是朝四面八方隨機(jī)發(fā)散的。極化濾光器實(shí)際是一系列越來(lái)越細(xì)的平行線。這些線形成一張網(wǎng),阻斷不與這些線平行的所有光線。極化濾光器的線正好與第一個(gè)垂直,所以能完全阻斷那些已經(jīng)極化的光線。只有兩個(gè)濾光器的線完全平行,或者光線本身已扭轉(zhuǎn)到與第二個(gè)極化濾光器相匹配,光線才得以穿透。對(duì)于筆記本電腦或者桌面型的LCD顯示器需要采用的更加復(fù)雜的彩色顯示器而言,還要具備專門(mén)處理彩色顯示的色彩過(guò)濾層。通常,在彩色LCD面板中,每一個(gè)像素都是由三個(gè)液晶單元格構(gòu)成,其中每一個(gè)單元格前面都分別有紅色,綠色,或藍(lán)色的過(guò)濾器。這樣,通過(guò)不同單元格的光線就可以在屏幕上顯示出不同的顏色。LCD分類:段式液晶:常見(jiàn)段式液晶的每字為8段組成,即8字和一點(diǎn),只能顯示數(shù)字和部分字母,但可以通過(guò)定制顯示其它少量字符、漢字和其它符號(hào),如計(jì)算器和電子表所用的液晶。字符型液晶:顧名思義,字符型液晶是用于顯示字符和數(shù)字的,對(duì)于圖形和漢字的顯示方式與段式液晶無(wú)異。圖形點(diǎn)陣式液晶:根據(jù)液晶材料和液晶效應(yīng)分為T(mén)N、STN(DSTN)、TFT等幾類。2.圖形LCD種類LCD按照其液晶驅(qū)動(dòng)方式,可以分為T(mén)N(TwistNematic,扭轉(zhuǎn)向列)型、STN(SuperTwistedNematic,偽彩屏)型和TFT(ThinFilmTransistor,真彩屏)型3大類。3.LCD的驅(qū)動(dòng)市面上出售的LCD有兩種類型:一種是帶有LCD控制器的LCD顯示模塊,這種LCD通常采用總線方式與各種單片機(jī)進(jìn)行接口。另一種是沒(méi)有帶LCD控制器的LCD顯示器,需要另外的LCD控制器芯片或者是在主控制器芯片內(nèi)部具有LCD控制器電路。在單片機(jī)系統(tǒng)中,LCD往往是通過(guò)LCD控制器芯片連在單片機(jī)總線上,或者通過(guò)并行接口、串行接口與單片機(jī)相連。而現(xiàn)在許多SOC芯片中都集成了LCD控制器,支持TN型LCD或者TFT型LCD。例如大部分的ARM處理器中都集成了LCD控制器。5.5.2S3C2410A的LCD控制器1.S3C2410A的LCD控制器內(nèi)部結(jié)構(gòu)一塊LCD屏顯示圖像,不但需要LCD驅(qū)動(dòng)器,還需要有相應(yīng)的LCD控制器。通常LCD驅(qū)動(dòng)器會(huì)以COF/COG的形式與LCD玻璃基板制做在一起,而LCD控制器則有外部電路來(lái)實(shí)現(xiàn)。而S3C2410內(nèi)部已經(jīng)集成了LCD控制器,因此可以很方便地去控制各種類型的LCD屏。S3C2410A的LCD控制器支持單色,4級(jí)、16級(jí)灰度LCD顯示,以及8位彩色、12位彩色LCD顯示,彩色顯示采用RGB的格式,通過(guò)軟件編程可以實(shí)現(xiàn)332的RGB調(diào)色格式。可以通過(guò)對(duì)LCD控制器中的各寄存器寫(xiě)入不同的值,來(lái)配置不同尺寸、不同的垂直和水平像素點(diǎn)、數(shù)據(jù)寬度、接口時(shí)間及刷新率的LCD。

S3C2410的LCD控制器由由一個(gè)邏輯單元組成,它的作用是:把LCD圖像數(shù)據(jù)從一個(gè)位于系統(tǒng)內(nèi)存的videobuffer傳送到一個(gè)外部的LCD驅(qū)動(dòng)器。LCD控制器是可以編程滿足不同的需求,關(guān)于水平,垂直方向的像素?cái)?shù)目,數(shù)據(jù)接口的數(shù)據(jù)線寬度,接口時(shí)序和刷新速率。LCD控制器的結(jié)構(gòu)框圖S3C2410LCD控制器被用來(lái)傳送視頻數(shù)據(jù)和生成必要的控制信號(hào),比如VFRAME,VLINE,VCLK,VM,等等。除了控制信號(hào)外,這S3C2410還有作為視頻數(shù)據(jù)的數(shù)據(jù)端口,它們是如上圖所示的VD[23:0]。

S3C2410A的LCD控制器內(nèi)部結(jié)構(gòu)方框圖如上圖所示,由REGBANK、LCDCDMA、VIDPRCS、TIMEGEN和LPC3600等模塊組成。

REGBANK是LCD控制器的寄存器組,具有17個(gè)用于配置LCD控制器的可編程寄存器和256×16的調(diào)色存儲(chǔ)器。用來(lái)對(duì)LCD控制器的各項(xiàng)參數(shù)進(jìn)行設(shè)置。

LCDCDMA則是LCD控制器專用的DMA信道,它能自動(dòng)地把在幀內(nèi)存中的視頻數(shù)據(jù)傳送到LCD驅(qū)動(dòng)器。通過(guò)使用這個(gè)DMA通道,視頻數(shù)據(jù)在不需要CPU的干預(yù)的情況下顯示在LCD屏上。

VIDPRCS接收來(lái)自LCDCDMA的數(shù)據(jù),將數(shù)據(jù)轉(zhuǎn)換為合適的數(shù)據(jù)格式,比如說(shuō)4/8位單掃,4位雙掃顯示模式,然后通過(guò)數(shù)據(jù)端口VD[23:0]傳送視頻數(shù)據(jù)到LCD驅(qū)動(dòng)器。

TIMEGEN由可編程的邏輯組成,支持不同的LCD驅(qū)動(dòng)器接口時(shí)序和速率的需求。TIMEGEN塊可以產(chǎn)生VFRAME,VLINE,VCLK,VM等等。S3C2410ALCD控制器的外部接口信號(hào)有33個(gè),包括24個(gè)數(shù)據(jù)位和9個(gè)控制位如下:(1)VSYNC:垂直同步信號(hào)(TFT)LCD控制器和LCD驅(qū)動(dòng)器之間的幀同步信號(hào)。該信號(hào)告訴LCD屏的新的一幀開(kāi)始了,LCD控制器在一個(gè)完整幀顯示完成后立即插入一個(gè)VFRAME信號(hào),開(kāi)始新一幀的顯示。

(2)HSYNC:水平同步信號(hào)(TFT)LCD控制器和LCD驅(qū)動(dòng)器之間的水平同步脈沖信號(hào)。該信號(hào)用于用指示新的一行掃描信號(hào)的開(kāi)始。(3)VCLK:像素時(shí)鐘信號(hào)(TFT)LCD控制器和LCD驅(qū)動(dòng)器之間的像素時(shí)鐘信號(hào),由LCD控制器送出的數(shù)據(jù)在VCLK的上升沿處送出,在VCLK的下降沿處被LCD驅(qū)動(dòng)器采樣。LCD屏的驅(qū)動(dòng)IC是通過(guò)采集VCLK信號(hào)來(lái)接受RGB數(shù)據(jù)。(4)VD[23,0]:LCD像素點(diǎn)數(shù)據(jù)輸出端口(TFT),R、G、B分別占用8位,順序依次從高到低。

(5)VDEN:LCD驅(qū)動(dòng)器的AC信號(hào)(TFT)VDEN信號(hào)被LCD驅(qū)動(dòng)器用于改變行和列的電壓極性,從而控制像素點(diǎn)的顯示或熄滅。(6)LEND:行結(jié)束信號(hào)(TFT),LCD驅(qū)動(dòng)器在每掃描一行像素后給出該信號(hào)。(7)LCD_PWREN:LCD面板電源使能控制信號(hào),由LCDCON5的PWREN位控制。(8)LCDVF0:SECTFT信號(hào)OE(9)LCDVF1:SECTFT信號(hào)REV(10)LCDVF2:SECTFT信號(hào)REVB2.LCD顯示數(shù)據(jù)格式

例如一個(gè)320×240個(gè)像素,8bit的256色LCD,顯示一屏所需的顯示緩存為320×240×8位,即76800字節(jié)。在顯示緩存器中,每個(gè)像素占一個(gè)字節(jié),每個(gè)字節(jié)中又有RGB格式(332或者233)的區(qū)分,具體由硬件決定。例如332的RGB格式如下圖(a)所示,紅、綠、藍(lán)三個(gè)顏色分量分別占3位、3位、2位。8位256彩色顯示的顯示緩存器與LCD屏上的像素點(diǎn)是對(duì)應(yīng)的,每個(gè)字節(jié)對(duì)應(yīng)LCD上的一個(gè)像素點(diǎn),如下圖(b)所示。在彩色圖像顯示時(shí),通過(guò)配置相應(yīng)的寄存器,首先要給顯示緩存區(qū)一個(gè)首地址,這個(gè)地址要在4字節(jié)對(duì)齊的邊界上,而且要在SDRAM的4MB空間之內(nèi)。以顯示緩存首地址開(kāi)始的連續(xù)76800字節(jié),就是顯示緩存區(qū),顯示緩存區(qū)的數(shù)據(jù)會(huì)直接顯示到LCD屏上。改變?cè)擄@示緩存區(qū)內(nèi)數(shù)據(jù),LCD顯示屏上的圖像隨之變化。(b)顯示緩存中的數(shù)據(jù)在顯示屏上的顯示格式(a)幀內(nèi)存數(shù)據(jù)在顯示緩存中的格式

8位256色LCD顯示數(shù)據(jù)格式TFTLCD控制器操作:TIMEGEN為L(zhǎng)CD驅(qū)動(dòng)器生成控制信號(hào),比如VSYNC,HSYNC,VCLK,和LEND信號(hào)。這些控制信號(hào)與與REGBANK中的LCDCON1/2/3/4/5中的配置密切相關(guān)?;谶@些在REGBANK中的LCD控制寄存器可編程配置,TIMEGEN可以合適的可編程控制信號(hào)支持多種不同的LCD驅(qū)動(dòng)器。

VSYNC和HSYNC脈沖的生成依靠于LCDCON2/3中的HOZVAL[23:14]域和LINEVAL[18:8]域的配置。HOZVAL和LINEVAL能被LCD屏面積決定,依照如下公式:—

HOZVAL=(Horizontaldisplaysize)-1—

LINEVAL=(Verticaldisplaysize)-1

VCLK信號(hào)的速率依賴于LCDCON1中的CLKVAL域。下表定義了VCLK與CLKVAL之間的關(guān)系。CLKVAL最小的數(shù)值為0。VCLK(Hz)=HCLK/[(CLKVAL+1)x2]注:HCLK=60MHz幀速率就是VSYNC信號(hào)頻率。幀速率與VSYNC,VBPD,VFPD,LINEVAL,HSYNC,HBPD,HFPD,HOZVAL,和CLKVAL的域有關(guān),它們是LCDCON1/2/3/4。大多數(shù)LCD驅(qū)動(dòng)器需要它們合適的幀速率。幀速率按如下公式計(jì)算:256色調(diào)色板使用(TFT):調(diào)色板配置和格式控制S3C2410為T(mén)FT顯示器提供256色調(diào)色板。用戶可以從64K種顏色中選擇出256種顏色,按照兩種數(shù)據(jù)格式。256色調(diào)色板由256(行)*16(位)SPSRAM組成。調(diào)色板支持5:6:5格式和5:5:5:1的格式。當(dāng)用戶使用5:5:5:1的格式時(shí),亮度位(I)被用作每個(gè)RGB數(shù)據(jù)共有的最低位。因此,5:5:5:1格式與R(5+1):G(5+1):B(5+1)是一樣的格式。在5:5:5:1格式,例如,用戶可以寫(xiě)如下表中的調(diào)色板數(shù)據(jù),接著把VD腳連接到LCD屏(R(5+I)=VD[23:19]+VD[18],VD[10]orVD[2],G(5+I)=VD[15:11]+VD[18],VD[10]orVD[2],B(5+I)=VD[7:3]+VD[18],VD[10]orVD[2].),同時(shí)設(shè)置LCDCON5中的FRM565域?yàn)?。NOTE:1.0x4D000400是調(diào)色板的起始地址2.VD18,VD10和VD2有同樣的輸出值3.DATA[31:16]是無(wú)效的調(diào)色板讀與寫(xiě):當(dāng)用戶在調(diào)色板上執(zhí)行讀/寫(xiě)操作時(shí),LCDCON5中的HSTATUS和VSTATUS必須被檢查,因?yàn)樵贖STATUS和VSTATUS有效期間,讀/寫(xiě)操作是被禁止的。臨時(shí)調(diào)色板配置S3C2410允許用戶使用單色幀,不需要進(jìn)行復(fù)雜的修改去填充一個(gè)顏色到幀緩沖或者調(diào)色板。單色幀通過(guò)寫(xiě)單色數(shù)據(jù)到TPAL寄存器中TPALVAL,且使能TPALEN,就可以顯示在LCD屏上。查找表:S3C2410支持查找表作為彩色或者灰度等級(jí)映射的多種選擇,保證為用戶提供具有彈性的操作。查找表就是一個(gè)調(diào)色板,它允許在彩色或者灰度等級(jí)上進(jìn)行選擇(假如在4級(jí)灰度下,可以選擇16灰度級(jí)別中的4級(jí),假設(shè)在256色模式下,可以選擇16級(jí)紅色中的8種,16級(jí)綠色中的8種,16級(jí)藍(lán)色中的4種)。換句話說(shuō),在4級(jí)灰度模式,用戶可以通過(guò)查找表選擇16種灰度等級(jí)中的4種。在16級(jí)灰度模式下,灰度等級(jí)不能被選擇;在可能的16種灰度等級(jí)中,所有的16種灰度等級(jí)必須被選擇。假設(shè)在256色模式下,3位被分配用于紅色,3位用于綠色,2位用于藍(lán)色。這256色意味著這些顏色是由8種紅色,8種綠色,4種藍(lán)色組合而成(8*8*4=256)。在彩色模式,這個(gè)查找表能被用作合適的選擇。8種紅色等級(jí)能在16種可能的紅色等級(jí)中被選擇,8種綠色同樣可以在16種可能的綠色種被選擇并且4種藍(lán)色能在16種藍(lán)色等級(jí)中被選擇。假如是4096色模式,就沒(méi)有象256色模式下的那種選擇。以240X320的屏為例,現(xiàn)在要點(diǎn)亮一行,那么肯定要有240個(gè)VCLK周期將240個(gè)pixel的VD值輸出,而且這240個(gè)周期內(nèi)VDEN應(yīng)該一直是有效的?,F(xiàn)在我們的思路從點(diǎn)擴(kuò)展到了行,理想情況下,兩行之間不需要間隔,也就是說(shuō)這一行結(jié)束馬上傳輸下一行的第一個(gè)pixel的VD。但是這樣做并不好,因?yàn)橐粋€(gè)點(diǎn)的偏差會(huì)造成滿盤(pán)皆輸。因此我們引入了行同步HSYNC信號(hào),也就是說(shuō)在傳輸完一行的數(shù)據(jù)后,先歇一會(huì)兒,等待若干個(gè)時(shí)鐘(我們稱之為后插入等待周期);然后我們送一個(gè)行同步信號(hào),當(dāng)然這個(gè)信號(hào)的有效周期數(shù)我們也能控制(我們稱之為同步周期);之后呢,我們?cè)诘纫粫?huì),讓LCD驅(qū)動(dòng)電路準(zhǔn)備好接收,我們?cè)诎岩恍械臄?shù)據(jù)發(fā)下去(這個(gè)等待時(shí)間我們稱之為前插入等待周期)。S3C2410ALCD控制器的相關(guān)寄存器

啟動(dòng)一個(gè)與S3C2410A連接的LCD的顯示,需要正確的配置與S3C2410ALCD控制器的相關(guān)寄存器。需要配置的相關(guān)寄存器如下:LCDCON1(LCD控制寄存器1)LCDCON2(LCD控制寄存器2)LCDCON3(LCD控制寄存器3)LCDCON4(LCD控制寄存器4)LCDCON5(LCD控制寄存器5)LCDSADDR1(STN型LCD/TFT型LCD幀緩沖起始地址寄存器1)LCDSADDR2(STN型LCD/TFT型LCD幀緩沖起始地址寄存器2)LCDSADDR3(STN型LCD/TFT型LCD幀緩沖起始地址寄存器3)RGB查找表寄存器LCD中斷寄存器S3C2410的LCD控制器內(nèi)部設(shè)有較多的寄存器,其中與時(shí)序信號(hào)高度相關(guān)的寄存器位于寄存器組中的

LCDCON1/2/3/4/5,系統(tǒng)設(shè)計(jì)的LCD驅(qū)動(dòng)器需要LCD控制器給出VCLK、VDEN、LCD_PWREN和VD[23:0]信號(hào)。

VCLK信號(hào)依賴于LCDCON1寄存器中CLKVAL和S3C2410的HCLK的取值,具體公式為:

VCLK(Hz)=HCLK/[(CLKVAL+1)×2]

VSYNC和HSYNC的產(chǎn)生依賴于LCDCON2/3寄存器及HOZVAL和LINEVAL的配置,其中:

HOZVAL=水平像素?cái)?shù)-1

LINEVAL=垂直顯示尺寸-1

幀頻率VSYNC與LCDCON1/2/3/4寄存器中的VSPW、VBPD、VFPD、LINEVAL、HSYNC、HBPD、HFPD、HOZVAL和CLKVAL有關(guān)。CNT:當(dāng)前行掃描計(jì)數(shù)器值,標(biāo)明當(dāng)前掃描到了多少行

CLKVAL:決定VCLK的分頻比。LCD控制器輸出的VCLK是直接由系統(tǒng)總線(AHB)的工作頻率HCLK直接分頻得到的。做為240*320的TFT屏,應(yīng)保證得出的VCLK在5-10MHz之間

MMODE:VM信號(hào)的觸發(fā)模式(僅對(duì)STN屏有效,對(duì)TFT屏無(wú)意義)

PNRMODE:選擇當(dāng)前的顯示模式,對(duì)于TFT屏而言,應(yīng)選擇[11],即TFTLCDpanel

BPPMODE:選擇色彩模式,對(duì)于真彩顯示而言,選擇16bpp(64K色)即可滿足要求ENVID:使能LCD信號(hào)輸出VBPD,LINEVAL,VFPD,VSPW的各項(xiàng)含義已經(jīng)在前面的時(shí)序圖中得到體現(xiàn),這里不再贅述。HBPD,HOZVAL,HFPD的各項(xiàng)含義已經(jīng)在前面的時(shí)序圖中得到體現(xiàn),這里不再贅述。HSPW的含義已經(jīng)在前面的時(shí)序圖中得到體現(xiàn),這里不再贅述。

MVAL只對(duì)STN屏有效,對(duì)TFT屏無(wú)意義。HSPW的含義已經(jīng)在前面的時(shí)序圖中得到體現(xiàn),這里不再贅述。

MVAL只對(duì)STN屏有效,對(duì)TFT屏無(wú)意義。

VSTATUS:當(dāng)前VSYNC信號(hào)掃描狀態(tài),指明當(dāng)前VSYNC同步信號(hào)處于何種掃描階段HSTATUS:當(dāng)前HSYNC信號(hào)掃描狀態(tài),指明當(dāng)前HSYNC同步信號(hào)處于何種掃描階段BPP24BL:設(shè)定24bpp顯示模式時(shí),視頻資料在顯示緩沖區(qū)中的排列順序(即低位有效還是高位有效)。對(duì)于16bpp的64K色顯示模式,該設(shè)置位無(wú)意義。FRM565:對(duì)于16bpp顯示模式,有2中形式,一種是RGB=5:5:5:1,另一種是5:6:5。INVVCLK,INVLINE,INVFRAME,INVVD:通過(guò)前面的時(shí)序圖,我們知道,CPU的LCD控制器輸出的時(shí)序默認(rèn)是正脈沖,而LCD需要VSYNC(VFRAME)、VLINE(HSYNC)均為負(fù)脈沖,因此INVLINE和INVFRAME必須設(shè)為“1”,即選擇反相輸出。INVVDEN,INVPWREN,INVLEND

的功能同前面的類似。

PWREN:為L(zhǎng)CD電源使能控制。在CPULCD控制器的輸出信號(hào)中,有一個(gè)電源使能管腳LCD_PWREN,用來(lái)做為L(zhǎng)CD屏電源的開(kāi)關(guān)信號(hào)。

ENLEND:對(duì)普通的TFT屏無(wú)效,可以不考慮。

(6)LCDSADDR1LCDSADDR1(STN型LCD/TFT型LCD幀緩沖起始地址寄存器1)是一個(gè)可讀/寫(xiě)的寄存器,地址為0x4D000014,復(fù)位后的初始值為0x00000000。LCDSADDR1的位功能如表5.5.6所列。(7)LCDSADDR2LCDSADDR2(STN型LCD/TFT型LCD幀緩沖起始地址寄存器2)是一個(gè)可讀/寫(xiě)的寄存器,地址為0x4D000018,復(fù)位后的初始值為0x00000000。LCDSADDR2的位功能如表5.5.7所列。(8)LCDSADDR3LCDSADDR3(STN型LCD/TFT型LCD幀緩沖起始地址寄存器3)是一個(gè)可讀/寫(xiě)的寄存器,地址為0x4D0000lC,復(fù)位后的初始值為0x00000000,用于設(shè)置虛擬屏地址。LCDSADDR3的位功能如表5.5.8所列。(9)RGB查找表寄存器RGB查找表寄存器包括REDLUT(紅色查找表寄存器)、GREENLUT(綠色查找表寄存器)和BLUELUT(藍(lán)色查找表寄存器)。在這3個(gè)寄存器中,可以分別設(shè)定使用的8種紅色,8種綠色和4種藍(lán)色。①REDLUT(STN型LCD紅色查找表寄存器)是一個(gè)可讀寫(xiě)的寄存器,地址為0x4D000020,復(fù)位后的初始值為0x00000000。REDLUT的位功能如表5.5.9所列。②GREENLUT(STN型LCD綠色查找表寄存器)是一個(gè)可讀/寫(xiě)的寄存器,地址為0x4D000024,復(fù)位后的初始值為0x00000000。GREENLUT的位功能如表5.5.10所列。③BLUELUT(STN型LCD藍(lán)色查找表寄存器)是一個(gè)可讀/寫(xiě)的寄存器,地址為Ox4D000028,復(fù)位后的初始值為0x0000。BLUELUT的位功能如表5.5.11所列。(11)TPALTPAL(TFT型LCD臨時(shí)調(diào)色板寄存器)是一個(gè)可讀/寫(xiě)的寄存器,地址為0x4D000050,復(fù)位后的初始值為0x00000000,寄存器的數(shù)據(jù)是下一幀的圖象數(shù)據(jù)。TPAL的位功能如表5.5.13所列。(12)LCD中斷寄存器LCD中斷寄存器有LCDINTPND(LCD中斷判斷寄存器)、LCDSRCPND(LCD中斷源判斷寄存器)和LCDINTMSK(LCD中斷屏蔽寄存器)。①LCDINTPND(LCD中斷判斷寄存器)是一個(gè)可讀/寫(xiě)寄存器,地址為0X4D000054,復(fù)位后的初始值為0x0。LCDINTPND的位功能如表5.5.14所列。②LCDSRCPND(LCD中斷源判斷寄存器)是一個(gè)可讀/寫(xiě)寄存器,地址為0X4D000058,復(fù)位后的初始值為0x0。LCDSRCPND的位功能如表5.5.15所列。③LCDINTMSK(LCD中斷屏蔽寄存器)是一個(gè)可讀/寫(xiě)寄存器,地址為0X4D00005C,復(fù)位后的初始值為0x3。LCDINTMSK的位功能如表5.5.16所列。(13)LPCSEL(LPC3600模式控制寄存器)是一個(gè)可讀/寫(xiě)寄存器,地址是0X4D000060,初始化值是0x4。LPCSEL的位功能如表5.5.17所列。5.5.3S3C2410ALCD顯示的編程實(shí)例本實(shí)例實(shí)現(xiàn)在LCD上填充一個(gè)藍(lán)色的矩形,并畫(huà)一個(gè)紅色的圓。要實(shí)現(xiàn)以上功能,需要完成的主要工作如下。1.定義與LCD相關(guān)的寄存器代碼如下:#defineM5D(n)((n)&0x1fffff)#defineMVAL(13)#defineMVAL_USED(0)#defineMODE_CSTN_8BIT(0x2001)#defineLCD_XSIZE_CSTN(320)#defineLCD_YSIZE_CSTN(240)#defineSCR_XSIZE_CSTN(LCD_XSIZE_CSTN*2)//虛擬屏幕大小#defineSCR_YSIZE_CSTN(LCD_YSIZE_CSTN*2)#defineHOZVAL_CSTN(LCD_XSIZE_CSTN*3/8-1)//有效的VD數(shù)據(jù)是8#defineLINEVAL_CSTN(LCD_YSIZE_CSTN-1)#defineWLH_CSTN(0)#defineWDLY_CSTN(0)#defineLINEBLANK_CSTN(16&0xff)#defineCLKVAL_CSTN(6)//130Hz@50MHz,WLH=16hclk,WDLY=16hclk,LINEBLANK=16*8hclk,VD=8#defineLCDFRAMEBUFFER0x33t800000//幀緩沖區(qū)起始地址2.初始化LCD初始化LCD程序完成對(duì)相關(guān)寄存器的賦初值。這里使用函數(shù)LCDInit實(shí)現(xiàn),其中參數(shù)type用于傳遞顯示器的類型,如STN8位彩色、STN12位彩色等。具體代碼如下:VoidLCD_Init(inttYPe){//用于降低功耗rIISPSR=(2<<5)|(2<<0);//IIS_LRCK=44.1kHz@384fs,PCLK=50MHzrGPHCON=rGPHCON&~(0xf<<18)|(0x5<<18);switch(type){caseMODE_CSTN_8BIT://STN8位彩色模式frameBuffer8Bit=(U32(*)[SCR_XSIZE_CSTN/4])LCDFRAMEBUFFER;rLCDCON1=(CLKVAL_CSTN<<8)|(MVAL_USED<<7)|(2<<5)|(3<<1)|0;//8-bit單掃描,8bppCSTN,ENVID=關(guān)閉rLCDCON2=(0<<24)|(LINEVAL_CSTN<<14)|(0<<6)|0;rLCDCON3=(WDLY_CSTN<<19)|(HOZVAL_CSTN<<8)|(LINEBLANK_CSTN<<0);rLCDCON4=(MVAL<<8)|(WLHCSTN<<0);rLCDCON5=0;rLCDSADDR1=(((U32)frameBuffer8Bit))>>22)<<21)|M5D((U32)frameBuffer8Bit>>1);rLCDSADDR2=M5D(((U32)frameBuffer8Bit+((SCR_XSIZE_CSTN)*LCD_YSIZE_CSTN))>>1);rLCDSADDR3=(((SCR_XSIZE_CSTN-LCD_XSIZE_CSTN)/2)<<11)|(LCD_XSIZE_CSTN/2);rDITHMODE=0;rREDLUT=0xfdb96420;rGREENLUT=0xfdb96420;rBLUELUT=0xfb40;break;default:break;}}3.常用的繪圖函數(shù)將LCD控制器配置為STN8位256色顯示屏之后,只需要修改幀緩沖的相應(yīng)內(nèi)容就可在LCD上顯示數(shù)據(jù)了。下面的函數(shù)PutCstnBBit()實(shí)現(xiàn)了在LCD的(x,y)處打點(diǎn)的功能。voidPutCstn8Bit(U32x,U32y,U32c){if(x<SCR_XSIZE_CSTN&&y<SCR_YSIZE_CSTN)frameBuffer8Bit[(y)][(x)/4]=(frameBuffer8Bit[(y)][x/4]&~(0xff000000>>((x)%4)*8))}((c&0x000000ff)<<((4-1-((x)%4))*8));}其他圖形顯示功能,如畫(huà)線、畫(huà)圓、畫(huà)矩形等,只需要按照一定規(guī)則在LCD上打點(diǎn)就可以了。EL-ARM-830系統(tǒng)為用戶提供了一系列繪圖的API函數(shù),主要有:

U32GUI_Init(void);//GUI初始化

voidDraw_Point(U16x,U16y);//繪制點(diǎn)APIU32Get_Point(U16x,U16y);//得到點(diǎn)APIvoidDraw_HLine(U16y0,U16x0,U16x1);//繪制水平線APIvoidDraw_VLine(U16x0,U16y0,U16y1);//繪制豎直線APIvoidDraw_Line(I32x1,I32y1,I32x2,I32y2);//繪制線APIvoidDraw_Circle(U32x0,U32y0,U32r);//繪制圓APIvoidFill_Circle(U16x0,U16y0,U16r);//填充圓APIvoidFill_Rect(U16x0,U16y0,U16x1,U16y1);//填充區(qū)域APIvoidSet_Color(U32color);//設(shè)定前景顏色APIvoidSet_BkColor(U32color);//設(shè)定背景顏色APIvoidSet_Font(GUI_FONT*pFont)://設(shè)定字體類型APIvoidDisp_String(constI8*s,I16x,I16y);//顯示字體API4.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論