这个串口驱动是周公的模板,具体代码如下
uint8 UART0Read(uint8 *data, uint16 timeout)
{
uint8 error=0;
OS_ENTER_CRITICAL();
while ((U0LSR & 0x00000001) == 0)
{ /* 没有收到数据 */
U0IER = U0IER | 0x01; /* 允许接收中断 */
OSSemPend(Uart0ReadSem, timeout, &error); /* 等待接收数据 */
if(error == OS_TIMEOUT)
{
return UART0_TIMEOUT;
}
}
*data = U0RBR; /* 读取收到的数据 */
OS_EXIT_CRITICAL();
return error;
}
请注意里面的开关中断,这个函数是我最高任务里的,当这个开始运行时,一开始就关中断,这样我的中断就不运行了,并且一直等待信号量下去,这样就会出错吧,因为大部分时间都是在无限时超时等待数据,而中断是关掉的,我们的系统却没有出现问题,不知道怎么解释。而且这是周公的模板,不知道在这里开关中断是和用意。 |