hw_i2c.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. //*****************************************************************************
  2. //
  3. // hw_i2c.h - Macros used when accessing the I2C master and slave hardware.
  4. //
  5. // Copyright (c) 2005-2010 Texas Instruments Incorporated. All rights reserved.
  6. // Software License Agreement
  7. //
  8. // Texas Instruments (TI) is supplying this software for use solely and
  9. // exclusively on TI's microcontroller products. The software is owned by
  10. // TI and/or its suppliers, and is protected under applicable copyright
  11. // laws. You may not combine this software with "viral" open-source
  12. // software in order to form a larger program.
  13. //
  14. // THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
  15. // NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
  16. // NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  17. // A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
  18. // CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
  19. // DAMAGES, FOR ANY REASON WHATSOEVER.
  20. //
  21. // This is part of revision 6459 of the Stellaris Firmware Development Package.
  22. //
  23. //*****************************************************************************
  24. #ifndef __HW_I2C_H__
  25. #define __HW_I2C_H__
  26. //*****************************************************************************
  27. //
  28. // The following are defines for the I2C register offsets.
  29. //
  30. //*****************************************************************************
  31. #define I2C_O_MSA 0x00000000 // I2C Master Slave Address
  32. #define I2C_O_SOAR 0x00000000 // I2C Slave Own Address
  33. #define I2C_O_SCSR 0x00000004 // I2C Slave Control/Status
  34. #define I2C_O_MCS 0x00000004 // I2C Master Control/Status
  35. #define I2C_O_SDR 0x00000008 // I2C Slave Data
  36. #define I2C_O_MDR 0x00000008 // I2C Master Data
  37. #define I2C_O_MTPR 0x0000000C // I2C Master Timer Period
  38. #define I2C_O_SIMR 0x0000000C // I2C Slave Interrupt Mask
  39. #define I2C_O_SRIS 0x00000010 // I2C Slave Raw Interrupt Status
  40. #define I2C_O_MIMR 0x00000010 // I2C Master Interrupt Mask
  41. #define I2C_O_MRIS 0x00000014 // I2C Master Raw Interrupt Status
  42. #define I2C_O_SMIS 0x00000014 // I2C Slave Masked Interrupt
  43. // Status
  44. #define I2C_O_SICR 0x00000018 // I2C Slave Interrupt Clear
  45. #define I2C_O_MMIS 0x00000018 // I2C Master Masked Interrupt
  46. // Status
  47. #define I2C_O_MICR 0x0000001C // I2C Master Interrupt Clear
  48. #define I2C_O_MCR 0x00000020 // I2C Master Configuration
  49. //*****************************************************************************
  50. //
  51. // The following are defines for the bit fields in the I2C_O_MSA register.
  52. //
  53. //*****************************************************************************
  54. #define I2C_MSA_SA_M 0x000000FE // I2C Slave Address
  55. #define I2C_MSA_RS 0x00000001 // Receive not send
  56. #define I2C_MSA_SA_S 1
  57. //*****************************************************************************
  58. //
  59. // The following are defines for the bit fields in the I2C_O_SOAR register.
  60. //
  61. //*****************************************************************************
  62. #define I2C_SOAR_OAR_M 0x0000007F // I2C Slave Own Address
  63. #define I2C_SOAR_OAR_S 0
  64. //*****************************************************************************
  65. //
  66. // The following are defines for the bit fields in the I2C_O_SCSR register.
  67. //
  68. //*****************************************************************************
  69. #define I2C_SCSR_FBR 0x00000004 // First Byte Received
  70. #define I2C_SCSR_TREQ 0x00000002 // Transmit Request
  71. #define I2C_SCSR_DA 0x00000001 // Device Active
  72. #define I2C_SCSR_RREQ 0x00000001 // Receive Request
  73. //*****************************************************************************
  74. //
  75. // The following are defines for the bit fields in the I2C_O_MCS register.
  76. //
  77. //*****************************************************************************
  78. #define I2C_MCS_BUSBSY 0x00000040 // Bus Busy
  79. #define I2C_MCS_IDLE 0x00000020 // I2C Idle
  80. #define I2C_MCS_ARBLST 0x00000010 // Arbitration Lost
  81. #define I2C_MCS_ACK 0x00000008 // Data Acknowledge Enable
  82. #define I2C_MCS_DATACK 0x00000008 // Acknowledge Data
  83. #define I2C_MCS_ADRACK 0x00000004 // Acknowledge Address
  84. #define I2C_MCS_STOP 0x00000004 // Generate STOP
  85. #define I2C_MCS_START 0x00000002 // Generate START
  86. #define I2C_MCS_ERROR 0x00000002 // Error
  87. #define I2C_MCS_RUN 0x00000001 // I2C Master Enable
  88. #define I2C_MCS_BUSY 0x00000001 // I2C Busy
  89. //*****************************************************************************
  90. //
  91. // The following are defines for the bit fields in the I2C_O_SDR register.
  92. //
  93. //*****************************************************************************
  94. #define I2C_SDR_DATA_M 0x000000FF // Data for Transfer
  95. #define I2C_SDR_DATA_S 0
  96. //*****************************************************************************
  97. //
  98. // The following are defines for the bit fields in the I2C_O_MDR register.
  99. //
  100. //*****************************************************************************
  101. #define I2C_MDR_DATA_M 0x000000FF // Data Transferred
  102. #define I2C_MDR_DATA_S 0
  103. //*****************************************************************************
  104. //
  105. // The following are defines for the bit fields in the I2C_O_MTPR register.
  106. //
  107. //*****************************************************************************
  108. #define I2C_MTPR_TPR_M 0x0000007F // SCL Clock Period
  109. #define I2C_MTPR_TPR_S 0
  110. //*****************************************************************************
  111. //
  112. // The following are defines for the bit fields in the I2C_O_SIMR register.
  113. //
  114. //*****************************************************************************
  115. #define I2C_SIMR_STOPIM 0x00000004 // Stop Condition Interrupt Mask
  116. #define I2C_SIMR_STARTIM 0x00000002 // Start Condition Interrupt Mask
  117. #define I2C_SIMR_DATAIM 0x00000001 // Data Interrupt Mask
  118. //*****************************************************************************
  119. //
  120. // The following are defines for the bit fields in the I2C_O_SRIS register.
  121. //
  122. //*****************************************************************************
  123. #define I2C_SRIS_STOPRIS 0x00000004 // Stop Condition Raw Interrupt
  124. // Status
  125. #define I2C_SRIS_STARTRIS 0x00000002 // Start Condition Raw Interrupt
  126. // Status
  127. #define I2C_SRIS_DATARIS 0x00000001 // Data Raw Interrupt Status
  128. //*****************************************************************************
  129. //
  130. // The following are defines for the bit fields in the I2C_O_MIMR register.
  131. //
  132. //*****************************************************************************
  133. #define I2C_MIMR_IM 0x00000001 // Interrupt Mask
  134. //*****************************************************************************
  135. //
  136. // The following are defines for the bit fields in the I2C_O_MRIS register.
  137. //
  138. //*****************************************************************************
  139. #define I2C_MRIS_RIS 0x00000001 // Raw Interrupt Status
  140. //*****************************************************************************
  141. //
  142. // The following are defines for the bit fields in the I2C_O_SMIS register.
  143. //
  144. //*****************************************************************************
  145. #define I2C_SMIS_STOPMIS 0x00000004 // Stop Condition Masked Interrupt
  146. // Status
  147. #define I2C_SMIS_STARTMIS 0x00000002 // Start Condition Masked Interrupt
  148. // Status
  149. #define I2C_SMIS_DATAMIS 0x00000001 // Data Masked Interrupt Status
  150. //*****************************************************************************
  151. //
  152. // The following are defines for the bit fields in the I2C_O_SICR register.
  153. //
  154. //*****************************************************************************
  155. #define I2C_SICR_STOPIC 0x00000004 // Stop Condition Interrupt Clear
  156. #define I2C_SICR_STARTIC 0x00000002 // Start Condition Interrupt Clear
  157. #define I2C_SICR_DATAIC 0x00000001 // Data Interrupt Clear
  158. //*****************************************************************************
  159. //
  160. // The following are defines for the bit fields in the I2C_O_MMIS register.
  161. //
  162. //*****************************************************************************
  163. #define I2C_MMIS_MIS 0x00000001 // Masked Interrupt Status
  164. //*****************************************************************************
  165. //
  166. // The following are defines for the bit fields in the I2C_O_MICR register.
  167. //
  168. //*****************************************************************************
  169. #define I2C_MICR_IC 0x00000001 // Interrupt Clear
  170. //*****************************************************************************
  171. //
  172. // The following are defines for the bit fields in the I2C_O_MCR register.
  173. //
  174. //*****************************************************************************
  175. #define I2C_MCR_SFE 0x00000020 // I2C Slave Function Enable
  176. #define I2C_MCR_MFE 0x00000010 // I2C Master Function Enable
  177. #define I2C_MCR_LPBK 0x00000001 // I2C Loopback
  178. //*****************************************************************************
  179. //
  180. // The following definitions are deprecated.
  181. //
  182. //*****************************************************************************
  183. #ifndef DEPRECATED
  184. //*****************************************************************************
  185. //
  186. // The following are deprecated defines for the I2C register offsets.
  187. //
  188. //*****************************************************************************
  189. #define I2C_O_SLAVE 0x00000800 // Offset from master to slave
  190. //*****************************************************************************
  191. //
  192. // The following are deprecated defines for the bit fields in the I2C_O_SIMR
  193. // register.
  194. //
  195. //*****************************************************************************
  196. #define I2C_SIMR_IM 0x00000001 // Interrupt Mask
  197. //*****************************************************************************
  198. //
  199. // The following are deprecated defines for the bit fields in the I2C_O_SRIS
  200. // register.
  201. //
  202. //*****************************************************************************
  203. #define I2C_SRIS_RIS 0x00000001 // Raw Interrupt Status
  204. //*****************************************************************************
  205. //
  206. // The following are deprecated defines for the bit fields in the I2C_O_SMIS
  207. // register.
  208. //
  209. //*****************************************************************************
  210. #define I2C_SMIS_MIS 0x00000001 // Masked Interrupt Status
  211. //*****************************************************************************
  212. //
  213. // The following are deprecated defines for the bit fields in the I2C_O_SICR
  214. // register.
  215. //
  216. //*****************************************************************************
  217. #define I2C_SICR_IC 0x00000001 // Clear Interrupt
  218. //*****************************************************************************
  219. //
  220. // The following are deprecated defines for the I2C master register offsets.
  221. //
  222. //*****************************************************************************
  223. #define I2C_MASTER_O_SA 0x00000000 // Slave address register
  224. #define I2C_MASTER_O_CS 0x00000004 // Control and Status register
  225. #define I2C_MASTER_O_DR 0x00000008 // Data register
  226. #define I2C_MASTER_O_TPR 0x0000000C // Timer period register
  227. #define I2C_MASTER_O_IMR 0x00000010 // Interrupt mask register
  228. #define I2C_MASTER_O_RIS 0x00000014 // Raw interrupt status register
  229. #define I2C_MASTER_O_MIS 0x00000018 // Masked interrupt status reg
  230. #define I2C_MASTER_O_MICR 0x0000001C // Interrupt clear register
  231. #define I2C_MASTER_O_CR 0x00000020 // Configuration register
  232. //*****************************************************************************
  233. //
  234. // The following are deprecated defines for the I2C slave register offsets.
  235. //
  236. //*****************************************************************************
  237. #define I2C_SLAVE_O_SICR 0x00000018 // Interrupt clear register
  238. #define I2C_SLAVE_O_MIS 0x00000014 // Masked interrupt status reg
  239. #define I2C_SLAVE_O_RIS 0x00000010 // Raw interrupt status register
  240. #define I2C_SLAVE_O_IM 0x0000000C // Interrupt mask register
  241. #define I2C_SLAVE_O_DR 0x00000008 // Data register
  242. #define I2C_SLAVE_O_CSR 0x00000004 // Control/Status register
  243. #define I2C_SLAVE_O_OAR 0x00000000 // Own address register
  244. //*****************************************************************************
  245. //
  246. // The following are deprecated defines for the bit fields in the I2C master
  247. // slave address register.
  248. //
  249. //*****************************************************************************
  250. #define I2C_MASTER_SA_SA_MASK 0x000000FE // Slave address
  251. #define I2C_MASTER_SA_RS 0x00000001 // Receive/send
  252. #define I2C_MASTER_SA_SA_SHIFT 1
  253. //*****************************************************************************
  254. //
  255. // The following are deprecated defines for the bit fields in the I2C Master
  256. // Control and Status register.
  257. //
  258. //*****************************************************************************
  259. #define I2C_MASTER_CS_BUS_BUSY 0x00000040 // Bus busy
  260. #define I2C_MASTER_CS_IDLE 0x00000020 // Idle
  261. #define I2C_MASTER_CS_ERR_MASK 0x0000001C
  262. #define I2C_MASTER_CS_BUSY 0x00000001 // Controller is TX/RX data
  263. #define I2C_MASTER_CS_ERROR 0x00000002 // Error occurred
  264. #define I2C_MASTER_CS_ADDR_ACK 0x00000004 // Address byte not acknowledged
  265. #define I2C_MASTER_CS_DATA_ACK 0x00000008 // Data byte not acknowledged
  266. #define I2C_MASTER_CS_ARB_LOST 0x00000010 // Lost arbitration
  267. #define I2C_MASTER_CS_ACK 0x00000008 // Acknowlegde
  268. #define I2C_MASTER_CS_STOP 0x00000004 // Stop
  269. #define I2C_MASTER_CS_START 0x00000002 // Start
  270. #define I2C_MASTER_CS_RUN 0x00000001 // Run
  271. //*****************************************************************************
  272. //
  273. // The following are deprecated defines for the values used in determining the
  274. // contents of the I2C Master Timer Period register.
  275. //
  276. //*****************************************************************************
  277. #define I2C_SCL_FAST 400000 // SCL fast frequency
  278. #define I2C_SCL_STANDARD 100000 // SCL standard frequency
  279. #define I2C_MASTER_TPR_SCL_LP 0x00000006 // SCL low period
  280. #define I2C_MASTER_TPR_SCL_HP 0x00000004 // SCL high period
  281. #define I2C_MASTER_TPR_SCL (I2C_MASTER_TPR_SCL_HP + I2C_MASTER_TPR_SCL_LP)
  282. //*****************************************************************************
  283. //
  284. // The following are deprecated defines for the bit fields in the I2C Master
  285. // Interrupt Mask register.
  286. //
  287. //*****************************************************************************
  288. #define I2C_MASTER_IMR_IM 0x00000001 // Master interrupt mask
  289. //*****************************************************************************
  290. //
  291. // The following are deprecated defines for the bit fields in the I2C Master
  292. // Raw Interrupt Status register.
  293. //
  294. //*****************************************************************************
  295. #define I2C_MASTER_RIS_RIS 0x00000001 // Master raw interrupt status
  296. //*****************************************************************************
  297. //
  298. // The following are deprecated defines for the bit fields in the I2C Master
  299. // Masked Interrupt Status register.
  300. //
  301. //*****************************************************************************
  302. #define I2C_MASTER_MIS_MIS 0x00000001 // Master masked interrupt status
  303. //*****************************************************************************
  304. //
  305. // The following are deprecated defines for the bit fields in the I2C Master
  306. // Interrupt Clear register.
  307. //
  308. //*****************************************************************************
  309. #define I2C_MASTER_MICR_IC 0x00000001 // Master interrupt clear
  310. //*****************************************************************************
  311. //
  312. // The following are deprecated defines for the bit fields in the I2C Master
  313. // Configuration register.
  314. //
  315. //*****************************************************************************
  316. #define I2C_MASTER_CR_SFE 0x00000020 // Slave function enable
  317. #define I2C_MASTER_CR_MFE 0x00000010 // Master function enable
  318. #define I2C_MASTER_CR_LPBK 0x00000001 // Loopback enable
  319. //*****************************************************************************
  320. //
  321. // The following are deprecated defines for the bit fields in the I2C Slave Own
  322. // Address register.
  323. //
  324. //*****************************************************************************
  325. #define I2C_SLAVE_SOAR_OAR_MASK 0x0000007F // Slave address
  326. //*****************************************************************************
  327. //
  328. // The following are deprecated defines for the bit fields in the I2C Slave
  329. // Control/Status register.
  330. //
  331. //*****************************************************************************
  332. #define I2C_SLAVE_CSR_FBR 0x00000004 // First byte received from master
  333. #define I2C_SLAVE_CSR_TREQ 0x00000002 // Transmit request received
  334. #define I2C_SLAVE_CSR_DA 0x00000001 // Enable the device
  335. #define I2C_SLAVE_CSR_RREQ 0x00000001 // Receive data from I2C master
  336. //*****************************************************************************
  337. //
  338. // The following are deprecated defines for the bit fields in the I2C Slave
  339. // Interrupt Mask register.
  340. //
  341. //*****************************************************************************
  342. #define I2C_SLAVE_IMR_IM 0x00000001 // Slave interrupt mask
  343. //*****************************************************************************
  344. //
  345. // The following are deprecated defines for the bit fields in the I2C Slave Raw
  346. // Interrupt Status register.
  347. //
  348. //*****************************************************************************
  349. #define I2C_SLAVE_RIS_RIS 0x00000001 // Slave raw interrupt status
  350. //*****************************************************************************
  351. //
  352. // The following are deprecated defines for the bit fields in the I2C Slave
  353. // Masked Interrupt Status register.
  354. //
  355. //*****************************************************************************
  356. #define I2C_SLAVE_MIS_MIS 0x00000001 // Slave masked interrupt status
  357. //*****************************************************************************
  358. //
  359. // The following are deprecated defines for the bit fields in the I2C Slave
  360. // Interrupt Clear register.
  361. //
  362. //*****************************************************************************
  363. #define I2C_SLAVE_SICR_IC 0x00000001 // Slave interrupt clear
  364. #endif
  365. #endif // __HW_I2C_H__