📄 twi.h
字号:
#ifndef TWI_H
#define TWI_H
//------在此设定芯片型号------
//时钟定为外部晶振7.3728MHz,F_CPU=7372800
//定义了各种模式下的状态码列表(TWSR已屏蔽预分频位),本文后面附上中文描述
//管脚定义
#define pinSCL 0 //PC0 SCL
#define pinSDA 1 //PC1 SDA
//为保险起见,最好在SCL/SDA接上1~10K的外部上拉电阻到VCC。
#define fSCL 100000 //TWI时钟为100KHz
//预分频系数=1(TWPS=0)
#if F_CPU < fSCL*36
#define TWBR_SET 10; //TWBR必须大于等于10
#else
#define TWBR_SET (F_CPU/fSCL-16)/2; //计算TWBR值
#endif
#define TW_ACT (1<<TWINT)|(1<<TWEN)|(1<<TWIE)
//TWCR只能IN/OUT,直接赋值比逻辑运算(|= &=)更节省空间
#define SLA_24CXX 0xA0 //24Cxx系列的厂商器件地址(高四位)
#define ADDR_24C02 0x00
// AT24C02的地址线A2/1/0全部接地,SLAW=0xA0+0x00<<1+0x00,SLAR=0xA0+0x00<<1+0x01
#define SLAW 0xA0
#define SLAR 0xA1
//TWI_操作状态
#define TW_BUSY 0
#define TW_OK 1
#define TW_FAIL 2
//TWI_读写命令状态
#define OP_BUSY 0
#define OP_RUN 1
//TWI读写操作公共步骤
#define ST_FAIL 0 //出错状态
#define ST_START 1 //START状态检查
#define ST_SLAW 2 //SLAW状态检查
#define ST_WADDR 3 //ADDR状态检查
//TWI读操作步骤
#define ST_RESTART 4 //RESTART状态检查
#define ST_SLAR 5 //SLAR状态检查
#define ST_RDATA 6 //读取数据状态检查,循环n字节
//TWI写操作步骤
#define ST_WDATA 7 //写数据状态检查,循环n字节
#define FAIL_MAX 10 //重试次数最大值
extern struct str_TWI strTWI;
//---------------------------
//-----------4个I2总线公用函数, 可供其它I2总线器件的程序调用--------------
extern uint8 TWI_RW(uint8 sla,uint16 addr,uint8 *ptr,uint16 len);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -