| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /**
- * @file HW_I2C_ATY.h
- *
- * @param Project DEVICE_GENERAL_ATY_LIB
- *
- * @author ATY
- *
- * @copyright
- * - Copyright 2017 - 2023 MZ-ATY
- * - This code follows:
- * - MZ-ATY Various Contents Joint Statement -
- * <a href="https://mengze.top/MZ-ATY_VCJS">
- * https://mengze.top/MZ-ATY_VCJS</a>
- * - CC 4.0 BY-NC-SA -
- * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
- * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
- * - Your use will be deemed to have accepted the terms of this statement.
- *
- * @brief Familiar functions of I2C for all embedded device
- *
- * @version
- * - 1_01_220608 > ATY
- * -# Preliminary version, first Release
- * - 1_02_240108 > ATY
- * -# add multy addr and channel
- * - 1_01_240111 > ATY
- * -# add lock
- ********************************************************************************
- */
- #ifndef __HW_I2C_ATY_H
- #define __HW_I2C_ATY_H
- #include "INCLUDE_ATY.h"
- /******************************* For user *************************************/
- /**
- * @brief Eliminate HAL_I2C bug
- * @warning Put "__HAL_RCC_I2C1_CLK_ENABLE();" before GPIO init
- */
- //void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
- //{
- // GPIO_InitTypeDef GPIO_InitStruct = {0};
- // if(hi2c->Instance==I2C1)
- // {
- // /* USER CODE BEGIN I2C1_MspInit 0 */
- // __HAL_RCC_I2C1_CLK_ENABLE();
- // /* USER CODE END I2C1_MspInit 0 */
- //
- // __HAL_RCC_GPIOB_CLK_ENABLE();
- // /**I2C1 GPIO Configuration
- // PB6 ------> I2C1_SCL
- // PB7 ------> I2C1_SDA
- // */
- // GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
- // GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
- // GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
- // HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- //
- // /* Peripheral clock enable */
- // //__HAL_RCC_I2C1_CLK_ENABLE();
- // /* USER CODE BEGIN I2C1_MspInit 1 */
- //
- // /* USER CODE END I2C1_MspInit 1 */
- // }
- //
- //}
- #define I2C_WAIT_ACK_TIME 250 // us
- #define SHORT_DELAY 1
- #define LONG_DELAY 1
- /******************************************************************************/
- struct HW_I2C_ATY_Dev
- {
- uint8_t hardwareEnable;
- void (*sclSet)(uint8_t level);
- void (*sdaSet)(uint8_t cmd, uint8_t param);
- uint8_t(*sdaGet)();
- uint8_t(*i2cProcess)(uint8_t addr, uint8_t* data_t, uint8_t len, uint8_t rw);
- void (*delay)(uint32_t t);
- uint8_t lock;
- uint8_t debugEnable;
- void (*LOG)(const char*, ...);
- };
- uint8_t I2C_Start(struct HW_I2C_ATY_Dev* dev);
- uint8_t I2C_Stop(struct HW_I2C_ATY_Dev* dev);
- uint8_t I2C_Ack(struct HW_I2C_ATY_Dev* dev);
- uint8_t I2C_NoAck(struct HW_I2C_ATY_Dev* dev);
- uint8_t I2C_WaitAck(uint16_t maxErrTime, struct HW_I2C_ATY_Dev* dev);
- uint8_t I2C_WriteByte(uint8_t byte, struct HW_I2C_ATY_Dev* dev);
- uint8_t I2C_ReadByte(uint8_t ack, struct HW_I2C_ATY_Dev* dev);
- uint8_t I2C_Write(uint8_t addr, uint8_t* data_t, uint8_t len, struct HW_I2C_ATY_Dev* dev);
- uint8_t I2C_Write_NoStop(uint8_t addr, uint8_t* data_t, uint8_t len, struct HW_I2C_ATY_Dev* dev);
- uint8_t I2C_Read(uint8_t addr, uint8_t* data_t, uint8_t len, struct HW_I2C_ATY_Dev* dev);
- uint8_t I2C_WriteReg(uint8_t addr, uint8_t reg, uint8_t* data_t, uint8_t len, struct HW_I2C_ATY_Dev* dev);
- uint8_t I2C_ReadReg(uint8_t addr, uint8_t reg, uint8_t* data_t, uint8_t len, struct HW_I2C_ATY_Dev* dev);
- #endif /* __HW_I2C_ATY_H */
- /******************************** End Of File *********************************/
|