sysMotI2c.h
上传用户:dqzhongke1
上传日期:2022-06-26
资源大小:667k
文件大小:6k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* sysMotI2c.h - I2C Driver Header Module */
  2. /*
  3.  * Copyright (c) 2005 Wind River Systems, Inc.
  4.  *
  5.  * The right to copy, distribute, modify, or otherwise make use
  6.  * of this software may be licensed only pursuant to the terms
  7.  * of an applicable Wind River license agreement.
  8.  */
  9. /* Copyright 1996-2000 Motorola, Inc. All Rights Reserved */
  10. /*
  11. modification history
  12. --------------------
  13. 01a,14oct05,dtr  created from version 01a, ads834x BSP.
  14. */
  15. /*
  16. DESCRIPTION
  17. I2C Driver Header Module
  18. */
  19. #ifndef INCsysMotI2ch
  20. #define INCsysMotI2ch
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. /* device types */
  25. #define MPC85XX_I2C_CONTROLLER              0
  26. #define I2C_DRV_TYPE                        MPC85XX_I2C_CONTROLLER
  27. #define I2C_DEVICE_TYPE_EEPROM_AT24C256     0
  28. #define I2C_DEVICE_TYPE_TEMP_SENSOR_AD7417  1
  29. #define I2C_DEVICE_TYPE_IOPORT_PCA9555      2   
  30. #define I2C_DEVICE_TYPE_EEPROM_24LC128     3
  31. #define I2C_DEVICE_TYPE_RTC_M41T48          4
  32. #define I2C_DEVICE_TYPE_IOPORT_PCF8574      5 
  33. /* driver device data template (os + driver-specifics) */
  34. typedef struct i2cDev
  35. {
  36. unsigned int deviceAddress; /* address of the I2C device */
  37. int          deviceType; /* device type: 0 = EEPROM, 1 = other */
  38. unsigned int blockSize; /* logical block size in bytes */
  39. unsigned int blockOffset; /* logical block offset from zero of start */
  40. unsigned int blockTotal; /* number of logical blocks from offset */
  41. unsigned int controlAddress; /* controller address */
  42. unsigned int pageSize; /* page size in number of blocks */
  43. unsigned int controlWord; /* control word */
  44. unsigned int sysClkRate; /* system clock rate */
  45. } i2cDev_t;
  46. /* driver command packet */
  47. typedef struct i2cCmdPckt
  48.     {
  49.     int command; /* command identifier */
  50.     int status; /* status (error code) */
  51.     int cookie;                 
  52.     unsigned int memoryAddress; /* memory address */
  53.     unsigned int blockNumber; /* block number */
  54.     unsigned int nBlocks; /* number of blocks (bytes) to transfer */
  55.     unsigned int eCount; /* expected data count */
  56.     unsigned int aCount; /* actual data count */
  57.     int deviceType ;
  58.     } i2cCmdPckt_t;
  59. typedef struct {
  60.     int     unit ;
  61.     UINT32  baseAdrs ;
  62. } I2C_DRV_CTRL ;
  63. /* ioctl flags */
  64. #define I2C_IOCTL_WR            0
  65. #define I2C_IOCTL_RD            1
  66. #define I2C_IOCTL_RMW_OR        2
  67. #define I2C_IOCTL_RMW_AND       3
  68. #define I2C_IOCTL_RMW_AND_OR    4
  69. /* command identifiers */
  70. #define I2C_READOP 0 /* read operation */
  71. #define I2C_WRITOP 1 /* write operation */
  72. #define I2C_FRMTOP 2 /* format operation */
  73. #define I2C_CHCKOP 3 /* check operation */
  74. #define I2C_INITOP      4       /* init operation */
  75. #define I2C_BYTE_NUM_MASK 0x700
  76. #define I2C_BYTE_NUM_SHIFT 7
  77. /* controller specific function pointers table template */
  78. typedef struct i2cDrvRoutines
  79.     {
  80.     int (*pI2cCycleStart)(); /* start cycle */
  81.     int (*pI2cCycleStop)(); /* stop cycle */
  82.     int (*pI2cCycleRead)(); /* read cycle */
  83.     int (*pI2cCycleWrite)(); /* write cycle */
  84.     int (*pI2cCycleAckIn)(); /* acknowledge in cycle */
  85.     int (*pI2cCycleAckOut)(); /* acknowledge out cycle */
  86.     int (*pI2cKnownState)(); /* known state */
  87.     void (*pI2cDelay)(); /* delay routine */
  88.     }
  89. i2cDrvRoutines_t;
  90. /* routine call macros */
  91. /*
  92.  * Note: this driver could dynamically assign function pointers
  93.  * but ROM based switch statements are not permitted so the
  94.  * function pointers are set here for the specific board BSP.
  95.  */
  96. #define I2C_CYCLE_START(x) i2cCycleMpc85xxStart(x)
  97. #define I2C_CYCLE_STOP(x) i2cCycleMpc85xxStop(x)
  98. #define I2C_CYCLE_READ(x,ad,y) i2cCycleMpc85xxRead(x,ad,y)
  99. #define I2C_CYCLE_WRITE(x,wd) i2cCycleMpc85xxWrite(x,wd)
  100. #define I2C_CYCLE_ACKIN(x) i2cCycleMpc85xxAckIn(x)
  101. #define I2C_CYCLE_ACKOUT(x)     i2cCycleMpc85xxAckOut(x)
  102. #define I2C_KNOWN_STATE(x) i2cCycleMpc85xxKnownState(x)
  103. #define I2C_DELAY(d)     i2cCycleMpc85xxDelay(d)
  104. /* error codes */
  105. #define I2C_ERROR_CYCLE_START 1 /* start cycle */
  106. #define I2C_ERROR_CYCLE_STOP 2 /* stop cycle */
  107. #define I2C_ERROR_CYCLE_READ 3 /* read cycle */
  108. #define I2C_ERROR_CYCLE_WRITE 4 /* write cycle */
  109. #define I2C_ERROR_CYCLE_ACKIN 5 /* acknowledge in cycle */
  110. #define I2C_ERROR_CYCLE_ACKOUT 6 /* acknowledge out cycle */
  111. #define I2C_ERROR_KNOWN_STATE 7 /* known state */
  112. #define I2C_ERROR_CYCLE_TIMEOUT (1<<16) /* cycle timed out */
  113. UINT8 i2cIoctl (
  114. UINT32   ioctlflg,  /* input/ouput control flag
  115.   * 0, write
  116.   * 1, read
  117.   * 2, read/modify/write (ORing)
  118.   * 3, read/modify/write (ANDing)
  119.   * 4, read/modify/write (AND/ORing)
  120.   */
  121. UINT32   address,  /* address of device register to be operated upon */
  122. UINT8    bdata1,  /* data item 1 for read/write operation */
  123. UINT8    bdata2  /* data item 2 for read/write operation */
  124. ) ;
  125. STATUS i2cDrvInit
  126.     (
  127.     int       unit,
  128.     int       i2cControllerType   /* I2C controller type */
  129.     ) ;
  130. int i2cInit
  131.     (
  132.     int             uint,
  133.     UINT32          deviceAddress,      /* Device's I2C bus address */
  134.     int             deviceType,
  135.     int             cookie
  136.     );
  137. int i2cRead
  138.     (
  139.     int             unit,
  140.     UINT32          deviceAddress, /* Device's I2C bus address */
  141.     int             deviceType,
  142.     unsigned int    startBlk,   /* starting block to read, or temp reg # */
  143.     unsigned int    numBlks,    /* number of blocks to read, or temp reg size (1 or 2) */
  144.     char *          pBuf        /* pointer to buffer to receive data */
  145.     ) ;
  146. int i2cWrite
  147.     (
  148.     int            unit,
  149.     UINT32         deviceAddress,  /* Device's I2C bus address */
  150.     int            deviceType,
  151.     unsigned int   startBlk,  /* starting block to write */
  152.     unsigned int   numBlks,  /* number of blocks to write */
  153.     char *         pBuf  /* pointer to buffer of send data */
  154.     ) ;
  155. int i2cDoOp
  156.     (
  157.     int             unit,
  158.     UINT32          deviceAddress, /* device I2C bus address */
  159.     i2cCmdPckt_t *  pI2cCmdPacket /* pointer to command packet */
  160.     ) ;
  161. unsigned int i2cAddressMunge
  162.     (
  163.     unsigned int deviceAddress
  164.     );
  165. #ifdef __cplusplus
  166. }
  167. #endif
  168. #endif /* INCsysMotI2ch */