|
MSP430系列的許多型號內(nèi)部都含有A/D轉換器(ADCs),例如MSP430F13x系列和MSP430F14x系列,內(nèi)部均含有12位的A/D。但在許多應用場合,不需要12位的A/D,只需要8 位或10位的A/D就足夠了。這時候用戶可能會選擇MSP430x11x系列,外部添加模數(shù)轉換器。在典型應用中,低功耗、易操作的TLC549(8位 A/D)或TLV1549(10位A/D)器件可經(jīng)很方便地與MSP430連接。本文介紹一個MSP430F1121與TLC549的接口實例。 1 硬件設計 MSP430F1121使用三個I/O口與TLC549的接口串行相連,通過串行接口采樣。TLC549完成A/D轉換的時間小于17μs。電路原理圖如下所示。

2 工作原理 利用三個數(shù)字I/O接口,MSP430F1121驅動TLC549 A/D轉換采用異步串行接口,在實際應用中,MSP430F1120的I/O管腳P2.0和P2.1用P2的方向寄存器(P2DIR)配置為輸出,用P2 的輸出寄存器(P2OUT)提供相應位的輸出緩沖信息。P2.0管腳與TLC549的選片管腳CS相連,P2.1管腳與TLC549的輸入/輸出時鐘 I/O CLK相連。轉換數(shù)據(jù)從TLC549的數(shù)據(jù)輸出管腳DO讀出,進入MSP430F1121的P2.3管腳。如上圖所示,MSP430F1121選擇了 P2.0、P2.1、P2.3三個管腳,實際上任意一個管腳均能夠驅動TLC549。當CS為高電平時,DO為高阻狀態(tài)。轉換開始之前,CS必須為低電平,以確保完成轉換,MSP430F1121在P2.1管腳上產(chǎn)生總計8個的時鐘脈沖應用于TLC549 I/O CLK管腳的輸入。當CS為低電平時,最先出現(xiàn)在DO管腳的信號為轉換值得最高位。MSP430F1121通過P2.3管腳,從TLC549的DO管腳連續(xù)移位讀取轉換數(shù)據(jù)進入ADCDATA寄存器。最初的四個脈沖的下降沿分別移出上一次轉換值的第6位、5位、4位、3位,其中第四個時鐘下降沿啟動采樣功能,采樣TL549模擬輸入信號的當前轉換值。后續(xù)三個時鐘脈沖輸送給I/O CLK管腳,分別在下降沿把上一次轉換值的第2位、1位、0位轉換位移出。最終(第八個)時鐘脈沖的下降沿芯片,采樣/保持功能開始保持操作,保持操作持續(xù)到下一個第四時鐘的下降沿。轉換的周期由TLC549的內(nèi)部振蕩器定時,不受外部時鐘的約束。一個轉換完成需要17μs。在轉換過程中, CS給一個高電平,DO回到高阻狀態(tài)。下一次轉換序列之前,至少延時17μs,否則TLC549的轉換代碼將被破壞。
3 軟件設計 在程序中,在程序MEAS_549需要150 MCLK周期和31個字節(jié)的匯編代碼包括子程序調用。整個例程需要60個字節(jié),功能包括:關閉看門狗,設置堆棧指針,系統(tǒng)復位以后I/O的初始化,子程序 MEAS_549被調用驅動8位轉換代碼順序進入ADCDATA寄存器,一個寄存器(R12)臨時用來計算字節(jié)的位數(shù)。
源代碼如下: NAME fet_549 ; MSP430F1121 - TLC549接口例程; -------------------------------------------------------------------------------- #define ADCData R11 #define Counter R12 P2IN equ 00028h ; P2口輸入寄存器 P2OUT_ equ 00029h ; P2口輸出寄存器 P2DIR_ equ 0002Ah ; P2口方向寄存器 WDTCTL_ equ 00120h ; 看門狗定時控制器 WDTHOLD equ 00080h ; 看門狗保持位 WDTPW equ 05A00h ; 看門狗寫入控制字
CS equ 001h ; P2.0 芯片片選 CLK equ 002h ; P2.1 芯片時鐘 DO equ 008h ; P2.3 數(shù)據(jù)輸出
;--------------------------------------------------------------------- ORG 0F000h ; 編程起始地址 ;--------------------------------------------------------------------- RESET mov.w #0300h,SP ; 初始化X112X堆棧 StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; 關閉看門狗定時器 SetupP2 mov.b #CS,&P2OUT ; /CS設置, P2.X初始化 bis.b #CS+CLK,&P2DIR ; /CS 和 CLK輸出 ;
Mainloop call #Meas_549 ; 調用Meas_549子程序 jmp Mainloop ; 重復調用Meas_549子程序
;--------------------------------------------------------------------- Meas_549; 采樣TLC549的數(shù)據(jù),數(shù)據(jù)移入ADCData(R11), ;計數(shù)器 (R12)記錄移位的位數(shù) ;--------------------------------------------------------------------- mov.w #8,Counter ; 8位數(shù)據(jù)的位數(shù) clr.w ADCData ; 清除數(shù)據(jù)緩沖區(qū) bic.b #CS,&P2OUT ; /CS復位, 使能ADC ADC_Loop bit.b #DO,&P2IN ; (4) DO移入C (進位) bis.b #CLK,&P2OUT ; (4) 時鐘變高電平 bic.b #CLK,&P2OUT ; (4) 時鐘變低電平 rlc.w ADCData ; (1) C移入ADCData dec.w Counter ; (1) 8位全部移入否? jnz ADC_Loop ; (2) 如果沒有,調用ADC_Loop bis.b #CS,&P2OUT ; /CS設置, 關閉ADC ret ; 調出子程序 ;--------------------------------------------------------------------- ORG 0FFFEh ; ;--------------------------------------------------------------------- DW RESET ; MSP430復位向量 END
用戶可對子程序MEAS_549的其中一行進行修改,目的是達到10位轉換的需求。程序中需要10個脈沖量,數(shù)據(jù)移動10位進入ADCDATA寄存器。 mov.w #10,Counter ; 10位數(shù)據(jù)的位數(shù).
|