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

📄 i2c.h

📁 arm(str710)usb功能的实现
💻 H
字号:
/****************************************Copyright (c)**************************************************
**                                      
**                                          STR710 development team
**                                          
**
**                                 
**
**--------------文件信息--------------------------------------------------------------------------------
** 文 件 名: i2c.h
** 创 建 人: lhl
** 创建日期: 2006年5月14日
** 描    述: 该文件包含了所有I2C功能函数原型与所需要的常量
**
**--------------历史版本--------------------------------------------------------------------------------
** 创 建 人: lhl
** 版    本: V1.0
** 日   期: 2006年5月14日
** 描   述: 原始版本
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#ifndef __I2C_H__
#define __I2C_H__
#include "cpu_cfg.h"
#include "rccu.h"
#ifdef __cplusplus
extern "C" {
#endif

/************************************** 宏定义,常量定义 ******************************************/


#define I2C_PEBitEnable(i2cn) 	(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn ))) |= I2C_PESET_Mask
							
#define I2C_PEBitDisable(i2cn) 	(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn ))) &= ~I2C_PESET_Mask
#define I2C_StartBit(i2cn) 		(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn ))) |= I2C_START_Mask
#define I2C_StopBit(i2cn) 		(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn ))) |= I2C_STOP_Mask
#define I2C_ACKBit(i2cn) 		(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn ))) |= I2C_ACK_Mask
#define I2C_INTEnable(i2cn)		(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn ))) |= I2C_ITE_Mask
#define I2C_INTDisable(i2cn)	(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn ))) &= ~I2C_ITE_Mask

#define I2C_ReadStopBit(i2cn) 		(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn )))

//#define I2C_CROr(i2cn , value)	(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn + I2Cn_CR))) &= (value)
#define I2C_CCRWrite(i2cn,value)	(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn + I2Cn_CCR))) = (value)
#define I2C_ECCRWrite(i2cn,value)	(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn + I2Cn_ECCR))) = (value)
#define I2C_DRWrite(i2cn,value)		(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn + I2Cn_DR))) = (value)
#define I2C_OAR1Write(i2cn,value)	(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn + I2Cn_OAR1))) = (value)
#define I2C_OAR2Write(i2cn,value)	(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn + I2Cn_OAR2))) = (value)

#define I2C_DRRead(i2cn)			(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn + I2Cn_DR)))
#define I2C_SR1Read(i2cn)			(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn + I2Cn_SR1)))
#define I2C_SR2Read(i2cn)			(*((volatile unsigned char *)(I2C0_BASE + 0x1000 * i2cn + I2Cn_SR2)))

#define I2C0_SCLPIN						(13)
#define I2C0_SDAPIN						(14)
#define I2C1_SCLPIN						(2)
#define I2C1_SDAPIN						(3)

#define I2C_HEAD							0xF0
/**************************************  枚举类型定义  *******************************************/


typedef enum 
{
I2C_ITE_Mask		=0x01,
I2C_STOP_Mask  	=0x02,
I2C_ACK_Mask		=0x04,
I2C_START_Mask 	=0x08,
I2C_ENGC_Mask  	=0x10,
I2C_PESET_Mask 	=0x20

}I2C_CR_T;


typedef enum
{
  I2C_SB		= 0x01,
  I2C_M_SL		= 0x02,
  I2C_ADSL		= 0x04,
  I2C_BTF		= 0x08,
  I2C_BUSY		= 0x10,
  I2C_TRA		= 0x20,
  I2C_ADD10	= 0x40,
  I2C_EVF		= 0x80
} I2C_SR1_Flags;

typedef enum
{
  I2C_GCAL		= 0x01,
  I2C_BERR		= 0x02,
  I2C_ARLO		= 0x04,
  I2C_STOPF	= 0x08,
  I2C_AF		= 0x10,
  I2C_ENDAD	= 0x20,
  I2C_ACK		= 0x40
} I2C_SR2_Flags;

typedef enum
{
I2C0 = 0,
I2C1
}I2C_T;
/************************************** 结构体类型定义  ******************************************/
typedef void  (* I2C_CALLBACK)(void);

/********************************** 全局外部函数原型声明 *****************************************/

void I2C_Init(I2C_T i2cx);
void I2C_Enable(I2C_T i2cx);
void I2C_Config(I2C_T i2cx,UWORD32 speed);
void I2C_MasterSendByte7Addr(I2C_T i2cx,UWORD16 addr,UWORD8 *data,UWORD8 data_cnt);
void I2C_MasterSendByte10Addr(I2C_T i2cx,UWORD16 addr,UWORD8 *data,UWORD8 data_cnt);
void I2C_MasterRecByte7Addr(I2C_T i2cx,UWORD16 addr,UWORD8 *data,UWORD8 data_cnt);
void I2C_MasterRecByte10Addr(I2C_T i2cx,UWORD16 addr,UWORD8 *data,UWORD8 data_cnt);
void I2C_SlaveSetAddr(I2C_T i2cx,UWORD16 addr,UWORD8 frn);
void I2C_Disable(I2C_T i2cx);

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

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