Welcome to mirror list, hosted at ThFree Co, Russian Federation.

i2c_common.h « common « efm32 « libopencm3 « include - github.com/thirdpin/libopencm3.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 92f9d737aa3538c1e7ce3a271bac9c6944073045 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
/*
 * This file is part of the libopencm3 project.
 *
 * Copyright (C) 2015 Kuldeep Singh Dhaka <kuldeepdhaka9@gmail.com>
 *
 * This library is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef LIBOPENCM3_EFM32_I2C_H
#define LIBOPENCM3_EFM32_I2C_H

#include <libopencm3/efm32/memorymap.h>
#include <libopencm3/cm3/common.h>

#define I2C_CTRL(base)		MMIO32((base) + 0x000)
#define I2C_CMD(base)		MMIO32((base) + 0x004)
#define I2C_STATE(base)		MMIO32((base) + 0x008)
#define I2C_STATUS(base)	MMIO32((base) + 0x00C)
#define I2C_CLKDIV(base)	MMIO32((base) + 0x010)
#define I2C_SADDR(base)		MMIO32((base) + 0x014)
#define I2C_SADDRMASK(base)	MMIO32((base) + 0x018)
#define I2C_RXDATA(base)	MMIO32((base) + 0x01C)
#define I2C_RXDATAP(base)	MMIO32((base) + 0x020)
#define I2C_TXDATA(base)	MMIO32((base) + 0x024)
#define I2C_IF(base)		MMIO32((base) + 0x028)
#define I2C_IFS(base)		MMIO32((base) + 0x02C)
#define I2C_IFC(base)		MMIO32((base) + 0x030)
#define I2C_IEN(base)		MMIO32((base) + 0x034)
#define I2C_ROUTE(base)		MMIO32((base) + 0x038)

/* I2C_CTRL */
#define I2C_CTRL_CLTO_SHIFT	(16)
#define I2C_CTRL_CLTO_MASK	(0x7 << I2C_CTRL_CLTO_SHIFT)
#define I2C_CTRL_CLTO(v)	\
	(((v) << I2C_CTRL_CLTO_SHIFT) & I2C_CTRL_CLTO_MASK)
#define I2C_CTRL_CLTO_OFF	0
#define I2C_CTRL_CLTO_40PCC	1
#define I2C_CTRL_CLTO_80PCC	2
#define I2C_CTRL_CLTO_160PCC	3
#define I2C_CTRL_CLTO_320PPC	4
#define I2C_CTRL_CLTO_1024PPC	5

#define I2C_CTRL_GIBITO		(1 << 15)

#define I2C_CTRL_BTO_SHIFT	(12)
#define I2C_CTRL_BTO_MASK	(0x3 << I2C_CTRL_BTO_SHIFT)
#define I2C_CTRL_BTO(v)		\
	(((v) << I2C_CTRL_BTO_SHIFT) & I2C_CTRL_BTO_MASK)
#define I2C_CTRL_BTO_OFF	0
#define I2C_CTRL_BTO_40PCC	1
#define I2C_CTRL_BTO_80PCC	2
#define I2C_CTRL_BTO_160PCC	3

#define I2C_CTRL_CLHR_SHIFT		(12)
#define I2C_CTRL_CLHR_MASK		(0x3 << I2C_CTRL_CLHR_SHIFT)
#define I2C_CTRL_CLHR(v)		\
	(((v) << I2C_CTRL_CLHR_SHIFT) & I2C_CTRL_CLHR_MASK)
#define I2C_CTRL_CLHR_STANDARD		0
#define I2C_CTRL_CLHR_ASYMMETRIC	1
#define I2C_CTRL_CLHR_FAST		2

#define I2C_CTRL_GCAMEN		(1 << 6)
#define I2C_CTRL_ARBDIS		(1 << 5)
#define I2C_CTRL_AUTOSN		(1 << 4)
#define I2C_CTRL_AUTOSE		(1 << 3)
#define I2C_CTRL_AUTOACK	(1 << 2)
#define I2C_CTRL_SLAVE		(1 << 1)
#define I2C_CTRL_EN		(1 << 0)

/* I2C_CMD */
#define I2C_CMD_CLEARPC		(1 << 7)
#define I2C_CMD_CLEARTX		(1 << 6)
#define I2C_CMD_ABORT		(1 << 5)
#define I2C_CMD_CONT		(1 << 4)
#define I2C_CMD_NACK		(1 << 3)
#define I2C_CMD_ACK		(1 << 2)
#define I2C_CMD_STOP		(1 << 1)
#define I2C_CMD_START		(1 << 0)

/* I2C_STATE */
#define I2C_STATE_STATE_SHIFT	(5)
#define I2C_STATE_STATE_MASK	(0x7 << I2C_STATE_STATE_SHIFT)
#define I2C_STATE_STATE(v)	\
	(((v) << I2C_STATE_STATE_SHIFT) & I2C_STATE_STATE_MASK)
#define I2C_STATE_STATE_IDLE	0
#define I2C_STATE_STATE_WAIT	1
#define I2C_STATE_STATE_START	2
#define I2C_STATE_STATE_ADDR	3
#define I2C_STATE_STATE_ADDRACK	4
#define I2C_STATE_STATE_DATA	5
#define I2C_STATE_STATE_DATAACK	6

#define I2C_STATE_BUSHOLD	(1 << 4)
#define I2C_STATE_NACKED	(1 << 3)
#define I2C_STATE_TRANSMITTER	(1 << 2)
#define I2C_STATE_MASTER	(1 << 1)
#define I2C_STATE_BUSY		(1 << 0)

/* I2C_STATUS */
#define I2C_STATUS_RXDATAV	(1 << 8)
#define I2C_STATUS_TXBL		(1 << 7)
#define I2C_STATUS_TXC		(1 << 6)
#define I2C_STATUS_PABORT	(1 << 5)
#define I2C_STATUS_PCONT	(1 << 4)
#define I2C_STATUS_PNACK	(1 << 3)
#define I2C_STATUS_PACK		(1 << 2)
#define I2C_STATUS_PSTOP	(1 << 1)
#define I2C_STATUS_PSTART	(1 << 0)

/* I2C_CLKDIV */
#define I2C_CLKDIV_DIV_SHIFT	(0)
#define I2C_CLKDIV_DIV_MASK	(0xFF << I2C_CLKDIV_DIV_SHIFT)
#define I2C_CLKDIV_DIV(v)	\
	(((v) << I2C_CLKDIV_DIV_SHIFT) & I2C_CLKDIV_DIV_MASK)

/* I2C_SADDR */
#define I2C_SADDR_ADDR_SHIFT	(0)
#define I2C_SADDR_ADDR_MASK	(0xFF << I2C_SADDR_ADDR_SHIFT)
#define I2C_SADDR_ADDR(v)	\
	(((v) << I2C_SADDR_ADDR_SHIFT) & I2C_SADDR_ADDR_MASK)

/* I2C_SADDRMASK */
#define I2C_SADDRMASK_MASK_SHIFT	(0)
#define I2C_SADDRMASK_MASK_MASK		(0xFF << I2C_SADDRMASK_MASK_SHIFT)
#define I2C_SADDRMASK_MASK(v)		\
	(((v) << I2C_SADDRMASK_MASK_SHIFT) & I2C_SADDRMASK_MASK_MASK)

/* I2C_IF */
#define I2C_IF_SSTOP		(1 << 16)
#define I2C_IF_CLTO		(1 << 15)
#define I2C_IF_BITO		(1 << 14)
#define I2C_IF_RXUF		(1 << 13)
#define I2C_IF_TXOF		(1 << 12)
#define I2C_IF_BUSHOLD		(1 << 11)
#define I2C_IF_BUSERR		(1 << 10)
#define I2C_IF_ARBLOST		(1 << 9)
#define I2C_IF_MSTOP		(1 << 8)
#define I2C_IF_NACK		(1 << 7)
#define I2C_IF_ACK		(1 << 6)
#define I2C_IF_RXDATAV		(1 << 5)
#define I2C_IF_TXBL		(1 << 4)
#define I2C_IF_TXC		(1 << 3)
#define I2C_IF_ADDR		(1 << 2)
#define I2C_IF_RSTART		(1 << 1)
#define I2C_IF_START		(1 << 0)

/* I2C_IFS */
#define I2C_IFS_SSTOP		(1 << 16)
#define I2C_IFS_CLTO		(1 << 15)
#define I2C_IFS_BITO		(1 << 14)
#define I2C_IFS_RXUF		(1 << 13)
#define I2C_IFS_TXOF		(1 << 12)
#define I2C_IFS_BUSHOLD		(1 << 11)
#define I2C_IFS_BUSERR		(1 << 10)
#define I2C_IFS_ARBLOST		(1 << 9)
#define I2C_IFS_MSTOP		(1 << 8)
#define I2C_IFS_NACK		(1 << 7)
#define I2C_IFS_ACK		(1 << 6)
#define I2C_IFS_RXDATAV		(1 << 5)
#define I2C_IFS_TXBL		(1 << 4)
#define I2C_IFS_TXC		(1 << 3)
#define I2C_IFS_ADDR		(1 << 2)
#define I2C_IFS_RSTART		(1 << 1)
#define I2C_IFS_START		(1 << 0)

/* I2C_IFC */
#define I2C_IFC_SSTOP		(1 << 16)
#define I2C_IFC_CLTO		(1 << 15)
#define I2C_IFC_BITO		(1 << 14)
#define I2C_IFC_RXUF		(1 << 13)
#define I2C_IFC_TXOF		(1 << 12)
#define I2C_IFC_BUSHOLD		(1 << 11)
#define I2C_IFC_BUSERR		(1 << 10)
#define I2C_IFC_ARBLOST		(1 << 9)
#define I2C_IFC_MSTOP		(1 << 8)
#define I2C_IFC_NACK		(1 << 7)
#define I2C_IFC_ACK		(1 << 6)
#define I2C_IFC_RXDATAV		(1 << 5)
#define I2C_IFC_TXBL		(1 << 4)
#define I2C_IFC_TXC		(1 << 3)
#define I2C_IFC_ADDR		(1 << 2)
#define I2C_IFC_RSTART		(1 << 1)
#define I2C_IFC_START		(1 << 0)

/* I2C_IEN */
#define I2C_IEN_SSTOP		(1 << 16)
#define I2C_IEN_CLTO		(1 << 15)
#define I2C_IEN_BITO		(1 << 14)
#define I2C_IEN_RXUF		(1 << 13)
#define I2C_IEN_TXOF		(1 << 12)
#define I2C_IEN_BUSHOLD		(1 << 11)
#define I2C_IEN_BUSERR		(1 << 10)
#define I2C_IEN_ARBLOST		(1 << 9)
#define I2C_IEN_MSTOP		(1 << 8)
#define I2C_IEN_NACK		(1 << 7)
#define I2C_IEN_ACK		(1 << 6)
#define I2C_IEN_RXDATAV		(1 << 5)
#define I2C_IEN_TXBL		(1 << 4)
#define I2C_IEN_TXC		(1 << 3)
#define I2C_IEN_ADDR		(1 << 2)
#define I2C_IEN_RSTART		(1 << 1)
#define I2C_IEN_START		(1 << 0)

/* I2C_ROUTE */
#define I2C_ROUTE_LOCATION_SHIFT	(8)
#define I2C_ROUTE_LOCATION_MASK		(0x7 << I2C_ROUTE_LOCATION_SHIFT)
#define I2C_ROUTE_LOCATION(v)		\
	(((v) << I2C_ROUTE_LOCATION_SHIFT) & I2C_ROUTE_LOCATION_MASK)
#define I2C_ROUTE_LOCATION_LOCx(x)	I2C_ROUTE_LOCATION(x)
#define I2C_ROUTE_LOCATION_LOC0		0
#define I2C_ROUTE_LOCATION_LOC1		1
#define I2C_ROUTE_LOCATION_LOC2		2
#define I2C_ROUTE_LOCATION_LOC3		3
#define I2C_ROUTE_LOCATION_LOC4		4
#define I2C_ROUTE_LOCATION_LOC5		5
#define I2C_ROUTE_LOCATION_LOC6		6

#define I2C_ROUTE_SCLPEN		(1 << 1)
#define I2C_ROUTE_SDAPEN		(1 << 0)

/* I2C0 */
#define I2C0			I2C0_BASE
#define I2C0_CTRL		I2C_CTRL(base)
#define I2C0_CMD		I2C_CMD(base)
#define I2C0_STATE		I2C_STATE(base)
#define I2C0_STATUS		I2C_STATUS(base)
#define I2C0_CLKDIV		I2C_CLKDIV(base)
#define I2C0_SADDR		I2C_SADDR(base)
#define I2C0_SADDRMASK		I2C_SADDRMASK(base)
#define I2C0_RXDATA		I2C_RXDATA(base)
#define I2C0_RXDATAP		I2C_RXDATAP(base)
#define I2C0_TXDATA		I2C_TXDATA(base)
#define I2C0_IF			I2C_IF(base)
#define I2C0_IFS		I2C_IFS(base)
#define I2C0_IFC		I2C_IFC(base)
#define I2C0_IEN		I2C_IEN(base)
#define I2C0_ROUTE		I2C_ROUTE(base)

/* I2C1 */
#define I2C1			I2C1_BASE
#define I2C1_CTRL		I2C_CTRL(base)
#define I2C1_CMD		I2C_CMD(base)
#define I2C1_STATE		I2C_STATE(base)
#define I2C1_STATUS		I2C_STATUS(base)
#define I2C1_CLKDIV		I2C_CLKDIV(base)
#define I2C1_SADDR		I2C_SADDR(base)
#define I2C1_SADDRMASK		I2C_SADDRMASK(base)
#define I2C1_RXDATA		I2C_RXDATA(base)
#define I2C1_RXDATAP		I2C_RXDATAP(base)
#define I2C1_TXDATA		I2C_TXDATA(base)
#define I2C1_IF			I2C_IF(base)
#define I2C1_IFS		I2C_IFS(base)
#define I2C1_IFC		I2C_IFC(base)
#define I2C1_IEN		I2C_IEN(base)
#define I2C1_ROUTE		I2C_ROUTE(base)

#endif