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/TMS320F2.8069万:了解CLA_ISR的工作原理

Guru**** 2587345 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/656881/ccs-tms320f28069-understanding-of-the-operating-principle-of-cla_isr

部件号:TMS320F2.8069万

工具/软件:Code Composer Studio

我想使用PWM TRIG启动ADC的SOC,并使用ADC_INT启动TRIG CLA任务。 CLA任务完成后,执行CLA_ISR。 在CLA_ISR中分配GPIO切换以确定执行频率。

问题是更改PWM TRIG频率不会影响CLA_ISR执行频率,但ADC ACQPS会影响。

CLA_ISR的工作原理是什么? 如何实现CLA任务与PWM触发同步?

谢谢!

以下是从Example_2806xClaAdc修改的代码:

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

    //初始化CLA寄存器

     EALLOW;

     Cla1Regs.MVECT2 =(UINT16)(&Cla1Task2 -&Cla1Prog_Start)*sizeof (UINT32);

     Cla1Regs.MVECT8 =(UINT16)(&Cla1Task8 -&Cla1Prog_Start)*sizeof (UINT32);

     Cla1Regs.MPISRCSEL1.bit.PERINT2SEL = CLA_INT2_ADCINT2;// ADCINT2启动任务2

     Cla1Regs.MMEMCFG.bit.PROGE = 1;      //将CLA程序存储器映射到CLA

     Cla1Regs.MCTL.Bit.IACKE = 1;       //启用IACK通过软件启动任务

     Cla1Regs.MIER.ALL =(M_INT8 | M_INT2); //启用任务8和任务2

     Cla1ForceTask8andWait();         //强制CLA任务8.  

                          //这将把ConversionCount初始化为零

     AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1;//启用非重叠模式

     ADcRegs.ADCCTL1.bit.INTPULSEPOS =0;  // ADCINT在ADC开始转换时跳闸

     AdcRegs.INTSEL1N2.bit.INT2E  = 1;  //启用ADCINT2

     AdcRegs.INTSEL1N2.bit.INT2CONT =0;  //禁用ADCINT2连续模式

     AdcRegs.INTSEL1N2.bit.INT2SEL = 1;//  设置EOC1触发ADCINT2

     AdcRegs.ADCSOC1CTL.bit.CHSEL  = 2;//  将SOC1通道选择设置为ADCINA2

     AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5;  //在EPWM1A上设置SOC1启动触发器

     AdcRegs.ADCSOC1CTL.bit.ACQPS  = 63;  //更改此选项会影响CLA_ISR的执行频率

     EDIS;

    //假定ePWM1时钟已在InitSysCtrl()中启用;

     EALLOW;

     SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;

     EDIS;

     EPwm1Regs.ETSEL.bit.SOCAEN = 1;//在组上启用SOC

     EPwm1Regs.ETSEL.bit.SOCASEL = 4;//在计数增加时从CPMA中选择SOC

     EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在第一个事件上生成脉冲

     EPwm1Regs.CMPA.Half.CMPA = 0x0080;// set比较值

     EPwm1Regs.TBPRD = 3000;//更改此项不会影响CLA_ISR执行频率

     EPwm1Regs.TBCTL.bit.CTRMODE = 0;//开始计数

     EALLOW;

     SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;

     EDIS;

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


    在代码中更改TBPRD不会影响ADC触发的速率(EOC将触发CLA)的原因是您将ADC SOC设置为在小于TBRD的CMPA启动计数(SOCASEL=4)上触发。 您需要更改CMPA值或设置SOCASEL=2 (CTR=PRD),然后更改TBPRD,以查看影响。

    如果您想了解更多信息,请参阅以下研讨会中的实验10:

    processors.wiki.ti.com/.../C2000_Archived_Workshops

    此实验练习与您要做的类似。 它使用EPWM2触发ADC,然后ADC EOC将触发CLA任务。 在ISR中,您将发现一个正在切换的引脚。 ADC正在对EPWM1进行采样,CLA正在对其进行过滤。 另外,我还回答了之前关于CLA操作的一篇文章(使用F2.8377万D,但操作与F2.8069万类似),您可能也会发现它很有趣:

    e2e.ti.com/.../230.263万

    请告诉我这是否有帮助并回答您的问题。

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

    非常感谢您的帮助回复。

    我从WorkShop Lab 10代码中找到了关键点,即ADCINTSOCSEL寄存器。 应在ADCINTSOCSEL中重置特定的SOC,以使ADCINT不触发SOC,并使TRIGSEL字段确定触发器。 然后它工作正常。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复。   请单击绿色"已验证答案"按钮以关闭此线程。

    - Ken