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