X-Git-Url: https://hackdaworld.org/cgi-bin/gitweb.cgi?p=my-code%2Farm.git;a=blobdiff_plain;f=betty%2Finterrupts.h;h=9da41e0068c428e44281868ceaafecf145319dd4;hp=20bb3332740c353d29c2a3c97cf2a56563e495f8;hb=HEAD;hpb=916c8dd1dfa2414ae8b58ab1e3d477b24c553815 diff --git a/betty/interrupts.h b/betty/interrupts.h index 20bb333..9da41e0 100644 --- a/betty/interrupts.h +++ b/betty/interrupts.h @@ -15,26 +15,120 @@ #define INTERRUPT_MAX_VIC 16 +#define INTERRUPT_WATCHDOG 0 +#define INTERRUPT_DBG_COMM_RX 2 +#define INTERRUPT_DBG_COMM_TX 3 +#define INTERRUPT_TIMER0 4 +#define INTERRUPT_TIMER1 5 +#define INTERRUPT_UART0 6 +#define INTERRUPT_UART1 7 +#define INTERRUPT_PWM 8 +#define INTERRUPT_I2C 9 +#define INTERRUPT_SPI0 10 +#define INTERRUPT_SPI1 11 +#define INTERRUPT_PLL 12 +#define INTERRUPT_RTC 13 +#define INTERRUPT_EINT0 14 +#define INTERRUPT_EINT1 15 +#define INTERRUPT_EINT2 16 +#define INTERRUPT_EINT3 17 +#define INTERRUPT_ADC 18 + +#define INTERRUPT_MODE_IRQ 0 +#define INTERRUPT_MODE_VIRQ 1 +#define INTERRUPT_MODE_FIQ 2 + #define INTERRUPT_EXT_MODE_EDGE 0 #define INTERRUPT_EXT_MODE_LEVEL 1 #define INTERRUPT_EXT_POLAR_LOW 0 #define INTERRUPT_EXT_POLAR_HIGH 1 +#define INTERRUPT_EXT_NOWAKE 0 +#define INTERRUPT_EXT_WAKEUP 1 + +#define INTERRUPT_EXT0 0 +#define INTERRUPT_EXT1 1 +#define INTERRUPT_EXT2 2 +#define INTERRUPT_EXT3 3 + +#define INTERRUPT_TC0 0 +#define INTERRUPT_TC1 1 + +#define INTERRUPT_TC_MODE_T 0x00 +#define INTERRUPT_TC_MODE_CR 0x01 +#define INTERRUPT_TC_MODE_CF 0x02 +#define INTERRUPT_TC_MODE_CB 0x03 + +#define INTERRUPT_TC_MATCH_IR 0x01 +#define INTERRUPT_TC_MATCH_RESET 0x02 +#define INTERRUPT_TC_MATCH_STOP 0x04 + +#define INTERRUPT_M0 0 +#define INTERRUPT_M1 1 +#define INTERRUPT_M2 2 +#define INTERRUPT_M3 3 + +#define INTERRUPT_TC_CAPT_R 0x01 +#define INTERRUPT_TC_CAPT_F 0x02 +#define INTERRUPT_TC_CAPT_I 0x04 + +#define INTERRUPT_C0 0 +#define INTERRUPT_C1 1 +#define INTERRUPT_C2 2 +#define INTERRUPT_C3 3 + +#define INTERRUPT_MATCH0 0x01 +#define INTERRUPT_MATCH1 0x02 +#define INTERRUPT_MATCH2 0x04 +#define INTERRUPT_MATCH3 0x08 +#define INTERRUPT_CAP0 0x10 +#define INTERRUPT_CAP1 0x20 +#define INTERRUPT_CAP2 0x40 +#define INTERRUPT_CAP3 0x80 + +#define INTERRUPT_PWM0 0x01 +#define INTERRUPT_PWM1 0x02 +#define INTERRUPT_PWM2 0x04 +#define INTERRUPT_PWM3 0x08 +#define INTERRUPT_PWM4 0x10 +#define INTERRUPT_PWM5 0x20 +#define INTERRUPT_PWM6 0x40 + +#define INTERRUPT_SET 0x00 +#define INTERRUPT_USED 0x01 +#define INTERRUPT_PRIORITY_USED 0x02 +#define INTERRUPT_CALLBACK_CHANGED 0x03 +#define INTERRUPT_SRC_NOT_USED 0x04 /* type definitions */ typedef struct s_interrupt { - void *default_callback; - u8 default_mode; - void *callback[INTERRUPT_MAX_VIC]; - u8 mode[INTERRUPT_MAX_VIC]; + void (*default_soft_callback)(void); + void (*fiq_callback)(void); } t_interrupt; /* function prototypes */ -void interrupt_set_default_callback(t_interrupt *ir,void *callback); +void interrupt_init(void); +void interrupt_set_default_callback(u32 callback_addr); +void interrupt_set_soft_callback(void (*callback)(void)); +void interrupt_set_fiq_callback(void (*callback)(void)); +void interrupt_soft_clear(u8 src_number); +void interrupt_clear(u8 src_number); +void interrupt_soft_enable(u8 src_number); +int interrupt_enable(u8 src_number,u8 mode,u8 prio,u32 callback_addr); +int interrupt_change_callback(u8 src_number,u32 callback_addr); + +void interrupt_ext_ir_config(u8 eint,u8 wakeup,u8 mode,u8 polarity); +void interrupt_ext_ir_set(u8 eint); +void interrupt_ack(void); + +void interrupt_tc_config(u8 tcnum,u8 mode,u8 cap,u32 psc); +void interrupt_tc_match_config(u8 tcnum,u8 mnum,u32 val,u8 mode); +void interrupt_tc_capt_config(u8 tcnum,u8 cnum,u8 mode); +void interrupt_tc_ir_set(u8 tcnum,u8 tcmc); +void interrupt_tc_enable(u8 tcnum); -void interrupt_ext_ir_conf(u8 pin,u8 mode,u8 polar, - void (*ext_ir_callback)(t_interrupt *ir)); +void interrupt_pwm_ir_set(u8 pwm_channel); void interrupt_handler_reset(void); void interrupt_handler_undef_instruction(void);