TMS320C54X DSP實(shí)現(xiàn)UART的技術(shù)
2.1 串行傳輸
異步串行數(shù)據(jù)格式的設(shè)置通過(guò)線路控制寄存器(LCR)來(lái)完成的。除了數(shù)據(jù)格式外,另外一個(gè)指標(biāo)是波特率,它是通過(guò)除數(shù)寄存器來(lái)設(shè)置的,實(shí)際的波特率為輸入時(shí)鐘信號(hào)進(jìn)行分頻后獲得,其公式如下:本文引用地址:http://cafeforensic.com/article/150917.htm
2.2 數(shù)據(jù)接收
從SIN輸入的數(shù)據(jù)首先進(jìn)入接收移位寄存器(RSR),一個(gè)字符接收完成后,數(shù)據(jù)移人接收緩沖寄存器(RBR)。RBR實(shí)際是一個(gè)16字節(jié)的FIFO,當(dāng)中斷設(shè)置時(shí),UART會(huì)根據(jù)FIFO中接收數(shù)據(jù)的數(shù)目產(chǎn)生中斷,主機(jī)設(shè)備從RBR中讀取數(shù)據(jù)后,中斷會(huì)自動(dòng)清除。
2.3 數(shù)據(jù)發(fā)送
發(fā)送操作和接收操作相反,主機(jī)數(shù)據(jù)寫入發(fā)送保持寄存器(THR),THR是一個(gè)16字節(jié)的FIFO,然后數(shù)據(jù)移入發(fā)送移位寄存器(TSR),之后送人SOUT。當(dāng)中斷設(shè)置時(shí),UART會(huì)根據(jù)FIFO中發(fā)送數(shù)據(jù)的數(shù)目產(chǎn)生中斷,主機(jī)設(shè)備可根據(jù)中斷來(lái)決定是否繼續(xù)發(fā)送數(shù)據(jù)。
除了收發(fā)操作外,TLl6C550C還可以產(chǎn)生其他類型的中斷,但它只有一根中斷信號(hào)引腳INTRPT,因此主機(jī)接收到中斷后必須判決產(chǎn)生中斷的信號(hào)源。
FIFO的操作通過(guò)FCR來(lái)設(shè)置。當(dāng)使用FIFO時(shí),UART中最多可存放16字節(jié)數(shù)據(jù),反之則只能存放一個(gè)數(shù)據(jù),即相當(dāng)于FIF0只有一個(gè)字節(jié)大小。有兩種工作方式:中斷方式和查詢方式。
UART中還有Modem控制寄存器(MClR)和Modem狀態(tài)寄存器(MSR),它們用于控制一些信號(hào)引腳,能把UART的工作狀態(tài)通過(guò)硬件的方式表達(dá)出來(lái)。
2.4部分LIART匯編編程
測(cè)試程序:
ST #0x55,*SP(var_reg) ;用來(lái)確定LJART設(shè)備是存在的
PORTW*SP(vat_reg),ADDR_SPR
PORTR ADDR_SPR.*SP(vaLr_reg)
LD *SP(var_reg),A
SUB #0x55,A,B
BC rs232_no_errclr,BEQ
設(shè)置特率程序:
ST #0x83,*SP(vaL_reg)
PORTW*SP(var_reg),ADDK_LCR
ST #0xOO,*SP(var_reg) ;設(shè)置波特率為9600
PORTW*SP(var_reg),ADDR_DIV_MSB
ST #0x18,*SP(van_reg)
PORTW*SP(vaLreg),ADDR_DUV_LSB
ST #0x03,*SP(var_reg)
PORTW*SP(var_reg).ADDR_LCR
3 總 結(jié)
利用軟件模擬的方法,缺點(diǎn)是DSP將長(zhǎng)時(shí)間處于對(duì)IJART的中斷和處理中,無(wú)法全速參與運(yùn)算,而且占用了外部中斷0和一個(gè)定時(shí)器(有些TMS320C54XDSP只有一個(gè)定時(shí)器);優(yōu)點(diǎn)是在DSP和帶UART的外設(shè)之間除了電平轉(zhuǎn)換部分外不需要另外的硬件,可以節(jié)約產(chǎn)品的成本。利用外部接口芯片組的方法,缺點(diǎn)是增加了額外的硬件開銷,從而增加了產(chǎn)品成本;優(yōu)點(diǎn)是收發(fā)數(shù)據(jù)快,可以和數(shù)據(jù)處理同步進(jìn)行,能夠實(shí)現(xiàn)系統(tǒng)的實(shí)時(shí)性。
評(píng)論