void pin_mode(PinName pin, PinMode mode) { uint32_t port = 0; uint8_t bit = 0; // Assert that pin is valid MBED_ASSERT(pin != NC); // Check if function is in range if (mode > OpenDrain) { return; } // Calculate port and pin position port = PIN_PORT(pin); bit = PIN_POS(pin); // Set pin mode switch (mode) { case PullNone: GPIO_SetPullUp((GPIO_Port)port, (1 << bit), DISABLE); GPIO_SetPullDown((GPIO_Port)port, (1 << bit), DISABLE); GPIO_SetOpenDrain((GPIO_Port)port, (1 << bit), DISABLE); break; case PullUp: GPIO_SetPullUp((GPIO_Port)port, (1 << bit), ENABLE); break; case PullDown: GPIO_SetPullDown((GPIO_Port)port, (1 << bit), ENABLE); break; case OpenDrain: GPIO_SetOpenDrain((GPIO_Port)port, (1 << bit), ENABLE); break; default: break; } }
void pin_function(PinName pin, int function) { uint32_t port = 0; uint8_t bit = 0; uint8_t i = 0; uint8_t func = 0; uint8_t dir = 0; // Assert that pin is valid MBED_ASSERT(pin != NC); // Calculate pin function and pin direction func = PIN_FUNC(function); dir = PIN_DIR(function); // Calculate port and pin position port = PIN_PORT(pin); bit = PIN_POS(pin); // Set function if function is in range if (func <= PIN_FUNC_MAX) { // Disable other functions for (i = 0; i < PIN_FUNC_MAX; i++) { if (i != (func - 1)) { GPIO_DisableFuncReg((GPIO_Port)port, i, (1 << bit)); } } // Set pin function if (func) { GPIO_EnableFuncReg((GPIO_Port)port, (uint8_t)(func - 1), (1 << bit)); } } // Set direction if direction is in range switch (dir) { case PIN_INPUT: GPIO_SetInputEnableReg((GPIO_Port)port, (1 << bit), ENABLE); GPIO_SetOutputEnableReg((GPIO_Port)port, (1 << bit), DISABLE); break; case PIN_OUTPUT: GPIO_SetOutputEnableReg((GPIO_Port)port, (1 << bit), ENABLE); GPIO_SetInputEnableReg((GPIO_Port)port, (1 << bit), DISABLE); break; case PIN_INOUT: GPIO_SetOutputEnableReg((GPIO_Port)port, (1 << bit), ENABLE); GPIO_SetInputEnableReg((GPIO_Port)port, (1 << bit), ENABLE); break; default: break; } }
void pinMode ( uint8_t pin, uint8_t mode ) { GPIO_TypeDef * port = PIN_PORT(pin); uint32_t pin_mask = PIN_MASK_MODE(0xF, pin); uint32_t pin_mode = PIN_MASK_MODE(mode, pin);; if (pin & 0x08) port->CRH = (port->CRH & ~pin_mask) | pin_mode; else port->CRL = (port->CRL & ~pin_mask) | pin_mode; if (mode == MODE_Input_PD) port->BRR = (((uint32_t)0x01) << (pin & 0x0F)); else if (mode == GPIO_Mode_IPU) port->BSRR = (((uint32_t)0x01) << (pin & 0x0F)); }
void *vhalPinGetPort(int vpin) { return PIN_PORT(vpin); }