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.

[参考译文] TMS570LC4357:在中断模式下使用 sciReceiveByte()后出现 SCI 接收错误

Guru**** 2473260 points
Other Parts Discussed in Thread: HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1044047/tms570lc4357-sci-reception-error-after-using-scireceivebyte-when-used-in-interrupt-mode

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

我已经编写了从串行端口接收数据的代码、用于相同的目的。Halcogen 设置如下

代码写入接收如下所示:

空 sci3高 LEVELInterrupt (空)

uint32 vec = sciREG3->intvecT0;
uint8字节;
/*用户代码开始(37)*/
/*用户代码结束*/

开关(VEC)

案例1U:
sciNotification (sciREG3、(uint32) SCI_WAKE_INT);
中断;
案例3U:
sciNotification (sciREG3、(uint32) SCI_PE_INT);
中断;
案例6U:
sciNotification (sciREG3、(uint32) SCI_FE_INT);
中断;
案例7U:
sciNotification (sciREG3、(uint32) SCI_break_INT);
中断;
案例9U:
sciNotification (sciREG3、(uint32) SCI_OE_INT);
中断;

案例11U:
/*接收*/
字节=(uint8)(sciREG3->RD & 0x000000FFU);


xResult = xEventGroupSetBitsFromISR (Tsk_eventhandler, RS232ISREVT,&xHigherPriorityTaskWokon);

/*我在这里设置事件位*/


/* if (g_sciTransfer_t[2U].rx_length >0U)

*g_sciTransfer_t[2U].rx_data =字节;
G_sciTransfer_t[2U].rx_data++;
g_sciTransfer_t[2U].rx_length--;
if (g_sciTransfer_t[2U].rx_length == 0U)

sciNotification (sciREG3、(uint32) SCI_RX_INT);

}*/

中断;

案例12U:
/*发送*/
/*SAFETYMCUSW 30 S MR:12.2、12.3 "用于发送/接收轮询和中断模式下的数据计数"*/
-g_sciTransfer_t[2U].TX_length;
if (g_sciTransfer_t[2U].TX_length > 0U)

uint8 txdata =* g_sciTransfer_t[2U].TX_data;
sciREG3->TD =(uint32) txdata;
G_sciTransfer_t[2U].TX_DATA++;

其他

sciREG3->CLEARINT =(uint32) SCI_TX_INT;
sciNotification (sciREG3、(uint32) SCI_TX_INT);

中断;

默认值:
/*幻象中断、清除标志并返回*/
sciREG3->FLR = sciREG3->SETINTLVL & 0x07000303U;
中断;

/*用户代码开始(38)*/
/*用户代码结束*/

接收功能的代码如下图所示:

代码目标:

1)未接收串行端口上指定的所有字节:

示例:给定的字符串-> InputStringonSCI3port

观察到的输入: 读取后缺少随机的几个字节

2)在收到数据后等待 while 循环:

3)为了避免在 while 循环中等待、我使用了 API uint32 sciIsRxReady (sciBASE-t * sci)来检查中断  

  ->未获得中断 SCI_RX_INT 始终为低电平。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在向 CPU 发出中断请求之前、有三个"门":

    1. 产生中断请求的模块有一个寄存器来启用它可以产生的每个中断。
    2. 矢量中断管理器(VIM)具有寄存器、可根据优先级机制(先是较低的通道编号)将来自模块的中断请求转发到 CPU。
    3. 最后、必须将 CPU 本身配置为响应 VIM (IRQ 或 FIQ)转发的中断请求。

    我看到您已启用 SCI RX 中断、并且 SCI 中断也在 VIM 表中被检查。 您是否启用了 IRQ 中断?

    可以通过调用来启用 IRQ:

    _enable_IRQ ();

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是, _enable_IRQ();被调用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否有用于 SCI3的 SCI 收发器?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是... RS232收发器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此外,即使我没有串行端口上的任何数据,我也没有什么观察结果。。

    之后它还会获得错误中断并在 SCIReceiveByte()的 while 循环中等待

    事件位 RS232ISREVT 已设置,它将进入 SCIReceiveByte()等待 while 循环。



    需要在上述观察中提供指导。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    下面是 SCI 从 SCI 终端接收消息的示例。

    e2e.ti.com/.../TMS570LC43x_5F00_SCI_5F00_RX_5F00_Interrupt.zip

    sciReceive (sciREG1、6、&sci_cmd[0]);应在终端向 MCU 发送数据之前首先调用 sci_cmd[0]。