TI中文支持网
TI专业的中文技术问题搜集分享网站

TMDSEVM6657: 在6657评估板上调试STK_C6657中的UART例程,通过CPU中断接收数据,默认代码中,一次中断只能接收14字节,第二次中断接收16字节,依次交替,其余再多的字节都接收不到,这是为什么?即使修改了缓存数组的大小,也一样

Part Number:TMDSEVM6657

例程是原始UART例程,我只修改了中断响应函数中的代码,如下:

interrupt void KeyStone_UART_Rx_ISR()
{
    Uint32 rx_cnt = 0;

    /* Disable the CIC out for interrupt processing */
    CIC_Regs->HINT_ENABLE_CLR_INDEX_REG = uiCIC_out_num+1;

    // Interrupt from UART0
    if(CIC_Regs->RAW_STATUS_REG[CSL_INTC0_URXEVT>>5] & (1<<(CSL_INTC0_URXEVT%32)))
    {
        rx_cnt= KeyStone_UART_read(UART_Rx_Buf, RX_BUF_BYTE_SIZE, 0);

        CIC_Regs->STATUS_CLR_INDEX_REG = CSL_INTC0_URXEVT;
        printf("rx_cnt= %d\r\n", rx_cnt);
        KeyStone_UART_write(UART_Rx_Buf, rx_cnt, 0);
        //echo back the received characters
//        if(bUartEchoBack)
//            UART_Echo_back(rx_cnt, 0);
    }

shilong cao:

  问题原因找到了,关闭了void UART_Echo_back(Uint32 rx_cnt, Uint32 uartNum)函数中的printf输出,就正常了,如下代码注释掉:

  for (i = 0; i < rx_cnt; i++)    {        printf("%c", UART_Rx_Buf[i]);    }    fflush(stdout);

具体原因应该是fflush函数导致的,仅仅注释掉fflush一行代码,也是可以正常输出的,可能是fflush影响了某个缓存区

,

Shine:

感谢分享解决办法!

赞(0)
未经允许不得转载:TI中文支持网 » TMDSEVM6657: 在6657评估板上调试STK_C6657中的UART例程,通过CPU中断接收数据,默认代码中,一次中断只能接收14字节,第二次中断接收16字节,依次交替,其余再多的字节都接收不到,这是为什么?即使修改了缓存数组的大小,也一样
分享到: 更多 (0)