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; } }
/** * @brief Config the GPIO for SBI1 * @param None * @retval None */ void SBI1_IO_Configuration(void) { GPIO_EnableFuncReg(GPIO_PD, GPIO_FUNC_REG_2, GPIO_BIT_0); GPIO_EnableFuncReg(GPIO_PD, GPIO_FUNC_REG_2, GPIO_BIT_1); GPIO_SetOutputEnableReg(GPIO_PD, GPIO_BIT_0, ENABLE); GPIO_SetOutputEnableReg(GPIO_PD, GPIO_BIT_1, ENABLE); GPIO_SetInputEnableReg(GPIO_PD, GPIO_BIT_0, ENABLE); GPIO_SetInputEnableReg(GPIO_PD, GPIO_BIT_1, ENABLE); GPIO_SetOpenDrain(GPIO_PD, GPIO_BIT_0, ENABLE); GPIO_SetOpenDrain(GPIO_PD, GPIO_BIT_1, ENABLE); /* Pull up for SDA&SCL */ GPIO_SetPullUp(GPIO_PD, GPIO_BIT_1, ENABLE); GPIO_SetPullUp(GPIO_PD, GPIO_BIT_0, ENABLE); }
/** * @brief CAN port initialization * @param None. * @retval None. */ void CAN_PortInit(void) { GPIO_SetOutput(GPIO_PE, GPIO_BIT_4); /* Set TX pin as output */ GPIO_SetInput(GPIO_PE, GPIO_BIT_5); /* Set RX pin as input */ GPIO_EnableFuncReg(GPIO_PE, GPIO_FUNC_REG_3, (uint8_t) (GPIO_BIT_4 | GPIO_BIT_5)); /* Enable TX and RX pin functions */ GPIO_SetOpenDrain(GPIO_PE, GPIO_BIT_4, DISABLE); /* Set TX pin as CMOS output */ GPIO_SetPullUp(GPIO_PE, (uint8_t) (GPIO_BIT_4 | GPIO_BIT_5), DISABLE); /* Disable pull-ups for CAN pins */ }
/** * @brief Configure I/O ports for INT * @param None * @retval None */ void GPIO_SetINT(void) { //for INT0 GPIO_SetOutputEnableReg(GPIO_PG, GPIO_BIT_3, DISABLE); GPIO_EnableFuncReg(GPIO_PG, GPIO_FUNC_REG_2, GPIO_BIT_3); GPIO_SetInputEnableReg(GPIO_PG, GPIO_BIT_3, ENABLE); GPIO_SetOpenDrain(GPIO_PG, GPIO_BIT_3, DISABLE); //for SW1 #ifdef M341_SK_BOARD GPIO_SetOutputEnableReg(GPIO_PE, GPIO_BIT_3, DISABLE); GPIO_SetInputEnableReg(GPIO_PE, GPIO_BIT_3, ENABLE); GPIO_SetPullUp(GPIO_PE, GPIO_BIT_3, ENABLE); #else GPIO_SetOutputEnableReg(GPIO_PG, GPIO_BIT_7, DISABLE); GPIO_SetInputEnableReg(GPIO_PG, GPIO_BIT_7, ENABLE); GPIO_SetPullUp(GPIO_PG, GPIO_BIT_7, ENABLE); #endif }