20路ADC全开,定时触发采集。AD0开了SS0采集8路,优先级0,SS1采集4路,优先级1;AD1开了SS0采集8路,优先级2。
现象是AD0的SS0和AD1的SS0都能进中断,AD0的SS1不进中断。把AD0SS1的优先级设为0,AD0SS0优先级调为1后,情况变为AD0的SS1和AD1的SS0都能进中断,AD0的SS0不进中断。
请问一下是什么原因,谢谢!
初始化代码如下:
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1);
//config AIN Pin
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5);//AIN0-3,AIN8,AIN9
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
GPIOPinTypeADC(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);//AIN4-7,AIN12-15,
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinTypeADC(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5);//AIN10¡¢AIN11
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK);
GPIOPinTypeADC(GPIO_PORTK_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);//AIN16-19
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_1MSPS);
ADCHardwareOversampleConfigure(ADC0_BASE,16);
ADCHardwareOversampleConfigure(ADC1_BASE,16);
ADCSequenceConfigure(ADC0_BASE, ADC_SS0, ADC_TRIGGER_TIMER, 0);
ADCSequenceStepConfigure(ADC0_BASE, ADC_SS0, ADC_STEP0, ADC_CTL_CH0);
ADCSequenceStepConfigure(ADC0_BASE, ADC_SS0, ADC_STEP1, ADC_CTL_CH1);
ADCSequenceStepConfigure(ADC0_BASE, ADC_SS0, ADC_STEP2, ADC_CTL_CH2);
ADCSequenceStepConfigure(ADC0_BASE, ADC_SS0, ADC_STEP3, ADC_CTL_CH3);
ADCSequenceStepConfigure(ADC0_BASE, ADC_SS0, ADC_STEP4, ADC_CTL_CH4);
ADCSequenceStepConfigure(ADC0_BASE, ADC_SS0, ADC_STEP5, ADC_CTL_CH5);
ADCSequenceStepConfigure(ADC0_BASE, ADC_SS0, ADC_STEP6, ADC_CTL_CH6);
ADCSequenceStepConfigure(ADC0_BASE, ADC_SS0, ADC_STEP7, ADC_CTL_CH7 | ADC_CTL_IE | ADC_CTL_END);//
ADCSequenceEnable(ADC0_BASE, ADC_SS0);
ADCIntClear(ADC0_BASE, ADC_SS0);
ADCIntEnable(ADC0_BASE, ADC_SS0);
IntEnable(INT_ADC0SS0);
ADCSequenceConfigure(ADC0_BASE, ADC_SS1, ADC_TRIGGER_TIMER, 1);
ADCSequenceStepConfigure(ADC0_BASE, ADC_SS1, ADC_STEP0, ADC_CTL_CH8);
ADCSequenceStepConfigure(ADC0_BASE, ADC_SS1, ADC_STEP1, ADC_CTL_CH9);
ADCSequenceStepConfigure(ADC0_BASE, ADC_SS1, ADC_STEP2, ADC_CTL_CH10);
ADCSequenceStepConfigure(ADC0_BASE, ADC_SS1, ADC_STEP3, ADC_CTL_CH11 | ADC_CTL_IE | ADC_CTL_END);
ADCSequenceEnable(ADC0_BASE, ADC_SS1);
ADCIntClear(ADC0_BASE, ADC_SS1);
ADCIntEnable(ADC0_BASE, ADC_SS1);
IntEnable(INT_ADC0SS1);
ADCSequenceConfigure(ADC1_BASE, ADC_SS0, ADC_TRIGGER_TIMER, 2);
ADCSequenceStepConfigure(ADC1_BASE, ADC_SS0, ADC_STEP0, ADC_CTL_CH12);
ADCSequenceStepConfigure(ADC1_BASE, ADC_SS0, ADC_STEP1, ADC_CTL_CH13);
ADCSequenceStepConfigure(ADC1_BASE, ADC_SS0, ADC_STEP2, ADC_CTL_CH14);
ADCSequenceStepConfigure(ADC1_BASE, ADC_SS0, ADC_STEP3, ADC_CTL_CH15);
ADCSequenceStepConfigure(ADC1_BASE, ADC_SS0, ADC_STEP4, ADC_CTL_CH16);
ADCSequenceStepConfigure(ADC1_BASE, ADC_SS0, ADC_STEP5, ADC_CTL_CH17);
ADCSequenceStepConfigure(ADC1_BASE, ADC_SS0, ADC_STEP6, ADC_CTL_CH18);
ADCSequenceStepConfigure(ADC1_BASE, ADC_SS0, ADC_STEP7, ADC_CTL_CH19 | ADC_CTL_IE | ADC_CTL_END);//
ADCSequenceEnable(ADC1_BASE, ADC_SS0);
ADCIntClear(ADC1_BASE, ADC_SS0);
ADCIntEnable(ADC1_BASE, ADC_SS0);
IntEnable(INT_ADC1SS0);
中断代码如下:
void ADC0_SS0_IntHandler(){
ADCIntClear(ADC0_BASE, ADC_SS0);
Read_ADC0_SS0_Value();
}
void ADC0_SS1_IntHandler(){
ADCIntClear(ADC0_BASE, ADC_SS1);
Read_ADC0_SS1_Value();
}
void ADC1_SS0_IntHandler(){
ADCIntClear(ADC1_BASE, ADC_SS0);
Read_ADC1_SS0_Value();
}