?? twi.h
字號(hào):
#ifndef __TWI_H__
#define __TWI_H__
#ifndef F_CPU
#define F_CPU 7372800 //晶振,注意有可能CONFIG.H里面已經(jīng)定義的情況
#endif
#define TWI_MOD 1
//twi.h里面有定義,現(xiàn)附上中文描述
//主機(jī)發(fā)送狀態(tài)碼
#define TW_START 0x08 //START已發(fā)送
#define TW_REP_START 0x10 //重復(fù)START已發(fā)送
#define TW_MT_SLA_ACK 0x18 //SLA+W 已發(fā)送收到ACK
#define TW_MT_SLA_NACK 0x20 //SLA+W 已發(fā)送接收到NOT ACK
#define TW_MT_DATA_ACK 0x28 //數(shù)據(jù)已發(fā)送接收到ACK
#define TW_MT_DATA_NACK 0x30 //數(shù)據(jù)已發(fā)送接收到NOT ACK
#define TW_MT_ARB_LOST 0x38 //SLA+W 或數(shù)據(jù)的仲裁失敗
//主機(jī)接收狀態(tài)碼
//#define TW_START 0x08 //START已發(fā)送
//#define TW_REP_START 0x10 //重復(fù)START已發(fā)送
#define TW_MR_ARB_LOST 0x38 //SLA+R 或NOT ACK 的仲裁失敗
#define TW_MR_SLA_ACK 0x40 //SLA+R 已發(fā)送接收到ACK
#define TW_MR_SLA_NACK 0x48 //SLA+R 已發(fā)送接收到NOT ACK
#define TW_MR_DATA_ACK 0x50 //接收到數(shù)據(jù)ACK 已返回
#define TW_MR_DATA_NACK 0x58 //接收到數(shù)據(jù)NOT ACK已返回
//從機(jī)接收狀態(tài)碼
#define TW_SR_SLA_ACK 0x60 //自己的SLA+W 已經(jīng)被接收ACK已返回
#define TW_SR_ARB_LOST_SLA_ACK 0x68 //SLA+R/W 作為主機(jī)的仲裁失敗;自己的SLA+W 已經(jīng)被接收ACK 已返回
#define TW_SR_GCALL_ACK 0x70 //接收到廣播地址ACK 已返回
#define TW_SR_ARB_LOST_GCALL_ACK 0x78 //SLA+R/W 作為主機(jī)的仲裁失敗;接收到廣播地址ACK已返回
#define TW_SR_DATA_ACK 0x80 //以前以自己的SLA+W被尋址;數(shù)據(jù)已經(jīng)被接收ACK已返回
#define TW_SR_DATA_NACK 0x88 //以前以自己的SLA+W被尋址;數(shù)據(jù)已經(jīng)被接收NOT ACK已返回
#define TW_SR_GCALL_DATA_ACK 0x90 //以前以廣播方式被尋址;數(shù)據(jù)已經(jīng)被接收ACK已返回
#define TW_SR_GCALL_DATA_NACK 0x98 //以前以廣播方式被尋址;數(shù)據(jù)已經(jīng)被接收NOT ACK已返回
#define TW_SR_STOP 0xA0 //在以從機(jī)工作時(shí)接收到STOP或重復(fù)START
//從發(fā)送狀態(tài)碼
#define TW_ST_SLA_ACK 0xA8 //自己的SLA+R 已經(jīng)被接收ACK 已返回
#define TW_ST_ARB_LOST_SLA_ACK 0xB0 //SLA+R/W 作為主機(jī)的仲裁失敗;自己的SLA+R 已經(jīng)被接收ACK 已返回
#define TW_ST_DATA_ACK 0xB8 //TWDR 里數(shù)據(jù)已經(jīng)發(fā)送接收到ACK
#define TW_ST_DATA_NACK 0xC0 //TWDR 里數(shù)據(jù)已經(jīng)發(fā)送接收到NOT ACK
#define TW_ST_LAST_DATA 0xC8 //TWDR 的一字節(jié)數(shù)據(jù)已經(jīng)發(fā)送(TWAE = “0”);接收到ACK
//其它狀態(tài)碼
#define TW_NO_INFO 0xF8 //沒(méi)有相關(guān)的狀態(tài)信息;TWINT = “0”
#define TW_BUS_ERROR 0x00 //由于非法的START 或STOP 引起的總線錯(cuò)誤
// defines and constants
#define TWCR_CMD_MASK 0x0F
#define TWSR_STATUS_MASK 0xF8
/***********************************************/
//常用TWI操作(從模式寫和從模式讀)
/***********************************************/
//TWSR--Twi_狀態(tài)寄存器,檢查TWI狀態(tài),應(yīng)該將預(yù)分頻位屏蔽(第三位是保留位)
#define Test_Twsr() (TWSR&0xf8)
//查詢模式下等待中斷發(fā)生
#define Twi_WaitForComplete() {while(!(TWCR&(1<<TWINT)));}
//清除中斷標(biāo)志位,使能TWI功能,開放TWI中斷,在主控接收狀態(tài)下對(duì)SDA線作應(yīng)答
#define Twi_Ack() {TWCR=TWCR&TWCR_CMD_MASK|(1<<TWEA)|(1<<TWINT);}
//清除中斷標(biāo)志位,使能TWI功能,開放TWI中斷,在主控接收狀態(tài)下不對(duì)SDA線作應(yīng)答
#define Twi_NoAcK() {TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT);}
//寫入8位數(shù)據(jù)到數(shù)據(jù)寄存器中,同時(shí)清除中斷標(biāo)志位,使能TWI功能
#define Twi_SendByte(x) {TWDR=(x);TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT);}
//清除中斷標(biāo)志位,在總線上發(fā)出終止信號(hào),激活TWI功能,
#define Twi_Stop() TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT)|(1<<TWEA)|(1<<TWSTO)
//清除中斷標(biāo)志位,在總線上發(fā)出起始信號(hào),激活TWI功能,開放TWI中斷 注意是否自動(dòng)產(chǎn)生ACK (TWEA)
#define Twi_Start() TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT)|(1<<TWSTA)
//設(shè)置本機(jī)地址(從機(jī)方式)
#define Twi_SetLocalDeviceAddr(deviceAddr, genCallEn) TWAR=((deviceAddr)&0xFE)|((genCallEn)&0x01)
//功能描述:返回總線狀態(tài)
#define Twi_GetState() Twi_State
//-----------4個(gè)I2總線公用函數(shù), 可供其它I2總線器件的程序調(diào)用--------------
extern void i2c_start(void); //總線上起動(dòng)開始條件
extern uint8 i2c_write(uint8 a); //把一個(gè)字節(jié)數(shù)據(jù)輸入器件, 返回TWI狀態(tài)
extern uint8 i2c_read(void); //i2c讀
extern void i2c_stop(void); //總線上起動(dòng)停止條件
//------------------------------------------------------------------------
//發(fā)送給指定從機(jī)一個(gè)數(shù)據(jù)
//addr為從機(jī)地址,data數(shù)據(jù)
extern void i2c_maste_transt(uint8 addr, uint8 data);
//從從機(jī)地址讀取一個(gè)數(shù),輸入地址,輸出讀到的數(shù)
extern uint8 i2c_maste_read(uint8 addr);
//初始化為主機(jī)
extern void twi_master_init(void);
//初始化為從機(jī),輸入ADD,從機(jī)地址
extern void twi_slave_init(uint8 add);
#endif
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -