使用GPIO控制SPI接口的AD芯片_第1頁(yè)
使用GPIO控制SPI接口的AD芯片_第2頁(yè)
使用GPIO控制SPI接口的AD芯片_第3頁(yè)
使用GPIO控制SPI接口的AD芯片_第4頁(yè)
使用GPIO控制SPI接口的AD芯片_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

使用GPIO控制SPI接口的AD芯片在實(shí)際應(yīng)用中,英創(chuàng)的嵌入式工控主板經(jīng)常需要與客戶(hù)外部擴(kuò)展的AD芯片相連。一般來(lái)講AD單元的擴(kuò)展有兩種方法,一種是通過(guò)英創(chuàng)工控主板的精簡(jiǎn)ISA總線擴(kuò)展,另一種則是通過(guò)同步串口的方法,如SPI、I2C接口,與AD連接。前一種方法所涉及的AD芯片一般具有并行接口,如MAX197等;而后一種方法的AD芯片則帶有SPI或I2C接口。采用SPI或I2C接口的AD芯片,可使芯片的管腳數(shù)大幅減少,進(jìn)一步使芯片本身的尺寸也大幅減小,從而大大擴(kuò)展了這些AD芯片的應(yīng)用范圍。為了方便廣大客戶(hù)在英創(chuàng)的嵌入式工控主板上快速應(yīng)用這類(lèi)AD芯片,本文將介紹如何通過(guò)EM9160工控主板的GPIO信號(hào)來(lái)控制TI公司的帶有SPI接口的TLC2543AD芯片。 TI公司的TLC2543是一款支持11路模擬輸入,量化分辨率12-bit的低成本AD芯片。EM9160是英創(chuàng)公司的一款預(yù)裝WindowsCE實(shí)時(shí)操作系統(tǒng)的高性?xún)r(jià)比ARM9工控主板產(chǎn)品正M9160最多可支持16位方向可獨(dú)立設(shè)置的GPIO,這些GPIO均可被用來(lái)作為同步串口接口SPI的信號(hào)。在本文以下部分,SPI信號(hào)方向都是以工控主板EM9160為參考的。4線制的SPI接口其接口信號(hào)包括:SPI_CS:SPI片選信號(hào),低電平有效;從EM9160輸出,接到TLC2543。SPI_CK:SPI接口的同步時(shí)鐘信號(hào);從EM9160輸出,接到TLC2543。SPI_DO:SPI接口數(shù)據(jù)輸出,從EM9160輸出的轉(zhuǎn)換命令,輸入到TLC2543。SPI_DI:SPI接口數(shù)據(jù)輸入,從AD芯片輸出的轉(zhuǎn)換數(shù)據(jù),輸入到EM9160O用EM9160的GPIO仿真SPI接口的第一步是根據(jù)具體的設(shè)計(jì)情況,選擇合適的GPIO信號(hào)來(lái)作為SPI的各個(gè)信號(hào),用C代碼可表述如下:#include'em9160_dio_ex.h'#include'em9160_isa_dio.h'#defineGPIO0_PIN0x0001#defineGPIO1_PIN0x0002#defineGPIO2_PIN0x0004#defineGPIO4_PIN 0x0010#defineGPIO5_PIN 0x0020#defineGPIO6_PIN 0x0040#defineGPIO7_PIN 0x0080#defineGPIO8_PIN 0x0100#defineGPIO9_PIN 0x0200#defineGPIO10_PIN 0x0400#defineGPIO11_PIN 0x0800#defineGPIO12_PIN 0x1000#defineGPIO13_PIN 0x2000#defineGPIO14_PIN 0x4000#defineGPIO15_PIN 0x8000////輸入輸出方向是以主板為參考來(lái)定義的。//#defineSPI_CS_PINGPIO0_PIN〃可根據(jù)實(shí)際情況更改#defineSPI_CK_PINGPIO1_PIN〃可根據(jù)實(shí)際情況更改#defineSPI_DI_PINGPIO2_PIN〃可根據(jù)實(shí)際情況更改#defineSPI_DO_PINGPIO3_PIN〃可根據(jù)實(shí)際情況更改第二步是實(shí)現(xiàn)SPI各個(gè)控制信號(hào)的操作函數(shù),即各個(gè)控制信號(hào)的置位和清零以及輸入狀態(tài)的讀入。通過(guò)調(diào)用EM9160_ISA_DIO.LIB中的相關(guān)GPIO函數(shù),函數(shù)原型定義在頭文件“em9160_dio_ex.h”中,可很容易實(shí)現(xiàn)下列函數(shù):///////////////////////////////////////////////////////////////////////////////SPI接口各管腳控制函數(shù)/////////////////////////////////////////////////////////////////////////////voidSet_SPI_CS()//SPI片選置高,注意SPI_CS片選一般是低有效信號(hào){PIO_OutSetEx(SPI_CS_PIN);}voidClear_SPI_CS()//SPI片選清零,注意SPI_CS片選一般是低有效信號(hào){PIO_OutClearEx(SPI_CS_PIN);}voidSet_SPI_CK()//SPI時(shí)鐘置高,注意SPI_CK初始狀態(tài)為低{PIO_OutSetEx(SPI_CK_PIN);}voidClear_SPI_CK()//SPI時(shí)鐘置低,注意SPI_CK初始狀態(tài)為低{PIO_OutClearEx(SPI_CK_PIN);}voidSet_SPI_DO()//SPI數(shù)據(jù)輸出高電平{PIO_OutSetEx(SPI_DO_PIN);}voidClear_SPI_DO()//SPI數(shù)據(jù)輸出低電平{PIO_OutClearEx(SPI_DO_PIN);}intGet_SPI_DI()〃讀取SPI數(shù)據(jù)輸入電平,’0'表示低電平,’1'表示高電平UINT16uState;PIO_StateEx(&uState);if(uState&SPI_DI_PIN){return1;}return0;}voidInit_SPI()//設(shè)置SPI接口各控制信號(hào),只初始化階段運(yùn)行一次。{Set_SPI_CS();Clear_SPI_CK();Clear_SPI_DO();〃設(shè)置SPI_CS、SPI_CK、SPI_DO為數(shù)據(jù)輸出PIO_OutEnableEx(SPI_CS_PIN|SPI_CK_PIN|SPI_DO_PIN);〃設(shè)置SPI_DI為數(shù)據(jù)輸入PIO_OutDisableEx(SPI_DI_PIN);}第三步就是根據(jù)SPI的時(shí)序,構(gòu)造相應(yīng)的讀寫(xiě)函數(shù)。TLC2543是4線制SPI接口,因此它的讀寫(xiě)操作是同時(shí)進(jìn)行的,即所謂全雙工串行數(shù)據(jù)傳輸。在構(gòu)造函數(shù)時(shí),需要仔細(xì)研究AD芯片數(shù)據(jù)手冊(cè)上提供的SPI接口時(shí)序關(guān)系,如下圖所示:這里需要注意的有以下幾點(diǎn):1.在SPI_CS片選有效后,TLC2543將把上次AD轉(zhuǎn)換的數(shù)據(jù),按MSB在先的順序,呈現(xiàn)在SPI_DI信號(hào)線上,并在SPI_CK的下降沿更新數(shù)據(jù);SPI_CK的上升沿將把對(duì)AD芯片的操作指令鎖存到AD芯片,輸出的數(shù)據(jù)也是按MSB在先的順序。輸入AD的操作指令只有8個(gè)bit,而從AD讀出的轉(zhuǎn)換數(shù)據(jù)有12個(gè)bit,在讀入低4bit時(shí),輸入指令用“0”填充。芯片數(shù)據(jù)手冊(cè)中串行輸入輸出數(shù)據(jù)與我們的定義SPI_DO和SPI_DI是正好相反的。根據(jù)上述時(shí)序構(gòu)造的啟動(dòng)AD轉(zhuǎn)換并讀取上次轉(zhuǎn)換結(jié)果的函數(shù)如下://///////////////////////////////////////////////////////////////////////////////////////輸入?yún)?shù)uCmdCode:發(fā)送給AD芯片的轉(zhuǎn)換命令,具體內(nèi)容參考AD數(shù)據(jù)手冊(cè)//輸出參數(shù)pADData:從AD讀取的數(shù)據(jù),低12-bit有效//////////////////////////////////////////////////////////////////////////////////////BOOLReadAD(UCHARuCmdCode,UINT16*pADData){int i1;volatileUINT16ui1,uCmd16;//activiateADchipselectionClear_SPI_CS();//wait1.4usbeforeclocking1stbit(ADTLC2543required)EM9160_DelayInUs(2);uCmd16=(UINT16)uCmdCode<<4;//convertcmdto12-bitformatui1=0; //saveshift-outdatafromADfor(i1=0;i1<12;i1++) //setcovertingchannelui1=ui1<<1;if(Get_SPI_DI())//readAD_DOUT{ui1=ui1|0x0001;}if(uCmd16&0x0800) //issueCmdontoAD_DIN,MSBfirst{Set_SPI_DO();}else{Clear_SPI_DO();}EM9160_DelayInUs(1);//insertdelayifrequiredSet_SPI_CK();//AD_CLKlow-to-highEM9160_DelayInUs(1);//insertdelayifrequiredClear_SPI_CK();//AD_CLKhigh-tolowEM9160_DelayInUs(1);//insertdelayifrequireduCmd16=uCmd16<<1;}//assignui1toADdata*pADData=ui1;//de-activiateADchipselectionSet_SPI_CS();//waitfornextADdatareadyifnecessarySleep(1);returnTRUE;/r

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論