| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /*****************************************************************************
- * Copyright (c) 2019, Nations Technologies Inc.
- *
- * All rights reserved.
- * ****************************************************************************
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the disclaimer below.
- *
- * Nations' name may not be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY NATIONS "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
- * DISCLAIMED. IN NO EVENT SHALL NATIONS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ****************************************************************************/
- /**
- * @file i2c_eeprom.h
- * @author Nations
- * @version v1.0.0
- *
- * @copyright Copyright (c) 2019, Nations Technologies Inc. All rights reserved.
- */
- #ifndef __I2C_EEPROM_H__
- #define __I2C_EEPROM_H__
- #include <rtthread.h>
- #include "n32g45x.h"
- #include <stdio.h>
- #include "i2c.h"
- typedef enum i2c_state
- {
- COMM_DONE = 0, /// done successfully
- COMM_PRE = 1,
- COMM_IN_PROCESS = 2,
- COMM_EXIT = 3 /// exit since failure
- } I2C_STATE;
- typedef enum i2c_direction
- {
- Transmitter = 0x00,
- Receiver = 0x01
- } I2C_DIRECTION;
- /**
- * PROCESS MODE
- * 0=polling
- * 1=interrupt
- * 2=DMA
- */
- #define PROCESS_MODE 0
- #define I2C1_TEST
- #define I2C1_REMAP
- #ifdef I2C1_TEST
- #define I2Cx I2C1
- #ifdef I2C1_REMAP
- #define I2Cx_SCL_PIN GPIO_PIN_8
- #define I2Cx_SDA_PIN GPIO_PIN_9
- #define GPIOx GPIOB
- #else
- #define I2Cx_SCL_PIN GPIO_PIN_6
- #define I2Cx_SDA_PIN GPIO_PIN_7
- #define GPIOx GPIOB
- #endif
- #define I2Cx_peripheral_clk_en() RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_I2C1, ENABLE)
- #define I2Cx_scl_clk_en() RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE)
- #define I2Cx_sda_clk_en() RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE)
- #endif
- #define TEST_EEPROM_SIZE 256
- #define TEST_EEPROM_ADDR 0x00
- #define I2C_Speed 400000
- #define EEPROM_ADDRESS 0xA0
- #define I2C_PageSize 8 /// eeprom IC type AT24C08
- #define sEE_FLAG_TIMEOUT ((uint32_t)0x1000)
- #define sEE_LONG_TIMEOUT ((uint32_t)(100 * sEE_FLAG_TIMEOUT))
- #define IIC_RETRY_NUM 2
- /** Maximum number of trials for sEE_WaitEepromStandbyState() function */
- #define sEE_MAX_TRIALS_NUMBER 150
- #define FALSE 0
- #define TRUE 1
- void I2C_EE_Init(void);
- void I2C_EE_WriteBuffer(struct rt_i2c_bus_device *i2c_bus, u8* pBuffer, u16 WriteAddr, u16 NumByteToWrite);
- void I2C_EE_WriteOnePage(struct rt_i2c_bus_device *i2c_bus, u8* pBuffer, u16 WriteAddr, u16 NumByteToWrite);
- void I2C_EE_PageWrite(struct rt_i2c_bus_device *bus, u8* pBuffer, u16 WriteAddr, u16 NumByteToWrite);
- void I2C_EE_WriteOnePageCompleted(void);
- void I2C_EE_ReadBuffer(u8* pBuffer, u16 ReadAddr, u16 NumByteToRead);
- void I2C_EE_WaitOperationIsCompleted(void);
- void I2C_EE_WaitEepromStandbyState(void);
- void i2c1_evt_handle(void);
- void i2c1_err_handle(void);
- void i2c1_send_dma_handle(void);
- void i2c1_receive_dma_handle(void);
- rt_err_t rt_eeprom_register(rt_uint8_t flag);
- #endif /* __I2C_EEPROM_H__ */
|