working example of rising edge led toggle on pin A1

redesign_interrupts
polymurph 3 years ago
parent 9c0fdaa6a9
commit 0b1184f41c

@ -9,16 +9,16 @@
#include "stm32f042x6.h" #include "stm32f042x6.h"
#include "hardwareDescription.h" #include "hardwareDescription.h"
volatile uint8_t led_on;
void setup(); void setup();
void EXTI1_IRQHandler(void) void EXTI0_1_IRQHandler(void)
{ {
if((EXTI->PR & EXTI_PR_PIF1) != 0) { if(EXTI->PR & EXTI_PR_PIF1) {
pinToggle(pinB3);
// clear flag // clear flag
EXTI->PR |= EXTI_PR_PIF1; EXTI->PR |= EXTI_PR_PIF1;
led_on = !led_on;
} }
} }
@ -28,27 +28,30 @@ int main(int argc, char *argv[])
// https://controllerstech.com/external-interrupt-using-registers/ // https://controllerstech.com/external-interrupt-using-registers/
pinConfig(pinA1, input, def_stage, pullUp, def_speed); pinConfig(pinA1, input, def_stage, pullDown, def_speed);
// enable interrupt
//NVIC_EnableIRQ(EXTI0_1_IRQn);
// Connect // Connect
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGCOMPEN; RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
SYSCFG->EXTICR[0] &= ~SYSCFG_EXTICR1_EXTI0; SYSCFG->EXTICR[1] &= ~SYSCFG_EXTICR1_EXTI1_Msk;
SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI0_PA; SYSCFG->EXTICR[1] |= SYSCFG_EXTICR1_EXTI1_PA;
// rising trigger selection
EXTI->RTSR |= EXTI_RTSR_RT1;
// Interrupt mask register // Interrupt mask register
EXTI->IMR |= EXTI_IMR_IM1; EXTI->IMR |= EXTI_IMR_IM1;
// rising trigger selection
EXTI->RTSR |= EXTI_RTSR_RT1;
NVIC_SetPriority (EXTI1__IRQn, 1); NVIC_SetPriority (EXTI0_1_IRQn, 0);
NVIC_EnableIRQ(EXTI1); NVIC_EnableIRQ(EXTI0_1_IRQn);
while(1); while(1)
{
if(led_on){
pinWrite(pinB3,1);
} else{
pinWrite(pinB3,0);
}
}
/* /*
while(1) while(1)
{ {

Loading…
Cancel
Save