a

Dependencies:   mbed

Dependents:   a123

Committer:
nam3886
Date:
Mon Jun 10 10:45:06 2019 +0000
Revision:
1:d4da8708dc0a
Parent:
0:d05b765ea94c
12

Who changed what in which revision?

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