📄 i2c.h
字号:
/*********************************************************************************************************
**文件名称:I2CINT.c
**功能说明:硬件I2C中断方式软件包头文件。
**使用说明:软件包采用中断方式进行操作。
********************************************************************************************************/
#ifndef I2CINT_H
#define I2CINT_H
/*子地址结构*/
#define ONE_BYTE_SUBA 1
#define TWO_BYTE_SUBA 2
#define X_ADD_8_SUBA 3
//LM75
#define LM75A_ADDR 0x90
//24C256
typedef enum
{
EEPROM_ERROR_NONE,
EEPROM_ERROR_READ,
EEPROM_ERROR_WRITE,
EEPROM_ERROR_VERIFY
} eeprom_error_t;
#define EEPROM_ADDR 0xA0
#define EEPROM_TYPE 02 // 24C02
#define EEPROM_BLOCK_SIZE 64
#define EEPROM_Kbits EEPROM_TYPE
#define EEPROM_Kbytes (EEPROM_Kbits / 8)
#define EEPROM_SIZE (unsigned int)(EEPROM_Kbytes * 1024)
#define EEPROM_FIRST_BYTE 0x0000
#define EEPROM_LAST_BYTE ((unsigned int)EEPROM_SIZE - 1)
#define EEPROM_WRITE 0x00 //24c256操作协议,地址最后一位表示读写
#define EEPROM_READ 0x01
//I2C 通用例程
#define I2CONSET_I2EN 0x00000040 /* I2C Control Set Register */
#define I2CONSET_AA 0x00000004
#define I2CONSET_SI 0x00000008
#define I2CONSET_STO 0x00000010
#define I2CONSET_STA 0x00000020
#define I2CONCLR_AAC 0x00000004 /* I2C Control clear Register */
#define I2CONCLR_SIC 0x00000008
#define I2CONCLR_STAC 0x00000020
#define I2CONCLR_I2ENC 0x00000040
#define I2DAT_I2C 0x00000000 /* I2C Data Reg */
#define I2ADR_I2C 0x00000000 /* I2C Slave Address Reg */
#define I2SCLH_SCLH 0x00000080 /* I2C SCL Duty Cycle High Reg */
#define I2SCLL_SCLL 0x00000080 /* I2C SCL Duty Cycle Low Reg */
/*********************************************************************************************************
** 函数名称: void I2C_Init(BYTE n,BYTE MODE,DWORD Fi2c,BYTE Adr,BYTE slot)
** 功能描述: 初始化I2C接口
** 输 入: n :I2C接口号,0--I2C0,1--I2C1
** MODE :工作模式,0--从模式,1--主模式
** Fi2c :I2C通信速率,0~400K,如果超过400K,则会强制设置为400KHz,如果设置为从机,该参数无效
** Adr :当设置为从模式时,Adr表示从地址,在主模式下,该参数是无效
** slot :由于I2C采用IRQ中断方式,所以需要指定对应的通道,0~15
** 输 出: 1--接口初始化成功,0--接口初始化失败
** 调用模块: 初始化函数会将I2Cn的中断设置为IRQ中断,并分为slot
********************************************************************************************************/
extern BYTE I2C_Init(BYTE MODE, DWORD Fi2c, BYTE Adr);
/*********************************************************************************************************
** 函数名称: BYTE I2C_SendByte(BYTE n,BYTE sla,BYTE dat)
** 功能描述: 向无子地址器件发送1字节数据
** 输 入: n 接口号0,1
** sla 器件地址
** dat 要发送的数据
** 输 出: 返回值为0时表示出错,为1时表示操作正确
** 调用模块: 使用前要初始化好I2C引脚功能和I2C中断,并已使能I2C主模式,程序死等待操作完成
********************************************************************************************************/
extern BYTE I2C_SendByte(BYTE sla, BYTE dat);
/*********************************************************************************************************
** 函数名称: BYTE I2C_RcvByte(BYTE n,BYTE sla,BYTE *dat)
** 功能描述: 从无子地址器件读取1字节数据
** 输 入: n 接口号0,1
** sla 器件地址
** dat 接受数据的指针变量
** 输 出: 返回值为0时表示出错,为1时表示操作正确
** 调用模块: 使用前要初始化好I2C引脚功能和I2C中断,并已使能I2C主模式,程序死等待操作完成
********************************************************************************************************/
extern BYTE I2C_RcvByte(BYTE sla, BYTE *dat);
/*********************************************************************************************************
** 函数名称: BYTE I2C_ReadNByte(BYTE n,BYTE sla,DWORD suba_type,DWORD suba,BYTE *s,DWORD num)
** 功能描述: 从有子地址器件任意地址开始读取N字节数据
** 输 入: n 接口号0,1
** sla 器件从地址
** suba_type 子地址结构 1-单字节地址,2-双字节地址,3-8+X结构
** suba 器件子地址
** *s 数据接收缓冲区指针
** num 读取的个数
** 输 出: 1 操作成功
** 0 操作失败
** 调用模块: 程序死等待操作完成
********************************************************************************************************/
extern BYTE I2C_ReadNByte(BYTE sla, DWORD suba_type, DWORD suba,BYTE *s,DWORD num);
/*********************************************************************************************************
** 函数名称: BYTE I2C_WriteNByte(BYTE n,BYTE sla,DWORD suba_type,DWORD suba,BYTE *s,DWORD num)
** 功能描述: 向有子地址器件写入N字节数据
** 输 入: n 接口号0,1
** sla 器件从地址
** suba_type 子地址结构 1-单字节地址,2-双字节地址,3-8+X结构
** suba 器件子地址
** *s 数据发送缓冲区指针
** num 要写入的数据的个数
** 输 出: 1 操作成功
** 0 操作失败
** 调用模块: 程序死等待操作完成
********************************************************************************************************/
extern BYTE I2C_WriteNByte(BYTE sla, BYTE suba_type, DWORD suba,BYTE *s,DWORD num);
extern int Read_Temp(void); // 读取当前温度
extern BYTE EEPROM_Write(const WORD start_address, BYTE user_data);
extern BYTE EEPROM_Read(const WORD start_address, BYTE *user_data);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -