/**
******************************************************************************
* @file stm32303c_eval_i2c_ee_cpal.h
* @author MCD Application Team
* @version V1.0.1
* @date 23-October-2012
* @brief This file contains all the functions prototypes for
* the stm32303c_eval_i2c_ee_cpal.c firmware driver.
******************************************************************************
* @attention
*
*
© COPYRIGHT 2012 STMicroelectronics
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32303C_EVAL_I2C_EE_CPAL_H
#define __STM32303C_EVAL_I2C_EE_CPAL_H
#ifdef __cplusplus
extern "C" {
#endif
/*===================================================================================
User NOTES
=====================================================================================
---------------------------------
How To use the EEPROM Driver:
---------------------------------
----- All EEPROM operations are controlled and monitored through a single
structure. This structure holds all necessary parameters to manage EEPROM
communication (pointer to CPAL I2C device structure, EEPROM address,
EEPROM page size, EEPROM memory addressing mode, EEPROM state).
----- User should follow these steps to use this driver correctly :
-1- STRUCTURE INITIALIZATION
Start by initializing the structure holding EEPROM Information. To perform
this action, the global variable sEEx_DevStructure declared in EEPROM driver
as sEE_InitTypeDef (sEE1_DevStructure for EEPROM connected with I2C1,
sEE2_DevStructure for EEPROM connected with I2C1 ...) must be used.
sEE_InitTypeDef structure contains five parameters:
*- CPAL_InitTypeDef* sEE_CPALStructure : Pointer on a CPAL Device structure
relative to the device instantiated
to communicate with EEPROM.
*- uint32_t sEEAddress : Contains the EEPROM device Address.
*- uint32_t sEEPageSize : Contains the page size of EEPROM Memory.
*- uint8_t sEEMemoryAddrMode : Bit-field value specifying Memory Addressing Mode.
*- __IO sEE_StateTypeDef sEEState : Holds the current State of the EEPROM device.
To configure this structure, user must initialize only three parameters
(sEEAddress, sEEPageSize, sEEMemoryAddrMode).
Example:
sEE1_DevStructure.sEEAddress = 0xA0; // set EEPROM address to 0xA0
sEE1_DevStructure.sEEPageSize = 32; // set page size to 32
sEE1_DevStructure.sEEMemoryAddrMode = sEE_OPT_16BIT_REG; // enable 16Bit memory addressing mode
-2- DEVICE CONFIGURATION
Call the function sEE_StructInit() to initialize I2Cx CPAL device structure
relative to EEPROM than call sEE_Init() to configure the selected device
with the selected configuration.
-3- READ / WRITE OPERATIONS
Call the function sEE_WriteBuffer() or sEE_ReadBuffer() to perform transfer operations.
These functions start data transfer and exit. sEE_WriteHandler() and sEE_ReadHandler()
handle the remainder of the communication. sEE_WriteHandler() must be called in
CPAL_I2C_TXTC_UserCallback() and sEE_ReadHandler() must be called in CPAL_I2C_RXTC_UserCallback().
These two callbacks are implemented in "cpal_usercallback.c" file.
Example of how to implement sEE_WriteHandler() in CPAL_I2C_TXTC_UserCallback():
1** Comment "#define CPAL_I2C_TXTC_UserCallback (void)" in cpal_conf.h.
2** Implement CPAL_I2C_TXTC_UserCallback in "cpal_usercallback.c" file.
void CPAL_I2C_TXTC_UserCallback(CPAL_InitTypeDef* pDevInitStruct)
{
sEE_WriteHandler(pDevInitStruct->CPAL_Dev);
}
User should monitor transfer by testing the value of sEEState parameter of
sEEx_DevStructure. When transfer is ongoing sEEState is equal to sEE_STATE_WRITING
or sEE_STATE_READING. After transfer complete this parameter is set to sEE_STATE_IDLE.
Example of how to wait until EEPROM communication finishes:
while(sEE_GetEepromState(&sEE_DevStructure) != sEE_STATE_IDLE)
{
//Application may perform other tasks while transfer operation is ongoing
}
-4- DEVICE DEINITIALIZATION
When transfer operations are finished, you may call sEE_DeInit() to disable I2Cx device
and related resources (GPIO, DMA , IT and NVIC) relative to used EEPROM.
*****************************END OF User Notes**********************************************/
/* Includes ------------------------------------------------------------------*/
#include "stm32f30x_i2c_cpal.h"
/* Exported types ------------------------------------------------------------*/
/*========= sEE_State_Enum =========*/
/* sEE global State enumeration contains the current state of EEPROM.
Before starting each operation this state is tested. After each operation
sEE_State is updated with the new value resulting from the relative operation.*/
typedef enum
{
sEE_STATE_IDLE = 0x01, /*!