Advertisement
Guest User

eeprom.c

a guest
Jan 5th, 2021
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.91 KB | None | 0 0
  1. /*
  2.  * eeprom.c
  3.  *
  4.  *  Created on: 04-Jan-2021
  5.  *      Author: DEVJEET MANDAL
  6.  */
  7.  
  8. #include "i2c.h"
  9. #include "eeprom.h"
  10.  
  11. #include "stdio.h"
  12. #include "stdlib.h"
  13.  
  14. /* Low Level function */
  15. void eep_small_delay(void)          {
  16.     for (uint32_t i = 0; i < 65535; i++)
  17.         __asm__("NOP");
  18. }
  19.  
  20. void i2c_error(void)    {
  21.     HAL_I2C_DeInit(&hi2c1);     //De-init i2c bus
  22.     __asm__("NOP");
  23.     HAL_I2C_Init(&hi2c1);       //re-init i2c bus
  24.     __asm__("NOP");
  25. }
  26.  
  27. eep_status_t i2c_write(uint16_t u8_reg_addr, uint8_t *u8_data, uint16_t len)            {
  28.     HAL_StatusTypeDef xStatus = HAL_ERROR;
  29.     xStatus = HAL_I2C_Mem_Write(&hi2c1, EEPROM_ADDRESS, u8_reg_addr, I2C_MEMADD_SIZE_16BIT, u8_data, len, 100);
  30.     HAL_Delay(10);
  31.     if (xStatus != HAL_OK)  {i2c_error();}
  32.     return xStatus;
  33. }
  34.  
  35. eep_status_t i2c_read(uint16_t u8_reg_addr, uint8_t *u8_data, uint16_t len)         {
  36.     HAL_StatusTypeDef xStatus = HAL_ERROR;
  37.     xStatus = HAL_I2C_Mem_Read(&hi2c1, EEPROM_ADDRESS, u8_reg_addr, I2C_MEMADD_SIZE_16BIT, u8_data, len, 100);
  38.     eep_small_delay();
  39.     if (xStatus != HAL_OK)  {i2c_error();}
  40.     return xStatus;
  41. }
  42.  
  43. /* High Level Functions */
  44. eep_status_t eep_write_byte(uint16_t u8_reg_addr, uint8_t u8_data)      {
  45.     return i2c_write(u8_reg_addr, &u8_data, 1);
  46. }
  47.  
  48. eep_status_t eep_read_byte(uint16_t u8_reg_addr, uint8_t *u8_data)      {
  49.     return i2c_read(u8_reg_addr, u8_data, 1);
  50. }
  51.  
  52. eep_status_t eep_is_data_avaiable(void)                     {
  53.     eep_status_t xStatus = EEP_ERROR;
  54.     uint8_t data = 0;
  55.     eep_read_byte(EEPROM_DATA_AVAILABLE_ADDR, &data);
  56.     if (data == 0)      {xStatus = EEP_ERROR;}
  57.     else if (data == 1) {xStatus = EEP_OK;}
  58.     else                {xStatus = EEP_ERROR;}
  59.     return xStatus;
  60. }
  61.  
  62. eep_status_t eep_set_data_available(uint8_t val)            {
  63.     return eep_write_byte(EEPROM_DATA_AVAILABLE_ADDR, val);
  64. }
  65.  
  66. eep_status_t eep_write_word(uint16_t reg_addr, uint32_t value)      {
  67.     uint8_t val_byte[4] = {0};
  68.     val_byte[0] = (value >> 24) & 0xFF;
  69.     val_byte[1] = (value >> 16) & 0xFF;
  70.     val_byte[2] = (value >> 8) & 0xFF;
  71.     val_byte[3] = (value >> 0) & 0xFF;
  72.     return i2c_write(reg_addr, val_byte, 4);
  73. }
  74.  
  75. eep_status_t eep_write_float(uint16_t reg_addr, float value)        {
  76.     union FtoHex{
  77.         float fval;
  78.         uint32_t hval;
  79.     }float_to_hex;
  80.  
  81.     float_to_hex.fval = value;
  82.     return eep_write_word(reg_addr, float_to_hex.hval);
  83. }
  84.  
  85. uint32_t eep_read_word(uint16_t reg_addr)                   {
  86.     uint8_t val_buff[4] = {0};
  87.     i2c_read(reg_addr, val_buff, 4);
  88.     return ((val_buff[0] << 24) | (val_buff[1] << 16) | (val_buff[2] << 8) | (val_buff[3] << 0));
  89. }
  90.  
  91. float eep_read_float(uint8_t reg_addr)  {
  92.     union FtoHex{
  93.         float fval;
  94.         uint32_t hval;
  95.     }float_to_hex;
  96.  
  97.     float_to_hex.hval = eep_read_word(reg_addr);
  98.     return float_to_hex.fval;
  99. }
  100.  
  101. void eep_write_string(uint16_t reg_addr, uint8_t *src, uint16_t len)        {
  102.     i2c_write(reg_addr, src, len);
  103. }
  104.  
  105. void eep_read_string(uint16_t reg_addr, uint8_t *dest, uint16_t len)            {
  106.     i2c_read(reg_addr, dest, len);
  107. }
  108.  
  109. //---------------------------------------------------------------------
  110.  
  111.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement