1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef _STM32F4XX_GPIO_H_ 18 #define _STM32F4XX_GPIO_H_ 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 #include <stdint.h> 25 26 #define GPIO_HANDLE_OFFSET 1 /* to make sure that 0 stays an invalid number */ 27 28 29 #define GPIO_PORTA 0 30 #define GPIO_PORTB 1 31 #define GPIO_PORTC 2 32 #define GPIO_PORTD 3 33 #define GPIO_PORTE 4 34 #define GPIO_PORTF 5 35 #define GPIO_PORTG 6 36 #define GPIO_PORTH 7 37 #define GPIO_PORTI 8 38 39 #define GPIO_PORT_SHIFT 4 40 41 /* 42 * This is a shorthand to specify a GPIO by port and number. 43 * Use GPIO_PA(5) for the Nucleo green LED LD2. 44 */ 45 #define GPIO_PA(x) ((GPIO_PORTA << GPIO_PORT_SHIFT) + (x)) 46 #define GPIO_PB(x) ((GPIO_PORTB << GPIO_PORT_SHIFT) + (x)) 47 #define GPIO_PC(x) ((GPIO_PORTC << GPIO_PORT_SHIFT) + (x)) 48 #define GPIO_PD(x) ((GPIO_PORTD << GPIO_PORT_SHIFT) + (x)) 49 #define GPIO_PE(x) ((GPIO_PORTE << GPIO_PORT_SHIFT) + (x)) 50 #define GPIO_PF(x) ((GPIO_PORTF << GPIO_PORT_SHIFT) + (x)) 51 #define GPIO_PG(x) ((GPIO_PORTG << GPIO_PORT_SHIFT) + (x)) 52 #define GPIO_PH(x) ((GPIO_PORTH << GPIO_PORT_SHIFT) + (x)) 53 #define GPIO_PI(x) ((GPIO_PORTI << GPIO_PORT_SHIFT) + (x)) 54 55 #define GPIO_PIN_MASK 0xf 56 57 enum StmGpioAltFunc 58 { 59 GPIO_AF00 = 0, 60 GPIO_AF01, 61 GPIO_AF02, 62 GPIO_AF03, 63 GPIO_AF04, 64 GPIO_AF05, 65 GPIO_AF06, 66 GPIO_AF07, 67 GPIO_AF08, 68 GPIO_AF09, 69 GPIO_AF10, 70 GPIO_AF11, 71 GPIO_AF12, 72 GPIO_AF13, 73 GPIO_AF14, 74 GPIO_AF15, 75 GPIO_AF_SYS = GPIO_AF00, 76 GPIO_AF_TIM1 = GPIO_AF01, 77 GPIO_AF_TIM2 = GPIO_AF01, 78 GPIO_AF_TIM3 = GPIO_AF02, 79 GPIO_AF_TIM4 = GPIO_AF02, 80 GPIO_AF_TIM5 = GPIO_AF02, 81 GPIO_AF_TIM9 = GPIO_AF03, 82 GPIO_AF_TIM10 = GPIO_AF03, 83 GPIO_AF_TIM11 = GPIO_AF03, 84 GPIO_AF_I2C1 = GPIO_AF04, 85 GPIO_AF_I2C2_A = GPIO_AF04, 86 GPIO_AF_I2C3_A = GPIO_AF04, 87 GPIO_AF_SPI1 = GPIO_AF05, 88 GPIO_AF_I2S1 = GPIO_AF05, 89 GPIO_AF_SPI2_A = GPIO_AF05, 90 GPIO_AF_I2S2_A = GPIO_AF05, 91 GPIO_AF_SPI3_A = GPIO_AF05, 92 GPIO_AF_I2S3_A = GPIO_AF05, 93 GPIO_AF_SPI2_B = GPIO_AF06, 94 GPIO_AF_I2S2_B = GPIO_AF06, 95 GPIO_AF_SPI3_B = GPIO_AF06, 96 GPIO_AF_I2S3_B = GPIO_AF06, 97 GPIO_AF_SPI4_B = GPIO_AF06, 98 GPIO_AF_I2S4_B = GPIO_AF06, 99 GPIO_AF_SPI5_B = GPIO_AF06, 100 GPIO_AF_I2S5_B = GPIO_AF06, 101 GPIO_AF_SPI3_C = GPIO_AF07, 102 GPIO_AF_I2S3_C = GPIO_AF07, 103 GPIO_AF_USART1 = GPIO_AF07, 104 GPIO_AF_USART2 = GPIO_AF07, 105 GPIO_AF_USART6 = GPIO_AF08, 106 GPIO_AF_I2C2_B = GPIO_AF09, 107 GPIO_AF_I2C3_B = GPIO_AF09, 108 GPIO_AF_OTG1 = GPIO_AF10, 109 GPIO_AF_SDIO = GPIO_AF12, 110 GPIO_AF_EVENT = GPIO_AF15, 111 }; 112 113 enum StmGpioSpeed /* CL (pF) 50, 50, 10, 10 */ 114 { /* VDD (V) >= 2.7, 1.7, 2.7, 1.7 */ 115 GPIO_SPEED_LOW = 0, /* Max (MHz) 4, 2, 8, 4 */ 116 GPIO_SPEED_MEDIUM, /* 25, 12.5, 50, 20 */ 117 GPIO_SPEED_FAST, /* 50, 25, 100, 50 */ 118 GPIO_SPEED_HIGH, /* 100, 50, 180, 100 */ 119 }; 120 121 void gpioBitbangedUartOut(uint32_t chr); 122 123 #ifdef __cplusplus 124 } 125 #endif 126 127 #endif 128