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.

[参考译文] CCS/TMS570LS0332:PWM 设置问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/906115/ccs-tms570ls0332-pwm-setting-problem

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

工具/软件:Code Composer Studio

你好

 我想设置 PWM 中断 、pwmEnableNotification (hetREG1、pwm1、pwmEND_of _period);

但 不管我如何设置 HAL 软件“PWM 占空比、周期

 该中断函数 间隔周期固定 为125  

机器循环

空 het1LowLevelInterrupt (空)

uint32 vec = hetREG1->OFF2;

如果(VEC < 18U)

if ((VEC & 1U)!= 0U)

pwmNotification (hetREG1、(VEC >> 1U)- 1U、pwmEND_for_period);

其他

pwmNotification (hetREG1、(VEC >> 1U)- 1U、pwmEND_for_Duty);


其他

edgeNotification (hetREG1、VEC - 18U);

我想更改这个中断时间。我尝试  这个函数 pwmSetSignal (hetRAM1、pwm1、SIGNAL);但是时间是错误的。

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

    黄你好、

    HET 配置中使用了什么 LRP (环路分辨率周期)? 您的测试中使用了什么 PWM 周期?

    如果 HCLK=VCLK=80MHz、并且 hr=1、并且 LRP=64*VCLK 周期=800ns

    HALCoGen 生成的 PWM 中的最小周期为4 LRP:3.2us。 ->256个 VCLK 周期。

    如果您使用1.5us、2us、3us、则周期将四舍五入到3.2us。

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

    是 LRP = 800ns

    hetSIGNAL_t 信号;
    signal.period=1000;
    SIGNAL。Duty=50;
    pwmSetSignal (hetRAM1、pwm1、SIGNAL);

    pwmEnableNotification (hetREG1、pwm1、pwmEND_for_period);

    但是 HET 中断函数 时间间隔是125VCLK 周期 。我不知道为什么?

     我设置的位置是错误的。

    和  

    时间

    signal.period=5000;
    SIGNAL。Duty=50;

    但是 HET 中断函数 时间间隔是114VCLK 周期或133VCLK 周期。我不知道为什么?

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

    黄你好、

    INT 间隔的值(125 VCLK)不适合您的设置。 您是如何测量中断间隔的?  

    您的设置时间间隔为:1000US*1000/12.5 VCLK 周期

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

    你好

    这个中断函数。我看到时钟、每次间隔时间测量。

    空 het1LowLevelInterrupt (空)

    uint32 vec = hetREG1->OFF2;

    如果(VEC < 18U)

    if ((VEC & 1U)!= 0U)

    pwmNotification (hetREG1、(VEC >> 1U)- 1U、pwmEND_for_period);

    其他

    pwmNotification (hetREG1、(VEC >> 1U)- 1U、pwmEND_for_Duty);


    其他

    edgeNotification (hetREG1、VEC - 18U);

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

    两个中断响应之间的时间间隔

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

    最好使用 PMU 来测量2个中断之间的时钟周期。

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

    黄你好、

    我使用以下代码进行了测试、以测量中断间隔。 没有问题。  

    我的代码测量10个中断所花费的周期。 如果 PERIOD=100us、则中断间隔应为8000个 CPU 时钟周期。 我的测量值为7995 (79950/10)个周期。

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

    /*包含文件*/

    #include "sys_common.h"

    /*用户代码开始(1)*/
    #include "het.h"
    #include "sys_PMU.h"
    /*用户代码结束*/

    /*用户代码开始(2)*/
    unsigned int gPeriodCount、gDutyCount;
    volatile unsigned long cycles_PMU_start、cycles_PMU_end、cycles_PMU_measure;
    /*用户代码结束*/

    int main (空)

    /*用户代码开始(3)*/
    hetSIGNAL_t pwmSignal;
    gPeriodCount=0;
    gDutyCount=0;

    hetInit();
    _enable_IRQ ();

    _pmuInit_();
    _pmuEnableCountersGlob_();

    pwmEnableNotification (hetREG1、0x0、pwmEND_for_Duty);
    pwmEnableNotification (hetREG1、0x0、pwmEND_for_period);

    pwmSignal.tDuty = 50;
    pwmSignale.Period = 100;
    pwmSetSignal (hetRAM1、0x0、pwmSignal);

    pwmStart (hetRAM1、0x0);
    while (1);

    /*用户代码结束*/

    返回0;


    /*用户代码开始(4)*/
    void pwmNotification (hetBASE-t * hetREG、UINT32 PWM、UINT32通知){
    if (notification =pwmEND_for_Duty){
    gDutyCount++;

    if ((notification =pwmEND_of_period)&&(PWM=0)){
    gPeriodCount++;

    if (gPeriodCount ==1){
    _pmuResetCounters_();
    _pmuStartCounter_(pmuCYCLE _计数器);
    CYCLES_PMU_START =_pmuGetCycleCount_();

    if (gPeriodCount =11){
    _pmuStopCounter_(pmuCYCLE _计数器);
    CYCESS_PMU_END =_pmuGetCycleCount_();
    CYCESS_PMU_Measure = CYCes_PMU_END - CYCESS_PMU_START;


    /*用户代码结束*/

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

    谢谢你  

     我 可以在这里看到 PMU 纸张。

     我执行测试,但 与   您不一样。当(gPeriodCount ==11) cycles_PMU_measure=72074时

     如果  (gPeriodCount =2)、cycles_PMU_measure 为197。

    当 gPeriodCount =2时、您测试的结果是什么?

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

    请参阅用于 PMU 的 ARM cortex-R4 TRM:

    http://infocenter.arm.com/help/topic/com.arm.doc.ddi0363g/DDI0363G_cortex_r4_r1p4_trm.pdf

    我看不到 gPeriodCount =2/4/10/100的任何问题。