📄 i2c-samsung.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 + -