i2c.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /**
  2. * \file i2c.h
  3. *
  4. * \brief This file contains the function prototypes for the device
  5. * abstraction layer for I2C. It also contains some
  6. * related macro definitions and some files to be included.
  7. */
  8. /*
  9. * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
  10. */
  11. /*
  12. * Redistribution and use in source and binary forms, with or without
  13. * modification, are permitted provided that the following conditions
  14. * are met:
  15. *
  16. * Redistributions of source code must retain the above copyright
  17. * notice, this list of conditions and the following disclaimer.
  18. *
  19. * Redistributions in binary form must reproduce the above copyright
  20. * notice, this list of conditions and the following disclaimer in the
  21. * documentation and/or other materials provided with the
  22. * distribution.
  23. *
  24. * Neither the name of Texas Instruments Incorporated nor the names of
  25. * its contributors may be used to endorse or promote products derived
  26. * from this software without specific prior written permission.
  27. *
  28. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  29. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  30. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  31. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  32. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  33. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  34. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  35. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  36. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  37. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  38. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  39. *
  40. */
  41. #ifndef _I2C_H_
  42. #define _I2C_H_
  43. #include "hw_i2c.h"
  44. #ifdef __cplusplus
  45. extern "C" {
  46. #endif
  47. /******************Macros to confiure I2C********************************************/
  48. #define I2C_CFG_MST_TX (I2C_ICMDR_MST |I2C_ICMDR_TRX)
  49. #define I2C_CFG_MST_RX (I2C_ICMDR_MST |(I2C_ICMDR_TRX & 0x00000000))
  50. #define I2C_CFG_NACKMOD I2C_ICMDR_NACKMOD
  51. #define I2C_CFG_START I2C_ICMDR_STT
  52. #define I2C_CFG_STOP I2C_ICMDR_STP
  53. #define I2C_CFG_7BIT_ADDR_MODE (I2C_ICMDR_XA & 0x00000000)
  54. #define I2C_CFG_10BIT_ADDR_MODE I2C_ICMDR_XA
  55. #define I2C_CFG_FREE_FORMAT_DATA I2C_ICMDR_FDF
  56. #define I2C_CFG_SLAVE_STT (I2C_ICMDR_TRX |I2C_ICMDR_STT\
  57. (I2C_ICMDR_MST & 0x00000000))
  58. #define I2C_CFG_RESET I2C_ICMDR_IRS
  59. #define I2C_CFG_LOOP_BACK I2C_ICMDR_DLB
  60. #define I2C_CFG_REPEAT_MODE I2C_ICMDR_RM
  61. /**********MACROS TO Clear Status of the Interrupts************************************/
  62. #define I2C_CLEAR_ARBITARTION_LOST I2C_ICSTR_AL
  63. #define I2C_CLEAR_NO_ACK I2C_ICSTR_NACK
  64. #define I2C_CLEAR_ADDR_READY I2C_ICSTR_ARDY
  65. #define I2C_CLEAR_DATA_READY I2C_ICSTR_ICRRDY
  66. #define I2C_CLEAR_TRANSMIT_READY I2C_ICSTR_ICXRDY
  67. #define I2C_CLEAR_STOP_CONDITION I2C_ICSTR_SCD
  68. #define I2C_CLEAR_BUS_BUSY I2C_ICSTR_BB
  69. #define I2C_CLEAR_NO_ACK_SENT I2C_ICSTR_NACKSNT
  70. /**********MACROS To Enable or Disable Interrupts****************************************/
  71. #define I2C_INT_ARBITARTION_LOST I2C_ICIMR_AL
  72. #define I2C_INT_NO_ACK I2C_ICIMR_NACK
  73. #define I2C_INT_ADDR_READY I2C_ICIMR_ARDY
  74. #define I2C_INT_DATA_READY I2C_ICIMR_ICRRDY
  75. #define I2C_INT_TRANSMIT_READY I2C_ICIMR_ICXRDY
  76. #define I2C_INT_STOP_CONDITION I2C_ICSTR_SCD
  77. #define I2C_INT_ADDR_SLAVE I2C_ICIMR_AAS
  78. /*********MACRO of interrupt code******************************************************/
  79. #define I2C_INTCODE_TX_READY I2C_ICIVR_INTCODE_ICXRDY
  80. #define I2C_INTCODE_RX_READY I2C_ICIVR_INTCODE_ICRRDY
  81. #define I2C_INTCODE_STOP I2C_ICIVR_INTCODE_SCD
  82. #define I2C_INTCODE_NACK I2C_ICIVR_INTCODE_NACK
  83. #define I2C_INTCODE_AAS I2C_ICIVR_INTCODE_AAS
  84. #define I2C_INTCODE_AL I2C_ICIVR_INTCODE_AL
  85. /**************************************************************************************/
  86. #define I2C_DMA_TX_ENABLE (0x01 << I2C_ICDMAC_TXDMAEN_SHIFT)
  87. #define I2C_DMA_RX_ENABLE I2C_ICDMAC_RXDMAEN
  88. /*********Prototype of driver API*****************************************************/
  89. extern void I2CMasterInitExpClk(unsigned int baseAdd, unsigned int inputClk,
  90. unsigned int scaledClk, unsigned int outputClk);
  91. extern void I2CMasterEnable(unsigned int baseAddr);
  92. extern void I2CMasterDisable(unsigned int baseAddr);
  93. extern void I2CMasterIntEnableEx(unsigned int baseAddr, unsigned int intFlag);
  94. extern void I2CSlaveIntEnableEx(unsigned int baseAddr, unsigned int intFlag);
  95. extern void I2CMasterIntDisableEx(unsigned int baseAddr, unsigned int intFlag);
  96. extern void I2CSlaveIntDisableEx(unsigned int baseAddr, unsigned int intFlag);
  97. extern void I2CMasterIntClearEx(unsigned int baseAddr, unsigned int intFlag);
  98. extern void I2CSlaveIntClearEx(unsigned int baseAddr, unsigned int intFlag);
  99. extern void I2CMasterSlaveAddrSet(unsigned int baseAddr, unsigned int slaveAddr);
  100. extern void I2CMasterControl(unsigned int baseAddr, unsigned int cmd);
  101. extern void I2CMasterDataPut(unsigned int baseAddr, unsigned char data);
  102. extern void I2CSlaveDataPut(unsigned int baseAddr, unsigned char data);
  103. extern unsigned int I2CMasterIntStatus(unsigned int baseAddr);
  104. extern unsigned int I2CSlaveIntStatus(unsigned int baseAddr);
  105. extern unsigned int I2CSlaveIntStatusEx(unsigned int baseAddr,unsigned int intFlag);
  106. extern unsigned int I2CMasterBusBusy(unsigned int baseAddr);
  107. extern unsigned int I2CMasterDataGet(unsigned int baseAddr);
  108. extern unsigned int I2CSlaveDataGet(unsigned int baseAddr);
  109. extern unsigned int I2CMasterErr(unsigned int baseAddr);
  110. extern void I2COwnAddressSet(unsigned int baseAddr);
  111. extern void I2CIsr(void);
  112. extern void I2CSetDataCount(unsigned int baseAddr, unsigned int count);
  113. extern void I2CMasterStart(unsigned int baseAddr);
  114. extern unsigned int I2CInterruptVectorGet(unsigned int baseAddr);
  115. extern void I2CDMATxRxEventDisable(unsigned int baseAddr);
  116. extern void I2CDMATxEventEnable(unsigned int baseAddr);
  117. extern void I2CDMARxEventEnable(unsigned int baseAddr);
  118. extern void I2CDMATxEventDisable(unsigned int baseAddr);
  119. extern void I2CDMARxEventDisable(unsigned int baseAddr);
  120. extern unsigned int I2CMasterIsBusy(unsigned int baseAddr);
  121. extern void I2CStatusClear(unsigned int baseAddr, unsigned int status);
  122. extern void I2CMasterStop(unsigned int baseAddr);
  123. extern unsigned int I2CSlaveAddressGet(unsigned int baseAddr);
  124. #ifdef __cplusplus
  125. }
  126. #endif
  127. #endif