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.
工具/软件:Code Composer Studio
有关 TMS570LS3137的三个问题:
1、SCI 接收中断有时不及时。
在使用接收中断时、有时会产生溢出错误中断。
正如技术参考手册所述、SCI 模块没有 FIFO 功能。
那么,如何避免溢出错误?
2 μ s CAN、传输中断有时不连续。
我使用的 CAN 传输如下所示:
当缓冲区中的数据包准备就绪时、我向 CAN 报文对象发送一条帧报文。
成功发送报文后、就会产生 TxOK 中断。我在中断函数中再次发送报文。
在数据缓冲区为空之前、封装数据将持续传输。
但是、传输链有时会中断、因为不会生成 TxOK 中断。
自动重传和自动总线开启均已启用。
那么、如何确保数据可以在中断模式下持续及时地传输。
3、GIO 中断
GIO 引脚可在正常运行时配置为边沿中断、在低功耗模式下配置为电平中断。
问题是,GIO 引脚是否可以配置为正常操作中的电平中断?
尊敬的 Maxr:
[引用 user="maxr]1、SCI
我发现一些较高优先级的中断可能会延迟 SCI 中断。 因此、我只需通过 HALCoGen 配置即可将 SCI 中断的优先级升级到 FIQ。 溢出错误中断不会在很长一段时间内生成。
但是、变速器问题仍然存在。
事实上、我已经纠正了一个错误:
在主进程中将一个字节移动到 SCITD 寄存器之前、为了开始新的封装数据传输、我必须检查 TX 空位、而不是检查 TXRDY 位。 当 TX 空位为1时、发送器缓冲器和移位寄存器都为空。 这意味着 SCI 可自由用于新的封装传输。 当 TXRDY 位为1时、SCITD 准备好接收下一个字符。 这并不意味着最后一次封装传输的结束。
此外、所有封装数据都保存在环形缓冲器中以进行传输。 在主进程中将一个字节移动到 SCITD 寄存器之前、我禁用传输中断、以避免竞争访问数据缓冲区。
修改后、传输错误已减少、但有时仍会丢失数据。 例如、一个封装数据存储一个字节。
操作 SCI 时是否需要注意其他事项?[/QUERT]
要了解正在发生的情况、您需要了解导致数据丢失的情况。 即、它是一个中断优先级问题还是一个处理接收到的数据的延迟问题。 如前所述、您通常需要在中断中花费尽可能少的时间。 即、将数据移动到缓冲区、然后重新启用中断并退出。 为了适应这种方法、您的环形缓冲器需要足够大、以便跟上数据流。 通常、测试这种情况的一种好方法是设置一个简单的 PC 应用程序、以重复向 MCU 发送数据。 数据流应该是一个简单的计数或一些其他模式、以便查看字节并检测丢弃的数据。 即0-9、9-0重复模式。 请注意、当 CAN 等其他中断和数据流也在运行时、这会更加复杂、因此您的应用中需要考虑到这一点。
[引用 user="maxr]2、DCAN
我使用的 DCAN 传输过程与 SCI 类似。
恐怕在主进程中开始新的包数据传输之前、使用传输请求 X 寄存器检查 Tx 消息挂起是不够的。 这并不意味着 DCAN 可自由用于新的封装传输。
我很困惑如何获取最后一个封装传输的结束状态、例如检查 SCI 中的 TX 空位。[/QUERP]
是的、由于仲裁和多节点总线、CAN 是一种不同的动物。 DCAN 必须确保在传输前可以清楚地发送。 DCAN ES 寄存器中的 TxOK 位。 它也可以使用 SIE (状态更改中断使能)连接到中断。 DCAN CTL 寄存器中的位。
[引用 user="maxr]3、GIO
GIO 中断引脚的电平由一个外部芯片控制。 只有在外部芯片上没有中断源时、引脚才会变为高电平。 TMS570通过 SPI 通信清除 ISR 中的外部芯片中断状态。 如果 ISR 结束、并且在引脚变为高电平之前在外部芯片上生成新的中断源、中断引脚可能会保持低电平。 此电源下降沿中断将永远不会生成。[/报价]
Hercules 器件上不支持电平触发中断。 当通过 SPI 命令清除中断时、您可以使用边沿触发中断和 RTI 计数器的某种组合来查找下降边沿。 即、发出 SPI 命令后、会有指定的时间将发送到 GPIO 的信号发出。 如果在指定的时间之后、它没有、您可以假设已经发出第二个中断信号并跳转到您的处理程序。 这一切取决于您的延迟要求以及您需要多快的服务速度。