Finish exti's implementation

This commit is contained in:
Steins7 2023-05-13 15:42:59 +02:00
parent 3906a79315
commit 245b9238e9
2 changed files with 10 additions and 7 deletions

View File

@ -11,6 +11,7 @@
#include "exti_regs.h"
#include "nvic.h"
#include "afio.h"
//--local definitions-----------------------------------------------------------
@ -28,7 +29,7 @@ void exti_configure(enum ExtiLine line_mask, enum GpioPort port,
{
exti_reset(line_mask);
#warning "configure ports mapping"
afio_map_exti(line_mask, port);
//configure edge detections
if (config_mask & EXTI_CONFIG_RISING_EDGE) {
@ -83,15 +84,17 @@ void exti_reset(enum ExtiLine line_mask)
//disable interrupts lines in nvic
for (uint8_t i = 0; i < 5; ++i) {
if (line_mask & (0x1 << i)) {
nvic_enable(NVIC_IRQ_EXTI0 + i);
nvic_disable(NVIC_IRQ_EXTI0 + i);
}
}
if (line_mask & 0x3e0) {
nvic_enable(NVIC_IRQ_EXTI9_5);
nvic_disable(NVIC_IRQ_EXTI9_5);
}
if (line_mask & 0x7c00) {
nvic_enable(NVIC_IRQ_EXTI15_10);
nvic_disable(NVIC_IRQ_EXTI15_10);
}
afio_map_exti(0xFFFF, 0x0);
}
void exti_configure_specific(enum ExtiLineSpecific line_mask,
@ -180,7 +183,7 @@ void exti_reset_peripheral(void)
nvic_disable(NVIC_IRQ_RTC_ALARM);
nvic_disable(NVIC_IRQ_USB_WAKEUP);
#warning "reset afio lines"
afio_map_exti(0xFFFF, 0x0);
}
//--local functions-------------------------------------------------------------

View File

@ -54,8 +54,8 @@ enum ExtiLineSpecific {
* regular and specific lines and can be used together on a single line
*/
enum ExtiConfig {
EXTI_CONFIG_RISING_EDGE,
EXTI_CONFIG_FALLING_EDGE,
EXTI_CONFIG_RISING_EDGE = (0x1 << 0),
EXTI_CONFIG_FALLING_EDGE = (0x1 << 1),
};
typedef void (*ExtiCallback)(void);