基于處理器的嵌入式應(yīng)用系統(tǒng)設(shè)計_第1頁
基于處理器的嵌入式應(yīng)用系統(tǒng)設(shè)計_第2頁
基于處理器的嵌入式應(yīng)用系統(tǒng)設(shè)計_第3頁
基于處理器的嵌入式應(yīng)用系統(tǒng)設(shè)計_第4頁
基于處理器的嵌入式應(yīng)用系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩102頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章基于S3C2410X處理器的嵌入式應(yīng)用系統(tǒng)設(shè)計3.1基本電路設(shè)計

3.2存儲器系統(tǒng)設(shè)計

3.3S3C2410X的串行通信設(shè)計3.4S3C2410X的鍵盤及LED驅(qū)動設(shè)計

3.5S3C2410X的D/A功能應(yīng)用開發(fā)

當(dāng)前第1頁\共有107頁\編于星期四\21點3.1基本電路設(shè)計

3.1.1電源電路設(shè)計

S3C2410X需要3.3V和1.8V兩種供電電壓,是由5V電源電壓經(jīng)LM1085-3.3V和AS1117-1.8V分別得到3.3V和1.8V的工作電壓。開發(fā)板上的芯片多數(shù)使用了3.3V電壓,而1.8V是供給S3C2410內(nèi)核使用的。5V電壓供給音頻功放芯片、LCD、電機、硬盤、CAN總線等電路使用。具體如圖3.1所示。當(dāng)前第2頁\共有107頁\編于星期四\21點當(dāng)前第3頁\共有107頁\編于星期四\21點RTC電路的電壓是1.8V,實際是將電池電壓或3.3V電壓經(jīng)過兩個BAV99(等價于4個二極管串聯(lián))降壓后得到的。如圖3.2所示。圖3.2RTC電路的電壓原理圖

當(dāng)前第4頁\共有107頁\編于星期四\21點3.1.2復(fù)位電路設(shè)計硬件復(fù)位電路實現(xiàn)對電源電壓的監(jiān)控和手動復(fù)位操作。IMP811T的復(fù)位電平可以使CPUJTAG(nTRST)和板級系統(tǒng)(nRESET)全部復(fù)位;RESET反相后得到nRESET信號。

圖3.3系統(tǒng)的復(fù)位電路當(dāng)前第5頁\共有107頁\編于星期四\21點3.1.3晶振電路設(shè)計S3C2410X微處理器的主時鐘可以由外部時鐘源提供,也可以由外部振蕩器提供,通過引腳OM[3:2]來進(jìn)行選擇。OM[3:2]=00時,MPLL和UPLL的時鐘均選擇外部振蕩器;OM[3:2]=01時,MPLL的時鐘選擇外部振蕩器;UPLL選擇外部時鐘源;OM[3:2]=10時,MPLL的時鐘選擇外部時鐘源;UPLL選擇外部振蕩器;OM[3:2]=11時,MPLL和UPLL的時鐘均選擇外部時鐘源。當(dāng)前第6頁\共有107頁\編于星期四\21點該系統(tǒng)中選擇OM[3:2]均接地的方式,即采用外部振蕩器提供系統(tǒng)時鐘。外部振蕩器由12MHz晶振和2個15pF的微調(diào)電容組成。如圖3.4所示,

圖3.4晶振電路原理圖當(dāng)前第7頁\共有107頁\編于星期四\21點

圖3.5所示的是S3C2410X應(yīng)用系統(tǒng)所需的RTC時鐘電路圖,電路由12MHz晶振和2個15pF的電容組成,振蕩電路的輸出接到S3C2410X微處理器的XTlpll腳,輸入由XTOpll提供。12MHz的晶振頻率經(jīng)S3C2410X內(nèi)部PLL電路的倍頻后可達(dá)203MHz。

圖3.5系統(tǒng)時鐘的選擇當(dāng)前第8頁\共有107頁\編于星期四\21點3.2存儲器系統(tǒng)設(shè)計

在嵌入式應(yīng)用系統(tǒng)中,通常使用3種存儲器接口電路,NorFlash接口、NandFlash接口和SDRAM接口電路。引導(dǎo)程序既可存儲在NorFlash中,也可存儲在NandFlash中。而SDRAM中存儲的是執(zhí)行中的程序和產(chǎn)生的數(shù)據(jù)。存儲在NorFlash中的程序可直接執(zhí)行,與在SDRAM執(zhí)行相比速度較慢。存儲在NandFlash中的程序,需要拷貝到RAM中去執(zhí)行。當(dāng)前第9頁\共有107頁\編于星期四\21點3.2.18位存儲器接口設(shè)計

由于ARM微處理器的體系結(jié)構(gòu)支持8位/16位/32位的存儲器系統(tǒng),相應(yīng)地可以構(gòu)建8位的存儲器系統(tǒng)、16位的存儲器系統(tǒng)或32位的存儲器系統(tǒng),在采用8位存儲器構(gòu)成8位/16位/32位的存儲器系統(tǒng)時,除數(shù)據(jù)總線的連接不同之處,其它的信號線的連接方法基本相同。當(dāng)前第10頁\共有107頁\編于星期四\21點1.構(gòu)建8位的存儲器系統(tǒng)

采用8位存儲器構(gòu)成8位的存儲器系統(tǒng)如圖3.6所示。此時,在初始化程序中還必須通過BWSCON寄存器中的DWn設(shè)置為00,選擇8位的總線方式?!翊鎯ζ鞯膎OE端接S3C2410X的nOE引腳;●存儲器的nWE端接S3C2410X的nWE引腳;●存儲器的nCE端接S3C2410X的nGCSn引腳;●存儲器的地址總線[A15~A0]與S3C2410X的地址總線[ADDR15~ADDR0]相連;●存儲器的8位數(shù)據(jù)總線[DQ7~DQ0]與S3C2410X的數(shù)據(jù)總線[DATA7~DATA0]相連。當(dāng)前第11頁\共有107頁\編于星期四\21點2.構(gòu)建16位的存儲器系統(tǒng)

采用兩片8位存儲器芯片以并聯(lián)方式可構(gòu)成16位的存儲器系統(tǒng),如圖3.7所示,此時,在初始化程序中將BWSCON寄存器中的DWn設(shè)置為01,選擇16位的總線方式?!翊鎯ζ鞯膎OE端接S3C2410X的nOE引腳;●低8位的存儲器的nWE端接S3C2410X的nWBE0引腳,高8位的存儲器的nWE端接S3C2410X的nWBE1引腳;●存儲器的nCE端接S3C2410X的nGCSn引腳;●存儲器的地址總線[A15~A0]與S3C2410X的地址總線[ADDR16~ADDR1]相連;●低8位的存儲器的8位數(shù)據(jù)總線[DQ7~DQ0]與S3C2410X的數(shù)據(jù)總線[DATA7~DATA0]相連,高8位的存儲器的8位數(shù)據(jù)總線[DQ7~DQ0]與S3C2410X的數(shù)據(jù)總線[DATA15~DATA8]相連。當(dāng)前第12頁\共有107頁\編于星期四\21點3.構(gòu)建32位的存儲器系統(tǒng)采用四片8位存儲器芯片以并聯(lián)方式可構(gòu)成32位的存儲器系統(tǒng),如圖3.8所示,此時,在初始化程序中將BWSCON寄存器中的DWn設(shè)置為10,選擇32位的總線方式?!翊鎯ζ鞯膎OE端接S3C2410X的nOE引腳;●低8位的存儲器的nWE端接S3C2410X的nWBE0引腳,次低8位的存儲器的nWE端接S3C2410X的nWBE1引腳,次高8位的存儲器的nWE端接S3C2410X的nWBE2引腳,高8位的存儲器的nWE端接S3C2410X的nWBE3引腳;●存儲器的nCE端接S3C2410X的nGCSn引腳;●存儲器的地址總線[A15~A0]與S3C2410X的地址總線[ADDR17~ADDR2]相連。當(dāng)前第13頁\共有107頁\編于星期四\21點圖3.832位存儲器系統(tǒng)

當(dāng)前第14頁\共有107頁\編于星期四\21點3.2.2SDRAM接口電路設(shè)計在ARM嵌入式應(yīng)用系統(tǒng)中,SDRAM主要用于程序的運行空間、數(shù)據(jù)及堆棧區(qū)。當(dāng)系統(tǒng)啟動時,CPU首先從復(fù)位地址0x0處讀取啟動程序代碼,完成系統(tǒng)的初始化后,為提高系統(tǒng)的運行的速度,程序代碼通常裝入到SDRAM中運行。在S3C2410X片內(nèi)具有獨立的SDRAM刷新控制邏輯電路,可方便地與SDRAM接口。目前常用的SDRAM芯片有8位和16位的數(shù)據(jù)寬度、工作電壓一般為3.3V。主要生產(chǎn)廠商有HYUNDAI、Winbond等,下面以K4S561632C-TC75為例說明其與S3C2410X的接口方法,構(gòu)成16Mx32位的存儲系統(tǒng)。當(dāng)前第15頁\共有107頁\編于星期四\21點

K4S561632C-TC75存儲器是4組×4M×16位的動態(tài)存儲器,工作電壓為3.3V,其封裝形式為54腳TSOP,兼容LVTTL接口,數(shù)據(jù)寬度為16位,支持自動刷新(Auto-Refresh)和自刷新(Self-Refresh)。其引腳如圖3.9所示,引腳功能如表3.1所示。圖3.9K4S561632C-TC75引腳圖

當(dāng)前第16頁\共有107頁\編于星期四\21點引腳名稱說明CLK時鐘時鐘輸入CKE時鐘使能片內(nèi)時鐘信號使能CS*片選為低電平時芯片才能工作BA0、BA1組地址選擇用于片內(nèi)4個組選擇A12~A0地址總線為行、列的地址線RAS*行地址鎖存低電平時鎖存行地址CAS*列地址鎖存低電平時鎖存列地址WE*寫使能使能寫信號和允許列改寫,WE*和CAS*有效時鎖存數(shù)據(jù)LDQM、UDQM數(shù)據(jù)I/O屏蔽在讀模式下控制輸出緩沖,寫模式下屏蔽輸入數(shù)據(jù)DQ15~DQ0數(shù)據(jù)總線數(shù)據(jù)輸入/輸出引腳VDD/VSS電源/地內(nèi)部電源及輸入緩沖電源/地VDDQ/VSSQ電源/地輸出緩沖電源/地NC空空引腳表3.1K4S561632C-TC75引腳功能表

當(dāng)前第17頁\共有107頁\編于星期四\21點

采用兩片K4S561632C-TC75存儲器芯片可組成16M×32位SDRAN存儲器系統(tǒng),其片選信號CS*接S3C2410X的nGCS6引腳,具體連線如圖3.10所示。圖3.10K4S561632C-TC75組成的32位SDRAM存儲器系統(tǒng)當(dāng)前第18頁\共有107頁\編于星期四\21點3.2.3Flash接口電路設(shè)計

Flash閃存是非易失存儲器,可以對稱為塊的存儲器單元塊進(jìn)行擦寫和再編程。目前所做用的Flash芯片主要有NorFlash和NandFlash兩種。但這兩種Flash芯片在某些方面存在一定的差異,如:Nand器件執(zhí)行擦除操作簡單,而Nor則要求在進(jìn)行寫入前先將目標(biāo)塊內(nèi)所有的位都寫為0;Nor的讀速度比Nand稍快一些;Nand的寫入速度比Nor快很多,Nand需4ms擦除,而Nor需要5s快。NandFlash的單元尺寸幾乎是Nor器件的一半,由于生產(chǎn)過程更為簡單,其價格低。在Nand閃存中每個塊的最大擦寫次數(shù)是一百萬次,而Nor的擦寫次數(shù)是十萬次。當(dāng)前第19頁\共有107頁\編于星期四\21點Nor具有XIP(eXecuteInPlace,芯片內(nèi)執(zhí)行)特性,應(yīng)用程序可以直接在Flash閃存內(nèi)運行,不必再把代碼讀到系統(tǒng)RAM中。Nor的傳輸效率很高,在1~4MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。Nand結(jié)構(gòu)能提供極高的單元密度,可以達(dá)到高存儲密度,并且寫入和擦除的速度也很快。在接口方面,NorFlash和NandFlash也存在著差別。NorFlash帶有SRAM接口,Nand器件使用復(fù)雜的I/O口來串行存取數(shù)據(jù)。當(dāng)前第20頁\共有107頁\編于星期四\21點1.NorFlash與S3C2410X微處理器接口設(shè)計SST39LF/VF160是1MX16位的CMOS芯片,SST39LF160工作電壓為3.0~3.6V,SST39VF160工作電壓為2.7~3.6V,采用48腳TSOP封裝或TFBGA封裝,16位數(shù)據(jù)寬度,以字模式(16位數(shù)據(jù)寬度)的方式工作。SST39VF160的在系統(tǒng)編程和編程操作僅需3.3V電壓,通過命令可以對芯片進(jìn)行編程(燒寫)、擦除(整片擦除和按扇區(qū)擦除)以及其他操作。SST39LF/VF160的引腳圖如圖3.11所示,引腳功能如表3.2所示。當(dāng)前第21頁\共有107頁\編于星期四\21點圖3.11SST39LF/VF160的引腳圖

當(dāng)前第22頁\共有107頁\編于星期四\21點表3.2SST39LF160/SST39VF160引腳功能表引腳名稱說明CE*片選為低電平時芯片才能工作OE*輸出使能用于片內(nèi)4個組選擇A19~A0地址總線地址線WE*寫使能使能寫信號和允許列改寫DQ15~DQ0數(shù)據(jù)總線數(shù)據(jù)輸入/輸出引腳VDD電源3.3V電源VSS地地NC空空引腳

表3.2SST39LF160/SST39VF160引腳功能表當(dāng)前第23頁\共有107頁\編于星期四\21點

嵌入式應(yīng)用系統(tǒng)中,常見的NorFlash存儲器芯片單片容量有1MB、2MB、4MB、8MB、16MB等。

下面以SST39VF160為例,簡述其與S3C2410X微處理器的連線,構(gòu)成1MX16位的存儲器系統(tǒng)。SST39VF160的OE*與S3C2410X的nOE相連;WE*與S3C2410X的nWE相連;地址總線[A19~A0]與S3C2410X的地址總線[ADDR20~ADDR1]相連(注:因為是16位的存儲器系統(tǒng),半字對齊,所以S3C2410X的A0不用連線);16位的數(shù)據(jù)總線[DQ15~DQ0]與S3C2410X的低16位數(shù)據(jù)總線[XDATA15~XDATA0]相連,如圖3.12所示。

當(dāng)前第24頁\共有107頁\編于星期四\21點圖3.12SST39LF/VF160的存儲系統(tǒng)電路圖

當(dāng)前第25頁\共有107頁\編于星期四\21點2.NandFlash與S3C2410X微處理器接口電路設(shè)計

NandFlash相對于NorFlash接口復(fù)雜得多,但對于S3C2410X微處器提供了NandFlash的接口,使其在嵌入式應(yīng)用系統(tǒng)中的接口大大簡便。

例:K9F1208UDM-YCB0/K9F1208UDM-YIB0存儲器與S3C2410X微處理器接口。K9F1208UDM-YCB0/K9F1208UDM-YIB0存儲器是64M×8位的NANDFlash存儲器,數(shù)據(jù)總線寬度為8位,工作電壓為2.7V-3.6V,采作48腳TSOP封裝,系統(tǒng)的編程和擦除電壓僅需3.3V,其引腳如圖3.13所示,引腳功能如表3.3所當(dāng)前第26頁\共有107頁\編于星期四\21點表3.3U-K9F1208UDM引腳功能表

圖3.13U-K9F1208UDM引腳圖

當(dāng)前第27頁\共有107頁\編于星期四\21點

K9F1208UDM與S3C2410X微處理器接口如圖3.14所示。①K9F1208UDM的ALE和CLE引腳分別與S3C2410X的ALE和CLE引腳相連;②K9F1208UDM的WE*、RE*、CE*和R/B引腳分別與S3C2410X的Nfwe、Nfre、CLE和R/nB引腳相連;③K9F1208UDM的數(shù)據(jù)輸入輸出線[IO7~I(xiàn)O0]分別與S3C2410X的[DATA7~DATA0]引腳相連。其操作模式如表3.4所示。

當(dāng)前第28頁\共有107頁\編于星期四\21點當(dāng)前第29頁\共有107頁\編于星期四\21點圖3.14NandFlash存儲系統(tǒng)電路

當(dāng)前第30頁\共有107頁\編于星期四\21點3.3S3C2410X的串行通信設(shè)計3.3.1串行口原理及接口技術(shù)1.異步串行I/O異步串行方式是將傳輸數(shù)據(jù)的每個字符一位接一位(例如先低位、后高位)地傳送。數(shù)據(jù)的各不同位可以分時使用同一傳輸通道,因此串行I/O可以減少信號連線,最少用一對線即可進(jìn)行。圖3.15串行通信字符格式

當(dāng)前第31頁\共有107頁\編于星期四\21點2.S3C2410X串行接口

S3C2410X提供了3個通道的UART,要使其與PC機通信,必須將其信號電平轉(zhuǎn)換為RS—232C的電平。

RS—232C規(guī)定了雙極性的信號邏輯電平:-3V到-25V之間的電平表示邏輯“1”。+3V到+25V之間的電平表示邏輯“0”。因此這是一套負(fù)邏輯定義,以上標(biāo)準(zhǔn)稱為EIA電平。當(dāng)前第32頁\共有107頁\編于星期四\21點圖3.16S3C2410X與PC機的異步通信接口圖

當(dāng)前第33頁\共有107頁\編于星期四\21點3.3.2S3C2410X的UART模塊

S3C2410X與UART有關(guān)的寄存器主要有以下幾個:(1)UART線控制寄存器包括ULCON0,ULCON1和ULCON2,主要用來選擇每幀數(shù)據(jù)位數(shù)、停止位數(shù),奇偶校驗?zāi)J郊笆欠袷褂眉t外模式,如表3.5和表3.6所示。當(dāng)前第34頁\共有107頁\編于星期四\21點表3.5UART寄存器設(shè)置

表3.6UART寄存器位描述

寄存器地址讀/寫描述復(fù)位后值ULCON00x50000000R/WUART通道0線控制寄存器0x00ULCON10x50004000R/WUART通道1線控制寄存器0x00ULCON20x50008000R/WUART通道2線控制寄存器0x00ULCONn位描述復(fù)位后值保留[7]0紅外模式[6]確定是否用紅外模式:0=正常模式、1=紅外收/發(fā)模式0奇偶校驗[5:3]收/發(fā)過程中的奇偶校驗:0XX=無校驗、100=奇校驗、101=偶校驗110=強制奇偶校驗為1、110=強制奇偶校驗為0000停止位[2]收/發(fā)每幀數(shù)據(jù)的停止位:0=1位停止位、1=2位停止位0字長度[1:0]收/發(fā)數(shù)據(jù)長度:00=5位、01=6位、10=7位、11=8位00當(dāng)前第35頁\共有107頁\編于星期四\21點(2)UART控制寄存器包括UCON0,UCON1andUCON2,主要用來選擇時鐘,接收和發(fā)送中斷類型(即電平還是脈沖觸發(fā)類型),接收超時使能,接收錯誤狀態(tài)中斷使能,回環(huán)模式,發(fā)送接收模式等。如表3.7和表3.8所示。圖3.7UART控制寄存器設(shè)置

當(dāng)前第36頁\共有107頁\編于星期四\21點圖3.8UART控制寄存器器位設(shè)置

當(dāng)前第37頁\共有107頁\編于星期四\21點(3)UART錯誤狀態(tài)寄存器包括UERSTAT0,UERSTAT1andUERSTAT2,此狀態(tài)寄存器的相關(guān)位表明是否有幀錯誤或溢出錯誤發(fā)生。如表3.9和表3.10所示。當(dāng)前第38頁\共有107頁\編于星期四\21點表3.9UART錯誤狀態(tài)寄存器寄存器地址讀/寫描述復(fù)位后值UERSTAT00x50000014R通道0接收錯誤狀態(tài)寄存器0x00UERSTAT10x50004014R通道1接收錯誤狀態(tài)寄存器0x00UERSTAT20x50008014R通道2接收錯誤狀態(tài)寄存器0x00表3.10UART錯誤狀態(tài)寄存器位描述UERSTATn位描述復(fù)位后值保留[3]在接收時,0=無幀錯誤、1=有幀錯誤0幀錯誤[2]在接收數(shù)據(jù)時若發(fā)生幀錯誤,該位自動置1、否則該位為00保留[1]在接收時,0=無幀錯誤、1=有幀錯誤0溢出錯誤[0]在接收數(shù)據(jù)時若發(fā)生溢出錯誤,該位自動置1、否則該位為00當(dāng)前第39頁\共有107頁\編于星期四\21點(4)在UART模塊中有三個接收/發(fā)送狀態(tài)寄存器,包括:UTRSTAT0UTRSTAT1UTRSTAT2如表3.11和表3.12所示。當(dāng)前第40頁\共有107頁\編于星期四\21點表3.11UART接收/發(fā)送寄存器設(shè)置寄存器地址讀/寫描述復(fù)位后值UTRSTAT00x50000010R通道0收/發(fā)狀態(tài)寄存器0x00UTRSTAT10x50004010R通道1收/發(fā)狀態(tài)寄存器0x00UTRSTAT20x50008010R通道2收/發(fā)狀態(tài)寄存器0x00表3.12UART接收/發(fā)送寄存器位描述UTRSTATn位描述復(fù)位后值發(fā)送器空[2]當(dāng)發(fā)送緩沖器無有效數(shù)據(jù)發(fā)送時,該位自動置1、否則該位為00發(fā)送緩沖寄存器空[1]當(dāng)發(fā)送緩沖寄存器空時,該位自動置1、否則該位為00接收緩沖寄存器數(shù)據(jù)準(zhǔn)備就緒[0]當(dāng)接收緩沖寄存器數(shù)據(jù)準(zhǔn)備就緒時,該位自動置1、否則該位為00當(dāng)前第41頁\共有107頁\編于星期四\21點(2)在UART模塊中有3個UART發(fā)送緩沖寄存器,包括:UTXH0,UTXH1和UTXH2,UTXHn有8位發(fā)送數(shù)據(jù)。如表3.13所示。當(dāng)前第42頁\共有107頁\編于星期四\21點表3.13UART發(fā)送緩沖寄存器寄存器地址讀/寫描述復(fù)位后值UTXH00x50000020(L)0x50000023(B)寫(字節(jié))UART0傳輸緩沖寄存器UTXH10x50004020(L)0x50004023(B)寫(字節(jié))UART1傳輸緩沖寄存器UTXH20x50008020(L)0x50008023(B)寫(字節(jié))UART2傳輸緩沖寄存器表3.14UART發(fā)送緩沖寄存器功能UTXHn位描述復(fù)位后值UTDATAn[7:0]從UARTn發(fā)送數(shù)據(jù)當(dāng)前第43頁\共有107頁\編于星期四\21點(3)在UART模塊中有3個UART接收緩沖寄存器,包括URXH0,URXH1和URXH2,URXHn有8位接收數(shù)據(jù)。如表3.15所示。表3.15UART接收緩沖寄存器寄存器地址讀/寫描述復(fù)位值URXH00x50000024(L)0x50000027(B)讀(字節(jié))UART0接收緩沖寄存器URXH10x50004024(L)0x50004027(B)讀(字節(jié))UART1傳輸緩沖寄存器URXH20x50008024(L)0x50008027(B)讀(字節(jié))UART2傳輸緩沖寄存器表3.16UART接收緩沖寄存器功能URXHn位描述復(fù)位后值RXDATAn[7:0]從UARTn接收數(shù)據(jù)當(dāng)前第44頁\共有107頁\編于星期四\21點(4)UART波特率因子寄存器表3.17UART波特率因子寄存器寄存器地址讀/寫描述復(fù)位值UBRDIV00x50000028讀/寫波特率約數(shù)寄存器0UBRDIV10x50004028讀/寫波特率約數(shù)寄存器1UBRDIV20x50008028讀/寫波特率約數(shù)寄存器2表3.18UART波特率因子寄存器功能UBRDIVn位描述復(fù)位后值UBRDIV[15:0]波特率因子值UBRDIVn>0當(dāng)前第45頁\共有107頁\編于星期四\21點UART包括三個波特率因子寄存器UBRDIV0,UBRDIV1andUBRDIV2,存儲在波特率因子寄存器(UBRDIVn)中的值決定串口發(fā)送和接收的時鐘數(shù)率(波特率),計算公式如下:UBRDIVn=(int)(PCLK/(bpsx16))–1或UBRDIVn=(int)(UCLK/(bpsx16))–1例如:如果波特率是115200,PCLKor或UCLKis是40MHz,那么UBRDIVn:UBRDIVn=(int)(40000000/(115200x16))-1=(int)(21.7)-1=21-1=20當(dāng)前第46頁\共有107頁\編于星期四\21點3.3.3S3C2410X的UART模塊軟件設(shè)計1.編寫串口驅(qū)動函數(shù)基于上述的寄存器描述,即可編寫出驅(qū)動程序,其流程如圖3.17和圖3.18所示,其源程序代碼詳見本書所帶光盤,在ADS1.2下編譯調(diào)試通過。當(dāng)前第47頁\共有107頁\編于星期四\21點當(dāng)前第48頁\共有107頁\編于星期四\21點圖3.19主函數(shù)框圖2.在主函數(shù)中實現(xiàn)將從串口0接收到的數(shù)據(jù)發(fā)送到串口0(main.c),圖3.19所示。當(dāng)前第49頁\共有107頁\編于星期四\21點//main.c函數(shù)//說明:Cmain函數(shù),ucos-ii初始化等定義#defineU8unsignedchar#include<string.h>#include<stdio.h>#defineTRUE 1#defineFALSE 0#pragmaimport(__use_no_semihosting_swi)//ensurenofunctionsthatusesemihosting#definerUTRSTAT0 (*(volatileunsigned*)0x50000010)#definerUTRSTAT1 (*(volatileunsigned*)0x50004010)#defineWrUTXH0(ch) (*(volatileunsignedchar*)0x50000020)=(unsignedchar)(ch)#defineWrUTXH1(ch) (*(volatileunsignedchar*)0x50004020)=(unsignedchar)(ch)#defineRdURXH0() (*(volatileunsignedchar*)0x50000024)#defineRdURXH1() (*(volatileunsignedchar*)0x50004024)當(dāng)前第50頁\共有107頁\編于星期四\21點voidUart_SendByten(int,U8);charUart_Getchn(char*Revdata,intUartnum,inttimeout);voidARMTargetInit(void);voidhudelay(inttime);intmain(void){charc1[1];charerr; ARMTargetInit();//dotarget(uHALbasedARMsystem)initialisation// while(1) {Uart_SendByten(0,0xa);//換行 Uart_SendByten(0,0xd);//回車 err=Uart_Getchn(c1,0,0); //從串口采集數(shù)據(jù) Uart_SendByten(0,c1[0]); //顯示采集的數(shù)據(jù) } }當(dāng)前第51頁\共有107頁\編于星期四\21點voidUart_SendByten(intUartnum,U8data)//okericrong{ if(Uartnum==0){ while(!(rUTRSTAT0&0x4));//WaituntilTHRisempty. hudelay(10); WrUTXH0(data); } else{ while(!(rUTRSTAT1&0x4));//WaituntilTHRisempty. hudelay(10); WrUTXH1(data);} } 當(dāng)前第52頁\共有107頁\編于星期四\21點charUart_Getchn(char*Revdata,intUartnum,inttimeout){ if(Uartnum==0){ while(!(rUTRSTAT0&0x1));//Receivedataread *Revdata=RdURXH0(); returnTRUE; } else{ while(!(rUTRSTAT1&0x1));//Receivedataread *Revdata=RdURXH1(); returnTRUE; }} 當(dāng)前第53頁\共有107頁\編于星期四\21點3.4S3C2410X的鍵盤及LED驅(qū)動設(shè)計

S3C2410X的鍵盤采用AVR單片機mega8實現(xiàn),較為簡單,LED驅(qū)動采用ZLG7290進(jìn)行設(shè)計,本節(jié)將針對ZLG7290進(jìn)行詳細(xì)描述。3.4.1LED驅(qū)動原理及功能

ZLG7290是一片具有串行接口的,可同時驅(qū)動8位共陰式數(shù)碼管(或64只獨立LED)的智能顯示驅(qū)動芯片,該芯片同時還可連接多達(dá)64鍵的鍵盤矩陣,單片即可完成LED顯示﹑鍵盤接口的全部功能。當(dāng)前第54頁\共有107頁\編于星期四\21點其特點如下:●I2C串行接口提供鍵盤中斷信號方便與處理器接口●可驅(qū)動8位共陰數(shù)碼管或64只獨立LED和64個按鍵●可控掃描位數(shù)可控任一數(shù)碼管閃爍●提供數(shù)據(jù)譯碼和循環(huán)移位段尋址等控制●8個功能鍵可檢測任一鍵的連擊次數(shù)●無需外接元件即直接驅(qū)LED可擴展驅(qū)動電流和驅(qū)動電壓●提供工業(yè)級器件多種封裝形式PDIP24SO24ZLG7290引腳功能如表3.19所示。當(dāng)前第55頁\共有107頁\編于星期四\21點表3.19引腳說明引腳號引腳名稱引腳屬性引腳描述13、12、21、22、3~6Dig7~Dig0輸入/輸出LED顯示位驅(qū)動及鍵盤掃描線10~7、2、1、24、23segH~segA輸入/輸出LED顯示位驅(qū)動及鍵盤掃描線20SDA輸入/輸出I2C總線接口數(shù)據(jù)/地址線19SCL輸入/輸出I2C總線接口時鐘線14INT*輸出中斷輸出線,低電平有效15RES*輸入復(fù)位輸入線,低電平有效17OSC1輸入連接晶體以產(chǎn)生內(nèi)部時鐘18OSC2輸出16VCC電源電源正(3.5V~5.5V)11GND地電源地當(dāng)前第56頁\共有107頁\編于星期四\21點1.鍵盤部分

ZLG7290可采樣64個按鍵或傳感器可檢測每個按鍵的連擊次數(shù),其基本功能如下:(1)鍵盤去抖動處理當(dāng)鍵被按下和放開時可能會出現(xiàn)電平狀態(tài)反復(fù)變化稱作鍵盤抖動若不作處理會引起按鍵盤命令錯誤所以要進(jìn)行去抖動處理以讀取穩(wěn)定的鍵盤狀態(tài)為準(zhǔn)。(2)雙鍵互鎖處理當(dāng)有兩個以上按鍵被同時按下時ZLG7290只采樣優(yōu)先級高的按鍵優(yōu)先順序為S1>S2>…>S64如同時按下S2和S18時采樣到S2。當(dāng)前第57頁\共有107頁\編于星期四\21點(3)連擊鍵處理當(dāng)某個按鍵按下時輸出一次鍵值后如果該按鍵還未釋放該鍵值連續(xù)有效就像連續(xù)壓按該鍵一樣這種功能稱為連擊連擊次數(shù)計數(shù)器RepeatCnt可區(qū)別出單擊某些功能不允許連擊如開關(guān)或連擊判斷連擊次數(shù)可以檢測被按時間以防止某些功能誤操作如連續(xù)按5秒經(jīng)入?yún)?shù)設(shè)置狀態(tài)。(4)功能鍵處理功能鍵能實現(xiàn)2個以上按鍵同時按下來擴展按鍵數(shù)目或?qū)崿F(xiàn)特殊功能。當(dāng)前第58頁\共有107頁\編于星期四\21點2.顯示部分

在每個顯示刷新周期ZLG7290按照掃描位數(shù)寄存器ScanNum指定的顯示位數(shù)N把顯示緩存DpRam0DpRamN的內(nèi)容按先后循序送入LED驅(qū)動器實現(xiàn)動態(tài)顯示減少N值可提高每位顯示掃描時間的占空比以提高LED亮度顯示緩存中的內(nèi)容不受影響修改閃爍控制寄器。FlashOnOff可改變閃爍頻率和占空比亮和滅的時間ZLG7290提供兩種控制方式寄存器映象控制和命令解釋控制如上述對顯示部分的控制寄存器映象控制是指直接訪問底層寄存器實現(xiàn)基本控制功能這些寄存器須字節(jié)操作命令解釋控制是指通過解釋命令緩沖區(qū)CmdBuf0~CmdBuf1中的指令間接訪問底層寄存器實現(xiàn)擴展控制功能如實現(xiàn)寄存器的位操作對顯示緩存循環(huán)移位對操作數(shù)譯碼等操作請參考指令詳解部分。當(dāng)前第59頁\共有107頁\編于星期四\21點3.寄存器詳解●系統(tǒng)狀態(tài)部分(1)系統(tǒng)寄存器(SystemReg):地址00H復(fù)位值11110000B系統(tǒng)寄存器保存ZLG7290系統(tǒng)狀態(tài)并可對系統(tǒng)運行狀態(tài)進(jìn)行配置其功能分位描述如下:KeyAvi(SystemReg.0)置1時表示有效的按鍵動作普通鍵的單擊連擊和功能鍵狀態(tài)變化/INT引腳信號有效變?yōu)榈碗娖角?表示無按鍵動作/INT引腳信號無效變?yōu)楦咦钁B(tài)有效的按鍵動作消失后或讀Key后KeyAvi位自動清0。當(dāng)前第60頁\共有107頁\編于星期四\21點●鍵盤部分(2)鍵值寄存器(Key):地址01H復(fù)位值00HKey表示被壓按鍵的鍵值當(dāng)Key=0時表示沒有鍵被壓按。(3)連擊次數(shù)計數(shù)器(RepeatCnt):地址02H復(fù)位值00HRepeatCnt=0時表示單擊鍵RepeatCnt大于0時表示鍵的連擊次數(shù)用于區(qū)別出單擊鍵或連擊鍵判斷連擊次數(shù)可以檢測被按時間。(4)功能鍵寄存器(FunctionKey):地址03H復(fù)位值0FFHFunctionKey對應(yīng)位的值=0表示對應(yīng)功能鍵被壓按FunctionKey.7~FunctionKey.0對應(yīng)S64~S57?!衩罱涌诓糠郑?)命令緩沖區(qū)CmdBuf0~CmdBuf1地址07H~08H復(fù)位值00H~00H用于傳輸指令。當(dāng)前第61頁\共有107頁\編于星期四\21點●顯示部分(6)閃爍控制寄存器(FlashOnOff):地址0CH,復(fù)位值0111B/0111B,高4位表示閃爍時亮的時間,低4位表示閃爍時滅的時間,改變其值同時也改變了閃爍頻率,也能改變亮和滅的占空比,F(xiàn)lashOnOff的1個單位相當(dāng)于150~250ms(亮和滅的時間范圍為1~160000B相當(dāng)1個時間)單位,所有象素的閃爍頻率和占空比相同。(7)掃描位數(shù)寄存器(ScanNum):地址0DH復(fù)位值7用于控制最大的掃描顯示位數(shù)有效范圍為0~7對應(yīng)的顯示位數(shù)為1~8減少掃描位數(shù)可提高每位顯示掃描時間的占空比以提高LED亮度不掃描顯示的顯示緩存寄存器則保持不變?nèi)鏢canNum=3時只顯示DpRam0~DpRam3的內(nèi)容。當(dāng)前第62頁\共有107頁\編于星期四\21點(8)顯示緩存寄存器(DpRam0~DpRam7):地址10H~17H,復(fù)位值00H~00H,緩存中一位置1表示該像素亮DpRam7~DpRam0的顯示內(nèi)容對應(yīng)Dig7~Dig0引腳。當(dāng)前第63頁\共有107頁\編于星期四\21點4.指令詳解

ZLG7290提供兩種控制方式:寄存器映象控制和命令解釋控制。寄存器映象控制是指直接訪問底層寄存器(除通信緩沖區(qū)外的寄存器),實現(xiàn)基本控制功能。請參考寄存器詳解部分。命令解釋控制是指通過解釋命令緩沖區(qū)(CmdBuf0~CmdBuf1)中的指令,間接訪問底層寄存器,實現(xiàn)擴展控制功能。如實現(xiàn)寄存器的位操作,對顯示緩存循環(huán)移位、對操作數(shù)譯碼等操作。一個有效的指令由一字節(jié)操作碼和數(shù)個操作數(shù)組成,只有操作碼的指令稱為純指令,帶操作數(shù)的指令稱為復(fù)合指令,一個完整的指令須在一個I2C幀中(起始信號和結(jié)束信號間)連續(xù)傳輸?shù)矫?CmdBuf0~CmdBuf1)中。否則會引起錯誤,ZLG7290的控制指令分為二大類:純指令和帶有數(shù)據(jù)的指令。當(dāng)前第64頁\共有107頁\編于星期四\21點●純指令(1)左移指令命令緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0CmdBuf00001N3N2N1N0

該指令使與ScanNum相對應(yīng)的顯示數(shù)據(jù)和顯示屬性(閃爍)自右向左移動N位((N3~N0)+1),移動后右邊N位無顯示,而與ScanNum不相關(guān)的顯示數(shù)據(jù)和顯示屬性則不受影響。例DpRamB~DpRam0=“87654321”,其中4閃爍,ScanNum=5(“87”不顯示)。執(zhí)行指令00010001B后DpRamB~DpRam0=“4321”?!?”閃爍高兩位和低兩位無顯示。當(dāng)前第65頁\共有107頁\編于星期四\21點(2)右移指令通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0ComBuf00010N3N2N1N0與左移指令類似,只是移動方向為自左向右,移動后左邊N位((N3~N0)+1)無顯示。例DpRamBDpRam0=“87654321”。其中“3”閃爍ScanNum=5(“87”不顯示),執(zhí)行指令00100001B后DpRamB~DpRam0=“6543”?!?”閃爍,高四位無顯示。當(dāng)前第66頁\共有107頁\編于星期四\21點(3)循環(huán)左移指令通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0ComBuf00011N3N2N1N0

與左移指令類似,不同的是在每移動一位后,原最左位的顯示數(shù)據(jù)和屬性轉(zhuǎn)移到最右位。例DpRamB~DpRam0=“87654321”,其中“4”閃爍,ScanNum=5(“87”不顯示),執(zhí)行指令00110001B后DpRamB~DpRam0=“432165”。“4”閃爍,高兩位無顯示。當(dāng)前第67頁\共有107頁\編于星期四\21點(4)循環(huán)右移指令通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0ComBuf00100N3N2N1N0

與循環(huán)左移指令類似,只是移動方向相反。例DpRamB~DpRam0=“87654321”,其中”3”閃爍,ScanNum=5(”87”不顯示)。執(zhí)行指令01000001B后DpRamB~DpRam0=“216543”?!?”閃爍。(5)SystemReg寄存器位尋址指令通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0ComBuf00101OnS2S1S0當(dāng)On=1時第S(S2~S0)位置1;當(dāng)On=0時第S位清0。當(dāng)前第68頁\共有107頁\編于星期四\21點●復(fù)合指令(1)顯示像素尋址指令表3.20顯示像素尋址指令

通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0ComBuf000000001ComBuf1On0S5S4S3S2S1S0

當(dāng)On=1時第S(S5~S0)點像素亮(置1),當(dāng)On=0時第S點像素滅(清0),該指令用于點亮關(guān)閉數(shù)碼管中某一段或LED矩陣中某一特定的LED,該指令受ScanNum的內(nèi)容影響,S6~S0為像素地址有效范圍從00H~3FH,無效的地址不會產(chǎn)生任何作用,像素位地址映象如下:●復(fù)合指令(1)顯示像素尋址指令表3.20顯示像素尋址指令當(dāng)前第69頁\共有107頁\編于星期四\21點表3.21像素位地址映像像素地址SaSbScSdSeSfSgShDpRam000H01H02H03H04H05H06H07HDpRam108H09H0AH0BH0CH0DH0EH0FH…DpRam738H39H3AH3BH3CH3DH3EH3FH(2)按位下載數(shù)據(jù)且譯碼指令表3.22譯碼指令

通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0CmdBuf00110A3A2A1A0CmdBuf1DPFlash0D4D3D2D1D0當(dāng)前第70頁\共有107頁\編于星期四\21點其中A3~A0為顯示緩存編號(范圍為:0000B~0111B對應(yīng)DpRam0~DpRam7,無效的編號不會產(chǎn)生任何作用),DP=1時點亮該位小數(shù)點,F(xiàn)lash=1時該位閃爍顯示,F(xiàn)lash=0時該位正常顯示,D4~D0為要顯示的數(shù)據(jù),按以下表規(guī)則進(jìn)行譯碼。當(dāng)前第71頁\共有107頁\編于星期四\21點表3.23譯碼當(dāng)前第72頁\共有107頁\編于星期四\21點(3)閃爍控制指令表3.24閃爍控制指令

通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0CmdBuf00111××××CmdBuf1F7F6F5F4F3F2F1F0

當(dāng)Fn=1時,該位閃爍(n的范圍為:0~7,對應(yīng)0~7位),當(dāng)Fn=0,時該位不閃爍,該指令會改變所有像素的閃爍屬性。例執(zhí)行指令01110000B,00000000B后所有數(shù)碼管不閃爍。當(dāng)前第73頁\共有107頁\編于星期四\21點5.通信接口

ZLG7290的I2C接口傳輸速率可達(dá)32kbit/s,容易與處理器接口,并提供鍵盤中斷信號,提高主處理器時間效率,ZLG7290的從地址slaveaddress為70H(01110000B)有效的按鍵動作,普通鍵的單擊連擊和功能鍵狀態(tài)變化都會令系統(tǒng)寄存器SystemReg的KeyAvi位置1,/INT引腳信號有效變?yōu)榈碗娖剑脩舻逆I盤處理程序可由/INT引腳低電平中斷觸發(fā),以提高程序效率,也可以不采樣/INT引腳信號,節(jié)省系統(tǒng)的I/O數(shù)而輪詢系統(tǒng)寄存器的KeyAvi位,要注意讀鍵值寄存器會令KeyAvi位清0,并會令/INT引腳信號無效。為確保某個有效的按鍵動作,所有參數(shù)寄存器的同步性,建議利用I2C通信的自動增址功能連續(xù)讀RepeatCntFunctionKey和Key寄存器。

當(dāng)前第74頁\共有107頁\編于星期四\21點但用戶無需擔(dān)心寄存器的同步性問題,應(yīng)為鍵參數(shù)寄存器變化速度較緩慢,典型為250ms,最快9ms。ZLG7290內(nèi)可通過I2C總線訪問的寄存器地址范圍為00H17H,任一寄存器都可按字節(jié)直接讀寫,也可以通過命令接口間接讀寫或按位讀寫,請參考指令詳解部分,支持自動增址功能,訪問一寄存器后,寄存器子地址subaddress自動加一和地址翻轉(zhuǎn)功能,訪問最后一寄存器子地址17H后,寄存器子地址翻轉(zhuǎn)為00HZLG7290的控制和狀態(tài)查詢?nèi)慷际峭ㄟ^讀/寫寄存器實現(xiàn)的,用戶只需象讀寫24C02內(nèi)的單元一樣,即可實現(xiàn)對ZLG7290的控制,關(guān)于I2C總線訪問的細(xì)節(jié)請參考I2C總線規(guī)范。當(dāng)前第75頁\共有107頁\編于星期四\21點3.4.2鍵盤驅(qū)動

鍵盤驅(qū)動程序詳見本書所附光盤,鍵盤掃描碼是通過中斷的方式獲得的,當(dāng)設(shè)置好上位機的IIC地址以后,單片機(MEGA8)檢測到鍵盤變化時,會主動發(fā)送鍵盤掃描碼。這時ARM將產(chǎn)生IIC中斷,在中斷服務(wù)程序中獲得鍵盤掃描碼,鍵盤按下時發(fā)送0x80|scancode,抬起時發(fā)送scancode,scancode即為鍵盤掃描碼,再通過GetKey()函數(shù)映射成可以在led上顯示的數(shù)據(jù).關(guān)于單片機(MEGA8)的使用有文檔說明,下面主要說明鍵盤中斷的流程.本實驗在中斷前進(jìn)行了兩步初始化:當(dāng)前第76頁\共有107頁\編于星期四\21點首先是對中斷中用到一個結(jié)構(gòu)體的設(shè)置,結(jié)構(gòu)體中各成員變量的意義見結(jié)構(gòu)體的定義,這一步是在函數(shù)ISR_Init()中完成的,這個函數(shù)在ISR.C中,主要是對中斷中用到的寄存器進(jìn)行初始化,這些寄存器包括:INTMOD,INTMSK,INTSUBMSK,SRCPND,INTPND。其次是在主函數(shù)中完成對鍵盤中斷服務(wù)函數(shù)和中斷偏移量(INTOFFSET)的關(guān)聯(lián)及對單片機(MEGA8)工作方式的設(shè)置,其中包括對IIC總線的初始化,這是在函數(shù)Key_init()中完成的,此函數(shù)在KeyBoard.c中。中斷服務(wù)函數(shù)和中斷偏移量(INTOFFSET)的關(guān)聯(lián)是通過函數(shù)SetISR_Interrupt(IRQ_KBD,Key_ISR,NULL)來完成的。有了這一步的關(guān)聯(lián)以后當(dāng)查詢到中斷偏移量是IRQ_KBD時就會根據(jù)此偏移量調(diào)用鍵盤中斷服務(wù)函數(shù)Key_ISR。當(dāng)前第77頁\共有107頁\編于星期四\21點有了上面兩步的初始化工作以后,當(dāng)有鍵盤按下時就會發(fā)生IRQ中斷,過程是先跳轉(zhuǎn)到startup.s中的bIRQ_Handler處,然后保存寄存器r0-r12,lr跳轉(zhuǎn)到函數(shù)ISR_IrqHandler中,在這個函數(shù)中查詢中斷向量的偏移量,根據(jù)這個偏移量調(diào)用相應(yīng)的中斷服務(wù)函數(shù)。執(zhí)行完中斷服務(wù)函數(shù)后再跳轉(zhuǎn)回startup.s中的LDMFDsp!,{r0-r12,lr}處,恢復(fù)執(zhí)行中斷服務(wù)函數(shù)之前的狀態(tài),繼續(xù)執(zhí)行發(fā)生中斷服務(wù)前的下一條指令.至此中斷過程結(jié)束,在中斷服務(wù)函數(shù)中獲得鍵盤的掃描碼,再通過GetKey()函數(shù)映射成led可以顯示的數(shù)據(jù)。其源程序代碼詳見本書所帶光盤,在ADS1.2下編譯調(diào)試通過。當(dāng)前第78頁\共有107頁\編于星期四\21點3.4.3鍵盤及LED驅(qū)動軟件設(shè)計(KeyBoard.c)1.定義鍵盤映射表:#include"../inc/reg2410.h"#include"../inc/lib.h"#include"../inc/macro.h"#include"../inc/isr.h"#include"../inc/KeyBoard.h"#include"../inc/iic.h"#include"../inc/Uart.h"#include"inc/lcd.h"#include<stdio.h>#include<string.h>當(dāng)前第79頁\共有107頁\編于星期四\21點#defineKBDTYPE_ZLG7290 1#defineKBDTYPE_MCUIIC 2#defineKEYBOARD_TYPE KBDTYPE_MCUIIC#defineKEY_DOWN (1ul<<31)#include"../inc/i2c-tomega8.h"#defineIRQ_KBD IRQ_IIC#defineMCU_IICCON (IICCON_ACKEN|IICCON_INTR|IICCON_CLKPRE(7))unsignedshortmcukey,tempmcukey,up,count;當(dāng)前第80頁\共有107頁\編于星期四\21點staticvoidKey_ISR(intvector,void*data){staticintframecnt=0;U8status,kdata;status=rIICSTAT;if((status&IICSTAT_MODE_MSK)!=IICSTAT_MODE_SR)return;kdata=rIICDS;switch(framecnt){case0:if(status&IICSTAT_SLAVEADDR){ framecnt++;}break;當(dāng)前第81頁\共有107頁\編于星期四\21點case1:if(GetI2C_Devtype(kdata)!=DTYPE_MKEYB){ framecnt=0;} framecnt++; break; case2: mcukey=kdata; if(mcukey&0x80) {framecnt=0;break;}

當(dāng)前第82頁\共有107頁\編于星期四\21點elseif(!(mcukey&0x80)){up=1; count=1; tempmcukey=mcukey; }

framecnt=0; break; }rIICCON&=~IICCON_INTPEND;}當(dāng)前第83頁\共有107頁\編于星期四\21點voidKey_init(void){ I2C_controli2c_ctrl; IIC_init(); Set_IIC_mode(MCU_IICCON,NULL); i2c_ctrl.cmd=CMD_MST_ADDR; i2c_ctrl.ctrl=I2COWNER_ADDRESS; IIC_Send(MEGA8_I2CADDRESS,(constchar*)&i2c_ctrl,sizeof(i2c_ctrl)); i2c_ctrl.cmd=CMD_CTRL; i2c_ctrl.ctrl=CTRL_MKEn; IIC_Send(MEGA8_I2CADDRESS,(constchar*)&i2c_ctrl,sizeof(i2c_ctrl));INTS_OFF(); SetISR_Interrupt(IRQ_KBD,Key_ISR,NULL);INTS_ON();}當(dāng)前第84頁\共有107頁\編于星期四\21點voidKey_init_restor(void){ IIC_init(); Set_IIC_mode(MCU_IICCON,NULL);}當(dāng)前第85頁\共有107頁\編于星期四\21點unsignedcharGetKey(){unsignedcharscankey; unsignedcharKeyBoard_Map[]={0,0,0x9e,0,0,0xe0,0x66,0x60,0,0,0x8e ,14,0,0xfe,0xb6,0xda,0xfc,0x1c,0x6e,0,0,0xf6,0xbe,0xf2,0x3e,0,0,0,0,0xce,0,0x7c,0,1,0,0,17,2,0,0,0,4,0,6,0,5,0,0,0,7,0,9,15,8,0,0,0,0,0,0,0,0,0,0};//64,鍵值映射表 當(dāng)前第86頁\共有107頁\編于星期四\21點while(1){ if((up==1)&&(count==1)){up=0;count=0;scankey=KeyBoard_Map[tempmcukey];break;}elsecontinue;}returnscankey;}當(dāng)前第87頁\共有107頁\編于星期四\21點2.主函數(shù),將按鍵值在數(shù)碼管上顯示,流程圖如圖3.20所示。圖3.20主函數(shù)當(dāng)前第88頁\共有107頁\編于星期四\21點//main()主函數(shù)#include"inc/macro.h"#include"inc/KeyBoard.h"#include<string.h>#include<stdio.h>#include"inc/Uart.h"#include"inc/lcd.h"#include"inc/reg2410.h"#include"inc/iic.h"#include"inc/uhal.h"#include"inc/lib.h"#pragmaimport(__use_no_semihosting_swi)//ensurenofunctionsthatusesemihosting當(dāng)前第89頁\共有107頁\編于星期四\21點intmain(void){U8key; ARMTargetInit();//dotarget(uHALbasedARMsystem)initialisation// Key_init(); while(1) {key=GetKey(); Led_IIC_init(); hudelay(100);IIC_Write(0x70,0x0d,0);IIC_Write(0x70,0x10,key);hudelay(2000);Key_init_restor();hudelay(100); } return0; }當(dāng)前第90頁\共有107頁\編于星期四\21點3.5S3C2410X的D/A功能應(yīng)用開發(fā)3.5.1D/A轉(zhuǎn)換器類型

DA轉(zhuǎn)換器的內(nèi)部電路構(gòu)成無太大差異,一般按輸出是電流還是電壓、能否作乘法運算等進(jìn)行分類。大多數(shù)DA轉(zhuǎn)換器由電阻陣列和n個電流開關(guān)(或電壓開關(guān))構(gòu)成。按數(shù)字輸入值切換開關(guān),產(chǎn)生比例于輸入的電流(或電壓)。1.電壓輸出型(如TLC5620)電壓輸出型DA轉(zhuǎn)換器雖有直接從電阻陣列輸出電壓的,但一般采用內(nèi)置輸出放大器以低阻抗輸出。直接輸出電壓的器件僅用于高阻抗負(fù)載,由于無輸出放大器部分的延遲,故常作為高速DA轉(zhuǎn)換器使用。當(dāng)前第91頁\共有107頁\編于星期四\21點2.電流輸出型(如THS5661A)

電流輸出型DA轉(zhuǎn)換器很少直接利用電流輸出,大多外接電流—電壓轉(zhuǎn)換電路得到電壓輸出,轉(zhuǎn)換有兩種方法:一是只在輸出引腳上接負(fù)載電阻而進(jìn)行電流—電壓轉(zhuǎn)換,二是外接運算放大器。用負(fù)載電阻進(jìn)行電流—電壓轉(zhuǎn)換的方法,雖可在電流輸出引腳上出現(xiàn)電壓,但必須在規(guī)定的輸出電壓范圍內(nèi)使用,而且由于輸出阻抗高,所以一般外接運算放大器使用。此外,大部分CMOSDA轉(zhuǎn)換器當(dāng)輸出電壓不為零時不能正確動作,所以必須外接運算放大器。當(dāng)外接運算放大器進(jìn)行電流電壓轉(zhuǎn)換時,則電路構(gòu)成基本上與內(nèi)置放大器的電壓輸出型相同,這時由于在DA轉(zhuǎn)換器的電流建立時間上加入了運算放入器的延遲,使響應(yīng)變慢。此外,這種電路中運算放大器因輸出引腳的內(nèi)部電容而容易起振,有時必須作相位補償。當(dāng)前第92頁\共有107頁\編于星期四\21點3.乘算型(如AD7533)

DA轉(zhuǎn)換器中有使用恒定基準(zhǔn)電壓的,也有在基準(zhǔn)電壓輸入上加交流信號的,后者由于能得到數(shù)字輸入和基準(zhǔn)電壓輸入相乘的結(jié)果而輸出,因而稱為乘算型DA轉(zhuǎn)換器。乘算型DA轉(zhuǎn)換器一般不僅可以進(jìn)行乘法運算,而且可以作為使輸入信號數(shù)字化地衰減的衰減器及對輸入信號進(jìn)行調(diào)制的調(diào)制器使用。4.一位DA轉(zhuǎn)換器

一位DA轉(zhuǎn)換器與前述轉(zhuǎn)換方式全然不同,它將數(shù)字值轉(zhuǎn)換為脈沖寬度調(diào)制或頻率調(diào)制的輸出,然后用數(shù)字濾波器作平均化而得到一般的電壓輸出(又稱位流方式),用于音頻等場合。當(dāng)前第93頁\共有107頁\編于星期四\21點3.5.2MAX504與S3C2410X的接口D/A轉(zhuǎn)換器的主要技術(shù)指標(biāo):●分辯率(Resolution)指最小模擬輸出量(對應(yīng)數(shù)字量僅最低位為‘1’)與最大量(對應(yīng)數(shù)字量所有有效位為‘1’)之比?!窠r間(SettingTime)是將一個數(shù)字量轉(zhuǎn)換為穩(wěn)定模擬信號所需的時間,也可以認(rèn)為是轉(zhuǎn)換時間。DA中常用建立時間來描述其速度,而不是AD中常用的轉(zhuǎn)換速率。一般地電流輸出DA建立時間較短,電壓輸出DA則較長。其他指標(biāo)還有線性度(Linearity),轉(zhuǎn)換精度,溫度系數(shù)/漂移。當(dāng)前第94頁\共有107頁\編于星期四\21點

下面以D/A轉(zhuǎn)換芯片為例說明其與S3C2410X的接

溫馨提示

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

評論

0/150

提交評論