趙維衛(wèi)
摘 ?要:傳統(tǒng)的DSP主控芯片硬件電路中,中央處理器的運(yùn)算能力較低,且這類(lèi)硬件電路的開(kāi)發(fā)設(shè)計(jì)都難度較大,不同項(xiàng)目之間可重用的部分較小,硬件參數(shù)僅適用于部分電路,本設(shè)計(jì)基于TI公司的28XX系列數(shù)字處理芯片,設(shè)計(jì)了一個(gè)主控芯片硬件電路方案。該方案有優(yōu)秀的數(shù)據(jù)處理能力,數(shù)據(jù)通信方式適用于長(zhǎng)距離通信,針對(duì)數(shù)據(jù)通信編寫(xiě)了DSP芯片內(nèi)軟件,并進(jìn)行了實(shí)際試驗(yàn)與測(cè)試。通過(guò)試驗(yàn)可知,本文設(shè)計(jì)的DSP的硬件電路及驅(qū)動(dòng)軟件,軟件運(yùn)行可靠,通訊誤差小,可擴(kuò)展性強(qiáng),成本低,便于維護(hù)。
關(guān)鍵詞:DSP;數(shù)據(jù)通信;驅(qū)動(dòng)軟件;
1. 緒論
本文選用的數(shù)據(jù)處理芯片為T(mén)I公司的TMS320F28335芯片,芯片內(nèi)部設(shè)有3個(gè)SCI異步串口,該異步串口功能支持中央處理器以及其他采用標(biāo)準(zhǔn)格式的異步外設(shè)進(jìn)行數(shù)字通信。[1]SCI異步串口的接收功能和發(fā)送功能都是雙緩沖的,接收和發(fā)送功能具備單獨(dú)的使能和中斷標(biāo)志位。芯片在全雙工模式下工作,兩者都可以獨(dú)立或同步運(yùn)行。為保證數(shù)據(jù)幀不會(huì)產(chǎn)生遺漏,SCI異步串口模塊對(duì)接收緩沖區(qū)的數(shù)據(jù)幀進(jìn)行周期性檢測(cè)、奇偶校驗(yàn)、超時(shí)檢查和幀校驗(yàn)。[2]
2. 基于TI公司的28XX系列芯片的數(shù)據(jù)通信
本設(shè)計(jì)方案采用RS232串行通信接口標(biāo)準(zhǔn),在元器件的電特性上RS232采用負(fù)相關(guān)邏輯,這就需要高電平與低電平信號(hào)的電壓值相差較大,具體的邏輯為:邏輯1即高電平在-3V至-15V之間,邏輯0即低電平在+3V至+15V之間,實(shí)際應(yīng)用中通常通常將-10V左右設(shè)置為邏輯1高電平,將+10V左右為邏輯0低電平。由于本文選用的TMS320F28335數(shù)字處理芯片的輸入端和輸出端為邏輯1高電平為+3V左右,邏輯0低電平為0.3V左右,因此必須在芯片外圍電路中增加轉(zhuǎn)換電路,以實(shí)現(xiàn)TTL電平到RS232電平的切換,本設(shè)計(jì)采用MAX3232作為電平轉(zhuǎn)換電路。
為提高硬件電路的抗干擾性,下位機(jī)主控芯片DSP和上位機(jī)工控機(jī)的串行通信用光耦6N137電路進(jìn)行光電隔離,以提升上位機(jī)工控機(jī)和下位機(jī)DSP的數(shù)據(jù)傳輸準(zhǔn)確性。按照RS232標(biāo)準(zhǔn)要求,該制式下的信號(hào)傳輸?shù)淖畲箅娎|長(zhǎng)度為30m,為實(shí)現(xiàn)該硬件電路的遠(yuǎn)距離的數(shù)據(jù)通信要求,本設(shè)計(jì)還具備可選的RS485通信接口,用來(lái)滿足不同情況下的需求。本設(shè)計(jì)的串行通訊硬件接口設(shè)計(jì)結(jié)構(gòu)圖如圖1所示。
3. 通信系統(tǒng)軟件設(shè)計(jì)
為了讓通信系統(tǒng)具備高度通信穩(wěn)定性和持續(xù)工作可靠性,本設(shè)計(jì)方案中的上位機(jī)和下位機(jī)要按照約定的通信協(xié)議進(jìn)行通信。上位機(jī)與下位機(jī)約定的通信協(xié)議如表1所示。通信協(xié)議命令用字節(jié)型十六進(jìn)制數(shù)據(jù)作為最小單位,每個(gè)數(shù)據(jù)幀有8byte,其中BYTE0,BYTE1是起始標(biāo)識(shí)類(lèi)型字節(jié)標(biāo)識(shí)符,即幀頭,BYTE3~BYTE5為數(shù)據(jù)字節(jié),BYTE6-BYTE7是兩字節(jié)的CRC校驗(yàn)碼,作為數(shù)據(jù)幀的校驗(yàn)碼,確定本幀數(shù)據(jù)是否存在傳輸過(guò)程中的錯(cuò)誤,本設(shè)計(jì)采用16位CRC校驗(yàn)算法來(lái)校驗(yàn)所接收的數(shù)據(jù)。上位機(jī)與下位機(jī)共同計(jì)算CRC校驗(yàn),通過(guò)判斷BYTE6-BYTE7傳輸值與上位機(jī)算出的數(shù)據(jù)的一致性來(lái)確定本幀數(shù)據(jù)接收的正確性。
4. 下位機(jī)DSP串行通訊軟件設(shè)計(jì)
DSP芯片TMS320F28335數(shù)字處理芯片有3個(gè)SCI異步串口(即SCIA、SCIB和SCIC),本方案選用的SCIC為串行通訊接口。下位機(jī)DSP串行通訊程序軟件設(shè)計(jì)主要包括串口初始化、數(shù)據(jù)發(fā)送TX及數(shù)據(jù)接收RX共3個(gè)子程序的設(shè)計(jì)。串行通訊數(shù)據(jù)的發(fā)送和接收可以采用查詢或中斷的工作方式。為提高發(fā)送數(shù)據(jù)功能的可操作性和接收數(shù)據(jù)功能的低延遲性,本設(shè)計(jì)方案的串口通信數(shù)據(jù)發(fā)送TX子程序采用查詢工作方式,數(shù)據(jù)接收RX子程序采用中斷工作方式。此外,由于28335數(shù)字信號(hào)處理芯片的串口支持16級(jí)的發(fā)送和接收FIFO,為減少系統(tǒng)串行通信時(shí)CPU的資源占用,串行通信數(shù)據(jù)發(fā)送和接收均采用FIFO工作方式。
(1)DSP串行通訊初始化程序設(shè)計(jì)
DSP串行通訊初始化程序涉及到通訊端口GPIO配置,通訊端口波特率配置、通訊數(shù)據(jù)格式設(shè)置、發(fā)送和接收參數(shù)設(shè)置和FIFO設(shè)置等。本設(shè)計(jì)方案的下位機(jī)串行通訊波特率參數(shù)為115200,數(shù)據(jù)位為8,無(wú)奇偶校驗(yàn),停止位為1,對(duì)接收中斷使能,并且關(guān)閉發(fā)送中斷,發(fā)送FIFO參數(shù)設(shè)置為16,接收FIFO參數(shù)設(shè)置為8。串口配置部分的程序代碼如下:
……
ScicRegs.SCICCR.all=0x0007;//8個(gè)數(shù)據(jù)位,1個(gè)停止位,無(wú)校驗(yàn)位,異步模式
ScicRegs.SCICTL1.all=0x0003;//使能串行發(fā)送和接收
ScicRegs.SCICTL2.bit.RXBKINTENA=1;//使能串行接收中斷
ScicRegs.SCICTL2.bit.TXINTENA=0;//禁止串行發(fā)送中斷
ScicRegs.SCIHBAUD=0x0000;//波特率設(shè)置為115200,LSPCLK=37.5MHz.
ScicRegs.SCILBAUD=0x0028;
ScicRegs.SCIFFTX.all=0x0010;//發(fā)送FIFO設(shè)置,深度為16
ScicRegs.SCIFFRX.all=0x0028;//接收FIFO設(shè)置,深度為8
ScicRegs.SCICTL1.bit.SWRESET=1;//復(fù)位SCIC串行口
(2)DSP串行通訊發(fā)送模塊程序設(shè)計(jì)
DSP串行通訊發(fā)送程序主要包括單字節(jié)數(shù)據(jù)發(fā)送程序和多字節(jié)數(shù)據(jù)發(fā)送程序兩種。其中單字節(jié)數(shù)據(jù)發(fā)送程序設(shè)計(jì)時(shí),只需要把發(fā)送的字節(jié)數(shù)據(jù)送到SCITXBUF數(shù)據(jù)緩沖區(qū),即可啟動(dòng)FIFO數(shù)據(jù)的發(fā)送工作。在單字節(jié)數(shù)據(jù)發(fā)送程序設(shè)計(jì)的基礎(chǔ)上,可以設(shè)計(jì)出多字節(jié)數(shù)據(jù)發(fā)送程序。其程序設(shè)計(jì)流程圖2所示。
(3)DSP串行通訊接收模塊程序設(shè)計(jì)
28335數(shù)字信號(hào)處理芯片的串行通訊接收模塊子程序涉及串行接收中斷初始化設(shè)置及接收中斷服務(wù)子程序設(shè)計(jì)。其中串行接收中斷初始化設(shè)置包括設(shè)置接收中斷服務(wù)子程序地址、PIE中斷、CPU中斷及總中斷設(shè)置工作。其主要程序代碼如下:
……
PieVectTable.SCIRXINTC=&scicRxFifoIsr//設(shè)置中斷服務(wù)子程序地址
PieCtrlRegs.PIEIER8.bit.INTx5=1;//PIEGroup8,
INT5,SCIC_RXD,開(kāi)放PIE中斷
IER|=M_INT8;//開(kāi)放CPU中斷
EINT;//EnableGlobalinterruptINTM
ERTM;//EnableGlobalrealtimeinterruptDBGM
……
串行接收中斷服務(wù)模塊采用FIFO中斷方式,當(dāng)FIFO接收到8byte的數(shù)據(jù)時(shí),就會(huì)產(chǎn)生FIFO接收中斷,并在中斷服務(wù)模塊中接收并且存儲(chǔ)這些數(shù)據(jù)。串行接收中斷服務(wù)子程序設(shè)計(jì)如圖3所示。
串行通訊接收中斷服務(wù)子程序相關(guān)程序代碼如下:
……
for(i=0;i<8;i++)
{
ReceiveDataTmp[i]=ScicRegs.SCIRXBUF.all&0x00ff;//接收FIFO中的數(shù)據(jù)
}
CrcCheckResult=Crc16_Calc(ReceiveDataTmp,0x06);//計(jì)算CRC_16
CrcCheckResult_L=(CrcCheckResult&0x00ff);
CrcCheckResult_H=((CrcCheckResult 8)&0x00ff);
if((CrcCheckResult_L==ReceiveDataTmp[6])&&(Crc-CheckResult_H= =ReceiveDataTmp[7]))
{
Parameter(ReceiveDataTmp[3],ReceiveDataTmp[4],(ReceiveDataTmp[5]&0x000f));
DELAY_US(1000);
ReceiveFlag=0x0055;//表示CRC校驗(yàn)正確
}
else
{
ReceiveFlag=0x0066;//表示CRC校驗(yàn)錯(cuò)誤
}
……
5. 通信試驗(yàn)
將上述的下位機(jī)硬件以及驅(qū)動(dòng)軟件實(shí)際應(yīng)用到一個(gè)工程項(xiàng)目中,通過(guò)NI公司的LabVIEW軟件平臺(tái)編寫(xiě)上位機(jī)軟件,設(shè)置數(shù)字量的方波數(shù)值參數(shù),包括方波周期、方波寬度及方波個(gè)數(shù)等信息,然后通過(guò)串口以RS232/RS485制式,將設(shè)置完畢的方波信號(hào)發(fā)送到下位機(jī)DSP,由DSP接收指令并產(chǎn)生上位機(jī)要求的數(shù)字方波信號(hào)。上位機(jī)通過(guò)28335反饋的數(shù)據(jù)檢查方波生成情況,并顯示反饋數(shù)據(jù)幀如圖5所示。在上位機(jī)的串口設(shè)置界面中,先對(duì)串口的端口號(hào)進(jìn)行設(shè)置,然后設(shè)定上述的方波參數(shù),約束通信協(xié)議中規(guī)定的幀頭(0x55,0x66)和命令碼(0xAA),單擊發(fā)送按鍵,就會(huì)發(fā)送一幀帶有方波指令的數(shù)據(jù)幀發(fā)送給DSP,DSP接收到上位機(jī)指令后,將方波指令發(fā)回至上位機(jī)。
以圖5中設(shè)置的參數(shù)為例,上位機(jī)向下位機(jī)發(fā)送的設(shè)置參數(shù)為周期200us的方波信號(hào),方波寬度為100us,共有8個(gè)方波。完整的數(shù)據(jù)幀通訊命令是0x55 0x66 0xAA 0xC8 0x64 0x0A 0x8F 0x36,數(shù)據(jù)幀的0x8F,0x36是數(shù)據(jù)幀前6個(gè)字節(jié)的CRC16校驗(yàn)碼,數(shù)據(jù)傳輸采用小端方式,檢查由DSP反饋的數(shù)據(jù)幀為0x55 0x66 0xAA 0xC8 0x64 0x0A 0x8F 0x36,收發(fā)數(shù)據(jù)一致,即DSP正確接收并執(zhí)行了上位機(jī)通訊命令。用示波器檢測(cè)的下位機(jī)DSP的方波輸出波形圖如圖6所示。下位機(jī)DSP輸出的8個(gè)方波寬度均為100us,周期為200us,上位機(jī)和下位機(jī)串行通訊準(zhǔn)確無(wú)誤。
6. 結(jié)論
本設(shè)計(jì)采用28335數(shù)字信號(hào)處理芯片,設(shè)計(jì)了一種與上位機(jī)通信的硬件電路及軟件參數(shù)配置,經(jīng)過(guò)與上位機(jī)的數(shù)據(jù)通信試驗(yàn),能夠完成信號(hào)的傳輸并執(zhí)行工作,該通信方式可用于實(shí)際工程應(yīng)用中,數(shù)據(jù)傳輸準(zhǔn)確可靠,具備一定的工程應(yīng)用作用。
7. 參考文獻(xiàn)
[1]商秋芳,吳學(xué)杰,梅紅偉,等.基于LabVIEW和TMS320F2812的液壓伺服控制系統(tǒng)的設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2007,21(260).
[2]吳振奎,張自雷,魏毅立,等.基于LabVIEW平臺(tái)DSP與PC的Modbus協(xié)議串口通信實(shí)現(xiàn)[J].內(nèi)蒙古科技大學(xué)學(xué)報(bào),2014,33(1):58-62.