This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS570 SCI中断

你好:

        程序作用是利用串口助手输入数据,中断接收后再通过串口打印出来。接收和发送我放在了sciNotification函数中。

        程序运行时始终不进入中断处理。麻烦各位高手看看是程序或者hal中哪里出了问题,谢谢。

  • 一个关于SCI的程序供你参考吧.

    1881.TMS570LS0432_SCI_ISR.zip

  • 在SCI使能中断函数
    void sciEnableNotification(sciBASE_t *sci, uint32_t flags)
    {   
            uint32_t index = sci == sciREG ? 0 : 1;
            g_sciTransfer[index].mode |= (flags & SCI_TX_INT);   
             sci->SETINT                = (flags & ~SCI_TX_INT);
  • 我也遇到这样的问题 用的是烧程序的那个虚拟串口

    进不了中断

    接受有问题

  • 你好,你说的我看了。我需要的是串口随便输入字符串,接收之后中断原样发送回来。

  • Bo shi,

    这个是中断进不了还是sciNotification()进不去呢?你可以打断点看看。

    在你的程序里面sciNotification()应该是进不去的,你需要初始化rx_length变量不为0;如果是连中断都进不去,你可以看看硬件连线或者引脚波形是否正确。

    Best Regards,

    Sam

  • 换句话说,也就是中断接收的时候必须制定接收数组的大小,如果接收的字符串长度不同,长度无法使用变量?

  • 仔细看中断处理中的这段代码:

    case 11U:
    /* receive */
    byte = (uint8)(scilinREG->RD & 0x000000FFU);

    if (g_sciTransfer_t.rx_length > 0U)
    {
    *g_sciTransfer_t.rx_data = byte;
    /*SAFETYMCUSW 567 S MR:17.1,17.4 <APPROVED> "Pointer increment needed" */
    g_sciTransfer_t.rx_data++;
    g_sciTransfer_t.rx_length--;
    if (g_sciTransfer_t.rx_length == 0U)
    {
    sciNotification(scilinREG, (uint32)SCI_RX_INT);
    }
    }
    break;

    如果g_sciTransfer_t.rx_length不初始化为非0的话,sciNotification根本进不去。

    一般在调用sciReceive的时候会初始化rx_length,但是你的程序中没有调用这个函数,也没有初始化rx_length。

    不知道你的linLowLevelInterrupt中断能不能进?

  • 你好,看了您的解答。现在程序可以进入中断了,其中调用了sciReceive函数。请看下我另一个帖子的程序,里面不知道为什么无法进入中断,是否是配置之类的问题。