void UART1_Init()
{
/*---------------------------------------------------------------------------------------------------------*/
/* Init UART */
/*---------------------------------------------------------------------------------------------------------*/
UART1->BAUD = UART_BAUD_MODE2 | UART_BAUD_DIV_MODE2(PLL_CLOCK, 9600);//PLL_CLOCK=48000000
_UART_SET_DATA_FORMAT(UART1, UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1);
/* Enable Interrupt*/
_UART_ENABLE_INT(UART1, (UART_IER_RDA_IEN_Msk));//串口只在有接收到数据时产生中断
NVIC_EnableIRQ(UART1_IRQn);
}
//ISR to handle UART Channel 1 interrupt event
void UART1_IRQHandler(void)
{
LED1^=1;//LED闪烁
uint32_t u32IntSts= UART1->ISR;
uint8_t u8InChar=0x00;
if(u32IntSts & UART_ISR_RDA_INT_Msk)
{
while(_UART_IS_RX_READY(UART1))
{
_UART_RECEIVEBYTE(UART1,u8InChar);
UART_SENDBYTE(UART1,u8InChar);//串口和一个无线模块通讯,将接收到的数据再通过串口发送出去。
}
}
}
按照上面的代码运行,无法进入中断,用示波器看到串口是有波形输入,而且波形也是对的,但是就是没法进入中断,因为不闪灯,也没有数据通过串口发送到无线模块(串口发送数据功能正常),请帮忙看看这部分代码是否有问题?
如果将初始化中的_UART_ENABLE_INT(UART1, (UART_IER_RDA_IEN_Msk));修改为_UART_ENABLE_INT(UART1, (UART_IER_RDA_IEN_Msk | UART_IER_RTO_IEN_Msk | UART_IER_THRE_IEN_Msk));则可以进入中断一次并且能够闪灯和发送一个字节的数据,但是无法接受更多的数据,不知道什么原因。请懂的帮忙看看,谢谢 |