在玩CH579M的时候,使用串口功能,发现
case UART_II_RECV_RDY:
for(i=0; i!=trigB; i++)
{
UINT8 data = UART1_RecvByte();
if(RxCnt < 64)
{
RxBuff[RxCnt ++] = data;
}
}
break;
改成如下:
case UART_II_RECV_RDY:
while(R8_UART1_LSR & RB_LSR_DATA_RDY)
{
UINT8 data = UART1_RecvByte();
if(RxCnt < 64)
{
RxBuff[RxCnt ++] = data;
}
}
break;
发现R8_UART1_LSR 的BIT0:RB_LSR_DATA_RDY一直置位,导致中断无法退出。但DATASHEET说明是可以读取所有FIFO数据后读取FIFO中所有数据后,该位自动清0的,但实际上无法实现。并尝试关闭FIFO结果仍然一样,不知各位大神是否有遇到或指点一下,谢谢!
// 串口配置程序,使用例程
void UART1_DefInit( void )
{
UART1_BaudRateCfg( 115200 );
// R8_UART1_FCR = (2<<6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR | RB_FCR_FIFO_EN; // FIFO´ò¿ª£¬´¥·¢µã4×Ö½Ú
R8_UART1_FCR = (0<<6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR; // FIFO´ò¿ª£¬´¥·¢µã4×Ö½Ú
R8_UART1_LCR = RB_LCR_WORD_SZ;
R8_UART1_IER = RB_IER_TXD_EN;
R8_UART1_DIV = 1;
}
离线
无语了,刚发贴就发现原因了,自己不知道怎么改成这样了
#define UART1_RecvByte() ( UART_RBR )
离线
其实我不喜欢用FIFO,我做的是485从机,实时回复时序要求很高的
离线