打印

一种通用性IIC接口的实现

[复制链接]
221|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
第三章|  楼主 | 2018-7-6 09:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在工程设计中,有时需要使用IO模拟多个iic接口, 而IIC接口的模拟和硬件关系很大,怎么能使用一种方法将硬件层完全抽象出来呢?这篇**就来解决这个问题。
Step 1: 建立一个和IIC硬件相关的结构体

typedef struct _i2c {
        void     (*IIC_InitPort)( void );     //硬件驱动初始化
        void     (*IIC_SDA_H)();              //SDA置高
        void     (*IIC_SDA_L)();              //SDA置低
        void     (*IIC_SCL_H)();             //SCL置高
        void     (*IIC_SCL_L)();              //SCL置高
        INT8U    (*IIC_READ)();          //读SDA
        INT8U    (*IIC_READ_SCL)();   //读SCL
} I2C;


要实现的IIC 函数如下(I2C.c 中实现):
void i2c_Start( I2C *i2c );
void i2c_Stop( I2C *i2c );
void i2c_SendByte( I2C *i2c, INT8U _ucByte);
INT8U i2c_ReadByte( I2C *i2c );
INT8U i2c_WaitAck( I2C *i2c );
void i2c_Ack( I2C *i2c );
void i2c_NAck( I2C *i2c );
INT8U i2c_CheckDevice(I2C *i2c, INT8U _Address);
具体文件头如下:
[mw_shl_code=c,true]#ifndef __I2C_H
#define __I2C_H

#define I2C_WR        0                /* 写控制bit */
#define I2C_RD        1                /* 读控制bit */

typedef struct _i2c {
        void     (*IIC_InitPort)( void );
        void     (*IIC_SDA_H)();
        void     (*IIC_SDA_L)();
        void     (*IIC_SCL_H)();
        void     (*IIC_SCL_L)();
        INT8U    (*IIC_READ)();
        INT8U    (*IIC_READ_SCL)();
} I2C;

void i2c_Start( I2C *i2c );
void i2c_Stop( I2C *i2c );
void i2c_SendByte( I2C *i2c, INT8U _ucByte);
INT8U i2c_ReadByte( I2C *i2c );
INT8U i2c_WaitAck( I2C *i2c );
void i2c_Ack( I2C *i2c );
void i2c_NAck( I2C *i2c );
INT8U i2c_CheckDevice(I2C *i2c, INT8U _Address);


#endif /*__I2C_H  */[/mw_shl_code]

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

380

主题

380

帖子

0

粉丝