我参考NUC123Z的BSP使用串口中断接收功能,但是不知道为什么串口有数据过来但是一直如法进入串口中断处理函数UART1_IRQHandler()。我的串口初始化函数和串口中断处理函数如下。 确认单片机发送数据是正常的。,但是接收不能进入UART1_IRQHandler()。因为我在UART1_IRQHandler()中加了一条LED闪灯的语句LEDG_INVERSE();但是用PC无论怎么发数据灯就是不闪,用示波器测量单片机RX端有数据过来,说明硬件没有问题。为什么不能进入UART1_IRQHandler(),请高人指点迷津,谢谢! void UartInit(void) { STR_UART_T sParam;
SYS_RESET_IP2(SYS_RST_UART1); outpw(&SYS->GPB_MFP, inpw(&SYS->GPB_MFP) | (0x2<<4)); outpw(&SYS->ALT_MFP, inpw(&SYS->ALT_MFP) & ~(0x2<<15)); sParam.u32ClkSrc = CLK_UART_HXT; sParam.u32ClkDiv = 1; sParam.u32ClkFreq = __XTAL; sParam.u32BaudRate = 115200; sParam.u32cDataBits = UART_WORD_LEN_8; sParam.u32cStopBits = UART_STOP_BIT_1; sParam.u32cParity = UART_PARITY_NONE; sParam.u32cRxTriggerLevel = UART_FCR_RFITL_1BYTE; sParam.u32BaudMode = UART_BAUD_MODE2; sParam.u8RxTimeOut = 0; DrvUART_Init(UART1, &sParam);
DrvUART_EnableInt(UART1, UART_IER_RDA_IEN | UART_IER_RTO_IEN |UART_IER_RLS_IEN); NVIC_EnableIRQ(UART1_IRQn); }
void UART1_IRQHandler(void) { uint8_t rx_data = 0; uint32_t u32IntSts = UART1->ISR; LEDG_INVERSE(); if(u32IntSts & UART_ISR_RDA_INT_Msk) { while(UART_GET_RDA_IF(UART1))
{ rx_data = UART_READ(UART1); } } }
|