mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 16:50:55 +08:00
Extend I/O Expander interrupt controls; Add test of level sensitve interrupt to Simulated I/O expander
This commit is contained in:
@@ -61,25 +61,27 @@
|
||||
|
||||
/* Pin definitions **********************************************************/
|
||||
|
||||
#define IOEXPANDER_DIRECTION_IN 0
|
||||
#define IOEXPANDER_DIRECTION_OUT 1
|
||||
#define IOEXPANDER_DIRECTION_IN 0
|
||||
#define IOEXPANDER_DIRECTION_OUT 1
|
||||
|
||||
#define IOEXPANDER_PINMASK (((ioe_pinset_t)1 << CONFIG_IOEXPANDER_NPINS) - 1)
|
||||
#define PINSET_ALL (~((ioe_pinset_t)0))
|
||||
#define IOEXPANDER_PINMASK (((ioe_pinset_t)1 << CONFIG_IOEXPANDER_NPINS) - 1)
|
||||
#define PINSET_ALL (~((ioe_pinset_t)0))
|
||||
|
||||
/* Pin options */
|
||||
|
||||
#define IOEXPANDER_OPTION_INVERT 1 /* Set the "active" level for a pin */
|
||||
# define IOEXPANDER_VAL_NORMAL 0 /* Normal, no inversion */
|
||||
# define IOEXPANDER_VAL_INVERT 1 /* Inverted */
|
||||
#define IOEXPANDER_OPTION_INVERT 1 /* Set the "active" level for a pin */
|
||||
# define IOEXPANDER_VAL_NORMAL 0 /* Normal, no inversion */
|
||||
# define IOEXPANDER_VAL_INVERT 1 /* Inverted */
|
||||
|
||||
#define IOEXPANDER_OPTION_INTCFG 2 /* Configure interrupt for a pin */
|
||||
# define IOEXPANDER_VAL_LEVEL 1 /* xx1 Interrupt on level (vs. edge) */
|
||||
# define IOEXPANDER_VAL_HIGH 1 /* 001 Interrupt on high level */
|
||||
# define IOEXPANDER_VAL_LOW 3 /* 011 Interrupt on low level */
|
||||
# define IOEXPANDER_VAL_RISING 2 /* 010 Interrupt on rising edge */
|
||||
# define IOEXPANDER_VAL_FALLING 4 /* 100 Interrupt on falling edge */
|
||||
# define IOEXPANDER_VAL_BOTH 6 /* 110 Interrupt on both edges */
|
||||
#define IOEXPANDER_OPTION_INTCFG 2 /* Configure interrupt for a pin */
|
||||
# define IOEXPANDER_VAL_DISABLE 0 /* 0000 Disable pin interrupts */
|
||||
# define IOEXPANDER_VAL_LEVEL 1 /* xx01 Interrupt on level (vs. edge) */
|
||||
# define IOEXPANDER_VAL_HIGH 5 /* 0101 Interrupt on high level */
|
||||
# define IOEXPANDER_VAL_LOW 9 /* 1001 Interrupt on low level */
|
||||
# define IOEXPANDER_VAL_EDGE 2 /* xx10 Interrupt on edge (vs. level) */
|
||||
# define IOEXPANDER_VAL_RISING 6 /* 0110 Interrupt on rising edge */
|
||||
# define IOEXPANDER_VAL_FALLING 10 /* 1010 Interrupt on falling edge */
|
||||
# define IOEXPANDER_VAL_BOTH 14 /* 1110 Interrupt on both edges */
|
||||
|
||||
/* Access macros ************************************************************/
|
||||
|
||||
@@ -319,20 +321,23 @@ struct ioexpander_ops_s
|
||||
CODE int (*ioe_direction)(FAR struct ioexpander_dev_s *dev, uint8_t pin,
|
||||
int direction);
|
||||
CODE int (*ioe_option)(FAR struct ioexpander_dev_s *dev, uint8_t pin,
|
||||
int opt, void *val);
|
||||
int opt, FAR void *val);
|
||||
CODE int (*ioe_writepin)(FAR struct ioexpander_dev_s *dev, uint8_t pin,
|
||||
bool value);
|
||||
CODE int (*ioe_readpin)(FAR struct ioexpander_dev_s *dev, uint8_t pin,
|
||||
bool *value);
|
||||
FAR bool *value);
|
||||
CODE int (*ioe_readbuf)(FAR struct ioexpander_dev_s *dev, uint8_t pin,
|
||||
bool *value);
|
||||
FAR bool *value);
|
||||
#ifdef CONFIG_IOEXPANDER_MULTIPIN
|
||||
CODE int (*ioe_multiwritepin)(FAR struct ioexpander_dev_s *dev,
|
||||
uint8_t *pins, bool *values, int count);
|
||||
FAR uint8_t *pins, FAR bool *values,
|
||||
int count);
|
||||
CODE int (*ioe_multireadpin)(FAR struct ioexpander_dev_s *dev,
|
||||
uint8_t *pins, bool *values, int count);
|
||||
FAR uint8_t *pins, FAR bool *values,
|
||||
int count);
|
||||
CODE int (*ioe_multireadbuf)(FAR struct ioexpander_dev_s *dev,
|
||||
uint8_t *pins, bool *values, int count);
|
||||
FAR uint8_t *pins, FAR bool *values,
|
||||
int count);
|
||||
#endif
|
||||
#ifdef CONFIG_IOEXPANDER_INT_ENABLE
|
||||
CODE FAR void *(*ioe_attach)(FAR struct ioexpander_dev_s *dev,
|
||||
|
||||
Reference in New Issue
Block a user