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.

[参考译文] 对 CLA 中断频率感到困惑(ADC_CLA 示例28035)

Guru**** 2601915 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/677953/confused-about-cla-interrupt-frequency-adc_cla-example-28035

主题中讨论的其他器件:C2000WARE

您好!

我正在尝试了解针对28035的 CLA 示例 ADC_CLA。 在不对代码进行任何更改的情况下、我尝试在我的振荡器上看到 CLA 中断频率。 CLA 由 ADC 中断2触发、在示例中、中断频率设置为20kHz。 在 CLA 任务2之后、为了清除 ADC 中断标志、一个中断被进入 cla1_isr2。 我在 cla1_isr2中添加了 GPIO 切换、以查看示波器上的 CLA 中断频率。 但是、无论我如何设置 ADC 中断频率、GPIO 都会以500kHz 的频率切换! 怎么回事?

BR Niclas

_interrupt void cla1_isr2 ()
{
GpioDataRegs.GPBTOGGL.bit.GPIO41 = 1;

AdcRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;//清除 ADCINT2标志重新初始化下一个 SOC
PieCtrlRegs.PIEACK.all = 0xFFFF;
} 

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

    您好、Niclas、

    [引用 user="Niclas Samuelsson"]CLA 由 ADC 中断2触发、在示例中、该中断频率设置为20kHz。 [/报价]

    您是否检查了 ePWM1a 输出? 是20kHz 吗? 介绍生成 ePWM 输出所需的初始化行-仅用于验证。

    [引用 USER="Niclas Samuelsson">但是、无论我如何设置 ADC 中断频率、GPIO 都会以500kHz 的频率切换! 怎么回事?[/报价]

    这很奇怪。 您是说您尝试更改了 ePWM1的 TBPRD 值吗?

    此致、

    Gautam

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、当我更改 ePWM1的 TBPRD 值时、GPIO 切换在示波器上看起来是一样的。 当我使 ePWM1成为 CLA 任务的源而不是 ADCINT 时、GPIO 切换会随着我更改 ePWM TBPRD 而改变。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //######################################################################################################################
    //说明:
    //! \addtogroup F2803x_example_list
    //! 

    CLA ADC (CLA_ADC)

    //! //! 在本示例中、ePWM1设置为生成周期性 ADC SOC。 //! 通道 ADCINA2被转换。 当 ADC 开始转换时、 //! 它将使 ADCINT2有效、这将启动 CLA 任务2。 //! //! CLA 任务2在循环缓冲区中记录20个 ADCRESULT1值。 //! 当任务2完成到 CPU 的中断时、ADCINT2标志被清零。 //! //! b 监视\b 变量\n //! - VoltageCLA -最后20个 ADCRESULT1值 //! - ConversionCount -当前结果编号 //! -循环计数 -空闲循环计数 器// // ////////############################################################################################################ //$TI 发布:F2803x C/C++头文件和外设示例 V130 $// $发布 日期:2015年5月8日$// 版权所有:版权所有(C) 2009-2015 Texas Instruments Incorporated -// http://www.ti.com/ 保留所有权利$ //############################################################################################################ #include "DSP28x_Project.h" //设备头文件和示例包括文件 #include "clahare.h" #include #include //此文件中找到的函数的原型语句。 _interrupt void cla1_isr2 (void); //此示例中使用的全局变量: #pragma DATA_SECTION (ConversionCount、"Cla1ToCpuMsgRAM"); #pragma DATA_SECTION (VoltageCLA、 "Cla1ToCpuMsgRAM"); uint16 ConversionCount; uint16 LoopCount; uint16 VoltageCLA[NUM_DATA_POINS]; //这些由链接器文件 extern UINT16 Cla1funcsLoadStart; extern UINT16 Load1funcsSize; extern UINT16 Claus1sStart/ ClaStart ;extern UINT16 Claus1 (Claus/主要 步骤1)定义。 初始化系统控制: // PLL、看门狗、启用外设时钟 //此示例函数位于 DSP2803x_sysctrl.c 文件中。 InitSysCtrl(); //步骤2。 初始化 GPIO: //此示例函数位于 DSP2803x_GPIO.c 文件中, //说明了如何将 GPIO 设置为其默认状态。 //InitGpio();//针对本示例跳过 //步骤3。 清除所有中断并初始化 PIE 矢量表: //禁用 CPU 中断 DINT; //将 PIE 控制寄存器初始化为默认状态。 //默认状态是禁用所有 PIE 中断并 清除标志//。 //此函数位于 DSP2803x_PIECTRL.c 文件中。 InitPieCtrl(); //禁用 CPU 中断并清除所有 CPU 中断标志: IER = 0x0000; IFR = 0x0000; //使用指向 shell 中断 //服务例程(service routinese, ISR)的指针初始化 PIE 矢量表。 //这将填充整个表,即使在 本示例中未使用中断//也是如此。 这对于调试很有用。 //可以在 DSP2803x_DefaultIsr.c 中找到 shell ISR 例程 //此函数可在 DSP2803x_PieVect.c 中找到 InitPieVectTable(); //此示例中使用的中断被重新映射到 这个文件中的// ISR 函数。 EALLOW;//这是写入 EALLOW 受保护寄存 器 PieVectTable.CLA1_INT2 =&cla1_isr2; EDIS;//这是禁用写入 EALLOW 受保护寄存 器所必需的//步骤4。 初始化所有设备外设: InitAdc(); //对于此示例,初始化 ADC AdcOffsetSelfCal (); //步骤5。 特定于用户的代码、启用中断: //在 PIE PieCtrlRegs.PIEIER11.bit.INTx2中启用 ADCINT1 = 1; //在 PIE 中启用 INT 11.2 (CLA 任务2) IER |= M_INT11; //启用 CPU 中断11 EINT;//启用全局中断 INTM ERTM;//启用全局实时中断 DBGM //将 CLA 代码从其加载地址复制到 CLA 程序 RAM // 注意:在调试期间,加载和运行地址可以 //与 Code Composer Studio 可以 直接加载 CLA 程序// RAM 相同。 // // ClafuncsLoadStart、ClafuncsLoadEnd 和 ClafuncsRunStart //符号由链接器创建。 memcpy ((uint16_t *)&Cla1funcsRunStart、(uint16_t *)&INT1funcsLoadStart、(unsigned long)&Cla1funcsLoadSize; //初始化 CLA 寄存 器 EALLOW; Cla1Regs.MVECT2 =(uint16)(&CLA )(&CLA 1funcsLoad2 - Clet1);Claset1eRT2_CL1Prog = Ut2 (Ut2) //将 CLA 程序存储器映射到 CLA Cla1Regs.MCTL.bit.IACKE = 1; //通过软件 Cla1Regs.MIER 启用 IACK 以启动任务=(M_INT8 | M_INT2);//启用任务8和任务2 Cla1ForceTask8andWait(); //强制 CLA 任务8. //这会将 ConversionCount 初始化为零 AdcRegs.ADCCTL1.bit.INTPULSEPOS = 0;// ADC 开始转换时 ADCINT 触发 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 AdcRegs.ADCSOC1CTL.bit.ACQPS 上的 SOC1启动触发器= 6;//将 SOC1 S/H 窗口设置为7个 ADC 时钟周期,(6个 ACQPS 加1) EDIS; //假设 ePWM1时钟已在 InitSysCtrl()中启用; EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; EDIS; EPwm1Regs.ETEN= 1位;SOCASEL//在组 EPwm1Regs.ETSEL.bit.SOCASEL= 4上启用 SOC;//从 CPMA 中选择 SOC 在向上计数 EPwm1Regs.ETPS.bit.SOCAPRD= 1;//在第一个事件 EPwm1Regs.CMPA.half.CMPA= 0x2EE 时生成脉冲;//设置 EPwm1PRD 值 ;//设置比较值0x5Tb.EPs//为 ePWM1设置周期-这将确定采样频率(20kHz) EPwm1Regs.TBCTL.bit.CTRMODE= 0;//向上计数并启动 EALLOW; CtrlRegs.PCLKCR0.bit.BMCLKSYNC=1; GpioDatalRegs.GPU41 = GPIO1.GPIO1.bit.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.bit.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1.GPIO1. EDIS; //等待 (;;) {的 ADC 中断 LOOPCount++; } // 当 CLA 任务2完成 __interrupt void cla1_isr2 () {时,会发生此中断 GpioDataRegs.GPBTOGGLE.bit.GPIO41 = 1; AdcRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;//清除 ADCINT2标志为下一个 SOC 重新初始化 PieCtrlRegs.PIEACX.ALL = 0xFFFF; }

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

    您还可以让 ADC 中断触发 C28x 中断。 如果在 C28x ISR 中切换 GPIO、您是否会看到频率变化。

    CLA 任务频率应随 ADC 中断触发频率以及 ADC 的 PWM 频率触发而变化。 我认为您有正确的理解。 但要进行调试、您可能需要在 C28x 上创建一个 ADC ISR 以进行确认。 或者、您可以在 CLA 任务中切换 GPIO。

    现在、我不确定您为什么会看到这种行为。

    此致、
    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我编辑了代码、使 ADC EOC 触发一个 C28x 中断、就像您所说的那样。 该中断还具有意外频率、与 CLA 中断频率相同。 以某种方式、ADC 中断的触发速率比应有的快得多。 即使我将 PWM SOC 信号周期从1更改为3、并更改 TBPRD 寄存器、ADC 中断速率也保持不变。 我的 ADC 中断配置一定会有问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有关 ADC 的帮助、请参阅 C2000Ware 中的 ADC 示例和 TRM 中的一章。

    如果您有关于 ADC 的具体问题、请创建新主题、以便正确回答。

    此致、
    SAL