|
#define C_rx_buf_size 100 //接收緩沖區(qū)大小 #define C_tx_buf_size 100 //發(fā)送緩沖區(qū)大小 unsigned char C_rx_buf[C_rx_buf_size]; //接收緩沖區(qū) unsigned char C_tx_buf[C_tx_buf_size]; //發(fā)送緩沖區(qū) unsigned int p_C_rx_w=0; //接收緩沖區(qū)寫指針 unsigned int p_C_tx_w=0, p_C_tx_r=0; //發(fā)送緩沖區(qū)讀寫指針 volatile int *Add_C_RHR = (volatile int *)0xC00010; //C口基地址 volatile int *Add_C_THR = (volatile int *)0xC00010; volatile int *Add_C_DLL = (volatile int *)0xC00010; volatile int *Add_C_IER = (volatile int *)0xC00011; volatile int *Add_C_DLM = (volatile int *)0xC00011; volatile int *Add_C_ISR = (volatile int *)0xC00012; volatile int *Add_C_FCR = (volatile int *)0xC00012; volatile int *Add_C_LCR = (volatile int *)0xC00013; volatile int *Add_C_MCR = (volatile int *)0xC00014; volatile int *Add_C_LSR = (volatile int *)0xC00015; volatile int *Add_C_MSR = (volatile int *)0xC00016; void init_ST16C554D_C( ) //串口C口的初始化函數(shù) { *Add_C_LCR = 0x80; //使能波特率因子寄存器 *Add_C_DLM = 0x00; *Add_C_DLL = 0x01; //設(shè)置波特率為460800 (主頻7.3728M) *Add_C_LCR = 0x1b; //選擇字長為8位,停止位為 1位,偶校驗 *Add_C_FCR = 0x07; //選擇FIFO MODE *Add_C_IER = 0x00; //禁止中斷 *Add_C_MCR = 0x08; //選擇NORMAL MODE } void Read_ST16C554D_C( )//串口C口的接收函數(shù),置于INT0中斷函數(shù)中 { while( (*Add_C_LSR) & 0x01 ) //判C口線狀態(tài)寄存器 { *( C_rx_buf + p_C_rx_w) = (*Add_C_RHR) & 0x0ff; //接收數(shù)據(jù)送接收緩沖區(qū) p_C_rx_w ++; //接收緩沖區(qū)指針加1 if(p_C_rx_w == C_rx_buf_size) p_C_rx_w = 0; //接收緩沖區(qū)指針回零 } } void C_tx_handle() //串口C口的發(fā)送函數(shù) { while(p_C_tx_r != p_C_tx_w) { if( *Add_C_LSR & 0x20 ) //判C口線狀態(tài)寄存器 { *Add_C_THR = *(C_tx_buf + p_C_tx_r); //發(fā)送 p_C_tx_r ++; //發(fā)送緩沖區(qū)指針加1 if( p_C_tx_r == C_tx_buf_size ) p_C_tx_r = 0; //發(fā)送緩沖區(qū)指針回零 } } }
結(jié)語 在筆者開發(fā)的光纖陀螺捷聯(lián)式慣性導(dǎo)航系統(tǒng)中,通過使用ST16C554D擴(kuò)展了4路串口,電路簡單,傳輸速率高,延時小,并且極大地減輕了主控計算機(jī)TMS320VC33的負(fù)擔(dān)。本設(shè)計,在通訊中各通道長期工作正常,完全達(dá)到了預(yù)期目的。
參考文獻(xiàn): 1. ST16C554D data manual. EXAR Corporation 2. TMS320VC33 Digital Signal Processor. Texas Instruments.2002
圖1 多路通訊原理框圖
|