static void gpio_init(void)
{
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN;
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
// BUT_CANC (PA0)
GPIOA->CRL &= ~GPIO_CRL_CNF0_0; // floating input to pull-down
GPIOA->CRL |= GPIO_CRL_CNF0_1;
// (PA1)
GPIOA->CRL &= ~GPIO_CRL_CNF1_0; // floating input to pull-down
GPIOA->CRL |= GPIO_CRL_CNF1_1;
// (PA2)
GPIOA->CRL &= ~GPIO_CRL_CNF2_0; // floating input to pull-down
GPIOA->CRL |= GPIO_CRL_CNF2_1;
// (PA3)
GPIOA->CRL &= ~GPIO_CRL_CNF3_0; // floating input to pull-down
GPIOA->CRL |= GPIO_CRL_CNF3_1;
// (PA4)
GPIOA->CRL &= ~GPIO_CRL_CNF4_0; // floating input to pull-down
GPIOA->CRL |= GPIO_CRL_CNF4_1;
}
static void exti_init(void)
{
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
EXTI->IMR |= EXTI_IMR_MR0 | EXTI_IMR_MR1 | EXTI_IMR_MR2 | EXTI_IMR_MR3 | EXTI_IMR_MR4;
EXTI->RTSR |= EXTI_RTSR_TR0 | EXTI_RTSR_TR1 | EXTI_RTSR_TR2 | EXTI_RTSR_TR3 | EXTI_RTSR_TR4;
// connect pin to interrupt
AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI0_PA;
AFIO->EXTICR[1] |= AFIO_EXTICR1_EXTI1_PA;
AFIO->EXTICR[2] |= AFIO_EXTICR1_EXTI2_PA;
AFIO->EXTICR[3] |= AFIO_EXTICR1_EXTI3_PA;
AFIO->EXTICR[0] |= AFIO_EXTICR2_EXTI4_PA;
NVIC_SetPriority(EXTI0_IRQn, 1);
NVIC_SetPriority(EXTI1_IRQn, 2);
NVIC_SetPriority(EXTI2_IRQn, 2);
NVIC_SetPriority(EXTI3_IRQn, 1);
NVIC_SetPriority(EXTI4_IRQn, 1);
NVIC_EnableIRQ(EXTI0_IRQn);
NVIC_EnableIRQ(EXTI1_IRQn);
NVIC_EnableIRQ(EXTI2_IRQn);
NVIC_EnableIRQ(EXTI3_IRQn);
NVIC_EnableIRQ(EXTI4_IRQn);
}
__attribute__((section(".after_vectors"))) void EXTI0_IRQHandler()
{
EXTI->PR |= EXTI_PR_PR0;
}
__attribute__((section(".after_vectors"))) void EXTI1_IRQHandler()
{
EXTI->PR |= EXTI_PR_PR1;
}
__attribute__((section(".after_vectors"))) void EXTI2_IRQHandler()
{
EXTI->PR |= EXTI_PR_PR2;
}
__attribute__((section(".after_vectors"))) void EXTI3_IRQHandler()
{
EXTI->PR |= EXTI_PR_PR3;
}
__attribute__((section(".after_vectors"))) void EXTI4_IRQHandler()
{
EXTI->PR |= EXTI_PR_PR4;
}
Mam nadzieję, że formatowanie przetrwa.