MTK2502平台GPIO模拟I2C实现
#include "kal_release.h"
#include "pxs_custom.h"
#include "drv_comm.h"
#include "us_timer.h"
#include "dcl.h"
extern const char gpio_ms_i2c_clk_pin;
extern const char gpio_ms_i2c_data_pin;
#define MS_SCL gpio_ms_i2c_clk_pin
#define MS_SDA gpio_ms_i2c_data_pin
/******************************************************
I2C header (slaver address|W/R) macro define
*******************************************************/
#define MS_SLAVEADDR_W ((0x33 << 1) + 0) //0x0001 0110 0x18*2
#define MS_SLAVEADDR_R ((0x33 << 1) + 1) //0x0001 0111 0x19
/******************************************************
GPIO macro define for software I2C
*******************************************************/
#define MS_CLK_PIN_GPIO_MODE GPIO_ModeSetup(MS_SCL,0)
#define MS_DATA_PIN_GPIO_MODE GPIO_ModeSetup(MS_SDA,0)
#define MS_I2C_CLK_OUTPUT GPIO_InitIO(OUTPUT,MS_SCL)
#define MS_I2C_DATA_OUTPUT GPIO_InitIO(OUTPUT,MS_SDA)
#define MS_I2C_DATA_INPUT GPIO_InitIO(INPUT,MS_SDA)
#define MS_I2C_CLK_HIGH GPIO_WriteIO(1,MS_SCL)
#define MS_I2C_CLK_LOW GPIO_WriteIO(0,MS_SCL)
#define MS_I2C_DATA_HIGH GPIO_WriteIO(1,MS_SDA)
#define MS_I2C_DATA_LOW GPIO_WriteIO(0,MS_SDA)
#define MS_I2C_GET_BIT GPIO_ReadIO(MS_SDA)
void I2C_DELAY(kal_uint32 delay)
{
kal_uint32 tick, duration;
tick = drv_get_current_time();
do{
duration = drv_get_duration_ms(tick);
}while(duration < delay);
}
void PAH_i2c_udelay(kal_uint32 delay)
{
kal_uint32 ust = 0; //ust_get_current_time
kal_uint32 count = 0;
kal_uint32 break_count = 0;
ust = ust_get_current_time();
do{
if(ust_get_current_time() != ust)
count++;
else
break_count++;
}while((count < delay) && (break_count < 0xFFFFFF));
}
void PAH_i2c_start(void)
{
MS_CLK_PIN_GP

最低0.47元/天 解锁文章
2080

被折叠的 条评论
为什么被折叠?



