Hello Charles,
I hope you doing well.
I am facing another weird issue. I have two interrupts on GPIO_PORTM_BASE one is at GPIO_PIN_3 i.e. PM3 another is GPIO_PIN_6 i.e. PM6. GPIO_PIN_6 interrupt will always get triggered and land the cpu into the interrupt handler routine while GPIO_PIN_3 interrupt triggers the CPU into the interrupt handler routine for first few cycles. However after some time later, the CPU will not get triggered from GPIO_PIN_3 anymore, I scoped the interrupt signal on GPIO_PIN_3 and I can see the interrupt signal is always there as expected.
GPIO_PIN_3 is a periodic interrupt running at 15msec while GPIO_PIN_6 is a push button that you triggers the ISR whenever user push the button.
GPIO_PIN_6 will always trigger CPU.
Here is my code.
The defines are;
#define PSONOFFRESET_RQST_PORT GPIO_PORTM_BASE #define PSONOFFRESET_RQST_PIN GPIO_PIN_6 //PM6 #define ADC_CTRL_PORT GPIO_PORTM_BASE #define ADC_BUSY GPIO_PIN_3 //PM3
The ISR is here;
//Interrupt Service Routine void PORTM_Common_IntHandler(void) { // Clear the interrupt uint32_t status; SysCtlDelay(10); status = GPIOIntStatus(ADC_CTRL_PORT, true); if(status & ADC_BUSY) { ExtADC_Collect_Data(); } else if (status & PSONOFFRESET_RQST_PIN) { Global_Flag = 1; } } GPIOIntClear(ADC_CTRL_PORT, status); } //Enable GPIO_PIN_6 interrupt function void PS_ONOFFRESET_Req_interrupt_enable(void) { IntMasterDisable(); GPIOPinTypeGPIOInput(PSONOFFRESET_RQST_PORT, PSONOFFRESET_RQST_PIN); GPIOPadConfigSet(PSONOFFRESET_RQST_PORT, PSONOFFRESET_RQST_PIN, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); // Enable weak pullup resistor for ADC_BUSY GPIOIntDisable(PSONOFFRESET_RQST_PORT, PSONOFFRESET_RQST_PIN); GPIOIntClear(PSONOFFRESET_RQST_PORT, PSONOFFRESET_RQST_PIN); GPIOIntRegister(PSONOFFRESET_RQST_PORT, PORTM_Common_IntHandler); GPIOIntTypeSet(PSONOFFRESET_RQST_PORT, PSONOFFRESET_RQST_PIN, GPIO_LOW_LEVEL); GPIOIntEnable(PSONOFFRESET_RQST_PORT, PSONOFFRESET_RQST_PIN); IntMasterEnable(); } //Enable GPIO_PIN_3 interrupt function void ExtADC_Busy_interrupt_enable(void) { //Enable Interrupt on ADC_BUSY Pin IntMasterDisable(); GPIOPinTypeGPIOInput(ADC_CTRL_PORT, ADC_BUSY); GPIOPadConfigSet(ADC_CTRL_PORT, ADC_BUSY, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD); GPIOIntDisable(ADC_CTRL_PORT, ADC_BUSY); GPIOIntClear(ADC_CTRL_PORT, ADC_BUSY); GPIOIntRegister(ADC_CTRL_PORT, PORTM_Common_IntHandler); GPIOIntTypeSet(ADC_CTRL_PORT, ADC_BUSY, GPIO_FALLING_EDGE); GPIOIntEnable(ADC_CTRL_PORT, ADC_BUSY); IntMasterEnable(); }
Not sure, what is going wrong.
Thanks for help.
Regards