Interrupt handler won't run

0

I'm working on an stm32l467 and trying to run an ISR when i push the user-push-button. Everything looks to be setup correctly. I have looked at the registers in the debugger (Keil uV) and everything looks good, but when i push the button I end up in the default handler and can't understand why the handler is not running.

Running in the debugger i can see that when i push the button, i get an interrupt-pending (EXTI->PR1) flag, but the code then jumps to the the default handler. I can't see what i'm missing. I know there are easier ways to setup interrupts using the HAL layer, i'm just trying to understand what registers must be accessed from a low-level.

Can anyone suggest a missing step to this?

#include <stm32l4xx.h>
#define DELAY 1

void delay1Hz(void);
bool buttonInterrupt = false;

int main(void)
{
    __disable_irq();
    /* Configure the clocks */
    RCC->CR         &=  0xFFFFFF07;  //Clear ~MSIRANGE bits and MSIRGSEL bit
    RCC->CR         |=  0x00000088;  //Set MSI to 16MHz and MSIRGSEL bit
    RCC->AHB2ENR    |=  0x00000001;  //Enable PA5 clocks

    /* Enable PA0 for output */
    GPIOA->MODER    &=  0xFFFFF3FF;  //Clear GPIOA[5] MODER bits
    GPIOA->MODER    |=  0x00000400;  //Enable GPIOA[5] for output

    RCC->AHB2ENR    |= 0x4;                     //ENABLE GPIOC port clk
    GPIOC->MODER    &= 0xF3FFFFFF;      //Clear GPIOC[13] for input mode

    RCC->APB2ENR        |= 1;   //Enable SYSCFG clk 
    SYSCFG->EXTICR[3]   &= ~0x00F0;     //CLEAR_BIT the EXTI[13] bits
    SYSCFG->EXTICR[3]   |= 0x20;        //Enable GPIOC for EXTI[13]
    EXTI->IMR1          |= 0x2000;  //Unmask EXTI13
    EXTI->FTSR1         |= 0x2000;  //Enable falling edge trigger on pb
    NVIC_EnableIRQ(EXTI15_10_IRQn); //Enable EXTI15-to-10 interrupts

  __enable_irq();

    for (;;)
    {
        if(buttonInterrupt == true) {

            //flash LED's (doesn't get here)
        }
    }
}

void initTim2() {
    //timer 2 code - not causing a problem
}

void    delay1Hz() {
    //delay code - not interrupt controlled
}


/* This doesn't run */
void EXTI15_10_IRQHandler(void) {
        buttonInterrupt = true;
        EXTI->PR1 = 0x2000;
}
interrupt
stm32
keil
asked on Stack Overflow Feb 3, 2019 by Sean Smith

1 Answer

0

Never mind: There seems to be some problem with a delay i have with timer-2. It's not using interrupts, so i'm surprised it's causing trouble. But if i take it out and use a different delay, the interrupt from the above code works fine. It's an odd one.

answered on Stack Overflow Feb 3, 2019 by Sean Smith

User contributions licensed under CC BY-SA 3.0