TMS320C32擴展異步串口的方法 作者: 時(shí)間:2007-03-09 來(lái)源:網(wǎng)絡(luò ) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對面交流海量資料庫查詢(xún) 收藏 摘要:介紹了TMS320C32 DSP實(shí)現異步串行通信接口的三種方法:軟件模擬實(shí)現、硬件實(shí)現、專(zhuān)用協(xié)議芯片實(shí)現。給出了具體實(shí)現的硬件接口和軟件編程。在接口的第二種和第三種實(shí)現方法中,都使用了FPGA實(shí)現邏輯接口。 關(guān)鍵詞:數字信號處理 異步串行接口 現場(chǎng)可編程邏輯陣列 電氣傳動(dòng)控制 高速數字信號處理器(DSP)在現代工業(yè)控制中,特別是電氣傳動(dòng)控制中的應用非常廣泛。大量文獻介紹的應用于電氣傳動(dòng)控制的DSP使用的是TI公司的,TMS320系列DSP芯片,這其中又以TMX210C3X和TMS320F24X為主流應用產(chǎn)品。TMS320C32(以下簡(jiǎn)稱(chēng)為C32)是TMS320C3X系列產(chǎn)品中應用比較多的一種。主工業(yè)控制中,常常需要使用上位PC機來(lái)控制底層的DSP芯片,一般采用異步串行通信協(xié)議,使用RS-232或485來(lái)實(shí)現。C32自身帶有的串口為同步串口。為了實(shí)現C32和PC機之間的串行口通信,必須擴展C32的全雙工異步串口(UART)功能。 C32實(shí)現UART接口的方法有三種: (1)使用C32的現有資源模擬串行口的功能; (2)使用可編程芯片(例如FPGA)實(shí)現同步和異步協(xié)議的轉換; (3)使用專(zhuān)用的異步通信器件(ACE)實(shí)現,例如PC機上使用16C550系列實(shí)現UART。1 使用C32的現有資源模擬串行口的功能 通過(guò)使用兩個(gè)通用I/O引腳、兩個(gè)定時(shí)器和一個(gè)外部中斷,可以用軟件模擬UART的功能。使用中斷實(shí)現軟件模擬UART采用的通訊格式為:波特率9600bPs、8個(gè)數據位、一個(gè)停止位、無(wú)奇偶校驗位。這種實(shí)現方法由Ted Fried高級計算機通信公司提供。 1.1 硬件 圖1為硬件連接線(xiàn)圖。接收線(xiàn)同時(shí)接到INT0和XFl引腳。起始位數據的下降沿觸發(fā)外部中斷INT0。傳輸線(xiàn)接到XFO引腳,使用上拉電阻輸出。圖2 1.2 軟件 1.2.1 接收數據 根據UAHT協(xié)議,接收到的第一個(gè)數據是起始位,在軟件中。起始位會(huì )觸發(fā)一個(gè)外部中斷INT0。害INT0的中斷服務(wù)程序例程RXINT0中,定時(shí)器0首先玻裝入一個(gè)時(shí)間常數,這個(gè)時(shí)間常數的定時(shí)時(shí)間等于半個(gè)數據位的延遲時(shí)間;然后裝入定時(shí)器0的中斷向量表,并允許定時(shí)器中斷0,程序返回主程序,等待定時(shí)器0中斷。如果定時(shí)器0觸發(fā)中斷,RX-TMR-INT(接收定時(shí)器中斷)例程則開(kāi)始技行接收工作。第一個(gè)定時(shí)時(shí)間為半個(gè)數捉位的時(shí)間.CPU在接收位的中間時(shí)刻采樣X(jué)FI的數據,并且驗證接收到的數據是否為一個(gè)低電平。如果驗證正確,表示接收到的數據為一個(gè)起始位,就可以接收數據了。在接收數據時(shí),重新裝載定時(shí)器0的定時(shí)值為一個(gè)數據位的時(shí)間并且啟動(dòng)定時(shí)器0,程序返回主程序,等待定時(shí)器0中斷的到來(lái)。 在隨后的定時(shí)器0的服務(wù)程序中,實(shí)現了在接收位的中間時(shí)刻采樣接收線(xiàn)的狀態(tài)來(lái)得到實(shí)際數據。將這些接收到的數據移位到一個(gè)存儲器單元中。在第9次中斷時(shí),對接收到的停止位進(jìn)行驗證。如果正確,軟件執行一個(gè)陷阱中斷,程序返回到主程序。如果不正確,調用BAD_STOP_BIT子程序進(jìn)行相應的錯誤處理。接收數據被處理完后,重新允許外部中斷0,等待下一個(gè)起始位的到來(lái)。 1.2.2 發(fā)送數據 發(fā)送數據例程開(kāi)始于主程序裝載一個(gè)數據到指定的存儲器中,并且調用TX_MAIN例程。在這個(gè)例程中,狀態(tài)定時(shí)器1的定時(shí)時(shí)間為一個(gè)數據位的時(shí)間,重新設置傳輸計數器的值,設置起始位,并且允許定時(shí)器l中斷,返回主程序,等待定時(shí)器1中斷的到來(lái)。只有傳輸計數器的值為0時(shí),主程序才會(huì )允許重新裝載下一個(gè)需要傳輸的數據到指定的存儲器中。在定時(shí)器1的中斷子程序TX_INT中,程序將要傳輸的數據(包含起始位、數據位和停止位)從XF0引腳上移位出去,直到傳輸計數器的值為0。圖3 具體的程序代碼請見(jiàn)參考文獻[1]。 2 使用FPGA實(shí)現異步和同步串行接口間的協(xié)議轉換 有許多應用需要使用硬件UART。使用FPGA可以將同步串行口協(xié)議轉換為異步串行口通信協(xié)議。具體的邏輯框圖如圖2所示。 系統使用的時(shí)鐘為25MHz,FPCA中使用的時(shí)鐘來(lái)源于C32的H3引腳。通信協(xié)議為:波特率9600bps、一個(gè)起始位、一個(gè)停止位、沒(méi)有奇偶檢驗位。圖3所示為傳輸電路。 通過(guò)設置傳輸定時(shí)器的定時(shí)值可以得到需要的9600bps的波特率。傳輸端口被配置為爆發(fā)傳輸模式,它可以產(chǎn)生UART的一個(gè)起始位。8個(gè)數據位之后的停止位可通過(guò)電路來(lái)實(shí)現。圖4為接收電路圖。 當電路檢測到起始位時(shí),接收電路開(kāi)始工作。起始位的邏輯擅為0。延遲電路在起始位的下降沿被激活。延遲電路的設置使數據的采樣發(fā)生在每個(gè)數據位的中間時(shí)刻,它提高了系統抗噪聲的能力。圖4 3 使用ACE實(shí)現UART 微機上最早使用的ACE是8250,16C550是8250的功能升級器件。器件在結構上的最大差別是16C550增加了接收和發(fā)送FIFO,因此器件能夠處于交替工作模式,減輕CPU額外的軟件負擔。在這種模式下,無(wú)論是接收還是發(fā)送,在可訪(fǎng)問(wèn)的緩沖寄存器和不可訪(fǎng)問(wèn)的移位寄存器之間都增加了16字節的FIFO(包含放在接收FIFO中的3位錯誤數據字節),可以使系統負擔最小且系統效率最高,而且所有的邏輯功能都在16C550芯片上完成。TLl6C550A有兩個(gè)管腳功能(N封裝系列中引腳24和29,FN封裝系列中的27和32)已經(jīng)被改變,使用這兩個(gè)信號可以允許信號使用DMA的方式來(lái)傳輸。 TLl6C550的主要功能為:TLl6C550在接收外部器件或MODEM的數據時(shí)?完成串行到并行的轉換;在接收CPU的數據時(shí),完成數據的并行到串行的變換,并進(jìn)行串行發(fā)送。在A(yíng)CE器件工作的任何狀態(tài)下,CPU可以讀和通報ACE器件的狀態(tài)。通報的狀態(tài)信息包括:傳輸操作正在進(jìn)行過(guò)程中、操作狀態(tài)、遇到了何種錯誤等,TLl6C550的內部包含一個(gè)可編程的波特率發(fā)生器,波特率為16x內部輸入時(shí)鐘頻率.此內部輸入時(shí)鐘頻率由輸入的參考基準振蕩器分頻(由波特率分頻寄存器的值決定)得到。TLl6C550具有完全的MODEM控制能力。包含一個(gè)處理器中斷系統,根據用戶(hù)的專(zhuān)用需要而設計,在處理通訊連接時(shí),計算量是最小的。TLl6C550有兩種封裝形式:N PACKAGE (40腳) 和FN PACKAGE(44腳)。TL16C550的管腳按功能可以分為:外部時(shí)鐘輸入及波特率控制信號;數據和地址總線(xiàn);片選及讀寫(xiě)控制信號;MODEM控制信號;復位及中斷控制信號。 如果C32要和PC機通訊,可使用TL16C550完成串行協(xié)議的轉換。TLl6C550的輸出接口要和一個(gè)電平轉換芯片連接,用于和PC機的串行通訊接口互聯(lián)。完整的接口示意圖如圖5所示。其中的MAX232可以使用MAXIM公司的MAX3238來(lái)實(shí)現。 接口電路分為兩大部分:DSP C32和串行通訊芯片TLl6C550之間的接口;串行通訊芯片TLl6C550和PC機之間的接口。完整的電路原理圖如圖6所示。 接口邏輯可以使用集成的CPLD實(shí)現,本系統中使用的是ALTERA公司的EPM7128SLC184-10。它將芯片TLl6C550作為DSP C32的一個(gè)外設端口送行尋址。圖6 相應的接口邏輯使用AHDL語(yǔ)言描述,具體如下: TL16C550A一共使用8個(gè)地址對內部寄存器進(jìn)行訪(fǎng)問(wèn)和控制。相對DSP C32系統而言,如果使用了上面的譯碼邏輯電路,則占用的8個(gè)地址為:0X818000~0X818007。 TLl6C550A串行接口寄存器的尋址表如表1所示。表1 TL16C550A的寄存器尋址表 DLAB*A2 A1 A0寄 存 器 名 屬 性 地址值 00 0 0接收緩沖寄存器RBR 只讀 0X818000 00 0 0發(fā)送緩沖寄存器TBR 只寫(xiě) 0X818000 00 0 1中斷使能寄存器IER 讀/寫(xiě) 0X818001 X0 1 0中斷標志寄存器IIR 只寫(xiě) 0X818002 X0 1 0FIFO控制寄存器FCR 只寫(xiě) 0X818002 X0 1 1線(xiàn)路控制寄存器LCR 讀/寫(xiě) 0X818003 X1 0 0MODEM控制寄存器MCR 讀/寫(xiě) 0X818004 X1 0 1線(xiàn)路狀態(tài)寄存器LSR 讀/寫(xiě) 0X818005 X1 1 0MODEM狀態(tài)寄存器MSR 讀/寫(xiě) 0X818006 X1 1 1便簽寄存器SCR 讀/寫(xiě) 0X818007 10 0 0除數低字節鎖存器DLL 讀/寫(xiě) 0X818000 10 0 1除數低字節鎖存器DLH 讀/寫(xiě) 0X818001 DLAB表示線(xiàn)路控制寄存器的第7位的邏輯值。 在程序中,使用邏輯地址0X818000~0X818007對TLl6C550A的各個(gè)寄存器進(jìn)行尋址就可以了。 本文介紹的三種實(shí)現C32異步串行口的方法,前兩種方法使用不是非常方便,而且占用了大量的C32系統資源,一般都使用第三種方法來(lái)實(shí)現C32和PC機之間的通信。 使用TL16C550實(shí)現DSP和PC機的通信,接口方便、控制簡(jiǎn)單、編程靈活,試驗證明它是非常簡(jiǎn)便可靠的實(shí)現方法。
評論