46 lines
1007 B
C++
Executable File
46 lines
1007 B
C++
Executable File
#ifndef STM32U5_HAL_EXTI_HPP
|
|
#define STM32U5_HAL_EXTI_HPP
|
|
|
|
#include "global_variable.h"
|
|
#include "prepherials.h"
|
|
|
|
#include "reg_exti_gen.h"
|
|
|
|
class Exti {
|
|
public:
|
|
EXTI_TypeDef *ins;
|
|
reg_exti_t *reg;
|
|
void (*callback)() = nullptr;
|
|
public:
|
|
Exti() = default;
|
|
|
|
void setup() {
|
|
// enable clock
|
|
RCC->APB3ENR |= RCC_APB3ENR_SYSCFGEN;
|
|
// enable interrupt
|
|
NVIC_EnableIRQ(EXTI0_IRQn);
|
|
reg = (reg_exti_t *) EXTI;
|
|
ins = (EXTI_TypeDef *) EXTI;
|
|
}
|
|
|
|
void init(int line, int mode, int trigger) {
|
|
// set mode
|
|
}
|
|
|
|
// falling edge or rising edge
|
|
void set_trigger(int line, int trigger, void(*_callback)()) {
|
|
NVIC_EnableIRQ(EXTI2_IRQn);
|
|
reg->ftsr1.ft2 = 1;
|
|
reg->imr1.im2 = 1;
|
|
reg->r1.exti16_23 = 1; // pb 1 as interrupt
|
|
callback = _callback;
|
|
}
|
|
|
|
void interrupt() {
|
|
uint32_t tmp = ins->FPR1;
|
|
reg->fpr1.fpif2 = 1;
|
|
if (callback != nullptr) callback();
|
|
}
|
|
};
|
|
|
|
#endif |