Jonas Gartmann / BSP_DISCO_F429ZI
Committer:
Jerome Coutant
Date:
Tue May 16 10:50:25 2017 +0200
Revision:
1:2371382139dd
Child:
2:53d9067a4feb
Child:
3:9a3c3a4a6198
STM32Cube_FW__ BSP_DISCO_F429ZI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jerome Coutant 1:2371382139dd 1 /**
Jerome Coutant 1:2371382139dd 2 ******************************************************************************
Jerome Coutant 1:2371382139dd 3 * @file stm32f429i_discovery.c
Jerome Coutant 1:2371382139dd 4 * @author MCD Application Team
Jerome Coutant 1:2371382139dd 5 * @version V2.1.5
Jerome Coutant 1:2371382139dd 6 * @date 27-January-2017
Jerome Coutant 1:2371382139dd 7 * @brief This file provides set of firmware functions to manage Leds and
Jerome Coutant 1:2371382139dd 8 * push-button available on STM32F429I-Discovery Kit from STMicroelectronics.
Jerome Coutant 1:2371382139dd 9 ******************************************************************************
Jerome Coutant 1:2371382139dd 10 * @attention
Jerome Coutant 1:2371382139dd 11 *
Jerome Coutant 1:2371382139dd 12 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
Jerome Coutant 1:2371382139dd 13 *
Jerome Coutant 1:2371382139dd 14 * Redistribution and use in source and binary forms, with or without modification,
Jerome Coutant 1:2371382139dd 15 * are permitted provided that the following conditions are met:
Jerome Coutant 1:2371382139dd 16 * 1. Redistributions of source code must retain the above copyright notice,
Jerome Coutant 1:2371382139dd 17 * this list of conditions and the following disclaimer.
Jerome Coutant 1:2371382139dd 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
Jerome Coutant 1:2371382139dd 19 * this list of conditions and the following disclaimer in the documentation
Jerome Coutant 1:2371382139dd 20 * and/or other materials provided with the distribution.
Jerome Coutant 1:2371382139dd 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Jerome Coutant 1:2371382139dd 22 * may be used to endorse or promote products derived from this software
Jerome Coutant 1:2371382139dd 23 * without specific prior written permission.
Jerome Coutant 1:2371382139dd 24 *
Jerome Coutant 1:2371382139dd 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Jerome Coutant 1:2371382139dd 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Jerome Coutant 1:2371382139dd 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Jerome Coutant 1:2371382139dd 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Jerome Coutant 1:2371382139dd 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Jerome Coutant 1:2371382139dd 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Jerome Coutant 1:2371382139dd 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Jerome Coutant 1:2371382139dd 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Jerome Coutant 1:2371382139dd 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Jerome Coutant 1:2371382139dd 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Jerome Coutant 1:2371382139dd 35 *
Jerome Coutant 1:2371382139dd 36 ******************************************************************************
Jerome Coutant 1:2371382139dd 37 */
Jerome Coutant 1:2371382139dd 38
Jerome Coutant 1:2371382139dd 39 /* Includes ------------------------------------------------------------------*/
Jerome Coutant 1:2371382139dd 40 #include "stm32f429i_discovery.h"
Jerome Coutant 1:2371382139dd 41 #include "cmsis_nvic.h" // // Added for mbed
Jerome Coutant 1:2371382139dd 42
Jerome Coutant 1:2371382139dd 43 // Added for mbed. This function replaces HAL_Delay()
Jerome Coutant 1:2371382139dd 44 void wait_ms(int ms);
Jerome Coutant 1:2371382139dd 45
Jerome Coutant 1:2371382139dd 46 /** @defgroup BSP BSP
Jerome Coutant 1:2371382139dd 47 * @{
Jerome Coutant 1:2371382139dd 48 */
Jerome Coutant 1:2371382139dd 49
Jerome Coutant 1:2371382139dd 50 /** @defgroup STM32F429I_DISCOVERY STM32F429I DISCOVERY
Jerome Coutant 1:2371382139dd 51 * @{
Jerome Coutant 1:2371382139dd 52 */
Jerome Coutant 1:2371382139dd 53
Jerome Coutant 1:2371382139dd 54 /** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL STM32F429I DISCOVERY LOW LEVEL
Jerome Coutant 1:2371382139dd 55 * @brief This file provides set of firmware functions to manage Leds and push-button
Jerome Coutant 1:2371382139dd 56 * available on STM32F429I-Discovery Kit from STMicroelectronics.
Jerome Coutant 1:2371382139dd 57 * @{
Jerome Coutant 1:2371382139dd 58 */
Jerome Coutant 1:2371382139dd 59
Jerome Coutant 1:2371382139dd 60 /** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_Private_TypesDefinitions STM32F429I DISCOVERY LOW LEVEL Private TypesDefinitions
Jerome Coutant 1:2371382139dd 61 * @{
Jerome Coutant 1:2371382139dd 62 */
Jerome Coutant 1:2371382139dd 63 /**
Jerome Coutant 1:2371382139dd 64 * @}
Jerome Coutant 1:2371382139dd 65 */
Jerome Coutant 1:2371382139dd 66
Jerome Coutant 1:2371382139dd 67 /** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_Private_Defines STM32F429I DISCOVERY LOW LEVEL Private Defines
Jerome Coutant 1:2371382139dd 68 * @{
Jerome Coutant 1:2371382139dd 69 */
Jerome Coutant 1:2371382139dd 70
Jerome Coutant 1:2371382139dd 71 /**
Jerome Coutant 1:2371382139dd 72 * @brief STM32F429I DISCO BSP Driver version number V2.1.5
Jerome Coutant 1:2371382139dd 73 */
Jerome Coutant 1:2371382139dd 74 #define __STM32F429I_DISCO_BSP_VERSION_MAIN (0x02) /*!< [31:24] main version */
Jerome Coutant 1:2371382139dd 75 #define __STM32F429I_DISCO_BSP_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */
Jerome Coutant 1:2371382139dd 76 #define __STM32F429I_DISCO_BSP_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */
Jerome Coutant 1:2371382139dd 77 #define __STM32F429I_DISCO_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */
Jerome Coutant 1:2371382139dd 78 #define __STM32F429I_DISCO_BSP_VERSION ((__STM32F429I_DISCO_BSP_VERSION_MAIN << 24)\
Jerome Coutant 1:2371382139dd 79 |(__STM32F429I_DISCO_BSP_VERSION_SUB1 << 16)\
Jerome Coutant 1:2371382139dd 80 |(__STM32F429I_DISCO_BSP_VERSION_SUB2 << 8 )\
Jerome Coutant 1:2371382139dd 81 |(__STM32F429I_DISCO_BSP_VERSION_RC))
Jerome Coutant 1:2371382139dd 82 /**
Jerome Coutant 1:2371382139dd 83 * @}
Jerome Coutant 1:2371382139dd 84 */
Jerome Coutant 1:2371382139dd 85
Jerome Coutant 1:2371382139dd 86 /** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_Private_Macros STM32F429I DISCOVERY LOW LEVEL Private Macros
Jerome Coutant 1:2371382139dd 87 * @{
Jerome Coutant 1:2371382139dd 88 */
Jerome Coutant 1:2371382139dd 89 /**
Jerome Coutant 1:2371382139dd 90 * @}
Jerome Coutant 1:2371382139dd 91 */
Jerome Coutant 1:2371382139dd 92
Jerome Coutant 1:2371382139dd 93 /** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_Private_Variables STM32F429I DISCOVERY LOW LEVEL Private Variables
Jerome Coutant 1:2371382139dd 94 * @{
Jerome Coutant 1:2371382139dd 95 */
Jerome Coutant 1:2371382139dd 96 GPIO_TypeDef* GPIO_PORT[LEDn] = {LED3_GPIO_PORT,
Jerome Coutant 1:2371382139dd 97 LED4_GPIO_PORT};
Jerome Coutant 1:2371382139dd 98
Jerome Coutant 1:2371382139dd 99 const uint16_t GPIO_PIN[LEDn] = {LED3_PIN,
Jerome Coutant 1:2371382139dd 100 LED4_PIN};
Jerome Coutant 1:2371382139dd 101
Jerome Coutant 1:2371382139dd 102 GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {KEY_BUTTON_GPIO_PORT};
Jerome Coutant 1:2371382139dd 103 const uint16_t BUTTON_PIN[BUTTONn] = {KEY_BUTTON_PIN};
Jerome Coutant 1:2371382139dd 104 const uint8_t BUTTON_IRQn[BUTTONn] = {KEY_BUTTON_EXTI_IRQn};
Jerome Coutant 1:2371382139dd 105
Jerome Coutant 1:2371382139dd 106 uint32_t I2cxTimeout = I2Cx_TIMEOUT_MAX; /*<! Value of Timeout when I2C communication fails */
Jerome Coutant 1:2371382139dd 107 uint32_t SpixTimeout = SPIx_TIMEOUT_MAX; /*<! Value of Timeout when SPI communication fails */
Jerome Coutant 1:2371382139dd 108
Jerome Coutant 1:2371382139dd 109 I2C_HandleTypeDef EEP_I2cHandle;
Jerome Coutant 1:2371382139dd 110 static SPI_HandleTypeDef SpiHandle;
Jerome Coutant 1:2371382139dd 111 static uint8_t Is_LCD_IO_Initialized = 0;
Jerome Coutant 1:2371382139dd 112
Jerome Coutant 1:2371382139dd 113 /**
Jerome Coutant 1:2371382139dd 114 * @}
Jerome Coutant 1:2371382139dd 115 */
Jerome Coutant 1:2371382139dd 116
Jerome Coutant 1:2371382139dd 117 /** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_Private_FunctionPrototypes STM32F429I DISCOVERY LOW LEVEL Private FunctionPrototypes
Jerome Coutant 1:2371382139dd 118 * @{
Jerome Coutant 1:2371382139dd 119 */
Jerome Coutant 1:2371382139dd 120 /* I2Cx bus function */
Jerome Coutant 1:2371382139dd 121 static void I2Cx_Init(void);
Jerome Coutant 1:2371382139dd 122 static void I2Cx_ITConfig(void);
Jerome Coutant 1:2371382139dd 123 static void I2Cx_WriteData(uint8_t Addr, uint8_t Reg, uint8_t Value);
Jerome Coutant 1:2371382139dd 124 static void I2Cx_WriteBuffer(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length);
Jerome Coutant 1:2371382139dd 125 static uint8_t I2Cx_ReadData(uint8_t Addr, uint8_t Reg);
Jerome Coutant 1:2371382139dd 126 static uint8_t I2Cx_ReadBuffer(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length);
Jerome Coutant 1:2371382139dd 127 static void I2Cx_Error(void);
Jerome Coutant 1:2371382139dd 128 static void I2Cx_MspInit(I2C_HandleTypeDef *hi2c);
Jerome Coutant 1:2371382139dd 129 #ifdef EE_M24LR64
Jerome Coutant 1:2371382139dd 130 static HAL_StatusTypeDef I2Cx_WriteBufferDMA(uint8_t Addr, uint16_t Reg, uint8_t *pBuffer, uint16_t Length);
Jerome Coutant 1:2371382139dd 131 static HAL_StatusTypeDef I2Cx_ReadBufferDMA(uint8_t Addr, uint16_t Reg, uint8_t *pBuffer, uint16_t Length);
Jerome Coutant 1:2371382139dd 132 static HAL_StatusTypeDef I2Cx_IsDeviceReady(uint16_t DevAddress, uint32_t Trials);
Jerome Coutant 1:2371382139dd 133 static void EEPROM_I2C_DMA_TX_IRQHandler(void);
Jerome Coutant 1:2371382139dd 134 static void EEPROM_I2C_DMA_RX_IRQHandler(void);
Jerome Coutant 1:2371382139dd 135 #endif /* EE_M24LR64 */
Jerome Coutant 1:2371382139dd 136
Jerome Coutant 1:2371382139dd 137 /* SPIx bus function */
Jerome Coutant 1:2371382139dd 138 static void SPIx_Init(void);
Jerome Coutant 1:2371382139dd 139 static void SPIx_Write(uint16_t Value);
Jerome Coutant 1:2371382139dd 140 static uint32_t SPIx_Read(uint8_t ReadSize);
Jerome Coutant 1:2371382139dd 141 static uint8_t SPIx_WriteRead(uint8_t Byte);
Jerome Coutant 1:2371382139dd 142 static void SPIx_Error(void);
Jerome Coutant 1:2371382139dd 143 static void SPIx_MspInit(SPI_HandleTypeDef *hspi);
Jerome Coutant 1:2371382139dd 144
Jerome Coutant 1:2371382139dd 145 /* Link function for LCD peripheral */
Jerome Coutant 1:2371382139dd 146 void LCD_IO_Init(void);
Jerome Coutant 1:2371382139dd 147 void LCD_IO_WriteData(uint16_t RegValue);
Jerome Coutant 1:2371382139dd 148 void LCD_IO_WriteReg(uint8_t Reg);
Jerome Coutant 1:2371382139dd 149 uint32_t LCD_IO_ReadData(uint16_t RegValue, uint8_t ReadSize);
Jerome Coutant 1:2371382139dd 150 void LCD_Delay(uint32_t delay);
Jerome Coutant 1:2371382139dd 151
Jerome Coutant 1:2371382139dd 152 /* IOExpander IO functions */
Jerome Coutant 1:2371382139dd 153 void IOE_Init(void);
Jerome Coutant 1:2371382139dd 154 void IOE_ITConfig(void);
Jerome Coutant 1:2371382139dd 155 void IOE_Delay(uint32_t Delay);
Jerome Coutant 1:2371382139dd 156 void IOE_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
Jerome Coutant 1:2371382139dd 157 uint8_t IOE_Read(uint8_t Addr, uint8_t Reg);
Jerome Coutant 1:2371382139dd 158 uint16_t IOE_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length);
Jerome Coutant 1:2371382139dd 159 void IOE_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length);
Jerome Coutant 1:2371382139dd 160
Jerome Coutant 1:2371382139dd 161 /* Link function for GYRO peripheral */
Jerome Coutant 1:2371382139dd 162 void GYRO_IO_Init(void);
Jerome Coutant 1:2371382139dd 163 void GYRO_IO_Write(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite);
Jerome Coutant 1:2371382139dd 164 void GYRO_IO_Read(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead);
Jerome Coutant 1:2371382139dd 165
Jerome Coutant 1:2371382139dd 166 #ifdef EE_M24LR64
Jerome Coutant 1:2371382139dd 167 /* Link function for I2C EEPROM peripheral */
Jerome Coutant 1:2371382139dd 168 void EEPROM_IO_Init(void);
Jerome Coutant 1:2371382139dd 169 HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
Jerome Coutant 1:2371382139dd 170 HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
Jerome Coutant 1:2371382139dd 171 HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials);
Jerome Coutant 1:2371382139dd 172 #endif /* EE_M24LR64 */
Jerome Coutant 1:2371382139dd 173
Jerome Coutant 1:2371382139dd 174 /**
Jerome Coutant 1:2371382139dd 175 * @}
Jerome Coutant 1:2371382139dd 176 */
Jerome Coutant 1:2371382139dd 177
Jerome Coutant 1:2371382139dd 178 /** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_Private_Functions STM32F429I DISCOVERY LOW LEVEL Private Functions
Jerome Coutant 1:2371382139dd 179 * @{
Jerome Coutant 1:2371382139dd 180 */
Jerome Coutant 1:2371382139dd 181
Jerome Coutant 1:2371382139dd 182 /**
Jerome Coutant 1:2371382139dd 183 * @brief This method returns the STM32F429I DISCO BSP Driver revision
Jerome Coutant 1:2371382139dd 184 * @retval version: 0xXYZR (8bits for each decimal, R for RC)
Jerome Coutant 1:2371382139dd 185 */
Jerome Coutant 1:2371382139dd 186 uint32_t BSP_GetVersion(void)
Jerome Coutant 1:2371382139dd 187 {
Jerome Coutant 1:2371382139dd 188 return __STM32F429I_DISCO_BSP_VERSION;
Jerome Coutant 1:2371382139dd 189 }
Jerome Coutant 1:2371382139dd 190
Jerome Coutant 1:2371382139dd 191 /**
Jerome Coutant 1:2371382139dd 192 * @brief Configures LED GPIO.
Jerome Coutant 1:2371382139dd 193 * @param Led: Specifies the Led to be configured.
Jerome Coutant 1:2371382139dd 194 * This parameter can be one of following parameters:
Jerome Coutant 1:2371382139dd 195 * @arg LED3
Jerome Coutant 1:2371382139dd 196 * @arg LED4
Jerome Coutant 1:2371382139dd 197 */
Jerome Coutant 1:2371382139dd 198 void BSP_LED_Init(Led_TypeDef Led)
Jerome Coutant 1:2371382139dd 199 {
Jerome Coutant 1:2371382139dd 200 GPIO_InitTypeDef GPIO_InitStruct;
Jerome Coutant 1:2371382139dd 201
Jerome Coutant 1:2371382139dd 202 /* Enable the GPIO_LED Clock */
Jerome Coutant 1:2371382139dd 203 LEDx_GPIO_CLK_ENABLE(Led);
Jerome Coutant 1:2371382139dd 204
Jerome Coutant 1:2371382139dd 205 /* Configure the GPIO_LED pin */
Jerome Coutant 1:2371382139dd 206 GPIO_InitStruct.Pin = GPIO_PIN[Led];
Jerome Coutant 1:2371382139dd 207 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
Jerome Coutant 1:2371382139dd 208 GPIO_InitStruct.Pull = GPIO_PULLUP;
Jerome Coutant 1:2371382139dd 209 GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
Jerome Coutant 1:2371382139dd 210
Jerome Coutant 1:2371382139dd 211 HAL_GPIO_Init(GPIO_PORT[Led], &GPIO_InitStruct);
Jerome Coutant 1:2371382139dd 212
Jerome Coutant 1:2371382139dd 213 HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET);
Jerome Coutant 1:2371382139dd 214 }
Jerome Coutant 1:2371382139dd 215
Jerome Coutant 1:2371382139dd 216 /**
Jerome Coutant 1:2371382139dd 217 * @brief Turns selected LED On.
Jerome Coutant 1:2371382139dd 218 * @param Led: Specifies the Led to be set on.
Jerome Coutant 1:2371382139dd 219 * This parameter can be one of following parameters:
Jerome Coutant 1:2371382139dd 220 * @arg LED3
Jerome Coutant 1:2371382139dd 221 * @arg LED4
Jerome Coutant 1:2371382139dd 222 */
Jerome Coutant 1:2371382139dd 223 void BSP_LED_On(Led_TypeDef Led)
Jerome Coutant 1:2371382139dd 224 {
Jerome Coutant 1:2371382139dd 225 HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET);
Jerome Coutant 1:2371382139dd 226 }
Jerome Coutant 1:2371382139dd 227
Jerome Coutant 1:2371382139dd 228 /**
Jerome Coutant 1:2371382139dd 229 * @brief Turns selected LED Off.
Jerome Coutant 1:2371382139dd 230 * @param Led: Specifies the Led to be set off.
Jerome Coutant 1:2371382139dd 231 * This parameter can be one of following parameters:
Jerome Coutant 1:2371382139dd 232 * @arg LED3
Jerome Coutant 1:2371382139dd 233 * @arg LED4
Jerome Coutant 1:2371382139dd 234 */
Jerome Coutant 1:2371382139dd 235 void BSP_LED_Off(Led_TypeDef Led)
Jerome Coutant 1:2371382139dd 236 {
Jerome Coutant 1:2371382139dd 237 HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET);
Jerome Coutant 1:2371382139dd 238 }
Jerome Coutant 1:2371382139dd 239
Jerome Coutant 1:2371382139dd 240 /**
Jerome Coutant 1:2371382139dd 241 * @brief Toggles the selected LED.
Jerome Coutant 1:2371382139dd 242 * @param Led: Specifies the Led to be toggled.
Jerome Coutant 1:2371382139dd 243 * This parameter can be one of following parameters:
Jerome Coutant 1:2371382139dd 244 * @arg LED3
Jerome Coutant 1:2371382139dd 245 * @arg LED4
Jerome Coutant 1:2371382139dd 246 */
Jerome Coutant 1:2371382139dd 247 void BSP_LED_Toggle(Led_TypeDef Led)
Jerome Coutant 1:2371382139dd 248 {
Jerome Coutant 1:2371382139dd 249 HAL_GPIO_TogglePin(GPIO_PORT[Led], GPIO_PIN[Led]);
Jerome Coutant 1:2371382139dd 250 }
Jerome Coutant 1:2371382139dd 251
Jerome Coutant 1:2371382139dd 252 /**
Jerome Coutant 1:2371382139dd 253 * @brief Configures Button GPIO and EXTI Line.
Jerome Coutant 1:2371382139dd 254 * @param Button: Specifies the Button to be configured.
Jerome Coutant 1:2371382139dd 255 * This parameter should be: BUTTON_KEY
Jerome Coutant 1:2371382139dd 256 * @param ButtonMode: Specifies Button mode.
Jerome Coutant 1:2371382139dd 257 * This parameter can be one of following parameters:
Jerome Coutant 1:2371382139dd 258 * @arg BUTTON_MODE_GPIO: Button will be used as simple IO
Jerome Coutant 1:2371382139dd 259 * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt
Jerome Coutant 1:2371382139dd 260 * generation capability
Jerome Coutant 1:2371382139dd 261 */
Jerome Coutant 1:2371382139dd 262 void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode)
Jerome Coutant 1:2371382139dd 263 {
Jerome Coutant 1:2371382139dd 264 GPIO_InitTypeDef GPIO_InitStruct;
Jerome Coutant 1:2371382139dd 265
Jerome Coutant 1:2371382139dd 266 /* Enable the BUTTON Clock */
Jerome Coutant 1:2371382139dd 267 BUTTONx_GPIO_CLK_ENABLE(Button);
Jerome Coutant 1:2371382139dd 268
Jerome Coutant 1:2371382139dd 269 if (ButtonMode == BUTTON_MODE_GPIO)
Jerome Coutant 1:2371382139dd 270 {
Jerome Coutant 1:2371382139dd 271 /* Configure Button pin as input */
Jerome Coutant 1:2371382139dd 272 GPIO_InitStruct.Pin = BUTTON_PIN[Button];
Jerome Coutant 1:2371382139dd 273 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
Jerome Coutant 1:2371382139dd 274 GPIO_InitStruct.Pull = GPIO_PULLDOWN;
Jerome Coutant 1:2371382139dd 275 GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
Jerome Coutant 1:2371382139dd 276 HAL_GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStruct);
Jerome Coutant 1:2371382139dd 277 }
Jerome Coutant 1:2371382139dd 278
Jerome Coutant 1:2371382139dd 279 if (ButtonMode == BUTTON_MODE_EXTI)
Jerome Coutant 1:2371382139dd 280 {
Jerome Coutant 1:2371382139dd 281 /* Configure Button pin as input with External interrupt */
Jerome Coutant 1:2371382139dd 282 GPIO_InitStruct.Pin = BUTTON_PIN[Button];
Jerome Coutant 1:2371382139dd 283 GPIO_InitStruct.Pull = GPIO_NOPULL;
Jerome Coutant 1:2371382139dd 284 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
Jerome Coutant 1:2371382139dd 285 HAL_GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStruct);
Jerome Coutant 1:2371382139dd 286
Jerome Coutant 1:2371382139dd 287 /* Enable and set Button EXTI Interrupt to the lowest priority */
Jerome Coutant 1:2371382139dd 288 HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00);
Jerome Coutant 1:2371382139dd 289 HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button]));
Jerome Coutant 1:2371382139dd 290 }
Jerome Coutant 1:2371382139dd 291 }
Jerome Coutant 1:2371382139dd 292
Jerome Coutant 1:2371382139dd 293 /**
Jerome Coutant 1:2371382139dd 294 * @brief Returns the selected Button state.
Jerome Coutant 1:2371382139dd 295 * @param Button: Specifies the Button to be checked.
Jerome Coutant 1:2371382139dd 296 * This parameter should be: BUTTON_KEY
Jerome Coutant 1:2371382139dd 297 * @retval The Button GPIO pin value.
Jerome Coutant 1:2371382139dd 298 */
Jerome Coutant 1:2371382139dd 299 uint32_t BSP_PB_GetState(Button_TypeDef Button)
Jerome Coutant 1:2371382139dd 300 {
Jerome Coutant 1:2371382139dd 301 return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]);
Jerome Coutant 1:2371382139dd 302 }
Jerome Coutant 1:2371382139dd 303
Jerome Coutant 1:2371382139dd 304 /*******************************************************************************
Jerome Coutant 1:2371382139dd 305 BUS OPERATIONS
Jerome Coutant 1:2371382139dd 306 *******************************************************************************/
Jerome Coutant 1:2371382139dd 307
Jerome Coutant 1:2371382139dd 308 /******************************* I2C Routines *********************************/
Jerome Coutant 1:2371382139dd 309
Jerome Coutant 1:2371382139dd 310 /**
Jerome Coutant 1:2371382139dd 311 * @brief I2Cx MSP Initialization
Jerome Coutant 1:2371382139dd 312 * @param hi2c: I2C handle
Jerome Coutant 1:2371382139dd 313 */
Jerome Coutant 1:2371382139dd 314 static void I2Cx_MspInit(I2C_HandleTypeDef *hi2c)
Jerome Coutant 1:2371382139dd 315 {
Jerome Coutant 1:2371382139dd 316 GPIO_InitTypeDef GPIO_InitStruct;
Jerome Coutant 1:2371382139dd 317 #ifdef EE_M24LR64
Jerome Coutant 1:2371382139dd 318 static DMA_HandleTypeDef hdma_tx;
Jerome Coutant 1:2371382139dd 319 static DMA_HandleTypeDef hdma_rx;
Jerome Coutant 1:2371382139dd 320
Jerome Coutant 1:2371382139dd 321 I2C_HandleTypeDef* pI2cHandle;
Jerome Coutant 1:2371382139dd 322 pI2cHandle = &EEP_I2cHandle;
Jerome Coutant 1:2371382139dd 323 #endif /* EE_M24LR64 */
Jerome Coutant 1:2371382139dd 324
Jerome Coutant 1:2371382139dd 325 if (hi2c->Instance == DISCOVERY_I2Cx)
Jerome Coutant 1:2371382139dd 326 {
Jerome Coutant 1:2371382139dd 327 /* Configure the GPIOs ---------------------------------------------------*/
Jerome Coutant 1:2371382139dd 328 /* Enable GPIO clock */
Jerome Coutant 1:2371382139dd 329 DISCOVERY_I2Cx_SDA_GPIO_CLK_ENABLE();
Jerome Coutant 1:2371382139dd 330 DISCOVERY_I2Cx_SCL_GPIO_CLK_ENABLE();
Jerome Coutant 1:2371382139dd 331
Jerome Coutant 1:2371382139dd 332 /* Configure I2C Tx as alternate function */
Jerome Coutant 1:2371382139dd 333 GPIO_InitStruct.Pin = DISCOVERY_I2Cx_SCL_PIN;
Jerome Coutant 1:2371382139dd 334 GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
Jerome Coutant 1:2371382139dd 335 GPIO_InitStruct.Pull = GPIO_NOPULL;
Jerome Coutant 1:2371382139dd 336 GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
Jerome Coutant 1:2371382139dd 337 GPIO_InitStruct.Alternate = DISCOVERY_I2Cx_SCL_SDA_AF;
Jerome Coutant 1:2371382139dd 338 HAL_GPIO_Init(DISCOVERY_I2Cx_SCL_GPIO_PORT, &GPIO_InitStruct);
Jerome Coutant 1:2371382139dd 339
Jerome Coutant 1:2371382139dd 340 /* Configure I2C Rx as alternate function */
Jerome Coutant 1:2371382139dd 341 GPIO_InitStruct.Pin = DISCOVERY_I2Cx_SDA_PIN;
Jerome Coutant 1:2371382139dd 342 HAL_GPIO_Init(DISCOVERY_I2Cx_SDA_GPIO_PORT, &GPIO_InitStruct);
Jerome Coutant 1:2371382139dd 343
Jerome Coutant 1:2371382139dd 344
Jerome Coutant 1:2371382139dd 345 /* Configure the Discovery I2Cx peripheral -------------------------------*/
Jerome Coutant 1:2371382139dd 346 /* Enable I2C3 clock */
Jerome Coutant 1:2371382139dd 347 DISCOVERY_I2Cx_CLOCK_ENABLE();
Jerome Coutant 1:2371382139dd 348
Jerome Coutant 1:2371382139dd 349 /* Force the I2C Peripheral Clock Reset */
Jerome Coutant 1:2371382139dd 350 DISCOVERY_I2Cx_FORCE_RESET();
Jerome Coutant 1:2371382139dd 351
Jerome Coutant 1:2371382139dd 352 /* Release the I2C Peripheral Clock Reset */
Jerome Coutant 1:2371382139dd 353 DISCOVERY_I2Cx_RELEASE_RESET();
Jerome Coutant 1:2371382139dd 354
Jerome Coutant 1:2371382139dd 355 /* Enable and set Discovery I2Cx Interrupt to the lowest priority */
Jerome Coutant 1:2371382139dd 356 HAL_NVIC_SetPriority(DISCOVERY_I2Cx_EV_IRQn, 0x0F, 0);
Jerome Coutant 1:2371382139dd 357 HAL_NVIC_EnableIRQ(DISCOVERY_I2Cx_EV_IRQn);
Jerome Coutant 1:2371382139dd 358
Jerome Coutant 1:2371382139dd 359 /* Enable and set Discovery I2Cx Interrupt to the lowest priority */
Jerome Coutant 1:2371382139dd 360 HAL_NVIC_SetPriority(DISCOVERY_I2Cx_ER_IRQn, 0x0F, 0);
Jerome Coutant 1:2371382139dd 361 HAL_NVIC_EnableIRQ(DISCOVERY_I2Cx_ER_IRQn);
Jerome Coutant 1:2371382139dd 362
Jerome Coutant 1:2371382139dd 363 #ifdef EE_M24LR64
Jerome Coutant 1:2371382139dd 364 /* I2C DMA TX and RX channels configuration */
Jerome Coutant 1:2371382139dd 365 /* Enable the DMA clock */
Jerome Coutant 1:2371382139dd 366 EEPROM_I2C_DMA_CLK_ENABLE();
Jerome Coutant 1:2371382139dd 367
Jerome Coutant 1:2371382139dd 368 /* Configure the DMA stream for the EE I2C peripheral TX direction */
Jerome Coutant 1:2371382139dd 369 /* Configure the DMA Stream */
Jerome Coutant 1:2371382139dd 370 hdma_tx.Instance = EEPROM_I2C_DMA_STREAM_TX;
Jerome Coutant 1:2371382139dd 371 /* Set the parameters to be configured */
Jerome Coutant 1:2371382139dd 372 hdma_tx.Init.Channel = EEPROM_I2C_DMA_CHANNEL;
Jerome Coutant 1:2371382139dd 373 hdma_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
Jerome Coutant 1:2371382139dd 374 hdma_tx.Init.PeriphInc = DMA_PINC_DISABLE;
Jerome Coutant 1:2371382139dd 375 hdma_tx.Init.MemInc = DMA_MINC_ENABLE;
Jerome Coutant 1:2371382139dd 376 hdma_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
Jerome Coutant 1:2371382139dd 377 hdma_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
Jerome Coutant 1:2371382139dd 378 hdma_tx.Init.Mode = DMA_NORMAL;
Jerome Coutant 1:2371382139dd 379 hdma_tx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
Jerome Coutant 1:2371382139dd 380 hdma_tx.Init.FIFOMode = DMA_FIFOMODE_ENABLE;
Jerome Coutant 1:2371382139dd 381 hdma_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
Jerome Coutant 1:2371382139dd 382 hdma_tx.Init.MemBurst = DMA_MBURST_SINGLE;
Jerome Coutant 1:2371382139dd 383 hdma_tx.Init.PeriphBurst = DMA_PBURST_SINGLE;
Jerome Coutant 1:2371382139dd 384
Jerome Coutant 1:2371382139dd 385 /* Associate the initilalized hdma_tx handle to the the pI2cHandle handle */
Jerome Coutant 1:2371382139dd 386 __HAL_LINKDMA(pI2cHandle, hdmatx, hdma_tx);
Jerome Coutant 1:2371382139dd 387
Jerome Coutant 1:2371382139dd 388 /* Configure the DMA Stream */
Jerome Coutant 1:2371382139dd 389 HAL_DMA_Init(&hdma_tx);
Jerome Coutant 1:2371382139dd 390
Jerome Coutant 1:2371382139dd 391 // Added for mbed
Jerome Coutant 1:2371382139dd 392 /* Configure and enable I2C DMA TX Channel interrupt */
Jerome Coutant 1:2371382139dd 393 //HAL_NVIC_SetPriority((IRQn_Type)(EEPROM_I2C_DMA_TX_IRQn), EEPROM_I2C_DMA_PREPRIO, 0);
Jerome Coutant 1:2371382139dd 394 //HAL_NVIC_EnableIRQ((IRQn_Type)(EEPROM_I2C_DMA_TX_IRQn));
Jerome Coutant 1:2371382139dd 395 // Enable interrupt
Jerome Coutant 1:2371382139dd 396 IRQn_Type irqn = (IRQn_Type)(EEPROM_I2C_DMA_TX_IRQn);
Jerome Coutant 1:2371382139dd 397 NVIC_ClearPendingIRQ(irqn);
Jerome Coutant 1:2371382139dd 398 NVIC_DisableIRQ(irqn);
Jerome Coutant 1:2371382139dd 399 NVIC_SetPriority(irqn, EEPROM_I2C_DMA_PREPRIO);
Jerome Coutant 1:2371382139dd 400 NVIC_SetVector(irqn, (uint32_t)EEPROM_I2C_DMA_TX_IRQHandler);
Jerome Coutant 1:2371382139dd 401 NVIC_EnableIRQ(irqn);
Jerome Coutant 1:2371382139dd 402
Jerome Coutant 1:2371382139dd 403 /* Configure the DMA stream for the EE I2C peripheral TX direction */
Jerome Coutant 1:2371382139dd 404 /* Configure the DMA Stream */
Jerome Coutant 1:2371382139dd 405 hdma_rx.Instance = EEPROM_I2C_DMA_STREAM_RX;
Jerome Coutant 1:2371382139dd 406 /* Set the parameters to be configured */
Jerome Coutant 1:2371382139dd 407 hdma_rx.Init.Channel = EEPROM_I2C_DMA_CHANNEL;
Jerome Coutant 1:2371382139dd 408 hdma_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
Jerome Coutant 1:2371382139dd 409 hdma_rx.Init.PeriphInc = DMA_PINC_DISABLE;
Jerome Coutant 1:2371382139dd 410 hdma_rx.Init.MemInc = DMA_MINC_ENABLE;
Jerome Coutant 1:2371382139dd 411 hdma_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
Jerome Coutant 1:2371382139dd 412 hdma_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
Jerome Coutant 1:2371382139dd 413 hdma_rx.Init.Mode = DMA_NORMAL;
Jerome Coutant 1:2371382139dd 414 hdma_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
Jerome Coutant 1:2371382139dd 415 hdma_rx.Init.FIFOMode = DMA_FIFOMODE_ENABLE;
Jerome Coutant 1:2371382139dd 416 hdma_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
Jerome Coutant 1:2371382139dd 417 hdma_rx.Init.MemBurst = DMA_MBURST_SINGLE;
Jerome Coutant 1:2371382139dd 418 hdma_rx.Init.PeriphBurst = DMA_PBURST_SINGLE;
Jerome Coutant 1:2371382139dd 419
Jerome Coutant 1:2371382139dd 420 /* Associate the initilalized hdma_rx handle to the the pI2cHandle handle*/
Jerome Coutant 1:2371382139dd 421 __HAL_LINKDMA(pI2cHandle, hdmarx, hdma_rx);
Jerome Coutant 1:2371382139dd 422
Jerome Coutant 1:2371382139dd 423 /* Configure the DMA Stream */
Jerome Coutant 1:2371382139dd 424 HAL_DMA_Init(&hdma_rx);
Jerome Coutant 1:2371382139dd 425
Jerome Coutant 1:2371382139dd 426 // Added for mbed
Jerome Coutant 1:2371382139dd 427 /* Configure and enable I2C DMA RX Channel interrupt */
Jerome Coutant 1:2371382139dd 428 //HAL_NVIC_SetPriority((IRQn_Type)(EEPROM_I2C_DMA_RX_IRQn), EEPROM_I2C_DMA_PREPRIO, 0);
Jerome Coutant 1:2371382139dd 429 //HAL_NVIC_EnableIRQ((IRQn_Type)(EEPROM_I2C_DMA_RX_IRQn));
Jerome Coutant 1:2371382139dd 430 // Enable interrupt
Jerome Coutant 1:2371382139dd 431 irqn = (IRQn_Type)(EEPROM_I2C_DMA_RX_IRQn);
Jerome Coutant 1:2371382139dd 432 NVIC_ClearPendingIRQ(irqn);
Jerome Coutant 1:2371382139dd 433 NVIC_DisableIRQ(irqn);
Jerome Coutant 1:2371382139dd 434 NVIC_SetPriority(irqn, EEPROM_I2C_DMA_PREPRIO);
Jerome Coutant 1:2371382139dd 435 NVIC_SetVector(irqn, (uint32_t)EEPROM_I2C_DMA_RX_IRQHandler);
Jerome Coutant 1:2371382139dd 436 NVIC_EnableIRQ(irqn);
Jerome Coutant 1:2371382139dd 437
Jerome Coutant 1:2371382139dd 438 #endif /* EE_M24LR64 */
Jerome Coutant 1:2371382139dd 439 }
Jerome Coutant 1:2371382139dd 440 }
Jerome Coutant 1:2371382139dd 441
Jerome Coutant 1:2371382139dd 442 /**
Jerome Coutant 1:2371382139dd 443 * @brief I2Cx Bus initialization.
Jerome Coutant 1:2371382139dd 444 */
Jerome Coutant 1:2371382139dd 445 static void I2Cx_Init(void)
Jerome Coutant 1:2371382139dd 446 {
Jerome Coutant 1:2371382139dd 447 if(HAL_I2C_GetState(&EEP_I2cHandle) == HAL_I2C_STATE_RESET)
Jerome Coutant 1:2371382139dd 448 {
Jerome Coutant 1:2371382139dd 449 EEP_I2cHandle.Instance = DISCOVERY_I2Cx;
Jerome Coutant 1:2371382139dd 450 EEP_I2cHandle.Init.ClockSpeed = BSP_I2C_SPEED;
Jerome Coutant 1:2371382139dd 451 EEP_I2cHandle.Init.DutyCycle = I2C_DUTYCYCLE_2;
Jerome Coutant 1:2371382139dd 452 EEP_I2cHandle.Init.OwnAddress1 = 0;
Jerome Coutant 1:2371382139dd 453 EEP_I2cHandle.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
Jerome Coutant 1:2371382139dd 454 EEP_I2cHandle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED;
Jerome Coutant 1:2371382139dd 455 EEP_I2cHandle.Init.OwnAddress2 = 0;
Jerome Coutant 1:2371382139dd 456 EEP_I2cHandle.Init.GeneralCallMode = I2C_GENERALCALL_DISABLED;
Jerome Coutant 1:2371382139dd 457 EEP_I2cHandle.Init.NoStretchMode = I2C_NOSTRETCH_DISABLED;
Jerome Coutant 1:2371382139dd 458
Jerome Coutant 1:2371382139dd 459 /* Init the I2C */
Jerome Coutant 1:2371382139dd 460 I2Cx_MspInit(&EEP_I2cHandle);
Jerome Coutant 1:2371382139dd 461 HAL_I2C_Init(&EEP_I2cHandle);
Jerome Coutant 1:2371382139dd 462 }
Jerome Coutant 1:2371382139dd 463 }
Jerome Coutant 1:2371382139dd 464
Jerome Coutant 1:2371382139dd 465 /**
Jerome Coutant 1:2371382139dd 466 * @brief Configures Interruption pin for I2C communication.
Jerome Coutant 1:2371382139dd 467 */
Jerome Coutant 1:2371382139dd 468 static void I2Cx_ITConfig(void)
Jerome Coutant 1:2371382139dd 469 {
Jerome Coutant 1:2371382139dd 470 GPIO_InitTypeDef GPIO_InitStruct;
Jerome Coutant 1:2371382139dd 471
Jerome Coutant 1:2371382139dd 472 /* Enable the GPIO EXTI Clock */
Jerome Coutant 1:2371382139dd 473 STMPE811_INT_CLK_ENABLE();
Jerome Coutant 1:2371382139dd 474
Jerome Coutant 1:2371382139dd 475 GPIO_InitStruct.Pin = STMPE811_INT_PIN;
Jerome Coutant 1:2371382139dd 476 GPIO_InitStruct.Pull = GPIO_PULLUP;
Jerome Coutant 1:2371382139dd 477 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
Jerome Coutant 1:2371382139dd 478 GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
Jerome Coutant 1:2371382139dd 479 HAL_GPIO_Init(STMPE811_INT_GPIO_PORT, &GPIO_InitStruct);
Jerome Coutant 1:2371382139dd 480
Jerome Coutant 1:2371382139dd 481 /* Enable and set GPIO EXTI Interrupt to the highest priority */
Jerome Coutant 1:2371382139dd 482 HAL_NVIC_SetPriority((IRQn_Type)(STMPE811_INT_EXTI), 0x0F, 0x00);
Jerome Coutant 1:2371382139dd 483 HAL_NVIC_EnableIRQ((IRQn_Type)(STMPE811_INT_EXTI));
Jerome Coutant 1:2371382139dd 484 }
Jerome Coutant 1:2371382139dd 485
Jerome Coutant 1:2371382139dd 486 /**
Jerome Coutant 1:2371382139dd 487 * @brief Writes a value in a register of the device through BUS.
Jerome Coutant 1:2371382139dd 488 * @param Addr: Device address on BUS Bus.
Jerome Coutant 1:2371382139dd 489 * @param Reg: The target register address to write
Jerome Coutant 1:2371382139dd 490 * @param Value: The target register value to be written
Jerome Coutant 1:2371382139dd 491 */
Jerome Coutant 1:2371382139dd 492 static void I2Cx_WriteData(uint8_t Addr, uint8_t Reg, uint8_t Value)
Jerome Coutant 1:2371382139dd 493 {
Jerome Coutant 1:2371382139dd 494 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 1:2371382139dd 495
Jerome Coutant 1:2371382139dd 496 status = HAL_I2C_Mem_Write(&EEP_I2cHandle, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, &Value, 1, I2cxTimeout);
Jerome Coutant 1:2371382139dd 497
Jerome Coutant 1:2371382139dd 498 /* Check the communication status */
Jerome Coutant 1:2371382139dd 499 if(status != HAL_OK)
Jerome Coutant 1:2371382139dd 500 {
Jerome Coutant 1:2371382139dd 501 /* Re-Initialize the BUS */
Jerome Coutant 1:2371382139dd 502 I2Cx_Error();
Jerome Coutant 1:2371382139dd 503 }
Jerome Coutant 1:2371382139dd 504 }
Jerome Coutant 1:2371382139dd 505
Jerome Coutant 1:2371382139dd 506 /**
Jerome Coutant 1:2371382139dd 507 * @brief Writes a value in a register of the device through BUS.
Jerome Coutant 1:2371382139dd 508 * @param Addr: Device address on BUS Bus.
Jerome Coutant 1:2371382139dd 509 * @param Reg: The target register address to write
Jerome Coutant 1:2371382139dd 510 * @param pBuffer: The target register value to be written
Jerome Coutant 1:2371382139dd 511 * @param Length: buffer size to be written
Jerome Coutant 1:2371382139dd 512 */
Jerome Coutant 1:2371382139dd 513 static void I2Cx_WriteBuffer(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length)
Jerome Coutant 1:2371382139dd 514 {
Jerome Coutant 1:2371382139dd 515 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 1:2371382139dd 516
Jerome Coutant 1:2371382139dd 517 status = HAL_I2C_Mem_Write(&EEP_I2cHandle, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, pBuffer, Length, I2cxTimeout);
Jerome Coutant 1:2371382139dd 518
Jerome Coutant 1:2371382139dd 519 /* Check the communication status */
Jerome Coutant 1:2371382139dd 520 if(status != HAL_OK)
Jerome Coutant 1:2371382139dd 521 {
Jerome Coutant 1:2371382139dd 522 /* Re-Initialize the BUS */
Jerome Coutant 1:2371382139dd 523 I2Cx_Error();
Jerome Coutant 1:2371382139dd 524 }
Jerome Coutant 1:2371382139dd 525 }
Jerome Coutant 1:2371382139dd 526
Jerome Coutant 1:2371382139dd 527 /**
Jerome Coutant 1:2371382139dd 528 * @brief Reads a register of the device through BUS.
Jerome Coutant 1:2371382139dd 529 * @param Addr: Device address on BUS Bus.
Jerome Coutant 1:2371382139dd 530 * @param Reg: The target register address to write
Jerome Coutant 1:2371382139dd 531 * @retval Data read at register address
Jerome Coutant 1:2371382139dd 532 */
Jerome Coutant 1:2371382139dd 533 static uint8_t I2Cx_ReadData(uint8_t Addr, uint8_t Reg)
Jerome Coutant 1:2371382139dd 534 {
Jerome Coutant 1:2371382139dd 535 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 1:2371382139dd 536 uint8_t value = 0;
Jerome Coutant 1:2371382139dd 537
Jerome Coutant 1:2371382139dd 538 status = HAL_I2C_Mem_Read(&EEP_I2cHandle, Addr, Reg, I2C_MEMADD_SIZE_8BIT, &value, 1, I2cxTimeout);
Jerome Coutant 1:2371382139dd 539
Jerome Coutant 1:2371382139dd 540 /* Check the communication status */
Jerome Coutant 1:2371382139dd 541 if(status != HAL_OK)
Jerome Coutant 1:2371382139dd 542 {
Jerome Coutant 1:2371382139dd 543 /* Re-Initialize the BUS */
Jerome Coutant 1:2371382139dd 544 I2Cx_Error();
Jerome Coutant 1:2371382139dd 545
Jerome Coutant 1:2371382139dd 546 }
Jerome Coutant 1:2371382139dd 547 return value;
Jerome Coutant 1:2371382139dd 548 }
Jerome Coutant 1:2371382139dd 549
Jerome Coutant 1:2371382139dd 550 /**
Jerome Coutant 1:2371382139dd 551 * @brief Reads multiple data on the BUS.
Jerome Coutant 1:2371382139dd 552 * @param Addr: I2C Address
Jerome Coutant 1:2371382139dd 553 * @param Reg: Reg Address
Jerome Coutant 1:2371382139dd 554 * @param pBuffer: pointer to read data buffer
Jerome Coutant 1:2371382139dd 555 * @param Length: length of the data
Jerome Coutant 1:2371382139dd 556 * @retval 0 if no problems to read multiple data
Jerome Coutant 1:2371382139dd 557 */
Jerome Coutant 1:2371382139dd 558 static uint8_t I2Cx_ReadBuffer(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length)
Jerome Coutant 1:2371382139dd 559 {
Jerome Coutant 1:2371382139dd 560 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 1:2371382139dd 561
Jerome Coutant 1:2371382139dd 562 status = HAL_I2C_Mem_Read(&EEP_I2cHandle, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, pBuffer, Length, I2cxTimeout);
Jerome Coutant 1:2371382139dd 563
Jerome Coutant 1:2371382139dd 564 /* Check the communication status */
Jerome Coutant 1:2371382139dd 565 if(status == HAL_OK)
Jerome Coutant 1:2371382139dd 566 {
Jerome Coutant 1:2371382139dd 567 return 0;
Jerome Coutant 1:2371382139dd 568 }
Jerome Coutant 1:2371382139dd 569 else
Jerome Coutant 1:2371382139dd 570 {
Jerome Coutant 1:2371382139dd 571 /* Re-Initialize the BUS */
Jerome Coutant 1:2371382139dd 572 I2Cx_Error();
Jerome Coutant 1:2371382139dd 573
Jerome Coutant 1:2371382139dd 574 return 1;
Jerome Coutant 1:2371382139dd 575 }
Jerome Coutant 1:2371382139dd 576 }
Jerome Coutant 1:2371382139dd 577
Jerome Coutant 1:2371382139dd 578 #ifdef EE_M24LR64
Jerome Coutant 1:2371382139dd 579 /**
Jerome Coutant 1:2371382139dd 580 * @brief Writes a value in a register of the device through BUS in using DMA mode.
Jerome Coutant 1:2371382139dd 581 * @param Addr: Device address on BUS Bus.
Jerome Coutant 1:2371382139dd 582 * @param Reg: The target register address to write
Jerome Coutant 1:2371382139dd 583 * @param pBuffer: The target register value to be written
Jerome Coutant 1:2371382139dd 584 * @param Length: buffer size to be written
Jerome Coutant 1:2371382139dd 585 * @retval HAL status
Jerome Coutant 1:2371382139dd 586 */
Jerome Coutant 1:2371382139dd 587 static HAL_StatusTypeDef I2Cx_WriteBufferDMA(uint8_t Addr, uint16_t Reg, uint8_t *pBuffer, uint16_t Length)
Jerome Coutant 1:2371382139dd 588 {
Jerome Coutant 1:2371382139dd 589 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 1:2371382139dd 590
Jerome Coutant 1:2371382139dd 591 status = HAL_I2C_Mem_Write_DMA(&EEP_I2cHandle, Addr, Reg, I2C_MEMADD_SIZE_16BIT, pBuffer, Length);
Jerome Coutant 1:2371382139dd 592
Jerome Coutant 1:2371382139dd 593 /* Check the communication status */
Jerome Coutant 1:2371382139dd 594 if(status != HAL_OK)
Jerome Coutant 1:2371382139dd 595 {
Jerome Coutant 1:2371382139dd 596 /* Re-Initialize the BUS */
Jerome Coutant 1:2371382139dd 597 I2Cx_Error();
Jerome Coutant 1:2371382139dd 598 }
Jerome Coutant 1:2371382139dd 599
Jerome Coutant 1:2371382139dd 600 return status;
Jerome Coutant 1:2371382139dd 601 }
Jerome Coutant 1:2371382139dd 602
Jerome Coutant 1:2371382139dd 603 /**
Jerome Coutant 1:2371382139dd 604 * @brief Reads multiple data on the BUS in using DMA mode.
Jerome Coutant 1:2371382139dd 605 * @param Addr: I2C Address
Jerome Coutant 1:2371382139dd 606 * @param Reg: Reg Address
Jerome Coutant 1:2371382139dd 607 * @param pBuffer: pointer to read data buffer
Jerome Coutant 1:2371382139dd 608 * @param Length: length of the data
Jerome Coutant 1:2371382139dd 609 * @retval HAL status
Jerome Coutant 1:2371382139dd 610 */
Jerome Coutant 1:2371382139dd 611 static HAL_StatusTypeDef I2Cx_ReadBufferDMA(uint8_t Addr, uint16_t Reg, uint8_t *pBuffer, uint16_t Length)
Jerome Coutant 1:2371382139dd 612 {
Jerome Coutant 1:2371382139dd 613 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 1:2371382139dd 614
Jerome Coutant 1:2371382139dd 615 status = HAL_I2C_Mem_Read_DMA(&EEP_I2cHandle, Addr, Reg, I2C_MEMADD_SIZE_16BIT, pBuffer, Length);
Jerome Coutant 1:2371382139dd 616
Jerome Coutant 1:2371382139dd 617 /* Check the communication status */
Jerome Coutant 1:2371382139dd 618 if(status != HAL_OK)
Jerome Coutant 1:2371382139dd 619 {
Jerome Coutant 1:2371382139dd 620 /* Re-Initialize the BUS */
Jerome Coutant 1:2371382139dd 621 I2Cx_Error();
Jerome Coutant 1:2371382139dd 622 }
Jerome Coutant 1:2371382139dd 623
Jerome Coutant 1:2371382139dd 624 return status;
Jerome Coutant 1:2371382139dd 625 }
Jerome Coutant 1:2371382139dd 626
Jerome Coutant 1:2371382139dd 627 /**
Jerome Coutant 1:2371382139dd 628 * @brief Checks if target device is ready for communication.
Jerome Coutant 1:2371382139dd 629 * @note This function is used with Memory devices
Jerome Coutant 1:2371382139dd 630 * @param DevAddress: Target device address
Jerome Coutant 1:2371382139dd 631 * @param Trials: Number of trials
Jerome Coutant 1:2371382139dd 632 * @retval HAL status
Jerome Coutant 1:2371382139dd 633 */
Jerome Coutant 1:2371382139dd 634 static HAL_StatusTypeDef I2Cx_IsDeviceReady(uint16_t DevAddress, uint32_t Trials)
Jerome Coutant 1:2371382139dd 635 {
Jerome Coutant 1:2371382139dd 636 return (HAL_I2C_IsDeviceReady(&EEP_I2cHandle, DevAddress, Trials, I2cxTimeout));
Jerome Coutant 1:2371382139dd 637 }
Jerome Coutant 1:2371382139dd 638 #endif /* EE_M24LR64 */
Jerome Coutant 1:2371382139dd 639
Jerome Coutant 1:2371382139dd 640 /**
Jerome Coutant 1:2371382139dd 641 * @brief I2Cx error treatment function
Jerome Coutant 1:2371382139dd 642 */
Jerome Coutant 1:2371382139dd 643 static void I2Cx_Error(void)
Jerome Coutant 1:2371382139dd 644 {
Jerome Coutant 1:2371382139dd 645 /* De-initialize the I2C communication BUS */
Jerome Coutant 1:2371382139dd 646 HAL_I2C_DeInit(&EEP_I2cHandle);
Jerome Coutant 1:2371382139dd 647
Jerome Coutant 1:2371382139dd 648 /* Re-Initialize the I2C communication BUS */
Jerome Coutant 1:2371382139dd 649 I2Cx_Init();
Jerome Coutant 1:2371382139dd 650 }
Jerome Coutant 1:2371382139dd 651
Jerome Coutant 1:2371382139dd 652 /******************************* SPI Routines *********************************/
Jerome Coutant 1:2371382139dd 653
Jerome Coutant 1:2371382139dd 654 /**
Jerome Coutant 1:2371382139dd 655 * @brief SPIx Bus initialization
Jerome Coutant 1:2371382139dd 656 */
Jerome Coutant 1:2371382139dd 657 static void SPIx_Init(void)
Jerome Coutant 1:2371382139dd 658 {
Jerome Coutant 1:2371382139dd 659 if(HAL_SPI_GetState(&SpiHandle) == HAL_SPI_STATE_RESET)
Jerome Coutant 1:2371382139dd 660 {
Jerome Coutant 1:2371382139dd 661 /* SPI configuration -----------------------------------------------------*/
Jerome Coutant 1:2371382139dd 662 SpiHandle.Instance = DISCOVERY_SPIx;
Jerome Coutant 1:2371382139dd 663 /* SPI baudrate is set to 5.6 MHz (PCLK2/SPI_BaudRatePrescaler = 90/16 = 5.625 MHz)
Jerome Coutant 1:2371382139dd 664 to verify these constraints:
Jerome Coutant 1:2371382139dd 665 - ILI9341 LCD SPI interface max baudrate is 10MHz for write and 6.66MHz for read
Jerome Coutant 1:2371382139dd 666 - l3gd20 SPI interface max baudrate is 10MHz for write/read
Jerome Coutant 1:2371382139dd 667 - PCLK2 frequency is set to 90 MHz
Jerome Coutant 1:2371382139dd 668 */
Jerome Coutant 1:2371382139dd 669 SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
Jerome Coutant 1:2371382139dd 670
Jerome Coutant 1:2371382139dd 671 /* On STM32F429I-Discovery, LCD ID cannot be read then keep a common configuration */
Jerome Coutant 1:2371382139dd 672 /* for LCD and GYRO (SPI_DIRECTION_2LINES) */
Jerome Coutant 1:2371382139dd 673 /* Note: To read a register a LCD, SPI_DIRECTION_1LINE should be set */
Jerome Coutant 1:2371382139dd 674 SpiHandle.Init.Direction = SPI_DIRECTION_2LINES;
Jerome Coutant 1:2371382139dd 675 SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE;
Jerome Coutant 1:2371382139dd 676 SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW;
Jerome Coutant 1:2371382139dd 677 SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
Jerome Coutant 1:2371382139dd 678 SpiHandle.Init.CRCPolynomial = 7;
Jerome Coutant 1:2371382139dd 679 SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT;
Jerome Coutant 1:2371382139dd 680 SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB;
Jerome Coutant 1:2371382139dd 681 SpiHandle.Init.NSS = SPI_NSS_SOFT;
Jerome Coutant 1:2371382139dd 682 SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED;
Jerome Coutant 1:2371382139dd 683 SpiHandle.Init.Mode = SPI_MODE_MASTER;
Jerome Coutant 1:2371382139dd 684
Jerome Coutant 1:2371382139dd 685 SPIx_MspInit(&SpiHandle);
Jerome Coutant 1:2371382139dd 686 HAL_SPI_Init(&SpiHandle);
Jerome Coutant 1:2371382139dd 687 }
Jerome Coutant 1:2371382139dd 688 }
Jerome Coutant 1:2371382139dd 689
Jerome Coutant 1:2371382139dd 690 /**
Jerome Coutant 1:2371382139dd 691 * @brief Reads 4 bytes from device.
Jerome Coutant 1:2371382139dd 692 * @param ReadSize: Number of bytes to read (max 4 bytes)
Jerome Coutant 1:2371382139dd 693 * @retval Value read on the SPI
Jerome Coutant 1:2371382139dd 694 */
Jerome Coutant 1:2371382139dd 695 static uint32_t SPIx_Read(uint8_t ReadSize)
Jerome Coutant 1:2371382139dd 696 {
Jerome Coutant 1:2371382139dd 697 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 1:2371382139dd 698 uint32_t readvalue;
Jerome Coutant 1:2371382139dd 699
Jerome Coutant 1:2371382139dd 700 status = HAL_SPI_Receive(&SpiHandle, (uint8_t*) &readvalue, ReadSize, SpixTimeout);
Jerome Coutant 1:2371382139dd 701
Jerome Coutant 1:2371382139dd 702 /* Check the communication status */
Jerome Coutant 1:2371382139dd 703 if(status != HAL_OK)
Jerome Coutant 1:2371382139dd 704 {
Jerome Coutant 1:2371382139dd 705 /* Re-Initialize the BUS */
Jerome Coutant 1:2371382139dd 706 SPIx_Error();
Jerome Coutant 1:2371382139dd 707 }
Jerome Coutant 1:2371382139dd 708
Jerome Coutant 1:2371382139dd 709 return readvalue;
Jerome Coutant 1:2371382139dd 710 }
Jerome Coutant 1:2371382139dd 711
Jerome Coutant 1:2371382139dd 712 /**
Jerome Coutant 1:2371382139dd 713 * @brief Writes a byte to device.
Jerome Coutant 1:2371382139dd 714 * @param Value: value to be written
Jerome Coutant 1:2371382139dd 715 */
Jerome Coutant 1:2371382139dd 716 static void SPIx_Write(uint16_t Value)
Jerome Coutant 1:2371382139dd 717 {
Jerome Coutant 1:2371382139dd 718 HAL_StatusTypeDef status = HAL_OK;
Jerome Coutant 1:2371382139dd 719
Jerome Coutant 1:2371382139dd 720 status = HAL_SPI_Transmit(&SpiHandle, (uint8_t*) &Value, 1, SpixTimeout);
Jerome Coutant 1:2371382139dd 721
Jerome Coutant 1:2371382139dd 722 /* Check the communication status */
Jerome Coutant 1:2371382139dd 723 if(status != HAL_OK)
Jerome Coutant 1:2371382139dd 724 {
Jerome Coutant 1:2371382139dd 725 /* Re-Initialize the BUS */
Jerome Coutant 1:2371382139dd 726 SPIx_Error();
Jerome Coutant 1:2371382139dd 727 }
Jerome Coutant 1:2371382139dd 728 }
Jerome Coutant 1:2371382139dd 729
Jerome Coutant 1:2371382139dd 730 /**
Jerome Coutant 1:2371382139dd 731 * @brief Sends a Byte through the SPI interface and return the Byte received
Jerome Coutant 1:2371382139dd 732 * from the SPI bus.
Jerome Coutant 1:2371382139dd 733 * @param Byte: Byte send.
Jerome Coutant 1:2371382139dd 734 * @retval The received byte value
Jerome Coutant 1:2371382139dd 735 */
Jerome Coutant 1:2371382139dd 736 static uint8_t SPIx_WriteRead(uint8_t Byte)
Jerome Coutant 1:2371382139dd 737 {
Jerome Coutant 1:2371382139dd 738 uint8_t receivedbyte = 0;
Jerome Coutant 1:2371382139dd 739
Jerome Coutant 1:2371382139dd 740 /* Send a Byte through the SPI peripheral */
Jerome Coutant 1:2371382139dd 741 /* Read byte from the SPI bus */
Jerome Coutant 1:2371382139dd 742 if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*) &Byte, (uint8_t*) &receivedbyte, 1, SpixTimeout) != HAL_OK)
Jerome Coutant 1:2371382139dd 743 {
Jerome Coutant 1:2371382139dd 744 SPIx_Error();
Jerome Coutant 1:2371382139dd 745 }
Jerome Coutant 1:2371382139dd 746
Jerome Coutant 1:2371382139dd 747 return receivedbyte;
Jerome Coutant 1:2371382139dd 748 }
Jerome Coutant 1:2371382139dd 749
Jerome Coutant 1:2371382139dd 750 /**
Jerome Coutant 1:2371382139dd 751 * @brief SPIx error treatment function.
Jerome Coutant 1:2371382139dd 752 */
Jerome Coutant 1:2371382139dd 753 static void SPIx_Error(void)
Jerome Coutant 1:2371382139dd 754 {
Jerome Coutant 1:2371382139dd 755 /* De-initialize the SPI communication BUS */
Jerome Coutant 1:2371382139dd 756 HAL_SPI_DeInit(&SpiHandle);
Jerome Coutant 1:2371382139dd 757
Jerome Coutant 1:2371382139dd 758 /* Re- Initialize the SPI communication BUS */
Jerome Coutant 1:2371382139dd 759 SPIx_Init();
Jerome Coutant 1:2371382139dd 760 }
Jerome Coutant 1:2371382139dd 761
Jerome Coutant 1:2371382139dd 762 /**
Jerome Coutant 1:2371382139dd 763 * @brief SPI MSP Init.
Jerome Coutant 1:2371382139dd 764 * @param hspi: SPI handle
Jerome Coutant 1:2371382139dd 765 */
Jerome Coutant 1:2371382139dd 766 static void SPIx_MspInit(SPI_HandleTypeDef *hspi)
Jerome Coutant 1:2371382139dd 767 {
Jerome Coutant 1:2371382139dd 768 GPIO_InitTypeDef GPIO_InitStructure;
Jerome Coutant 1:2371382139dd 769
Jerome Coutant 1:2371382139dd 770 /* Enable SPIx clock */
Jerome Coutant 1:2371382139dd 771 DISCOVERY_SPIx_CLK_ENABLE();
Jerome Coutant 1:2371382139dd 772
Jerome Coutant 1:2371382139dd 773 /* Enable DISCOVERY_SPI GPIO clock */
Jerome Coutant 1:2371382139dd 774 DISCOVERY_SPIx_GPIO_CLK_ENABLE();
Jerome Coutant 1:2371382139dd 775
Jerome Coutant 1:2371382139dd 776 /* configure SPI SCK, MOSI and MISO */
Jerome Coutant 1:2371382139dd 777 GPIO_InitStructure.Pin = (DISCOVERY_SPIx_SCK_PIN | DISCOVERY_SPIx_MOSI_PIN | DISCOVERY_SPIx_MISO_PIN);
Jerome Coutant 1:2371382139dd 778 GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
Jerome Coutant 1:2371382139dd 779 GPIO_InitStructure.Pull = GPIO_PULLDOWN;
Jerome Coutant 1:2371382139dd 780 GPIO_InitStructure.Speed = GPIO_SPEED_MEDIUM;
Jerome Coutant 1:2371382139dd 781 GPIO_InitStructure.Alternate = DISCOVERY_SPIx_AF;
Jerome Coutant 1:2371382139dd 782 HAL_GPIO_Init(DISCOVERY_SPIx_GPIO_PORT, &GPIO_InitStructure);
Jerome Coutant 1:2371382139dd 783 }
Jerome Coutant 1:2371382139dd 784
Jerome Coutant 1:2371382139dd 785 /********************************* LINK LCD ***********************************/
Jerome Coutant 1:2371382139dd 786
Jerome Coutant 1:2371382139dd 787 /**
Jerome Coutant 1:2371382139dd 788 * @brief Configures the LCD_SPI interface.
Jerome Coutant 1:2371382139dd 789 */
Jerome Coutant 1:2371382139dd 790 void LCD_IO_Init(void)
Jerome Coutant 1:2371382139dd 791 {
Jerome Coutant 1:2371382139dd 792 GPIO_InitTypeDef GPIO_InitStructure;
Jerome Coutant 1:2371382139dd 793
Jerome Coutant 1:2371382139dd 794 if(Is_LCD_IO_Initialized == 0)
Jerome Coutant 1:2371382139dd 795 {
Jerome Coutant 1:2371382139dd 796 Is_LCD_IO_Initialized = 1;
Jerome Coutant 1:2371382139dd 797
Jerome Coutant 1:2371382139dd 798 /* Configure NCS in Output Push-Pull mode */
Jerome Coutant 1:2371382139dd 799 LCD_WRX_GPIO_CLK_ENABLE();
Jerome Coutant 1:2371382139dd 800 GPIO_InitStructure.Pin = LCD_WRX_PIN;
Jerome Coutant 1:2371382139dd 801 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
Jerome Coutant 1:2371382139dd 802 GPIO_InitStructure.Pull = GPIO_NOPULL;
Jerome Coutant 1:2371382139dd 803 GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
Jerome Coutant 1:2371382139dd 804 HAL_GPIO_Init(LCD_WRX_GPIO_PORT, &GPIO_InitStructure);
Jerome Coutant 1:2371382139dd 805
Jerome Coutant 1:2371382139dd 806 LCD_RDX_GPIO_CLK_ENABLE();
Jerome Coutant 1:2371382139dd 807 GPIO_InitStructure.Pin = LCD_RDX_PIN;
Jerome Coutant 1:2371382139dd 808 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
Jerome Coutant 1:2371382139dd 809 GPIO_InitStructure.Pull = GPIO_NOPULL;
Jerome Coutant 1:2371382139dd 810 GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
Jerome Coutant 1:2371382139dd 811 HAL_GPIO_Init(LCD_RDX_GPIO_PORT, &GPIO_InitStructure);
Jerome Coutant 1:2371382139dd 812
Jerome Coutant 1:2371382139dd 813 /* Configure the LCD Control pins ----------------------------------------*/
Jerome Coutant 1:2371382139dd 814 LCD_NCS_GPIO_CLK_ENABLE();
Jerome Coutant 1:2371382139dd 815
Jerome Coutant 1:2371382139dd 816 /* Configure NCS in Output Push-Pull mode */
Jerome Coutant 1:2371382139dd 817 GPIO_InitStructure.Pin = LCD_NCS_PIN;
Jerome Coutant 1:2371382139dd 818 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
Jerome Coutant 1:2371382139dd 819 GPIO_InitStructure.Pull = GPIO_NOPULL;
Jerome Coutant 1:2371382139dd 820 GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
Jerome Coutant 1:2371382139dd 821 HAL_GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure);
Jerome Coutant 1:2371382139dd 822
Jerome Coutant 1:2371382139dd 823 /* Set or Reset the control line */
Jerome Coutant 1:2371382139dd 824 LCD_CS_LOW();
Jerome Coutant 1:2371382139dd 825 LCD_CS_HIGH();
Jerome Coutant 1:2371382139dd 826
Jerome Coutant 1:2371382139dd 827 SPIx_Init();
Jerome Coutant 1:2371382139dd 828 }
Jerome Coutant 1:2371382139dd 829 }
Jerome Coutant 1:2371382139dd 830
Jerome Coutant 1:2371382139dd 831 /**
Jerome Coutant 1:2371382139dd 832 * @brief Writes register value.
Jerome Coutant 1:2371382139dd 833 */
Jerome Coutant 1:2371382139dd 834 void LCD_IO_WriteData(uint16_t RegValue)
Jerome Coutant 1:2371382139dd 835 {
Jerome Coutant 1:2371382139dd 836 /* Set WRX to send data */
Jerome Coutant 1:2371382139dd 837 LCD_WRX_HIGH();
Jerome Coutant 1:2371382139dd 838
Jerome Coutant 1:2371382139dd 839 /* Reset LCD control line(/CS) and Send data */
Jerome Coutant 1:2371382139dd 840 LCD_CS_LOW();
Jerome Coutant 1:2371382139dd 841 SPIx_Write(RegValue);
Jerome Coutant 1:2371382139dd 842
Jerome Coutant 1:2371382139dd 843 /* Deselect: Chip Select high */
Jerome Coutant 1:2371382139dd 844 LCD_CS_HIGH();
Jerome Coutant 1:2371382139dd 845 }
Jerome Coutant 1:2371382139dd 846
Jerome Coutant 1:2371382139dd 847 /**
Jerome Coutant 1:2371382139dd 848 * @brief Writes register address.
Jerome Coutant 1:2371382139dd 849 */
Jerome Coutant 1:2371382139dd 850 void LCD_IO_WriteReg(uint8_t Reg)
Jerome Coutant 1:2371382139dd 851 {
Jerome Coutant 1:2371382139dd 852 /* Reset WRX to send command */
Jerome Coutant 1:2371382139dd 853 LCD_WRX_LOW();
Jerome Coutant 1:2371382139dd 854
Jerome Coutant 1:2371382139dd 855 /* Reset LCD control line(/CS) and Send command */
Jerome Coutant 1:2371382139dd 856 LCD_CS_LOW();
Jerome Coutant 1:2371382139dd 857 SPIx_Write(Reg);
Jerome Coutant 1:2371382139dd 858
Jerome Coutant 1:2371382139dd 859 /* Deselect: Chip Select high */
Jerome Coutant 1:2371382139dd 860 LCD_CS_HIGH();
Jerome Coutant 1:2371382139dd 861 }
Jerome Coutant 1:2371382139dd 862
Jerome Coutant 1:2371382139dd 863 /**
Jerome Coutant 1:2371382139dd 864 * @brief Reads register value.
Jerome Coutant 1:2371382139dd 865 * @param RegValue Address of the register to read
Jerome Coutant 1:2371382139dd 866 * @param ReadSize Number of bytes to read
Jerome Coutant 1:2371382139dd 867 * @retval Content of the register value
Jerome Coutant 1:2371382139dd 868 */
Jerome Coutant 1:2371382139dd 869 uint32_t LCD_IO_ReadData(uint16_t RegValue, uint8_t ReadSize)
Jerome Coutant 1:2371382139dd 870 {
Jerome Coutant 1:2371382139dd 871 uint32_t readvalue = 0;
Jerome Coutant 1:2371382139dd 872
Jerome Coutant 1:2371382139dd 873 /* Select: Chip Select low */
Jerome Coutant 1:2371382139dd 874 LCD_CS_LOW();
Jerome Coutant 1:2371382139dd 875
Jerome Coutant 1:2371382139dd 876 /* Reset WRX to send command */
Jerome Coutant 1:2371382139dd 877 LCD_WRX_LOW();
Jerome Coutant 1:2371382139dd 878
Jerome Coutant 1:2371382139dd 879 SPIx_Write(RegValue);
Jerome Coutant 1:2371382139dd 880
Jerome Coutant 1:2371382139dd 881 readvalue = SPIx_Read(ReadSize);
Jerome Coutant 1:2371382139dd 882
Jerome Coutant 1:2371382139dd 883 /* Set WRX to send data */
Jerome Coutant 1:2371382139dd 884 LCD_WRX_HIGH();
Jerome Coutant 1:2371382139dd 885
Jerome Coutant 1:2371382139dd 886 /* Deselect: Chip Select high */
Jerome Coutant 1:2371382139dd 887 LCD_CS_HIGH();
Jerome Coutant 1:2371382139dd 888
Jerome Coutant 1:2371382139dd 889 return readvalue;
Jerome Coutant 1:2371382139dd 890 }
Jerome Coutant 1:2371382139dd 891
Jerome Coutant 1:2371382139dd 892 /**
Jerome Coutant 1:2371382139dd 893 * @brief Wait for loop in ms.
Jerome Coutant 1:2371382139dd 894 * @param Delay in ms.
Jerome Coutant 1:2371382139dd 895 */
Jerome Coutant 1:2371382139dd 896 void LCD_Delay(uint32_t Delay)
Jerome Coutant 1:2371382139dd 897 {
Jerome Coutant 1:2371382139dd 898 //HAL_Delay(Delay);
Jerome Coutant 1:2371382139dd 899 wait_ms(Delay);
Jerome Coutant 1:2371382139dd 900 }
Jerome Coutant 1:2371382139dd 901
Jerome Coutant 1:2371382139dd 902 /*******************************************************************************
Jerome Coutant 1:2371382139dd 903 LINK OPERATIONS
Jerome Coutant 1:2371382139dd 904 *******************************************************************************/
Jerome Coutant 1:2371382139dd 905
Jerome Coutant 1:2371382139dd 906 /********************************* LINK IOE ***********************************/
Jerome Coutant 1:2371382139dd 907
Jerome Coutant 1:2371382139dd 908 /**
Jerome Coutant 1:2371382139dd 909 * @brief IOE Low Level Initialization.
Jerome Coutant 1:2371382139dd 910 */
Jerome Coutant 1:2371382139dd 911 void IOE_Init(void)
Jerome Coutant 1:2371382139dd 912 {
Jerome Coutant 1:2371382139dd 913 I2Cx_Init();
Jerome Coutant 1:2371382139dd 914 }
Jerome Coutant 1:2371382139dd 915
Jerome Coutant 1:2371382139dd 916 /**
Jerome Coutant 1:2371382139dd 917 * @brief IOE Low Level Interrupt configuration.
Jerome Coutant 1:2371382139dd 918 */
Jerome Coutant 1:2371382139dd 919 void IOE_ITConfig(void)
Jerome Coutant 1:2371382139dd 920 {
Jerome Coutant 1:2371382139dd 921 I2Cx_ITConfig();
Jerome Coutant 1:2371382139dd 922 }
Jerome Coutant 1:2371382139dd 923
Jerome Coutant 1:2371382139dd 924 /**
Jerome Coutant 1:2371382139dd 925 * @brief IOE Writes single data operation.
Jerome Coutant 1:2371382139dd 926 * @param Addr: I2C Address
Jerome Coutant 1:2371382139dd 927 * @param Reg: Reg Address
Jerome Coutant 1:2371382139dd 928 * @param Value: Data to be written
Jerome Coutant 1:2371382139dd 929 */
Jerome Coutant 1:2371382139dd 930 void IOE_Write(uint8_t Addr, uint8_t Reg, uint8_t Value)
Jerome Coutant 1:2371382139dd 931 {
Jerome Coutant 1:2371382139dd 932 I2Cx_WriteData(Addr, Reg, Value);
Jerome Coutant 1:2371382139dd 933 }
Jerome Coutant 1:2371382139dd 934
Jerome Coutant 1:2371382139dd 935 /**
Jerome Coutant 1:2371382139dd 936 * @brief IOE Reads single data.
Jerome Coutant 1:2371382139dd 937 * @param Addr: I2C Address
Jerome Coutant 1:2371382139dd 938 * @param Reg: Reg Address
Jerome Coutant 1:2371382139dd 939 * @retval The read data
Jerome Coutant 1:2371382139dd 940 */
Jerome Coutant 1:2371382139dd 941 uint8_t IOE_Read(uint8_t Addr, uint8_t Reg)
Jerome Coutant 1:2371382139dd 942 {
Jerome Coutant 1:2371382139dd 943 return I2Cx_ReadData(Addr, Reg);
Jerome Coutant 1:2371382139dd 944 }
Jerome Coutant 1:2371382139dd 945
Jerome Coutant 1:2371382139dd 946 /**
Jerome Coutant 1:2371382139dd 947 * @brief IOE Writes multiple data.
Jerome Coutant 1:2371382139dd 948 * @param Addr: I2C Address
Jerome Coutant 1:2371382139dd 949 * @param Reg: Reg Address
Jerome Coutant 1:2371382139dd 950 * @param pBuffer: pointer to data buffer
Jerome Coutant 1:2371382139dd 951 * @param Length: length of the data
Jerome Coutant 1:2371382139dd 952 */
Jerome Coutant 1:2371382139dd 953 void IOE_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length)
Jerome Coutant 1:2371382139dd 954 {
Jerome Coutant 1:2371382139dd 955 I2Cx_WriteBuffer(Addr, Reg, pBuffer, Length);
Jerome Coutant 1:2371382139dd 956 }
Jerome Coutant 1:2371382139dd 957
Jerome Coutant 1:2371382139dd 958 /**
Jerome Coutant 1:2371382139dd 959 * @brief IOE Reads multiple data.
Jerome Coutant 1:2371382139dd 960 * @param Addr: I2C Address
Jerome Coutant 1:2371382139dd 961 * @param Reg: Reg Address
Jerome Coutant 1:2371382139dd 962 * @param pBuffer: pointer to data buffer
Jerome Coutant 1:2371382139dd 963 * @param Length: length of the data
Jerome Coutant 1:2371382139dd 964 * @retval 0 if no problems to read multiple data
Jerome Coutant 1:2371382139dd 965 */
Jerome Coutant 1:2371382139dd 966 uint16_t IOE_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length)
Jerome Coutant 1:2371382139dd 967 {
Jerome Coutant 1:2371382139dd 968 return I2Cx_ReadBuffer(Addr, Reg, pBuffer, Length);
Jerome Coutant 1:2371382139dd 969 }
Jerome Coutant 1:2371382139dd 970
Jerome Coutant 1:2371382139dd 971 /**
Jerome Coutant 1:2371382139dd 972 * @brief IOE Delay.
Jerome Coutant 1:2371382139dd 973 * @param Delay in ms
Jerome Coutant 1:2371382139dd 974 */
Jerome Coutant 1:2371382139dd 975 void IOE_Delay(uint32_t Delay)
Jerome Coutant 1:2371382139dd 976 {
Jerome Coutant 1:2371382139dd 977 //HAL_Delay(Delay);
Jerome Coutant 1:2371382139dd 978 wait_ms(Delay);
Jerome Coutant 1:2371382139dd 979 }
Jerome Coutant 1:2371382139dd 980
Jerome Coutant 1:2371382139dd 981 /********************************* LINK GYROSCOPE *****************************/
Jerome Coutant 1:2371382139dd 982
Jerome Coutant 1:2371382139dd 983 /**
Jerome Coutant 1:2371382139dd 984 * @brief Configures the Gyroscope SPI interface.
Jerome Coutant 1:2371382139dd 985 */
Jerome Coutant 1:2371382139dd 986 void GYRO_IO_Init(void)
Jerome Coutant 1:2371382139dd 987 {
Jerome Coutant 1:2371382139dd 988 GPIO_InitTypeDef GPIO_InitStructure;
Jerome Coutant 1:2371382139dd 989
Jerome Coutant 1:2371382139dd 990 /* Configure the Gyroscope Control pins ------------------------------------*/
Jerome Coutant 1:2371382139dd 991 /* Enable CS GPIO clock and Configure GPIO PIN for Gyroscope Chip select */
Jerome Coutant 1:2371382139dd 992 GYRO_CS_GPIO_CLK_ENABLE();
Jerome Coutant 1:2371382139dd 993 GPIO_InitStructure.Pin = GYRO_CS_PIN;
Jerome Coutant 1:2371382139dd 994 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
Jerome Coutant 1:2371382139dd 995 GPIO_InitStructure.Pull = GPIO_NOPULL;
Jerome Coutant 1:2371382139dd 996 GPIO_InitStructure.Speed = GPIO_SPEED_MEDIUM;
Jerome Coutant 1:2371382139dd 997 HAL_GPIO_Init(GYRO_CS_GPIO_PORT, &GPIO_InitStructure);
Jerome Coutant 1:2371382139dd 998
Jerome Coutant 1:2371382139dd 999 /* Deselect: Chip Select high */
Jerome Coutant 1:2371382139dd 1000 GYRO_CS_HIGH();
Jerome Coutant 1:2371382139dd 1001
Jerome Coutant 1:2371382139dd 1002 /* Enable INT1, INT2 GPIO clock and Configure GPIO PINs to detect Interrupts */
Jerome Coutant 1:2371382139dd 1003 GYRO_INT_GPIO_CLK_ENABLE();
Jerome Coutant 1:2371382139dd 1004 GPIO_InitStructure.Pin = GYRO_INT1_PIN | GYRO_INT2_PIN;
Jerome Coutant 1:2371382139dd 1005 GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
Jerome Coutant 1:2371382139dd 1006 GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
Jerome Coutant 1:2371382139dd 1007 GPIO_InitStructure.Pull= GPIO_NOPULL;
Jerome Coutant 1:2371382139dd 1008 HAL_GPIO_Init(GYRO_INT_GPIO_PORT, &GPIO_InitStructure);
Jerome Coutant 1:2371382139dd 1009
Jerome Coutant 1:2371382139dd 1010 SPIx_Init();
Jerome Coutant 1:2371382139dd 1011 }
Jerome Coutant 1:2371382139dd 1012
Jerome Coutant 1:2371382139dd 1013 /**
Jerome Coutant 1:2371382139dd 1014 * @brief Writes one byte to the Gyroscope.
Jerome Coutant 1:2371382139dd 1015 * @param pBuffer: Pointer to the buffer containing the data to be written to the Gyroscope.
Jerome Coutant 1:2371382139dd 1016 * @param WriteAddr: Gyroscope's internal address to write to.
Jerome Coutant 1:2371382139dd 1017 * @param NumByteToWrite: Number of bytes to write.
Jerome Coutant 1:2371382139dd 1018 */
Jerome Coutant 1:2371382139dd 1019 void GYRO_IO_Write(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite)
Jerome Coutant 1:2371382139dd 1020 {
Jerome Coutant 1:2371382139dd 1021 /* Configure the MS bit:
Jerome Coutant 1:2371382139dd 1022 - When 0, the address will remain unchanged in multiple read/write commands.
Jerome Coutant 1:2371382139dd 1023 - When 1, the address will be auto incremented in multiple read/write commands.
Jerome Coutant 1:2371382139dd 1024 */
Jerome Coutant 1:2371382139dd 1025 if(NumByteToWrite > 0x01)
Jerome Coutant 1:2371382139dd 1026 {
Jerome Coutant 1:2371382139dd 1027 WriteAddr |= (uint8_t)MULTIPLEBYTE_CMD;
Jerome Coutant 1:2371382139dd 1028 }
Jerome Coutant 1:2371382139dd 1029 /* Set chip select Low at the start of the transmission */
Jerome Coutant 1:2371382139dd 1030 GYRO_CS_LOW();
Jerome Coutant 1:2371382139dd 1031
Jerome Coutant 1:2371382139dd 1032 /* Send the Address of the indexed register */
Jerome Coutant 1:2371382139dd 1033 SPIx_WriteRead(WriteAddr);
Jerome Coutant 1:2371382139dd 1034
Jerome Coutant 1:2371382139dd 1035 /* Send the data that will be written into the device (MSB First) */
Jerome Coutant 1:2371382139dd 1036 while(NumByteToWrite >= 0x01)
Jerome Coutant 1:2371382139dd 1037 {
Jerome Coutant 1:2371382139dd 1038 SPIx_WriteRead(*pBuffer);
Jerome Coutant 1:2371382139dd 1039 NumByteToWrite--;
Jerome Coutant 1:2371382139dd 1040 pBuffer++;
Jerome Coutant 1:2371382139dd 1041 }
Jerome Coutant 1:2371382139dd 1042
Jerome Coutant 1:2371382139dd 1043 /* Set chip select High at the end of the transmission */
Jerome Coutant 1:2371382139dd 1044 GYRO_CS_HIGH();
Jerome Coutant 1:2371382139dd 1045 }
Jerome Coutant 1:2371382139dd 1046
Jerome Coutant 1:2371382139dd 1047 /**
Jerome Coutant 1:2371382139dd 1048 * @brief Reads a block of data from the Gyroscope.
Jerome Coutant 1:2371382139dd 1049 * @param pBuffer: Pointer to the buffer that receives the data read from the Gyroscope.
Jerome Coutant 1:2371382139dd 1050 * @param ReadAddr: Gyroscope's internal address to read from.
Jerome Coutant 1:2371382139dd 1051 * @param NumByteToRead: Number of bytes to read from the Gyroscope.
Jerome Coutant 1:2371382139dd 1052 */
Jerome Coutant 1:2371382139dd 1053 void GYRO_IO_Read(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead)
Jerome Coutant 1:2371382139dd 1054 {
Jerome Coutant 1:2371382139dd 1055 if(NumByteToRead > 0x01)
Jerome Coutant 1:2371382139dd 1056 {
Jerome Coutant 1:2371382139dd 1057 ReadAddr |= (uint8_t)(READWRITE_CMD | MULTIPLEBYTE_CMD);
Jerome Coutant 1:2371382139dd 1058 }
Jerome Coutant 1:2371382139dd 1059 else
Jerome Coutant 1:2371382139dd 1060 {
Jerome Coutant 1:2371382139dd 1061 ReadAddr |= (uint8_t)READWRITE_CMD;
Jerome Coutant 1:2371382139dd 1062 }
Jerome Coutant 1:2371382139dd 1063 /* Set chip select Low at the start of the transmission */
Jerome Coutant 1:2371382139dd 1064 GYRO_CS_LOW();
Jerome Coutant 1:2371382139dd 1065
Jerome Coutant 1:2371382139dd 1066 /* Send the Address of the indexed register */
Jerome Coutant 1:2371382139dd 1067 SPIx_WriteRead(ReadAddr);
Jerome Coutant 1:2371382139dd 1068
Jerome Coutant 1:2371382139dd 1069 /* Receive the data that will be read from the device (MSB First) */
Jerome Coutant 1:2371382139dd 1070 while(NumByteToRead > 0x00)
Jerome Coutant 1:2371382139dd 1071 {
Jerome Coutant 1:2371382139dd 1072 /* Send dummy byte (0x00) to generate the SPI clock to Gyroscope (Slave device) */
Jerome Coutant 1:2371382139dd 1073 *pBuffer = SPIx_WriteRead(DUMMY_BYTE);
Jerome Coutant 1:2371382139dd 1074 NumByteToRead--;
Jerome Coutant 1:2371382139dd 1075 pBuffer++;
Jerome Coutant 1:2371382139dd 1076 }
Jerome Coutant 1:2371382139dd 1077
Jerome Coutant 1:2371382139dd 1078 /* Set chip select High at the end of the transmission */
Jerome Coutant 1:2371382139dd 1079 GYRO_CS_HIGH();
Jerome Coutant 1:2371382139dd 1080 }
Jerome Coutant 1:2371382139dd 1081
Jerome Coutant 1:2371382139dd 1082
Jerome Coutant 1:2371382139dd 1083 #ifdef EE_M24LR64
Jerome Coutant 1:2371382139dd 1084
Jerome Coutant 1:2371382139dd 1085 /******************************** LINK I2C EEPROM *****************************/
Jerome Coutant 1:2371382139dd 1086
Jerome Coutant 1:2371382139dd 1087 /**
Jerome Coutant 1:2371382139dd 1088 * @brief Initializes peripherals used by the I2C EEPROM driver.
Jerome Coutant 1:2371382139dd 1089 */
Jerome Coutant 1:2371382139dd 1090 void EEPROM_IO_Init(void)
Jerome Coutant 1:2371382139dd 1091 {
Jerome Coutant 1:2371382139dd 1092 I2Cx_Init();
Jerome Coutant 1:2371382139dd 1093 }
Jerome Coutant 1:2371382139dd 1094
Jerome Coutant 1:2371382139dd 1095 /**
Jerome Coutant 1:2371382139dd 1096 * @brief Writes data to I2C EEPROM driver in using DMA channel.
Jerome Coutant 1:2371382139dd 1097 * @param DevAddress: Target device address
Jerome Coutant 1:2371382139dd 1098 * @param MemAddress: Internal memory address
Jerome Coutant 1:2371382139dd 1099 * @param pBuffer: Pointer to data buffer
Jerome Coutant 1:2371382139dd 1100 * @param BufferSize: Amount of data to be sent
Jerome Coutant 1:2371382139dd 1101 * @retval HAL status
Jerome Coutant 1:2371382139dd 1102 */
Jerome Coutant 1:2371382139dd 1103 HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize)
Jerome Coutant 1:2371382139dd 1104 {
Jerome Coutant 1:2371382139dd 1105 return (I2Cx_WriteBufferDMA(DevAddress, MemAddress, pBuffer, BufferSize));
Jerome Coutant 1:2371382139dd 1106 }
Jerome Coutant 1:2371382139dd 1107
Jerome Coutant 1:2371382139dd 1108 /**
Jerome Coutant 1:2371382139dd 1109 * @brief Reads data from I2C EEPROM driver in using DMA channel.
Jerome Coutant 1:2371382139dd 1110 * @param DevAddress: Target device address
Jerome Coutant 1:2371382139dd 1111 * @param MemAddress: Internal memory address
Jerome Coutant 1:2371382139dd 1112 * @param pBuffer: Pointer to data buffer
Jerome Coutant 1:2371382139dd 1113 * @param BufferSize: Amount of data to be read
Jerome Coutant 1:2371382139dd 1114 * @retval HAL status
Jerome Coutant 1:2371382139dd 1115 */
Jerome Coutant 1:2371382139dd 1116 HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize)
Jerome Coutant 1:2371382139dd 1117 {
Jerome Coutant 1:2371382139dd 1118 return (I2Cx_ReadBufferDMA(DevAddress, MemAddress, pBuffer, BufferSize));
Jerome Coutant 1:2371382139dd 1119 }
Jerome Coutant 1:2371382139dd 1120
Jerome Coutant 1:2371382139dd 1121 /**
Jerome Coutant 1:2371382139dd 1122 * @brief Checks if target device is ready for communication.
Jerome Coutant 1:2371382139dd 1123 * @note This function is used with Memory devices
Jerome Coutant 1:2371382139dd 1124 * @param DevAddress: Target device address
Jerome Coutant 1:2371382139dd 1125 * @param Trials: Number of trials
Jerome Coutant 1:2371382139dd 1126 * @retval HAL status
Jerome Coutant 1:2371382139dd 1127 */
Jerome Coutant 1:2371382139dd 1128 HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials)
Jerome Coutant 1:2371382139dd 1129 {
Jerome Coutant 1:2371382139dd 1130 return (I2Cx_IsDeviceReady(DevAddress, Trials));
Jerome Coutant 1:2371382139dd 1131 }
Jerome Coutant 1:2371382139dd 1132
Jerome Coutant 1:2371382139dd 1133 // Added for mbed
Jerome Coutant 1:2371382139dd 1134 /**
Jerome Coutant 1:2371382139dd 1135 * @brief This function handles sEE DMA TX interrupt request.
Jerome Coutant 1:2371382139dd 1136 * @param None
Jerome Coutant 1:2371382139dd 1137 * @retval None
Jerome Coutant 1:2371382139dd 1138 */
Jerome Coutant 1:2371382139dd 1139 static void EEPROM_I2C_DMA_TX_IRQHandler(void)
Jerome Coutant 1:2371382139dd 1140 {
Jerome Coutant 1:2371382139dd 1141 HAL_DMA_IRQHandler(EEP_I2cHandle.hdmatx);
Jerome Coutant 1:2371382139dd 1142 }
Jerome Coutant 1:2371382139dd 1143
Jerome Coutant 1:2371382139dd 1144 /**
Jerome Coutant 1:2371382139dd 1145 * @brief This function handles sEE DMA RX interrupt request.
Jerome Coutant 1:2371382139dd 1146 * @param None
Jerome Coutant 1:2371382139dd 1147 * @retval None
Jerome Coutant 1:2371382139dd 1148 */
Jerome Coutant 1:2371382139dd 1149 static void EEPROM_I2C_DMA_RX_IRQHandler(void)
Jerome Coutant 1:2371382139dd 1150 {
Jerome Coutant 1:2371382139dd 1151 HAL_DMA_IRQHandler(EEP_I2cHandle.hdmarx);
Jerome Coutant 1:2371382139dd 1152 }
Jerome Coutant 1:2371382139dd 1153
Jerome Coutant 1:2371382139dd 1154 #endif /* EE_M24LR64 */
Jerome Coutant 1:2371382139dd 1155
Jerome Coutant 1:2371382139dd 1156 /**
Jerome Coutant 1:2371382139dd 1157 * @}
Jerome Coutant 1:2371382139dd 1158 */
Jerome Coutant 1:2371382139dd 1159
Jerome Coutant 1:2371382139dd 1160 /**
Jerome Coutant 1:2371382139dd 1161 * @}
Jerome Coutant 1:2371382139dd 1162 */
Jerome Coutant 1:2371382139dd 1163
Jerome Coutant 1:2371382139dd 1164 /**
Jerome Coutant 1:2371382139dd 1165 * @}
Jerome Coutant 1:2371382139dd 1166 */
Jerome Coutant 1:2371382139dd 1167
Jerome Coutant 1:2371382139dd 1168 /**
Jerome Coutant 1:2371382139dd 1169 * @}
Jerome Coutant 1:2371382139dd 1170 */
Jerome Coutant 1:2371382139dd 1171
Jerome Coutant 1:2371382139dd 1172 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/