/**
******************************************************************************
* @file xl_eeprom.h
* @author software group
* @brief This file contains all the functions prototypes for the EERPOM
* firmware library.
******************************************************************************
* @attention
*
* 2019 by Chipways Communications,Inc. All Rights Reserved.
* This software is supplied under the terms of a license
* agreement or non-disclosure agreement with Chipways.
* Passing on and copying of this document,and communication
* of its contents is not permitted without prior written
* authorization.
*
*
© COPYRIGHT 2019 Chipways
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __XL_EEPROM_H_
#define __XL_EEPROM_H_
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ---------------------------------------------------------------*/
#include "xl6600.h"
#include "xl_gpio.h"
#include "xl_port.h"
#include "xl_i2c.h"
#include "xl_nvic.h"
#include "xl_sim.h"
/* Register define ------------------------------------------------------------*/
/** EEPROM - Register Layout Typedef */
/** @addtogroup XL6600_StdPeriph_Driver
* @{
*/
/** @addtogroup EEPROM
* @{
*/
/* Exported types ------------------------------------------------------------*/
/** @defgroup EEPROM_Exported_Constants EEPROMÄ£¿éʹÓòÎÊý¶¨Òå
* @{
*/
#define USER_HARDWARE_OR_SOFTWARE 1u
#define EEPROM_BASE_ADDRESS 0x40000000u
/**
* @}
*/
/** @defgroup EEPROM_WORK_SOFTWARE_PIN EEPROMÈí¼þ¹¤×÷ģʽPin¶¨Òå
* @{
*/
#if (USER_HARDWARE_OR_SOFTWARE == 0u)
#define SET_SDA_INPUT() {*((unsigned long *)0x40100054) &= ~((uint32_t)1 << ((uint8_t)GPIO_PTH3 - (uint8_t)32)); *((unsigned long *)0x40100058) &= ~((uint32_t)1 << ((uint8_t)GPIO_PTH3 - (uint8_t)32));}
#define SET_SDA_OUTPUT() {*((unsigned long *)0x40100054) |= ((uint32_t)1 << ((uint8_t)GPIO_PTH3 - (uint8_t)32)); *((unsigned long *)0x40100058) &= ~((uint32_t)1 << ((uint8_t)GPIO_PTH3 - (uint8_t)32));}
#if defined(__GNUC__) || defined(__IAR_SYSTEMS_ICC__)
#define I2C_SDA_H() {__asm volatile("cpsid i"); *((unsigned long *)0x40100044) |= (1<<(GPIO_PTH3 -32));__asm volatile("cpsie i");}
#define I2C_SDA_L() {__asm volatile("cpsid i"); *((unsigned long *)0x40100048) |= (1<<(GPIO_PTH3 -32));__asm volatile("cpsie i");}
#define I2C_SCK_H() {__asm volatile("cpsid i"); *((unsigned long *)0x40100044) |= (1<<(GPIO_PTH4 -32));__asm volatile("cpsie i");}
#define I2C_SCK_L() {__asm volatile("cpsid i"); *((unsigned long *)0x40100048) |= (1<<(GPIO_PTH4 -32));__asm volatile("cpsie i");}
#elif defined(__ARMCC_VERSION) || defined(__CWCC__)
#define I2C_SDA_H() {__disable_irq(); *((unsigned long *)0x40100044) |= (1<<(GPIO_PTH3 -32));__enable_irq();}
#define I2C_SDA_L() {__disable_irq(); *((unsigned long *)0x40100048) |= (1<<(GPIO_PTH3 -32));__enable_irq();}
#define I2C_SCK_H() {__disable_irq(); *((unsigned long *)0x40100044) |= (1<<(GPIO_PTH4 -32));__enable_irq();}
#define I2C_SCK_L() {__disable_irq(); *((unsigned long *)0x40100048) |= (1<<(GPIO_PTH4 -32));__enable_irq();}
#endif
#endif
/**
* @}
*/
/** @defgroup EEPROM_TIMER EEPROM³¬Ê±¼ÆÊýÆ÷¶¨Òå
* @{
*/
typedef struct
{
uint8_t timer_start;
uint32_t timer_cnt;
}Timer_Type;
/**
* @}
*/
/**
* @defgroup EEPROM_Status EEPROM״̬ÀàÐͶ¨Òå
* @{
*/
typedef enum
{
EEPROM_OK = 0,
EEPROM_SlaveID_TIMEOUT,
EEPROM_ADDRESS_TIMEOUT,
EEPROM_DATA_TIMEOUT,
}EEPROM_Status;
/**
* @}
*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
void EEPROM_Init(uint32_t systemclk);
void EEPROM_DeInit(void);
void EEPROM_WriteProtectEn(FunctionalState NewState);
uint8_t EEPROM_WriteByte(uint32_t address,uint8_t data,uint32_t time);
EEPROM_Status EEPROM_WriteBuff(uint32_t address,const uint8_t *data,uint8_t lenght,uint32_t time);
EEPROM_Status EEPROM_WritePage(uint8_t page,const uint8_t *data,uint32_t time);
EEPROM_Status EEPROM_ReadByte(uint32_t address,uint8_t *data,uint32_t time);
EEPROM_Status EEPROM_ReadBuff(uint32_t address,uint8_t *data,uint16_t lenght,uint32_t time);
#ifdef __cplusplus
}
#endif
#endif
/**
* @}
*/
/**
* @}
*/