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