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.

[参考译文] TMS570LS0332:基于 RTI_COMP0的 ADC 采样触发器

Guru**** 2478765 points
Other Parts Discussed in Thread: TMS570LS0332, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/685763/tms570ls0332-adc-sampling-trigger-based-in-rti_comp0

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

您好!

我们在设计中使用的是 TMS570LS0332。 我们将 根据 RTI 比较0触发 ADC 采样。  RTI 比较 0被配置为50 μ s、并且 RTI 比较 0中断 被启用。 在本例中、ADC 采样没有任何问题。  每 50 μ s 产生一次中断、会浪费 CPU。 我已禁用中断。 我意识到    取决于 RTI 比较0的 ADC 被禁用。 这是预期吗??  (注意:RTI 计数器配置为50 μ s、并像以前一样启动。 仅禁用中断。)

是否可以在不启用 RTI 比较 0中断的情况下触发 ADC 采样?

非常感谢。

此致、

Sreekanth Challa

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

    对于 RTI 比较0中断源、直接从 RTI 模块的输出进行连接。 也就是说、中断条件可被用作一个触发源、即使实际中断没有被告知 CPU。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 QJ Wang:

    感谢您的反馈。 我还有一个问题。 我尝试注释掉以下行、以便将 RTI 比较0中断信号调至 CPU。

    rtiEnableNotification (rtiNOTIFICATION_COMPARE0);

    CPU RTI 比较0中断未触发。 同时、ADC 采样也不会被触发。 是否可以禁用 RTI 比较0中断到 CPU 的信号 o? (同时、它应向 ADC 发送信号)。

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

    尊敬的先生/女士:

    请就此提供您的意见吗? 我希望使用 RTI 比较0对 ADC 进行采样、而不  触发微控制器中断。

    谢谢、此致、

    Sreekanth Challa

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

    如果您注释掉该行(rtiEnableNotification (rtiNOTIFICATION_COMPARE0))、RTI 中断将被禁用。 如果您仍然使用 RTI1_COMP0作为触发源、则不会触发 ADC。

    您可以禁用到 CPU 的 RTI 中断:VIM 通道02。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 QJ Wang:

    按照您的指定、我现在在软件中使用以下代码行并禁用到 CPU 的 RTI 中断:VIM 通道02。
    rtiEnableNotification (rtiNOTIFICATION_COMPARE0);

    我仍然无法使 ADC 采样工作。 我是否应该执行任何其他配置?

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

    Sreenekanth、

    ADC 由 RTI 模块的 RTI 比较中断线路输出上的上升沿或下降沿(默认值)触发。

    以下是获取 RTI 比较0中断以触发 ADC 的步骤:

    • 您需要启用 RTI 比较0中断、以便从 RTI 模块发出。 当比较匹配事件发生时、这会导致比较0中断线路上出现上升沿。
    • 如果你不想用 CPU 处理这个比较中断、那么在 VIM 中禁用 RTI 比较0中断。 这意味着比较0中断不会发送到 CPU
    • RTI 模块具有一个功能、允许您自动清除比较中断线路、而无需 CPU 执行此操作。 这会在 RTI 比较中断线路上创建下降边沿。 TRM 中也记录了这种取值。 控制寄存器称为"比较中断清除使能寄存器"、位于地址0xFFFFFFAC。 四个比较中断线路中的每一个都有一个使能端。 有一个比较0清除寄存器(0xFFFFFFCB0)需要被编程来保持中断线被清除时的比较值。 该寄存器中的值由更新比较寄存器中编程的值自动递增。
    • 这种机制使您能够在 RTI 比较中断线路上创建一个可编程 PWM 信号、这样您就可以使用所需的周期来触发 ADC。

    请注意、HALCoGen 不支持此功能、因此您需要编写自己的例程来对两个寄存器进行编程、从而创建用于触发 ADC 的 PWM。

    此致、

    Sunil

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

    非常感谢您的快速响应。 我已经更新了 rtiInit 函数中的指定寄存器。 控制器为 SYS 模式。 因此、这应该是可以的。

    rtiREG1->INTCLRENABLE =(rtiREG1->INTCLRENABLE ^ 0x0FU);
    rtiREG1->COMP0CLR = 500U;

    我可以看到、COMP0CLR 值会被不更新比较寄存器的值自动递增。 我不会进行 ADC 中断。 我正在使用 ADC 组1、它配置为在完成指定数量的采样(即阈值中断)后生成中断。

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

    是否可以上传 adcInit()例程? 如果您要生成 ADC 的周期性触发器、为什么要在转换值的阈值数量上生成中断? 被触发的转换组应处于单次转换序列模式、在"组转换结束"中断时读出所有结果、然后应发生下一个 RTI 触发。

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

    尊敬的 Sunil:

    请找到随附的文件(adc.c)。 我已经从 HalCoGen 生成的文件中添加了2个函数(adcInit 和 adcEnableNotification 函数)。 TE 主要目的是在每次 RTI 比较0中断时配置一次 ADC 事件组通道。 但仅当 ADC 事件阈值计数器计数降为零时才触发中断。

    ADC 事件组选择了2个通道、FIFO 大小配置为20。  我将 RTI 比较0配置为50 μ s。 ADC 每50 μ s 采集2个样本。 使用500 μ C 、可完成20个样品。  ADC 事件组中断触发器。

    当我在 HalCoGen 的 VIM 中启用了 RTI 比较0中断时、这对我来说非常好。

    谢谢、此致、

    Sreenekanth challae2e.ti.com/.../3324.adc.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当中断不发生时、ADC 中以下寄存器的值是多少?

    偏移= 0x40 ADEVTHRINTCR
    偏移= 0x34 ADEVINTFLG
    偏移= 0x6C ADEVSR
    偏移= 0x88 ADSMSTATE
    偏移= 0x174 ADEVRAMWRADDR

    或者、您可以在 CPU 暂停的情况下在调试器中对 ADC 寄存器帧进行快照并上传。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Sunil:

    以下是上述请求地址值的值:

    偏移= 0x40 ADEVTHRINTCR -> 0x00000014
    偏移= 0x34 ADEVINTFLG -> 0x00000004
    偏移= 0x6C ADEVSR-> 0x00000008
    偏移= 0x88 ADSMSTATE-> 0x00000000
    偏移= 0x174 ADEVRAMWRADDR -> 0x00000000

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

    e2e.ti.com/.../2311.MibADC-Registers.txtDearSunil、

    请查找从 CCS 导出的 MibADC 寄存器值。

    谢谢、此致、

    Sreekanth Challa

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

    这表示 ADC 在所有挂起的转换中完成、并且所有的转换结果都已被读出。 它现在正在等待下一个触发器。 您是在中断服务例程之外还是在服务例程内读取转换结果?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Sunil:

    我在任务中读取转换后的样本。 我只是在 ISR 中发布一个信标、指示示例是可用的。 我还将使用以下函数在 ISR 中停止 ADC 转换、以便缓冲区不会过度运行。

    adcStopConversion (adcREG1、group);

    我认为 ADC 事件组不对通道进行采样。 这是因为 RTI Comapare 0中断不会通知 ADC。 正如我在 ADC 事件组之前所说的。 RTI 比较0被配置为50 μ s。 RTI 比较寄存器在 rtiInit 函数中配置如下。

    /**-设置比较0值。 此值与选定的自由运行计数器进行比较。 *
    rtiREG1->CMP[0U].Compx = 500U;

    /**-安装程序更新比较0值。 该值将添加到每个比较匹配的比较0值中。 *
    rtiREG1->CMP[0U].UCPx = 500U;

    根据您的建议、我有以下行来允许 DMA 清除中断标志以释放 CPU。 我写入以下寄存器。

    rtiREG1->INTCLRENABLE =(rtiREG1->INTCLRENABLE ^ 0x0FU);
    rtiREG1->COMP0CLR = 500U;

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

    Sreenekanth、

    有一个计数器针对标志的置位和清零操作进行比较。 清除的比较值需要为(设置标志的比较值+ 500)、以便操作如下所示:

    计数器值   比较中断标志

    0               清除

    500             设置

    1000            清除

    1500            设置

    2000年            清除

    (笑声)

    如果您需要更快的 RTI 触发器、则可能需要更改数字。

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

    根据您的意见、我更新了这些值、如下所示。 不会看到任何 ADC 完成中断。

    rtiREG1->INTCLRENABLE =(rtiREG1->INTCLRENABLE ^ 0x0FU);
    rtiREG1->COMP0CLR = 1000U;



    完整的 RTI 初始化函数如下所示。

    void rtiInit (void)

    /*用户代码开始(3)*/
    rtiREG1->INTCLRENABLE =(rtiREG1->INTCLRENABLE ^ 0x0FU);
    rtiREG1->COMP0CLR = 1000U;
    /*用户代码结束*/
    /**@b 初始化@b RTI1:*/

    /**-设置调试选项并禁用两个计数器块*/
    rtiREG1->GCTRL = 0x00000000U;

    /**-启用/禁用两个计数器块的捕获事件源*/
    rtiREG1->CAPCTRL = 0U | 0U;

    /**-设置输入源比较0-3 */
    rtiREG1->COMPCTRL = 0x00001000U | 0x00000100U | 0x000000000000U | 0x0000000000000000;

    /**-重置计数器0 */
    rtiREG1->CNT[0U].ucx = 0x00000000U;

    /**-重置自由运行计数器0 */
    rtiREG1->CNT[0U].FRCx = 0x000000000000U;

    /**-设置计数器0比较值
    * - 0x00000000:2^32分频
    * -0x00000001-0xFFFFFFFF:除以(CPU0 + 1)
    *
    rtiREG1->CNT[0U].CPUx = 15U;

    /**-重置计数器1 */
    rtiREG1->CNT[1U].ucx = 0x00000000U;

    /**-重置自由运行计数器1 */
    rtiREG1->CNT[1U].FRCx = 0x00000000U;

    /**-设置计数器1比较值
    * - 0x00000000:2^32分频
    * -0x00000001-0xFFFFFFFF:除以(CPUC1 + 1)
    *
    rtiREG1->CNT[1U].CPUx = 7U;

    /**-设置比较0值。 此值与选定的自由运行计数器进行比较。 *
    rtiREG1->CMP[0U].Compx = 500U;

    /**-安装程序更新比较0值。 该值将添加到每个比较匹配的比较0值中。 *
    rtiREG1->CMP[0U].UCPx = 500U;

    /**-设置比较1值。 此值与选定的自由运行计数器进行比较。 *
    rtiREG1->CMP[1U].Compx = 5000U;

    /**-设置更新比较1值。 该值将添加到每个比较匹配的比较1值中。 *
    rtiREG1->CMP[1U].UCPx = 5000U;

    /**-设置比较2值。 此值与选定的自由运行计数器进行比较。 *
    rtiREG1->CMP[2U].Compx = 20000U;

    /**-安装程序更新比较2值。 该值将添加到每个比较匹配的比较2值中。 *
    rtiREG1->CMP[2U].UCPx = 20000U;

    /**-设置比较3值。 此值与选定的自由运行计数器进行比较。 *
    rtiREG1->CMP[3U].Compx = 20000U;

    /**-安装程序更新比较3值。 该值将添加到每个比较匹配的比较3值中。 *
    rtiREG1->CMP[3U].UCPx = 20000U;

    /**-清除所有挂起的中断*/
    rtiREG1->INTFLAG = 0x0007000FU;

    /**-禁用所有中断*/
    rtiREG1->CLEARINTENA= 0x00070F0FU;

    /**@注意,必须先调用此函数,然后才能使用驱动程序。\n
    * 此函数必须在特权模式下执行。\n
    * 此函数不会启动计数器。
    *

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


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

    Sreenekanth、

    您将标志(第一个比较匹配)设置为计数器值500、然后将比较值更新500、使其成为1000。 标志清除逻辑将计数器进行比较、以也与1000匹配、因此再次出现相同的设置/清除混乱、因此没有下降沿、也没有转换触发器。

    如果您希望每500us 使用 RTI Comp 0事件的下降沿触发:

    rtiREG1->INTCLRENABLE =(rtiREG1->INTCLRENABLE ^ 0x01U);   //为 RTI Comp 0启用自动清除标志(仅!)

    rtiREG1->CMP[0U].Compx = 250U;  //计数器= 250时标志置1的初始比较匹配

    rtiREG1->COMP0CLR = 500U;       //标志清零的初始比较匹配= 750

    rtiREG1->CMP[0U].UCPx = 500U;  //对于设置和清除条件,比较值更新了500

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

    尊敬的 Sunil:

    非常感谢您的支持。 现在它已经解决了。

    此致、

    Sreekanth Challa