Kamcho Library 02.00.03  lib.kamcho.02.00.03.287
i2c_sfrs.h
Go to the documentation of this file.
1 
12 #ifndef __I2C_SFRS_H__
13 #define __I2C_SFRS_H__
14 
18 typedef struct {
19  union {
20  struct {
21  uint8_t IRBUFOVL:1;
22  uint8_t IWBUFOVL:1;
23  uint8_t IBUFF:1;
24  uint8_t IRWBUSY:1;
25  uint8_t ISTPR:1;
26  uint8_t ISTRR:1;
27  uint8_t IADDRR:1;
28  uint8_t IACKR:1;
29  };
30  uint8_t BYTE;
31  } STATUS;
32  union {
33  struct {
34  uint8_t ISTRSTRETCH:1;
35  uint8_t ISTPSIZE:1;
36  uint8_t ISACK:1;
37  uint8_t ISNACK:1;
38  uint8_t IRCSTRT:1;
39  uint8_t IGC:1;
40  uint8_t ICLKSTR:1;
41  uint8_t IRSTR:1;
42  };
43  uint8_t BYTE;
44  } CTRL1;
45  union {
46  struct {
47  uint8_t IMS:1;
48  uint8_t IFILTER:1;
49  uint8_t IEN:1;
50  uint8_t IMSK:5;
51  };
52  uint8_t BYTE;
53  } CTRL2;
54  uint8_t DATA;
55  uint8_t IADDR0;
56  uint8_t IADDR1;
57 } I2C_SFRS_t;
58 
62 #define I2C_SFRS ((__IO I2C_SFRS_t *) (SDIO_BASE + 0x08))
63 
67 #define E_I2C_STATUS_BIT_IRBUFOVL ((uint8_t) (1<<0))
68 #define E_I2C_STATUS_BIT_IWBUFOVL ((uint8_t) (1<<1))
69 #define E_I2C_STATUS_BIT_IBUFF ((uint8_t) (1<<2))
70 #define E_I2C_STATUS_BIT_IRWBUSY ((uint8_t) (1<<3))
71 #define E_I2C_STATUS_BIT_ISTPR ((uint8_t) (1<<4))
72 #define E_I2C_STATUS_BIT_ISTRR ((uint8_t) (1<<5))
73 #define E_I2C_STATUS_BIT_IADDRR ((uint8_t) (1<<6))
74 #define E_I2C_STATUS_BIT_IACKR ((uint8_t) (1<<7))
79 #define E_I2C_CTRL1_BIT_ISTRSTRETCH ((uint8_t) (1<<0))
80 #define E_I2C_CTRL1_BIT_ISTPSIZE ((uint8_t) (1<<1))
81 #define E_I2C_CTRL1_BIT_ISACK ((uint8_t) (1<<2))
82 #define E_I2C_CTRL1_BIT_ISNACK ((uint8_t) (1<<3))
83 #define E_I2C_CTRL1_BIT_IRCSTRT ((uint8_t) (1<<4))
84 #define E_I2C_CTRL1_BIT_IGC ((uint8_t) (1<<5))
85 #define E_I2C_CTRL1_BIT_ICLKSTR ((uint8_t) (1<<6))
86 #define E_I2C_CTRL1_BIT_IRSTR ((uint8_t) (1<<7))
91 static __INLINE void f_I2C_Enable(void)
92 {
93  I2C_SFRS->CTRL2.IEN = 1;
94 }
95 
99 static __INLINE void f_I2C_Disable(void)
100 {
101  I2C_SFRS->CTRL2.IEN = 0;
102 }
103 
107 static __INLINE void f_I2C_WriteData(uint8_t data)
108 {
109  I2C_SFRS->DATA = data;
110 }
111 
115 static __INLINE uint8_t f_I2C_ReadData(void)
116 {
117  return I2C_SFRS->DATA;
118 }
119 
125 static __INLINE uint8_t f_I2C_GetStatus(void)
126 {
127  return I2C_SFRS->STATUS.BYTE;
128 }
129 
133 static __INLINE void f_I2C_SlaveClockStretch(void)
134 {
135  I2C_SFRS->CTRL1.ISTRSTRETCH = 1;
136 }
137 
141 static __INLINE void f_I2C_SlaveReleaseClock(void)
142 {
143  I2C_SFRS->CTRL1.ICLKSTR = 1;
144 }
145 
149 static __INLINE void f_I2C_SlaveEnableGeneralCall(void)
150 {
151  I2C_SFRS->CTRL1.IGC = 1;
152 }
153 
157 static __INLINE void f_I2C_SlaveDisableGeneralCall(void)
158 {
159  I2C_SFRS->CTRL1.IGC = 0;
160 }
161 
165 static __INLINE void f_I2C_SlaveAddreeSizeTen(void)
166 {
167  I2C_SFRS->CTRL1.ISTPSIZE = 1;
168 }
169 
173 static __INLINE void f_I2C_MasterRepeatStart(void)
174 {
175  I2C_SFRS->CTRL1.IRSTR = 1;
176 }
177 
181 static __INLINE void f_I2C_MasterReceiveStart(void)
182 {
183  I2C_SFRS->CTRL1.IRCSTRT = 1;
184 }
185 
189 static __INLINE void f_I2C_MasterIssueNack(void)
190 {
191  uint8_t ctrl = I2C_SFRS->CTRL1.BYTE;
192 
193  ctrl |= E_I2C_CTRL1_BIT_ISNACK;
194  ctrl |= E_I2C_CTRL1_BIT_ISACK;
195  I2C_SFRS->CTRL1.BYTE = ctrl;
196 }
197 
201 static __INLINE void f_I2C_MasterIssueAck(void)
202 {
203  uint8_t ctrl = I2C_SFRS->CTRL1.BYTE;
204 
205  ctrl &= ~E_I2C_CTRL1_BIT_ISNACK;
206  ctrl |= E_I2C_CTRL1_BIT_ISACK;
207  I2C_SFRS->CTRL1.BYTE = ctrl;
208 }
209 
213 static __INLINE void f_I2C_MasterIssueStop(void)
214 {
215  I2C_SFRS->CTRL1.ISTPSIZE = 1;
216 }
217 
221 static __INLINE void f_I2C_MasterIssueStart(void)
222 {
223  I2C_SFRS->CTRL1.ISTRSTRETCH = 1;
224 }
225 
229 static __INLINE void f_I2C_InitMasterMode(void)
230 {
231  I2C_SFRS->CTRL2.IMS = 1;
232 }
233 
237 static __INLINE void f_I2C_InitSlaveMode(void)
238 {
239  I2C_SFRS->CTRL2.IMS = 0;
240 }
241 
245 static __INLINE uint8_t f_I2C_IsMasterMode(void)
246 {
247  return I2C_SFRS->CTRL2.IMS;
248 }
249 
253 static __INLINE void f_I2C_Set7BitSlaveAddr(void)
254 {
255  I2C_SFRS->CTRL1.ISTPSIZE = 0;
256 }
257 
261 static __INLINE void f_I2C_Set10BitSlaveAddr(void)
262 {
263  I2C_SFRS->CTRL1.ISTPSIZE = 1;
264 }
265 
269 static __INLINE void f_I2C_EnableFilter(void)
270 {
271  I2C_SFRS->CTRL2.IFILTER = 1;
272 }
273 
277 static __INLINE void f_I2C_DisableFilter(void)
278 {
279  I2C_SFRS->CTRL2.IFILTER = 0;
280 }
281 
287 static __INLINE void f_I2C_SetSlaveAddress(uint16_t addr)
288 {
289  I2C_SFRS->IADDR0 = addr & 0xFF;
290  I2C_SFRS->IADDR1 = (addr >> 8) & 0x03;
291 }
292 
298 static __INLINE void f_I2C_SetSlaveAddressMask(uint16_t mask)
299 {
300  I2C_SFRS->CTRL2.IMSK = mask;
301 }
302 
308 static __INLINE void f_I2C_SetClockDivider(uint8_t div)
309 {
310  I2C_SFRS->IADDR0 = div;
311 }
312 
318 static __INLINE uint8_t f_I2C_WriteBuffNotEmpty(void)
319 {
320  return I2C_SFRS->STATUS.IWBUFOVL;
321 }
322 
328 static __INLINE uint8_t f_I2C_BuffFull(void)
329 {
330  return I2C_SFRS->STATUS.IBUFF;
331 }
332 
338 static __INLINE uint8_t f_I2C_StartBitReceived(void)
339 {
340  return I2C_SFRS->STATUS.ISTRR;
341 }
342 #endif /* __I2C_SFRS_H__ */
343 
static __INLINE uint8_t f_I2C_ReadData(void)
Read a byte from I2C module.
Definition: i2c_sfrs.h:115
static __INLINE uint8_t f_I2C_WriteBuffNotEmpty(void)
Check if I2C write buffer full.
Definition: i2c_sfrs.h:318
static __INLINE void f_I2C_SlaveAddreeSizeTen(void)
Set slave address length.
Definition: i2c_sfrs.h:165
static __INLINE void f_I2C_SlaveClockStretch(void)
Start clock stretch in I2C slave mode.
Definition: i2c_sfrs.h:133
static __INLINE void f_I2C_SetClockDivider(uint8_t div)
Set clock divider for I2C module.
Definition: i2c_sfrs.h:308
static __INLINE uint8_t f_I2C_GetStatus(void)
Get the status of I2C module.
Definition: i2c_sfrs.h:125
static __INLINE void f_I2C_Disable(void)
Disable I2C Module.
Definition: i2c_sfrs.h:99
static __INLINE uint8_t f_I2C_IsMasterMode(void)
Check if I2C module a master mode.
Definition: i2c_sfrs.h:245
static __INLINE void f_I2C_InitSlaveMode(void)
Initialize I2C module to slave mode.
Definition: i2c_sfrs.h:237
static __INLINE void f_I2C_MasterIssueStart(void)
Issue a Start bit in I2C master mode.
Definition: i2c_sfrs.h:221
static __INLINE void f_I2C_EnableFilter(void)
Enable I2C filter.
Definition: i2c_sfrs.h:269
static __INLINE void f_I2C_InitMasterMode(void)
Initialize I2C module to master mode.
Definition: i2c_sfrs.h:229
static __INLINE void f_I2C_Set10BitSlaveAddr(void)
Set I2C slave address in 10-bit mode.
Definition: i2c_sfrs.h:261
static __INLINE void f_I2C_MasterRepeatStart(void)
Send Repeat Start bit in I2C master mode.
Definition: i2c_sfrs.h:173
static __INLINE uint8_t f_I2C_BuffFull(void)
Check if I2C buffer full.
Definition: i2c_sfrs.h:328
static __INLINE void f_I2C_Set7BitSlaveAddr(void)
Set I2C slave address in 7-bit mode.
Definition: i2c_sfrs.h:253
static __INLINE void f_I2C_MasterIssueNack(void)
Issue NACK bit in I2C master mode.
Definition: i2c_sfrs.h:189
#define I2C_SFRS
The starting address of I2C SFRS.
Definition: i2c_sfrs.h:62
static __INLINE void f_I2C_MasterIssueAck(void)
Issue Ack bit in I2C master mode.
Definition: i2c_sfrs.h:201
static __INLINE uint8_t f_I2C_StartBitReceived(void)
Check if I2C Start bit is received.
Definition: i2c_sfrs.h:338
static __INLINE void f_I2C_DisableFilter(void)
Disable I2C filter.
Definition: i2c_sfrs.h:277
uint8_t IADDR1
Definition: i2c_sfrs.h:56
static __INLINE void f_I2C_SlaveDisableGeneralCall(void)
Disable general call mode in I2C slave mode.
Definition: i2c_sfrs.h:157
static __INLINE void f_I2C_SlaveReleaseClock(void)
Release clock stretch in I2C slave mode.
Definition: i2c_sfrs.h:141
uint8_t DATA
Definition: i2c_sfrs.h:54
static __INLINE void f_I2C_SlaveEnableGeneralCall(void)
Enable general call mode in I2C slave mode.
Definition: i2c_sfrs.h:149
A structure to represent Special Function Registers for I2C.
Definition: i2c_sfrs.h:18
static __INLINE void f_I2C_MasterReceiveStart(void)
Start to receive data in I2C master mode.
Definition: i2c_sfrs.h:181
#define E_I2C_CTRL1_BIT_ISACK
Definition: i2c_sfrs.h:81
static __INLINE void f_I2C_MasterIssueStop(void)
Issue a Stop bit in I2C master mode.
Definition: i2c_sfrs.h:213
uint8_t BYTE
Definition: i2c_sfrs.h:30
static __INLINE void f_I2C_SetSlaveAddress(uint16_t addr)
Set I2C address in slave mode.
Definition: i2c_sfrs.h:287
static __INLINE void f_I2C_SetSlaveAddressMask(uint16_t mask)
Set I2C address mask in slave mode.
Definition: i2c_sfrs.h:298
static __INLINE void f_I2C_WriteData(uint8_t data)
Write a byte to I2C module.
Definition: i2c_sfrs.h:107
#define E_I2C_CTRL1_BIT_ISNACK
Definition: i2c_sfrs.h:82
uint8_t IADDR0
Definition: i2c_sfrs.h:55