bool_t digitalRead( int8_t pin ){ bool_t ret_val = OFF; int8_t pinNamePort = 0; int8_t pinNamePin = 0; int8_t func = 0; int8_t gpioPort = 0; int8_t gpioPin = 0; digitalObtainPinConfig( pin, INPUT, &pinNamePort, &pinNamePin, &func, &gpioPort, &gpioPin ); ret_val = (bool_t) Chip_GPIO_ReadPortBit( LPC_GPIO_PORT, gpioPort, gpioPin ); return ret_val; }
bool_t digitalWrite( int8_t pin, bool_t value ){ bool_t ret_val = 1; int8_t pinNamePort = 0; int8_t pinNamePin = 0; int8_t func = 0; int8_t gpioPort = 0; int8_t gpioPin = 0; digitalObtainPinConfig( pin, OUTPUT, &pinNamePort, &pinNamePin, &func, &gpioPort, &gpioPin ); Chip_GPIO_SetPinState( LPC_GPIO_PORT, gpioPort, gpioPin, value); return ret_val; }
bool_t digitalConfig( int8_t pin, int8_t config ){ bool_t ret_val = 1; int8_t pinNamePort = 0; int8_t pinNamePin = 0; int8_t func = 0; int8_t gpioPort = 0; int8_t gpioPin = 0; digitalObtainPinConfig( pin, config, &pinNamePort, &pinNamePin, &func, &gpioPort, &gpioPin ); switch(config){ case ENABLE_DIGITAL_IO: /* Initializes GPIO */ Chip_GPIO_Init(LPC_GPIO_PORT); break; case INPUT: Chip_SCU_PinMux( pinNamePort, pinNamePin, SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS, func ); Chip_GPIO_SetDir( LPC_GPIO_PORT, gpioPort, ( 1 << gpioPin ), INPUT ); break; case INPUT_PULLUP: Chip_SCU_PinMux( pinNamePort, pinNamePin, SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS, func ); Chip_GPIO_SetDir( LPC_GPIO_PORT, gpioPort, ( 1 << gpioPin ), INPUT ); break; case INPUT_PULLDOWN: Chip_SCU_PinMux( pinNamePort, pinNamePin, SCU_MODE_PULLDOWN | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS, func ); Chip_GPIO_SetDir( LPC_GPIO_PORT, gpioPort, ( 1 << gpioPin ), INPUT ); break; case INPUT_REPEATER: Chip_SCU_PinMux( pinNamePort, pinNamePin, SCU_MODE_REPEATER | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS, func ); Chip_GPIO_SetDir( LPC_GPIO_PORT, gpioPort, ( 1 << gpioPin ), INPUT ); break; case OUTPUT: Chip_SCU_PinMux( pinNamePort, pinNamePin, SCU_MODE_INACT | SCU_MODE_ZIF_DIS, func ); Chip_GPIO_SetDir( LPC_GPIO_PORT, gpioPort, ( 1 << gpioPin ), OUTPUT ); Chip_GPIO_SetPinState( LPC_GPIO_PORT, gpioPort, gpioPin, 0); break; default: ret_val = 0; break; } return ret_val; }
bool_t digitalConfig( int8_t pin, int8_t mode ){ bool_t ret_val = 1; int8_t pinNamePort = 0; int8_t pinNamePin = 0; int8_t func = 0; int8_t gpioPort = 0; int8_t gpioPin = 0; digitalObtainPinConfig( pin, mode, &pinNamePort, &pinNamePin, &func, &gpioPort, &gpioPin ); switch(mode){ case INPUT: Chip_SCU_PinMux( pinNamePort, pinNamePin, SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS, func ); Chip_GPIO_SetDir( LPC_GPIO_PORT, gpioPort, ( 1 << gpioPin ), INPUT ); break; case INPUT_PULLUP: Chip_SCU_PinMux( pinNamePort, pinNamePin, SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS, func ); Chip_GPIO_SetDir( LPC_GPIO_PORT, gpioPort, ( 1 << gpioPin ), INPUT ); break; case INPUT_PULLDOWN: Chip_SCU_PinMux( pinNamePort, pinNamePin, SCU_MODE_PULLDOWN | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS, func ); Chip_GPIO_SetDir( LPC_GPIO_PORT, gpioPort, ( 1 << gpioPin ), INPUT ); break; case INPUT_REPEATER: Chip_SCU_PinMux( pinNamePort, pinNamePin, SCU_MODE_REPEATER | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS, func ); Chip_GPIO_SetDir( LPC_GPIO_PORT, gpioPort, ( 1 << gpioPin ), INPUT ); break; case OUTPUT: Chip_SCU_PinMux( pinNamePort, pinNamePin, SCU_MODE_INACT | SCU_MODE_ZIF_DIS, func ); Chip_GPIO_SetDir( LPC_GPIO_PORT, gpioPort, ( 1 << gpioPin ), OUTPUT ); break; default: ret_val = 0; break; } return ret_val; }