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:使用 N2HET 触发 ADC

Guru**** 2482105 points
Other Parts Discussed in Thread: TMS570LC4357, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/866591/tms570lc4357-adc-triggering-with-n2het

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

您好!

我们正在尝试将 TMS570LC4357配置为使用 N2HET1引脚8来触发 A/D 采样、如以下文档 所示:http://www.ti.com/lit/an/spna227/spna227.pdf

我已设置 HALCoGen 项目、以2000.0us 的速率生成占空比为50%的 PWM 信号(用于500Hz 采样)。 我已使用示波器确认了这种行为。 此外、ADC1组1在引脚 HET1_8的下降沿触发转换:

现在、结果很有趣。 尝试重新刷写或调试应用程序时、我收到此错误多次:

在调试过程中、我还看到了一些场景、在这些场景中、变量在 HAL 函数中被分配了荒谬的值:

在上图中 、count 设置为 FFFFFF40、这将产生一个不合理长的循环并停止代码执行。 在这种情况下、我希望计数等于32 (因为我启用了32个 A/D 引脚)。 此外、变量  intcr_reg 为224 (这就是 count 为 FFFFFF40的原因)。 在通读 TRM 后、这看起来同样是一个不合理的值。  

此外、我还看到了 GxINTCR[组]值从未改变的情况(因此没有发生采样)。 有时、代码工作得非常完美。  

在我描述的每种情形中、根本没有对代码进行任何更改。 我只需使用相同的二进制映像对器件进行重新编程。 有什么想法为什么?

此外、我们还在项目中使用 SafeRTOS。 这可能会有某种冲突吗? 中断的优先级? 在测试此硬件触发源之前、我们使用的是通过 RTOS 计时器进行的软件触发、并且这种方法没有任何我们可以看到的错误。

谢谢、

James

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

    您好!

    GxINTCR[1]值初始化为 FIFO 大小。 每次读取(FIFO 模式)的值都应递增。 在开始 ADC 采样之前、FIFO 大小(32)应该被分配给 GxINTCR[1]:GxINTCR[1]= 32。 该寄存器由 NHET 中断清零、该中断触发代码中的 ADC 采样。

    我对 SafeRTOS 不熟悉。

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

    您好 QJ、

    GxINTCR[1]值被初始化为 FIFO 大小。 我的应用代码按以下顺序初始化 ADC/NHET:

    adcInit()  

    adcEnableNotification()

    adcStartConversion() (这是将 GxINTCR[1]初始化为 FIFO 大小的函数)

    hetInit()

    至于 SAFERTOS、它将自身放置在通道2 (RTI Compare0中断)和通道21的 VIM 表中。 这会阻止我们的应用程序利用 RTI 比较中断功能-如果可能、我们将使用 RTI 通知来计划 ADC 转换、因此我们为什么使用 N2HET。

    谢谢、

    James

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

    您好!

    是否有可能 不执行 adcStartConversion()。 RTI compare0可用作系统定时器、因此您可以使用 compare1来触发 ADC 转换。

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

    您好 QJ、

    当然会执行 adcStartConversion()。 对于 RTI、SafeRTOS 建议不要接触 RTI、因此我们尚未试验使用 compare1。 目前我们首选使用 N2HET 触发 ADC 转换。  

    谢谢、

    James

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

    尊敬的 James:

    是的、您可以使用 GIO 或 NHET 信号的上升/下降沿来触发 ADC 转换。 您遇到的问题与 SafeRTOS 有关。