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