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:HET 程序在高分辨率下未正确运行

Guru**** 2460850 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/649689/tms570lc4357-het-program-not-running-correctly-with-high-resolution

器件型号:TMS570LC4357

大家好、

我正在尝试编写一个小型 HET 程序、以生成占空比居中的 PWM、直到其周期。 目前、我正在使用 HET IDE 对代码进行仿真。我在只使用低分辨率的情况下实现了一个工作程序、并使用了以下代码:

l00 CNT{next = L01、reg = A、IRQ = OFF、max = 10、data = 0};
L01 ECMP{next = L02、hr_lr = low、en_pin_action=on、cond_addr=L00、pin = 0、action= set、reg = a、data= 4};
L02 ECMP{next = r_pin、action=6、hr_action=on、alt = rn、alt = r_action= rn、alt、alt = 0、alt = r_action=on、alt、alt = rn、alt、alt = r_action= 

这将生成占空比为20%并以周期为中心的 PWM。

现在、如果我想使用高分辨率以较小的步长设置占空比、我尝试了以下代码:

l00 CNT{next = L01、reg = A、IRQ = OFF、max = 10、data = 0};
L01 ECMP{next = L02、hr_lr = HIGH、En_PIN_ACTION = ON、COND_addr = L00、PIN=0、ACTION = SET、RE= A、DATA=3、hr_DATA=64};r_ACT_CONTACTION
= Lr、LMP=ON、LMP=64、RAPin、ACT_ACT_ACT_ACT_CONTRATE、LMP=ON、LMP=ON、LMP=0、RAME = 0、RANT、LMP=ON、LMP=ON、RANT=6、RAPin、RAME

如果我理解正确、这应该会生成占空比为30%的 PWM。 但实际上、在经过3个半循环后、该引脚正确设置为高电平、但绝不会再次清零为低电平。 它永远保持高电平。

我用不同的设置做了一些小的播放、但没有找到任何解决方案或提示。

我不理解的另一点是 hr_data=64命令。 我的预分频器是 HR = 1和 LR = 32、如果我查看仿真、我会在一个 LR 环路中得到32个 HR 环路。 但是、为什么我必须为半循环分辨率写入 hr_data=64呢? 当我将该值写入指令时、存储器中的实际数据 HR 字段会正确填充16 (半个循环)。 转换发生在哪里?

如果有人能向我解释我的错误、我会非常高兴。  

您好!

Steffen

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

    我已将您的帖子转发给我们的 NHET 专家。 他们很快就会回来!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Steffen、

    对于每个 N2HET 引脚、每个环路分辨率周期只允许执行一条指定高分辨率操作(hr_lr=high)的指令。 因此、您的第二条 ECMP 指令不会在引脚0上生成任何操作。

    解决方案是使用共享功能。 HETXOR 寄存器允许对两个连续 HR 结构 N (偶数)和 N+1 (奇数)的输出信号进行逻辑异或。

    请阅读 LC43x TRM 中的23.2.5.6部分
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于硬件布局已经存在、我无法使用引脚共享功能。 如果每个环路的分辨率只允许一个高分辨率操作、是否可以在两个 LR 环路之间切换指令的 hr_lr 设置?

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

    您好、Steffen、

    在 HET IDE 项目属性中、选择 XOR、将 CHECK 引脚0和引脚1更改为 XOR:

    更改 NHET 代码:第一个 ECMP 使用 pin0、第二个 ECMP 使用 pin1 ->这意味着 pin0同时使用 pin0和 pin1 HR 结构来执行其引脚操作:

    L00 CNT{NEX=L01、REG=A、IRQ=OFF、max=10、data=0};
    L01 ECMP{NEX=L02、hr_LR=HIGH、en_PIN_ACTION = ON、COND_addr=L00、PIN=0、ACTION = PULSEHI、REG=A、DATA=3、hr_DATA=64};
    L02 ECMP{NEX=L00、hr_LR=HIGH、en_PIN_ACTION = ON、COND_addr=L00、PIN=1、ACTION = PULSEHI、REG=A、DATA=6、hr_DATA=64};

    这是 pin0操作(hetm_watch_0_out)的图:

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

    您好、王先生、

    感谢您对 XOR 引脚共享功能的详细解释。 问题是、我使用现有硬件、该硬件将多个 HET 引脚用于不同的 PWM。 我仅将 HET IDE 仿真器用于开发。 例如、我需要在引脚0和引脚1上使用两个不同的 PWM。 因此、我无法使用共享功能、因为我需要两个引脚用于单独的 PWM。 由于需要共享功能、因此需要重新设计 PCB 布局、这当然不是我的首选。

    这就是为什么我询问是否有可能在某些 LR 循环之间更改运行 HET 程序中每条指令的 hr_lr 设置的原因。 然后、我将使用第一条 ECMP 指令上的 HR 功能将引脚设置为高电平。 在下一个 LR 循环中、我将第一个 ECMP 指令切换为 LR、第二个 ECMP 切换为 HR。 然后、我可以使用 HR 将该引脚再次设置为低电平。  

    这是可行的、还是我估计这个问题过于简单?

    非常感谢您的努力。

    Steffen klenk

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

    您好、Steffen

    好的地方。 以下代码切换引脚0仅具有1 HR 结构:

    PA .equ 0
    LDATA1 .equ 2.
    LDATA2 .equ 3.
    HDATA1 .equ 64
    HSTATA2 .equ 32.
    l00 CNT{reg=T、IRQ=off、max= 1ffffffh}
    L01 ECMP{NEXT = L04、COND_ADDR=L02、EN_PIN_ACTION=ON、PIN= PA、ACTION = SET、 REG=T、IRQ=OFF、DATA = 2、hr_data = 00h}
    L02 RADM64{next =L04、remote =L01、en_pin_action =on、con_addr = L03、pin = pA、 COMP_MODE=ECMP、ACTION = CLEAR、reg = T、IRQ = OFF、DATA = LDATA1、hr_data = HDATA1}
    L03 RADM64{NEXT =L04、REMOTE =L01、en_PIN_ACTION =ON、COND_addr = L02、Pin = PA、 COMP_MODE=ECMP、ACTION = SET、reg = T、IRQ = OFF、DATA = LDATA2、hr_data = HDATA2}
    L04 BR{NEXT = L00、COND_ADDR=L00、EVENT= NOCOND}

     

    这是上面的代码生成的波形:


     

    L00:增加计数器"数据"和寄存器 T

    L01:设置 pin0或在"data"字段= T 且延迟 HR_data 字段中定义的 HR 周期时清除 pin0

    L02:更改 L01控制字段和数据字段

    L03:更改 L01控制字段和数据字段