在进行外设配置时,将ADC和外部中断同时配置,发现外部中断不能被触发,当ADC不使能的时候,外部中断就可以触发,就是按照C2000里面的例程进行结合,不知道啥原因,还希望支持一下,外部中断选择端口34,采样采用9,15,23引脚
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.
在进行外设配置时,将ADC和外部中断同时配置,发现外部中断不能被触发,当ADC不使能的时候,外部中断就可以触发,就是按照C2000里面的例程进行结合,不知道啥原因,还希望支持一下,外部中断选择端口34,采样采用9,15,23引脚
这个好像没法添加压缩包,我截图看一下吧
GPIO_setDirectionMode(17, GPIO_DIR_MODE_IN); // input GPIO_setQualificationMode(17, GPIO_QUAL_SYNC); GPIO_setDirectionMode(17, GPIO_DIR_MODE_IN); GPIO_setInterruptPin(17, GPIO_INT_XINT1); GPIO_setInterruptType(GPIO_INT_XINT1, GPIO_INT_TYPE_FALLING_EDGE); GPIO_enableInterrupt(GPIO_INT_XINT1); EALLOW; Adc_GPIO_Init(PVFirstSimpleCurrent_PIN,PVFirstSimpleCurrent_PAD); Adc_GPIO_Init(PVFirstSimpleVoltage_PIN,PVFirstSimpleVoltage_PAD); Adc_GPIO_Init(InverterSimpleVoltage_PIN,InverterSimpleVoltage_PAD); // Adc_GPIO_Init(GPIO_231_GPIO231,231); // Adc_GPIO_Init(GPIO_232_GPIO232,232); // Adc_GPIO_Init(GPIO_224_GPIO224,224); EDIS; ASYSCTL_init(); EALLOW; ADC_setOffsetTrimAll(ADC_REFERENCE_INTERNAL,ADC_REFERENCE_3_3V); ADC_setPrescaler(myADC0_BASE, ADC_CLK_DIV_2_0); ADC_setInterruptPulseMode(myADC0_BASE, ADC_PULSE_END_OF_CONV); ADC_enableConverter(myADC0_BASE); DEVICE_DELAY_US(5000); ADC_disableBurstMode(myADC0_BASE); ADC_setSOCPriority(myADC0_BASE, ADC_PRI_ALL_ROUND_ROBIN); ADC_setupSOC(myADC0_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_EPWM1_SOCA, ADC_CH_ADCIN0, 9U); ADC_setInterruptSOCTrigger(myADC0_BASE, ADC_SOC_NUMBER0, ADC_INT_SOC_TRIGGER_NONE); ///PVVoltage ADC_setupSOC(myADC0_BASE, ADC_SOC_NUMBER1, ADC_TRIGGER_EPWM1_SOCA, ADC_CH_ADCIN4, 9U); ADC_setInterruptSOCTrigger(myADC0_BASE, ADC_SOC_NUMBER1, ADC_INT_SOC_TRIGGER_NONE); //current ADC_setupSOC(myADC0_BASE, ADC_SOC_NUMBER2, ADC_TRIGGER_EPWM1_SOCA, ADC_CH_ADCIN12, 9U); ADC_setInterruptSOCTrigger(myADC0_BASE, ADC_SOC_NUMBER2, ADC_INT_SOC_TRIGGER_NONE); //inverterVoltage ADC_setInterruptSource(myADC0_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER2); ADC_clearInterruptStatus(myADC0_BASE, ADC_INT_NUMBER1); ADC_disableContinuousMode(myADC0_BASE, ADC_INT_NUMBER1); ADC_enableInterrupt(myADC0_BASE, ADC_INT_NUMBER1); EDIS; EALLOW; Interrupt_register(INT_XINT1, &xint1ISR); Interrupt_register(INT_ADCA1, &adcA1ISR); Interrupt_enable(INT_XINT1); Interrupt_enable(INT_ADCA1); SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC); EDIS;
上面这部分是初始化的程序
__interrupt void adcA1ISR(void)
{
//
// Store results
//
EINT;
adcAResult0 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);
adcAResult1 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER1);
adcAResult2 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER2);
// Clear the interrupt flag
//
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
//
// Check if overflow has occurred
//
if(true == ADC_getInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1))
{
ADC_clearInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
}
//
// Acknowledge the interrupt
//
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);
}
interrupt void xint1ISR(void)
{
// GPIO_writePin(40, 0); // GPIO16 is lowered
// DisablePWMOut();
// InverterStop();
keyenable = 0;
//
// Acknowledge this interrupt to get more from group 1
//
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);
}
下面这部分是中断程序
应该复制到主函数可以直接运行
如果需要上传文件,请点击编辑栏下方的插入--文件:


再点击upload选择本地文件上传。
XINT中断无法触发时,有没有检查一下相应的中断标志位?
gpio_ex2_toggle.zip源代码已上传,中断标志位怎么看呢