/** * Set's up a pin for interrupt. uses arduino MODEs: CHANGE, FALLING, RISING. * * Note that the interrupt condition finishes when you read the information about the port / value * that caused the interrupt or you read the port itself. Check the datasheet can be confusing. * */ void MCP23017::setupInterruptPin(uint8_t pin, uint8_t mode) { // set the pin interrupt control (0 means change, 1 means compare against given value); updateRegisterBit(pin,(mode!=CHANGE),MCP23017_INTCONA,MCP23017_INTCONB); // if the mode is not CHANGE, we need to set up a default value, different value triggers interrupt // In a RISING interrupt the default value is 0, interrupt is triggered when the pin goes to 1. // In a FALLING interrupt the default value is 1, interrupt is triggered when pin goes to 0. updateRegisterBit(pin,(mode==FALLING),MCP23017_DEFVALA,MCP23017_DEFVALB); // enable the pin for interrupt updateRegisterBit(pin,HIGH,MCP23017_GPINTENA,MCP23017_GPINTENB); }
void MCP23017::pullUp(uint8_t p, uint8_t d) { updateRegisterBit(p,d,MCP23017_GPPUA,MCP23017_GPPUB); }
void RFduinoProXShield::pullUp(uint8_t p, uint8_t d) { updateRegisterBit(p,d,MCP23017_GPPUA,MCP23017_GPPUB); }
/** * Sets the pin mode to either INPUT or OUTPUT */ void MCP23017::pinMode(uint8_t p, uint8_t d) { updateRegisterBit(p,(d==INPUT),MCP23017_IODIRA,MCP23017_IODIRB); }
/** * Sets the pin mode to either INPUT or OUTPUT */ void RFduinoProXShield::pinMode(uint8_t p, uint8_t d) { updateRegisterBit(p,(d==INPUT),MCP23017_IODIRA,MCP23017_IODIRB); }