MXC-A36_2024.04.18/fr3092_mcu/components/drivers/peripheral/Inc/driver_exti.h

81 lines
2.8 KiB
C
Raw Normal View History

2024-04-17 19:45:26 +08:00
#ifndef _EXTI_H
#define _EXTI_H
#include <stdint.h>
#include "plf.h"
#include "driver_iomux.h"
enum ext_int_type_t
{
EXT_INT_TYPE_LOW,
EXT_INT_TYPE_HIGH,
EXT_INT_TYPE_POS,
EXT_INT_TYPE_NEG,
};
struct exti_ctrl_t //EXTINTCTL. 0x14
{
uint32_t pa_exti_en: 8; //exti intr connect to gpio PA ctrl
uint32_t pb_exti_en: 8; //exti intr connect to gpio PB ctrl
uint32_t resv: 16;
};
struct exti_status_t //EXTINTSTS 0x18
{
uint32_t pa_exti_sts: 8; //PA exti intr status
uint32_t pb_exti_sts: 8; //PB exti intr status
uint32_t resv: 16;
};
struct exti_type_t //EXTINTTYPE offset@0x1C
{
uint32_t pa0_exti_type: 2; //external intr source sel.
uint32_t pa1_exti_type: 2; //external intr source sel.
uint32_t pa2_exti_type: 2; //external intr source sel.
uint32_t pa3_exti_type: 2; //external intr source sel.
uint32_t pa4_exti_type: 2; //external intr source sel.
uint32_t pa5_exti_type: 2; //external intr source sel.
uint32_t pa6_exti_type: 2; //external intr source sel.
uint32_t pa7_exti_type: 2; //external intr source sel.
uint32_t pb0_exti_type: 2; //external intr source sel.
uint32_t pb1_exti_type: 2; //external intr source sel.
uint32_t pb2_exti_type: 2; //external intr source sel.
uint32_t pb3_exti_type: 2; //external intr source sel.
uint32_t pb4_exti_type: 2; //external intr source sel.
uint32_t pb5_exti_type: 2; //external intr source sel.
uint32_t pb6_exti_type: 2; //external intr source sel.
uint32_t pb7_exti_type: 2; //external intr source sel.
};
struct exti_cnt_t //EXTINTCNT00 offset:0x20
{
uint32_t pre_cnt: 12; //Precaler Value: set the external interrupt source 0 CNT_CLK: CNT_CLK=PCLK/(1+ Precaler Value)
uint32_t des_cnt: 4; //Counter Value. (only useful for level trigger mode)
uint32_t resv: 16;
};
struct exti_reg_t
{
struct exti_ctrl_t exti_ctrl; //EXTINTCTL. 0x14
struct exti_status_t exti_sts; //EXTINTSTS 0x18
struct exti_type_t exti_type; //EXTINTTYPE offset@0x1C
struct exti_cnt_t exti_cnt[16]; //EXTINTCNT00~EXTINTCNT15 offset:0x20~0x
};
extern volatile struct exti_reg_t *extiAB_regs;
extern volatile struct exti_reg_t *extiCD_regs;
extern volatile struct exti_reg_t *extiEF_regs;
extern volatile struct exti_reg_t *extiGH_regs;
void exti_enable(enum system_port_t port,enum system_port_bit_t bit);
void exti_disable(enum system_port_t port,enum system_port_bit_t bit);
uint8_t exti_get_src(enum system_port_t port);
void exti_intr_clr(enum system_port_t port,uint8_t bits);
void exti_set_type(enum system_port_t port,enum system_port_bit_t bit, enum ext_int_type_t type);
void exti_set_debounce_cnt(enum system_port_t port,enum system_port_bit_t bit, uint32_t clk, uint8_t cnt);
#endif //_EXTI_H