Home | History | Annotate | Download | only in plat
      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