📄 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 + -