《嵌入式系統(tǒng)輸入輸出設(shè)備接口技術(shù)》由會(huì)員分享,可在線閱讀,更多相關(guān)《嵌入式系統(tǒng)輸入輸出設(shè)備接口技術(shù)(17頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第3章 輸入/輸出設(shè)備接口技術(shù),1、通用I/O端口結(jié)構(gòu)(GPIO),3.1 通用I/O端口,GPIO端口: PORT數(shù)據(jù)寄存器、DDR數(shù)據(jù)方向寄存器。,輸出:置“1”,輸出數(shù)據(jù);,DDR方向寄存器:,輸入:置“0”,輸入數(shù)據(jù)。,117個(gè)GPIO端口: 1個(gè)23位的Port A; 2個(gè)11位的Port B、H; 3個(gè)16位的Port C、D、E、G; 1個(gè) 8位的Port F。,2、接口電路 通過(guò)端口D的GPD1、GPD0控制發(fā)光二極管輪流閃爍。,端口D控制寄存器,GPDCON= GPDCON,GPDDAT= GPDDAT,GPDCON= GPDCON,GPDDAT= GPDDAT,例
2、題1,判斷D端口的輸入/輸出狀態(tài)及高低電平,3.2 A/D轉(zhuǎn)換器接口,S3C2410A包含 一個(gè)8通道的A/D轉(zhuǎn)換器。 10位分辨率。 采樣電壓范圍是03.3V。,討論1 當(dāng)參考電壓為3.3V時(shí),輸入電壓為2.0V,采集的數(shù)字量為多少?,1、ADC內(nèi)部結(jié)構(gòu)及ADC控制器相關(guān)寄存器,A/D轉(zhuǎn)換器和觸摸屏接口電路,(1)ADC控制寄存器(ADCCON),A/D轉(zhuǎn)換的轉(zhuǎn)換時(shí)間計(jì)算。 例,PCLK為50MHz,PRESCALER=49; 所有10位轉(zhuǎn)換時(shí)間為 50 MHz/(49+1)=1MHz 轉(zhuǎn)換時(shí)間為1/(1M/5 cycles)=5us 注意: 完成一次A/D轉(zhuǎn)換需要5個(gè)時(shí)鐘周期。A/D
3、轉(zhuǎn)換器的最 大工作時(shí)鐘為2.5MHz,所以最大的采樣率可以達(dá)到 500kbit/s。,1、要使A/D 轉(zhuǎn)換器正常啟動(dòng),預(yù)分頻因子取50,應(yīng)向ADCCON寫入什么控制字?,2、要啟動(dòng)A/D 轉(zhuǎn)換器讀第2號(hào)通道數(shù)據(jù)啟動(dòng)(預(yù)分頻因子取16),應(yīng)向ADCCON寫入什么控制字?,例題2,(2)ADC觸摸屏控制寄存器(ADCTSC),在正常A/D轉(zhuǎn)換時(shí),AUTO_PST和XY_PST都置成0即可,其他各位與觸摸屏有關(guān),不需要進(jìn)行設(shè)置。,(3)ADC轉(zhuǎn)換數(shù)據(jù)寄存器(ADCDAT0和ADCDAT1),在觸摸屏應(yīng)用中,分別使用ADCDAT0和ADCDAT1保存X位置和Y位置的轉(zhuǎn)換數(shù)據(jù)。對(duì)于正常的A/D轉(zhuǎn)換,使用
4、ADCDAT0來(lái)保存轉(zhuǎn)換后的數(shù)據(jù)。,(4)ADC啟動(dòng)延時(shí)寄存器(ADCDLY),思考1 如何判斷ADC轉(zhuǎn)換完成? 如何啟動(dòng)ADC轉(zhuǎn)換?,A/D轉(zhuǎn)換的數(shù)據(jù)可以通過(guò)中斷或查詢的方式來(lái)訪問(wèn),如果是中斷方式,則全部的轉(zhuǎn)換時(shí)間(從A/D轉(zhuǎn)換的開始到數(shù)據(jù)讀出)要更長(zhǎng)。 如果是查詢方式,則要檢測(cè)ADCCON15(轉(zhuǎn)換結(jié)束標(biāo)志位)來(lái)確定從ADCDAT寄存器讀取的數(shù)據(jù)是否是最新的轉(zhuǎn)換數(shù)據(jù)。 A/D轉(zhuǎn)換開始的一種方式是將ADCCON0置為1, 另一種方式是將ADCCON1置為1,這時(shí)只要有讀轉(zhuǎn)換數(shù)據(jù)的信號(hào),A/D轉(zhuǎn)換就會(huì)同步開始。,A/D轉(zhuǎn)換的流程圖,2、ADC接口編程,例題3、ADC轉(zhuǎn)換,定義與AD轉(zhuǎn)換相關(guān)的寄
5、存器 定義如下: #define rADCCON(*(volatile unsigned*)0 x58000000) //ADC控制寄存器 #define rADCTSC(*(volatile unsigned*)0 x58000004) //ADC觸摸屏控制寄存器 #define rADCDLY(*(volatile unsigned*)0 x58000008) //ADC啟動(dòng)或間隔延時(shí)寄存器 #define rADCDAT0(*(volatile unsigned*)0 x5800000c)//ADC轉(zhuǎn)換數(shù)據(jù)寄存器0 #define rADCDAT1(*(volati1e unsigned
6、*)0 x58000010)//ADC轉(zhuǎn)換數(shù)據(jù)寄存器 對(duì)A/D轉(zhuǎn)換器進(jìn)行初始化 程序中的參數(shù)ch表示所選擇的通道號(hào),程序如下: void AD_Init(unsigned char ch) rADCDLY=100; //ADC啟動(dòng)或間隔延時(shí) rADCTSC=0; //選擇ADC模式 rADCCON=(1<<14)|(49<<6)|(ch<<3)|(0<<2)|(0<<1)|(0); //設(shè)置ADC控制寄存器 ,獲取A/D的轉(zhuǎn)換值 程序中的參數(shù)ch表示所選擇的通道號(hào),程序如下: int Get_AD(unsigned char ch) int i; int val= 0; i f (ch7) return 0; //通道不能大于7 for(i=0; i 4); //為轉(zhuǎn)換準(zhǔn)確,除以16取均值 ,例題4、 預(yù)分頻值為32,采集07個(gè)信道,進(jìn)行ADC轉(zhuǎn)換。,