嵌入式系统通用驱动程序接口及其实现-I2C主机设备驱动(视频教学时的同步输入文件)

来源:互联网 发布:淘宝代购没有中文标签 编辑:程序博客网 时间:2024/05/29 07:41

嵌入式系统通用驱动程序接口及其实现-I2C主机设备驱动

应用场景

  • EEPROM 24系列 电视频道
  • 7289 按键驱动
  • ADC
  • DAC
  • 触模板驱动
  • 自定义I2C协议,设备内部系统 单元模块之间通讯(主机,从机)。
I2C数据构成:
struct _I2cData{  unsigned char Adr; //设备址  unsigned char *pCmd;  unsigned char CmdLen;  unsigned char *pData;  unsigned char DataLen;  unsigned char Flag;   //相关标志  //后继处理函数,不实现此功能时为空()  void (*EndNotify)(signed char IsErr);//收发数据接结束后调用};#define I2C_DATA_RD 0x80       //读#define I2C_DATA_WR 0X00       //写#define I2C_DATA_OV_MASK 0X7F  //数据超时值
I2C主机设备驱动程序
C++实现
class I2cDev{   //I2cMasterDev,从机I2cSlaveDev public://构造函数I2cDev(void *pHw,        unsigned long Baud,   //当前设备通讯波特率       unsigned long Mck);   //系统时钟   //基本功能:   signed char ReStart(struct _I2cData *pData);   void Reset();   signed char IsEnd();   //通讯过程控制:   enum _eState {eIdie eError}   enum _eState eGetState();   void IRQ();         //中断处理程序   //超时控制   void timeEvent();  //1ms定时器 private:   struct _I2cData *pData;  //数据缓冲   void *pHw;               //硬件   enum _eState eState;     //状态机   unsigned char Index;     //状态内部计数   ErrTimer;                //内部故障计时,超过计时  };
C实现(I2cDev.h)
//I2C工作状态机:enum _eI2cDevState{  eI2cDevIdie = 0,  .  .  .                     //中间态  eI2cDevFinal = n-1,  //结束态  eI2cDevErr = n,

};

struct _I2cDev{  struct _I2cData *pData;     //数据缓冲  void *pHw;                  //硬件  enum _eI2cDevState eState;  //内部状态机  unsigned char Index;        //状态内部计数  ErrTimer;                //内部故障计时,超过计时};//-----------------------I2C初始化函数------------------------I2cDev_Init(I2cDev *pDev,    //未初始化的I2C设备            void *pHw,             unsigned long Baud,   //当前设备通讯波特率            unsigned long Mck);   //系统时钟//------------------数据读写函数-------------------------//返回是否成功 0成功,非0失败signed char I2cDev_ReStart(I2cDev *pDev,    //I2C设备                           struct _I2cData *pData);//------------------硬件复位函数-------------------------void I2cDev_Reset(I2cDev *pDev);//I2C设备//------------------是否通讯结束状态--------------------signed char I2cDev_IsEnd(I2cDev *pDev);//I2C设备//----------------------获得当前状态--------------------//enum _eI2cDevState I2cDev_eGetState(const I2cDev *pDev);//I2C设备#define I2cDev_eGetState(pdev) ((pdev)->eState)//------------------------中断处理程序-------------------------void I2cDev_IRQ(I2cDev *pDev);//I2C设备//-----------------------任务函数------------------------------//放入系统1ms进程时void I2cDev_Task(I2cDev *pDev);//I2C设备
0 0
原创粉丝点击