GPIO模拟I2C

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值