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/TMS320F28069F:请检查 ADC ISR 的代码

Guru**** 2542060 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/726778/ccs-tms320f28069f-please-check-the-code-for-adc-isr

器件型号:TMS320F28069F

工具/软件:Code Composer Studio

您好!

我的英语不好、请理解。

下面是我的示例代码、

我想在转换后检查从 ePWM1A_SOCA 到 ADC_INTERRUPT 的延迟。

我想、根据这个代码、用于 ADC_ISR 中断的 EOC 是 EOC15、所以我设置寄存器 AdcRegs.INTSEL1N2.bit.INT1SEL = 15;

我想、如果我设置16kHz PWM 频率、那么中断频率必须为16kHz  

但是、我 按示波器检查脉冲的值(启动 ADC_ISR A = 1时;A = 0产生脉冲)、  

当我设置 INT1SEL = 7时、脉冲为16kHz、但我设置 INT1SEL = 15时、脉冲为150kHz。

在同步模式中、ADCINA7和 ADCINB7的转换完成、只有 EOC7发生? 或者我的代码是错误的?

如果仅发生 EOC7、EOC15始终为1?

我正在等待您的回答。

谢谢你。

//我的示例代码//

//包含的文件
//
#include "DSP28x_Project.h"

//
//函数原型
//
_interrupt void ADC_ISR (void);
void ADC_Config (void);

//
//全局
//
uint16环计数;
UINT16转换计数;
uint16 Voltage0;
uint16 Voltage1;
uint16 Voltage2;
uint16 Voltage3;
uint16 Voltage4;
uint16 Voltage5;
uint16 Voltage6;
uint16 Voltage7;
uint16 Voltage8;
uint16电压9;
uint16 Voltage10;
uint16 Voltage11;
uint16 Voltage12;
uint16 Voltage13;
uint16 Voltage14;
uint16 Voltage15;
uint16 a;

//
//主函
//  
void main (void)

 Dint;
 IER = 0x0000;
   IFR = 0x0000;
 
   InitSysCtrl();

   InitPieCtrl();
   InitPieVectTable();

   EALLOW;
   PieVectTable.ADCINT1 =&ADC_ISR;
   EDIS;
 
   PieCtrlRegs.PIEIER1.bit.INTx1 = 1;
   IER |= M_INT1;

   InitAdc();
   AdcOffsetSelfCal();
 ADC_Config ();

   LoopCount = 0;
   ConversionCount = 0;

 EINT;
   ERTM;

   for (;;)
   {
       LoopCount++;
   }

//
//函数
//
_interrupt void ADC_ISR (void)

A = 1;

A = 0;


   Voltage0 = AdcResult.ADCRESULT0;
   Voltage1 = AdcResult.ADCRESULT1;
   Voltage2 = AdcResult.ADCRESULT2;
   Voltage3 = AdcResult.ADCRESULT3;
   Voltage4 = AdcResult.ADCRESULT4;
   Voltage5 = AdcResult.ADCRESULT5;
   Voltage6 = AdcResult.ADCRESULT6;
   Voltage7 = AdcResult.ADCRESULT7;
   Voltage8 = AdcResult.ADCRESULT8;
   Voltage9 = AdcResult.ADCRESULT9;
   Voltage10 = AdcResult.ADCRESULT10;
   Voltage11 = AdcResult.ADCRESULT11;
   Voltage12 = AdcResult.ADCRESULT12;
   Voltage13 = AdcResult.ADCRESULT13;
   Voltage14 = AdcResult.ADCRESULT14;
   Voltage15 = AdcResult.ADCRESULT15;
    
   ConversionCount++;

   AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
   PieCtrlRegs.PIEACk.bit.ACK1=1;

空 ADC_Config (空)

 EALLOW;
   AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1;
   AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;
   AdcRegs.INTSEL1N2.bit.INT1E = 1;
   AdcRegs.INTSEL1N2.bit.INT1CONT = 0;
   AdcRegs.INTSEL1N2.bit.INT1SEL = 15;
    
   AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;
   AdcRegs.ADCSOC2CTL.bit.CHSEL = 1;
   AdcRegs.ADCSOC4CTL.bit.CHSEL = 2;
   AdcRegs.ADCSOC6CTL.bit.CHSEL = 3;
   AdcRegs.ADCSOC8CTL.bit.CHSEL = 4;
   AdcRegs.ADCSOC10CTL.bit.CHSEL = 5;
   AdcRegs.ADCSOC12CTL.bit.CHSEL = 6;
   AdcRegs.ADCSOC14CTL.bit.CHSEL = 7;
    
   AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN0 = 1;
   AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN2 = 1;
   AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN4 = 1;
   AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN6 = 1;
   AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN8 = 1;
   AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN10 = 1;
   AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN12 = 1;
   AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN14 = 1;
    
   AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5;
   AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 5;
   AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 5;
   AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 5;
   AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 5;
   AdcRegs.ADCSOC10CTL.bit.TRIGSEL = 5;
   AdcRegs.ADCSOC12CTL.bit.TRIGSEL = 5;
   AdcRegs.ADCSOC14CTL.bit.TRIGSEL = 5;
    
   AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC1CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC2CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC3CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC4CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC5CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC6CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC7CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC8CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC9CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC10CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC11CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC12CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC13CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC14CTL.bit.ACQPS = 6;
   AdcRegs.ADCSOC15CTL.bit.ACQPS = 6;
    
   EPwm1Regs.ETSEL.bit.SOCAEN = 1;
   EPwm1Regs.ETSEL.bit.SOCASEL = 4;
   EPwm1Regs.ETPS.bit.SOCAPRD = 1;
   EPwm1Regs.CMPA.half.CMPA = 0x0080;
   EPwm1Regs.TBPRD = 0xFFFF;
   EPwm1Regs.TBCTL.bit.CTRMODE = 0;

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

    INT1SEL = 15应该正常。 我看不到您共享的代码中会解释该问题的任何内容。 如果您看看 ADC 寄存器、您是否看到任何关闭的情况? 您是否看到正在设置任何溢出位?

    [引用用户="InGwon Jo"]

    如果仅发生 EOC7、EOC15始终为1?

    [/报价]

    我不理解这个问题--你能更详细地解释一下吗?

    谢谢、

    惠特尼

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

    InGwon Jo、

    如果您使用 ePWM 触发 SOC、则可以从 ADC ISR 读取 TBCTR 的值、以了解在原始触发器和 ISR 执行之间经过的 EPWM 周期数。

    查看这是否有助于:  


    Tommy