Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * eeprom.c
- *
- * Created on: 04-Jan-2021
- * Author: DEVJEET MANDAL
- */
- #include "i2c.h"
- #include "eeprom.h"
- #include "stdio.h"
- #include "stdlib.h"
- /* Low Level function */
- void eep_small_delay(void) {
- for (uint32_t i = 0; i < 65535; i++)
- __asm__("NOP");
- }
- void i2c_error(void) {
- HAL_I2C_DeInit(&hi2c1); //De-init i2c bus
- __asm__("NOP");
- HAL_I2C_Init(&hi2c1); //re-init i2c bus
- __asm__("NOP");
- }
- eep_status_t i2c_write(uint16_t u8_reg_addr, uint8_t *u8_data, uint16_t len) {
- HAL_StatusTypeDef xStatus = HAL_ERROR;
- xStatus = HAL_I2C_Mem_Write(&hi2c1, EEPROM_ADDRESS, u8_reg_addr, I2C_MEMADD_SIZE_16BIT, u8_data, len, 100);
- HAL_Delay(10);
- if (xStatus != HAL_OK) {i2c_error();}
- return xStatus;
- }
- eep_status_t i2c_read(uint16_t u8_reg_addr, uint8_t *u8_data, uint16_t len) {
- HAL_StatusTypeDef xStatus = HAL_ERROR;
- xStatus = HAL_I2C_Mem_Read(&hi2c1, EEPROM_ADDRESS, u8_reg_addr, I2C_MEMADD_SIZE_16BIT, u8_data, len, 100);
- eep_small_delay();
- if (xStatus != HAL_OK) {i2c_error();}
- return xStatus;
- }
- /* High Level Functions */
- eep_status_t eep_write_byte(uint16_t u8_reg_addr, uint8_t u8_data) {
- return i2c_write(u8_reg_addr, &u8_data, 1);
- }
- eep_status_t eep_read_byte(uint16_t u8_reg_addr, uint8_t *u8_data) {
- return i2c_read(u8_reg_addr, u8_data, 1);
- }
- eep_status_t eep_is_data_avaiable(void) {
- eep_status_t xStatus = EEP_ERROR;
- uint8_t data = 0;
- eep_read_byte(EEPROM_DATA_AVAILABLE_ADDR, &data);
- if (data == 0) {xStatus = EEP_ERROR;}
- else if (data == 1) {xStatus = EEP_OK;}
- else {xStatus = EEP_ERROR;}
- return xStatus;
- }
- eep_status_t eep_set_data_available(uint8_t val) {
- return eep_write_byte(EEPROM_DATA_AVAILABLE_ADDR, val);
- }
- eep_status_t eep_write_word(uint16_t reg_addr, uint32_t value) {
- uint8_t val_byte[4] = {0};
- val_byte[0] = (value >> 24) & 0xFF;
- val_byte[1] = (value >> 16) & 0xFF;
- val_byte[2] = (value >> 8) & 0xFF;
- val_byte[3] = (value >> 0) & 0xFF;
- return i2c_write(reg_addr, val_byte, 4);
- }
- eep_status_t eep_write_float(uint16_t reg_addr, float value) {
- union FtoHex{
- float fval;
- uint32_t hval;
- }float_to_hex;
- float_to_hex.fval = value;
- return eep_write_word(reg_addr, float_to_hex.hval);
- }
- uint32_t eep_read_word(uint16_t reg_addr) {
- uint8_t val_buff[4] = {0};
- i2c_read(reg_addr, val_buff, 4);
- return ((val_buff[0] << 24) | (val_buff[1] << 16) | (val_buff[2] << 8) | (val_buff[3] << 0));
- }
- float eep_read_float(uint8_t reg_addr) {
- union FtoHex{
- float fval;
- uint32_t hval;
- }float_to_hex;
- float_to_hex.hval = eep_read_word(reg_addr);
- return float_to_hex.fval;
- }
- void eep_write_string(uint16_t reg_addr, uint8_t *src, uint16_t len) {
- i2c_write(reg_addr, src, len);
- }
- void eep_read_string(uint16_t reg_addr, uint8_t *dest, uint16_t len) {
- i2c_read(reg_addr, dest, len);
- }
- //---------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement