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.

[参考译文] TMDS273GPEVM:MCU + 8.2 中的UART中断模式

Guru**** 2581345 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1095874/tmds273gpevm-uart-interrupt-mode-in-mcu-8-2

部件号:TMDS273GPEVM

硬件:- TPR12 EVM (TMDS273GPEVM)

软件:- CCS 11.1 .0.0.0011万 , MCU+ 8.2

 

我正在 通过UART从MATLAB连续发送数据。   我正在尝试通过修改 UART_echo测试,在EVM上的中断模式下通过UART接收此数据。 我不断收到超时错误。

但是,我可以在轮询模式下正确接收数据。 两个测试之间唯一的修改是传输模式(从中断到轮询)。  

我已在EVM上附加了MATLAB和测试代码。  

INTERRPUT模式是否期望传输之间有一些延迟?

e2e.ti.com/.../matlab-code.txte2e.ti.com/.../uart_5F00_echo.c.txt

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

    您好,Sumedh:

    请参考下面SDK中的中断模式示例并与您的更改进行比较吗?

    AM273x MCU+ SDK:UART Echo回调(TI.com)

    此致,

    普拉萨德

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

    您好,Prasad:

    此示例使用写模式的回调选项,而我使用的是阻止模式。 除此之外,其他都是一样的

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

    我还尝试了默认UART_ECHO_callback测试。 我得到了以下结果

    我正在通过MATLAB通过UART连续发送[1 2 3 4 5 6 7 8]。
    我已修改了代码,以使用单独的缓冲区进行读取操作。 读取操作之前,我正在将缓冲区初始化为0。  

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

    您好,Sumedh:

    该问题似乎是因为目标端代码中有printf,并且需要时间在控制台上打印。

    但是,主机端代码将持续发送数据。

    您是否可以删除运行时路径中从UART读取的打印件,并尝试检查代码是否正确获取数据。

    此致,

    普拉萨德

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

    您好,Prasad:

    删除打印件后,可以正确读取一次数据。  

    但是,如果我尝试连续运行MATLAB和示例代码(仅在示例代码中执行读取操作),我会收到大量错误读取。 这是否与时间安排有关?

    我正在对代码进行缓冲区检查,以确定是否已正确读取整个缓冲区,并在控制台中为每个读取操作打印一次正确/错误

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

    您好,Sumedh:

    在PC端代码中,您将连续发送UART数据,但在目标端,您在接收每组数据后就有了一些逻辑,同时,您还可以打印每项操作的正确/错误信息。 在此期间,PC侧代码将继续发送数据。

    这将导致主从设备之间的同步丢失,您会看到数据不匹配,因为发送器和接收器之间没有硬件同步。

    您可以在目标端使用更大的缓冲区启动单个请求的传输请求,也可以在每次迭代后处理目标端代码时在PC端代码上有一些延迟。

    此外,在每次迭代中都没有打印件,因为打印件将花费大量时间。 您可以使用其他一些逻辑来确定数据一致性,例如将结果存储在某个变量中,以获得您看到不匹配的次数并在最后打印

    此致,

    普拉萨德

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

    您好,Prasad:

    根据您的建议,增加读取缓冲区的大小后,示例代码将起作用。

    我们正在测试雷达上的集成传感器。 它将通过UART以100 Hz的频率连续传输数据。 如果我尝试在PDK中读取和处理数据,我可以用正确的读数成功地完成。 但是,MCU +的操作同样失败。 我正在MCU+中使用UART中断回调模式。

    来自传感器的信息包为19字节。 在UART中,我读取了37个字节,并对数据包的前两个字节执行了正确性检查(传感器的前两个字节始终相同)。 在几乎所有情况下,这种做法都失败了。 在某些情况下,它会通过,但实际数据会出错。 但是,在PDK中也是如此。

    导致此问题的原因是什么?

    相同测试用例的轮询模式在MCU+中运行良好。 但是,我们不能使用这种方法,因为这会严重降低我们的处理速度。

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

    您好,Sumedh:

    您的PC端应用程序正在通过UART连续发送数据,对吗? 还是以100 Hz的频率发送?

    您是否可以更新PC端应用程序,按照实际使用情况的要求每100Hz发送一些字节,并检查您是否仍然看到问题?

    您正在配置的波特率是什么?

    此致,

    普拉萨德