1 /**************************************************************************//**
\r
4 * @brief UI2C register definition header file
\r
6 * @copyright (C) 2017 Nuvoton Technology Corp. All rights reserved.
\r
7 *****************************************************************************/
\r
8 #ifndef __UI2C_REG_H__
\r
9 #define __UI2C_REG_H__
\r
11 /** @addtogroup REGISTER Control Register
\r
17 /*---------------------- I2C Mode of USCI Controller -------------------------*/
\r
19 @addtogroup UI2C I2C Mode of USCI Controller(UI2C)
\r
20 Memory Mapped Structure for UI2C Controller
\r
29 * Offset: 0x00 USCI Control Register
\r
30 * ---------------------------------------------------------------------------------------------------
\r
31 * |Bits |Field |Descriptions
\r
32 * | :----: | :----: | :---- |
\r
33 * |[2:0] |FUNMODE |Function Mode
\r
34 * | | |This bit field selects the protocol for this USCI controller
\r
35 * | | |Selecting a protocol that is not available or a reserved combination disables the USCI
\r
36 * | | |When switching between two protocols, the USCI has to be disabled before selecting a new protocol
\r
37 * | | |Simultaneously, the USCI will be reset when user write 000 to FUNMODE.
\r
38 * | | |000 = The USCI is disabled. All protocol related state machines are set to idle state.
\r
39 * | | |001 = The SPI protocol is selected.
\r
40 * | | |010 = The UART protocol is selected.
\r
41 * | | |100 = The I2C protocol is selected.
\r
42 * | | |Note: Other bit combinations are reserved.
\r
43 * @var UI2C_T::BRGEN
\r
44 * Offset: 0x08 USCI Baud Rate Generator Register
\r
45 * ---------------------------------------------------------------------------------------------------
\r
46 * |Bits |Field |Descriptions
\r
47 * | :----: | :----: | :---- |
\r
48 * |[0] |RCLKSEL |Reference Clock Source Selection
\r
49 * | | |This bit selects the source signal of reference clock (fREF_CLK).
\r
50 * | | |0 = Peripheral device clock fPCLK.
\r
51 * | | |1 = Reserved.
\r
52 * |[1] |PTCLKSEL |Protocol Clock Source Selection
\r
53 * | | |This bit selects the source signal of protocol clock (fPROT_CLK).
\r
54 * | | |0 = Reference clock fREF_CLK.
\r
55 * | | |1 = fREF_CLK2 (its frequency is half of fREF_CLK).
\r
56 * |[3:2] |SPCLKSEL |Sample Clock Source Selection
\r
57 * | | |This bit field used for the clock source selection of a sample clock (fSAMP_CLK) for the protocol processor.
\r
58 * | | |00 = fSAMP_CLK = fDIV_CLK.
\r
59 * | | |01 = fSAMP_CLK = fPROT_CLK.
\r
60 * | | |10 = fSAMP_CLK = fSCLK.
\r
61 * | | |11 = fSAMP_CLK = fREF_CLK.
\r
62 * |[4] |TMCNTEN |Time Measurement Counter Enable Bit
\r
63 * | | |This bit enables the 10-bit timing measurement counter.
\r
64 * | | |0 = Time measurement counter is Disabled.
\r
65 * | | |1 = Time measurement counter is Enabled.
\r
66 * |[5] |TMCNTSRC |Time Measurement Counter Clock Source Selection
\r
67 * | | |0 = Time measurement counter with fPROT_CLK.
\r
68 * | | |1 = Time measurement counter with fDIV_CLK.
\r
69 * |[9:8] |PDSCNT |Pre-divider for Sample Counter
\r
70 * | | |This bit field defines the divide ratio of the clock division from sample clock fSAMP_CLK
\r
71 * | | |The divided frequency fPDS_CNT = fSAMP_CLK / (PDSCNT+1).
\r
72 * |[14:10] |DSCNT |Denominator for Sample Counter
\r
73 * | | |This bit field defines the divide ratio of the sample clock fSAMP_CLK.
\r
74 * | | |The divided frequency fDS_CNT = fPDS_CNT / (DSCNT+1).
\r
75 * | | |Note: The maximum value of DSCNT is 0xF on UART mode and suggest to set over 4 to confirm the receiver data is sampled in right value
\r
76 * |[25:16] |CLKDIV |Clock Divider
\r
77 * | | |This bit field defines the ratio between the protocol clock frequency fPROT_CLK and the clock divider frequency fDIV_CLK (fDIV_CLK = fPROT_CLK / (CLKDIV+1) ).
\r
78 * | | |Note: In UART function, it can be updated by hardware in the 4th falling edge of the input data 0x55 when the auto baud rate function (ABREN(UI2C_PROTCTL[6])) is enabled
\r
79 * | | |The revised value is the average bit time between bit 5 and bit 6
\r
80 * | | |The user can use revised CLKDIV and new BRDETITV (UI2C_PROTCTL[24:16]) to calculate the precise baud rate.
\r
81 * @var UI2C_T::LINECTL
\r
82 * Offset: 0x2C USCI Line Control Register
\r
83 * ---------------------------------------------------------------------------------------------------
\r
84 * |Bits |Field |Descriptions
\r
85 * | :----: | :----: | :---- |
\r
86 * |[0] |LSB |LSB First Transmission Selection
\r
87 * | | |0 = The MSB, which bit of transmit/receive data buffer depends on the setting of DWIDTH, is transmitted/received first.
\r
88 * | | |1 = The LSB, the bit 0 of data buffer, will be transmitted/received first.
\r
89 * |[11:8] |DWIDTH |Word Length of Transmission
\r
90 * | | |This bit field defines the data word length (amount of bits) for reception and transmission
\r
91 * | | |The data word is always right-aligned in the data buffer
\r
92 * | | |USCI support word length from 4 to 16 bits.
\r
93 * | | |0x0: The data word contains 16 bits located at bit positions [15:0].
\r
94 * | | |0x1: Reserved.
\r
95 * | | |0x2: Reserved.
\r
96 * | | |0x3: Reserved.
\r
97 * | | |0x4: The data word contains 4 bits located at bit positions [3:0].
\r
98 * | | |0x5: The data word contains 5 bits located at bit positions [4:0].
\r
100 * | | |0xF: The data word contains 15 bits located at bit positions [14:0].
\r
101 * | | |Note: In UART protocol, the length can be configured as 6~13 bits.
\r
102 * @var UI2C_T::TXDAT
\r
103 * Offset: 0x30 USCI Transmit Data Register
\r
104 * ---------------------------------------------------------------------------------------------------
\r
105 * |Bits |Field |Descriptions
\r
106 * | :----: | :----: | :---- |
\r
107 * |[15:0] |TXDAT |Transmit Data
\r
108 * | | |Software can use this bit field to write 16-bit transmit data for transmission.
\r
109 * @var UI2C_T::RXDAT
\r
110 * Offset: 0x34 USCI Receive Data Register
\r
111 * ---------------------------------------------------------------------------------------------------
\r
112 * |Bits |Field |Descriptions
\r
113 * | :----: | :----: | :---- |
\r
114 * |[15:0] |RXDAT |Received Data
\r
115 * | | |This bit field monitors the received data which stored in receive data buffer.
\r
116 * | | |Note 1: In I2C protocol, RXDAT[12:8] indicate the different transmission conditions which defined in I2C.
\r
117 * | | |Note 2: In UART protocol, RXDAT[15:13] indicate the same frame status of BREAK, FRMERR and PARITYERR (UI2C_PROTSTS[7:5]).
\r
118 * @var UI2C_T::DEVADDR0
\r
119 * Offset: 0x44 USCI Device Address Register 0
\r
120 * ---------------------------------------------------------------------------------------------------
\r
121 * |Bits |Field |Descriptions
\r
122 * | :----: | :----: | :---- |
\r
123 * |[9:0] |DEVADDR |Device Address
\r
124 * | | |In I2C protocol, this bit field contains the programmed slave address
\r
125 * | | |If the first received address byte are 1111 0AAXB, the AA bits are compared to the bits DEVADDR[9:8] to check for address match, where the X is R/W bit
\r
126 * | | |Then the second address byte is also compared to DEVADDR[7:0].
\r
127 * | | |Note: The DEVADDR [9:7] must be set 3'b000 when I2C operating in 7-bit address mode.
\r
128 * @var UI2C_T::DEVADDR1
\r
129 * Offset: 0x48 USCI Device Address Register 1
\r
130 * ---------------------------------------------------------------------------------------------------
\r
131 * |Bits |Field |Descriptions
\r
132 * | :----: | :----: | :---- |
\r
133 * |[9:0] |DEVADDR |Device Address
\r
134 * | | |In I2C protocol, this bit field contains the programmed slave address
\r
135 * | | |If the first received address byte are 1111 0AAXB, the AA bits are compared to the bits DEVADDR[9:8] to check for address match, where the X is R/W bit
\r
136 * | | |Then the second address byte is also compared to DEVADDR[7:0].
\r
137 * | | |Note: The DEVADDR [9:7] must be set 3'b000 when I2C operating in 7-bit address mode.
\r
138 * @var UI2C_T::ADDRMSK0
\r
139 * Offset: 0x4C USCI Device Address Mask Register 0
\r
140 * ---------------------------------------------------------------------------------------------------
\r
141 * |Bits |Field |Descriptions
\r
142 * | :----: | :----: | :---- |
\r
143 * |[9:0] |ADDRMSK |USCI Device Address Mask
\r
144 * | | |0 = Mask Disabled (the received corresponding register bit should be exact the same as address register.).
\r
145 * | | |1 = Mask Enabled (the received corresponding address bit is don't care.).
\r
146 * | | |USCI support multiple address recognition with two address mask register
\r
147 * | | |When the bit in the address mask register is set to one, it means the received corresponding address bit is don't-care
\r
148 * | | |If the bit is set to zero, that means the received corresponding register bit should be exact the same as address register.
\r
149 * | | |Note: The wake-up function can not set address mask.
\r
150 * @var UI2C_T::ADDRMSK1
\r
151 * Offset: 0x50 USCI Device Address Mask Register 1
\r
152 * ---------------------------------------------------------------------------------------------------
\r
153 * |Bits |Field |Descriptions
\r
154 * | :----: | :----: | :---- |
\r
155 * |[9:0] |ADDRMSK |USCI Device Address Mask
\r
156 * | | |0 = Mask Disabled (the received corresponding register bit should be exact the same as address register.).
\r
157 * | | |1 = Mask Enabled (the received corresponding address bit is don't care.).
\r
158 * | | |USCI support multiple address recognition with two address mask register
\r
159 * | | |When the bit in the address mask register is set to one, it means the received corresponding address bit is don't-care
\r
160 * | | |If the bit is set to zero, that means the received corresponding register bit should be exact the same as address register.
\r
161 * | | |Note: The wake-up function can not set address mask.
\r
162 * @var UI2C_T::WKCTL
\r
163 * Offset: 0x54 USCI Wake-up Control Register
\r
164 * ---------------------------------------------------------------------------------------------------
\r
165 * |Bits |Field |Descriptions
\r
166 * | :----: | :----: | :---- |
\r
167 * |[0] |WKEN |Wake-up Enable Bit
\r
168 * | | |0 = Wake-up function Disabled.
\r
169 * | | |1 = Wake-up function Enabled.
\r
170 * |[1] |WKADDREN |Wake-up Address Match Enable Bit
\r
171 * | | |0 = The chip is woken up according data toggle.
\r
172 * | | |1 = The chip is woken up according address match.
\r
173 * @var UI2C_T::WKSTS
\r
174 * Offset: 0x58 USCI Wake-up Status Register
\r
175 * ---------------------------------------------------------------------------------------------------
\r
176 * |Bits |Field |Descriptions
\r
177 * | :----: | :----: | :---- |
\r
178 * |[0] |WKF |Wake-up Flag
\r
179 * | | |When chip is woken up from Power-down mode, this bit is set to 1
\r
180 * | | |Software can write 1 to clear this bit.
\r
181 * @var UI2C_T::PROTCTL
\r
182 * Offset: 0x5C USCI Protocol Control Register
\r
183 * ---------------------------------------------------------------------------------------------------
\r
184 * |Bits |Field |Descriptions
\r
185 * | :----: | :----: | :---- |
\r
186 * |[0] |GCFUNC |General Call Function
\r
187 * | | |0 = General Call Function Disabled.
\r
188 * | | |1 = General Call Function Enabled.
\r
189 * |[1] |AA |Assert Acknowledge Control
\r
190 * | | |When AA =1 prior to address or data received, an acknowledged (low level to SDA) will be returned during the acknowledge clock pulse on the SCL line when 1.) A slave is acknowledging the address sent from master, 2.) The receiver devices are acknowledging the data sent by transmitter
\r
191 * | | |When AA=0 prior to address or data received, a Not acknowledged (high level to SDA) will be returned during the acknowledge clock pulse on the SCL line.
\r
192 * |[2] |STO |I2C STOP Control
\r
193 * | | |In Master mode, setting STO to transmit a STOP condition to bus then I2C hardware will check the bus condition if a STOP condition is detected this bit will be cleared by hardware automatically
\r
194 * | | |In a slave mode, setting STO resets I2C hardware to the defined not addressed slave mode when bus error (UI2C_PROTSTS.ERRIF = 1).
\r
195 * |[3] |STA |I2C START Control
\r
196 * | | |Setting STA to logic 1 to enter Master mode, the I2C hardware sends a START or repeat START condition to bus when the bus is free.
\r
197 * |[4] |ADDR10EN |Address 10-bit Function Enable Bit
\r
198 * | | |0 = Address match 10 bit function is disabled.
\r
199 * | | |1 = Address match 10 bit function is enabled.
\r
200 * |[5] |PTRG |I2C Protocol Trigger (Write Only)
\r
201 * | | |When a new state is present in the UI2C_PROTSTS register, if the related interrupt enable bits are set, the I2C interrupt is requested
\r
202 * | | |It must write one by software to this bit after the related interrupt flags are set to 1 and the I2C protocol function will go ahead until the STOP is active or the PROTEN is disabled.
\r
203 * | | |0 = I2C's stretch disabled and the I2C protocol function will go ahead.
\r
204 * | | |1 = I2C's stretch active.
\r
205 * |[8] |SCLOUTEN |SCL Output Enable Bit
\r
206 * | | |This bit enables monitor pulling SCL to low
\r
207 * | | |This monitor will pull SCL to low until it has had time to respond to an I2C interrupt.
\r
208 * | | |0 = SCL output will be forced high due to open drain mechanism.
\r
209 * | | |1 = I2C module may act as a slave peripheral just like in normal operation, the I2C holds the clock line low until it has had time to clear I2C interrupt.
\r
210 * |[9] |MONEN |Monitor Mode Enable Bit
\r
211 * | | |This bit enables monitor mode
\r
212 * | | |In monitor mode the SDA output will be put in high impedance mode
\r
213 * | | |This prevents the I2C module from outputting data of any kind (including ACK) onto the I2C data bus.
\r
214 * | | |0 = The monitor mode is disabled.
\r
215 * | | |1 = The monitor mode is enabled.
\r
216 * | | |Note: Depending on the state of the SCLOUTEN bit, the SCL output may be also forced high, preventing the module from having control over the I2C clock line.
\r
217 * |[25:16] |TOCNT |Time-out Clock Cycle
\r
218 * | | |This bit field indicates how many clock cycle selected by TMCNTSRC (UI2C_BRGEN [5]) when each interrupt flags are clear
\r
219 * | | |The time-out is enable when TOCNT bigger than 0.
\r
220 * | | |Note: The TMCNTSRC (UI2C_BRGEN [5]) must be set zero on I2C mode.
\r
221 * |[31] |PROTEN |I2C Protocol Enable Bit
\r
222 * | | |0 = I2C Protocol disable.
\r
223 * | | |1 = I2C Protocol enable.
\r
224 * @var UI2C_T::PROTIEN
\r
225 * Offset: 0x60 USCI Protocol Interrupt Enable Register
\r
226 * ---------------------------------------------------------------------------------------------------
\r
227 * |Bits |Field |Descriptions
\r
228 * | :----: | :----: | :---- |
\r
229 * |[0] |TOIEN |Time-out Interrupt Enable Control
\r
230 * | | |In I2C protocol, this bit enables the interrupt generation in case of a time-out event.
\r
231 * | | |0 = The time-out interrupt is disabled.
\r
232 * | | |1 = The time-out interrupt is enabled.
\r
233 * |[1] |STARIEN |Start Condition Received Interrupt Enable Control
\r
234 * | | |This bit enables the generation of a protocol interrupt if a start condition is detected.
\r
235 * | | |0 = The start condition interrupt is disabled.
\r
236 * | | |1 = The start condition interrupt is enabled.
\r
237 * |[2] |STORIEN |Stop Condition Received Interrupt Enable Control
\r
238 * | | |This bit enables the generation of a protocol interrupt if a stop condition is detected.
\r
239 * | | |0 = The stop condition interrupt is disabled.
\r
240 * | | |1 = The stop condition interrupt is enabled.
\r
241 * |[3] |NACKIEN |Non - Acknowledge Interrupt Enable Control
\r
242 * | | |This bit enables the generation of a protocol interrupt if a non - acknowledge is detected by a master.
\r
243 * | | |0 = The non - acknowledge interrupt is disabled.
\r
244 * | | |1 = The non - acknowledge interrupt is enabled.
\r
245 * |[4] |ARBLOIEN |Arbitration Lost Interrupt Enable Control
\r
246 * | | |This bit enables the generation of a protocol interrupt if an arbitration lost event is detected.
\r
247 * | | |0 = The arbitration lost interrupt is disabled.
\r
248 * | | |1 = The arbitration lost interrupt is enabled.
\r
249 * |[5] |ERRIEN |Error Interrupt Enable Control
\r
250 * | | |This bit enables the generation of a protocol interrupt if an I2C error condition is detected (indicated by ERR (UI2C_PROTSTS [16])).
\r
251 * | | |0 = The error interrupt is disabled.
\r
252 * | | |1 = The error interrupt is enabled.
\r
253 * |[6] |ACKIEN |Acknowledge Interrupt Enable Control
\r
254 * | | |This bit enables the generation of a protocol interrupt if an acknowledge is detected by a master.
\r
255 * | | |0 = The acknowledge interrupt is disabled.
\r
256 * | | |1 = The acknowledge interrupt is enabled.
\r
257 * @var UI2C_T::PROTSTS
\r
258 * Offset: 0x64 USCI Protocol Status Register
\r
259 * ---------------------------------------------------------------------------------------------------
\r
260 * |Bits |Field |Descriptions
\r
261 * | :----: | :----: | :---- |
\r
262 * |[5] |TOIF |Time-out Interrupt Flag
\r
263 * | | |0 = A time-out interrupt status has not occurred.
\r
264 * | | |1 = A time-out interrupt status has occurred.
\r
265 * | | |Note: It is cleared by software writing one into this bit
\r
266 * |[6] |ONBUSY |On Bus Busy
\r
267 * | | |Indicates that a communication is in progress on the bus
\r
268 * | | |It is set by hardware when a START condition is detected
\r
269 * | | |It is cleared by hardware when a STOP condition is detected
\r
270 * | | |0 = The bus is IDLE (both SCLK and SDA High).
\r
271 * | | |1 = The bus is busy.
\r
272 * |[8] |STARIF |Start Condition Received Interrupt Flag
\r
273 * | | |This bit indicates that a start condition or repeated start condition has been detected on master mode
\r
274 * | | |However, this bit also indicates that a repeated start condition has been detected on slave mode.
\r
275 * | | |A protocol interrupt can be generated if UI2C_PROTCTL.STARIEN = 1.
\r
276 * | | |0 = A start condition has not yet been detected.
\r
277 * | | |1 = A start condition has been detected.
\r
278 * | | |It is cleared by software writing one into this bit
\r
279 * |[9] |STORIF |Stop Condition Received Interrupt Flag
\r
280 * | | |This bit indicates that a stop condition has been detected on the I2C bus lines
\r
281 * | | |A protocol interrupt can be generated if UI2C_PROTCTL.STORIEN = 1.
\r
282 * | | |0 = A stop condition has not yet been detected.
\r
283 * | | |1 = A stop condition has been detected.
\r
284 * | | |It is cleared by software writing one into this bit
\r
285 * | | |Note: This bit is set when slave RX mode.
\r
286 * |[10] |NACKIF |Non - Acknowledge Received Interrupt Flag
\r
287 * | | |This bit indicates that a non - acknowledge has been received in master mode
\r
288 * | | |A protocol interrupt can be generated if UI2C_PROTCTL.NACKIEN = 1.
\r
289 * | | |0 = A non - acknowledge has not been received.
\r
290 * | | |1 = A non - acknowledge has been received.
\r
291 * | | |It is cleared by software writing one into this bit
\r
292 * |[11] |ARBLOIF |Arbitration Lost Interrupt Flag
\r
293 * | | |This bit indicates that an arbitration has been lost
\r
294 * | | |A protocol interrupt can be generated if UI2C_PROTCTL.ARBLOIEN = 1.
\r
295 * | | |0 = An arbitration has not been lost.
\r
296 * | | |1 = An arbitration has been lost.
\r
297 * | | |It is cleared by software writing one into this bit
\r
298 * |[12] |ERRIF |Error Interrupt Flag
\r
299 * | | |This bit indicates that a Bus Error occurs when a START or STOP condition is present at an illegal position in the formation frame
\r
300 * | | |Example of illegal position are during the serial transfer of an address byte, a data byte or an acknowledge bit
\r
301 * | | |A protocol interrupt can be generated if UI2C_PROTCTL.ERRIEN = 1.
\r
302 * | | |0 = An I2C error has not been detected.
\r
303 * | | |1 = An I2C error has been detected.
\r
304 * | | |It is cleared by software writing one into this bit
\r
305 * | | |Note: This bit is set when slave mode, user must write one into STO register to the defined not addressed slave mode.
\r
306 * |[13] |ACKIF |Acknowledge Received Interrupt Flag
\r
307 * | | |This bit indicates that an acknowledge has been received in master mode
\r
308 * | | |A protocol interrupt can be generated if UI2C_PROTCTL.ACKIEN = 1.
\r
309 * | | |0 = An acknowledge has not been received.
\r
310 * | | |1 = An acknowledge has been received.
\r
311 * | | |It is cleared by software writing one into this bit
\r
312 * |[14] |SLASEL |Slave Select Status
\r
313 * | | |This bit indicates that this device has been selected as slave.
\r
314 * | | |0 = The device is not selected as slave.
\r
315 * | | |1 = The device is selected as slave.
\r
316 * | | |Note: This bit has no interrupt signal, and it will be cleared automatically by hardware.
\r
317 * |[15] |SLAREAD |Slave Read Request Status
\r
318 * | | |This bit indicates that a slave read request has been detected.
\r
319 * | | |0 = A slave R/W bit is 1 has not been detected.
\r
320 * | | |1 = A slave R/W bit is 1 has been detected.
\r
321 * | | |Note: This bit has no interrupt signal, and it will be cleared automatically by hardware.
\r
322 * |[16] |WKAKDONE |Wakeup Address Frame Acknowledge Bit Done
\r
323 * | | |0 = The ACK bit cycle of address match frame isn't done.
\r
324 * | | |1 = The ACK bit cycle of address match frame is done in power-down.
\r
325 * | | |Note: This bit can't release when WKUPIF is set.
\r
326 * |[17] |WRSTSWK |Read/Write Status Bit in Address Wakeup Frame
\r
327 * | | |0 = Write command be record on the address match wakeup frame.
\r
328 * | | |1 = Read command be record on the address match wakeup frame.
\r
329 * |[18] |BUSHANG |Bus Hang-up
\r
330 * | | |This bit indicates bus hang-up status
\r
331 * | | |There is 4-bit counter count when SCL hold high and refer fSAMP_CLK
\r
332 * | | |The hang-up counter will count to overflow and set this bit when SDA is low
\r
333 * | | |The counter will be reset by falling edge of SCL signal.
\r
334 * | | |0 = The bus is normal status for transmission.
\r
335 * | | |1 = The bus is hang-up status for transmission.
\r
336 * | | |Note: This bit has no interrupt signal, and it will be cleared automatically by hardware when a START condition is present.
\r
337 * |[19] |ERRARBLO |Error Arbitration Lost
\r
338 * | | |This bit indicates bus arbitration lost due to bigger noise which is can't be filtered by input processor
\r
339 * | | |The I2C can send start condition when ERRARBLO is set
\r
340 * | | |Thus this bit doesn't be cared on slave mode.
\r
341 * | | |0 = The bus is normal status for transmission.
\r
342 * | | |1 = The bus is error arbitration lost status for transmission.
\r
343 * | | |Note: This bit has no interrupt signal, and it will be cleared automatically by hardware when a START condition is present.
\r
344 * @var UI2C_T::ADMAT
\r
345 * Offset: 0x88 I2C Slave Match Address Register
\r
346 * ---------------------------------------------------------------------------------------------------
\r
347 * |Bits |Field |Descriptions
\r
348 * | :----: | :----: | :---- |
\r
349 * |[0] |ADMAT0 |USCI Address 0 Match Status Register
\r
350 * | | |When address 0 is matched, hardware will inform which address used
\r
351 * | | |This bit will set to 1, and software can write 1 to clear this bit.
\r
352 * |[1] |ADMAT1 |USCI Address 1 Match Status Register
\r
353 * | | |When address 1 is matched, hardware will inform which address used
\r
354 * | | |This bit will set to 1, and software can write 1 to clear this bit.
\r
355 * @var UI2C_T::TMCTL
\r
356 * Offset: 0x8C I2C Timing Configure Control Register
\r
357 * ---------------------------------------------------------------------------------------------------
\r
358 * |Bits |Field |Descriptions
\r
359 * | :----: | :----: | :---- |
\r
360 * |[8:0] |STCTL |Setup Time Configure Control Register
\r
361 * | | |This field is used to generate a delay timing between SDA edge and SCL rising edge in transmission mode..
\r
362 * | | |The delay setup time is numbers of peripheral clock = STCTL x fPCLK.
\r
363 * |[24:16] |HTCTL |Hold Time Configure Control Register
\r
364 * | | |This field is used to generate the delay timing between SCL falling edge SDA edge in
\r
365 * | | |transmission mode.
\r
366 * | | |The delay hold time is numbers of peripheral clock = HTCTL x fPCLK.
\r
368 __IO uint32_t CTL; /*!< [0x0000] USCI Control Register */
\r
369 __I uint32_t RESERVE0[1];
\r
370 __IO uint32_t BRGEN; /*!< [0x0008] USCI Baud Rate Generator Register */
\r
371 __I uint32_t RESERVE1[8];
\r
372 __IO uint32_t LINECTL; /*!< [0x002c] USCI Line Control Register */
\r
373 __O uint32_t TXDAT; /*!< [0x0030] USCI Transmit Data Register */
\r
374 __I uint32_t RXDAT; /*!< [0x0034] USCI Receive Data Register */
\r
375 __I uint32_t RESERVE2[3];
\r
376 __IO uint32_t DEVADDR0; /*!< [0x0044] USCI Device Address Register 0 */
\r
377 __IO uint32_t DEVADDR1; /*!< [0x0048] USCI Device Address Register 1 */
\r
378 __IO uint32_t ADDRMSK0; /*!< [0x004c] USCI Device Address Mask Register 0 */
\r
379 __IO uint32_t ADDRMSK1; /*!< [0x0050] USCI Device Address Mask Register 1 */
\r
380 __IO uint32_t WKCTL; /*!< [0x0054] USCI Wake-up Control Register */
\r
381 __IO uint32_t WKSTS; /*!< [0x0058] USCI Wake-up Status Register */
\r
382 __IO uint32_t PROTCTL; /*!< [0x005c] USCI Protocol Control Register */
\r
383 __IO uint32_t PROTIEN; /*!< [0x0060] USCI Protocol Interrupt Enable Register */
\r
384 __IO uint32_t PROTSTS; /*!< [0x0064] USCI Protocol Status Register */
\r
385 __I uint32_t RESERVE3[8];
\r
386 __IO uint32_t ADMAT; /*!< [0x0088] I2C Slave Match Address Register */
\r
387 __IO uint32_t TMCTL; /*!< [0x008c] I2C Timing Configure Control Register */
\r
392 @addtogroup UI2C_CONST UI2C Bit Field Definition
\r
393 Constant Definitions for UI2C Controller
\r
396 #define UI2C_CTL_FUNMODE_Pos (0) /*!< UI2C_T::CTL: FUNMODE Position */
\r
397 #define UI2C_CTL_FUNMODE_Msk (0x7ul << UI2C_CTL_FUNMODE_Pos) /*!< UI2C_T::CTL: FUNMODE Mask */
\r
399 #define UI2C_BRGEN_RCLKSEL_Pos (0) /*!< UI2C_T::BRGEN: RCLKSEL Position */
\r
400 #define UI2C_BRGEN_RCLKSEL_Msk (0x1ul << UI2C_BRGEN_RCLKSEL_Pos) /*!< UI2C_T::BRGEN: RCLKSEL Mask */
\r
402 #define UI2C_BRGEN_PTCLKSEL_Pos (1) /*!< UI2C_T::BRGEN: PTCLKSEL Position */
\r
403 #define UI2C_BRGEN_PTCLKSEL_Msk (0x1ul << UI2C_BRGEN_PTCLKSEL_Pos) /*!< UI2C_T::BRGEN: PTCLKSEL Mask */
\r
405 #define UI2C_BRGEN_SPCLKSEL_Pos (2) /*!< UI2C_T::BRGEN: SPCLKSEL Position */
\r
406 #define UI2C_BRGEN_SPCLKSEL_Msk (0x3ul << UI2C_BRGEN_SPCLKSEL_Pos) /*!< UI2C_T::BRGEN: SPCLKSEL Mask */
\r
408 #define UI2C_BRGEN_TMCNTEN_Pos (4) /*!< UI2C_T::BRGEN: TMCNTEN Position */
\r
409 #define UI2C_BRGEN_TMCNTEN_Msk (0x1ul << UI2C_BRGEN_TMCNTEN_Pos) /*!< UI2C_T::BRGEN: TMCNTEN Mask */
\r
411 #define UI2C_BRGEN_TMCNTSRC_Pos (5) /*!< UI2C_T::BRGEN: TMCNTSRC Position */
\r
412 #define UI2C_BRGEN_TMCNTSRC_Msk (0x1ul << UI2C_BRGEN_TMCNTSRC_Pos) /*!< UI2C_T::BRGEN: TMCNTSRC Mask */
\r
414 #define UI2C_BRGEN_PDSCNT_Pos (8) /*!< UI2C_T::BRGEN: PDSCNT Position */
\r
415 #define UI2C_BRGEN_PDSCNT_Msk (0x3ul << UI2C_BRGEN_PDSCNT_Pos) /*!< UI2C_T::BRGEN: PDSCNT Mask */
\r
417 #define UI2C_BRGEN_DSCNT_Pos (10) /*!< UI2C_T::BRGEN: DSCNT Position */
\r
418 #define UI2C_BRGEN_DSCNT_Msk (0x1ful << UI2C_BRGEN_DSCNT_Pos) /*!< UI2C_T::BRGEN: DSCNT Mask */
\r
420 #define UI2C_BRGEN_CLKDIV_Pos (16) /*!< UI2C_T::BRGEN: CLKDIV Position */
\r
421 #define UI2C_BRGEN_CLKDIV_Msk (0x3fful << UI2C_BRGEN_CLKDIV_Pos) /*!< UI2C_T::BRGEN: CLKDIV Mask */
\r
423 #define UI2C_LINECTL_LSB_Pos (0) /*!< UI2C_T::LINECTL: LSB Position */
\r
424 #define UI2C_LINECTL_LSB_Msk (0x1ul << UI2C_LINECTL_LSB_Pos) /*!< UI2C_T::LINECTL: LSB Mask */
\r
426 #define UI2C_LINECTL_DWIDTH_Pos (8) /*!< UI2C_T::LINECTL: DWIDTH Position */
\r
427 #define UI2C_LINECTL_DWIDTH_Msk (0xful << UI2C_LINECTL_DWIDTH_Pos) /*!< UI2C_T::LINECTL: DWIDTH Mask */
\r
429 #define UI2C_TXDAT_TXDAT_Pos (0) /*!< UI2C_T::TXDAT: TXDAT Position */
\r
430 #define UI2C_TXDAT_TXDAT_Msk (0xfffful << UI2C_TXDAT_TXDAT_Pos) /*!< UI2C_T::TXDAT: TXDAT Mask */
\r
432 #define UI2C_RXDAT_RXDAT_Pos (0) /*!< UI2C_T::RXDAT: RXDAT Position */
\r
433 #define UI2C_RXDAT_RXDAT_Msk (0xfffful << UI2C_RXDAT_RXDAT_Pos) /*!< UI2C_T::RXDAT: RXDAT Mask */
\r
435 #define UI2C_DEVADDR0_DEVADDR_Pos (0) /*!< UI2C_T::DEVADDR0: DEVADDR Position */
\r
436 #define UI2C_DEVADDR0_DEVADDR_Msk (0x3fful << UI2C_DEVADDR0_DEVADDR_Pos) /*!< UI2C_T::DEVADDR0: DEVADDR Mask */
\r
438 #define UI2C_DEVADDR1_DEVADDR_Pos (0) /*!< UI2C_T::DEVADDR1: DEVADDR Position */
\r
439 #define UI2C_DEVADDR1_DEVADDR_Msk (0x3fful << UI2C_DEVADDR1_DEVADDR_Pos) /*!< UI2C_T::DEVADDR1: DEVADDR Mask */
\r
441 #define UI2C_ADDRMSK0_ADDRMSK_Pos (0) /*!< UI2C_T::ADDRMSK0: ADDRMSK Position */
\r
442 #define UI2C_ADDRMSK0_ADDRMSK_Msk (0x3fful << UI2C_ADDRMSK0_ADDRMSK_Pos) /*!< UI2C_T::ADDRMSK0: ADDRMSK Mask */
\r
444 #define UI2C_ADDRMSK1_ADDRMSK_Pos (0) /*!< UI2C_T::ADDRMSK1: ADDRMSK Position */
\r
445 #define UI2C_ADDRMSK1_ADDRMSK_Msk (0x3fful << UI2C_ADDRMSK1_ADDRMSK_Pos) /*!< UI2C_T::ADDRMSK1: ADDRMSK Mask */
\r
447 #define UI2C_WKCTL_WKEN_Pos (0) /*!< UI2C_T::WKCTL: WKEN Position */
\r
448 #define UI2C_WKCTL_WKEN_Msk (0x1ul << UI2C_WKCTL_WKEN_Pos) /*!< UI2C_T::WKCTL: WKEN Mask */
\r
450 #define UI2C_WKCTL_WKADDREN_Pos (1) /*!< UI2C_T::WKCTL: WKADDREN Position */
\r
451 #define UI2C_WKCTL_WKADDREN_Msk (0x1ul << UI2C_WKCTL_WKADDREN_Pos) /*!< UI2C_T::WKCTL: WKADDREN Mask */
\r
453 #define UI2C_WKSTS_WKF_Pos (0) /*!< UI2C_T::WKSTS: WKF Position */
\r
454 #define UI2C_WKSTS_WKF_Msk (0x1ul << UI2C_WKSTS_WKF_Pos) /*!< UI2C_T::WKSTS: WKF Mask */
\r
456 #define UI2C_PROTCTL_GCFUNC_Pos (0) /*!< UI2C_T::PROTCTL: GCFUNC Position */
\r
457 #define UI2C_PROTCTL_GCFUNC_Msk (0x1ul << UI2C_PROTCTL_GCFUNC_Pos) /*!< UI2C_T::PROTCTL: GCFUNC Mask */
\r
459 #define UI2C_PROTCTL_AA_Pos (1) /*!< UI2C_T::PROTCTL: AA Position */
\r
460 #define UI2C_PROTCTL_AA_Msk (0x1ul << UI2C_PROTCTL_AA_Pos) /*!< UI2C_T::PROTCTL: AA Mask */
\r
462 #define UI2C_PROTCTL_STO_Pos (2) /*!< UI2C_T::PROTCTL: STO Position */
\r
463 #define UI2C_PROTCTL_STO_Msk (0x1ul << UI2C_PROTCTL_STO_Pos) /*!< UI2C_T::PROTCTL: STO Mask */
\r
465 #define UI2C_PROTCTL_STA_Pos (3) /*!< UI2C_T::PROTCTL: STA Position */
\r
466 #define UI2C_PROTCTL_STA_Msk (0x1ul << UI2C_PROTCTL_STA_Pos) /*!< UI2C_T::PROTCTL: STA Mask */
\r
468 #define UI2C_PROTCTL_ADDR10EN_Pos (4) /*!< UI2C_T::PROTCTL: ADDR10EN Position */
\r
469 #define UI2C_PROTCTL_ADDR10EN_Msk (0x1ul << UI2C_PROTCTL_ADDR10EN_Pos) /*!< UI2C_T::PROTCTL: ADDR10EN Mask */
\r
471 #define UI2C_PROTCTL_PTRG_Pos (5) /*!< UI2C_T::PROTCTL: PTRG Position */
\r
472 #define UI2C_PROTCTL_PTRG_Msk (0x1ul << UI2C_PROTCTL_PTRG_Pos) /*!< UI2C_T::PROTCTL: PTRG Mask */
\r
474 #define UI2C_PROTCTL_SCLOUTEN_Pos (8) /*!< UI2C_T::PROTCTL: SCLOUTEN Position */
\r
475 #define UI2C_PROTCTL_SCLOUTEN_Msk (0x1ul << UI2C_PROTCTL_SCLOUTEN_Pos) /*!< UI2C_T::PROTCTL: SCLOUTEN Mask */
\r
477 #define UI2C_PROTCTL_MONEN_Pos (9) /*!< UI2C_T::PROTCTL: MONEN Position */
\r
478 #define UI2C_PROTCTL_MONEN_Msk (0x1ul << UI2C_PROTCTL_MONEN_Pos) /*!< UI2C_T::PROTCTL: MONEN Mask */
\r
480 #define UI2C_PROTCTL_TOCNT_Pos (16) /*!< UI2C_T::PROTCTL: TOCNT Position */
\r
481 #define UI2C_PROTCTL_TOCNT_Msk (0x3fful << UI2C_PROTCTL_TOCNT_Pos) /*!< UI2C_T::PROTCTL: TOCNT Mask */
\r
483 #define UI2C_PROTCTL_PROTEN_Pos (31) /*!< UI2C_T::PROTCTL: PROTEN Position */
\r
484 #define UI2C_PROTCTL_PROTEN_Msk (0x1ul << UI2C_PROTCTL_PROTEN_Pos) /*!< UI2C_T::PROTCTL: PROTEN Mask */
\r
486 #define UI2C_PROTIEN_TOIEN_Pos (0) /*!< UI2C_T::PROTIEN: TOIEN Position */
\r
487 #define UI2C_PROTIEN_TOIEN_Msk (0x1ul << UI2C_PROTIEN_TOIEN_Pos) /*!< UI2C_T::PROTIEN: TOIEN Mask */
\r
489 #define UI2C_PROTIEN_STARIEN_Pos (1) /*!< UI2C_T::PROTIEN: STARIEN Position */
\r
490 #define UI2C_PROTIEN_STARIEN_Msk (0x1ul << UI2C_PROTIEN_STARIEN_Pos) /*!< UI2C_T::PROTIEN: STARIEN Mask */
\r
492 #define UI2C_PROTIEN_STORIEN_Pos (2) /*!< UI2C_T::PROTIEN: STORIEN Position */
\r
493 #define UI2C_PROTIEN_STORIEN_Msk (0x1ul << UI2C_PROTIEN_STORIEN_Pos) /*!< UI2C_T::PROTIEN: STORIEN Mask */
\r
495 #define UI2C_PROTIEN_NACKIEN_Pos (3) /*!< UI2C_T::PROTIEN: NACKIEN Position */
\r
496 #define UI2C_PROTIEN_NACKIEN_Msk (0x1ul << UI2C_PROTIEN_NACKIEN_Pos) /*!< UI2C_T::PROTIEN: NACKIEN Mask */
\r
498 #define UI2C_PROTIEN_ARBLOIEN_Pos (4) /*!< UI2C_T::PROTIEN: ARBLOIEN Position */
\r
499 #define UI2C_PROTIEN_ARBLOIEN_Msk (0x1ul << UI2C_PROTIEN_ARBLOIEN_Pos) /*!< UI2C_T::PROTIEN: ARBLOIEN Mask */
\r
501 #define UI2C_PROTIEN_ERRIEN_Pos (5) /*!< UI2C_T::PROTIEN: ERRIEN Position */
\r
502 #define UI2C_PROTIEN_ERRIEN_Msk (0x1ul << UI2C_PROTIEN_ERRIEN_Pos) /*!< UI2C_T::PROTIEN: ERRIEN Mask */
\r
504 #define UI2C_PROTIEN_ACKIEN_Pos (6) /*!< UI2C_T::PROTIEN: ACKIEN Position */
\r
505 #define UI2C_PROTIEN_ACKIEN_Msk (0x1ul << UI2C_PROTIEN_ACKIEN_Pos) /*!< UI2C_T::PROTIEN: ACKIEN Mask */
\r
507 #define UI2C_PROTSTS_TOIF_Pos (5) /*!< UI2C_T::PROTSTS: TOIF Position */
\r
508 #define UI2C_PROTSTS_TOIF_Msk (0x1ul << UI2C_PROTSTS_TOIF_Pos) /*!< UI2C_T::PROTSTS: TOIF Mask */
\r
510 #define UI2C_PROTSTS_ONBUSY_Pos (6) /*!< UI2C_T::PROTSTS: ONBUSY Position */
\r
511 #define UI2C_PROTSTS_ONBUSY_Msk (0x1ul << UI2C_PROTSTS_ONBUSY_Pos) /*!< UI2C_T::PROTSTS: ONBUSY Mask */
\r
513 #define UI2C_PROTSTS_STARIF_Pos (8) /*!< UI2C_T::PROTSTS: STARIF Position */
\r
514 #define UI2C_PROTSTS_STARIF_Msk (0x1ul << UI2C_PROTSTS_STARIF_Pos) /*!< UI2C_T::PROTSTS: STARIF Mask */
\r
516 #define UI2C_PROTSTS_STORIF_Pos (9) /*!< UI2C_T::PROTSTS: STORIF Position */
\r
517 #define UI2C_PROTSTS_STORIF_Msk (0x1ul << UI2C_PROTSTS_STORIF_Pos) /*!< UI2C_T::PROTSTS: STORIF Mask */
\r
519 #define UI2C_PROTSTS_NACKIF_Pos (10) /*!< UI2C_T::PROTSTS: NACKIF Position */
\r
520 #define UI2C_PROTSTS_NACKIF_Msk (0x1ul << UI2C_PROTSTS_NACKIF_Pos) /*!< UI2C_T::PROTSTS: NACKIF Mask */
\r
522 #define UI2C_PROTSTS_ARBLOIF_Pos (11) /*!< UI2C_T::PROTSTS: ARBLOIF Position */
\r
523 #define UI2C_PROTSTS_ARBLOIF_Msk (0x1ul << UI2C_PROTSTS_ARBLOIF_Pos) /*!< UI2C_T::PROTSTS: ARBLOIF Mask */
\r
525 #define UI2C_PROTSTS_ERRIF_Pos (12) /*!< UI2C_T::PROTSTS: ERRIF Position */
\r
526 #define UI2C_PROTSTS_ERRIF_Msk (0x1ul << UI2C_PROTSTS_ERRIF_Pos) /*!< UI2C_T::PROTSTS: ERRIF Mask */
\r
528 #define UI2C_PROTSTS_ACKIF_Pos (13) /*!< UI2C_T::PROTSTS: ACKIF Position */
\r
529 #define UI2C_PROTSTS_ACKIF_Msk (0x1ul << UI2C_PROTSTS_ACKIF_Pos) /*!< UI2C_T::PROTSTS: ACKIF Mask */
\r
531 #define UI2C_PROTSTS_SLASEL_Pos (14) /*!< UI2C_T::PROTSTS: SLASEL Position */
\r
532 #define UI2C_PROTSTS_SLASEL_Msk (0x1ul << UI2C_PROTSTS_SLASEL_Pos) /*!< UI2C_T::PROTSTS: SLASEL Mask */
\r
534 #define UI2C_PROTSTS_SLAREAD_Pos (15) /*!< UI2C_T::PROTSTS: SLAREAD Position */
\r
535 #define UI2C_PROTSTS_SLAREAD_Msk (0x1ul << UI2C_PROTSTS_SLAREAD_Pos) /*!< UI2C_T::PROTSTS: SLAREAD Mask */
\r
537 #define UI2C_PROTSTS_WKAKDONE_Pos (16) /*!< UI2C_T::PROTSTS: WKAKDONE Position */
\r
538 #define UI2C_PROTSTS_WKAKDONE_Msk (0x1ul << UI2C_PROTSTS_WKAKDONE_Pos) /*!< UI2C_T::PROTSTS: WKAKDONE Mask */
\r
540 #define UI2C_PROTSTS_WRSTSWK_Pos (17) /*!< UI2C_T::PROTSTS: WRSTSWK Position */
\r
541 #define UI2C_PROTSTS_WRSTSWK_Msk (0x1ul << UI2C_PROTSTS_WRSTSWK_Pos) /*!< UI2C_T::PROTSTS: WRSTSWK Mask */
\r
543 #define UI2C_PROTSTS_BUSHANG_Pos (18) /*!< UI2C_T::PROTSTS: BUSHANG Position */
\r
544 #define UI2C_PROTSTS_BUSHANG_Msk (0x1ul << UI2C_PROTSTS_BUSHANG_Pos) /*!< UI2C_T::PROTSTS: BUSHANG Mask */
\r
546 #define UI2C_PROTSTS_ERRARBLO_Pos (19) /*!< UI2C_T::PROTSTS: ERRARBLO Position */
\r
547 #define UI2C_PROTSTS_ERRARBLO_Msk (0x1ul << UI2C_PROTSTS_ERRARBLO_Pos) /*!< UI2C_T::PROTSTS: ERRARBLO Mask */
\r
549 #define UI2C_ADMAT_ADMAT0_Pos (0) /*!< UI2C_T::ADMAT: ADMAT0 Position */
\r
550 #define UI2C_ADMAT_ADMAT0_Msk (0x1ul << UI2C_ADMAT_ADMAT0_Pos) /*!< UI2C_T::ADMAT: ADMAT0 Mask */
\r
552 #define UI2C_ADMAT_ADMAT1_Pos (1) /*!< UI2C_T::ADMAT: ADMAT1 Position */
\r
553 #define UI2C_ADMAT_ADMAT1_Msk (0x1ul << UI2C_ADMAT_ADMAT1_Pos) /*!< UI2C_T::ADMAT: ADMAT1 Mask */
\r
555 #define UI2C_TMCTL_STCTL_Pos (0) /*!< UI2C_T::TMCTL: STCTL Position */
\r
556 #define UI2C_TMCTL_STCTL_Msk (0x1fful << UI2C_TMCTL_STCTL_Pos) /*!< UI2C_T::TMCTL: STCTL Mask */
\r
558 #define UI2C_TMCTL_HTCTL_Pos (16) /*!< UI2C_T::TMCTL: HTCTL Position */
\r
559 #define UI2C_TMCTL_HTCTL_Msk (0x1fful << UI2C_TMCTL_HTCTL_Pos) /*!< UI2C_T::TMCTL: HTCTL Mask */
\r
561 /**@}*/ /* UI2C_CONST */
\r
562 /**@}*/ /* end of UI2C register group */
\r
563 /**@}*/ /* end of REGISTER group */
\r
565 #endif /* __UI2C_REG_H__ */
\r