打印
[技术问答]

求助NUC121串口接收不能进入超时中断

[复制链接]
1339|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
18576478035|  楼主 | 2018-3-15 13:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问下串口使用超时中断,接收64BYTE数据,设置FIFO为14BYTE但是不会进入超时中断的原因??求助!!!数据接收完了放在缓冲数组中,但是就是不会进入超时中断处理函数
沙发
18576478035|  楼主 | 2018-3-15 14:23 | 只看该作者
    SYS_ResetModule(UART0_RST);
    /* Configure UART0 and set UART0 Baudrate */
    UART_Open(UART0, 115200);
    AutoFlow_FunctionRxTest();
void AutoFlow_FunctionRxTest(void)
{
    uint32_t u32i;
   // GetChar();
    /* Enable RTS and CTS autoflow control */
   // UART_EnableFlowCtrl(UART0);
    /* Set RTS Trigger Level as 8 bytes */
    //UART0->FIFO = (UART0->FIFO & (~UART_FIFO_RTSTRGLV_Msk)) | UART_FIFO_RTSTRGLV_8BYTES;
    /* Set RX Trigger Level as 8 bytes */ // 触发接收中断 阈值大小
    UART0->FIFO = (UART0->FIFO & (~UART_FIFO_RFITL_Msk)) | UART_FIFO_RFITL_14BYTES;
    /* Set Timeout time 0x3E bit-time and time-out counter enable */
    UART_SetTimeoutCnt(UART0, 0x3e);
    /* Enable RDA and RTO Interrupt */
    UART_EnableInt(UART0, (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk));     
}
void UART0_IRQHandler(void)
{
                   u8 ret = 0;
            static u16  g_i32pointer = 0;
            if(UART_GET_INT_FLAG(UART0, UART_INTSTS_RDAINT_Msk))  /* UART receive data available flag */
                        {
              //while(UART_GET_RX_EMPTY(UART0) == 0)
        {
                                           //判断接收完成  
                                    g_u8RecData[g_i32pointer++] =  UART_READ(UART0) ;
        }
                        }
                        else if(UART_GET_INT_FLAG(UART0,UART_INTSTS_RXTOINT_Msk))
                        {
                                while(UART_GET_RX_EMPTY(UART0) == 0)
        {
                                           //判断接收完成   
                                    g_u8RecData[g_i32pointer++] =  UART_READ(UART0) ;  
        }
                                 //将数据拆包分别放入队列中
                                 Uart_Rec_Over_Flag = 1;
                                 Uart_Rec_Over_Len = g_i32pointer ;
                                 g_i32pointer = 0 ;
                                // Uart_Rec_Over_Len = g_i32pointer ;
                                   //判断数据有效性
//                                  if(g_u8RecData[0] == 0xFF &&g_u8RecData[1] == 0xFA)
//                                        {
//                                                  //查找有无空间
//                                                  ret =Find_Space() ;
//                                                  if(ret<MAX_SIZE)
//                                                        {
//                                                                        Uart_Cmd_Data[ret][1] = g_i32pointer ;
//                                                                  my_strncpy(&Uart_Cmd_Data[ret][2],g_u8RecData,g_i32pointer) ;
//                                                        }
//                                                        else
//                                                        {
//                                                                PAbortStat = 0x01 ;
//                                                                //缓冲区没有空间
//                                                                //usart0_sendstring("nospace",7) ;
//                                                        }
//                                                       
//                                                        g_i32pointer = 0 ;
//                                        }
//                                        else
//                                        {
//                                                        //收到无效数据
//                                                        g_i32pointer = 0 ;
//                                                 //串口发送异常指令
//                                                //mymemset(g_u8RecData,0,sizeof(g_u8RecData));
//                                        }               
                        }
}

使用特权

评论回复
板凳
18576478035|  楼主 | 2018-3-15 14:23 | 只看该作者
求助 ,为啥不会进入超时中断函数

使用特权

评论回复
地板
18576478035|  楼主 | 2018-3-15 14:37 | 只看该作者
有人知道吗

使用特权

评论回复
5
jliu_nuvoton| | 2018-3-15 16:13 | 只看该作者
超时中断的意思是在FIFO中有数据但是又不满接收阈值(你设置的是14字节阈值,FIFO中有1~13个字节)如果后续没有数据过来就会发生超时中断。
你试试UART_INTSTS_RDAINT_Msk中断里不要读数据,串口只发2个字节给NUC121,看看是否可以进入超时中断

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

187

帖子

2

粉丝