X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Fat91%2Fsysirq.h;fp=drv%2Fat91%2Fsysirq.h;h=f58c253a6501db251817c1be51ddb3640e1a325c;hb=338e860b340dd66f9f6ec92e692a7aa116b0d6a8;hp=0000000000000000000000000000000000000000;hpb=0b8a2bfb0f6c98c436f9ca5070e4ccfad4277059;p=bertos.git diff --git a/drv/at91/sysirq.h b/drv/at91/sysirq.h new file mode 100755 index 00000000..f58c253a --- /dev/null +++ b/drv/at91/sysirq.h @@ -0,0 +1,49 @@ +/** + * \file + * + * + * \version $Id$ + * + * \author Francesco Sacchi + * + * \brief System irq handler for Atmel AT91 ARM7 processors (interface). + */ + +#ifndef DRV_AT91_SYSIRQ_H +#define DRV_AT91_SYSIRQ_H + +typedef void (* sysirq_handler_t)(void); ///< Type for system irq handler. +typedef void (* sysirq_setEnable_t)(bool); ///< Type for system irq enable/disable function. +typedef bool (* sysirq_enable_t)(void); ///< Type for system irq enable getter. +typedef bool (* sysirq_trigger_t)(void); ///< Type for system irq trigger getter. + +/** + * Structure used to define a system interrupt source. + */ +typedef struct SysIrq +{ + sysirq_enable_t enable; ///< Getter for irq enable/disable state. + sysirq_trigger_t trigger; ///< Getter for irq trigger state. + sysirq_setEnable_t setEnable; ///< Setter for irq enable/disable state. + sysirq_handler_t handler; ///< IRQ handler. +} SysIrq; + +/** + * System IRQ ID list. + */ +typedef enum sysirq_t +{ + SYSIRQ_PIT, ///< Periodic Interval Timer + /* TODO: add all system irqs */ + SYSIRQ_CNT +} sysirq_t; + +void sysirq_init(void); +void sysirq_setHandler(sysirq_t irq, sysirq_handler_t handler); +void sysirq_setEnable(sysirq_t irq, bool enable); +bool sysirq_enable(sysirq_t irq); + +#endif /* ARCH_ARM_SYSIRQ_H */