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