int gpio_init_out(gpio_t dev, gpio_pp_t pullup) { GPIO_TypeDef *port = 0; uint32_t pin = 0; switch (dev) { #ifdef GPIO_0_EN case GPIO_0: GPIO_0_CLKEN(); port = GPIO_0_PORT; pin = GPIO_0_PIN; break; #endif #ifdef GPIO_1_EN case GPIO_1: GPIO_1_CLKEN(); port = GPIO_1_PORT; pin = GPIO_1_PIN; break; #endif #ifdef GPIO_2_EN case GPIO_2: GPIO_2_CLKEN(); port = GPIO_2_PORT; pin = GPIO_2_PIN; break; #endif #ifdef GPIO_3_EN case GPIO_3: GPIO_3_CLKEN(); port = GPIO_3_PORT; pin = GPIO_3_PIN; break; #endif #ifdef GPIO_4_EN case GPIO_4: GPIO_4_CLKEN(); port = GPIO_4_PORT; pin = GPIO_4_PIN; break; #endif #ifdef GPIO_5_EN case GPIO_5: GPIO_5_CLKEN(); port = GPIO_5_PORT; pin = GPIO_5_PIN; break; #endif #ifdef GPIO_6_EN case GPIO_6: GPIO_6_CLKEN(); port = GPIO_6_PORT; pin = GPIO_6_PIN; break; #endif #ifdef GPIO_7_EN case GPIO_7: GPIO_7_CLKEN(); port = GPIO_7_PORT; pin = GPIO_7_PIN; break; #endif #ifdef GPIO_8_EN case GPIO_8: GPIO_8_CLKEN(); port = GPIO_8_PORT; pin = GPIO_8_PIN; break; #endif #ifdef GPIO_9_EN case GPIO_9: GPIO_9_CLKEN(); port = GPIO_9_PORT; pin = GPIO_9_PIN; break; #endif #ifdef GPIO_10_EN case GPIO_10: GPIO_10_CLKEN(); port = GPIO_10_PORT; pin = GPIO_10_PIN; break; #endif #ifdef GPIO_11_EN case GPIO_11: GPIO_11_CLKEN(); port = GPIO_11_PORT; pin = GPIO_11_PIN; break; #endif } port->MODER &= ~(2 << (2 * pin)); /* set pin to output mode */ port->MODER |= (1 << (2 * pin)); port->OTYPER &= ~(1 << pin); /* set to push-pull configuration */ port->OSPEEDR |= (3 << (2 * pin)); /* set to high speed */ port->PUPDR &= ~(3 << (2 * pin)); /* configure push-pull resistors */ port->PUPDR |= (pullup << (2 * pin)); port->ODR &= ~(1 << pin); /* set pin to low signal */ return 0; /* all OK */ }
int gpio_init_out(gpio_t dev, gpio_pp_t pullup) { GPIO_TypeDef *port; uint32_t pin; switch (dev) { #if GPIO_0_EN case GPIO_0: GPIO_0_CLKEN(); port = GPIO_0_PORT; pin = GPIO_0_PIN; break; #endif #if GPIO_1_EN case GPIO_1: GPIO_1_CLKEN(); port = GPIO_1_PORT; pin = GPIO_1_PIN; break; #endif #if GPIO_2_EN case GPIO_2: GPIO_2_CLKEN(); port = GPIO_2_PORT; pin = GPIO_2_PIN; break; #endif #if GPIO_3_EN case GPIO_3: GPIO_3_CLKEN(); port = GPIO_3_PORT; pin = GPIO_3_PIN; break; #endif #if GPIO_4_EN case GPIO_4: GPIO_4_CLKEN(); port = GPIO_4_PORT; pin = GPIO_4_PIN; break; #endif #if GPIO_5_EN case GPIO_5: GPIO_5_CLKEN(); port = GPIO_5_PORT; pin = GPIO_5_PIN; break; #endif #if GPIO_6_EN case GPIO_6: GPIO_6_CLKEN(); port = GPIO_6_PORT; pin = GPIO_6_PIN; break; #endif #if GPIO_7_EN case GPIO_7: GPIO_7_CLKEN(); port = GPIO_7_PORT; pin = GPIO_7_PIN; break; #endif #if GPIO_8_EN case GPIO_8: GPIO_8_CLKEN(); port = GPIO_8_PORT; pin = GPIO_8_PIN; break; #endif #if GPIO_9_EN case GPIO_9: GPIO_9_CLKEN(); port = GPIO_9_PORT; pin = GPIO_9_PIN; break; #endif #if GPIO_10_EN case GPIO_10: GPIO_10_CLKEN(); port = GPIO_10_PORT; pin = GPIO_10_PIN; break; #endif #if GPIO_11_EN case GPIO_11: GPIO_11_CLKEN(); port = GPIO_11_PORT; pin = GPIO_11_PIN; break; #endif #if GPIO_12_EN case GPIO_12: GPIO_12_CLKEN(); port = GPIO_12_PORT; pin = GPIO_12_PIN; break; #endif #if GPIO_13_EN case GPIO_13: GPIO_13_CLKEN(); port = GPIO_13_PORT; pin = GPIO_13_PIN; break; #endif #if GPIO_14_EN case GPIO_14: GPIO_14_CLKEN(); port = GPIO_14_PORT; pin = GPIO_14_PIN; break; #endif #if GPIO_15_EN case GPIO_15: GPIO_15_CLKEN(); port = GPIO_15_PORT; pin = GPIO_15_PIN; break; #endif default: return -1; } if (pin < 8) { port->CRL &= ~(0xf << (4 * pin)); port->CRL |= (0x3 << (4* pin)); /* Output mode, 50 MHz */ /* general purpose push-pull set implicitly */ } else { port->CRH &= ~(0xf << (4 * (pin-8))); port->CRH |= (0x3 << (4* (pin-8))); /* Output mode, 50 MHz */ /* general purpose push-pull set implicitly */ } return 0; /* all OK */ }
int gpio_init_in(gpio_t dev, gpio_pp_t pullup) { GPIO_TypeDef *port = 0; uint32_t pin = 0; switch (dev) { #ifdef GPIO_0_EN case GPIO_0: GPIO_0_CLKEN(); port = GPIO_0_PORT; pin = GPIO_0_PIN; break; #endif #ifdef GPIO_1_EN case GPIO_1: GPIO_1_CLKEN(); port = GPIO_1_PORT; pin = GPIO_1_PIN; break; #endif #ifdef GPIO_2_EN case GPIO_2: GPIO_2_CLKEN(); port = GPIO_2_PORT; pin = GPIO_2_PIN; break; #endif #ifdef GPIO_3_EN case GPIO_3: GPIO_3_CLKEN(); port = GPIO_3_PORT; pin = GPIO_3_PIN; break; #endif #ifdef GPIO_4_EN case GPIO_4: GPIO_4_CLKEN(); port = GPIO_4_PORT; pin = GPIO_4_PIN; break; #endif #ifdef GPIO_5_EN case GPIO_5: GPIO_5_CLKEN(); port = GPIO_5_PORT; pin = GPIO_5_PIN; break; #endif #ifdef GPIO_6_EN case GPIO_6: GPIO_6_CLKEN(); port = GPIO_6_PORT; pin = GPIO_6_PIN; break; #endif #ifdef GPIO_7_EN case GPIO_7: GPIO_7_CLKEN(); port = GPIO_7_PORT; pin = GPIO_7_PIN; break; #endif #ifdef GPIO_8_EN case GPIO_8: GPIO_8_CLKEN(); port = GPIO_8_PORT; pin = GPIO_8_PIN; break; #endif #ifdef GPIO_9_EN case GPIO_9: GPIO_9_CLKEN(); port = GPIO_9_PORT; pin = GPIO_9_PIN; break; #endif #ifdef GPIO_10_EN case GPIO_10: GPIO_10_CLKEN(); port = GPIO_10_PORT; pin = GPIO_10_PIN; break; #endif #ifdef GPIO_11_EN case GPIO_11: GPIO_11_CLKEN(); port = GPIO_11_PORT; pin = GPIO_11_PIN; break; #endif } port->MODER &= ~(3 << (2 * pin)); /* configure pin as input */ port->PUPDR &= ~(3 << (2 * pin)); /* configure push-pull resistors */ port->PUPDR |= (pullup << (2 * pin)); return 0; /* everything alright here */ }
int gpio_init_in(gpio_t dev, gpio_pp_t pullup) { GPIO_TypeDef *port; uint32_t pin; switch (dev) { #if GPIO_0_EN case GPIO_0: GPIO_0_CLKEN(); port = GPIO_0_PORT; pin = GPIO_0_PIN; break; #endif #if GPIO_1_EN case GPIO_1: GPIO_1_CLKEN(); port = GPIO_1_PORT; pin = GPIO_1_PIN; break; #endif #if GPIO_2_EN case GPIO_2: GPIO_2_CLKEN(); port = GPIO_2_PORT; pin = GPIO_2_PIN; break; #endif #if GPIO_3_EN case GPIO_3: GPIO_3_CLKEN(); port = GPIO_3_PORT; pin = GPIO_3_PIN; break; #endif #if GPIO_4_EN case GPIO_4: GPIO_4_CLKEN(); port = GPIO_4_PORT; pin = GPIO_4_PIN; break; #endif #if GPIO_5_EN case GPIO_5: GPIO_5_CLKEN(); port = GPIO_5_PORT; pin = GPIO_5_PIN; break; #endif #if GPIO_6_EN case GPIO_6: GPIO_6_CLKEN(); port = GPIO_6_PORT; pin = GPIO_6_PIN; break; #endif #if GPIO_7_EN case GPIO_7: GPIO_7_CLKEN(); port = GPIO_7_PORT; pin = GPIO_7_PIN; break; #endif #if GPIO_8_EN case GPIO_8: GPIO_8_CLKEN(); port = GPIO_8_PORT; pin = GPIO_8_PIN; break; #endif #if GPIO_9_EN case GPIO_9: GPIO_9_CLKEN(); port = GPIO_9_PORT; pin = GPIO_9_PIN; break; #endif #if GPIO_10_EN case GPIO_10: GPIO_10_CLKEN(); port = GPIO_10_PORT; pin = GPIO_10_PIN; break; #endif #if GPIO_11_EN case GPIO_11: GPIO_11_CLKEN(); port = GPIO_11_PORT; pin = GPIO_11_PIN; break; #endif #if GPIO_12_EN case GPIO_12: GPIO_12_CLKEN(); port = GPIO_12_PORT; pin = GPIO_12_PIN; break; #endif #if GPIO_13_EN case GPIO_13: GPIO_13_CLKEN(); port = GPIO_13_PORT; pin = GPIO_13_PIN; break; #endif #if GPIO_14_EN case GPIO_14: GPIO_14_CLKEN(); port = GPIO_14_PORT; pin = GPIO_14_PIN; break; #endif #if GPIO_15_EN case GPIO_15: GPIO_15_CLKEN(); port = GPIO_15_PORT; pin = GPIO_15_PIN; break; #endif default: return -1; } if (pin < 8) { port->CRL &= ~(0xf << (4 * pin)); port->CRL |= (0x4 << (4 * pin)); } else { port->CRL &= ~(0xf << (4 * pin)); port->CRH |= (0x4 << (4 * (pin-8))); } return 0; /* everything alright here */ }