hsi2c.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. /**
  2. * \file hsi2c.h
  3. *
  4. * \brief This file contains the function prototypes for the device
  5. * abstraction layer for high speed 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_hsi2c.h"
  44. #ifdef __cplusplus
  45. extern "C" {
  46. #endif
  47. /****************************************************************************/
  48. /*
  49. ** Values that can be passed to I2CMasterControl API as cmd to configure mode
  50. ** of operation of I2C
  51. */
  52. #define I2C_CFG_MST_TX I2C_CON_TRX | I2C_CON_MST
  53. #define I2C_CFG_MST_RX I2C_CON_MST
  54. #define I2C_CFG_STOP I2C_CON_STP
  55. #define I2C_CFG_N0RMAL_MODE (0 << I2C_CON_STB_SHIFT)
  56. #define I2C_CFG_SRT_BYTE_MODE I2C_CON_STB
  57. #define I2C_CFG_7BIT_SLAVE_ADDR (0 << I2C_CON_XSA_SHIFT)
  58. #define I2C_CFG_10BIT_SLAVE_ADDR I2C_CON_XSA
  59. #define I2C_CFG_10BIT_OWN_ADDR_0 I2C_CON_XOA0
  60. #define I2C_CFG_10BIT_OWN_ADDR_1 I2C_CON_XOA1
  61. #define I2C_CFG_10BIT_OWN_ADDR_2 I2C_CON_XOA2
  62. #define I2C_CFG_10BIT_OWN_ADDR_3 I2C_CON_XOA3
  63. #define I2C_CFG_7BIT_OWN_ADDR_0 (0 << I2C_CON_XOA0_SHIFT)
  64. #define I2C_CFG_7BIT_OWN_ADDR_1 (0 << I2C_CON_XOA1_SHIFT)
  65. #define I2C_CFG_7BIT_OWN_ADDR_2 (0 << I2C_CON_XOA2_SHIFT
  66. #define I2C_CFG_7BIT_OWN_ADDR_3 (0 << I2C_CON_XOA3_SHIFT)
  67. /****************************************************************************/
  68. /*
  69. ** Values that can be passed to I2CMasterIntEnableEx API as intFlag to Enable
  70. ** interrupts.
  71. */
  72. #define I2C_INT_ARBITRATION_LOST I2C_IRQSTATUS_AL
  73. #define I2C_INT_NO_ACK I2C_IRQSTATUS_NACK
  74. #define I2C_INT_ADRR_READY_ACESS I2C_IRQSTATUS_ARDY
  75. #define I2C_INT_RECV_READY I2C_IRQSTATUS_RRDY
  76. #define I2C_INT_TRANSMIT_READY I2C_IRQSTATUS_XRDY
  77. #define I2C_INT_GENERAL_CALL I2C_IRQSTATUS_GC
  78. #define I2C_INT_START I2C_IRQSTATUS_STC
  79. #define I2C_INT_ACCESS_ERROR I2C_IRQSTATUS_AERR
  80. #define I2C_INT_STOP_CONDITION I2C_IRQSTATUS_BF
  81. #define I2C_INT_ADRR_SLAVE I2C_IRQSTATUS_AAS
  82. #define I2C_INT_TRANSMIT_UNDER_FLOW I2C_IRQSTATUS_XUDF
  83. #define I2C_INT_RECV_OVER_RUN I2C_IRQSTATUS_ROVR
  84. #define I2C_INT_RECV_DRAIN I2C_IRQSTATUS_RDR
  85. #define I2C_INT_TRANSMIT_DRAIN I2C_IRQSTATUS_XDR
  86. /****************************************************************************/
  87. /*
  88. ** Values that can be passed to I2CFIFOThersholdConfig/I2CFIFOClear API as
  89. ** flag to select recieve or transmit mode.
  90. */
  91. #define I2C_TX_MODE 1
  92. #define I2C_RX_MODE 0
  93. /****************************************************************************/
  94. /*
  95. ** Values that can be passed to I2CBufferStatus API as flag to get status
  96. ** of the internal buffer.
  97. */
  98. #define I2C_TX_BUFFER_STATUS 0
  99. #define I2C_RX_BUFFER_STATUS 1
  100. #define I2C_FIFO_DEPTH 2
  101. /****************************************************************************/
  102. /*
  103. ** Values that can be passed to I2COwnAddressSet API as flag to select
  104. ** any one of the HSI2C own address field .
  105. */
  106. #define HI2C_OWN_ADDR_0 0
  107. #define HI2C_OWN_ADDR_1 1
  108. #define HI2C_OWN_ADDR_2 2
  109. #define HI2C_OWN_ADDR_3 3
  110. /****************************************************************************/
  111. /*
  112. ** Values that can be passed to I2CIdleModeSelect API as flag to select
  113. ** any one of the idle mode of operation.
  114. */
  115. #define I2C_FORCE_IDLE_MODE (0 << I2C_SYSC_IDLEMODE_SHIFT)
  116. #define I2C_NO_IDLE_MODE (1 << I2C_SYSC_IDLEMODE_SHIFT)
  117. #define I2C_SMART_IDLE_MODE (2 << I2C_SYSC_IDLEMODE_SHIFT)
  118. #define I2C_SMART_IDLE_WAKEUP_MODE (3 << I2C_SYSC_IDLEMODE_SHIFT)
  119. /****************************************************************************/
  120. /*
  121. ** Values that can be passed to I2CClockActivitySelect API as flag to select
  122. ** the type of activity
  123. */
  124. #define I2C_CUT_OFF_BOTH_CLK (0 << I2C_SYSC_CLKACTIVITY_SHIFT)
  125. #define I2C_CUT_OFF_SYS_CLK (1 << I2C_SYSC_CLKACTIVITY_SHIFT)
  126. #define I2C_CUT_OFF_OCP_CLK (2 << I2C_SYSC_CLKACTIVITY_SHIFT)
  127. #define I2C_KEEP_ALIVE_BOTH_CLK (3 << I2C_SYSC_CLKACTIVITY_SHIFT)
  128. /****************************************************************************/
  129. /*
  130. ** Values that can be passed to I2CWakeUpEnable API as eventFlag to select
  131. ** the type of wakeup signal to be Enabled.
  132. */
  133. #define I2C_WAKE_UP_ARBITRATION_LOST I2C_WE_AL
  134. #define I2C_WAKE_UP_NO_ACK I2C_WE_NACK
  135. #define I2C_WAKE_UP_ADRR_RDY_ACCESS I2C_WE_ARDY
  136. #define I2C_WAKE_UP_GENERAL_CALL I2C_WE_GC
  137. #define I2C_WAKE_UP_START I2C_WE_STC
  138. #define I2C_WAKE_UP_STOP_CONDITION I2C_WE_BF
  139. #define I2C_WAKE_UP_ADRR_SLAVE I2C_WE_AAS
  140. #define I2C_WAKE_UP_TX_UNDER_FLOW I2C_WE_XUDF
  141. #define I2C_WAKE_UP_RECV_OVER_RUN I2C_WE_ROVR
  142. #define I2C_WAKE_UP_RECV_DRAIN I2C_WE_RDR
  143. #define I2C_WAKE_UP_TRANSMIT_DRAIN I2C_WE_XDR
  144. #define I2C_WAKE_UP_DATA_RECV_TX_RDY I2C_WE_DRDY
  145. /****************************************************************************/
  146. /*
  147. ** Values that can be passed to I2CWakeUpEnable API as flag to select
  148. ** the requet source to generate asynchronous signal.
  149. */
  150. #define I2C_WAKE_UP_IRQ 1
  151. #define I2C_WAKE_UP_DMA_RECV 2
  152. #define I2C_WAKE_UP_DMA_TRANSMIT 3
  153. /****************************************************************************/
  154. /*
  155. ** Values that can be passed to I2CMasterIntStatus/I2CSlaveIntStatus
  156. ** /I2CMasterIntStatusEx/I2CSlaveIntStatusEx API as flag to select
  157. ** RAWIRQSTATUS or IRQSTATUS.
  158. */
  159. #define I2C_STATUS_RAW 0
  160. #define I2C_STATUS 1
  161. /****************************************************************************/
  162. /*
  163. ** Values that can be passed to I2COwnAddressSet API
  164. */
  165. #define I2C_OWN_ADDR_0 0
  166. #define I2C_OWN_ADDR_1 1
  167. #define I2C_OWN_ADDR_2 2
  168. #define I2C_OWN_ADDR_3 3
  169. /*
  170. ** Structure to save the I2C context
  171. */
  172. typedef struct i2cContext {
  173. unsigned int prescalar;
  174. unsigned int lowdivider;
  175. unsigned int highdivider;
  176. unsigned int ownaddr;
  177. }I2CCONTEXT;
  178. /*****************************************************************************/
  179. /*
  180. ** Prototypes for the APIs
  181. */
  182. extern void I2CSoftReset(unsigned int baseAdd);
  183. extern void I2CMasterStop(unsigned int baseAdd);
  184. extern void I2CMasterStart(unsigned int baseAdd);
  185. extern void I2CMasterEnable(unsigned int baseAdd);
  186. extern void I2CMasterDisable(unsigned int baseAdd);
  187. extern void I2CAutoIdleEnable(unsigned int baseAdd);
  188. extern void I2CAutoIdleDisable(unsigned int baseAdd);
  189. extern void I2CDMATxEventEnable(unsigned int baseAdd);
  190. extern void I2CDMARxEventEnable(unsigned int baseAdd);
  191. extern void I2CDMATxEventDisable(unsigned int baseAdd);
  192. extern unsigned int I2CMasterErr(unsigned int baseAdd);
  193. extern void I2CDMARxEventDisable(unsigned int baseAdd);
  194. extern void I2CGlobalWakeUpEnable(unsigned int baseAdd);
  195. extern void I2CGlobalWakeUpDisable(unsigned int baseAdd);
  196. extern unsigned int I2CDataCountGet(unsigned int baseAdd);
  197. extern unsigned int I2CSlaveDataGet(unsigned int baseAdd);
  198. extern unsigned char I2CMasterDataGet(unsigned int baseAdd);
  199. extern unsigned int I2CMasterBusBusy(unsigned int baseAdd);
  200. extern unsigned int I2CMasterBusy(unsigned int baseAdd);
  201. extern unsigned int I2CSlaveIntStatus(unsigned int baseAdd);
  202. extern unsigned int I2CMasterIntStatus(unsigned int baseAdd);
  203. extern unsigned int I2CSystemStatusGet(unsigned int baseAdd);
  204. extern unsigned int I2CSlaveIntRawStatus(unsigned int baseAdd);
  205. extern unsigned int I2CMasterIntRawStatus(unsigned int baseAdd);
  206. extern unsigned int I2CActiveOwnAddressGet(unsigned int baseAdd);
  207. extern void I2CFIFOClear(unsigned int baseAdd, unsigned int flag);
  208. extern void I2CSlaveDataPut(unsigned int baseAdd,unsigned int data);
  209. extern void I2CMasterControl(unsigned int baseAdd, unsigned int cmd);
  210. extern void I2CSetDataCount(unsigned int baseAdd, unsigned int count);
  211. extern void I2CIdleModeSelect(unsigned int baseAdd, unsigned int flag);
  212. extern void I2CMasterDataPut(unsigned int baseAdd, unsigned char data);
  213. extern void I2CWakeUpEnable(unsigned int baseAdd, unsigned int eventFlag,
  214. unsigned int flag);
  215. extern void I2CWakeUpDisable(unsigned int baseAdd, unsigned int eventFlag,
  216. unsigned int flag);
  217. extern void I2CMasterInitExpClk(unsigned int baseAdd, unsigned int SysClk,
  218. unsigned int IClk, unsigned int outputClk);
  219. extern void I2COwnAddressSet(unsigned int baseAdd, unsigned int slaveAdd,
  220. unsigned int flag);
  221. extern void I2CSlaveIntClearEx(unsigned int baseAdd, unsigned int intFlag);
  222. extern void I2CClockActivitySelect(unsigned int baseAdd, unsigned int flag);
  223. extern void I2CSlaveIntEnableEx(unsigned int baseAdd, unsigned int intFlag);
  224. extern void I2CMasterIntClearEx(unsigned int baseAdd, unsigned int intFlag);
  225. extern void I2CSlaveIntDisableEx(unsigned int baseAdd, unsigned int intFlag);
  226. extern void I2CMasterIntEnableEx(unsigned int baseAdd, unsigned int intFlag);
  227. extern unsigned int I2CBufferStatus(unsigned int baseAdd, unsigned int flag);
  228. extern void I2CMasterIntDisableEx(unsigned int baseAdd, unsigned int intFlag);
  229. extern void I2CMasterSlaveAddrSet(unsigned int baseAdd, unsigned int slaveAdd);
  230. extern void I2CSlaveIntRawStatusClearEx(unsigned int baseAdd, unsigned int intFlag);
  231. extern void I2CFIFOThresholdConfig(unsigned int baseAdd, unsigned int threshlodVal,
  232. unsigned int flag);
  233. extern unsigned int I2CSlaveIntStatusEx(unsigned int baseAdd, unsigned int intFlag);
  234. extern void I2CMasterIntRawStatusClearEx(unsigned int baseAdd, unsigned int intFlag);
  235. extern unsigned int I2CMasterIntStatusEx(unsigned int baseAdd, unsigned int intFlag);
  236. extern unsigned int I2CSlaveIntRawStatusEx(unsigned int baseAdd, unsigned int intFlag);
  237. extern unsigned int I2CMasterSlaveAddrGet(unsigned int baseAdd, unsigned int slaveAdd);
  238. extern unsigned int I2CMasterIntRawStatusEx(unsigned int baseAdd, unsigned int intFlag);
  239. extern void I2CContextSave(unsigned int i2cBase, I2CCONTEXT *contextPtr);
  240. extern void I2CContextRestore(unsigned int i2cBase, I2CCONTEXT *contextPtr);
  241. #ifdef __cplusplus
  242. }
  243. #endif
  244. #endif