Sylvain Letreguilly / Mbed 2 deprecated cpelcddemo

Dependencies:   mbed

Committer:
agemio
Date:
Thu Nov 05 12:53:31 2015 +0000
Revision:
0:14f16771fe40
first commit;

Who changed what in which revision?

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