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.

TMS320F28069PZT中DMA如何自动清除ADCINTFLG中的ADCINT1位?

1、AD由PWM6的SOCB触发

InitAdc();
EALLOW;
AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 0; // overlap mode
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; // ADCINT1 trips after AdcResults latch
AdcRegs.ADCCTL1.bit.TEMPCONV = 0; // ADCINA5 采集外部
AdcRegs.INTSEL1N2.bit.INT1E = 1; // Enabled ADCINT1
AdcRegs.INTSEL1N2.bit.INT1CONT = 0; // Disable ADCINT1 Continuous mode
AdcRegs.INTSEL1N2.bit.INT1SEL = 10; // setup EOC10 to trigger ADCINT1 to fire
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
AdcRegs.ADCSOC0CTL.bit.CHSEL = ADC_I_L1; //ADCINA3
AdcRegs.ADCSOC1CTL.bit.CHSEL = ADC_I_L2; //ADCINB5
AdcRegs.ADCSOC2CTL.bit.CHSEL = ADC_I_L3; //ADCINB0
AdcRegs.ADCSOC3CTL.bit.CHSEL = ADC_I_LAC; //ADCINA2
AdcRegs.ADCSOC4CTL.bit.CHSEL = ADC_I_BUS; //ADCINB1
AdcRegs.ADCSOC5CTL.bit.CHSEL = ADC_V_BUS; //ADCINA5
AdcRegs.ADCSOC6CTL.bit.CHSEL = ADC_V_BAT; //ADCINB4
AdcRegs.ADCSOC7CTL.bit.CHSEL = ADC_V_OFFGRID; //ADCINA1
AdcRegs.ADCSOC8CTL.bit.CHSEL = ADC_V_Grid; //ADCINA4
AdcRegs.ADCSOC9CTL.bit.CHSEL = ADC_tempA; //ADCINA6
AdcRegs.ADCSOC10CTL.bit.CHSEL = ADC_tempB; //ADCINA7

AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0x10; // set SOC0 start trigger on EPWM6 SOCB
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 0x10; // set SOC1 start trigger on EPWM6 SOCB
AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 0x10; // set SOC2 start trigger on EPWM6 SOCB
AdcRegs.ADCSOC3CTL.bit.TRIGSEL = 0x10; // set SOC3 start trigger on EPWM6 SOCB
AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 0x10; // set SOC4 start trigger on EPWM6 SOCB
AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 0x10; // set SOC5 start trigger on EPWM6 SOCB
AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 0x10; // set SOC6 start trigger on EPWM6 SOCB
AdcRegs.ADCSOC7CTL.bit.TRIGSEL = 0x10; // set SOC7 start trigger on EPWM6 SOCB
AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 0x10; // set SOC8 start trigger on EPWM6 SOCB
AdcRegs.ADCSOC9CTL.bit.TRIGSEL = 0x10; // set SOC9 start trigger on EPWM6 SOCB
AdcRegs.ADCSOC10CTL.bit.TRIGSEL = 0x10; // set SOC10 start trigger on EPWM6 SOCB

2、DMA由ADCINT1触发

DMADest = &ADC[DMAaddress].all; //Point DMA destination to the beginning of the array
DMASource = &AdcResult.ADCRESULT0; //Point DMA source to ADC address
DMACH2AddrConfig(DMADest,DMASource);
DMACH2BurstConfig(15,1,SAMPLENUM);
DMACH2TransferConfig(SAMPLENUM-1,0,0);
DMACH2WrapConfig(0,0,0,1);
DMACH2ModeConfig(DMA_SEQ1INT,PERINT_ENABLE,ONESHOT_DISABLE,CONT_ENABLE,SYNC_DISABLE,SYNC_SRC,
OVRFLOW_DISABLE,SIXTEEN_BIT,CHINT_END,CHINT_DISABLE);
StartDMACH2();

3、28069的资料中说DMA可以自动清除ADCINT1中断,但是我的程序却不能自动清除,手动清除一次ADCINT1,DMA会工作一次,帮忙看看是哪里设置错误了,这段程序是从28335移植过来的,在28335里面没有问题。

4、用的ccs版本是8.0.0.00016 ,编译器版本是18.1.1.LTS


  • ”3、28069的资料中说DMA可以自动清除ADCINT1中断,但是我的程序却不能自动清除,手动清除一次ADCINT1,DMA会工作一次,帮忙看看是哪里设置错误了,这段程序是从28335移植过来的,在28335里面没有问题。

    ERIC:
    看一下这个寄存器 INTSEL1N2 的位INT1CONT,把它置位1,这样子ADC中断就会触发,忽略ADCINTFLG的清除与否。
    0 No further ADCINTy pulses are generated until ADCINTy flag (in ADCINTFLG register)
    is cleared by user.
    1 ADCINTy pulses are generated whenever an EOC pulse is generated irrespective if the
    flag bit is cleared or not
  • 非常感谢,问题得到解决。
x 出现错误。请重试或与管理员联系。