BLE_TYQ_CH584M/BSP/inc/bsp_i2c.h

145 lines
3.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-15 15:42:00
* @LastEditors : stark1898y 1658608470@qq.com
* @LastEditTime : 2024-12-16 20:50:17
* @FilePath : \BLE_TYQ_CH584M\BSP\inc\bsp_i2c.h
* @Description :
*
* Copyright (c) 2024 by yzy, All Rights Reserved.
*/
#ifndef __BSP_I2C_H__
#define __BSP_I2C_H__
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include "CONFIG.h"
#define GXHTC3C_ADDR 0x70
// #define GXHTC3C_7BIT_ADDR 0x38 // (GXHTC3C_ADDR >> 1)
// 供电电压VDD从0上升上电电压VPOR芯片会进入空闲状态。然后应该通过发送命令让芯片进入休眠状态以降低芯片功耗
#define GXHTC3C_CMD_SLEEP 0xB098
// 当芯片处于休眠状态时,如果要进行其它的命令操作,需要发送唤醒命令
#define GXHTC3C_CMD_WAKEUP 0x3517
#define GXHTC3C_CMD_NORMAL_CLK_STRE_ON_TEMP_FRONT 0x7CA2
#define GXHTC3C_CMD_NORMAL_CLK_STRE_ON_HUMI_FRONT 0x5C24
#define GXHTC3C_CMD_NORMAL_CLK_STRE_OFF_TEMP_FRONT 0x7866
#define GXHTC3C_CMD_NORMAL_CLK_STRE_OFF_HUMI_FRONT 0x58E0
#define GXHTC3C_CMD_LOW_CLK_STRE_ON_TEMP_FRONT 0x6458
#define GXHTC3C_CMD_LOW_CLK_STRE_ON_HUMI_FRONT 0x44DE
#define GXHTC3C_CMD_LOW_CLK_STRE_OFF_TEMP_FRONT 0x609C
#define GXHTC3C_CMD_LOW_CLK_STRE_OFF_HUMI_FRONT 0x401A
#define GXHTC3C_CMD_SOFT_REST 0x805D
// 读传感器序列号
#define GXHTC3C_CMD_READ_ID 0xEFC8
#define I2C_BUFFER_LENGTH 32
#define I2C_READ 1
#define I2C_WRITE 0
typedef enum {
I2C_READY,
I2C_MRX,
I2C_MTX,
I2C_SRX,
I2C_STX,
}i2c_state_t;
typedef enum {
I2C_NO_MEM = 1,
I2C_STATE,
I2C_MT_NACK,
I2C_ARB_LOST,
I2C_BUS_ERROR,
I2C_OVR,
I2C_PECERR,
I2C_TIMEOUT,
I2C_SMBALERT,
}i2c_error_t;
/**
* @brief User callback function on I2C slave transmitting.
*
* @param data Pointer to user data to transmit.
*
* @param len Pointer to user data length.
*/
typedef void (*i2c_on_slave_transmit)(uint8_t *data, uint8_t *len);
/**
* @brief User callback function on I2C slave received.
*
* @param data Pointer to current received data.
*
* @param len Received data length.
*/
typedef void (*i2c_on_slave_receive)(uint8_t *data, uint8_t len);
struct i2c_slave_cb {
i2c_on_slave_transmit on_transmit;
i2c_on_slave_receive on_receive;
};
// /**
// * @brief I2C interrupt routine initialization.
// *
// * @param address I2C address.
// */
// void i2c_app_init(uint8_t address);
/**
* @brief I2C slave user callback function regiester.
*
* @param cb Pointer to user callback function.
*/
void i2c_slave_cb_register(struct i2c_slave_cb *cb);
/**
* @brief I2C master write data to slave.
*
* @param addr_7bit I2C slave 7bit address.
* @param data Pointer to the write data.
* @param length Write data length.
* @param wait Choose to wait for the write process to end or not.
* @param send_stop Choose to send stop or not.
* @return 0 If successful.
*/
int i2c_write_to(uint8_t addr_7bit, const uint8_t *data, uint8_t length,
uint8_t wait, uint8_t send_stop);
/**
* @brief I2C master read data to slave
*
* @param addr_7bit I2C slave 7bit address.
* @param data Pointer to the read data to put in.
* @param length Read data length.
* @param send_stop Choose to send stop or not
* @param timeout Read process timeout.
* @return Negative on error code otherwise indicates the actual read length.
*/
int i2c_read_from(uint8_t addr_7bit, uint8_t *data, uint8_t length,
uint8_t send_stop, int timeout);
void GXHTC3C_Sleep(void);
void GXHTC3C_Wakeup(void);
void GXHTC3C_GetStart(void);
uint8_t GXHTC3C_GetTempHumi(float *humi, float *temp);
void BSP_I2C_DeInit(void);
void GXHTC3C_Init(void);
int BSP_ReadTempHumi(float *humi, float *temp);
#endif // !__BSP_I2C_H__