摘 要: 根據title="MAXIM">MAXIM公司的12位串行模數轉換芯片MAX1270及TI公司TMS320C5402 DSP的多通道緩沖串口(McBSP)的工作原理,設計了高速傳輸通道,采用McBSP的SPI(Series Protocol Interface)工作模式,將McBSP與MAX1270直接相連,不需要占用并行數據總線,避免了總線沖突。給出了MAX1270與TMS320C5402的McBSP的接口電路及軟件編程實現。
關鍵詞: TMS320C5402;MAX1270;多通道緩沖串口;SPI
TMS320C5402是一種具有高處理能力和低功耗特性的16位定點DSP芯片,處理能力高達100MIPS,其多功能串口McBSP(Multi-channel Buffered Serial Port)不僅可以完成標準串口的全雙工串行通信,還具有支持SPI設備、多達128個通道的數據收發(fā)能力等特性。核心電壓為1.8V,I/O電壓為3.3V,尤其適合于便攜式設備。MAX1270是8通道、多量程雙極性輸入、串行輸出、逐次逼近型12位AD轉換器。支持SPI/QSPI和MICROWIRE等多種接口方式,可方便地與各種微控制器直接級聯。
1 MAX1270原理
1.1 MAX1270引腳功能
MAX1270引腳分布如圖1所示。
各引腳功能如下:1-VDD:+5V電源輸入;2,4-DGND:數字地;5-SCLK:串行時鐘輸入,為串口數據的輸入輸出提供移位時鐘;6-:片選輸入端,低電平有效,當為高時,DOUT呈高阻狀態(tài);7-DIN:串行數據輸入引腳,從該引腳寫入控制字;8-SSTRB:轉換完成指示引腳,在不同的時鐘模式下,該引腳的高低電平變化反映轉換是否完成;10-DOUT:串行數據輸出引腳,用來輸出轉換結果;方法:掉電模式控制輸入端,低電平有效,正常工作模式下置高;12-AGND:模擬地;13~20-CH0~CH7:模擬信號輸入端;21-REFADJ,參考電壓輸出/外部調節(jié)輸入;23-REF,參考電壓緩沖輸出/ADC的參考輸入。
1.2 MAX1270的控制字
MAX1270的控制字如表1所示。
其中PD0、PD1為時鐘模式選擇位,其取值與相對應的功能如表2所示。
在外部時鐘模式下,串行數據的輸入、輸出和數據的采樣保持、轉換全部由SCLK輸入的外部時鐘所控制。在內部時鐘模式下,數據的轉換時鐘由芯片內部產生,從而減輕了外部微控制器的負荷,提高了工作效率。本文所設計的系統就是工作在內部時鐘模式下,由DSP提供2MHz的時鐘。由于DSP的收發(fā)寄存器為16位,故采用16個時鐘周期轉換一個數據的工作時序,使得每次轉換只需分別讀寫一次寄存器,大大簡化了軟件的設計。在此模式下,轉換速率可達到43ks/s。
RNG、BIP兩位決定了模擬電壓的輸入極性和范圍,其取值與相對應的功能如表3所示。
MAX1270具有軟件可編程極性選擇功能,只需要寫相應控制字就可輕松實現,這一特點降低了輸入電路設計的復雜性。對于單極性輸入,轉換結果為12位二進制碼;對于雙極性輸入,轉換結果為12位二進制補碼。只要把存儲轉換結果的變量定義為有符號整數類型(signed int)就可正確讀取結果。
SEL2、SEL1、SEL0為模擬通道選擇位,其取值與相對應功能如表4所示。
START位為控制字的開始位,在CS低電平期間標志著8位控制字的開始,其后的控制字在SCLK作用下先高位后低位的順序由DIN輸入[2]。
2 McBSP原理
McBSP內部結構如圖2所示,包括數據通路和控制通路兩部分,并通過7個引腳與外部器件相連。
各引腳功能:DX為發(fā)送引腳,與McBSP相連接;DR為接收引腳,與接收數據總線相連接;CLKX為發(fā)送時鐘引腳;CLKR為接收時鐘引腳;FSX為發(fā)送幀同步引腳;FSR為接收幀同步引腳。
在時鐘信號和幀同步信號的控制下,接收和發(fā)送過程通過DR和DX引腳與外部器件直接通信;DSP內部對McBSP的操作是利用16位控制寄存器,通過片內外設總線進行存取控制。數據發(fā)送過程:將數據寫入數據發(fā)送寄存器DXR;然后,發(fā)送移位寄存器XSR將數據經DX引腳移出發(fā)送。數據接收過程:通過DR引腳將接收的數據移入接收移位數據寄存器RSR中;然后,將這些數據分別復制到接收緩沖寄存器RBR和DRR中;最后,由CPU或DMA控制器讀出。這個過程允許內部和外部數據通信同時進行[3]。
3 TMS320C5402與MAX1270的接口設計
3.1 接口時序
TMS320C5402的McBSp與MAX1270都支持SPI(Series Protocol Interface)總線協議。SPI總線是Motorola公司推出的三線同步接口,同步串行三線方式進行通信:一條時鐘線SCK,一條數據輸入線MOSI,一條數據輸出線MISO;用于CPU與各種外圍器件進行全雙工、同步串行通信。SPI主要特點有:可以同時發(fā)送和接收串行數據;可以當作主機或從機工作;提供頻率可編程時鐘;發(fā)送結束中斷標志。傳輸的起始由主機的時鐘信號控制,一旦檢測到主機有時鐘信號發(fā)出,主機和從機的通信就開始,分別在時鐘的不同跳變沿發(fā)送和接收數據,當主機時鐘信號結束時,通信就停止,在通信過程中從機的片選信號要保持有效。
本文采用MAX1270內部時鐘模式下16時鐘周期的工作時序,由5402作為主機提供串行時鐘,MAX1270作為從機輸出轉換結果,其時序如圖3。
當片選信號CS置低時,主機的串行時鐘開始發(fā)出時鐘信號,在時鐘的每個下降沿主機向DIN上寫數據,在時鐘的每個上升沿數據打入從機。在DIN上第7位控制字建立的上升沿開始采樣模擬電壓信號,并保持2個外部時鐘周期和4個內部時鐘周期,隨后在第8個控制字之后的下降沿轉換開始。轉換的過程中,SSTRB置低直到轉換完成,查詢此引腳的狀態(tài)可判斷轉換是否完成,同時為了去除噪聲干擾,在轉換過程中應保持高電平直到轉換完成。轉換完成后,12位轉換結果由高到低由從機輸出到DOUT上,并在每個時鐘的上升沿打入主機,從而得到轉換結果。
由圖3的時序圖可以看出,每次轉換都必須寫入控制字,相鄰兩次轉換的控制字之間間隔16個時鐘周期,兩次轉換結果同樣間隔16個時鐘周期,而且如果在第一次讀取結果的D3位同時在DIN上寫入下一次的控制字,在下個周期到來時就可以直接讀取結果而不用在等待一個空周期。這樣可以充分利用SPI總線的特點,在一個周期內主機寫DIN讀DOUT,而從機寫DOUT讀DIN。由于McBSP的DXR(發(fā)送寄存器)和DDR(接收寄存器)都是16位的,故選擇了16個時鐘周期的工作時序與之相匹配。
3.2 接口電路
根據McBSP的引腳特性和上述時序分析,設計了如圖4的接口電路。
5402作為主機通過Mcbsp0的時鐘輸出引腳BCLKX0給MAX1270提供串行時鐘,通過幀輸出引腳BFSX0選通MAX1270,通過BDX0引腳寫入控制字。同時,通過BDR0引腳接收轉換結果,并把BCLKR1設置成通用I/O與MAX1270的SSTRB引腳相連,通過查詢此引腳的狀態(tài)來判斷轉換是否完成。
由于5402的I/O管腳電壓為3.3V,而MAX1270的I/O管腳電壓則為5V,因此在MAX1270向5402傳輸的方向上加了一片電平轉換芯片74LVC4245A,把5V的TTL電平轉換成3.3V的TTL電平,以避免5402無法承受高于3.3V的電壓而燒毀芯片。
3.3 軟件設計
軟件設計分為初始化和數據傳輸兩大部分。
初始化部分包括5402的初始化和McBSP的初始化,其中5402的初始化是對系統上電復位后對DSP的整個工作壞境的基本設置,包括對系統時鐘、處理器工作方式、存儲器分配、中斷、外設等待狀態(tài)等的設置。而對McBSP的初始化則是軟件設計的核心,其步驟如下:
(1)禁止McBSP0發(fā)送器發(fā)送,接收器接收。
(2)設置5402為SPI主機模式,串行時鐘采用5402主時鐘的50分頻,在時鐘的上升沿接收數據,在時鐘的下降沿發(fā)送數據,接收數據為右對齊高位補零格式。
(3)設置每個幀信號由DXR(數據發(fā)送寄存器)向XSR(發(fā)送移位寄存器)復制數據時產生,接收和發(fā)送都為單項幀,每幀一個數,每個數16位。
(4)使能McBSP0接收器,發(fā)送器。
(5)等待兩個時鐘周期,保證內部信號同步,接收器和發(fā)送器激活[1]。
數據傳輸部分完成控制字的寫入和轉換結果的保存,其步驟如下:
(1)向DXR中寫入控制字,查詢發(fā)送控制字狀態(tài),確認發(fā)送完成。
(2)查詢SSTRB狀態(tài),確認轉換完成。
(3)查詢接收控制字狀態(tài),確認接收完成,從DRR中讀出轉換結果。
(4)循環(huán)執(zhí)行上述步驟。
軟件基本流程如圖5所示。
3.4 實驗結果
圖6為采集由信號發(fā)生器產生的1kHz的正弦波的結果。其中橫坐標為連續(xù)時間段內采集數據的序號,縱坐標為轉換后的數字量結果。由圖可以看出,采集的數字量很好地復現了模擬電壓波形。而實際上,圖中一個周期的正弦波之間是43個點,說明了對于1kHZ的正弦波,每周期采樣43次,由此可知采樣率達到了43kHz。這與MAX1270內部時鐘工作模式的最大采樣率完全一致,而且可以實現雙極性采樣,證明了本設計在實踐中是可行的。
本文詳細介紹了MAX1270與TI公司的16位高性能定點DSP TMS320C5402之間的SPI接口設計和編程實現。實現了MAX1270真正的SPI接口,并達到了最大內部轉換速率43kHz?;赟PI接口的特點使得電路設計十分簡潔,軟件編程采用C語言完成,通俗易懂且可移植性強,已經應用在光柵信號的采集、細分與辯向系統中,有一定的實用性。
參考文獻
[1] 張勇.C/C++語言硬件程序設計[M].西安:西安電子科技大學出版社,2003.
[2] MAXIM Corp,MAX1270/MAX1271 Data Sheet[Z],2004.
[3] 汪安民,陳明欣,朱明.TMS320C54xx實用技術[M].北京:清華大學出版社,2007.