diff options
| author | Aubr.Cool <[email protected]> | 2017-03-10 15:07:28 +0800 |
|---|---|---|
| committer | Aubr.Cool <[email protected]> | 2017-03-10 15:07:28 +0800 |
| commit | 320b116b5f13fe991a947664949bef5c734b63e1 (patch) | |
| tree | aed7719cc64d9496a579b6f645a34c07b938eb0e /components/drivers/include | |
| parent | 69f5767868655576019988edb39866d99b275916 (diff) | |
[Components] Drivers: pin add irq apis
Diffstat (limited to 'components/drivers/include')
| -rw-r--r-- | components/drivers/include/drivers/pin.h | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/components/drivers/include/drivers/pin.h b/components/drivers/include/drivers/pin.h index 704114cf99..ac35ed3baa 100644 --- a/components/drivers/include/drivers/pin.h +++ b/components/drivers/include/drivers/pin.h @@ -46,6 +46,12 @@ struct rt_device_pin #define PIN_MODE_INPUT 0x01 #define PIN_MODE_INPUT_PULLUP 0x02 +#define PIN_IRQ_MODE_RISING 0x00 +#define PIN_IRQ_MODE_FALLING 0x01 +#define PIN_IRQ_MODE_RISING_FALLING 0x02 + +#define PIN_IRQ_PIN_NONE -1 + struct rt_device_pin_mode { rt_uint16_t pin; @@ -56,7 +62,13 @@ struct rt_device_pin_status rt_uint16_t pin; rt_uint16_t status; }; - +struct rt_pin_irq_hdr +{ + rt_int32_t pin; + rt_uint32_t mode; + void (*hdr)(void *args); + void *args; +}; struct rt_pin_ops { void (*pin_mode)(struct rt_device *device, rt_base_t pin, rt_base_t mode); @@ -64,6 +76,11 @@ struct rt_pin_ops int (*pin_read)(struct rt_device *device, rt_base_t pin); /* TODO: add GPIO interrupt */ + rt_err_t (*pin_attach_irq)(struct rt_device *device, rt_int32_t pin, + rt_uint32_t mode, void (*hdr)(void *args), void *args); + rt_err_t (*pin_dettach_irq)(struct rt_device *device, rt_int32_t pin); + rt_err_t (*pin_irq_enable)(struct rt_device *device, rt_base_t pin); + rt_err_t (*pin_irq_disable)(struct rt_device *device, rt_base_t pin); }; int rt_device_pin_register(const char *name, const struct rt_pin_ops *ops, void *user_data); @@ -71,7 +88,14 @@ int rt_device_pin_register(const char *name, const struct rt_pin_ops *ops, void void rt_pin_mode(rt_base_t pin, rt_base_t mode); void rt_pin_write(rt_base_t pin, rt_base_t value); int rt_pin_read(rt_base_t pin); +rt_err_t rt_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode, + void (*hdr)(void *args), void *args); +rt_err_t rt_pin_dettach_irq(rt_int32_t pin); +rt_err_t pin_irq_enable(rt_base_t pin); +rt_err_t pin_irq_disable(rt_base_t pin); +int rt_device_pin_irq_register(const char *name, const struct rt_pin_ops *ops, + void *user_data); #ifdef __cplusplus } #endif |
