Jonas Gartmann / BSP_DISCO_F429ZI
Committer:
garj
Date:
Wed Mar 10 15:44:14 2021 +0000
Revision:
3:9a3c3a4a6198
Parent:
1:2371382139dd
Child:
4:18d537a3636b
replace mbed with mbed os;

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