Finish exti's implementation
This commit is contained in:
parent
3906a79315
commit
245b9238e9
@ -11,6 +11,7 @@
|
|||||||
#include "exti_regs.h"
|
#include "exti_regs.h"
|
||||||
|
|
||||||
#include "nvic.h"
|
#include "nvic.h"
|
||||||
|
#include "afio.h"
|
||||||
|
|
||||||
|
|
||||||
//--local definitions-----------------------------------------------------------
|
//--local definitions-----------------------------------------------------------
|
||||||
@ -28,7 +29,7 @@ void exti_configure(enum ExtiLine line_mask, enum GpioPort port,
|
|||||||
{
|
{
|
||||||
exti_reset(line_mask);
|
exti_reset(line_mask);
|
||||||
|
|
||||||
#warning "configure ports mapping"
|
afio_map_exti(line_mask, port);
|
||||||
|
|
||||||
//configure edge detections
|
//configure edge detections
|
||||||
if (config_mask & EXTI_CONFIG_RISING_EDGE) {
|
if (config_mask & EXTI_CONFIG_RISING_EDGE) {
|
||||||
@ -83,15 +84,17 @@ void exti_reset(enum ExtiLine line_mask)
|
|||||||
//disable interrupts lines in nvic
|
//disable interrupts lines in nvic
|
||||||
for (uint8_t i = 0; i < 5; ++i) {
|
for (uint8_t i = 0; i < 5; ++i) {
|
||||||
if (line_mask & (0x1 << i)) {
|
if (line_mask & (0x1 << i)) {
|
||||||
nvic_enable(NVIC_IRQ_EXTI0 + i);
|
nvic_disable(NVIC_IRQ_EXTI0 + i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (line_mask & 0x3e0) {
|
if (line_mask & 0x3e0) {
|
||||||
nvic_enable(NVIC_IRQ_EXTI9_5);
|
nvic_disable(NVIC_IRQ_EXTI9_5);
|
||||||
}
|
}
|
||||||
if (line_mask & 0x7c00) {
|
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,
|
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_RTC_ALARM);
|
||||||
nvic_disable(NVIC_IRQ_USB_WAKEUP);
|
nvic_disable(NVIC_IRQ_USB_WAKEUP);
|
||||||
|
|
||||||
#warning "reset afio lines"
|
afio_map_exti(0xFFFF, 0x0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//--local functions-------------------------------------------------------------
|
//--local functions-------------------------------------------------------------
|
||||||
|
|||||||
@ -54,8 +54,8 @@ enum ExtiLineSpecific {
|
|||||||
* regular and specific lines and can be used together on a single line
|
* regular and specific lines and can be used together on a single line
|
||||||
*/
|
*/
|
||||||
enum ExtiConfig {
|
enum ExtiConfig {
|
||||||
EXTI_CONFIG_RISING_EDGE,
|
EXTI_CONFIG_RISING_EDGE = (0x1 << 0),
|
||||||
EXTI_CONFIG_FALLING_EDGE,
|
EXTI_CONFIG_FALLING_EDGE = (0x1 << 1),
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (*ExtiCallback)(void);
|
typedef void (*ExtiCallback)(void);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user