ls1x-master-v0.4/private/ls1c102/ls1c102_i2c.h
2024-11-27 15:39:05 +08:00

181 lines
7.6 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.

#ifndef INCLUDE_I2C_H_
#define INCLUDE_I2C_H_
//#include "ls1c101.h"
#include"test.h"
//#include"ls1c102_regapi.h"
//#include"stdint.h"
#include"ls1x.h"
/**
* @说明I2C接口宏定义
*
*/
typedef struct
{
volatile uint8_t PRERL; /* 分频值低字节寄存器 */
volatile uint8_t PRERH; /* 分频值高字节寄存器 */
volatile uint8_t CTRL; /* 控制寄存器 */
volatile uint8_t DR; /* 数据寄存器 */
volatile uint8_t CR_SR; /* 命令寄存器 兼 状态寄存器 */
volatile uint8_t BLTOP; /* 总线死锁时间寄存器 */
volatile uint8_t RESERVED0; /* 保留字节 */
volatile uint8_t SADDR; /* 从模式地址寄存器 */
} I2C_TypeDef;
#define I2C ((I2C_TypeDef *) I2C_BASE)
typedef struct
{
uint32_t I2C_ClockSpeed; /*!< Specifies the clock frequency.
This parameter must be set to a value lower than 400kHz */
uint8_t I2C_Mode; /*!< Specifies the I2C mode.
This parameter can be a value of @ref I2C_mode */
uint8_t I2C_OwnAddress1; /*!< Specifies the first device own address.
This parameter can be a 7-bit or 10-bit address. */
uint8_t I2C_BuslockCheckEn; /*!< Set the I2C buslock check function*/
uint8_t I2C_SlvAutoresetEn; /*!< Set the I2C autoreset check function*/
}I2C_InitTypeDef;
#define IS_I2C_ALL_PERIPH(PERIPH) ((PERIPH) == I2C)
#define IS_I2C_CLEAR_FLAG(FLAG) (((FLAG) & 0x01) == 0x01)
/** @defgroup I2C_mode
* @{
*/
#define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) >= 0x1) && ((SPEED) <= 400000))
#define IS_I2C_OWN_ADDRESS1(ADDRESS1) ((ADDRESS1) <= 0x3FF)
#define I2C_Mode_Slave ((uint8_t)0x00)
#define I2C_Mode_Master ((uint8_t)0x20)
#define IS_I2C_MODE(MODE) (((MODE) == I2C_Mode_Slave) || \
((MODE) == I2C_Mode_Master))
/**
* @}
*/
#define I2C_Buslock_Check_Enable ((uint8_t)0x02)
#define I2C_Buslock_Check_Disable ((uint8_t)0x00)
#define IS_I2C_BUSLOCK_CHECK_EN(STATE) (((STATE) == I2C_Buslock_Check_Enable) || \
((STATE) == I2C_Buslock_Check_Disable))
#define I2C_Slv_Autoreset_Enable ((uint8_t)0x01)
#define I2C_Slv_Autoreset_Disable ((uint8_t)0x00)
#define IS_I2C_SLV_AUTORESET_EN(STATE) (((STATE) == I2C_Slv_Autoreset_Enable) || \
((STATE) == I2C_Slv_Autoreset_Disable))
/** @defgroup I2C_transfer_direction
* @{
*/
#define I2C_Direction_Transmitter ((uint8_t)0x00)
#define I2C_Direction_Receiver ((uint8_t)0x01)
#define IS_I2C_DIRECTION(DIRECTION) (((DIRECTION) == I2C_Direction_Transmitter) || \
((DIRECTION) == I2C_Direction_Receiver))
#define I2C_ACK ((uint8_t)0x00)
#define I2C_NACK ((uint8_t)0x08)
#define IS_I2C_ACK(ACK) (((ACK) == I2C_ACK) || ((DIRECTION) == I2C_NACK))
#define I2C_STOP ((uint8_t)0x40)
#define I2C_NSTOP ((uint8_t)0x00)
#define IS_I2C_STOP(STOP) (((STOP) == I2C_STOP) || ((DIRECTION) == I2C_NSTOP))
/**
*@˵<><CBB5><EFBFBD><EFBFBD> I2C_STATE_Flags
*/
#define I2C_STATE_RxACK ((uint8_t)0x80) /* 收到的应答位: 0表示收到应答1表示收到NACK */
#define I2C_STATE_BUSY ((uint8_t)0x40) /* 总线忙标志 */
#define I2C_STATE_AL ((uint8_t)0x20) /* 失去仲裁1表示主设备失去总线控制权 */
#define I2C_STATE_Slave_Addressed ((uint8_t)0x10) /* 被寻址1表示作为从设备时已被寻址成功 */
#define I2C_STATE_Slave_Rw ((uint8_t)0x08) /* 从设备读写0表示被读 1表示被写 */
#define I2C_STATE_Buslock ((uint8_t)0x04) /* 总线死锁1表示总线出现死锁 */
#define I2C_STATE_TIP ((uint8_t)0x02) /* 传输进行1表示主设备有效正在传输 */
#define I2C_STATE_IF ((uint8_t)0x01) /* 中断标志位: 1表示传输完一个字节或主设备失去仲裁 */
/** @defgroup I2C_registers
* @{
*/
#define IS_I2C_GET_STATUS(I2C_STATUS) (((I2C_STATUS) == I2C_STATE_RxACK)||\
((I2C_STATUS) == I2C_STATE_BUSY)||\
((I2C_STATUS) == I2C_STATE_AL)||\
((I2C_STATUS) == I2C_STATE_Slave_Addressed)||\
((I2C_STATUS) == I2C_STATE_Slave_Rw)||\
((I2C_STATUS) == I2C_STATE_Buslock)||\
((I2C_STATUS) == I2C_STATE_TIP)||\
((I2C_STATUS) == I2C_STATE_IF)||\
#define I2C_Register_PRERL ((uint8_t)0x00)
#define I2C_Register_PRERH ((uint8_t)0x01)
#define I2C_Register_CTR ((uint8_t)0x02)
#define I2C_Register_DR ((uint8_t)0x03)
#define I2C_Register_SR ((uint8_t)0x04)
#define I2C_Register_BLTOP ((uint8_t)0x05)
#define I2C_Register_SADDR ((uint8_t)0x07)
#define IS_I2C_REGISTER(REGISTER) (((REGISTER) == I2C_Register_PRERL) || \
((REGISTER) == I2C_Register_PRERH) || \
((REGISTER) == I2C_Register_CTR) || \
((REGISTER) == I2C_Register_DR) || \
((REGISTER) == I2C_Register_SR) || \
((REGISTER) == I2C_Register_BLTOP) || \
((REGISTER) == I2C_Register_BLTOP))
#define IRQ_I2C ((uint8_t)0x02)
//
//#define I2C_RXACK ((uint8_t)0x00)
//#define I2C_BUSY ((uint8_t)0x01)
//#define I2C_AL ((uint8_t)0x02)
//#define I2C_SLV_ADDR ((uint8_t)0x03)
//#define I2C_SLV_RW ((uint8_t)0x04)
//#define I2C_BUS_LOCK ((uint8_t)0x05)
//#define I2C_TIP ((uint8_t)0x07)
//#define I2C_IF ((uint8_t)0x07)
//IS_I2C_CLEAR_FLAG(FLAG) ((FLAG) == )
void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct);
void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct);
void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState); //I2C主设备产生start信号
void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState); //I2C主设备产生stop信号
void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState);//I2C主设备产生ack信号
void I2C_ITConfig(I2C_TypeDef* I2Cx, FunctionalState NewState); //I2C中断设置
void I2C_ITCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); //I2C中断开启
void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data); //I2C发送数据
void I2C_ReceiveData(I2C_TypeDef* I2Cx, FunctionalState ACK, FunctionalState STOP); //I2C接收数据
void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction); //I2C发送从设备地址
uint8_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register); //I2C读取寄存器数值
void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint8_t I2C_FLAG); //I2C清除寄存器状态
ITStatus I2C_GetStatus(I2C_TypeDef* I2Cx, uint8_t I2C_STATUS); //I2C读取状态
void I2C_ClearIT(I2C_TypeDef* I2Cx); //I2C清除中断标志
void I2C_wait(I2C_TypeDef* I2Cx); //I2C等待传输完毕
void I2C_Unlock(I2C_TypeDef* I2Cx); //I2C解除总线死锁
void I2C_BUSY(I2C_TypeDef* I2Cx); //I2C等待总线空闲
void CAT24_Write(uint16_t Waddr,uint8_t Tdata); //I2C CAT24指定地址写入指定数据查询方式
uint8_t CAT24_Read(uint16_t Raddr); //I2C CAT24指定地址读出数据查询方式
void CAT24_Write_Int(uint16_t Waddr,uint8_t Tdata); //I2C CAT24指定地址写入指定数据中断方式
uint8_t CAT24_Read_Int(uint16_t Raddr); //I2C CAT24指定地址读出数据中断方式
#endif /* INCLUDE_I2C_H_ */