張躍寶 胡 俊 任源博 管英祥
(中國電子科技集團公司第二十二研究所 青島 266107)
串口流控在DSP中的應(yīng)用與實現(xiàn)*
張躍寶 胡 俊 任源博 管英祥
(中國電子科技集團公司第二十二研究所 青島 266107)
基于短波無線通信的目的,通過DSP串口控制Collins Modem調(diào)制發(fā)送大批量數(shù)據(jù),存在數(shù)據(jù)丟失問題;導(dǎo)致此原因是MODEM兩端波特率不一致,使Modem緩沖區(qū)溢出丟數(shù),所以在電路上采用DSP加TL16C752B串口硬流控方式進(jìn)行數(shù)據(jù)傳送。結(jié)合短波空中鏈路實驗,連續(xù)發(fā)送大數(shù)據(jù),經(jīng)Modem解調(diào)通過串口上送到DSP,經(jīng)實驗驗證未存在數(shù)據(jù)丟失問題。
短波; Modem; 波特率; 硬流控; 調(diào)試; 解調(diào)
在DSP串行接口的設(shè)計中,通用PC機的RS-232接口為通用異步接口UART,為了使DSP能夠與PC機進(jìn)行異步串行通信,必須擴展相應(yīng)的硬件。
TMS320C6416 DSP芯片[8]與PC機實現(xiàn)異步通信通常有兩種方法:第一種是使用TMS320C6416的McBSP實現(xiàn)UART的功能;第二種是通過擴展異步通信芯片TL16C752B[9]來實現(xiàn)高速串行通信,本文選用的就是第二種。
在Modem傳輸過程中,PC機串口與DSP串口通信通過TL16C752B傳送數(shù)據(jù)到TMS320C6416,此過程采用的是異步串行[1]通信方案。

圖1 系統(tǒng)結(jié)構(gòu)圖
3.1 工作流控制模式
TL16C752B硬件流控制可降低軟件消耗,通過RTS和CTS引腳信號的硬件連接可自動控制串行數(shù)據(jù)流,從而提高系統(tǒng)的有效性。
硬件流控制使能可通過EFR(設(shè)定EFR的高2位)和MCR這兩個寄存器來實現(xiàn)。具體工作流程(從接收的角度)為:接收時,若操作達(dá)到接收中斷等級,則產(chǎn)生中斷,但這時傳輸還在進(jìn)行(這里假設(shè)中斷有一定延時);而當(dāng)RHR中的數(shù)據(jù)數(shù)目達(dá)到接收停止等級規(guī)定的數(shù)值時,CTS信號置位,以通知發(fā)送端停止發(fā)送數(shù)據(jù),這時接收端將讀取RHR中的數(shù)據(jù)。當(dāng)RHR中的數(shù)據(jù)數(shù)目降到接收啟動等級規(guī)定的數(shù)值時,接收端復(fù)位CTS信號,以通知發(fā)送端可以繼續(xù)發(fā)送數(shù)據(jù)。
3.2 DSP與TL16C752B電路設(shè)計
TL16C752B與PC的串行通信部分的硬件連接原理[13]如圖2所示。圖中,地址線A0~A2、數(shù)據(jù)線D0~D7分別和DSP的地址總線A0~A2、 外部數(shù)據(jù)線D0~D7直接相連,而選通信號CSA、CSB分別與DSP的EMIFB的BCE3、BCE2直連,讀寫信號IOR、IOW分別與DSP EMIFB的BARE和BAWE直連,復(fù)位信號RESET連接到外部復(fù)位電路,以及中斷信號INTA/B則接入FPFA并由 FPGA處理,電路中使用FPGA一方面可以對UART的地址靈活配置,另一方面也可以靈活生成UART的選通和讀寫信號,從而增強系統(tǒng)的靈活性,方便系統(tǒng)調(diào)試。

圖2 連接示意圖
由于PC端串口采用RS232電平標(biāo)準(zhǔn),因此UART之后需要連接 MAX3160以完成電平轉(zhuǎn)換。TL16C752B的數(shù)據(jù)發(fā)送引腳和數(shù)據(jù)接收引腳分別與MAX3160的數(shù)據(jù)輸入引腳和數(shù)據(jù)輸出引腳連接。這里只使用一套 UART來完成TL16C752B和PC的通信,數(shù)據(jù)收、發(fā)采用中斷方式,UART_INTA通過FPGA和TMS320C6416的外部中斷INT7 相連接。而3.072MHz晶振則連接到XTAL1和XTAL2兩引腳。波特率設(shè)定為38400,故DLL/DLH分別為06H和00H。
具體調(diào)試時,可先從查詢方式開始,若沒有問題,再使用中斷方式。
本程序是由短波自適應(yīng)選頻技術(shù)[6]中DSP調(diào)制解調(diào)[5]里控制Modem的主要程序,該系統(tǒng)的軟件設(shè)計部分主要包括PC機程序、DSP初始化、TL16C752B初始化和數(shù)據(jù)發(fā)送/接收以及雙方的通信協(xié)議等,利用C完成驅(qū)動程序[3]。
4.1 DSP初始化程序
外圍設(shè)備初始化
EMIFB_Config MyConfigB = {
………
0x22A28A0A, //cectl3 EMIFB的ce2,8空間配置為Uart
0x22A28A0A, //cectl3 EMIFB的ce3,8空間配置為Uart
………
};
EMIFB_config(&MyConfigB);//配置EMIFB外設(shè)寄存器
(串口接收中斷向量初始化
………
IRQ_map(IRQ_EVT_EXTINT6, 6);
IRQ_reset(IRQ_EVT_EXTINT6);
4.2 TL16C752B初始化
TL16C752B初始化程序主要包括以下幾部分:
1) 波特率的設(shè)定及計算
TL16C752B包含一個可編程的波特率寄存器,它可以在輸入時鐘的基礎(chǔ)上進(jìn)行分頻(最大分頻數(shù)為216-1),其計算公式如下:
分頻數(shù)=當(dāng)前時鐘輸入(30.72MHz)/(比例系數(shù)X16 X期望的波特率)。
其比例系數(shù)為
當(dāng)復(fù)位后,寄存器MCR的第7位設(shè)為0時,比例系數(shù)為1(默認(rèn)值)。
當(dāng)復(fù)位后,寄存器MCR的第7位設(shè)為1時,比例系數(shù)為4。
當(dāng)時鐘為30.72MHz時,常用波特率的設(shè)置如表1。
2) 增強功能的使能及設(shè)置EFR的相關(guān)位;
3) 完成有關(guān)收、發(fā)FIFO的設(shè)定,主要是MCR、TCR、TLR 3個寄存器的設(shè)置;

表1 波特率對應(yīng)除數(shù)位
4) 硬件流控制模式使能;
5) 傳輸數(shù)據(jù)格式設(shè)定,包括8位數(shù)據(jù)位、2位停止位、DMA傳輸模式1、偶校驗、不使用強制校驗?zāi)J健和?刂莆粺o效等;
6) 設(shè)置FIFO控制以及中斷控制寄存器;
此外,在完成設(shè)置前,還應(yīng)注意以下幾點:
(1) 設(shè)定DLL和DLH前,LCR[7]應(yīng)為1;
(2) 設(shè)定MCR前,EFR[4]應(yīng)為1,LCR應(yīng)為00H。地址相重疊的寄存器不能同時使能;
(3) 讀寫RHR和THR時,由于DSP的讀寫速度很快,故最好不要連續(xù)讀寫,而是在每讀、寫一次后延時一段時間,然后再進(jìn)行下一次讀寫。
TL16C752B初始化程序如下:
//設(shè)置串口的寄存器值
void UART_rset(Uint32 channel,Uint16 regnum, Uint8 regval){
Uint8 *udata = (Uint8 *)(C6416_board_uart + channel + regnum);
*udata =(regval & 0xff);
}
//串口初始化
………
// 設(shè)置時鐘除數(shù)比例因子為"1"
UART_rset(channel,UART_LCR,0xBF);
//設(shè)置Auto-CTS,硬流控
UART_rset(channel,UART_EFR,0x90);
//EFR[4]=1,設(shè)置MCR、TLR
UART_rset(channel,UART_LCR,0x00);
UART_rset(channel,UART_MCR,0x4C);
//EFR[4]=1,MCR[6]=1,設(shè)置TLR
UART_rset(channel,UART_TLR,0x88);
//波特率
//設(shè)置波特率前,LCR[7]為1
UART_rset(channel,UART_LCR,0x80);
//設(shè)置波特率低位,波特率高位
UART_rset(channel,UART_DLL,baudratel);
UART_rset(channel,UART_DLH,baudrateh);
UART_rset(channel,UART_LCR,0xf0);//set high 2bits 1
//設(shè)置數(shù)據(jù)位,停止位,奇偶檢驗位
uartdata=UartWordLen+UartStopBits+UartParity;
UART_rset(channel,UART_LCR,uartdata);
//設(shè)置IER,接收中斷使能
UART_rset(channel,UART_IER,0x05);
}
4.3 DSP接收/發(fā)送串口通信
1) DSP循環(huán)查詢發(fā)送串口數(shù)據(jù)
//串口正在發(fā)數(shù)
Uint32 sendAcnt;//要發(fā)送數(shù)據(jù)個數(shù)
Uint32 sendAbufStart;//發(fā)送循環(huán)buffer的起始位置
Uint8 uartSendData[4096];//發(fā)送數(shù)據(jù)的循環(huán)buffer
Uint8 sendAFdy=UART_rget(UARTA_Handle,UART_FDY);
sendAFdy=sendAFdy&0x03;
if(((sendAFdy&0x01)==0x01)){
for(j=0;j<32;j++){ //TL16C752B的fifo
if(((sendAbufStart-sendAcnt)&0xfff)==0)break;
delay(50,10);
UART_rset(UARTA_Handle,UART_THR,uartSendData[sendAbufStart&0xfff]);
sendAbufStart++;
sendAbufStart=sendAbufStart&0xfff;
}
}
2) DSP中斷接收串口數(shù)據(jù)
Uint8 temp_iirall = UART_rget(UARTA_Handle, UART_IIR);
Uint8 temp_iir=temp_iirall&0x0f;
if(temp_iir==0x04){
//串口A的接收
for(int j=0;j<32;j++){//TL16C752B接收fifo
if((Temp_Data&0x01) == 0x01){
UART_receive_single(UARTA_Handle);
Uint8 Temp_Data = UART_rget(UARTA_Handle, UART_LSR);}
}
}
通過擴展串口完成TMS320C6416與PC機串行通信硬件接口比較簡單、數(shù)據(jù)傳送距離遠(yuǎn)、使用經(jīng)濟。該電路及其軟件經(jīng)與PC機的通信實驗證明,在波特率為19200時,硬件流控能很好地控制數(shù)據(jù)的傳輸,能夠可靠地實現(xiàn)與PC機的通信。通過加入流控,解決了大數(shù)據(jù)量無線通信丟失數(shù)據(jù)問題。實現(xiàn)數(shù)據(jù)可靠傳輸。
[1] 鐘睿.DSP技術(shù)完全攻略—基于TI系列的DSP設(shè)計與開發(fā)[M].北京:化學(xué)工業(yè)出版社,2015:34-214. ZHONG Rui. DSP Technology completely Itroduction-Based on TI Series DSP Design and Development[M]. Beijing: Press of Chemical industry,2015:34-214.
[2] 許邦建,唐濤,張申赤.DSP處理器算法概論[M].北京:國防工業(yè)出版社,2012. XU Bangjian, TANG Tao, ZHANG Shenchi. DSP Processing Algorithm Introduction[M]. Beijing: Press of Defence Industry,2012.
[3] 李景峰.Visual C++串口通信技術(shù)詳解[M].北京:機械工業(yè)出版社,2013. LI Jingfeng. The Explaination of Visual C++ Serial port Communication[M]. Beijing: Press of Engineering Industry,2013.
[4] 胡成華,劉傳瑞,郭文生.嵌入式網(wǎng)絡(luò)編程[M].北京:電子工業(yè)出版社,2012. HU Chenghua, LIU Chuanrui, GUO Wensheng. Embeded NET Programming[M]. Beijing: Press of Electronic Industry,2012.
[5] 王金龍.短波數(shù)字通信研究與實踐[M].北京:科學(xué)出版社,2013. WANG Jinlong. The Research and Practice of ShortWave Digital Communication[M]. Beijing: Press of Science,2013.
[6] 戴耀森.短波數(shù)字通信自適應(yīng)選頻技術(shù)[M].杭州:浙江科學(xué)技術(shù)出版社,1992. DAI Yaoshen. ShortWave Digital Communication Self-Adaptive Frequcency Selection Technique[M]. Hangzhou: Press of ZheJiang Science and Technology,1992.
[7] 禹思敏.通信原理[M].西安:西安電子科技大學(xué)出版社,2016 YU Simin. Communication Theory[M]. Xi’an: Press of XIAN University of Electronic Science and Technology of China,2016.
[8] TI. TMS320C6414/5/6T Data Sheet[EB/OL]. Texas Instruments Incorporated,2004.
[9] TI. TL16C752B Data Sheet[EB/OL]. Texas Instruments Incorporated,2000.
[10] 勒紅濤,趙娜,等.基于TL16C752B的DSP通用異步串行接口設(shè)計[J].電子測量技術(shù),2009,32(7):93-95. LE Hongtao, ZHAO Na, et al. The DSP Asynchronous Serial Communication Based On TL16c752B[D]. Journal of Electric Measure Technology,2009,32(7):93-95.
[11] 鄭阿奇,孫承龍.DSP開發(fā)寶鑒[M].北京:電子工業(yè)出版社,2012. ZHONG Eqi, SUN Chenglong. DSP Develping Thesaures[M]. Beijing: Press of Electronic Industry,2012.
[12] 姚睿,付大豐,儲劍波.DSP控制器原理與應(yīng)用技術(shù)[M].北京:人民郵電出版社,2014. YAO Rui, FU Dafeng, CHU Jianbo. The Principles and Application Technologies of DSP Controller[M]. Beijing: Press of People’s Post,2014.
[13] 魏偉.DSP嵌入式系統(tǒng)綜合設(shè)計案例精講[M].北京:化學(xué)工業(yè)出版社,2016. WEI Wei. The Explaination of DSP Embeded system General Design Case[M]. Beijing: Press of Chemical Industry,2016.
[14] 寧改娣.DSP控制器原理與應(yīng)用[M].北京:科學(xué)出版社,2015. NING Gaidi. The Priticiples and Applications of DSP Controller[M]. Beijing: Press of Science,2015.
[15] 譚浩強.C程序設(shè)計(第二版)[M].北京:清華大學(xué)出版社,2011. TAN Haoqiang. C Program Design(Second)[M]. Beijing: Press of Tsinghua University,2011
[16] 鄭莉,董淵.C++程序設(shè)計基礎(chǔ)教程[M].北京:清華大學(xué)出版社,2010. ZHENG Li, DONG Yuan. C++ Program Design Basis Course[M]. Beijing: Press of Tsinghua University,2010.
[17] 王新梅,肖國鎮(zhèn).糾錯碼—原理與方法[M].西安:西安電子科技大學(xué)出版社,2003. WANG Xinmei, XIAO Guozhen. Error Correcting Code-Priticiples and Technique[M]. Xi’an; Press of Xi’an University of Electronic Science and Technology of China,2003.
[18] 鄭紅,王鵬,董云風(fēng),等.DSP應(yīng)用系統(tǒng)設(shè)計實踐[M].北京:北京航空航天大學(xué)出版社,2006. ZHENG Hong, WANG Peng, DONG Yunfeng, et al. DSP Application Design Pratice[M]. Beijing: Press of Beijing University of Aeronautics and Astronautics,2006.
Application and Implemention of UART flow control in DSP
ZHANG Yuebao HU Jun REN Yuanbo GUAN Yingxiang
(The Twenty-Two Research Institute, China Electronic Technology Group Corporation, Qingdao 266107)
Based on short wave wireless communication, through the DSP serial port control Collins Modem modulation to send large quantities of data, there is a problem of data loss. The reason for this result is not consistent across the MODEM baud rate, it makes the Modem buffer overflow, therefore, in the circuit using DSP plus TL16C752B serial hard flow mode for data transmission. Combined with short wave air link experiment, the continuous transmission of large data, the Modem demodulation through the serial port to the DSP, the experimental verification of the data loss problem does not exist.
shortwave, modem, baudrate, hardware flow control, modulation, demodulation Class Number TN92
2016年10月12日,
2016年11月27日
張躍寶,男,碩士研究生,工程師,研究方向:兩輪不穩(wěn)定體的變結(jié)構(gòu)控制研究。 胡俊,男,碩士研究生,工程師,研究方向:集成電路設(shè)計。任源博,女,工程師,研究方向:計算機與應(yīng)用。管英祥,男,工程師,研究方向:短波通信仿真。
TN92
10.3969/j.issn.1672-9722.2017.04.038