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

📄 i2c-samsung.h

📁 II2c driver for uclinux
💻 H
字号:
/*
*  Samsung ARM 4510B Hardware I2C interface for EDEN
* ==================================================
* (C) 2003 by EDEN E-TECH Co.ltd
* (honeyandy@thunis.com)
* Honeyandy Chen - ChengDu(CHINA)
*
*/
#ifndef _I2C_SAMSUNG_H_
#define _I2C_SAMSUNG_H_

//#define DEBUG

#ifndef fMCLK_MHz
#define fMCLK_MHz	50000000  
#endif

typedef unsigned long U32;
typedef unsigned char U8;

/* INIT IOCTL Paramters  */
typedef struct 
{
	int i2c_speed;
	U8  i2c_slave;
	U8  i2c_addrlen;
	int i2c_pagesize;

} I2C_INIT_T;

typedef struct i2c_chain{

	I2C_INIT_T mode;
	U32 addr;
	U8 *buffer;
	int len;

} I2C_CHAIN_T;	

#define CMD_CHAIN_INIT  _IO('i',0x00) /* define i2c init Command Word*/ 
#define CMD_CHAIN_READ	_IO('i',0x01) /* define i2c read chain Command Word*/
#define CMD_CHAIN_WRITE	_IO('i',0x02) /* define i2c write chain Command Word*/


/* Byte Slave transmitter and receive status flags */
#define  iic_slave_addr       0x01  /* slave addr flag */
#define  iic_byte_addr_msb    0x02  /* byte msb addr */
#define  iic_byte_addr_lsb    0x04  /* byte lsb addr */
#define  iic_page_tx_done     0x08  /* Page data transmit done */
#define  iic_byte_rx_done     0x10  /* byte data receive done */
#define  iic_repeat_start     0x20  /* flag for repeat start */
#define  iic_multi_recv       0x40  /* recv multiple data */
#define  iic_no_more_recv     0x80  /* no more recv from slave */

/* Data structure for multiple byte slave transmitter format */
typedef struct 
{
  volatile    U32  FLAG;
  volatile    U32  BuffByteCnt;             /* Page buffer byte counter */ 
  volatile    U32  WriteDataSize;           /* Page buffer byte counter */ 
  volatile    U8   SLAVE_ADDR;              /* Slave address */
  volatile    U8   BYTE_ADDR_MSB;           /* Byte MSB address */
  volatile    U8   BYTE_ADDR_LSB;           /* Byte LSB address */
  volatile    U8   PAGE_BUFFER[128+1]; 	    /* IIC Page data buffer: reserve 128 Byte*/

} IIC_DATA_TX_FORMAT;



/* Data structure for multiple byte slave receiver format */

typedef struct 
{
  volatile    U32  FLAG;
  volatile    U32  ByteReadCnt;             
  volatile    U32  ReadDataSize;             
  volatile    U8   SLAVE_ADDR;
  volatile    U8   BYTE_ADDR_MSB;
  volatile    U8   BYTE_ADDR_LSB;
  volatile    U8   *RCV_BUFFER;

} IIC_DATA_RX_FORMAT;

static void i2c_chain_write (U32 /*WriteAddr*/, U8 * /*data*/, int /*SizeOfData*/ );
static void i2c_chain_read (U32 /*ReadAddr*/ ,  U8 * /*data*/ , int /*SizeOfData*/);
/* initialize i2c usage */
static void i2c_init(int /*speed*/);

/* set default values */

#ifndef CFG_I2C_SPEED
#define CFG_I2C_SPEED	100000    /* 100 KHz */
#endif

#ifndef CFG_I2C_SLAVE
#define CFG_I2C_SLAVE	0xA0      /* Atmel 24C64*/ 
#endif

#define S_WRITE		0x00    //Write IIC data for slave
#define S_READ		0x01    //Read IIC data for slave

#define IICWRITE	1
#define IICREAD		0

#define IICADDR1	1	 /*addr is one byte*/
#define IICADDR2	2        /*"""" "" two """"*/

#define VPint   *(volatile unsigned int *)
#define VPshort *(volatile unsigned short *)
#define VPchar  *(volatile unsigned char *)

#ifndef CSR_WRITE
#   define CSR_WRITE(addr,data) (VPint(addr) = (data))
#endif

#ifndef CSR_READ
#   define CSR_READ(addr)       (VPint(addr))
#endif

/*==============================*/
/* S3C4510B I2C Bus Registers   */
/*==============================*/
#define Base_Addr       0x3FF0000

#define IICCON		VPint(Base_Addr + 0xF000)
#define IICBUF		VPint(Base_Addr + 0xF004)
#define IICPS		VPint(Base_Addr + 0xF008)
#define IICCOUNT	VPint(Base_Addr + 0xF00C)

/*===============================*/
/*  I2C CONTROL REGISTERS        */
/*===============================*/
#define BF 		0x01        //Buffer flag
#define IEN		0x02        //Interrupt enable
#define LRB		0x04        //Last bit received
                                    //ACK not received
#define ACK		0x08        //Acknowlege enable
                                    //Generate an ACK signal at 9th SCL
#define NOACK		0x00        //No more received data is required
                                    //from the slave
#define START		0x10
#define STOP		0x20
#define RESTART		0x30
#define BUSY		0x40
#define IICRESET	0x80        //Reset the IIC-BUS controller

#endif /** I2C_SAMSUNG_H*/

⌨️ 快捷键说明

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