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

📄 i2c.h

📁 I2C协议机制
💻 H
字号:
/*******************************************************************************
				   Copyright @ 2007 Centron Telecom All rights reserved
* File Name: I2C.h

* Author: MingliangBi

* Email: liangzi0708@163.com

* Date: 2008/03/11

* Version: 1.00

* Description: header file for I2C.c
*              define some constants and macro operation related to Atmega128's
*              I2C interface
* History:   2008/03/11    MingliangBi        V1.00
*******************************************************************************/
#ifndef _I2C_H
#define _I2C_H
/************************I2C Status Register Code Define***********************/
/*发送、接收起始条件*/
#define I2C_START      				0x08
#define I2C_RESTART    				0x10
/*主机发送模式*/
#define I2C_MT_SLA_ACK    			0x18
#define I2C_MT_SLA_NACK   			0x20
#define I2C_MT_DATA_ACK   			0x28
#define I2C_MT_DATA_NACK 			0x30
#define I2C_MT_ARB_LOST   			0x38		//Arbitration Lost
/*主机接收模式*/
#define I2C_MR_ARB_LOST   			0x38
#define I2C_MR_SLA_ACK   			0x40
#define I2C_MR_SLA_NACK   			0x48
#define I2C_MR_DATA_ACK   			0x50
#define I2C_MR_DATA_NACK 			0x58
/*所有方式*/                          
#define I2C_BUS_ERROR   			0x00
#define I2C_BUS_FREE    			0xF8
//屏蔽中断服务程序,中断位由硬件产生


//调试方向:全速模式软件查看寄存器状态,硬件仿真环境下查看寄存器状态,中断位的处理
//restart 的写法

//增加BUSY测试位在软件仿真环境下可以看到收发两种模式的正常切换
//改写SMB0CN赋值的方式
//软件仿真环境下为什么看不到BUSY位的变化?BUSY不能写?
//中断处理完毕后在清除中断

#define I2CStart() 					STO=0;STA=1;BUSY=1
#define I2CRestart()				STO=1;STA=1;SI=0//数据总线仍然BUSY=1
//#define I2CRestart()					STO=1;STA=1;SI=0//数据总线仍然BUSY=1
#define I2CWaitAck() 				while(!SI)  
#define I2CCheckAck()   			SMB0STA&0xF8
#define I2CSendByte(x) 				SMB0DAT=(x);SI=0
#define I2CSendAck() 				AA=1;SI=0//主器件接收需要回馈的数据,一定得清除中断进行后续处理
#define I2CSendNAck() 				AA=0;SI=0//主器件接收不需回馈的数据

//#define I2CReceiveAckByte() 		AA=1;SI=1//主器件接收需要回馈的数据
//#define I2CReceiveNAckByte() 		AA=0;SI=1//主器件接收不需回馈的数据


#define I2CReceiveByte()			
#define I2CStop()  					STO=1;BUSY=0;SI=0
#define I2C_CLEAR_START_BIT()		STA=0
#define I2C_CLEAR_INT_BIT()			SI=0

#define I2C_DATA_REGISTER			SMB0DAT   


#define RandomMode   0
#define PageMode     1

extern BOOLEAN I2C_WriteBlock(INT8U DeviceWriteAdd,INT8U *pWriteData,INT16U StartWordAdd,INT16U size);							  	     							         
extern BOOLEAN I2C_ReadBlock(INT8U DeviceWriteAdd,INT8U DeviceReadAdd,INT8U *pReadData,INT16U StartWordAdd,INT16U size);
#endif

⌨️ 快捷键说明

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