美國ti(texas instruments)公司的系列dsp芯片采用哈佛結構、流水線操作、專用硬件乘法器、快速dsp指令,使其在數字信號處理,通信和工業自動化等領域得到廣泛應用[1]。tms320c32是32位浮點處理器。它除了上述特點外,還具有增強型存儲器接口、靈活的啟動裝載(boot loader)、可重定位的中斷矢量表、靈活的中斷方式和其他外設[2];其通信功能只包括片上集成的一個串口,但在設計中此串口一般被串行a/d或d/a芯片占用,或者被用于與另一片dsp芯片在“握手模式”(handshake mode)下直接連接。[3]
雖然tms320c32串口有多種工作方式[3,4]。但通過串口相應的寄存器并不能直接配置出符合rs232標準的通信串口,而rs通信串口是自動化控制設備的一種基本通信方式,如pc機或其他各種基于微處理器的控制裝置。rs232標準在1991年被標準化組織eia(electronic industries association)重命名為eia232標準[5],是一種異步串行通信標準,包括機械連接、信號功能、電壓特性和通信協議等幾個方面的規定。
采用1片sc16c750b uart芯片[6]來完成tms320c32的rs232串口的設計。此uart最高的串行數據速率可達3mbps,引腳與tl16c750兼容,并且具有64字節接收和發送fifos以及自動硬件流量功能。這些特征使串口通信更加高效、可靠。
1 tms320c32的rs232串口硬件設計
在基于微處理器開發的自動控制裝置設計中,一般并不需要串行通信的長距離傳輸,故普遍采用“零-modem”方式(null-modem or zero-modem)實現一對異步串口連接。圖1為一種“零-modem”連接方式(具體信號的意義可見rs232標準)。
由于rs232標準的異步通信規約數據幀都帶起始位和停止位,并且sc16c750b uart芯片具有自動硬件流量控制功能,因此可以進一步忽略與modem相關的控制信號(dtr、dsr、cd、rts、cts),簡化連接。
1.1 sc16c7550b uart芯片
sc16c750b為異步串行通信芯片[6],帶標準modem接口,它具有以下主要特點:
(1)標準異步錯誤位和幀格式位(起始位、停止位、奇偶校驗位),并且幀格式可編程;
(2)軟件可選擇波特率;
(3)發送和接收各64字節fifos;
(4)發送、接收、線路狀態等中斷可獨立控制,并且中斷優先級可額編程;
(5)獨立的接收時鐘。
(6)在5v工作電壓下,發送或接收速率可達5mbps;
(7)自動硬件流量控制
(8)4種可選擇接收中斷級別;
(9)標準modem接口;
(10)引腳與st16c450/550、tl16c450/550、pc16c450/550,軟件與sc16c750及tl16c750兼容。其他一些特點不再贅述。
sc16c750b主要引腳的功能如表1所列,更具體的資料可見文獻 [6] 。
1.2 硬件原理
硬件設計的總體思路:
(1)uart的地址被分配到tms320c32的iostrb外部存儲器空間,片選信號對應的地址即為uart的基地址。
(2)rxrdy、txrdy分別作為接收、發送中斷信號,分別接c32的中斷外部引腳int0、int1、并且c32的中斷觸發方式設為低電平觸發。
(3)uart的tx、rx引腳均為cmos電平,而rs232采用的是“負邏輯電平”。本設計采用1片max3232[7]完成它們之間的電平轉換和驅動,其數據傳輸速率最高達1mbps。
(4)使接收部分和發送部分的波特率相同,此時rclk接baudout引腳。
(5)外部參考時鐘頻率為1.8432mhz。
1.3 uart擴展rs232串口原理
依據上面的整體思路設計出硬件電路,如圖2所示。
圖2中的端口信號,如數據和地址總線、復位信號、中斷信號,完成與tms320c32之間的連接。本設計中片選信號對應tms320c32的iostrb空間中的0x810100h,即sc16c750b的內部寄存器的基地址。
2 tms320c32的rs232串口軟件功能設計
串口工作模式控制和數據收發都是通過tms320c32對uart內部相關寄存器的讀寫操作來完成的。因此,首先分析一下sc16c750b片內寄存器的功能,然后確定在本設計中sc16c750b的工作模式,并且給出該串口的初始化程序、中斷發送程序和中斷接收程序。程序以c語言寫成。
2.1 sc16c750b片內寄存器
表2給出sc16c750b內部寄存器的功能描述。寄存器各位意義可參見該芯片的數據手冊。
2.2 程序設計
首先初始化編程,以確定tms320c32與sc16c750b之間的操作方式、數據傳輸幀格式、sc16c750b自身的工作模式、數據傳輸波特率的設置等工作。設定:
(1)sc16c750b工作dma模式0(dma mode 0)。在此模式下,每當發送寄存器thr為空,txrdy信號會降為邏輯低電平。只要接收寄存器rhr被裝載了一個字符,rxrdy會立刻降為邏輯低電平。
(2)tms320c32與sc16c750b uart之間的操作方式采用中斷操作方式,中斷方式相對于查詢方式可以提高tms3320c32的工作效率。tms320c32的int0中斷引腳接uart的rxrdy信號,int1接txrdy信號。這樣,由int0、int1對應的中斷服務例程完成數據的接收和發送。
(3)數據傳輸幀格式:數據字長8位、2位停止位、偶校驗。
(4)設置波特率。
在rs232電平邏輯中,串行數據速率(serial data rate)就在等于波特率(baud rate)。如果外部時鐘頻率(xtal1 clock frequency)為1.8432mhz、波特率19 200bps時,對應的波特率除數(divisor)為6。
用c語言開發[8]tms320c32的串口通信程序。初始化程序如下:
#include<stdlib.h>
#include<ioports.h>
//聲明sc16c750b寄存器的結構
typedef struct{
unsigned rhr;//接收保持寄存器
unsigned thr;//發送保持寄存器
unsigned ier;//中斷使能寄存器
unsigned fcr;//fifo控制寄存器
unsigned isr;//中斷服務狀態寄存器
unsigned lcr;//線路控制寄存器
unsigned mcr;//modem控制寄存器
unsigned lsr;//線路狀態寄存器
unsigned msr;//modem狀態寄存器
unsigned spr;//便箋寄存器
unsigned dll;//波特率除數低字節鎖存器
unsigned dlm;//波特率除數高字節鎖存器
}serialport;
//sc16c750b的寄存器基地址為0x810100h
serialport sp={
0x810100h,0x810100h,0x810101h,
0x810102h,0x810102h,0x810103h,
0x810104h,0x810105h,0x810106h,
0x810107h,0x810100h,0x810101h,
};
void main(void){ …
//波特率設置
outport(sp.lcr,0x80); //lcr[7]=0
outport(sp.dll,0x06); //波特率19 200bps
outport(sp.dlm,0x00);
outport(sp.lcr,0x1f); //數據幀格式
outport(sp.fcr,0xa1); //dma mode 0 outport(sp.ier,0x07); //中斷使能
…
}
//int0中斷服務例程——數據接收
unsigned char recvdata;
void c_int01(void){
recvdata=inport(sp,rhr);
…
}
//int1中斷服務例程——數據發送
void c_int02(void){
outport(sp.thr,transdata);
…
}
3 結論
tms320c32是一種高性價比的32位浮點dsp芯片,但其通信功能相對較弱。采用sc16c750b uart芯片擴展tms320c32的rs232串行口,用于實際溫度和壓力測控裝置中,經驗證,數據通信可靠。
評論
查看更多