1 /****************************************************************************//**
2  * @file     lpi2c.h
3  * @version  V1.00
4  * @brief    M2L31 series LPI2C driver header file
5  *
6  * SPDX-License-Identifier: Apache-2.0
7  * @copyright (C) 2023 Nuvoton Technology Corp. All rights reserved.
8 *****************************************************************************/
9 #ifndef __LPI2C_H__
10 #define __LPI2C_H__
11 
12 #ifdef __cplusplus
13 extern "C"
14 {
15 #endif
16 
17 
18 /** @addtogroup Standard_Driver Standard Driver
19   @{
20 */
21 
22 /** @addtogroup LPI2C_Driver LPI2C Driver
23   @{
24 */
25 
26 /** @addtogroup LPI2C_EXPORTED_CONSTANTS LPI2C Exported Constants
27   @{
28 */
29 
30 #define LPI2C_TIMEOUT_ERR    (-1L)          /*!< LPI2C operation abort due to timeout error \hideinitializer */
31 
32 /*---------------------------------------------------------------------------------------------------------*/
33 /*  LPI2C_CTL constant definitions.                                                                        */
34 /*---------------------------------------------------------------------------------------------------------*/
35 #define LPI2C_CTL_STA_SI            0x28UL /*!< LPI2C_CTL setting for LPI2C control bits. It would set STA and SI bits          \hideinitializer */
36 #define LPI2C_CTL_STA_SI_AA         0x2CUL /*!< LPI2C_CTL setting for LPI2C control bits. It would set STA, SI and AA bits      \hideinitializer */
37 #define LPI2C_CTL_STO_SI            0x18UL /*!< LPI2C_CTL setting for LPI2C control bits. It would set STO and SI bits          \hideinitializer */
38 #define LPI2C_CTL_STO_SI_AA         0x1CUL /*!< LPI2C_CTL setting for LPI2C control bits. It would set STO, SI and AA bits      \hideinitializer */
39 #define LPI2C_CTL_SI                0x08UL /*!< LPI2C_CTL setting for LPI2C control bits. It would set SI bit                   \hideinitializer */
40 #define LPI2C_CTL_SI_AA             0x0CUL /*!< LPI2C_CTL setting for LPI2C control bits. It would set SI and AA bits           \hideinitializer */
41 #define LPI2C_CTL_STA               0x20UL /*!< LPI2C_CTL setting for LPI2C control bits. It would set STA bit                  \hideinitializer */
42 #define LPI2C_CTL_STO               0x10UL /*!< LPI2C_CTL setting for LPI2C control bits. It would set STO bit                  \hideinitializer */
43 #define LPI2C_CTL_AA                0x04UL /*!< LPI2C_CTL setting for LPI2C control bits. It would set AA bit                   \hideinitializer */
44 
45 /*---------------------------------------------------------------------------------------------------------*/
46 /*  LPI2C GCMode constant definitions.                                                                     */
47 /*---------------------------------------------------------------------------------------------------------*/
48 #define LPI2C_GCMODE_ENABLE           1    /*!< Enable  LPI2C GC Mode                                                         \hideinitializer */
49 #define LPI2C_GCMODE_DISABLE          0    /*!< Disable LPI2C GC Mode                                                         \hideinitializer */
50 
51 /*---------------------------------------------------------------------------------------------------------*/
52 /*  LPI2C AUTOMode constant definitions.                                                                   */
53 /*---------------------------------------------------------------------------------------------------------*/
54 #define LPI2C_AUTO_TXPDMA           (1UL << LPI2C_AUTOCTL_AUTOMODE_Pos)    /*!< LPI2C working in auto TXPDMA mode                                         \hideinitializer */
55 #define LPI2C_AUTO_RXPDMA           (2UL << LPI2C_AUTOCTL_AUTOMODE_Pos)    /*!< LPI2C working in auto RXPDMA mode                                         \hideinitializer */
56 #define LPI2C_RANDOM_REPEAT_STA     (3UL << LPI2C_AUTOCTL_AUTOMODE_Pos)    /*!< LPI2C working in random read mode, repeat start between TX/RX             \hideinitializer */
57 #define LPI2C_RANDOM_STO_STA        (4UL << LPI2C_AUTOCTL_AUTOMODE_Pos)    /*!< LPI2C working in random read mode, stop and start between TX/RX           \hideinitializer */
58 
59 /*---------------------------------------------------------------------------------------------------------*/
60 /*  LPI2C trigger source constant definitions.                                                             */
61 /*---------------------------------------------------------------------------------------------------------*/
62 #define LPI2C_TRGSRC_LPTMR0         0UL    /*!< LPI2C Auto-operation trigger source from LPTMR0                               \hideinitializer */
63 #define LPI2C_TRGSRC_LPTMR1         1UL    /*!< LPI2C Auto-operation trigger source from LPTMR1                               \hideinitializer */
64 #define LPI2C_TRGSRC_TTMR0          2UL    /*!< LPI2C Auto-operation trigger source from TTMR0                                \hideinitializer */
65 #define LPI2C_TRGSRC_TTMR1          3UL    /*!< LPI2C Auto-operation trigger source from TTMR1                                \hideinitializer */
66 #define LPI2C_TRGSRC_WKIOA0         4UL    /*!< LPI2C Auto-operation trigger source from WKIOA0                               \hideinitializer */
67 #define LPI2C_TRGSRC_WKIOB0         5UL    /*!< LPI2C Auto-operation trigger source from WKIOB0                               \hideinitializer */
68 #define LPI2C_TRGSRC_WKIOC0         6UL    /*!< LPI2C Auto-operation trigger source from WKIOC0                               \hideinitializer */
69 #define LPI2C_TRGSRC_WKIOD0         7UL    /*!< LPI2C Auto-operation trigger source from WKIOD0                               \hideinitializer */
70 #define LPI2C_TRGSRC_SWTRG          8UL    /*!< LPI2C Auto-operation trigger source from SWTRG                                \hideinitializer */
71 
72 /*@}*/ /* end of group LPI2C_EXPORTED_CONSTANTS */
73 
74 extern int32_t g_LPI2C_i32ErrCode;
75 
76 /** @addtogroup LPI2C_EXPORTED_FUNCTIONS LPI2C Exported Functions
77   @{
78 */
79 /**
80  *    @brief        The macro is used to set LPI2C bus condition at One Time
81  *
82  *    @param[in]    lpi2c        Specify LPI2C port
83  *    @param[in]    u8Ctrl     A byte writes to LPI2C control register
84  *
85  *    @return       None
86  *
87  *    @details      Set LPI2C_CTL register to control LPI2C bus conditions of START, STOP, SI, ACK.
88  *    \hideinitializer
89  */
90 #define LPI2C_SET_CONTROL_REG(lpi2c, u8Ctrl) ((lpi2c)->CTL0 = ((lpi2c)->CTL0 & ~0x3C) | (u8Ctrl))
91 
92 /**
93  *    @brief        The macro is used to set START condition of LPI2C Bus
94  *
95  *    @param[in]    lpi2c        Specify LPI2C port
96  *
97  *    @return       None
98  *
99  *    @details      Set the LPI2C bus START condition in LPI2C_CTL register.
100  *    \hideinitializer
101  */
102 #define LPI2C_START(lpi2c)  ((lpi2c)->CTL0 = ((lpi2c)->CTL0 | LPI2C_CTL0_SI_Msk) | LPI2C_CTL0_STA_Msk)
103 
104 /**
105  *    @brief        The macro is used to wait LPI2C bus status get ready
106  *
107  *    @param[in]    lpi2c        Specify LPI2C port
108  *
109  *    @return       None
110  *
111  *    @details      When a new status is presented of LPI2C bus, the SI flag will be set in LPI2C_CTL register.
112  *    \hideinitializer
113  */
114 #define LPI2C_WAIT_READY(lpi2c)     while(!((lpi2c)->CTL0 & LPI2C_CTL0_SI_Msk))
115 
116 /**
117  *    @brief        The macro is used to Read LPI2C Bus Data Register
118  *
119  *    @param[in]    lpi2c        Specify LPI2C port
120  *
121  *    @return       A byte of LPI2C data register
122  *
123  *    @details      LPI2C controller read data from bus and save it in LPI2C_DAT register.
124  *    \hideinitializer
125  */
126 #define LPI2C_GET_DATA(lpi2c)   ((lpi2c)->DAT)
127 
128 /**
129  *    @brief        Write a Data to LPI2C Data Register
130  *
131  *    @param[in]    lpi2c         Specify LPI2C port
132  *    @param[in]    u8Data      A byte that writes to data register
133  *
134  *    @return       None
135  *
136  *    @details      When write a data to LPI2C_DAT register, the LPI2C controller will shift it to LPI2C bus.
137  *    \hideinitializer
138  */
139 #define LPI2C_SET_DATA(lpi2c, u8Data) ((lpi2c)->DAT = (u8Data))
140 
141 /**
142  *    @brief        Get LPI2C Bus status code
143  *
144  *    @param[in]    lpi2c        Specify LPI2C port
145  *
146  *    @return       LPI2C status code
147  *
148  *    @details      To get this status code to monitor LPI2C bus event.
149  *    \hideinitializer
150  */
151 #define LPI2C_GET_STATUS(lpi2c) ((lpi2c)->STATUS0)
152 
153 /**
154  *    @brief        Get Time-out flag from LPI2C Bus
155  *
156  *    @param[in]    lpi2c     Specify LPI2C port
157  *
158  *    @retval       0       LPI2C Bus time-out is not happened
159  *    @retval       1       LPI2C Bus time-out is happened
160  *
161  *    @details      When LPI2C bus occurs time-out event, the time-out flag will be set.
162  *    \hideinitializer
163  */
164 #define LPI2C_GET_TIMEOUT_FLAG(lpi2c)   ( ((lpi2c)->TOCTL & LPI2C_TOCTL_TOIF_Msk) == LPI2C_TOCTL_TOIF_Msk ? 1:0 )
165 
166 /**
167  *    @brief        To get wake-up flag from LPI2C Bus
168  *
169  *    @param[in]    lpi2c     Specify LPI2C port
170  *
171  *    @retval       0       Chip is not woken-up from power-down mode
172  *    @retval       1       Chip is woken-up from power-down mode
173  *
174  *    @details      LPI2C bus occurs wake-up event, wake-up flag will be set.
175  *    \hideinitializer
176  */
177 #define LPI2C_GET_WAKEUP_FLAG(lpi2c) ( ((lpi2c)->WKSTS & LPI2C_WKSTS_WKIF_Msk) == LPI2C_WKSTS_WKIF_Msk ? 1:0  )
178 
179 /**
180  *    @brief        To clear wake-up flag
181  *
182  *    @param[in]    lpi2c     Specify LPI2C port
183  *
184  *    @return       None
185  *
186  *    @details      If wake-up flag is set, use this macro to clear it.
187  *    \hideinitializer
188  */
189 #define LPI2C_CLEAR_WAKEUP_FLAG(lpi2c)  ((lpi2c)->WKSTS = LPI2C_WKSTS_WKIF_Msk)
190 
191 /**
192  *    @brief        To get wake-up address frame ACK done flag from LPI2C Bus
193  *
194  *    @param[in]    lpi2c     Specify LPI2C port
195  *
196  *    @retval       0       The ACK bit cycle of address match frame is not done
197  *    @retval       1       The ACK bit cycle of address match frame is done in power-down
198  *
199  *    @details      LPI2C bus occurs wake-up event and address frame ACK is done, this flag will be set.
200  *    \hideinitializer
201  */
202 #define LPI2C_GET_WAKEUP_DONE(lpi2c) ( ((lpi2c)->WKSTS & LPI2C_WKSTS_WKAKDONE_Msk) == LPI2C_WKSTS_WKAKDONE_Msk ? 1 : 0)
203 
204 /**
205  *    @brief        To clear address frame ACK done flag
206  *
207  *    @param[in]    lpi2c     Specify LPI2C port
208  *
209  *    @return       None
210  *
211  *    @details      If wake-up done is set, use this macro to clear it.
212  *    \hideinitializer
213  */
214 #define LPI2C_CLEAR_WAKEUP_DONE(lpi2c)  ((lpi2c)->WKSTS = LPI2C_WKSTS_WKAKDONE_Msk)
215 
216 /**
217  *    @brief        To get read/write status bit in address wakeup frame
218  *
219  *    @param[in]    lpi2c     Specify LPI2C port
220  *
221  *    @retval       0       Write command be record on the address match wakeup frame
222  *    @retval       1       Read command be record on the address match wakeup frame.
223  *
224  *    @details      LPI2C bus occurs wake-up event and address frame is received, this bit will record read/write status.
225  *    \hideinitializer
226 */
227 #define LPI2C_GET_WAKEUP_WR_STATUS(lpi2c) ( ((lpi2c)->WKSTS & LPI2C_WKSTS_WRSTSWK_Msk) == LPI2C_WKSTS_WRSTSWK_Msk ? 1 : 0)
228 
229 /**
230   * @brief      Enable RX PDMA function.
231   * @param[in]  lpi2c The pointer of the specified LPI2C module.
232   * @return     None.
233   * @details    Set RXPDMAEN bit of LPI2C_CTL1 register to enable RX PDMA transfer function.
234   * \hideinitializer
235   */
236 #define LPI2C_ENABLE_RX_PDMA(lpi2c)   ((lpi2c)->CTL1 |= LPI2C_CTL1_RXPDMAEN_Msk)
237 
238 /**
239   * @brief      Enable TX PDMA function.
240   * @param[in]  lpi2c The pointer of the specified LPI2C module.
241   * @return     None.
242   * @details    Set TXPDMAEN bit of LPI2C_CTL1 register to enable TX PDMA transfer function.
243   * \hideinitializer
244   */
245 #define LPI2C_ENABLE_TX_PDMA(lpi2c)   ((lpi2c)->CTL1 |= LPI2C_CTL1_TXPDMAEN_Msk)
246 
247 /**
248   * @brief      Disable RX PDMA transfer.
249   * @param[in]  lpi2c The pointer of the specified LPI2C module.
250   * @return     None.
251   * @details    Clear RXPDMAEN bit of LPI2C_CTL1 register to disable RX PDMA transfer function.
252   * \hideinitializer
253   */
254 #define LPI2C_DISABLE_RX_PDMA(lpi2c)   ((lpi2c)->CTL1 &= ~LPI2C_CTL1_RXPDMAEN_Msk)
255 
256 /**
257   * @brief      Disable TX PDMA transfer.
258   * @param[in]  lpi2c The pointer of the specified LPI2C module.
259   * @return     None.
260   * @details    Clear TXPDMAEN bit of LPI2C_CTL1 register to disable TX PDMA transfer function.
261   * \hideinitializer
262   */
263 #define LPI2C_DISABLE_TX_PDMA(lpi2c)   ((lpi2c)->CTL1 &= ~LPI2C_CTL1_TXPDMAEN_Msk)
264 
265 /**
266   * @brief      Enable PDMA stretch function.
267   * @param[in]  lpi2c The pointer of the specified LPI2C module.
268   * @return     None.
269   * @details    Enable this function is to stretch bus by hardware after PDMA transfer is done if SI is not cleared.
270   * \hideinitializer
271   */
272 #define LPI2C_ENABLE_PDMA_STRETCH(lpi2c)   ((lpi2c)->CTL1 |= LPI2C_CTL1_PDMASTR_Msk)
273 
274 /**
275   * @brief      Disable PDMA stretch function.
276   * @param[in]  lpi2c The pointer of the specified LPI2C module.
277   * @return     None.
278   * @details    LPI2C will send STOP after PDMA transfers done automatically.
279   * \hideinitializer
280   */
281 #define LPI2C_DISABLE_PDMA_STRETCH(lpi2c)   ((lpi2c)->CTL1 &= ~LPI2C_CTL1_PDMASTR_Msk)
282 
283 /**
284   * @brief      Reset PDMA function.
285   * @param[in]  lpi2c The pointer of the specified LPI2C module.
286   * @return     None.
287   * @details    LPI2C PDMA engine will be reset after this function is called.
288   * \hideinitializer
289   */
290 #define LPI2C_DISABLE_RST_PDMA(lpi2c)   ((lpi2c)->CTL1 |= LPI2C_CTL1_PDMARST_Msk)
291 
292 /**
293  *    @brief        Enable specified LPI2C interrupt
294  *
295  *    @param[in]    lpi2c        The pointer of the specified LPI2C module
296  *    @param[in]    u32eIntSel  Interrupt type select
297  *                              - \ref LPI2C_AUTOCTL_TXWKEN_Msk   : TX Transfer Count Match Interrupt
298  *                              - \ref LPI2C_AUTOCTL_RXWKEN_Msk     : RX Transfer Count Match Interrupt
299  *                              - \ref LPI2C_AUTOCTL_NACKWKEN_Msk    : Receive Slave NACK Interrupt
300  *
301  *    @return       None
302  *
303  *    @details      This macro enable specified LPI2C auto-operation mode interrupt.
304  *    \hideinitializer
305  */
306 #define LPI2C_ENABLE_AUTO_MODE_INT(lpi2c, u32eIntSel)    ((lpi2c)->AUTOCTL |= (u32eIntSel))
307 
308 /**
309  *    @brief        Disable specified LPI2C interrupt
310  *
311  *    @param[in]    lpi2c        The pointer of the specified LPI2C module
312  *    @param[in]    u32eIntSel  Interrupt type select
313  *                              - \ref LPI2C_AUTOCTL_TXWKEN_Msk   : TX Transfer Count Match Interrupt
314  *                              - \ref LPI2C_AUTOCTL_RXWKEN_Msk     : RX Transfer Count Match Interrupt
315  *                              - \ref LPI2C_AUTOCTL_NACKWKEN_Msk    : Receive Slave NACK Interrupt
316  *
317  *    @return       None
318  *
319  *    @details      This macro disable specified LPI2C auto-operation mode interrupt.
320  *    \hideinitializer
321  */
322 #define LPI2C_DISABLE_AUTO_MODE_INT(lpi2c, u32eIntSel)    ((lpi2c)->AUTOCTL |= (u32eIntSel))
323 
324 /**
325  *    @brief        Get specified interrupt flag
326  *
327  *    @param[in]    lpi2c            The pointer of the specified LPI2C module
328  *    @param[in]    u32eIntTypeFlag Interrupt Type Flag, should be
329  *                                  - \ref LPI2C_AUTOSTS_TXWKF_Msk   : TX Transfer Count Match Interrupt Flag
330  *                                  - \ref LPI2C_AUTOSTS_RXWKF_Msk  : RX Transfer Count Match Interrupt Flag
331  *                                  - \ref LPI2C_AUTOSTS_ERRORWKF_Msk    : Error Condition Interrupt Flag
332  *
333  *    @retval       0 The specified interrupt is not happened.
334  *    @retval       1 The specified interrupt is happened.
335  *
336  *    @details      This macro get specified LPI2C auto-operation mode interrupt flag.
337  *    \hideinitializer
338  */
339 #define LPI2C_GET_AUTO_MODE_INT_FLAG(lpi2c,u32eIntTypeFlag)    (((lpi2c)->AUTOSTS & (u32eIntTypeFlag))?1:0)
340 
341 /**
342  *    @brief        Clear specified interrupt flag
343  *
344  *    @param[in]    lpi2c            The pointer of the specified LPI2C module
345  *    @param[in]    u32eIntTypeFlag Interrupt Type Flag, should be
346  *                                  - \ref LPI2C_AUTOSTS_TXWKF_Msk   : TX Transfer Count Match Interrupt Flag
347  *                                  - \ref LPI2C_AUTOSTS_RXWKF_Msk  : RX Transfer Count Match Interrupt Flag
348  *                                  - \ref LPI2C_AUTOSTS_ERRORWKF_Msk    : Error Condition Interrupt Flag
349  *
350  *    @return       None
351  *
352  *    @details      This macro clear specified LPI2C auto-operation mode interrupt flag.
353  *    \hideinitializer
354  */
355 #define LPI2C_CLEAR_AUTO_MODE_INT_FLAG(lpi2c,u32eIntTypeFlag)    ((lpi2c)->AUTOSTS = (u32eIntTypeFlag))
356 
357 /**
358  *    @brief        Auto-operation mode software trigger
359  *
360  *    @param[in]    lpi2c            The pointer of the specified LPI2C module
361  *
362  *    @return       None
363  *
364  *    @details      This macro set auto-operation mode software trigger bit.
365  *    \hideinitializer
366  */
367 #define LPI2C_AUTO_MODE_SW_TRIGGER(lpi2c)    ((lpi2c)->AUTOCTL |= LPI2C_AUTOCTL_SWTRG_Msk)
368 
369 /*---------------------------------------------------------------------------------------------------------*/
370 /* inline functions                                                                                        */
371 /*---------------------------------------------------------------------------------------------------------*/
372 
373 /* Declare these inline functions here to avoid MISRA C 2004 rule 8.1 error */
374 __STATIC_INLINE void LPI2C_STOP(LPI2C_T *lpi2c);
375 
376 /**
377  *    @brief        The macro is used to set STOP condition of LPI2C Bus
378  *
379  *    @param[in]    lpi2c        Specify LPI2C port
380  *
381  *    @return       None
382  *
383  *    @details      Set the LPI2C bus STOP condition in LPI2C_CTL register.
384  */
LPI2C_STOP(LPI2C_T * lpi2c)385 __STATIC_INLINE void LPI2C_STOP(LPI2C_T *lpi2c)
386 {
387     uint32_t u32TimeOutCount = SystemCoreClock;
388 
389     (lpi2c)->CTL0 |= (LPI2C_CTL0_SI_Msk | LPI2C_CTL0_STO_Msk);
390     while(lpi2c->CTL0 & LPI2C_CTL0_STO_Msk)
391     {
392         u32TimeOutCount--;
393         if(u32TimeOutCount == 0) break;
394     }
395 }
396 
397 void LPI2C_ClearTimeoutFlag(LPI2C_T *lpi2c);
398 void LPI2C_Close(LPI2C_T *lpi2c);
399 void LPI2C_Trigger(LPI2C_T *lpi2c, uint8_t u8Start, uint8_t u8Stop, uint8_t u8Si, uint8_t u8Ack);
400 void LPI2C_DisableInt(LPI2C_T *lpi2c);
401 void LPI2C_EnableInt(LPI2C_T *lpi2c);
402 uint32_t LPI2C_GetBusClockFreq(LPI2C_T *lpi2c);
403 uint32_t LPI2C_GetIntFlag(LPI2C_T *lpi2c);
404 uint32_t LPI2C_GetStatus(LPI2C_T *lpi2c);
405 uint32_t LPI2C_Open(LPI2C_T *lpi2c, uint32_t u32BusClock);
406 uint8_t LPI2C_GetData(LPI2C_T *lpi2c);
407 void LPI2C_SetSlaveAddr(LPI2C_T *lpi2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddr, uint8_t u8GCMode);
408 void LPI2C_SetSlaveAddrMask(LPI2C_T *lpi2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddrMask);
409 uint32_t LPI2C_SetBusClockFreq(LPI2C_T *lpi2c, uint32_t u32BusClock);
410 void LPI2C_EnableTimeout(LPI2C_T *lpi2c, uint8_t u8LongTimeout);
411 void LPI2C_DisableTimeout(LPI2C_T *lpi2c);
412 void LPI2C_EnableWakeup(LPI2C_T *lpi2c);
413 void LPI2C_DisableWakeup(LPI2C_T *lpi2c);
414 void LPI2C_SetData(LPI2C_T *lpi2c, uint8_t u8Data);
415 uint8_t LPI2C_WriteByte(LPI2C_T *lpi2c, uint8_t u8SlaveAddr, uint8_t data);
416 uint32_t LPI2C_WriteMultiBytes(LPI2C_T *lpi2c, uint8_t u8SlaveAddr, uint8_t data[], uint32_t u32wLen);
417 uint8_t LPI2C_WriteByteOneReg(LPI2C_T *lpi2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t data);
418 uint32_t LPI2C_WriteMultiBytesOneReg(LPI2C_T *lpi2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t data[], uint32_t u32wLen);
419 uint8_t LPI2C_WriteByteTwoRegs(LPI2C_T *lpi2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr, uint8_t data);
420 uint32_t LPI2C_WriteMultiBytesTwoRegs(LPI2C_T *lpi2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr, uint8_t data[], uint32_t u32wLen);
421 uint8_t LPI2C_ReadByte(LPI2C_T *lpi2c, uint8_t u8SlaveAddr);
422 uint32_t LPI2C_ReadMultiBytes(LPI2C_T *lpi2c, uint8_t u8SlaveAddr, uint8_t rdata[], uint32_t u32rLen);
423 uint8_t LPI2C_ReadByteOneReg(LPI2C_T *lpi2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr);
424 uint32_t LPI2C_ReadMultiBytesOneReg(LPI2C_T *lpi2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t rdata[], uint32_t u32rLen);
425 uint8_t LPI2C_ReadByteTwoRegs(LPI2C_T *lpi2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr);
426 uint32_t LPI2C_ReadMultiBytesTwoRegs(LPI2C_T *lpi2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr, uint8_t rdata[], uint32_t u32rLen);
427 
428 /*@}*/ /* end of group LPI2C_EXPORTED_FUNCTIONS */
429 
430 /*@}*/ /* end of group LPI2C_Driver */
431 
432 /*@}*/ /* end of group Standard_Driver */
433 
434 #ifdef __cplusplus
435 }
436 #endif
437 
438 #endif
439 
440 /*** (C) COPYRIGHT 2023 Nuvoton Technology Corp. ***/
441