STM32F469NI Discovery board drivers

Dependents:   DISCO-F469NI_LCDTS_GUI_demo Configurable_Robots DISCO-F469NI_LCD_demo DISCO-F469NI_SD_demo ... more

Committer:
Jerome Coutant
Date:
Wed Feb 28 13:17:15 2018 +0100
Revision:
3:3cdfcc4f7c9d
Parent:
2:123b894b49dd
Child:
4:27609b3a44ed
STM32Cube_FW_F4_V1.19.0 BSP_DISCO_F469NI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jerome Coutant 2:123b894b49dd 1 /**
Jerome Coutant 2:123b894b49dd 2 ******************************************************************************
Jerome Coutant 2:123b894b49dd 3 * @file stm32469i_discovery.c
Jerome Coutant 2:123b894b49dd 4 * @author MCD Application Team
Jerome Coutant 2:123b894b49dd 5 * @brief This file provides a set of firmware functions to manage LEDs,
Jerome Coutant 2:123b894b49dd 6 * push-buttons, external SDRAM, external QSPI Flash, RF EEPROM,
Jerome Coutant 2:123b894b49dd 7 * available on STM32469I-Discovery
Jerome Coutant 2:123b894b49dd 8 * board (MB1189) RevA/B from STMicroelectronics.
Jerome Coutant 2:123b894b49dd 9 ******************************************************************************
Jerome Coutant 2:123b894b49dd 10 * @attention
Jerome Coutant 2:123b894b49dd 11 *
Jerome Coutant 2:123b894b49dd 12 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
Jerome Coutant 2:123b894b49dd 13 *
Jerome Coutant 2:123b894b49dd 14 * Redistribution and use in source and binary forms, with or without modification,
Jerome Coutant 2:123b894b49dd 15 * are permitted provided that the following conditions are met:
Jerome Coutant 2:123b894b49dd 16 * 1. Redistributions of source code must retain the above copyright notice,
Jerome Coutant 2:123b894b49dd 17 * this list of conditions and the following disclaimer.
Jerome Coutant 2:123b894b49dd 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
Jerome Coutant 2:123b894b49dd 19 * this list of conditions and the following disclaimer in the documentation
Jerome Coutant 2:123b894b49dd 20 * and/or other materials provided with the distribution.
Jerome Coutant 2:123b894b49dd 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Jerome Coutant 2:123b894b49dd 22 * may be used to endorse or promote products derived from this software
Jerome Coutant 2:123b894b49dd 23 * without specific prior written permission.
Jerome Coutant 2:123b894b49dd 24 *
Jerome Coutant 2:123b894b49dd 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Jerome Coutant 2:123b894b49dd 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Jerome Coutant 2:123b894b49dd 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Jerome Coutant 2:123b894b49dd 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Jerome Coutant 2:123b894b49dd 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Jerome Coutant 2:123b894b49dd 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Jerome Coutant 2:123b894b49dd 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Jerome Coutant 2:123b894b49dd 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Jerome Coutant 2:123b894b49dd 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Jerome Coutant 2:123b894b49dd 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Jerome Coutant 2:123b894b49dd 35 *
Jerome Coutant 2:123b894b49dd 36 ******************************************************************************
Jerome Coutant 2:123b894b49dd 37 */
Jerome Coutant 2:123b894b49dd 38
Jerome Coutant 2:123b894b49dd 39 /* Includes ------------------------------------------------------------------*/
Jerome Coutant 2:123b894b49dd 40 #include "stm32469i_discovery.h"
Jerome Coutant 2:123b894b49dd 41
Jerome Coutant 2:123b894b49dd 42 /** @defgroup BSP BSP
Jerome Coutant 2:123b894b49dd 43 * @{
Jerome Coutant 2:123b894b49dd 44 */
Jerome Coutant 2:123b894b49dd 45
Jerome Coutant 2:123b894b49dd 46 /** @defgroup STM32469I_Discovery STM32469I Discovery
Jerome Coutant 2:123b894b49dd 47 * @{
Jerome Coutant 2:123b894b49dd 48 */
Jerome Coutant 2:123b894b49dd 49
Jerome Coutant 2:123b894b49dd 50 /** @defgroup STM32469I_Discovery_LOW_LEVEL STM32469I Discovery LOW LEVEL
Jerome Coutant 2:123b894b49dd 51 * @{
Jerome Coutant 2:123b894b49dd 52 */
Jerome Coutant 2:123b894b49dd 53
Jerome Coutant 2:123b894b49dd 54 /** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_TypesDefinitions STM32469I Discovery LOW LEVEL Private TypesDefinitions
Jerome Coutant 2:123b894b49dd 55 * @{
Jerome Coutant 2:123b894b49dd 56 */
Jerome Coutant 2:123b894b49dd 57 /**
Jerome Coutant 2:123b894b49dd 58 * @}
Jerome Coutant 2:123b894b49dd 59 */
Jerome Coutant 2:123b894b49dd 60
Jerome Coutant 2:123b894b49dd 61 /** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_Defines STM32469I Discovery LOW LEVEL Private Defines
Jerome Coutant 2:123b894b49dd 62 * @{
Jerome Coutant 2:123b894b49dd 63 */
Jerome Coutant 2:123b894b49dd 64 /**
Jerome Coutant 3:3cdfcc4f7c9d 65 * @brief STM32469I Discovery BSP Driver version number V2.0.1
Jerome Coutant 2:123b894b49dd 66 */
Jerome Coutant 2:123b894b49dd 67 #define __STM32469I_DISCOVERY_BSP_VERSION_MAIN (0x02) /*!< [31:24] main version */
Jerome Coutant 2:123b894b49dd 68 #define __STM32469I_DISCOVERY_BSP_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */
Jerome Coutant 3:3cdfcc4f7c9d 69 #define __STM32469I_DISCOVERY_BSP_VERSION_SUB2 (0x01) /*!< [15:8] sub2 version */
Jerome Coutant 2:123b894b49dd 70 #define __STM32469I_DISCOVERY_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */
Jerome Coutant 2:123b894b49dd 71 #define __STM32469I_DISCOVERY_BSP_VERSION ((__STM32469I_DISCOVERY_BSP_VERSION_MAIN << 24)\
Jerome Coutant 2:123b894b49dd 72 |(__STM32469I_DISCOVERY_BSP_VERSION_SUB1 << 16)\
Jerome Coutant 2:123b894b49dd 73 |(__STM32469I_DISCOVERY_BSP_VERSION_SUB2 << 8 )\
Jerome Coutant 2:123b894b49dd 74 |(__STM32469I_DISCOVERY_BSP_VERSION_RC))
Jerome Coutant 2:123b894b49dd 75 /**
Jerome Coutant 2:123b894b49dd 76 * @}
Jerome Coutant 2:123b894b49dd 77 */
Jerome Coutant 2:123b894b49dd 78
Jerome Coutant 2:123b894b49dd 79 /** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_Macros STM32469I Discovery LOW LEVEL Private Macros
Jerome Coutant 2:123b894b49dd 80 * @{
Jerome Coutant 2:123b894b49dd 81 */
Jerome Coutant 2:123b894b49dd 82 /**
Jerome Coutant 2:123b894b49dd 83 * @}
Jerome Coutant 2:123b894b49dd 84 */
Jerome Coutant 2:123b894b49dd 85
Jerome Coutant 2:123b894b49dd 86 /** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_Variables STM32469I Discovery LOW LEVEL Private Variables
Jerome Coutant 2:123b894b49dd 87 * @{
Jerome Coutant 2:123b894b49dd 88 */
Jerome Coutant 2:123b894b49dd 89 uint32_t GPIO_PIN[LEDn] = {LED1_PIN,
Jerome Coutant 2:123b894b49dd 90 LED2_PIN,
Jerome Coutant 2:123b894b49dd 91 LED3_PIN,
Jerome Coutant 2:123b894b49dd 92 LED4_PIN};
Jerome Coutant 2:123b894b49dd 93
Jerome Coutant 2:123b894b49dd 94 GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT,
Jerome Coutant 2:123b894b49dd 95 LED2_GPIO_PORT,
Jerome Coutant 2:123b894b49dd 96 LED3_GPIO_PORT,
Jerome Coutant 2:123b894b49dd 97 LED4_GPIO_PORT};
Jerome Coutant 2:123b894b49dd 98
Jerome Coutant 2:123b894b49dd 99 GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT };
Jerome Coutant 2:123b894b49dd 100
Jerome Coutant 2:123b894b49dd 101 const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN };
Jerome Coutant 2:123b894b49dd 102
Jerome Coutant 2:123b894b49dd 103 const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn };
Jerome Coutant 2:123b894b49dd 104
Jerome Coutant 2:123b894b49dd 105
Jerome Coutant 2:123b894b49dd 106 static I2C_HandleTypeDef heval_I2c1;
Jerome Coutant 2:123b894b49dd 107 static I2C_HandleTypeDef heval_I2c2;
Jerome Coutant 2:123b894b49dd 108
Jerome Coutant 2:123b894b49dd 109 /**
Jerome Coutant 2:123b894b49dd 110 * @}
Jerome Coutant 2:123b894b49dd 111 */
Jerome Coutant 2:123b894b49dd 112
Jerome Coutant 2:123b894b49dd 113 /** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_FunctionPrototypes STM32469I Discovery LOW LEVEL Private FunctionPrototypes
Jerome Coutant 2:123b894b49dd 114 * @{
Jerome Coutant 2:123b894b49dd 115 */
Jerome Coutant 2:123b894b49dd 116 static void I2C1_MspInit(void);
Jerome Coutant 2:123b894b49dd 117 static void I2C2_MspInit(void);
Jerome Coutant 2:123b894b49dd 118 static void I2C1_Init(void);
Jerome Coutant 2:123b894b49dd 119 static void I2C2_Init(void);
Jerome Coutant 2:123b894b49dd 120
Jerome Coutant 2:123b894b49dd 121 #if defined(USE_IOEXPANDER)
Jerome Coutant 2:123b894b49dd 122 static void I2C1_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
Jerome Coutant 2:123b894b49dd 123 static uint8_t I2C1_Read(uint8_t Addr, uint8_t Reg);
Jerome Coutant 2:123b894b49dd 124 #endif /* USE_IOEXPANDER */
Jerome Coutant 2:123b894b49dd 125 static HAL_StatusTypeDef I2C1_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length);
Jerome Coutant 2:123b894b49dd 126 static HAL_StatusTypeDef I2C2_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length);
Jerome Coutant 2:123b894b49dd 127 static HAL_StatusTypeDef I2C1_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length);
Jerome Coutant 2:123b894b49dd 128 static HAL_StatusTypeDef I2C2_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length);
Jerome Coutant 2:123b894b49dd 129 static HAL_StatusTypeDef I2C1_IsDeviceReady(uint16_t DevAddress, uint32_t Trials);
Jerome Coutant 2:123b894b49dd 130 static void I2C1_Error(uint8_t Addr);
Jerome Coutant 2:123b894b49dd 131 static void I2C2_Error(uint8_t Addr);
Jerome Coutant 2:123b894b49dd 132
Jerome Coutant 2:123b894b49dd 133 /* AUDIO IO functions */
Jerome Coutant 2:123b894b49dd 134 void AUDIO_IO_Init(void);
Jerome Coutant 2:123b894b49dd 135 void AUDIO_IO_DeInit(void);
Jerome Coutant 2:123b894b49dd 136 void AUDIO_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
Jerome Coutant 2:123b894b49dd 137 uint8_t AUDIO_IO_Read(uint8_t Addr, uint8_t Reg);
Jerome Coutant 2:123b894b49dd 138 void AUDIO_IO_Delay(uint32_t Delay);
Jerome Coutant 2:123b894b49dd 139
Jerome Coutant 2:123b894b49dd 140
Jerome Coutant 2:123b894b49dd 141 /* I2C EEPROM IO function */
Jerome Coutant 2:123b894b49dd 142 void EEPROM_IO_Init(void);
Jerome Coutant 2:123b894b49dd 143 HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
Jerome Coutant 2:123b894b49dd 144 HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
Jerome Coutant 2:123b894b49dd 145 HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials);
Jerome Coutant 2:123b894b49dd 146
Jerome Coutant 2:123b894b49dd 147 /* TouchScreen (TS) IO functions */
Jerome Coutant 2:123b894b49dd 148 void TS_IO_Init(void);
Jerome Coutant 2:123b894b49dd 149 void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
Jerome Coutant 2:123b894b49dd 150 uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg);
Jerome Coutant 2:123b894b49dd 151 uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length);
Jerome Coutant 2:123b894b49dd 152 void TS_IO_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length);
Jerome Coutant 2:123b894b49dd 153 void TS_IO_Delay(uint32_t Delay);
Jerome Coutant 2:123b894b49dd 154 void OTM8009A_IO_Delay(uint32_t Delay);
Jerome Coutant 2:123b894b49dd 155 /**
Jerome Coutant 2:123b894b49dd 156 * @}
Jerome Coutant 2:123b894b49dd 157 */
Jerome Coutant 2:123b894b49dd 158
Jerome Coutant 2:123b894b49dd 159 /** @defgroup STM32469I_Discovery_BSP_Public_Functions STM32469I Discovery BSP Public Functions
Jerome Coutant 2:123b894b49dd 160 * @{
Jerome Coutant 2:123b894b49dd 161 */
Jerome Coutant 2:123b894b49dd 162
Jerome Coutant 2:123b894b49dd 163 /**
Jerome Coutant 2:123b894b49dd 164 * @brief This method returns the STM32469I Discovery BSP Driver revision
Jerome Coutant 2:123b894b49dd 165 * @retval version: 0xXYZR (8bits for each decimal, R for RC)
Jerome Coutant 2:123b894b49dd 166 */
Jerome Coutant 2:123b894b49dd 167 uint32_t BSP_GetVersion(void)
Jerome Coutant 2:123b894b49dd 168 {
Jerome Coutant 2:123b894b49dd 169 return __STM32469I_DISCOVERY_BSP_VERSION;
Jerome Coutant 2:123b894b49dd 170 }
Jerome Coutant 2:123b894b49dd 171
Jerome Coutant 2:123b894b49dd 172 /**
Jerome Coutant 2:123b894b49dd 173 * @brief Configures LED GPIO.
Jerome Coutant 2:123b894b49dd 174 * @param Led: LED to be configured.
Jerome Coutant 2:123b894b49dd 175 * This parameter can be one of the following values:
Jerome Coutant 2:123b894b49dd 176 * @arg LED1
Jerome Coutant 2:123b894b49dd 177 * @arg LED2
Jerome Coutant 2:123b894b49dd 178 * @arg LED3
Jerome Coutant 2:123b894b49dd 179 * @arg LED4
Jerome Coutant 2:123b894b49dd 180 */
Jerome Coutant 2:123b894b49dd 181 void BSP_LED_Init(Led_TypeDef Led)
Jerome Coutant 2:123b894b49dd 182 {
Jerome Coutant 2:123b894b49dd 183 GPIO_InitTypeDef gpio_init_structure;
Jerome Coutant 2:123b894b49dd 184
Jerome Coutant 2:123b894b49dd 185 if (Led <= DISCO_LED4)
Jerome Coutant 2:123b894b49dd 186 {
Jerome Coutant 2:123b894b49dd 187 /* Configure the GPIO_LED pin */
Jerome Coutant 2:123b894b49dd 188 gpio_init_structure.Pin = GPIO_PIN[Led];
Jerome Coutant 2:123b894b49dd 189 gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP;
Jerome Coutant 2:123b894b49dd 190 gpio_init_structure.Pull = GPIO_PULLUP;
Jerome Coutant 2:123b894b49dd 191 gpio_init_structure.Speed = GPIO_SPEED_HIGH;
Jerome Coutant 2:123b894b49dd 192
Jerome Coutant 2:123b894b49dd 193 switch(Led)
Jerome Coutant 2:123b894b49dd 194 {
Jerome Coutant 2:123b894b49dd 195 case DISCO_LED1 :
Jerome Coutant 2:123b894b49dd 196 LED1_GPIO_CLK_ENABLE();
Jerome Coutant 2:123b894b49dd 197 break;
Jerome Coutant 2:123b894b49dd 198 case DISCO_LED2 :
Jerome Coutant 2:123b894b49dd 199 LED2_GPIO_CLK_ENABLE();
Jerome Coutant 2:123b894b49dd 200 break;
Jerome Coutant 2:123b894b49dd 201 case DISCO_LED3 :
Jerome Coutant 2:123b894b49dd 202 LED3_GPIO_CLK_ENABLE();
Jerome Coutant 2:123b894b49dd 203 break;
Jerome Coutant 2:123b894b49dd 204 case DISCO_LED4 :
Jerome Coutant 2:123b894b49dd 205 LED4_GPIO_CLK_ENABLE();
Jerome Coutant 2:123b894b49dd 206 break;
Jerome Coutant 2:123b894b49dd 207 default :
Jerome Coutant 2:123b894b49dd 208 break;
Jerome Coutant 2:123b894b49dd 209
Jerome Coutant 2:123b894b49dd 210 } /* end switch */
Jerome Coutant 2:123b894b49dd 211
Jerome Coutant 2:123b894b49dd 212 HAL_GPIO_Init(GPIO_PORT[Led], &gpio_init_structure);
Jerome Coutant 2:123b894b49dd 213
Jerome Coutant 2:123b894b49dd 214 /* By default, turn off LED by setting a high level on corresponding GPIO */
Jerome Coutant 2:123b894b49dd 215 HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET);
Jerome Coutant 2:123b894b49dd 216
Jerome Coutant 2:123b894b49dd 217 } /* of if (Led <= LED4) */
Jerome Coutant 2:123b894b49dd 218
Jerome Coutant 2:123b894b49dd 219 }
Jerome Coutant 2:123b894b49dd 220
Jerome Coutant 2:123b894b49dd 221
Jerome Coutant 2:123b894b49dd 222 /**
Jerome Coutant 2:123b894b49dd 223 * @brief DeInit LEDs.
Jerome Coutant 2:123b894b49dd 224 * @param Led: LED to be configured.
Jerome Coutant 2:123b894b49dd 225 * This parameter can be one of the following values:
Jerome Coutant 2:123b894b49dd 226 * @arg LED1
Jerome Coutant 2:123b894b49dd 227 * @arg LED2
Jerome Coutant 2:123b894b49dd 228 * @arg LED3
Jerome Coutant 2:123b894b49dd 229 * @arg LED4
Jerome Coutant 2:123b894b49dd 230 * @note Led DeInit does not disable the GPIO clock nor disable the Mfx
Jerome Coutant 2:123b894b49dd 231 */
Jerome Coutant 2:123b894b49dd 232 void BSP_LED_DeInit(Led_TypeDef Led)
Jerome Coutant 2:123b894b49dd 233 {
Jerome Coutant 2:123b894b49dd 234 GPIO_InitTypeDef gpio_init_structure;
Jerome Coutant 2:123b894b49dd 235
Jerome Coutant 2:123b894b49dd 236 if (Led <= DISCO_LED4)
Jerome Coutant 2:123b894b49dd 237 {
Jerome Coutant 2:123b894b49dd 238 /* DeInit the GPIO_LED pin */
Jerome Coutant 2:123b894b49dd 239 gpio_init_structure.Pin = GPIO_PIN[Led];
Jerome Coutant 2:123b894b49dd 240
Jerome Coutant 2:123b894b49dd 241 /* Turn off LED */
Jerome Coutant 2:123b894b49dd 242 HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET);
Jerome Coutant 2:123b894b49dd 243 HAL_GPIO_DeInit(GPIO_PORT[Led], gpio_init_structure.Pin);
Jerome Coutant 2:123b894b49dd 244 }
Jerome Coutant 2:123b894b49dd 245
Jerome Coutant 2:123b894b49dd 246 }
Jerome Coutant 2:123b894b49dd 247
Jerome Coutant 2:123b894b49dd 248 /**
Jerome Coutant 2:123b894b49dd 249 * @brief Turns selected LED On.
Jerome Coutant 2:123b894b49dd 250 * @param Led: LED to be set on
Jerome Coutant 2:123b894b49dd 251 * This parameter can be one of the following values:
Jerome Coutant 2:123b894b49dd 252 * @arg LED1
Jerome Coutant 2:123b894b49dd 253 * @arg LED2
Jerome Coutant 2:123b894b49dd 254 * @arg LED3
Jerome Coutant 2:123b894b49dd 255 * @arg LED4
Jerome Coutant 2:123b894b49dd 256 */
Jerome Coutant 2:123b894b49dd 257 void BSP_LED_On(Led_TypeDef Led)
Jerome Coutant 2:123b894b49dd 258 {
Jerome Coutant 2:123b894b49dd 259 if (Led <= DISCO_LED4)
Jerome Coutant 2:123b894b49dd 260 {
Jerome Coutant 2:123b894b49dd 261 HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET);
Jerome Coutant 2:123b894b49dd 262 }
Jerome Coutant 2:123b894b49dd 263
Jerome Coutant 2:123b894b49dd 264 }
Jerome Coutant 2:123b894b49dd 265
Jerome Coutant 2:123b894b49dd 266 /**
Jerome Coutant 2:123b894b49dd 267 * @brief Turns selected LED Off.
Jerome Coutant 2:123b894b49dd 268 * @param Led: LED to be set off
Jerome Coutant 2:123b894b49dd 269 * This parameter can be one of the following values:
Jerome Coutant 2:123b894b49dd 270 * @arg LED1
Jerome Coutant 2:123b894b49dd 271 * @arg LED2
Jerome Coutant 2:123b894b49dd 272 * @arg LED3
Jerome Coutant 2:123b894b49dd 273 * @arg LED4
Jerome Coutant 2:123b894b49dd 274 */
Jerome Coutant 2:123b894b49dd 275 void BSP_LED_Off(Led_TypeDef Led)
Jerome Coutant 2:123b894b49dd 276 {
Jerome Coutant 2:123b894b49dd 277 if (Led <= DISCO_LED4)
Jerome Coutant 2:123b894b49dd 278 {
Jerome Coutant 2:123b894b49dd 279 HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET);
Jerome Coutant 2:123b894b49dd 280 }
Jerome Coutant 2:123b894b49dd 281 }
Jerome Coutant 2:123b894b49dd 282
Jerome Coutant 2:123b894b49dd 283 /**
Jerome Coutant 2:123b894b49dd 284 * @brief Toggles the selected LED.
Jerome Coutant 2:123b894b49dd 285 * @param Led: LED to be toggled
Jerome Coutant 2:123b894b49dd 286 * This parameter can be one of the following values:
Jerome Coutant 2:123b894b49dd 287 * @arg LED1
Jerome Coutant 2:123b894b49dd 288 * @arg LED2
Jerome Coutant 2:123b894b49dd 289 * @arg LED3
Jerome Coutant 2:123b894b49dd 290 * @arg LED4
Jerome Coutant 2:123b894b49dd 291 */
Jerome Coutant 2:123b894b49dd 292 void BSP_LED_Toggle(Led_TypeDef Led)
Jerome Coutant 2:123b894b49dd 293 {
Jerome Coutant 2:123b894b49dd 294 if (Led <= DISCO_LED4)
Jerome Coutant 2:123b894b49dd 295 {
Jerome Coutant 2:123b894b49dd 296 HAL_GPIO_TogglePin(GPIO_PORT[Led], GPIO_PIN[Led]);
Jerome Coutant 2:123b894b49dd 297 }
Jerome Coutant 2:123b894b49dd 298 }
Jerome Coutant 2:123b894b49dd 299
Jerome Coutant 2:123b894b49dd 300 /**
Jerome Coutant 2:123b894b49dd 301 * @brief Configures button GPIO and EXTI Line.
Jerome Coutant 2:123b894b49dd 302 * @param Button: Button to be configured
Jerome Coutant 2:123b894b49dd 303 * This parameter can be one of the following values:
Jerome Coutant 2:123b894b49dd 304 * @arg BUTTON_WAKEUP: Wakeup Push Button
Jerome Coutant 2:123b894b49dd 305 * @arg BUTTON_USER: User Push Button
Jerome Coutant 2:123b894b49dd 306 * @param Button_Mode: Button mode
Jerome Coutant 2:123b894b49dd 307 * This parameter can be one of the following values:
Jerome Coutant 2:123b894b49dd 308 * @arg BUTTON_MODE_GPIO: Button will be used as simple IO
Jerome Coutant 2:123b894b49dd 309 * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line
Jerome Coutant 2:123b894b49dd 310 * with interrupt generation capability
Jerome Coutant 2:123b894b49dd 311 */
Jerome Coutant 2:123b894b49dd 312 void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode)
Jerome Coutant 2:123b894b49dd 313 {
Jerome Coutant 2:123b894b49dd 314 GPIO_InitTypeDef gpio_init_structure;
Jerome Coutant 2:123b894b49dd 315
Jerome Coutant 2:123b894b49dd 316 /* Enable the BUTTON clock */
Jerome Coutant 2:123b894b49dd 317 BUTTON_GPIO_CLK_ENABLE();
Jerome Coutant 2:123b894b49dd 318
Jerome Coutant 2:123b894b49dd 319 if(Button_Mode == BUTTON_MODE_GPIO)
Jerome Coutant 2:123b894b49dd 320 {
Jerome Coutant 2:123b894b49dd 321 /* Configure Button pin as input */
Jerome Coutant 2:123b894b49dd 322 gpio_init_structure.Pin = BUTTON_PIN[Button];
Jerome Coutant 2:123b894b49dd 323 gpio_init_structure.Mode = GPIO_MODE_INPUT;
Jerome Coutant 2:123b894b49dd 324 gpio_init_structure.Pull = GPIO_NOPULL;
Jerome Coutant 2:123b894b49dd 325 gpio_init_structure.Speed = GPIO_SPEED_FAST;
Jerome Coutant 2:123b894b49dd 326 HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure);
Jerome Coutant 2:123b894b49dd 327 }
Jerome Coutant 2:123b894b49dd 328
Jerome Coutant 2:123b894b49dd 329 if(Button_Mode == BUTTON_MODE_EXTI)
Jerome Coutant 2:123b894b49dd 330 {
Jerome Coutant 2:123b894b49dd 331 /* Configure Button pin as input with External interrupt */
Jerome Coutant 2:123b894b49dd 332 gpio_init_structure.Pin = BUTTON_PIN[Button];
Jerome Coutant 2:123b894b49dd 333 gpio_init_structure.Pull = GPIO_NOPULL;
Jerome Coutant 2:123b894b49dd 334 gpio_init_structure.Speed = GPIO_SPEED_FAST;
Jerome Coutant 2:123b894b49dd 335
Jerome Coutant 2:123b894b49dd 336 gpio_init_structure.Mode = GPIO_MODE_IT_RISING;
Jerome Coutant 2:123b894b49dd 337
Jerome Coutant 2:123b894b49dd 338 HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure);
Jerome Coutant 2:123b894b49dd 339
Jerome Coutant 2:123b894b49dd 340 /* Enable and set Button EXTI Interrupt to the lowest priority */
Jerome Coutant 2:123b894b49dd 341 HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00);
Jerome Coutant 2:123b894b49dd 342 HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button]));
Jerome Coutant 2:123b894b49dd 343 }
Jerome Coutant 2:123b894b49dd 344 }
Jerome Coutant 2:123b894b49dd 345
Jerome Coutant 2:123b894b49dd 346 /**
Jerome Coutant 2:123b894b49dd 347 * @brief Push Button DeInit.
Jerome Coutant 2:123b894b49dd 348 * @param Button: Button to be configured
Jerome Coutant 2:123b894b49dd 349 * This parameter can be one of the following values:
Jerome Coutant 2:123b894b49dd 350 * @arg BUTTON_WAKEUP: Wakeup Push Button
Jerome Coutant 2:123b894b49dd 351 * @arg BUTTON_USER: User Push Button
Jerome Coutant 2:123b894b49dd 352 * @note PB DeInit does not disable the GPIO clock
Jerome Coutant 2:123b894b49dd 353 */
Jerome Coutant 2:123b894b49dd 354 void BSP_PB_DeInit(Button_TypeDef Button)
Jerome Coutant 2:123b894b49dd 355 {
Jerome Coutant 2:123b894b49dd 356 GPIO_InitTypeDef gpio_init_structure;
Jerome Coutant 2:123b894b49dd 357
Jerome Coutant 2:123b894b49dd 358 gpio_init_structure.Pin = BUTTON_PIN[Button];
Jerome Coutant 2:123b894b49dd 359 HAL_NVIC_DisableIRQ((IRQn_Type)(BUTTON_IRQn[Button]));
Jerome Coutant 2:123b894b49dd 360 HAL_GPIO_DeInit(BUTTON_PORT[Button], gpio_init_structure.Pin);
Jerome Coutant 2:123b894b49dd 361 }
Jerome Coutant 2:123b894b49dd 362
Jerome Coutant 2:123b894b49dd 363
Jerome Coutant 2:123b894b49dd 364 /**
Jerome Coutant 2:123b894b49dd 365 * @brief Returns the selected button state.
Jerome Coutant 2:123b894b49dd 366 * @param Button: Button to be checked
Jerome Coutant 2:123b894b49dd 367 * This parameter can be one of the following values:
Jerome Coutant 2:123b894b49dd 368 * @arg BUTTON_WAKEUP: Wakeup Push Button
Jerome Coutant 2:123b894b49dd 369 * @arg BUTTON_USER: User Push Button
Jerome Coutant 2:123b894b49dd 370 * @retval The Button GPIO pin value
Jerome Coutant 2:123b894b49dd 371 */
Jerome Coutant 2:123b894b49dd 372 uint32_t BSP_PB_GetState(Button_TypeDef Button)
Jerome Coutant 2:123b894b49dd 373 {
Jerome Coutant 2:123b894b49dd 374 return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]);
Jerome Coutant 2:123b894b49dd 375 }
Jerome Coutant 2:123b894b49dd 376
Jerome Coutant 2:123b894b49dd 377 /**
Jerome Coutant 2:123b894b49dd 378 * @}
Jerome Coutant 2:123b894b49dd 379 */
Jerome Coutant 2:123b894b49dd 380
Jerome Coutant 2:123b894b49dd 381 /** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_Functions STM32469I Discovery LOW LEVEL Private Functions
Jerome Coutant 2:123b894b49dd 382 * @{
Jerome Coutant 2:123b894b49dd 383 */
Jerome Coutant 2:123b894b49dd 384
Jerome Coutant 2:123b894b49dd 385
Jerome Coutant 2:123b894b49dd 386 /*******************************************************************************
Jerome Coutant 2:123b894b49dd 387 BUS OPERATIONS
Jerome Coutant 2:123b894b49dd 388 *******************************************************************************/
Jerome Coutant 2:123b894b49dd 389
Jerome Coutant 2:123b894b49dd 390 /******************************* I2C Routines *********************************/
Jerome Coutant 2:123b894b49dd 391 /**
Jerome Coutant 2:123b894b49dd 392 * @brief Initializes I2C MSP.
Jerome Coutant 2:123b894b49dd 393 */
Jerome Coutant 2:123b894b49dd 394 static void I2C1_MspInit(void)
Jerome Coutant 2:123b894b49dd 395 {
Jerome Coutant 2:123b894b49dd 396 GPIO_InitTypeDef gpio_init_structure;
Jerome Coutant 2:123b894b49dd 397
Jerome Coutant 2:123b894b49dd 398 /*** Configure the GPIOs ***/
Jerome Coutant 2:123b894b49dd 399 /* Enable GPIO clock */
Jerome Coutant 2:123b894b49dd 400 DISCO_I2C1_SCL_SDA_GPIO_CLK_ENABLE();
Jerome Coutant 2:123b894b49dd 401
Jerome Coutant 2:123b894b49dd 402 /* Configure I2C Tx as alternate function */
Jerome Coutant 2:123b894b49dd 403 gpio_init_structure.Pin = DISCO_I2C1_SCL_PIN;
Jerome Coutant 2:123b894b49dd 404 gpio_init_structure.Mode = GPIO_MODE_AF_OD;
Jerome Coutant 2:123b894b49dd 405 gpio_init_structure.Pull = GPIO_NOPULL;
Jerome Coutant 2:123b894b49dd 406 gpio_init_structure.Speed = GPIO_SPEED_FAST;
Jerome Coutant 2:123b894b49dd 407 gpio_init_structure.Alternate = DISCO_I2C1_SCL_SDA_AF;
Jerome Coutant 2:123b894b49dd 408 HAL_GPIO_Init(DISCO_I2C1_SCL_SDA_GPIO_PORT, &gpio_init_structure);
Jerome Coutant 2:123b894b49dd 409
Jerome Coutant 2:123b894b49dd 410 /* Configure I2C Rx as alternate function */
Jerome Coutant 2:123b894b49dd 411 gpio_init_structure.Pin = DISCO_I2C1_SDA_PIN;
Jerome Coutant 2:123b894b49dd 412 HAL_GPIO_Init(DISCO_I2C1_SCL_SDA_GPIO_PORT, &gpio_init_structure);
Jerome Coutant 2:123b894b49dd 413
Jerome Coutant 2:123b894b49dd 414 /*** Configure the I2C peripheral ***/
Jerome Coutant 2:123b894b49dd 415 /* Enable I2C clock */
Jerome Coutant 2:123b894b49dd 416 DISCO_I2C1_CLK_ENABLE();
Jerome Coutant 2:123b894b49dd 417
Jerome Coutant 2:123b894b49dd 418 /* Force the I2C peripheral clock reset */
Jerome Coutant 2:123b894b49dd 419 DISCO_I2C1_FORCE_RESET();
Jerome Coutant 2:123b894b49dd 420
Jerome Coutant 2:123b894b49dd 421 /* Release the I2C peripheral clock reset */
Jerome Coutant 2:123b894b49dd 422 DISCO_I2C1_RELEASE_RESET();
Jerome Coutant 2:123b894b49dd 423
Jerome Coutant 2:123b894b49dd 424 /* Enable and set I2C1 Interrupt to a lower priority */
Jerome Coutant 2:123b894b49dd 425 HAL_NVIC_SetPriority(DISCO_I2C1_EV_IRQn, 0x05, 0);
Jerome Coutant 2:123b894b49dd 426 HAL_NVIC_EnableIRQ(DISCO_I2C1_EV_IRQn);
Jerome Coutant 2:123b894b49dd 427
Jerome Coutant 2:123b894b49dd 428 /* Enable and set I2C1 Interrupt to a lower priority */
Jerome Coutant 2:123b894b49dd 429 HAL_NVIC_SetPriority(DISCO_I2C1_ER_IRQn, 0x05, 0);
Jerome Coutant 2:123b894b49dd 430 HAL_NVIC_EnableIRQ(DISCO_I2C1_ER_IRQn);
Jerome Coutant 2:123b894b49dd 431 }
Jerome Coutant 2:123b894b49dd 432
Jerome Coutant 2:123b894b49dd 433 /**
Jerome Coutant 2:123b894b49dd 434 * @brief Initializes I2C MSP.
Jerome Coutant 2:123b894b49dd 435 */
Jerome Coutant 2:123b894b49dd 436 static void I2C2_MspInit(void)
Jerome Coutant 2:123b894b49dd 437 {
Jerome Coutant 2:123b894b49dd 438 GPIO_InitTypeDef gpio_init_structure;
Jerome Coutant 2:123b894b49dd 439
Jerome Coutant 2:123b894b49dd 440 /*** Configure the GPIOs ***/
Jerome Coutant 2:123b894b49dd 441 /* Enable GPIO clock */
Jerome Coutant 2:123b894b49dd 442 DISCO_I2C2_SCL_SDA_GPIO_CLK_ENABLE();
Jerome Coutant 2:123b894b49dd 443
Jerome Coutant 2:123b894b49dd 444 /* Configure I2C Tx as alternate function */
Jerome Coutant 2:123b894b49dd 445 gpio_init_structure.Pin = DISCO_I2C2_SCL_PIN;
Jerome Coutant 2:123b894b49dd 446 gpio_init_structure.Mode = GPIO_MODE_AF_OD;
Jerome Coutant 2:123b894b49dd 447 gpio_init_structure.Pull = GPIO_NOPULL;
Jerome Coutant 2:123b894b49dd 448 gpio_init_structure.Speed = GPIO_SPEED_FAST;
Jerome Coutant 2:123b894b49dd 449 gpio_init_structure.Alternate = DISCO_I2C2_SCL_SDA_AF;
Jerome Coutant 2:123b894b49dd 450 HAL_GPIO_Init(DISCO_I2C2_SCL_SDA_GPIO_PORT, &gpio_init_structure);
Jerome Coutant 2:123b894b49dd 451
Jerome Coutant 2:123b894b49dd 452 /* Configure I2C Rx as alternate function */
Jerome Coutant 2:123b894b49dd 453 gpio_init_structure.Pin = DISCO_I2C2_SDA_PIN;
Jerome Coutant 2:123b894b49dd 454 HAL_GPIO_Init(DISCO_I2C2_SCL_SDA_GPIO_PORT, &gpio_init_structure);
Jerome Coutant 2:123b894b49dd 455
Jerome Coutant 2:123b894b49dd 456 /*** Configure the I2C peripheral ***/
Jerome Coutant 2:123b894b49dd 457 /* Enable I2C clock */
Jerome Coutant 2:123b894b49dd 458 DISCO_I2C2_CLK_ENABLE();
Jerome Coutant 2:123b894b49dd 459
Jerome Coutant 2:123b894b49dd 460 /* Force the I2C peripheral clock reset */
Jerome Coutant 2:123b894b49dd 461 DISCO_I2C2_FORCE_RESET();
Jerome Coutant 2:123b894b49dd 462
Jerome Coutant 2:123b894b49dd 463 /* Release the I2C peripheral clock reset */
Jerome Coutant 2:123b894b49dd 464 DISCO_I2C2_RELEASE_RESET();
Jerome Coutant 2:123b894b49dd 465
Jerome Coutant 2:123b894b49dd 466 /* Enable and set I2C1 Interrupt to a lower priority */
Jerome Coutant 2:123b894b49dd 467 HAL_NVIC_SetPriority(DISCO_I2C2_EV_IRQn, 0x05, 0);
Jerome Coutant 2:123b894b49dd 468 HAL_NVIC_EnableIRQ(DISCO_I2C2_EV_IRQn);
Jerome Coutant 2:123b894b49dd 469
Jerome Coutant 2:123b894b49dd 470 /* Enable and set I2C1 Interrupt to a lower priority */
Jerome Coutant 2:123b894b49dd 471 HAL_NVIC_SetPriority(DISCO_I2C2_ER_IRQn, 0x05, 0);
Jerome Coutant 2:123b894b49dd 472 HAL_NVIC_EnableIRQ(DISCO_I2C2_ER_IRQn);
Jerome Coutant 2:123b894b49dd 473 }
Jerome Coutant 2:123b894b49dd 474
Jerome Coutant 2:123b894b49dd 475 /**
Jerome Coutant 2:123b894b49dd 476 * @brief Initializes I2C HAL.
Jerome Coutant 2:123b894b49dd 477 */
Jerome Coutant 2:123b894b49dd 478 static void I2C1_Init(void)
Jerome Coutant 2:123b894b49dd 479 {
Jerome Coutant 2:123b894b49dd 480 if(HAL_I2C_GetState(&heval_I2c1) == HAL_I2C_STATE_RESET)
Jerome Coutant 2:123b894b49dd 481 {
Jerome Coutant 2:123b894b49dd 482 heval_I2c1.Instance = I2C1;
Jerome Coutant 2:123b894b49dd 483 heval_I2c1.Init.ClockSpeed = I2C1_SCL_FREQ_KHZ;
Jerome Coutant 2:123b894b49dd 484 heval_I2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
Jerome Coutant 2:123b894b49dd 485 heval_I2c1.Init.OwnAddress1 = 0;
Jerome Coutant 2:123b894b49dd 486 heval_I2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
Jerome Coutant 2:123b894b49dd 487 heval_I2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
Jerome Coutant 2:123b894b49dd 488 heval_I2c1.Init.OwnAddress2 = 0;
Jerome Coutant 2:123b894b49dd 489 heval_I2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
Jerome Coutant 2:123b894b49dd 490 heval_I2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
Jerome Coutant 2:123b894b49dd 491
Jerome Coutant 2:123b894b49dd 492 /* Init the I2C */
Jerome Coutant 2:123b894b49dd 493 I2C1_MspInit();
Jerome Coutant 2:123b894b49dd 494 HAL_I2C_Init(&heval_I2c1);
Jerome Coutant 2:123b894b49dd 495 }
Jerome Coutant 2:123b894b49dd 496 }
Jerome Coutant 2:123b894b49dd 497
Jerome Coutant 2:123b894b49dd 498 /**
Jerome Coutant 2:123b894b49dd 499 * @brief Initializes I2C HAL.
Jerome Coutant 2:123b894b49dd 500 */
Jerome Coutant 2:123b894b49dd 501 static void I2C2_Init(void)
Jerome Coutant 2:123b894b49dd 502 {
Jerome Coutant 2:123b894b49dd 503 if(HAL_I2C_GetState(&heval_I2c2) == HAL_I2C_STATE_RESET)
Jerome Coutant 2:123b894b49dd 504 {
Jerome Coutant 2:123b894b49dd 505 heval_I2c2.Instance = I2C2;
Jerome Coutant 2:123b894b49dd 506 heval_I2c2.Init.ClockSpeed = I2C2_SCL_FREQ_KHZ;
Jerome Coutant 2:123b894b49dd 507 heval_I2c2.Init.DutyCycle = I2C_DUTYCYCLE_2;
Jerome Coutant 2:123b894b49dd 508 heval_I2c2.Init.OwnAddress1 = 0;
Jerome Coutant 2:123b894b49dd 509 heval_I2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
Jerome Coutant 2:123b894b49dd 510 heval_I2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
Jerome Coutant 2:123b894b49dd 511 heval_I2c2.Init.OwnAddress2 = 0;
Jerome Coutant 2:123b894b49dd 512 heval_I2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
Jerome Coutant 2:123b894b49dd 513 heval_I2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
Jerome Coutant 2:123b894b49dd 514
Jerome Coutant 2:123b894b49dd 515 /* Init the I2C */
Jerome Coutant 2:123b894b49dd 516 I2C2_MspInit();
Jerome Coutant 2:123b894b49dd 517 HAL_I2C_Init(&heval_I2c2);
Jerome Coutant 2:123b894b49dd 518 }
Jerome Coutant 2:123b894b49dd 519 }
Jerome Coutant 2:123b894b49dd 520
Jerome Coutant 2:123b894b49dd 521 /**
Jerome Coutant 2:123b894b49dd 522 * @brief Writes a single data.
Jerome Coutant 2:123b894b49dd 523 * @param Addr: I2C address
Jerome Coutant 2:123b894b49dd 524 * @param Reg: Register address
Jerome Coutant 2:123b894b49dd 525 * @param Value: Data to be written
Jerome Coutant 2:123b894b49dd 526 */
Jerome Coutant 2:123b894b49dd 527 static void I2C1_Write(uint8_t Addr, uint8_t Reg, uint8_t Value)
Jerome Coutant 2:123b894b49dd 528 {
Jerome Coutant 2:123b894b49dd 529 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 2:123b894b49dd 530
Jerome Coutant 2:123b894b49dd 531 status = HAL_I2C_Mem_Write(&heval_I2c1,
Jerome Coutant 2:123b894b49dd 532 Addr,
Jerome Coutant 2:123b894b49dd 533 (uint16_t)Reg,
Jerome Coutant 2:123b894b49dd 534 I2C_MEMADD_SIZE_8BIT,
Jerome Coutant 2:123b894b49dd 535 &Value,
Jerome Coutant 2:123b894b49dd 536 1,
Jerome Coutant 2:123b894b49dd 537 100);
Jerome Coutant 2:123b894b49dd 538
Jerome Coutant 2:123b894b49dd 539 /* Check the communication status */
Jerome Coutant 2:123b894b49dd 540 if(status != HAL_OK)
Jerome Coutant 2:123b894b49dd 541 {
Jerome Coutant 2:123b894b49dd 542 /* Execute user timeout callback */
Jerome Coutant 2:123b894b49dd 543 I2C1_Error(Addr);
Jerome Coutant 2:123b894b49dd 544 }
Jerome Coutant 2:123b894b49dd 545 }
Jerome Coutant 2:123b894b49dd 546
Jerome Coutant 2:123b894b49dd 547 /**
Jerome Coutant 2:123b894b49dd 548 * @brief Reads a single data.
Jerome Coutant 2:123b894b49dd 549 * @param Addr: I2C address
Jerome Coutant 2:123b894b49dd 550 * @param Reg: Register address
Jerome Coutant 2:123b894b49dd 551 * @retval Read data
Jerome Coutant 2:123b894b49dd 552 */
Jerome Coutant 2:123b894b49dd 553 static uint8_t I2C1_Read(uint8_t Addr, uint8_t Reg)
Jerome Coutant 2:123b894b49dd 554 {
Jerome Coutant 2:123b894b49dd 555 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 2:123b894b49dd 556 uint8_t Value = 0;
Jerome Coutant 2:123b894b49dd 557
Jerome Coutant 2:123b894b49dd 558 status = HAL_I2C_Mem_Read(&heval_I2c1,
Jerome Coutant 2:123b894b49dd 559 Addr,
Jerome Coutant 2:123b894b49dd 560 Reg,
Jerome Coutant 2:123b894b49dd 561 I2C_MEMADD_SIZE_8BIT,
Jerome Coutant 2:123b894b49dd 562 &Value,
Jerome Coutant 2:123b894b49dd 563 1,
Jerome Coutant 2:123b894b49dd 564 1000);
Jerome Coutant 2:123b894b49dd 565
Jerome Coutant 2:123b894b49dd 566 /* Check the communication status */
Jerome Coutant 2:123b894b49dd 567 if(status != HAL_OK)
Jerome Coutant 2:123b894b49dd 568 {
Jerome Coutant 2:123b894b49dd 569 /* Execute user timeout callback */
Jerome Coutant 2:123b894b49dd 570 I2C1_Error(Addr);
Jerome Coutant 2:123b894b49dd 571 }
Jerome Coutant 2:123b894b49dd 572 return Value;
Jerome Coutant 2:123b894b49dd 573 }
Jerome Coutant 2:123b894b49dd 574
Jerome Coutant 2:123b894b49dd 575 /**
Jerome Coutant 2:123b894b49dd 576 * @brief Reads multiple data.
Jerome Coutant 2:123b894b49dd 577 * @param Addr: I2C address
Jerome Coutant 2:123b894b49dd 578 * @param Reg: Reg address
Jerome Coutant 2:123b894b49dd 579 * @param MemAddress: memory address
Jerome Coutant 2:123b894b49dd 580 * @param Buffer: Pointer to data buffer
Jerome Coutant 2:123b894b49dd 581 * @param Length: Length of the data
Jerome Coutant 2:123b894b49dd 582 * @retval HAL status
Jerome Coutant 2:123b894b49dd 583 */
Jerome Coutant 2:123b894b49dd 584 static HAL_StatusTypeDef I2C1_ReadMultiple(uint8_t Addr,
Jerome Coutant 2:123b894b49dd 585 uint16_t Reg,
Jerome Coutant 2:123b894b49dd 586 uint16_t MemAddress,
Jerome Coutant 2:123b894b49dd 587 uint8_t *Buffer,
Jerome Coutant 2:123b894b49dd 588 uint16_t Length)
Jerome Coutant 2:123b894b49dd 589 {
Jerome Coutant 2:123b894b49dd 590 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 2:123b894b49dd 591
Jerome Coutant 2:123b894b49dd 592 status = HAL_I2C_Mem_Read(&heval_I2c1,
Jerome Coutant 2:123b894b49dd 593 Addr,
Jerome Coutant 2:123b894b49dd 594 (uint16_t)Reg,
Jerome Coutant 2:123b894b49dd 595 MemAddress,
Jerome Coutant 2:123b894b49dd 596 Buffer,
Jerome Coutant 2:123b894b49dd 597 Length,
Jerome Coutant 2:123b894b49dd 598 1000);
Jerome Coutant 2:123b894b49dd 599
Jerome Coutant 2:123b894b49dd 600 /* Check the communication status */
Jerome Coutant 2:123b894b49dd 601 if(status != HAL_OK)
Jerome Coutant 2:123b894b49dd 602 {
Jerome Coutant 2:123b894b49dd 603 /* I2C error occured */
Jerome Coutant 2:123b894b49dd 604 I2C1_Error(Addr);
Jerome Coutant 2:123b894b49dd 605 }
Jerome Coutant 2:123b894b49dd 606 return status;
Jerome Coutant 2:123b894b49dd 607 }
Jerome Coutant 2:123b894b49dd 608
Jerome Coutant 2:123b894b49dd 609 static HAL_StatusTypeDef I2C2_ReadMultiple(uint8_t Addr,
Jerome Coutant 2:123b894b49dd 610 uint16_t Reg,
Jerome Coutant 2:123b894b49dd 611 uint16_t MemAddress,
Jerome Coutant 2:123b894b49dd 612 uint8_t *Buffer,
Jerome Coutant 2:123b894b49dd 613 uint16_t Length)
Jerome Coutant 2:123b894b49dd 614 {
Jerome Coutant 2:123b894b49dd 615 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 2:123b894b49dd 616
Jerome Coutant 2:123b894b49dd 617 status = HAL_I2C_Mem_Read(&heval_I2c2,
Jerome Coutant 2:123b894b49dd 618 Addr,
Jerome Coutant 2:123b894b49dd 619 (uint16_t)Reg,
Jerome Coutant 2:123b894b49dd 620 MemAddress,
Jerome Coutant 2:123b894b49dd 621 Buffer,
Jerome Coutant 2:123b894b49dd 622 Length,
Jerome Coutant 2:123b894b49dd 623 1000);
Jerome Coutant 2:123b894b49dd 624
Jerome Coutant 2:123b894b49dd 625 /* Check the communication status */
Jerome Coutant 2:123b894b49dd 626 if(status != HAL_OK)
Jerome Coutant 2:123b894b49dd 627 {
Jerome Coutant 2:123b894b49dd 628 /* I2C2 error occured */
Jerome Coutant 2:123b894b49dd 629 I2C2_Error(Addr);
Jerome Coutant 2:123b894b49dd 630 }
Jerome Coutant 2:123b894b49dd 631 return status;
Jerome Coutant 2:123b894b49dd 632 }
Jerome Coutant 2:123b894b49dd 633
Jerome Coutant 2:123b894b49dd 634 /**
Jerome Coutant 2:123b894b49dd 635 * @brief Writes a value in a register of the device through BUS in using DMA mode.
Jerome Coutant 2:123b894b49dd 636 * @param Addr: Device address on BUS Bus.
Jerome Coutant 2:123b894b49dd 637 * @param Reg: The target register address to write
Jerome Coutant 2:123b894b49dd 638 * @param MemAddress: memory address
Jerome Coutant 2:123b894b49dd 639 * @param Buffer: The target register value to be written
Jerome Coutant 2:123b894b49dd 640 * @param Length: buffer size to be written
Jerome Coutant 2:123b894b49dd 641 * @retval HAL status
Jerome Coutant 2:123b894b49dd 642 */
Jerome Coutant 2:123b894b49dd 643 static HAL_StatusTypeDef I2C1_WriteMultiple(uint8_t Addr,
Jerome Coutant 2:123b894b49dd 644 uint16_t Reg,
Jerome Coutant 2:123b894b49dd 645 uint16_t MemAddress,
Jerome Coutant 2:123b894b49dd 646 uint8_t *Buffer,
Jerome Coutant 2:123b894b49dd 647 uint16_t Length)
Jerome Coutant 2:123b894b49dd 648 {
Jerome Coutant 2:123b894b49dd 649 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 2:123b894b49dd 650
Jerome Coutant 2:123b894b49dd 651 status = HAL_I2C_Mem_Write(&heval_I2c1,
Jerome Coutant 2:123b894b49dd 652 Addr,
Jerome Coutant 2:123b894b49dd 653 (uint16_t)Reg,
Jerome Coutant 2:123b894b49dd 654 MemAddress,
Jerome Coutant 2:123b894b49dd 655 Buffer,
Jerome Coutant 2:123b894b49dd 656 Length,
Jerome Coutant 2:123b894b49dd 657 1000);
Jerome Coutant 2:123b894b49dd 658
Jerome Coutant 2:123b894b49dd 659 /* Check the communication status */
Jerome Coutant 2:123b894b49dd 660 if(status != HAL_OK)
Jerome Coutant 2:123b894b49dd 661 {
Jerome Coutant 2:123b894b49dd 662 /* Re-Initiaize the I2C Bus */
Jerome Coutant 2:123b894b49dd 663 I2C1_Error(Addr);
Jerome Coutant 2:123b894b49dd 664 }
Jerome Coutant 2:123b894b49dd 665 return status;
Jerome Coutant 2:123b894b49dd 666 }
Jerome Coutant 2:123b894b49dd 667
Jerome Coutant 2:123b894b49dd 668 static HAL_StatusTypeDef I2C2_WriteMultiple(uint8_t Addr,
Jerome Coutant 2:123b894b49dd 669 uint16_t Reg,
Jerome Coutant 2:123b894b49dd 670 uint16_t MemAddress,
Jerome Coutant 2:123b894b49dd 671 uint8_t *Buffer,
Jerome Coutant 2:123b894b49dd 672 uint16_t Length)
Jerome Coutant 2:123b894b49dd 673 {
Jerome Coutant 2:123b894b49dd 674 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 2:123b894b49dd 675
Jerome Coutant 2:123b894b49dd 676 status = HAL_I2C_Mem_Write(&heval_I2c2,
Jerome Coutant 2:123b894b49dd 677 Addr,
Jerome Coutant 2:123b894b49dd 678 (uint16_t)Reg,
Jerome Coutant 2:123b894b49dd 679 MemAddress,
Jerome Coutant 2:123b894b49dd 680 Buffer,
Jerome Coutant 2:123b894b49dd 681 Length,
Jerome Coutant 2:123b894b49dd 682 1000);
Jerome Coutant 2:123b894b49dd 683
Jerome Coutant 2:123b894b49dd 684 /* Check the communication status */
Jerome Coutant 2:123b894b49dd 685 if(status != HAL_OK)
Jerome Coutant 2:123b894b49dd 686 {
Jerome Coutant 2:123b894b49dd 687 /* Re-Initiaize the I2C2 Bus */
Jerome Coutant 2:123b894b49dd 688 I2C2_Error(Addr);
Jerome Coutant 2:123b894b49dd 689 }
Jerome Coutant 2:123b894b49dd 690 return status;
Jerome Coutant 2:123b894b49dd 691 }
Jerome Coutant 2:123b894b49dd 692
Jerome Coutant 2:123b894b49dd 693 /**
Jerome Coutant 2:123b894b49dd 694 * @brief Checks if target device is ready for communication.
Jerome Coutant 2:123b894b49dd 695 * @note This function is used with Memory devices
Jerome Coutant 2:123b894b49dd 696 * @param DevAddress: Target device address
Jerome Coutant 2:123b894b49dd 697 * @param Trials: Number of trials
Jerome Coutant 2:123b894b49dd 698 * @retval HAL status
Jerome Coutant 2:123b894b49dd 699 */
Jerome Coutant 2:123b894b49dd 700 static HAL_StatusTypeDef I2C1_IsDeviceReady(uint16_t DevAddress, uint32_t Trials)
Jerome Coutant 2:123b894b49dd 701 {
Jerome Coutant 2:123b894b49dd 702 return (HAL_I2C_IsDeviceReady(&heval_I2c1, DevAddress, Trials, 1000));
Jerome Coutant 2:123b894b49dd 703 }
Jerome Coutant 2:123b894b49dd 704
Jerome Coutant 2:123b894b49dd 705 /**
Jerome Coutant 2:123b894b49dd 706 * @brief Manages error callback by re-initializing I2C.
Jerome Coutant 2:123b894b49dd 707 * @param Addr: I2C Address
Jerome Coutant 2:123b894b49dd 708 */
Jerome Coutant 2:123b894b49dd 709 static void I2C1_Error(uint8_t Addr)
Jerome Coutant 2:123b894b49dd 710 {
Jerome Coutant 2:123b894b49dd 711 /* De-initialize the I2C comunication bus */
Jerome Coutant 2:123b894b49dd 712 HAL_I2C_DeInit(&heval_I2c1);
Jerome Coutant 2:123b894b49dd 713
Jerome Coutant 2:123b894b49dd 714 /* Re-Initiaize the I2C comunication bus */
Jerome Coutant 2:123b894b49dd 715 I2C1_Init();
Jerome Coutant 2:123b894b49dd 716 }
Jerome Coutant 2:123b894b49dd 717
Jerome Coutant 2:123b894b49dd 718 static void I2C2_Error(uint8_t Addr)
Jerome Coutant 2:123b894b49dd 719 {
Jerome Coutant 2:123b894b49dd 720 /* De-initialize the I2C2 comunication bus */
Jerome Coutant 2:123b894b49dd 721 HAL_I2C_DeInit(&heval_I2c2);
Jerome Coutant 2:123b894b49dd 722
Jerome Coutant 2:123b894b49dd 723 /* Re-Initiaize the I2C2 comunication bus */
Jerome Coutant 2:123b894b49dd 724 I2C2_Init();
Jerome Coutant 2:123b894b49dd 725 }
Jerome Coutant 2:123b894b49dd 726
Jerome Coutant 2:123b894b49dd 727 /**
Jerome Coutant 2:123b894b49dd 728 * @}
Jerome Coutant 2:123b894b49dd 729 */
Jerome Coutant 2:123b894b49dd 730
Jerome Coutant 2:123b894b49dd 731 /*******************************************************************************
Jerome Coutant 2:123b894b49dd 732 LINK OPERATIONS
Jerome Coutant 2:123b894b49dd 733 *******************************************************************************/
Jerome Coutant 2:123b894b49dd 734
Jerome Coutant 2:123b894b49dd 735 /********************************* LINK AUDIO *********************************/
Jerome Coutant 2:123b894b49dd 736
Jerome Coutant 2:123b894b49dd 737 /**
Jerome Coutant 2:123b894b49dd 738 * @brief Initializes Audio low level.
Jerome Coutant 2:123b894b49dd 739 */
Jerome Coutant 2:123b894b49dd 740 void AUDIO_IO_Init(void)
Jerome Coutant 2:123b894b49dd 741 {
Jerome Coutant 2:123b894b49dd 742 I2C2_Init();
Jerome Coutant 2:123b894b49dd 743 }
Jerome Coutant 2:123b894b49dd 744
Jerome Coutant 2:123b894b49dd 745 /**
Jerome Coutant 2:123b894b49dd 746 * @brief DeInitializes Audio low level.
Jerome Coutant 2:123b894b49dd 747 */
Jerome Coutant 2:123b894b49dd 748 void AUDIO_IO_DeInit(void)
Jerome Coutant 2:123b894b49dd 749 {
Jerome Coutant 2:123b894b49dd 750
Jerome Coutant 2:123b894b49dd 751 }
Jerome Coutant 2:123b894b49dd 752
Jerome Coutant 2:123b894b49dd 753 /**
Jerome Coutant 2:123b894b49dd 754 * @brief Writes a single data.
Jerome Coutant 2:123b894b49dd 755 * @param Addr: I2C address
Jerome Coutant 2:123b894b49dd 756 * @param Reg: Reg address
Jerome Coutant 2:123b894b49dd 757 * @param Value: Data to be written
Jerome Coutant 2:123b894b49dd 758 */
Jerome Coutant 2:123b894b49dd 759 void AUDIO_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value)
Jerome Coutant 2:123b894b49dd 760 {
Jerome Coutant 2:123b894b49dd 761 I2C2_WriteMultiple(Addr, (uint16_t) Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&Value, 1);
Jerome Coutant 2:123b894b49dd 762 }
Jerome Coutant 2:123b894b49dd 763
Jerome Coutant 2:123b894b49dd 764 /**
Jerome Coutant 2:123b894b49dd 765 * @brief Reads a single data.
Jerome Coutant 2:123b894b49dd 766 * @param Addr: I2C address
Jerome Coutant 2:123b894b49dd 767 * @param Reg: Reg address
Jerome Coutant 2:123b894b49dd 768 * @retval Data to be read
Jerome Coutant 2:123b894b49dd 769 */
Jerome Coutant 2:123b894b49dd 770 uint8_t AUDIO_IO_Read(uint8_t Addr, uint8_t Reg)
Jerome Coutant 2:123b894b49dd 771 {
Jerome Coutant 2:123b894b49dd 772 uint8_t read_value = 0;
Jerome Coutant 2:123b894b49dd 773
Jerome Coutant 2:123b894b49dd 774 I2C2_ReadMultiple(Addr, (uint16_t) Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1);
Jerome Coutant 2:123b894b49dd 775
Jerome Coutant 2:123b894b49dd 776 return read_value;
Jerome Coutant 2:123b894b49dd 777 }
Jerome Coutant 2:123b894b49dd 778
Jerome Coutant 2:123b894b49dd 779 /**
Jerome Coutant 2:123b894b49dd 780 * @brief AUDIO Codec delay
Jerome Coutant 2:123b894b49dd 781 * @param Delay: Delay in ms
Jerome Coutant 2:123b894b49dd 782 */
Jerome Coutant 2:123b894b49dd 783 void AUDIO_IO_Delay(uint32_t Delay)
Jerome Coutant 2:123b894b49dd 784 {
Jerome Coutant 2:123b894b49dd 785 //HAL_Delay(Delay);
Jerome Coutant 2:123b894b49dd 786 wait_ms(Delay);
Jerome Coutant 2:123b894b49dd 787 }
Jerome Coutant 2:123b894b49dd 788
Jerome Coutant 2:123b894b49dd 789 /******************************** LINK I2C EEPROM *****************************/
Jerome Coutant 2:123b894b49dd 790
Jerome Coutant 2:123b894b49dd 791 /**
Jerome Coutant 2:123b894b49dd 792 * @brief Initializes peripherals used by the I2C EEPROM driver.
Jerome Coutant 2:123b894b49dd 793 */
Jerome Coutant 2:123b894b49dd 794 void EEPROM_IO_Init(void)
Jerome Coutant 2:123b894b49dd 795 {
Jerome Coutant 2:123b894b49dd 796 I2C1_Init();
Jerome Coutant 2:123b894b49dd 797 }
Jerome Coutant 2:123b894b49dd 798
Jerome Coutant 2:123b894b49dd 799 /**
Jerome Coutant 2:123b894b49dd 800 * @brief Write data to I2C EEPROM driver in using DMA channel.
Jerome Coutant 2:123b894b49dd 801 * @param DevAddress: Target device address
Jerome Coutant 2:123b894b49dd 802 * @param MemAddress: Internal memory address
Jerome Coutant 2:123b894b49dd 803 * @param pBuffer: Pointer to data buffer
Jerome Coutant 2:123b894b49dd 804 * @param BufferSize: Amount of data to be sent
Jerome Coutant 2:123b894b49dd 805 * @retval HAL status
Jerome Coutant 2:123b894b49dd 806 */
Jerome Coutant 2:123b894b49dd 807 HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize)
Jerome Coutant 2:123b894b49dd 808 {
Jerome Coutant 2:123b894b49dd 809 return (I2C1_WriteMultiple(DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize));
Jerome Coutant 2:123b894b49dd 810 }
Jerome Coutant 2:123b894b49dd 811
Jerome Coutant 2:123b894b49dd 812 /**
Jerome Coutant 2:123b894b49dd 813 * @brief Read data from I2C EEPROM driver in using DMA channel.
Jerome Coutant 2:123b894b49dd 814 * @param DevAddress: Target device address
Jerome Coutant 2:123b894b49dd 815 * @param MemAddress: Internal memory address
Jerome Coutant 2:123b894b49dd 816 * @param pBuffer: Pointer to data buffer
Jerome Coutant 2:123b894b49dd 817 * @param BufferSize: Amount of data to be read
Jerome Coutant 2:123b894b49dd 818 * @retval HAL status
Jerome Coutant 2:123b894b49dd 819 */
Jerome Coutant 2:123b894b49dd 820 HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize)
Jerome Coutant 2:123b894b49dd 821 {
Jerome Coutant 2:123b894b49dd 822 return (I2C1_ReadMultiple(DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize));
Jerome Coutant 2:123b894b49dd 823 }
Jerome Coutant 2:123b894b49dd 824
Jerome Coutant 2:123b894b49dd 825 /**
Jerome Coutant 2:123b894b49dd 826 * @brief Checks if target device is ready for communication.
Jerome Coutant 2:123b894b49dd 827 * @note This function is used with Memory devices
Jerome Coutant 2:123b894b49dd 828 * @param DevAddress: Target device address
Jerome Coutant 2:123b894b49dd 829 * @param Trials: Number of trials
Jerome Coutant 2:123b894b49dd 830 * @retval HAL status
Jerome Coutant 2:123b894b49dd 831 */
Jerome Coutant 2:123b894b49dd 832 HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials)
Jerome Coutant 2:123b894b49dd 833 {
Jerome Coutant 2:123b894b49dd 834 return (I2C1_IsDeviceReady(DevAddress, Trials));
Jerome Coutant 2:123b894b49dd 835 }
Jerome Coutant 2:123b894b49dd 836
Jerome Coutant 2:123b894b49dd 837 /******************************** LINK TS (TouchScreen) ***********************/
Jerome Coutant 2:123b894b49dd 838
Jerome Coutant 2:123b894b49dd 839 /**
Jerome Coutant 2:123b894b49dd 840 * @brief Initialize I2C communication
Jerome Coutant 2:123b894b49dd 841 * channel from MCU to TouchScreen (TS).
Jerome Coutant 2:123b894b49dd 842 */
Jerome Coutant 2:123b894b49dd 843 void TS_IO_Init(void)
Jerome Coutant 2:123b894b49dd 844 {
Jerome Coutant 2:123b894b49dd 845 I2C1_Init();
Jerome Coutant 2:123b894b49dd 846 }
Jerome Coutant 2:123b894b49dd 847
Jerome Coutant 2:123b894b49dd 848 /**
Jerome Coutant 2:123b894b49dd 849 * @brief Writes single data with I2C communication
Jerome Coutant 2:123b894b49dd 850 * channel from MCU to TouchScreen.
Jerome Coutant 2:123b894b49dd 851 * @param Addr: I2C address
Jerome Coutant 2:123b894b49dd 852 * @param Reg: Register address
Jerome Coutant 2:123b894b49dd 853 * @param Value: Data to be written
Jerome Coutant 2:123b894b49dd 854 */
Jerome Coutant 2:123b894b49dd 855 void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value)
Jerome Coutant 2:123b894b49dd 856 {
Jerome Coutant 2:123b894b49dd 857 I2C1_Write(Addr, Reg, Value);
Jerome Coutant 2:123b894b49dd 858 }
Jerome Coutant 2:123b894b49dd 859
Jerome Coutant 2:123b894b49dd 860 /**
Jerome Coutant 2:123b894b49dd 861 * @brief Reads single data with I2C communication
Jerome Coutant 2:123b894b49dd 862 * channel from TouchScreen.
Jerome Coutant 2:123b894b49dd 863 * @param Addr: I2C address
Jerome Coutant 2:123b894b49dd 864 * @param Reg: Register address
Jerome Coutant 2:123b894b49dd 865 * @retval Read data
Jerome Coutant 2:123b894b49dd 866 */
Jerome Coutant 2:123b894b49dd 867 uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg)
Jerome Coutant 2:123b894b49dd 868 {
Jerome Coutant 2:123b894b49dd 869 return I2C1_Read(Addr, Reg);
Jerome Coutant 2:123b894b49dd 870 }
Jerome Coutant 2:123b894b49dd 871
Jerome Coutant 2:123b894b49dd 872 /**
Jerome Coutant 2:123b894b49dd 873 * @brief Reads multiple data with I2C communication
Jerome Coutant 2:123b894b49dd 874 * channel from TouchScreen.
Jerome Coutant 2:123b894b49dd 875 * @param Addr: I2C address
Jerome Coutant 2:123b894b49dd 876 * @param Reg: Register address
Jerome Coutant 2:123b894b49dd 877 * @param Buffer: Pointer to data buffer
Jerome Coutant 2:123b894b49dd 878 * @param Length: Length of the data
Jerome Coutant 2:123b894b49dd 879 * @retval Number of read data
Jerome Coutant 2:123b894b49dd 880 */
Jerome Coutant 2:123b894b49dd 881 uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length)
Jerome Coutant 2:123b894b49dd 882 {
Jerome Coutant 2:123b894b49dd 883 return I2C1_ReadMultiple(Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length);
Jerome Coutant 2:123b894b49dd 884 }
Jerome Coutant 2:123b894b49dd 885
Jerome Coutant 2:123b894b49dd 886 /**
Jerome Coutant 2:123b894b49dd 887 * @brief Writes multiple data with I2C communication
Jerome Coutant 2:123b894b49dd 888 * channel from MCU to TouchScreen.
Jerome Coutant 2:123b894b49dd 889 * @param Addr: I2C address
Jerome Coutant 2:123b894b49dd 890 * @param Reg: Register address
Jerome Coutant 2:123b894b49dd 891 * @param Buffer: Pointer to data buffer
Jerome Coutant 2:123b894b49dd 892 * @param Length: Length of the data
Jerome Coutant 2:123b894b49dd 893 */
Jerome Coutant 2:123b894b49dd 894 void TS_IO_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length)
Jerome Coutant 2:123b894b49dd 895 {
Jerome Coutant 2:123b894b49dd 896 I2C1_WriteMultiple(Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length);
Jerome Coutant 2:123b894b49dd 897 }
Jerome Coutant 2:123b894b49dd 898
Jerome Coutant 2:123b894b49dd 899 /**
Jerome Coutant 2:123b894b49dd 900 * @brief Delay function used in TouchScreen low level driver.
Jerome Coutant 2:123b894b49dd 901 * @param Delay: Delay in ms
Jerome Coutant 2:123b894b49dd 902 */
Jerome Coutant 2:123b894b49dd 903 void TS_IO_Delay(uint32_t Delay)
Jerome Coutant 2:123b894b49dd 904 {
Jerome Coutant 2:123b894b49dd 905 //HAL_Delay(Delay);
Jerome Coutant 2:123b894b49dd 906 wait_ms(Delay);
Jerome Coutant 2:123b894b49dd 907 }
Jerome Coutant 2:123b894b49dd 908
Jerome Coutant 2:123b894b49dd 909 /**************************** LINK OTM8009A (Display driver) ******************/
Jerome Coutant 2:123b894b49dd 910 /**
Jerome Coutant 2:123b894b49dd 911 * @brief OTM8009A delay
Jerome Coutant 2:123b894b49dd 912 * @param Delay: Delay in ms
Jerome Coutant 2:123b894b49dd 913 */
Jerome Coutant 2:123b894b49dd 914 void OTM8009A_IO_Delay(uint32_t Delay)
Jerome Coutant 2:123b894b49dd 915 {
Jerome Coutant 2:123b894b49dd 916 //HAL_Delay(Delay);
Jerome Coutant 2:123b894b49dd 917 wait_ms(Delay);
Jerome Coutant 2:123b894b49dd 918 }
Jerome Coutant 2:123b894b49dd 919
Jerome Coutant 2:123b894b49dd 920 /**
Jerome Coutant 2:123b894b49dd 921 * @}
Jerome Coutant 2:123b894b49dd 922 */
Jerome Coutant 2:123b894b49dd 923
Jerome Coutant 2:123b894b49dd 924 /**
Jerome Coutant 2:123b894b49dd 925 * @}
Jerome Coutant 2:123b894b49dd 926 */
Jerome Coutant 2:123b894b49dd 927
Jerome Coutant 2:123b894b49dd 928 /**
Jerome Coutant 2:123b894b49dd 929 * @}
Jerome Coutant 2:123b894b49dd 930 */
Jerome Coutant 2:123b894b49dd 931
Jerome Coutant 2:123b894b49dd 932 /**
Jerome Coutant 2:123b894b49dd 933 * @}
Jerome Coutant 2:123b894b49dd 934 */
Jerome Coutant 2:123b894b49dd 935
Jerome Coutant 2:123b894b49dd 936 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/