/******************************************************************************* | |
* Copyright (C) 2007, ZTE Corporation. | |
* | |
* File Name: | |
* File Mark: | |
* Description: | |
* Others: | |
* Version: V0.5 | |
* Author: Zhenghong | |
* Date: 2008-01-10 | |
* History 1: | |
* Date: 2012-07-16 | |
* Version: V1.0 | |
* Author: zhouqi | |
* Modification: 1. Ôö¼Ó T_ZDrvI2c_BusFreq ö¾ÙÖÐ 300KHZ ¶¨Òå | |
2. ÐÞ¸Ä T_ZDrvI2c_DevFlagType ÖеÚÒ»¸ö I2C_DFLT_ADDR_DEV Ϊ I2C_10BIT_SLAVE_ADDR | |
3. ÔÚ T_ZDrvI2c_DevFlagType Ôö¼Ó I2C_USE_INT ¶¨Òå | |
4. Ôö¼Ó²¿·Ö×¢ÊÍÓë˵Ã÷ | |
* History 2: | |
******************************************************************************/ | |
#ifndef _DRVS_I2C_H | |
#define _DRVS_I2C_H | |
/**********************************************************/ | |
/** @defgroup T_ZDrvI2c_BusNum 7520ÓÐ 3 ¸öI2C½Ó¿Ú, 7520V2 È¥µôÒ»¸öI2C | |
*/ | |
typedef enum | |
{ | |
//I2C_BUS_0 = 0, | |
I2C_BUS_1 = 1, | |
I2C_BUS_2 = 2, /* pmic i2c */ | |
MAX_I2C_BUS_NUM | |
}T_ZDrvI2c_BusNum; | |
/**********************************************************/ | |
/** @defgroup T_ZDrvI2c_BusFreq | |
*/ | |
typedef enum{ | |
I2C_FREQ_ONE_HUNDRED_KILO_HZ = 100*1000, | |
I2C_FREQ_THREE_HUNDRED_KILO_HZ = 300*1000, | |
I2C_FREQ_FOUR_HUNDRED_KILO_HZ = 400*1000, | |
MAX_I2C_BUS_FREQ | |
}T_ZDrvI2c_BusFreq; | |
/**********************************************************/ | |
/** @defgroup T_ZDrvI2c_DevFlagType | |
*/ | |
typedef enum { | |
I2C_10BIT_SLAVE_ADDR = 0x0001 << 0, /* ±êʶʹÓà --10λ´Ó»úµØÖ·-- */ | |
/* ĬÈϲ»Ê¹ÓÃλ 7λ´Ó»úµØÖ· */ | |
I2C_MEM_DEV = 0x0001 << 1, /* ±êʶʹÓà --16λ¼Ä´æÆ÷µØÖ·-- */ | |
I2C_REG_DEV = 0x0001 << 2, /* ±êʶʹÓà --8λ¼Ä´æÆ÷µØÖ·-- */ | |
I2C_NACK_LAST_BYTE = 0x0001 << 3, /* NACK last byte read from slave */ | |
I2C_NOP_LAST_BYTE = 0x0001 << 4, /* Let slave release SDA after last */ | |
I2C_M_COMBINE = 0x0001 << 5, /* ¾µäµÄ×éºÏ¶Áģʽ */ | |
I2C_STOP_START_BEFORE_READ = 0x0001 << 6, /* During a read transaction, gen. */ | |
/* a STOP & START after writing */ | |
/* the slave addr(just before read) */ | |
I2C_CLK_START_BEFORE_RW = 0x0001 << 7, /* Generate a clock and a START */ | |
/* before every I/O operation. */ | |
I2C_USE_INT = 0x0001 << 8 /* ʹÓÃÖжÏģʽ´«ÊäÊý¾Ý */ | |
/* Çø±ðΪ START ºó£¬»ñÈ¡ÐźÅÁ¿£¬Ïß³Ì¹ÒÆð*/ | |
/* ½¨ÒéÔÚ´«ËͶà×Ö½ÚʱʹÓà */ | |
} T_ZDrvI2c_DevFlagType; | |
/**********************************************************************/ | |
/* ˵Ã÷: | |
1. ÔÚĬÈÏÇé¿öÏ£¬Ê¹Óà 7λ ´Ó»úµØÖ·£¬ | |
8λ ¼Ä´æÆ÷µØÖ· | |
±ê׼ʱÐòµÄ ¼òµ¥Ð´¡¢ ¼òµ¥¶Á¡¢ ×éºÏ¶Áģʽ-- | |
²»Ê¹ÓÃÖÐ¶Ï | |
2. ÒÔǰÅäÖÃµÄ ÒÔϲÎÊýÏÖÔÚ²»ÔÙʹÓã¬ÏÈǰÅäÖõÄÒ²²»Óøü¸Ä£¬µ«¶¼Ä¬ÈÏΪ --±ê×¼×éºÏ¶ÁʱÐò-- | |
Èç¹ûÓÐÌØÊâʱÐò£¬Çë¸æÖª | |
I2C_NACK_LAST_BYTE ÔÚU207ûÓз¢ÏÖʹÓà | |
I2C_NOP_LAST_BYTE ÔÚU207ûÓз¢ÏÖʹÓà | |
I2C_M_COMBINE RDA5802\mt9d113ʹÓà | |
I2C_STOP_START_BEFORE_READ PMIC\OV7670\0V9656ʹÓà | |
I2C_CLK_START_BEFORE_RW ÔÚU207ûÓз¢ÏÖʹÓà | |
3. ÏÖÔڿɸù¾ÝÒ»ÏÂÁÐ×ÓÅäÖÃ: | |
static T_ZDrvI2c_Device s_mt9d113I2cDev = | |
{ | |
I2C_BUS_0, | |
EXAMPLE_SLAVE_ADDRESS, | |
I2C_FREQ_THREE_HUNDRED_KILO_HZ, | |
100, | |
1, | |
----------------------------------------------------------- | |
I2C_10BIT_SLAVE_ADDR | I2C_REG_DEV | I2C_USE_INT, | |
// ʹÓÃ10´Ó»úµØÖ· 8λ¼Ä´æÆ÷µØÖ· ʹÓÃÖжϷ½Ê½ | |
I2C_MEM_DEV, | |
// 16λ¼Ä´æÆ÷µØÖ·, 8´Ó»úµØÖ· ²»Ê¹ÓÃÖÐ¶Ï | |
---------------------------------------------------------- | |
NULL, | |
}; | |
*********************************************************************/ | |
/**********************************************************/ | |
/** @defgroup T_ZDrvI2c_Device | |
*/ | |
typedef struct _T_ZDrvI2c_Device | |
{ | |
T_ZDrvI2c_BusNum bus_num; /* indicate which i2c bus the device belongs to */ | |
UINT16 slv_addr; /* device addr on the i2c bus, 10bits for memory device and 7bits for registers */ | |
T_ZDrvI2c_BusFreq bus_freq; /* the i2c bus transfer freq according to the device require*/ | |
UINT32 timeout; /* time threshold waiting for bus idle */ | |
UINT8 retries; /* times we'll try again if the bus is busy */ | |
T_ZDrvI2c_DevFlagType flags; /* indicate the operation features */ | |
VOID *privData; | |
}T_ZDrvI2c_Device; | |
/******************************************************************************* | |
* Function Prototypes * | |
*******************************************************************************/ | |
/******************************************************************************* | |
* Function: zDrvI2c_DevRead | |
* Description: I2C×ÜÏß¼òµ¥¶Á | |
* Parameters: | |
* Input: | |
* | |
* Output: | |
* | |
* Returns: | |
* | |
* | |
* Others: 1. ×ñÑI2C×ÜÏß ×éºÏ¶Á ±êÏßÐÒé¡£ | |
2. ×î´óÒ»´Î¶ÁÈ¡ --32-- ¸ö×Ö½ÚÊý¾Ý¡£ | |
********************************************************************************/ | |
SINT32 zDrvI2c_DevRead( T_ZDrvI2c_Device *i2c_dev, UINT16 regAddr, UINT8 *readBuf, UINT32 readNum ); | |
/******************************************************************************* | |
* Function: zDrvI2c_DevWrite | |
* Description: I2C×ÜÏß¼òµ¥Ð´ | |
* Parameters: | |
* Input: | |
* | |
* Output: | |
* | |
* Returns: | |
* | |
* | |
* Others: 1. ×ñÑI2C×ÜÏß ¼òµ¥Ð´ ±êÏßÐÒé¡£ | |
2. ×î´óÒ»´ÎдÈë --30-- ¸ö×Ö½ÚÊý¾Ý¡£ | |
********************************************************************************/ | |
SINT32 zDrvI2c_DevWrite( T_ZDrvI2c_Device *i2c_dev, UINT16 regAddr, UINT8 *writeBuf, UINT32 writeNum ); | |
/******************************************************************************* | |
* Function: zDrvI2c_DevLock_BeforePSM | |
* Description: ÔÚ¹ØÖжϲ¢µ÷Óà PSM ½Ó¿Úǰ£¬»ñÈ¡ I2C Éè±¸Ëø¡£ | |
* Parameters: | |
* Input: | |
* | |
* Output: | |
* | |
* Returns: | |
* | |
* | |
* Others: 1. ¹ØÖжϲ¢µ÷Óà PSM ½Ó¿Úʱ£¬I2C ¿ÉÄÜÕýÔÚ±»ÆäËûÏß³ÌʹÓᣠ| |
* ʹÓô˽ӿڵȴýÆäËûÏß³ÌʹÓÃÍê±ÏºóÍ˳ö¡£ | |
********************************************************************************/ | |
SINT32 zDrvI2c_DevLock_BeforePSM( T_ZDrvI2c_BusNum busNum); | |
/******************************************************************************* | |
* Function: zDrvI2c_DevUnlock_AfterPSM | |
* Description: ²»ÔÙʹÓà PSM ½Ó¿Úʱ£¬ÊÍ·Å I2C Éè±¸Ëø¡£ | |
* Parameters: | |
* Input: | |
* | |
* Output: | |
* | |
* Returns: | |
* | |
* | |
* Others: 1. ÓëzDrvI2c_DevLock_BeforePSM½á¶ÔʹÓᣠ| |
********************************************************************************/ | |
SINT32 zDrvI2c_DevUnlock_AfterPSM( T_ZDrvI2c_BusNum busNum); | |
/******************************************************************************* | |
* Function: zDrvI2c_DevRead | |
* Description: I2C×ÜÏß¼òµ¥¶Á£¬Ê¹ÓÃÊ¡µçģʽ | |
* Parameters: | |
* Input: | |
* | |
* Output: | |
* | |
* Returns: | |
* | |
* | |
* Others: 1. ×ñÑI2C×ÜÏß ×éºÏ¶Á ±êÏßÐÒé¡£ | |
2. ×î´óÒ»´Î¶ÁÈ¡ --32-- ¸ö×Ö½ÚÊý¾Ý¡£ | |
3. Ö÷ÒªÊÇÔÚ²Ù×÷ÖÐ --²»»ñÈ¡»¥³âÁ¿--£¬ Á½µÄÏ̲߳»ÄÜͬʱµ÷Óà | |
********************************************************************************/ | |
SINT32 zDrvI2c_DevRead_PSM( T_ZDrvI2c_Device *i2c_dev, UINT16 regAddr, UINT8 *readBuf, UINT32 readNum ); | |
/******************************************************************************* | |
* Function: zDrvI2c_DevWrite | |
* Description: I2C×ÜÏß¼òµ¥Ð´£¬Ê¹ÓÃÊ¡µçģʽ | |
* Parameters: | |
* Input: | |
* | |
* Output: | |
* | |
* Returns: | |
* | |
* | |
* Others: 1. ×ñÑI2C×ÜÏß ¼òµ¥Ð´ ±êÏßÐÒé¡£ | |
2. ×î´óÒ»´ÎдÈë --30-- ¸ö×Ö½ÚÊý¾Ý¡£ | |
3. Ö÷ÒªÊÇÔÚ²Ù×÷ÖÐ --²»»ñÈ¡»¥³âÁ¿--£¬ Á½µÄÏ̲߳»ÄÜͬʱµ÷Óà | |
********************************************************************************/ | |
SINT32 zDrvI2c_DevWrite_PSM( T_ZDrvI2c_Device *i2c_dev, UINT16 regAddr, UINT8 *writeBuf, UINT32 writeNum ); | |
/******************************************************************************* | |
* Function: zDrvI2c_DevRead_ByteStream | |
* Description: I2C×ÜÏß×Ö½ÚÁ÷¶Á | |
* Parameters: | |
* Input: | |
* | |
* Output: | |
* | |
* Returns: | |
* | |
* | |
* Others: 1. ×ñÑI2C×ÜÏß ¼òµ¥¶Á ±êÏßÐÒé¡£ | |
2. ֻд I2C Æ÷¼þµØÖ·£¬----------²»Ê¹ÓüĴæÆ÷µØÖ·-----¡£ | |
2. ×î´óÒ»´Î¶ÁÈ¡ 32 ¸ö×Ö½ÚÊý¾Ý¡£ | |
********************************************************************************/ | |
SINT32 zDrvI2c_DevRead_ByteStream( T_ZDrvI2c_Device *i2c_dev, UINT8 *readBuf, UINT32 readNum ); | |
/******************************************************************************* | |
* Function: zDrvI2c_DevWrite_ByteStream | |
* Description: I2C×ÜÏß×Ö½ÚÁ÷д | |
* Parameters: | |
* Input: | |
* | |
* Output: | |
* | |
* Returns: | |
* | |
* | |
* Others: 1. ×ñÑI2C×ÜÏß ¼òµ¥Ð´ ±êÏßÐÒé¡£ | |
2. ֻд I2C Æ÷¼þµØÖ·£¬----------²»Ê¹ÓüĴæÆ÷µØÖ·-----¡£ | |
2. ×î´óÒ»´ÎдÈë 30 ¸ö×Ö½ÚÊý¾Ý¡£ | |
********************************************************************************/ | |
SINT32 zDrvI2c_DevWrite_ByteStream( T_ZDrvI2c_Device *i2c_dev, UINT8 *writeBuf, UINT32 writeNum ); | |
#endif /* _DRVS_I2C_H */ | |