如题,代码如下:
void ADC_Config(void)
{
InitAdc(); // For this example, init the ADC
EALLOW; // This is needed to write to EALLOW protected register
PieVectTable.ADCINT3 = &adc_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
PieCtrlRegs.PIEIER10.bit.INTx3 = 1; // Enable INT 10.3 in the PIE
IER |= M_INT10; // Enable CPU Interrupt 10
// Configure ADC
EALLOW;
AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; //REF Int
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINT1 trips after AdcResults latch
AdcRegs.INTSEL3N4.bit.INT3E = 1; //Enabled ADCINT3
AdcRegs.INTSEL3N4.bit.INT3CONT = 0; //Disable ADCINT3 Continuous mode,single conversion mode
AdcRegs.INTSEL3N4.bit.INT3SEL = 3; //setup EOC3 to trigger ADCINT3 to fire
AdcRegs.ADCSAMPLEMODE.bit.SIMULEN0=0; //SOC0,SOC1 SEQUENTIAL Sampling Enable
AdcRegs.ADCSAMPLEMODE.bit.SIMULEN2=0; //SOC2,SOC3 SEQUENTIAL Sampling Enable
AdcRegs.ADCSAMPLEMODE.bit.SIMULEN4=0; //SOC2,SOC3 SEQUENTIAL Sampling Enable
AdcRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0 ADCINA0
AdcRegs.ADCSOC1CTL.bit.CHSEL = 8; //SOC1 ADCINB0
AdcRegs.ADCSOC2CTL.bit.CHSEL = 1; //SOC2 ADCINA1
AdcRegs.ADCSOC3CTL.bit.CHSEL = 0; //SOC3 ADCINA0
AdcRegs.ADCSOC4CTL.bit.CHSEL = 0; //SOC4 ADCINA0
AdcRegs.ADCSOC5CTL.bit.CHSEL = 0; //SOC5 ADCINA0
//AD选择触发源,软件触发 P34
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0x00; //ADCTRIG0- Software only
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 0x00; //ADCTRIG0- Software only
AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 0x00; //ADCTRIG0- Software only
AdcRegs.ADCSOC3CTL.bit.TRIGSEL = 0x00; //ADCTRIG0- Software only
AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 0x00; //ADCTRIG0- Software only
AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 0x00; //ADCTRIG0- Software only
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;
EDIS;
}
//-------------------------------------------------------------------------
//AD 中断处理函数
//
//##########################################################################
interrupt void adc_isr(void)
{
EALLOW;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP10; // Acknowledge interrupt to PIE
EDIS;
AdcRegs.ADCINTFLGCLR.bit.ADCINT3 = 1; //Clear ADCINT1 flag reinitialize for next SOC
}
仿真结果见附件。
如果把PieVectTable.ADCINT3 = &adc_isr换成PieVectTable.ADCINT5 = &adc_isr,则不进入中断了;