Add i2c definition for lm3s cpu.
[bertos.git] / bertos / cpu / cortex-m3 / io / lm3s_i2c.h
1 /**
2  * \file
3  * <!--
4  * This file is part of BeRTOS.
5  *
6  * Bertos is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19  *
20  * As a special exception, you may use this file as part of a free software
21  * library without restriction.  Specifically, if other files instantiate
22  * templates or use macros or inline functions from this file, or you compile
23  * this file and link it with other files to produce an executable, this
24  * file does not by itself cause the resulting executable to be covered by
25  * the GNU General Public License.  This exception does not however
26  * invalidate any other reasons why the executable file might be covered by
27  * the GNU General Public License.
28  *
29  * Copyright 2010 Develer S.r.l. (http:///<www.develer.com/)
30  *
31  * -->
32  *
33  * \brief LM3S I2C definition.
34  */
35
36 #ifndef LM3S_I2C_H
37 #define LM3S_I2C_H
38
39
40 /* The following are defines for the I2C register offsets. */
41 #define I2C_O_MSA               0x00000000  ///< I2C Master Slave Address
42 #define I2C_O_SOAR              0x00000000  ///< I2C Slave Own Address
43 #define I2C_O_SCSR              0x00000004  ///< I2C Slave Control/Status
44 #define I2C_O_MCS               0x00000004  ///< I2C Master Control/Status
45 #define I2C_O_SDR               0x00000008  ///< I2C Slave Data
46 #define I2C_O_MDR               0x00000008  ///< I2C Master Data
47 #define I2C_O_MTPR              0x0000000C  ///< I2C Master Timer Period
48 #define I2C_O_SIMR              0x0000000C  ///< I2C Slave Interrupt Mask
49 #define I2C_O_SRIS              0x00000010  ///< I2C Slave Raw Interrupt Status
50 #define I2C_O_MIMR              0x00000010  ///< I2C Master Interrupt Mask
51 #define I2C_O_MRIS              0x00000014  ///< I2C Master Raw Interrupt Status
52 #define I2C_O_SMIS              0x00000014  ///< I2C Slave Masked Interrupt
53                                             ///< Status
54 #define I2C_O_SICR              0x00000018  ///< I2C Slave Interrupt Clear
55 #define I2C_O_MMIS              0x00000018  ///< I2C Master Masked Interrupt
56                                             ///< Status
57 #define I2C_O_MICR              0x0000001C  ///< I2C Master Interrupt Clear
58 #define I2C_O_MCR               0x00000020  ///< I2C Master Configuration
59
60
61 /* The following are defines for the bit fields in the I2C_O_MSA register. */
62 #define I2C_MSA_SA_M            0x000000FE  ///< I2C Slave Address
63 #define I2C_MSA_RS              0x00000001  ///< Receive not send
64 #define I2C_MSA_SA_S            1
65
66
67 /* The following are defines for the bit fields in the I2C_O_SOAR register. */
68 #define I2C_SOAR_OAR_M          0x0000007F  ///< I2C Slave Own Address
69 #define I2C_SOAR_OAR_S          0
70
71
72 /* The following are defines for the bit fields in the I2C_O_SCSR register. */
73 #define I2C_SCSR_FBR            0x00000004  ///< First Byte Received
74 #define I2C_SCSR_TREQ           0x00000002  ///< Transmit Request
75 #define I2C_SCSR_DA             0x00000001  ///< Device Active
76 #define I2C_SCSR_RREQ           0x00000001  ///< Receive Request
77
78 /* The following are defines for the bit fields in the I2C_O_MCS register. */
79 #define I2C_MCS_BUSBSY          0x00000040  ///< Bus Busy
80 #define I2C_MCS_IDLE            0x00000020  ///< I2C Idle
81 #define I2C_MCS_ARBLST          0x00000010  ///< Arbitration Lost
82 #define I2C_MCS_ACK             0x00000008  ///< Data Acknowledge Enable
83 #define I2C_MCS_DATACK          0x00000008  ///< Acknowledge Data
84 #define I2C_MCS_ADRACK          0x00000004  ///< Acknowledge Address
85 #define I2C_MCS_STOP            0x00000004  ///< Generate STOP
86 #define I2C_MCS_START           0x00000002  ///< Generate START
87 #define I2C_MCS_ERROR           0x00000002  ///< Error
88 #define I2C_MCS_RUN             0x00000001  ///< I2C Master Enable
89 #define I2C_MCS_BUSY            0x00000001  ///< I2C Busy
90
91
92 /* The following are defines for the bit fields in the I2C_O_SDR register. */
93 #define I2C_SDR_DATA_M          0x000000FF  ///< Data for Transfer
94 #define I2C_SDR_DATA_S          0
95
96 /* The following are defines for the bit fields in the I2C_O_MDR register. */
97 #define I2C_MDR_DATA_M          0x000000FF  ///< Data Transferred
98 #define I2C_MDR_DATA_S          0
99
100
101 /* The following are defines for the bit fields in the I2C_O_MTPR register. */
102 #define I2C_MTPR_TPR_M          0x000000FF  ///< SCL Clock Period
103 #define I2C_MTPR_TPR_S          0
104
105
106 /* The following are defines for the bit fields in the I2C_O_SIMR register. */
107 #define I2C_SIMR_STOPIM         0x00000004  ///< Stop Condition Interrupt Mask
108 #define I2C_SIMR_STARTIM        0x00000002  ///< Start Condition Interrupt Mask
109 #define I2C_SIMR_DATAIM         0x00000001  ///< Data Interrupt Mask
110
111
112 /* The following are defines for the bit fields in the I2C_O_SRIS register. */
113 #define I2C_SRIS_STOPRIS        0x00000004  ///< Stop Condition Raw Interrupt
114                                             ///< Status
115 #define I2C_SRIS_STARTRIS       0x00000002  ///< Start Condition Raw Interrupt
116                                             ///< Status
117 #define I2C_SRIS_DATARIS        0x00000001  ///< Data Raw Interrupt Status
118
119
120 /* The following are defines for the bit fields in the I2C_O_MIMR register. */
121 #define I2C_MIMR_IM             0x00000001  ///< Interrupt Mask
122
123
124 /* The following are defines for the bit fields in the I2C_O_MRIS register. */
125 #define I2C_MRIS_RIS            0x00000001  ///< Raw Interrupt Status
126
127 /* The following are defines for the bit fields in the I2C_O_SMIS register. */
128 #define I2C_SMIS_STOPMIS        0x00000004  ///< Stop Condition Masked Interrupt
129                                             ///< Status
130 #define I2C_SMIS_STARTMIS       0x00000002  ///< Start Condition Masked Interrupt
131                                             ///< Status
132 #define I2C_SMIS_DATAMIS        0x00000001  ///< Data Masked Interrupt Status
133
134 /* The following are defines for the bit fields in the I2C_O_SICR register. */
135 #define I2C_SICR_STOPIC         0x00000004  ///< Stop Condition Interrupt Clear
136 #define I2C_SICR_STARTIC        0x00000002  ///< Start Condition Interrupt Clear
137 #define I2C_SICR_DATAIC         0x00000001  ///< Data Interrupt Clear
138
139 /* The following are defines for the bit fields in the I2C_O_MMIS register. */
140 #define I2C_MMIS_MIS            0x00000001  ///< Masked Interrupt Status
141
142
143 /* The following are defines for the bit fields in the I2C_O_MICR register. */
144 #define I2C_MICR_IC             0x00000001  ///< Interrupt Clear
145
146
147 /* The following are defines for the bit fields in the I2C_O_MCR register. */
148 #define I2C_MCR_SFE             0x00000020  ///< I2C Slave Function Enable
149 #define I2C_MCR_MFE             0x00000010  ///< I2C Master Function Enable
150 #define I2C_MCR_LPBK            0x00000001  ///< I2C Loopback
151
152
153 /* The following definitions are deprecated. */
154
155 #ifndef DEPRECATED
156
157 #define I2C_O_SLAVE             0x00000800  ///< Offset from master to slave
158
159 #define I2C_SIMR_IM             0x00000001  ///< Interrupt Mask
160
161 #define I2C_SRIS_RIS            0x00000001  ///< Raw Interrupt Status
162
163 #define I2C_SMIS_MIS            0x00000001  ///< Masked Interrupt Status
164
165 #define I2C_SICR_IC             0x00000001  ///< Clear Interrupt
166
167 #define I2C_MASTER_O_SA         0x00000000  ///< Slave address register
168 #define I2C_MASTER_O_CS         0x00000004  ///< Control and Status register
169 #define I2C_MASTER_O_DR         0x00000008  ///< Data register
170 #define I2C_MASTER_O_TPR        0x0000000C  ///< Timer period register
171 #define I2C_MASTER_O_IMR        0x00000010  ///< Interrupt mask register
172 #define I2C_MASTER_O_RIS        0x00000014  ///< Raw interrupt status register
173 #define I2C_MASTER_O_MIS        0x00000018  ///< Masked interrupt status reg
174 #define I2C_MASTER_O_MICR       0x0000001C  ///< Interrupt clear register
175 #define I2C_MASTER_O_CR         0x00000020  ///< Configuration register
176
177 #define I2C_SLAVE_O_SICR        0x00000018  ///< Interrupt clear register
178 #define I2C_SLAVE_O_MIS         0x00000014  ///< Masked interrupt status reg
179 #define I2C_SLAVE_O_RIS         0x00000010  ///< Raw interrupt status register
180 #define I2C_SLAVE_O_IM          0x0000000C  ///< Interrupt mask register
181 #define I2C_SLAVE_O_DR          0x00000008  ///< Data register
182 #define I2C_SLAVE_O_CSR         0x00000004  ///< Control/Status register
183 #define I2C_SLAVE_O_OAR         0x00000000  ///< Own address register
184
185 #define I2C_MASTER_SA_SA_MASK   0x000000FE  ///< Slave address
186 #define I2C_MASTER_SA_RS        0x00000001  ///< Receive/send
187 #define I2C_MASTER_SA_SA_SHIFT  1
188
189 #define I2C_MASTER_CS_BUS_BUSY  0x00000040  ///< Bus busy
190 #define I2C_MASTER_CS_IDLE      0x00000020  ///< Idle
191 #define I2C_MASTER_CS_ERR_MASK  0x0000001C
192 #define I2C_MASTER_CS_BUSY      0x00000001  ///< Controller is TX/RX data
193 #define I2C_MASTER_CS_ERROR     0x00000002  ///< Error occurred
194 #define I2C_MASTER_CS_ADDR_ACK  0x00000004  ///< Address byte not acknowledged
195 #define I2C_MASTER_CS_DATA_ACK  0x00000008  ///< Data byte not acknowledged
196 #define I2C_MASTER_CS_ARB_LOST  0x00000010  ///< Lost arbitration
197 #define I2C_MASTER_CS_ACK       0x00000008  ///< Acknowlegde
198 #define I2C_MASTER_CS_STOP      0x00000004  ///< Stop
199 #define I2C_MASTER_CS_START     0x00000002  ///< Start
200 #define I2C_MASTER_CS_RUN       0x00000001  ///< Run
201
202
203 #define I2C_SCL_FAST            400000      ///< SCL fast frequency
204 #define I2C_SCL_STANDARD        100000      ///< SCL standard frequency
205 #define I2C_MASTER_TPR_SCL_LP   0x00000006  ///< SCL low period
206 #define I2C_MASTER_TPR_SCL_HP   0x00000004  ///< SCL high period
207 #define I2C_MASTER_TPR_SCL      (I2C_MASTER_TPR_SCL_HP + I2C_MASTER_TPR_SCL_LP)
208
209 #define I2C_MASTER_IMR_IM       0x00000001  ///< Master interrupt mask
210
211 #define I2C_MASTER_RIS_RIS      0x00000001  ///< Master raw interrupt status
212
213 #define I2C_MASTER_MIS_MIS      0x00000001  ///< Master masked interrupt status
214
215 #define I2C_MASTER_MICR_IC      0x00000001  ///< Master interrupt clear
216
217 #define I2C_MASTER_CR_SFE       0x00000020  ///< Slave function enable
218 #define I2C_MASTER_CR_MFE       0x00000010  ///< Master function enable
219 #define I2C_MASTER_CR_LPBK      0x00000001  ///< Loopback enable
220
221 #define I2C_SLAVE_SOAR_OAR_MASK 0x0000007F  ///< Slave address
222
223 #define I2C_SLAVE_CSR_FBR       0x00000004  ///< First byte received from master
224 #define I2C_SLAVE_CSR_TREQ      0x00000002  ///< Transmit request received
225 #define I2C_SLAVE_CSR_DA        0x00000001  ///< Enable the device
226 #define I2C_SLAVE_CSR_RREQ      0x00000001  ///< Receive data from I2C master
227
228 #define I2C_SLAVE_IMR_IM        0x00000001  ///< Slave interrupt mask
229
230 #define I2C_SLAVE_RIS_RIS       0x00000001  ///< Slave raw interrupt status
231
232 #define I2C_SLAVE_MIS_MIS       0x00000001  ///< Slave masked interrupt status
233
234 #define I2C_SLAVE_SICR_IC       0x00000001  ///< Slave interrupt clear
235
236 #endif
237
238 #endif /* LM3S_I2C_H */