⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 twi.h

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 H
📖 第 1 页 / 共 2 页
字号:
/*********************************************************************************************************
**				          			TWI 驱动程序头文件 
**                                  (c) Copyright 2006-2008, limaokui
**                                           All Rights Reserved
**
**                                             V1.0.0
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名:TWI.h
**创   建   人: 李茂奎
**最后修改日期:  2006年8月29日
**描        述:  TWI驱动程序头文件
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 李茂奎
** 版  本: V1.00
** 日 期: 2006年8月29日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人: 李茂奎
** 版  本:
** 日 期:
** 描 述: 
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人:    李茂奎																					  
** 日 期:	 2006年8月29日
** 描 述:   
**
**------------------------------------------------------------------------------------------------------
*********************************************************************************************************/



#ifndef __twi_H__
#define __twi_H__

/***********************************************/
//TWI状态定义
/***********************************************/
#define TW_START               0x08 
#define TW_REP_START           0x10 
//MT 主方式传输   
#define TW_MT_SLA_ACK          0x18 
#define TW_MT_SLA_NACK         0x20 
#define TW_MT_DATA_ACK         0x28 
#define TW_MT_DATA_NACK        0x30 
#define TW_MT_ARB_LOST         0x38 
//MR 主方式接收
#define TW_MR_ARB_LOST         0x38 
#define TW_MR_SLA_ACK          0x40 
#define TW_MR_SLA_NACK         0x48 
#define TW_MR_DATA_ACK         0x50 
#define TW_MR_DATA_NACK        0x58 
//ST 从机方式传输
#define TW_ST_SLA_ACK          0xA8 
#define TW_ST_ARB_LOST_SLA_ACK 0xB0 
#define TW_ST_DATA_ACK         0xB8 
#define TW_ST_DATA_NACK        0xC0 
#define TW_ST_LAST_DATA        0xC8 
//SR 从机方式接收    ALL  广播
#define TW_SR_SLA_ACK          0x60 
#define TW_SR_ARB_LOST_SLA_ACK 0x68 
#define TW_SR_GCALL_ACK        0x70 
#define TW_SR_ARB_LOST_GCALL_ACK  0x78 
#define TW_SR_DATA_ACK            0x80 
#define TW_SR_DATA_NACK           0x88 
#define TW_SR_GCALL_DATA_ACK      0x90 
#define TW_SR_GCALL_DATA_NACK     0x98 
#define TW_SR_STOP                0xA0
// 其他状态码
#define TW_NO_INFO        0xF8 
#define TW_BUS_ERROR      0x00 
// defines and constants 
#define TWCR_CMD_MASK     0x0F 
#define TWSR_STATUS_MASK  0xF8 

/***********************************************/
//常用TWI操作(从模式写和从模式读)
/***********************************************/
//TWSR--Twi_状态寄存器,检查TWI状态,应该将预分频位屏蔽(第三位是保留位)
#define Test_Twsr() 	  (TWSR&0xf8)
//查询模式下等待中断发生
#define Twi_WaitForComplete()          {while(!(TWCR&(1<<TWINT)));}
//清除中断标志位,使能TWI功能,开放TWI中断,在主控接收状态下对SDA线作应答
#define Twi_Ack()	  TWCR=TWCR&TWCR_CMD_MASK|(1<<TWEA)|(1<<TWINT)
//清除中断标志位,使能TWI功能,开放TWI中断,在主控接收状态下不对SDA线作应答
#define Twi_NoAcK()	  TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT)
//写入8位数据到数据寄存器中,同时清除中断标志位,使能TWI功能
#define Twi_SendByte(x)		{TWDR=(x);TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT);}
//清除中断标志位,在总线上发出终止信号,激活TWI功能,
#define Twi_Stop()		  TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT)|(1<<TWEA)|(1<<TWSTO)
//清除中断标志位,在总线上发出起始信号,激活TWI功能,开放TWI中断    注意是否自动产生ACK (TWEA)
#define Twi_Start()		  TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT)|(1<<TWSTA)
//设置本机地址(从机方式)
#define Twi_SetLocalDeviceAddr(deviceAddr, genCallEn)   TWAR=((deviceAddr)&0xFE)|((genCallEn)&0x01)
//功能描述:返回总线状态
#define Twi_GetState()    Twi_State

/***********************************************/
//Twi_工程常量预定义
/***********************************************/
#define TWI_OK                            0x00 
#define TWI_ERROR_NODEV                   0x01
#define TWI_DATA_READY					  0x03   //缓冲区为数据准备好
#define TWI_DATA_SEND					  0x02   //缓冲区为发送模式
#define TWI_DATA_RECEIVE                  0x01   //缓冲区为接收模式
#define TWI_DATA_FREE                     0x00   //缓冲区为空闲模式
#define TWI_FAIL_MAX					  20	//重试次数最大值
#define TWI_SEND_DATA_BUFFER_SIZE         5     //最大255 
#define TWI_RECEIVE_DATA_BUFFER_SIZE      5     //最大255 
#define TWI_LOCAL_DATA_BUFFER_SIZE        5     //最大255 
/***********************************************/
//TWI信号量常量表
/***********************************************/
typedef enum 
{ 
   TWI_IDLE = 0, TWI_BUSY = 1, 
   TWI_MASTER_TX = 2, TWI_MASTER_RX = 3, 
   TWI_SLAVE_TX = 4, TWI_SLAVE_RX = 5 
} eTwi_StateType; 

extern CirQueue Twi_LocalBuffer;


/*********************************************************************************************************
** 函数名称:Twi_Init
** 功能描述:TWI总线初始化
** 输 入:  
** 输  出:             
** 全局变量: 
** 调用模块: Twi_SetBitrate()
** 说明:
** 注意:    
** 日 期:   2006年8月29日
********************************************************************************************************/
extern void Twi_Init(void);

/*********************************************************************************************************
** 函数名称:Twi_MasterSend
** 功能描述:主发送
** 输 入:  deviceAddr:从机地址
**          length:数据长度
**          * data:发送缓冲区指针
**
** 输  出:   是否发送成功          
** 全局变量: 
** 调用模块: 
** 说明:
** 注意:    
** 日 期:   2006年8月29日
********************************************************************************************************/
extern uint8  Twi_MasterSend(uint8 deviceAddr, uint8 length, uint8* data);
/*********************************************************************************************************
** 函数名称:Twi_MasterReceive
** 功能描述:主模式接收
** 输 入:  deviceAddr:从机地址
**          length:数据长度
**          * data  缓冲区指针
**
** 输  出:             
** 全局变量: 
** 调用模块: 
** 说明:
** 注意:    
** 日 期:   2006年8月29日
********************************************************************************************************/
extern uint8 Twi_MasterReceive(uint8 deviceAddr, uint8 length, uint8* data); 
/*********************************************************************************************************
** 函数名称:Twi_MasterSendNI
** 功能描述:主模式非中断发送
** 输 入:  deviceAddr:从机地址
**          length:数据长度
**          * data  缓冲区指针
** 输  出:             
** 全局变量: 
** 调用模块: 
** 说明:
** 注意:    
** 日 期:   2006年8月29日
********************************************************************************************************/
extern uint8 Twi_MasterSendNI(uint8 deviceAddr, uint8 length, uint8* data); 
/*********************************************************************************************************
** 函数名称:主模式非中断接收
** 功能描述:
** 输 入:  deviceAddr:从机地址
**          length:数据长度
**          * data  缓冲区指针
** 输  出:             
** 全局变量: 
** 调用模块: 
** 说明:
** 注意:    
** 日 期:   2006年8月29日
********************************************************************************************************/
extern uint8 Twi_MasterReceiveNI(uint8 deviceAddr, uint8 length, uint8 *data);

/*********************************************************************************************************
** 函数名称:Twi_SetSlaveReceiveHandler
** 功能描述:设置从接收函数句柄(此函数在被选中为从接收时执行) 
** 输 入:  void (*Twi_SlaveRx_func)(uint8 receiveDataLength, uint8* recieveData) :处理函数句柄
** 输  出:             
** 全局变量: 
** 调用模块: 
** 说明:
** 注意:    
** 日 期:   2006年8月29日
********************************************************************************************************/
extern void Twi_SetSlaveReceiveHandler(void (*Twi_SlaveRx_func)(uint8 receiveDataLength, uint8* recieveData));
/*********************************************************************************************************
** 函数名称:设置从发送函数句柄(此函数在被选中为从发送时执行) 
** 功能描述:
** 输 入:  
** 输  出:             
** 全局变量: 
** 调用模块: 
** 说明:
** 注意:    
** 日 期:   2006年8月29日
********************************************************************************************************/
extern void Twi_SetSlaveTransmitHandler(uint8 (*Twi_SlaveTx_func)(uint8 transmitDataLengthMax, uint8* transmitData)); 


#endif

/*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -