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.

[参考译文] TMDSCNCD263:GPT 通道配置

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1230211/tmdscncd263-gpt-channel-configuration

器件型号:TMDSCNCD263

大家好、

我50µSec 为20µSec 配置 GPT 通道、我无法n`t 这样做。 无论我们配置的是什么、都将允许 200µSec。

我已经捕获了以下配置。

我已经尝试过 SYS_CLK 和 DPLL_CORE_HSDIV0_CLKOUT1。 我们收到了相同的结果。  

我已经尝试为两种配置注入下述的启动计时器的值。

您能更正我任何想从我的角度解决的问题吗、并请指导我们如何解决这个问题。 谢谢。

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

    您好!

    这非常简单、只需将通道 ID 和加载值传递给 API  Gpt_StartTimer(ChannelId, countVal + tickFreq * countVal);

    对于50us 周期性中断-您可以使用 GPT_StartTimer (1、0x2FAF080)//here 0x2FAF080是50us 的预加载值。

    谢谢。
    兴植

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

    您好!

    我们尝试使用上述值。 它将变为200ms。  

     

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

    您好、Vivek、

    对不起错了 caclulation、我已经再次检查和 0x1388  似乎是正确的值。 您能否使用此加载值进行检查并重试?

    我假设您使用的 RTI 频率仅为200MHz、

    谢谢。
    兴植  

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

    尊敬的 Kowshik:

    方法1:

    如果我们假设 RTI 200MHz  

    每5ns 执行一次 SYS 节拍

    对于50us、十六进制值为0x2710。

    方法1:

    如果我们假设内核时钟500MHz  

    每2ns 发生一次 SYS 节拍

    对于50us、十六进制值为0x61A8

    我已尝试使用未触发中断的这两个值。

     

    谢谢。

    维韦克   

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

    您好、Vivek、

    此节拍计算公式不正确。 这是基于您可以使用的 RTI 外设

    (200MHz/(预载+1))*(所需时间单位为秒)  

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

    这里预加载为1、因此对于200MHz

    然后200MHz/2 = 100Mhz => 100Mhz  *50US = 5000 => 5000十六进制是0x1388

    谢谢

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

    我已尝试使用值、中断未被触发。  达到上述值且值大于 0x4E20后、就会触发中断

    谢谢

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

    您好、Vivek、

    我使用相同的配置值运行了一个非常简单的测试、并且能够按如下所示正确执行通知功能。 请在结束时执行相同的配置、并告诉我。

    谢谢。
    兴植

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

    尊敬的 Kowshik:

    我尝试使用相同的值、现在中断正确地命中通知功能、如下所示。 我试图在引脚切换的帮助下找出确切的时间、它显示为 5ms。  您能否更正我遇到的问题、并指导我们如何在实际中捕获通知触发时间。  

    我已经输入了25us 50us 的值。  

    谢谢  

    维韦克

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

    您好、Vivek、

    我的想法是-这可能是由于 IO 翻转、因为 GPIO IP 距离 R5内核很远、因此翻转通道所需的时间比预期的要长。 但我不确定这是不是确切的原因。 让我找到一种更准确的测量方法。

    谢谢

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

    尊敬的 Kowshik:

     是否有关于准确测量时序的任何更新? 谢谢

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

    您好、Vivek、

    似乎有一种方法可以更准确地测量这一点。 我们可以使用 CycleP_COUNTER (对 R5周期计数进行计数)、即分辨率提高得更多。 另外还有一种称为 HALTEN 的方案、这意味着当您处于调试模式(即连接了 JTAG)时将停止 RTI 外设。 这样、我们可以运行外设一次、当命中中断时、我们可以记下前后的值并减去它们、以查看增量计数。

    您可以启用 HALTEN、也可以使用我在下方共享的代码  

    void Write_MMR(unsigned int mmr_address, unsigned int mmr_value){
        unsigned int * p_mmr;
        p_mmr = (unsigned int *) mmr_address;
        *p_mmr = mmr_value;
    }
    
    Write_MMR(0x50D01008,0x01234567); //Unlock MSS_CTRL region
    Write_MMR(0x50D0100C,0xFEDCBA8);  //Unlock MSS_CTRL region
    
    Write_MMR(0x50D00454,0x1); //Enables the RTI0's Halt enable

    谢谢

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

    尊敬的 Kowshik:

    感谢您发送编修。

    我们已将计时器配置为继续模式。  

    测试方法:

     GPT_StartTimer (ChannelIdGPTIME_100_us);
     GPT_EnableNotification (ChannelId);

    我们已启用通知并启动计时器。 通知功能一次触发。 您能指导我们继续触发 需要修改的任何内容吗?  

    谢谢

    维韦克·阿里瓦查根

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

    您好、Vivek、

    GPTIME_100_us 的值是多少?? 您共享的配置应足以执行连续操作模式。

    谢谢。
    兴植

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

    尊敬的 Kowshik:

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

    您好、Vivek、

    我在我身边完成了测试。 我可以看到差异是正确的、即100us。 请查看下面的屏幕截图。 我将我的定时器配置为100us、并且已经停止 RTI 以便在使用我在上面分享的 HALTEN 代码连接调试器时不计数。  

    下图是在时间=0

    下图所示时间= 100us (在我收到第一次中断后)

    通过取 FRC 值并返回计算时间、可以得到以下数字

    0x47174 - 0x42300 = 0x4E74 (十进制为20,084)

    RTI 的工作频率为200MHz、即、20,084 * 5nS = 100,420 * 10^-9 = 100.4 * 10^-6 = 100.4uS (~100us)

    您看到的额外计时可能是由于 DIO 模块进行的 DET 检查。 请禁用 DET、如果您看到有任何改进、请告诉我。

    谢谢。
    兴植

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

    尊敬的 Kowshik:

    感谢您提供有关测量准确时间的信息。

    按照我们的请求与针对连续模式触发的周期性中断相关。  

    如果我们调用了 GPT_EnableNotification (),那么在通知函数内只会定期触发,否则它会立即通知。

    以实现连续模式的定期通知。 您能回答一下。 调用的方式是必要的、或者不是周期性触发的、或者我们需要在软件中执行任何操作。  

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

    您好、Vivek、

    GPT_EnableNotification 是一次性的通知。 您必须在启动计时器期间对其进行一次调用、然后可以分支到通知函数中、如在收到中断时所示。 请勿禁用通知、因为一旦通知被禁用、ISR 就无法清除 GPT 中断、并已为下一个中断做好准备。  

    请找到以下参考代码

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

    尊敬的 Kowshik:

    我们完成的操作看起来是一样的、但通知会立即触发。 它不是周期性发生。 请在随附的图片下面进行验证。

    审查并指导我们解决此问题。

    注意:此处、我们使用 CAT 2 (源 ID - 92、优先级- 15)配置了操作系统中断

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

    您好、Vivek、

    RTI 的运行频率是多少? 宏似乎显示500MHz_100US?

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

    您好、Vivek、

    RTI 的运行频率是多少? 宏似乎显示500MHz_100US? 看起来您以500MHz 的频率运行 GPT、对吗?  

    此外、您将在操作系统中使用什么 RTI 实例?  

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

    尊敬的 Kowshik:

    抱歉宏造成混淆。 我们以200MHz 运行。 因此、我们将输入值0x2710、持续 100us。 我们将使用 RTI1_INT1实例。

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

    H Vivek、

    您在使用适用于操作系统的 RTI1实例? 请注意、使用前4个实例进行使用、即

    RTICHANNEL0-3-->连接到操作系统

    RTICHANNEL5-11 -->在您的应用程序中。  

    使用矢量 OS 时、我们已经将整个 RTI0计时器实例限制为矢量 OS 使用、而其他实例将留给应用程序使用。

    谢谢

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

    尊敬的 Kowshik:

    由向量 OS 使用的完全正确的 RTI0实例。 因此、对于 GPT、我将使用 RTI1实例。  在 RTI1中、我们有四个中断(91、92、93、94)。 我已经使用对4个通道进行了配置。 两种连续模式和两种单次触发模式。

    我们验证了所有通知功能。 通知功能一次触发。 但我们期望连续模式通知功能基于时间(周期性)正确触发。

    请提供有关周期模式的输入和指南。

    谢谢

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

    您好、Vivek、

    嗯,这是一个更温顺的地方。 请执行以下测试、并让我们知道您观察到的情况、

    1.在您收到一个中断而系统停止后、请尝试再次启动计时器、看看您是否又收到一个中断。

    将所有通道配置为持续用于 RTI1、并在收到持续中断时重新测试。  

    如果您在上述测试后观察到相同的结果、那么我建议您使用 Vector Tech 支持、因为您在集成 VEOS 后会观察到这些问题。

    谢谢

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

    尊敬的 Kowshik:

    让我检查一下、然后回来。

    谢谢

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

    尊敬的 Kowshik:

    请在下面找到观察内容

    1.在您收到一个中断而系统停止后、请尝试再次启动计时器、看看您是否又收到一个中断。

       a:如果我们再次启动计时器、会再收到一个中断。

         

        

     b.如果我们在 ISR 通知功能中调用启用通知、我们 将收到 连续的 中断。

        

       

     RTI1的所有通道配置为连续、并在收到连续 中断时重新测试。

    连续模式、我们就会发现这是一个很好的问题。 我们将仅接收所有通道的一次性中断。

    对于连续中断模式、我们是否需要清除任何通知标志?

    谢谢

    维韦克·阿里瓦查根

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

    您好、Vivek、

    感谢进行清晰的测试。 您能否确保在操作系统模块中、您已将这些中断注册为 IRQ 中断而不是 FIQ?

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

    尊敬的 Kowshik:

    是的、我们将这些中断注册为 IRQ。 请在以下快照中找到证据。

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

    您好,Vivek

    谢谢、您能为我们提供执行 ISR 前后所有 RTI 寄存器的快照吗? 即、请在通道的 gpt_irq.c 中的 ISR 函数前创建断点、对寄存器进行快照。 在执行 notify 函数之后、再拍摄一张寄存器的快照并将其发送给我们。
    例如、需要在下面的屏幕截图中的第53行和第55行转储寄存器。

    谢谢