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