HW_I2C_ATY.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /**
  2. * @file HW_I2C_ATY.h
  3. *
  4. * @param Project DEVICE_GENERAL_ATY_LIB
  5. *
  6. * @author ATY
  7. *
  8. * @copyright
  9. * - Copyright 2017 - 2023 MZ-ATY
  10. * - This code follows:
  11. * - MZ-ATY Various Contents Joint Statement -
  12. * <a href="https://mengze.top/MZ-ATY_VCJS">
  13. * https://mengze.top/MZ-ATY_VCJS</a>
  14. * - CC 4.0 BY-NC-SA -
  15. * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  16. * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
  17. * - Your use will be deemed to have accepted the terms of this statement.
  18. *
  19. * @brief Familiar functions of I2C for all embedded device
  20. *
  21. * @version
  22. * - 1_01_220608 > ATY
  23. * -# Preliminary version, first Release
  24. * - 1_02_240108 > ATY
  25. * -# add multy addr and channel
  26. * - 1_01_240111 > ATY
  27. * -# add lock
  28. ********************************************************************************
  29. */
  30. #ifndef __HW_I2C_ATY_H
  31. #define __HW_I2C_ATY_H
  32. #include "INCLUDE_ATY.h"
  33. /******************************* For user *************************************/
  34. /**
  35. * @brief Eliminate HAL_I2C bug
  36. * @warning Put "__HAL_RCC_I2C1_CLK_ENABLE();" before GPIO init
  37. */
  38. //void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
  39. //{
  40. // GPIO_InitTypeDef GPIO_InitStruct = {0};
  41. // if(hi2c->Instance==I2C1)
  42. // {
  43. // /* USER CODE BEGIN I2C1_MspInit 0 */
  44. // __HAL_RCC_I2C1_CLK_ENABLE();
  45. // /* USER CODE END I2C1_MspInit 0 */
  46. //
  47. // __HAL_RCC_GPIOB_CLK_ENABLE();
  48. // /**I2C1 GPIO Configuration
  49. // PB6 ------> I2C1_SCL
  50. // PB7 ------> I2C1_SDA
  51. // */
  52. // GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
  53. // GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
  54. // GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  55. // HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  56. //
  57. // /* Peripheral clock enable */
  58. // //__HAL_RCC_I2C1_CLK_ENABLE();
  59. // /* USER CODE BEGIN I2C1_MspInit 1 */
  60. //
  61. // /* USER CODE END I2C1_MspInit 1 */
  62. // }
  63. //
  64. //}
  65. #define I2C_WAIT_ACK_TIME 250 // us
  66. #define SHORT_DELAY 1
  67. #define LONG_DELAY 1
  68. /******************************************************************************/
  69. struct HW_I2C_ATY_Dev
  70. {
  71. uint8_t hardwareEnable;
  72. void (*sclSet)(uint8_t level);
  73. void (*sdaSet)(uint8_t cmd, uint8_t param);
  74. uint8_t(*sdaGet)();
  75. uint8_t(*i2cProcess)(uint8_t addr, uint8_t* data_t, uint8_t len, uint8_t rw);
  76. void (*delay)(uint32_t t);
  77. uint8_t lock;
  78. uint8_t debugEnable;
  79. void (*LOG)(const char*, ...);
  80. };
  81. uint8_t I2C_Start(struct HW_I2C_ATY_Dev* dev);
  82. uint8_t I2C_Stop(struct HW_I2C_ATY_Dev* dev);
  83. uint8_t I2C_Ack(struct HW_I2C_ATY_Dev* dev);
  84. uint8_t I2C_NoAck(struct HW_I2C_ATY_Dev* dev);
  85. uint8_t I2C_WaitAck(uint16_t maxErrTime, struct HW_I2C_ATY_Dev* dev);
  86. uint8_t I2C_WriteByte(uint8_t byte, struct HW_I2C_ATY_Dev* dev);
  87. uint8_t I2C_ReadByte(uint8_t ack, struct HW_I2C_ATY_Dev* dev);
  88. uint8_t I2C_Write(uint8_t addr, uint8_t* data_t, uint8_t len, struct HW_I2C_ATY_Dev* dev);
  89. uint8_t I2C_Write_NoStop(uint8_t addr, uint8_t* data_t, uint8_t len, struct HW_I2C_ATY_Dev* dev);
  90. uint8_t I2C_Read(uint8_t addr, uint8_t* data_t, uint8_t len, struct HW_I2C_ATY_Dev* dev);
  91. uint8_t I2C_WriteReg(uint8_t addr, uint8_t reg, uint8_t* data_t, uint8_t len, struct HW_I2C_ATY_Dev* dev);
  92. uint8_t I2C_ReadReg(uint8_t addr, uint8_t reg, uint8_t* data_t, uint8_t len, struct HW_I2C_ATY_Dev* dev);
  93. #endif /* __HW_I2C_ATY_H */
  94. /******************************** End Of File *********************************/