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 "hardwareDescription.h"
volatile uint8_t led_on;
void setup();
void EXTI1_IRQHandler(void)
void EXTI0_1_IRQHandler(void)
{
if((EXTI->PR & EXTI_PR_PIF1) != 0) {
pinToggle(pinB3);
if(EXTI->PR & EXTI_PR_PIF1) {
// clear flag
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/
pinConfig(pinA1, input, def_stage, pullUp, def_speed);
// enable interrupt
//NVIC_EnableIRQ(EXTI0_1_IRQn);
pinConfig(pinA1, input, def_stage, pullDown, def_speed);
// Connect
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGCOMPEN;
SYSCFG->EXTICR[0] &= ~SYSCFG_EXTICR1_EXTI0;
SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI0_PA;
// rising trigger selection
EXTI->RTSR |= EXTI_RTSR_RT1;
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
SYSCFG->EXTICR[1] &= ~SYSCFG_EXTICR1_EXTI1_Msk;
SYSCFG->EXTICR[1] |= SYSCFG_EXTICR1_EXTI1_PA;
// Interrupt mask register
EXTI->IMR |= EXTI_IMR_IM1;
// rising trigger selection
EXTI->RTSR |= EXTI_RTSR_RT1;
NVIC_SetPriority (EXTI1__IRQn, 1);
NVIC_EnableIRQ(EXTI1);
NVIC_SetPriority (EXTI0_1_IRQn, 0);
NVIC_EnableIRQ(EXTI0_1_IRQn);
while(1);
while(1)
{
if(led_on){
pinWrite(pinB3,1);
} else{
pinWrite(pinB3,0);
}
}
/*
while(1)
{

Loading…
Cancel
Save