再议IIC协议与设计【2】--使用GPIO实现IIC从机通讯源码分析与测试

本文介绍了使用GPIO模拟I2C从机的工程设计,详细解析了从机通信设计框图、硬件平台的寄存器配置、接收数据的核心代码,以及遇到的时钟占空比和数据变化问题。通过分析和测试,提出了对程序的改进思路。
摘要由CSDN通过智能技术生成

概述

在本阶段的工作中,需要实现一个由GPIO模拟的I2C从机工程设计,以前只使用GPIO模拟I2C设计过主机,对于从机的设计,还是首次。下面就对本次工作中从机设计思想做详细记录。


开发平台

THK88


从机通信设计框图


图 1

程序设计与分析

硬件平台的寄存器配置

#define WAIT_IIC_SCL_HIGH   while ( !GET_SCL_DAT )  
#define WAIT_IIC_SCL_LOW    while ( GET_SCL_DAT )  
#define WAIT_IIC_SDA_HIGH   while ( !GET_SDA_DAT )  
#define WAIT_IIC_SDA_LOW    while ( GET_SDA_DAT )  
  
  
#define IIC_WAIT_START      WAIT_IIC_SCL_HIGH;  WAIT_IIC_SDA_LOW      
#define IIC_WAIT_STOP       WAIT_IIC_SCL_LOW; SDA_IN; WAIT_IIC_SCL_HIGH; WAIT_IIC_SDA_HIGH   
  
  
#define IIC_SLAVE_SEND_LOW  WAIT_IIC_SCL_LOW; SDA_OUT; SET_SDA_LOW; WAIT_IIC_SCL_HIGH        
#define IIC_SLAVE_SEND_HIGH WAIT_IIC_SCL_LOW; SDA_OUT; SET_SDA_HIGH; WAIT_IIC_SCL_HIGH  
  
  
#define IIC_SLAVE_SEND_ACK  IIC_SLAVE_SEND_LOW  
#define IIC_SLAVE_SEND_NAK  IIC_SLAVE_SEND_HIGH  

初始化

void iic_init(void)  // 完成GPIO作为I2C的初始化 
完成GPIO时钟寄存机配置等功能。


接收地址以及读写命令模块

for(bitcount = 0; bitcount < 7; bitcount ++)  
{  
    WAIT_IIC_SCL_LOW;                     
    WAIT_IIC_SCL_HIGH;  
    iic_slv
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值