linux平台上GPIO模拟I2C

GPIO模拟I2C在嵌入式系统中常见,通过理解I2C的起始、终止条件及读写操作,可以灵活组合实现。注意SCL波形非规则方波,操作前后SCL和SDA的高电平可忽略,通常外部需上拉电阻。务必避免内部上拉,防止传输错误。
摘要由CSDN通过智能技术生成

GPIO模拟I2C是嵌入式中较为常用的一种应用。各个地方有各种不同的做法,按照我自己的个人理解,最好是把I2C的各种状态分割开来,比如起始条件终止条件,读数据和写数据,然后根据具体的使用场合组合起来。

       这里需要注意两点:一是SCL的波形并不规律,不能将它理解为方波,它本身只是一段段独立的波形。二是每段操作时,之前和之后的SCL和SDA波形是可以忽略的;通常情况下I2C开始之前和I2C结束之后,两者都是有上拉的高电平,而在正常工作时两者不受控制的情况下都是默认低电平。三是I2C是要默认外部上拉的,但是不能有内部上拉也就是必须内部下拉,否则会出现I2C传输时的错误。

 

1)基础宏定义

#define GPIO_SCL S3C2410_GPF3
#define GPIO_SDA S3C2410_GPF0
#define GPIO_SDA_OUTP S3C2410_GPF0_OUTP //设定SDA输出
#define GPIO_SDA_INP S3C2410_GPF0_INP //设定SDA输入
#define GPIO_SCL_OUTP S3C2410_GPF3_OUTP //设定SCL输出

void I2C_SCL_OUTP( void )
{
      s3c2410_gpio_cfgpin(GPIO_SCL,GPIO_SCL_OUTP);
}

void I2C_SCL_Output(u8 value)
{
      if(value)
      { 
            s3c2410_gpio_setpin(GPIO_SCL,value); 
      }
      else
      {
            s3c2410_gpio_setpin(GPIO_SCL,value ); 
      } 
}

 

void I2C_SDA_Mode(u8 v_mode) //SDA输出方向
{
       if(v_mode)
       
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值