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.

[参考译文] TMS320F2.8379万D:CLA示例代码无法为20 KHz PWM触发器执行

Guru**** 2595805 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1089513/tms320f28379d-cla-example-code-cannot-execute-for-20-khz-pwm-trigger

部件号:TMS320F2.8379万D
Thread: sysconfig中讨论的其它部件

我遵循 了C2000 Academy LAB9:实验- TMS320F2.8379万D的控制法律加速器sysconfig。 目标板是启动板。 我做了一些小的修改:

1- ADCA转换的触发源设置为EPWM1 SOCA。

2- ADCA中断1的触发源更改为ADCA EOC3 (我们对四个输入进行采样,并希望在转换最后一个输入时触发中断)。 还为ADCA中断1注册中断。  

设置如下所示:

如果EPWM1频率增加到10 KHz,则成功执行CLA任务1 (通过闪烁D10 LED指示)。 但是,如果我将ePWM频率设置为20 KHz,则CLA任务执行将停止。 我已验证指示灯计数器只增加一次,此后不再增加。 我已经尝试在我的端进行故障排除,但无法理解此行为。 请提供指南。

以下是CLA任务1的设置:

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

    我从头开始对ePWM进行配置,并注意到CLA Task1在20 KHz时触发,此时只添加了EPWM1模块。 然后我添加了EPWM2 (在launchpad的GPIO2/3上配置),发现CLA任务1在20 KHz下执行,没有任何问题。 接下来我添加了EPWM3模块(在launchpad的GPIO4/5上配置)。 这次CLA任务1 LED停止闪烁。 然后我尝试将EPWM1的频率降低到10 KHz,以发现CLA Task1再次执行。 因此,添加EPWM3或任何其他附加ePWM模块都有一些关系。 我想请一些专家帮助我解决这个问题。  

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

    您好,Asad,

    我将联系专家并告知您。

    谢谢!
    Ashwini

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

    您好,Asad,

    CLA侧的CLATask1或C28侧的CLAISr1中是否包括闪烁的LED和LED计数器?

    谢谢!
    Ashwini

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

    在C28侧的CLAISr1中执行LED闪烁。 为了确认ADCA中断在20 KHz下生成,我注册了它的中断并添加了另一个LED切换。 该LED实际上正在切换,因此确认ADCA中断正在正确生成。 我还修改了链接程序命令文件,为.text部分分配了两个闪存部分,因为我的代码不适合单个部分。 如果需要,我可以在明天上午与您共享链接器命令文件内容。

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

    好的,谢谢Asad。 如果我理解正确,只要从配置中删除EPWM3,您就会看到CLAIsr1 LED在20MHz下正确切换?

    谢谢!

    Ashwini

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

    您的理解是正确的。 我可以与您共享sysconfig文件,也可以与您共享整个项目。 我目前正在进行外围设备配置。 如果需要,请告诉我。

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

    只是为了澄清:当EPWM3被拆除时,CLAISR1被调用为20 KHz,即与EPWM1相同的速率。 自从我将LED计数检查更改为2万后,LED切换为1 Hz。

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

    谢谢Asad。 这有助于了解LED切换是否存在问题(EPWM3是否可以配置分配给LED的引脚?) 或者完全未触发CLA1Isr1。 您提到有一个计数器变量在CLA1isr1内递增-它显示的是什么值?

    谢谢!

    Ashwini

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

    实际上,LED正在使用启动板中分配的引脚,即GPIO 31和GPIO34。 而ePWM使用自己的引脚I e GPIO0/GPIO1 (用于EPWM1),GPIO2/3 (用于EPWM2),GPIO 4/5 (用于EPWM3)。 此外,所有配置都是使用sysconfig工具完成的,因此不会发生资源冲突。 我已使用调试模式来调查此问题,我发现计数器只增加一次,即其值从0更改为1,但没有进一步增加。 但是,如果我在保持添加EPWM3的同时将EPWM1频率降低到10 KHz,则CLA1Isr1的LED再次开始切换。  

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

    实际上,LED正在使用启动板中分配的引脚,即GPIO 31和GPIO34。 而ePWM使用自己的引脚I e GPIO0/GPIO1 (用于EPWM1),GPIO2/3 (用于EPWM2),GPIO 4/5 (用于EPWM3)。 此外,所有配置都是使用sysconfig工具完成的,因此不会发生资源冲突。 我已使用调试模式来调查此问题,我发现计数器只增加一次,即其值从0更改为1,但没有进一步增加。 但是,如果我在保持添加EPWM3的同时将EPWM1频率降低到10 KHz,则CLA1Isr1的LED再次开始切换。 意味着CLA1Isr1仍要执行,但不能超过10 kHz。 我今天将查看链接程序命令文件。 可能是有问题。 我记得,当我添加附加外设时,代码无法插入C2000 Academy实验室9提供的链接器命令文件的默认.text部分。 我已经进行了更改以适应大型代码。

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

    尝试完所有尝试后,我尝试更改外围设备的初始化顺序。 sysconfig Board_init()函数按照以下生成代码所示的顺序初始化外围设备:

    void Board_init()
    {
    	EALLOW;
    
    	PinMux_init();
    	SYNC_init();
    	ADC_init();
    	CLA_init();
    	DAC_init();
    	EPWM_init();
    	GPIO_init();
    	MEMCFG_init();
    	SCI_init();
    	INTERRUPT_init();
    
    	EDIS;
    }

    我在主菜单中调用此功能来配置外围设备。 为了更改初始化顺序,我注释了Board_init函数,并将其替换为手动函数调用,其中CLA_init()被移动到ePWM_init()之下。 这在下面的代码中显示。

    void main(void)
    {
        // Configure system clock and PLL, enable peripherals, and configure
        // flash if used.
        Device_init();
    
        // Initialize the PIE module and vector table.
        Interrupt_initModule();
        Interrupt_initVectorTable();
    
        //Board_init();
        EALLOW;
    
            PinMux_init();
            SYNC_init();
            ADC_init();
            DAC_init();
            EPWM_init();
            CLA_init();
            GPIO_init();
            MEMCFG_init();
            SCI_init();
            INTERRUPT_init();
    
        EDIS;
    
        // Enable global interrupts.
        EINT;
        // Enable real-time debug.
        ERTM;
    
        for (;;)
        {
            // Do nothing.
            DEVICE_DELAY_US(100);
            // Force task 8 to run to perform init routines.
            //CLA_forceTasks(CLA1_BASE, CLA_TASKFLAG_8);
            NOP;
        }
    }
    

    此顺序更改可解决此问题。 我们可以关闭标签,但如果一些专家能够详细说明这一点,并且根据此线程的发现,sysconfig代码生成工具可能会有一些改进,这将是非常好的。 请注意,sysconfig工具用于配置所有外围设备。

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

    您好,

    去年,TI发布了有关C2000器件的学院式在线培训。 培训的目的是提供逐步指导,以便开始使用C2000系列实时MCU。 我们知道您已经了解了C2000 Academy 的CLA模块。 如果您能与Academy分享您的经验,我们希望与您联系。 您是否有任何改进反馈/建议? 我们一直在寻找改进内容的方法,以便对客户更有用,因此任何反馈/建议都将非常有帮助。

     

    非常感谢您花时间提供反馈。

     

    谢谢,此致,

    Santosh Jha

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

    对于那些从C2000器件开始的用户来说,C2000学院是一个非常好的资源,并且对我非常有帮助。 我在 不同的应用领域拥有超过10年的固件开发经验,但最近转而使用TI C2000系列,因为它们似乎更适合数字电源转换器的实时控制。 根据我的经验,我发现先进的外设具有非常详细的技术文字和复杂的设置要求。 在这种情况下,自动代码生成工具非常有用,因为这些工具具有许多内置检查功能,可以警告开发人员是否存在任何不一致。 此外,自动化工具还有助于从一个目标控制器轻松迁移到另一个目标控制器,特别是从开发板迁移到生产板。  

    有关改进建议:内容似乎更侧重于驱动程序库方法。 出于前面提到的原因,我建议使这些文件更加面向sysconfig。

    非常感谢TI E2E在我们的项目开发过程中提供的持续帮助和支持。

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

    Asad

    非常感谢您的反馈。 我们正在缓慢地在基于sysconfig的配置上添加更多内容。

    此致,

    Santosh