控制板使用TL16C554进行串口扩展,采用查询方式。通过与PC串口连接调试,发现能够收发数据,但从PC发送"3F"、“7F”、“FF”等数据时,控制板接收数据不正确。另外这些数据在连续发送16次后,控制板能接收到此相应的数据。请帮忙查看一下是什么原因。谢谢!
初始化程序及查询程序如下:
void uart_init()
{
uchar i,tmp_char,j;//,j,tmp;
//所有的串口设置均相同
for ( i = 0; i < SCIEX_CHANNEL_NUM; i++){
uart_write(i,SCIEX_LCR,0x80);//enable baudrate set
uart_write(i,SCIEX_DLL,BAUD_DIVIDOR);
uart_write(i,SCIEX_DLM,BAUD_DIVIDOR >> 8);
uart_write(i,SCIEX_LCR,0x03);//8,1,0
uart_write(i,SCIEX_FCR,0x87);//enable fifo
uart_write(i,SCIEX_IER,0x00);//interrupt enable
for ( j = 0; j < 16; j++){
tmp_char = uart_read_byte(i);//clear recieve buffer
}
tmp_char = uart_read(i,SCIEX_IIR);
uart_write(i,SCIEX_MCR,0x08);//enable sci interrupt*/
sci_txd_seek[i] = 0;
sci_rxd_seek[i] = 0;
sci_txd_buff[i][0] = 0;
sci_txd_buff[i][1] = 0;
sci_txd_buff[i][2] = 0;
sci_txd_buff[i][3] = 0;
sci_txd_buff[i][4] = 0;
sci_rxd_buff[i][0] = 0;
sci_rxd_buff[i][1] = 0;
sci_rxd_buff[i][2] = 0;
sci_rxd_buff[i][3] = 0;
sci_rxd_buff[i][4] = 0;
}
//串口标志位初始
flag_sci_busy = 0x00;
}
void uart_chaxun()
{
uchar i,tmp,channel;
for (channel=0;channel<4;channel++)
{
tmp = uart_read(channel,SCIEX_LSR);
if(tmp & 0x01)
{
switch(channel)
{
case SCIEX_CH0:
ACTIVE_FLAG_SCI_RXD_CH0_BUSY();
break;
case SCIEX_CH1:
ACTIVE_FLAG_SCI_RXD_CH1_BUSY();
break;
case SCIEX_CH2:
ACTIVE_FLAG_SCI_RXD_CH2_BUSY();
break;
case SCIEX_CH3:
ACTIVE_FLAG_SCI_RXD_CH3_BUSY();
break;
default:
break;
}
for ( i = 0; i < SCI_LEN; i++)
{
sci_rxd_buff[channel][i] = uart_read_byte(channel);
}
}
}
}