1 /**
2   ******************************************************************************
3   * @file    tae32f53xx_ll_usb.h
4   * @author  MCD Application Team
5   * @brief   Header file of USB LL module.
6   *
7   ******************************************************************************
8   * @attention
9   *
10   * <h2><center>&copy; Copyright (c) 2020 Tai-Action.
11   * All rights reserved.</center></h2>
12   *
13   * This software is licensed by Tai-Action under BSD 3-Clause license,
14   * the "License"; You may not use this file except in compliance with the
15   * License. You may obtain a copy of the License at:
16   *                        opensource.org/licenses/BSD-3-Clause
17   *
18   ******************************************************************************
19   */
20 
21 /* Define to prevent recursive inclusion -------------------------------------*/
22 #ifndef _TAE32F53XX_LL_USB_H_
23 #define _TAE32F53XX_LL_USB_H_
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif /* __cplusplus */
28 
29 /* Includes ------------------------------------------------------------------*/
30 #include "tae32f53xx_ll_def.h"
31 
32 
33 /** @addtogroup TAE32F53xx_LL_Driver
34   * @{
35   */
36 
37 /** @addtogroup USB_LL
38   * @{
39   */
40 
41 
42 /* Exported constants --------------------------------------------------------*/
43 /* Exported macro ------------------------------------------------------------*/
44 /** @defgroup USB_LL_Exported_Macros USB LL Exported Macros
45   * @brief    USB LL Exported Macros
46   * @{
47   */
48 
49 /**
50   * @brief  Set Function Address
51   * @param  __USB__ Specifies USB peripheral
52   * @param  func_addr Function Address
53   * @return None
54   */
55 #define __LL_USB_FuncAddr_Set(__USB__, func_addr)   \
56         MODIFY_REG((__USB__)->FADDR, USB_FUNC_ADDR_Msk, ((func_addr & 0x7FUL) << USB_FUNC_ADDR_Pos))
57 
58 
59 /**
60   * @brief  Enable the SUSPENDM output
61   * @param  __USB__ Specifies USB peripheral
62   * @return None
63   */
64 #define __LL_USB_SuspendDMOut_En(__USB__)           SET_BIT((__USB__)->POWER, USB_SUSPEND_DM_EN_Msk)
65 
66 /**
67   * @brief  Disable the SUSPENDM output
68   * @param  __USB__ Specifies USB peripheral
69   * @return None
70   */
71 #define __LL_USB_SuspendDMOut_Dis(__USB__)          CLEAR_BIT((__USB__)->POWER, USB_SUSPEND_DM_EN_Msk)
72 
73 /**
74   * @brief  Enable HighSpeed
75   * @param  __USB__ Specifies USB peripheral
76   * @return None
77   */
78 #define __LL_USB_HighSpeed_En(__USB__)              SET_BIT((__USB__)->POWER, USB_HS_EN_Msk)
79 
80 /**
81   * @brief  Disable HighSpeed
82   * @param  __USB__ Specifies USB peripheral
83   * @return None
84   */
85 #define __LL_USB_HighSpeed_Dis(__USB__)             CLEAR_BIT((__USB__)->POWER, USB_HS_EN_Msk)
86 
87 /**
88   * @brief  Enable Soft Connect
89   * @param  __USB__ Specifies USB peripheral
90   * @return None
91   */
92 #define __LL_USB_SoftConn_En(__USB__)               SET_BIT((__USB__)->POWER, USB_SOFT_CONN_EN_Msk)
93 
94 /**
95   * @brief  Disable Soft Connect
96   * @param  __USB__ Specifies USB peripheral
97   * @return None
98   */
99 #define __LL_USB_SoftConn_Dis(__USB__)              CLEAR_BIT((__USB__)->POWER, USB_SOFT_CONN_EN_Msk)
100 
101 
102 /**
103   * @brief  Get Endpoint 0 and TX Endpoint Interrupt Status
104   * @param  __USB__ Specifies USB peripheral
105   * @return Endpoint 0 and TX Endpoint Interrupt Status
106   */
107 #define __LL_USB_EP0AndEPxTX_IntSta_Get(__USB__)    ((__USB__)->INTRTX)
108 
109 
110 /**
111   * @brief  Get RX Endpoint Interrupt Status
112   * @param  __USB__ Specifies USB peripheral
113   * @return RX Interrupt Status
114   */
115 #define __LL_USB_EPx_RXIntSta_Get(__USB__)          ((__USB__)->INTRRX)
116 
117 
118 /**
119   * @brief  Enable Endpoint 0 and TX Endpoint Interrupt
120   * @param  __USB__ Specifies USB peripheral
121   * @param  ep_num USB_EpNumETypeDef Type Endpoint Number
122   * @return None
123   */
124 #define __LL_USB_EP0AndEPxTX_Int_EN(__USB__, ep_num)                                                                        \
125         do {                                                                                                                \
126             if(ep_num >= EP_NUMS){                                                                                          \
127                 break;                                                                                                      \
128             }                                                                                                               \
129             uint16_t ep0_and_epxtx_int_en_bitmask[] = {USB_EP0_INT_EN_Msk, USB_TX_EP1_INT_EN_Msk, USB_TX_EP2_INT_EN_Msk};   \
130             SET_BIT((__USB__)->INTRTXE, ep0_and_epxtx_int_en_bitmask[ep_num]);                                              \
131         } while(0)
132 
133 /**
134   * @brief  Disable Endpoint 0 and TX Endpoint Interrupt
135   * @param  __USB__ Specifies USB peripheral
136   * @param  ep_num USB_EpNumETypeDef Type Endpoint Number
137   * @return None
138   */
139 #define __LL_USB_EP0AndEPxTX_Int_Dis(__USB__, ep_num)                                                                       \
140         do {                                                                                                                \
141             if(ep_num >= EP_NUMS){                                                                                          \
142                 break;                                                                                                      \
143             }                                                                                                               \
144             uint16_t ep0_and_epxtx_int_en_bitmask[] = {USB_EP0_INT_EN_Msk, USB_TX_EP1_INT_EN_Msk, USB_TX_EP2_INT_EN_Msk};   \
145             CLEAR_BIT((__USB__)->INTRTXE, ep0_and_epxtx_int_en_bitmask[ep_num]);                                            \
146         } while(0)
147 
148 
149 /**
150   * @brief  Enable RX Endpoint Interrupt
151   * @param  __USB__ Specifies USB peripheral
152   * @param  ep_num USB_EpNumETypeDef Type Endpoint Number
153   * @return None
154   */
155 #define __LL_USB_EPx_RXInt_En(__USB__, ep_num)                                                                              \
156         do {                                                                                                                \
157             if(ep_num >= EP_NUMS){                                                                                          \
158                 break;                                                                                                      \
159             }                                                                                                               \
160             uint16_t epxrx_int_en_bitmask[] = {0, USB_RX_EP1_INT_EN_Msk, USB_RX_EP2_INT_EN_Msk};                            \
161             SET_BIT((__USB__)->INTRRXE, epxrx_int_en_bitmask[ep_num]);                                                      \
162         } while(0)
163 
164 /**
165   * @brief  Disable RX Endpoint Interrupt
166   * @param  __USB__ Specifies USB peripheral
167   * @param  ep_num USB_EpNumETypeDef Type Endpoint Number
168   * @return None
169   */
170 #define __LL_USB_EPx_RXInt_Dis(__USB__, ep_num)                                                                             \
171         do {                                                                                                                \
172             if(ep_num >= EP_NUMS){                                                                                          \
173                 break;                                                                                                      \
174             }                                                                                                               \
175             uint16_t epxrx_int_en_bitmask[] = {0, USB_RX_EP1_INT_EN_Msk, USB_RX_EP2_INT_EN_Msk};                            \
176             CLEAR_BIT((__USB__)->INTRRXE, epxrx_int_en_bitmask[ep_num]);                                                    \
177         } while(0)
178 
179 
180 /**
181   * @brief  Get USB Controler Interrupt Status
182   * @param  __USB__ Specifies USB peripheral
183   * @return USB Controler Interrupt Status
184   */
185 #define __LL_USB_IntSta_Get(__USB__)            (READ_BIT((__USB__)->INTRUSB, USB_CTRL_INT_ALL_Msk) >> USB_SUSPEND_INT_STA_Pos)
186 
187 
188 /**
189   * @brief  Enable USB Controler Interrupt
190   * @param  __USB__ Specifies USB peripheral
191   * @param  int_bit_mask Interrupt BitMask to Be Enable
192   * @return None
193   */
194 #define __LL_USB_Int_EN(__USB__, int_bit_mask)      SET_BIT((__USB__)->INTRUSBE, int_bit_mask)
195 
196 /**
197   * @brief  Disable USB Controler Interrupt
198   * @param  __USB__ Specifies USB peripheral
199   * @param  int_bit_mask Interrupt BitMask to be Disable
200   * @return None
201   */
202 #define __LL_USB_Int_Dis(__USB__, int_bit_mask)     CLEAR_BIT((__USB__)->INTRUSBE, int_bit_mask)
203 
204 
205 /**
206   * @brief  Get Frame Number
207   * @param  __USB__ Specifies USB peripheral
208   * @return Frame Number
209   */
210 #define __LL_USB_FrameNum_Get(__USB__)              (READ_BIT((__USB__)->FRAME, USB_FRAME_NUM_Msk) >> USB_FRAME_NUM_Pos)
211 
212 
213 /**
214   * @brief  Set Endpoint Index
215   * @param  __USB__ Specifies USB peripheral
216   * @param  idx Index to be Set
217   * @return None
218   */
219 #define __LL_USB_EPIndex_Set(__USB__, idx)                      \
220         MODIFY_REG((__USB__)->INDEX, USB_EP_INDEX_Msk, ((idx & 0xFUL) << USB_EP_INDEX_Pos))
221 
222 
223 /**
224   * @brief  Set TX Max Payload
225   * @note   Must Set Endpoint Index first Before Call This Macro Function
226   * @param  __USB__ Specifies USB peripheral
227   * @param  max_payload Max Payload to be Set
228   * @return None
229   */
230 #define __LL_USB_EPx_TXMaxPayload_Set(__USB__,  max_payload)    \
231         MODIFY_REG((__USB__)->TXMAXP, USB_EPX_TX_MAX_PAYLD_Msk, ((max_payload & 0xFFFFUL) << USB_EPX_TX_MAX_PAYLD_Pos))
232 
233 /**
234   * @brief  Get TX Max Payload
235   * @note   Must Set Endpoint Index first Before Call This Macro Function
236   * @param  __USB__ Specifies USB peripheral
237   * @return TX Max Payload
238   */
239 #define __LL_USB_EPx_TXMaxPayload_Get(__USB__)                  \
240         (READ_BIT((__USB__)->TXMAXP, USB_EPX_TX_MAX_PAYLD_Msk) >> USB_EPX_TX_MAX_PAYLD_Pos)
241 
242 
243 /**
244   * @brief  Judge Endpoint 0 RX Packet Ready or not
245   * @param  __USB__ Specifies USB peripheral
246   * @retval 0 RX Packet Not Ready
247   * @retval 1 RX Packet Ready
248   */
249 #define __LL_USB_EP0_IsRXPktRdy(__USB__)        (READ_BIT((__USB__)->TX_CSR0, USB_EP0_RX_PKT_RDY_Msk) >> USB_EP0_RX_PKT_RDY_Pos)
250 
251 /**
252   * @brief  Clear Endpoint 0 RX Packet Ready
253   * @param  __USB__ Specifies USB peripheral
254   * @return None
255   */
256 #define __LL_USB_EP0_RXPktRdy_Clr(__USB__)      SET_BIT((__USB__)->TX_CSR0, USB_EP0_CLR_RX_PKT_RDY_Msk)
257 
258 /**
259   * @brief  Set Endpoint 0 TX Packet Ready
260   * @param  __USB__ Specifies USB peripheral
261   * @return None
262   */
263 #define __LL_USB_EP0_TXPktRdy_Set(__USB__)      SET_BIT((__USB__)->TX_CSR0, USB_EP0_TX_PKT_RDY_Msk)
264 
265 /**
266   * @brief  Judge Endpoint 0 TX Packet Ready or not
267   * @param  __USB__ Specifies USB peripheral
268   * @retval 0 TX Packet Not Ready
269   * @retval 1 TX Packet Ready
270   */
271 #define __LL_USB_EP0_IsTXPktRdy(__USB__)        (READ_BIT((__USB__)->TX_CSR0, USB_EP0_TX_PKT_RDY_Msk) >> USB_EP0_TX_PKT_RDY_Pos)
272 
273 /**
274   * @brief  Set Endpoint 0 to Send Stall
275   * @param  __USB__ Specifies USB peripheral
276   * @return None
277   */
278 #define __LL_USB_EP0_SendStall_Set(__USB__)     SET_BIT((__USB__)->TX_CSR0, USB_EP0_SEND_STALL_Msk)
279 
280 /**
281   * @brief  Judge Endpoint 0 has Sent Stall or not
282   * @param  __USB__ Specifies USB peripheral
283   * @retval 0 Hasn't Sent Stall
284   * @retval 1 Has Sent Stall
285   */
286 #define __LL_USB_EP0_IsSentStall(__USB__)       (READ_BIT((__USB__)->TX_CSR0, USB_EP0_SENT_STALL_Msk) >> USB_EP0_SENT_STALL_Pos)
287 
288 /**
289   * @brief  Clear Endpoint 0 Sent Stall Status
290   * @param  __USB__ Specifies USB peripheral
291   * @return None
292   */
293 #define __LL_USB_EP0_SentStall_Clr(__USB__)     CLEAR_BIT((__USB__)->TX_CSR0, USB_EP0_SENT_STALL_Msk)
294 
295 /**
296   * @brief  Set Endpoint 0 Data End
297   * @param  __USB__ Specifies USB peripheral
298   * @return None
299   */
300 #define __LL_USB_EP0_DataEnd_Set(__USB__)       SET_BIT((__USB__)->TX_CSR0, USB_EP0_DATA_END_Msk)
301 
302 /**
303   * @brief  Judge Endpoint 0 has SetupEnd or not
304   * @param  __USB__ Specifies USB peripheral
305   * @retval 0 Hasn't Setup End
306   * @retval 1 Has Setup End
307   */
308 #define __LL_USB_EP0_IsSetupEnd(__USB__)        (READ_BIT((__USB__)->TX_CSR0, USB_EP0_SETUP_END_Msk) >> USB_EP0_SETUP_END_Pos)
309 
310 /**
311   * @brief  Clear Endpoint 0 SetupEnd Status
312   * @param  __USB__ Specifies USB peripheral
313   * @return None
314   */
315 #define __LL_USB_EP0_SetupEnd_Clr(__USB__)      SET_BIT((__USB__)->TX_CSR0, USB_EP0_CLR_SETUP_END_Msk)
316 
317 /**
318   * @brief  Flush Endpoint 0 FIFO
319   * @param  __USB__ Specifies USB peripheral
320   * @return None
321   */
322 #define __LL_USB_EP0_FlushFIFO(__USB__)         SET_BIT((__USB__)->TX_CSR0, USB_EP0_FLUSH_FIFO_Msk)
323 
324 
325 /**
326   * @brief  Enable TX Packet Ready Auto Set Function
327   * @note   Must Set Endpoint Index first Before Call This Macro Function
328   * @param  __USB__ Specifies USB peripheral
329   * @return None
330   */
331 #define __LL_USB_EPx_TXPktRdyAutoSet_En(__USB__)    SET_BIT((__USB__)->TX_CSRX, USB_EPX_TX_AUTO_SET_Msk)
332 
333 /**
334   * @brief  Disable TX Packet Ready Auto Set Function
335   * @note   Must Set Endpoint Index first Before Call This Macro Function
336   * @param  __USB__ Specifies USB peripheral
337   * @return None
338   */
339 #define __LL_USB_EPx_TXPktRdyAutoSet_Dis(__USB__)   CLEAR_BIT((__USB__)->TX_CSRX, USB_EPX_TX_AUTO_SET_Msk)
340 
341 /**
342   * @brief  Enable Endpoint TX ISO
343   * @note   Must Set Endpoint Index first Before Call This Macro Function
344   * @param  __USB__ Specifies USB peripheral
345   * @return None
346   */
347 #define __LL_USB_EPx_TXISO_En(__USB__)              SET_BIT((__USB__)->TX_CSRX, USB_EPX_TX_ISO_EN_Msk)
348 
349 /**
350   * @brief  Disable Endpoint TX ISO
351   * @note   Must Set Endpoint Index first Before Call This Macro Function
352   * @param  __USB__ Specifies USB peripheral
353   * @return None
354   */
355 #define __LL_USB_EPx_TXISO_Dis(__USB__)             CLEAR_BIT((__USB__)->TX_CSRX, USB_EPX_TX_ISO_EN_Msk)
356 
357 /**
358   * @brief  Enable Endpoint TX
359   * @note   Must Set Endpoint Index first Before Call This Macro Function
360   * @param  __USB__ Specifies USB peripheral
361   * @return None
362   */
363 #define __LL_USB_EPx_TX_En(__USB__)                 SET_BIT((__USB__)->TX_CSRX, USB_EPX_DIR_MODE_Msk)
364 
365 /**
366   * @brief  Enable Endpoint RX
367   * @note   Must Set Endpoint Index first Before Call This Macro Function
368   * @param  __USB__ Specifies USB peripheral
369   * @return None
370   */
371 #define __LL_USB_EPx_RX_En(__USB__)                 CLEAR_BIT((__USB__)->TX_CSRX, USB_EPX_DIR_MODE_Msk)
372 
373 /**
374   * @brief  Enable Endpoint TX DMA Request
375   * @note   Must Set Endpoint Index first Before Call This Macro Function
376   * @param  __USB__ Specifies USB peripheral
377   * @return None
378   */
379 #define __LL_USB_EPx_TXDMAReq_En(__USB__)           SET_BIT((__USB__)->TX_CSRX, USB_EPX_TX_DMA_REQ_EN_Msk)
380 
381 /**
382   * @brief  Disable Endpoint TX DMA Request
383   * @note   Must Set Endpoint Index first Before Call This Macro Function
384   * @param  __USB__ Specifies USB peripheral
385   * @return None
386   */
387 #define __LL_USB_EPx_TXDMAReq_Dis(__USB__)          CLEAR_BIT((__USB__)->TX_CSRX, USB_EPX_TX_DMA_REQ_EN_Msk)
388 
389 /**
390   * @brief  Set Endpoint TX to Force Data Toggle
391   * @note   Must Set Endpoint Index first Before Call This Macro Function
392   * @param  __USB__ Specifies USB peripheral
393   * @return None
394   */
395 #define __LL_USB_EPx_TXForceDataTog_Set(__USB__)    SET_BIT((__USB__)->TX_CSRX, USB_EPX_TX_FRC_DATA_TOG_Msk)
396 
397 /**
398   * @brief  Clear Endpoint TX to Force Data Toggle
399   * @note   Must Set Endpoint Index first Before Call This Macro Function
400   * @param  __USB__ Specifies USB peripheral
401   * @return None
402   */
403 #define __LL_USB_EPx_TXForceDataTog_Clr(__USB__)    CLEAR_BIT((__USB__)->TX_CSRX, USB_EPX_TX_FRC_DATA_TOG_Msk)
404 
405 /**
406   * @brief  Set Endpoint TX DMA Request Mode to 0
407   * @note   Must Set Endpoint Index first Before Call This Macro Function
408   * @param  __USB__ Specifies USB peripheral
409   * @return None
410   */
411 #define __LL_USB_EPx_TXDMAReqMode0_Set(__USB__)     CLEAR_BIT((__USB__)->TX_CSRX, USB_EPX_TX_DMA_REQ_MODE_Msk)
412 
413 /**
414   * @brief  Set Endpoint TX DMA Request Mode to 1
415   * @note   Must Set Endpoint Index first Before Call This Macro Function
416   * @param  __USB__ Specifies USB peripheral
417   * @return None
418   */
419 #define __LL_USB_EPx_TXDMAReqMode1_Set(__USB__)     SET_BIT((__USB__)->TX_CSRX, USB_EPX_TX_DMA_REQ_MODE_Msk)
420 
421 /**
422   * @brief  Judge TX ISO Endpoint Is Incomplete or not
423   * @note   Must Set Endpoint Index first Before Call This Macro Function
424   * @param  __USB__ Specifies USB peripheral
425   * @retval 0 Complete
426   * @retval 1 Incomplete
427   */
428 #define __LL_USB_EPx_IsTXISOInComp(__USB__)         \
429         (READ_BIT((__USB__)->TX_CSRX, USB_EPX_TX_ISO_INCOMP_Msk) >> USB_EPX_TX_ISO_INCOMP_Pos)
430 
431 /**
432   * @brief  Clear TX Endpoint Data Toggle
433   * @note   Must Set Endpoint Index first Before Call This Macro Function
434   * @param  __USB__ Specifies USB peripheral
435   * @return None
436   */
437 #define __LL_USB_EPx_TXDataTog_Clr(__USB__)         SET_BIT((__USB__)->TX_CSRX, USB_EPX_TX_CLR_DATA_TOG_Msk)
438 
439 /**
440   * @brief  Judge TX Endpoint has Sent Stall or not
441   * @note   Must Set Endpoint Index first Before Call This Macro Function
442   * @param  __USB__ Specifies USB peripheral
443   * @retval 0 Hasn't Sent Stall
444   * @retval 1 Has Sent Stall
445   */
446 #define __LL_USB_EPx_IsTXSentStall(__USB__)         \
447         (READ_BIT((__USB__)->TX_CSRX, USB_EPX_TX_SENT_STALL_Msk) >> USB_EPX_TX_SENT_STALL_Pos)
448 
449 /**
450   * @brief  Clear TX Endpoint Sent Stall Status
451   * @note   Must Set Endpoint Index first Before Call This Macro Function
452   * @param  __USB__ Specifies USB peripheral
453   * @return None
454   */
455 #define __LL_USB_EPx_TXSentStall_Clr(__USB__)       CLEAR_BIT((__USB__)->TX_CSRX, USB_EPX_TX_SENT_STALL_Msk)
456 
457 /**
458   * @brief  Enable TX Endpoint to Send Stall
459   * @note   Must Set Endpoint Index first Before Call This Macro Function
460   * @param  __USB__ Specifies USB peripheral
461   * @return None
462   */
463 #define __LL_USB_EPx_TXSendStall_En(__USB__)        SET_BIT((__USB__)->TX_CSRX, USB_EPX_TX_SEND_STALL_Msk)
464 
465 /**
466   * @brief  Disable TX Endpoint to Send Stall
467   * @note   Must Set Endpoint Index first Before Call This Macro Function
468   * @param  __USB__ Specifies USB peripheral
469   * @return None
470   */
471 #define __LL_USB_EPx_TXSendStall_Dis(__USB__)       CLEAR_BIT((__USB__)->TX_CSRX, USB_EPX_TX_SEND_STALL_Msk)
472 
473 /**
474   * @brief  Flush TX Endpoint FIFO
475   * @note   Must Set Endpoint Index first Before Call This Macro Function
476   * @param  __USB__ Specifies USB peripheral
477   * @return None
478   */
479 #define __LL_USB_EPx_TXFlushFIFO(__USB__)           SET_BIT((__USB__)->TX_CSRX, USB_EPX_TX_FLUSH_FIFO_Msk)
480 
481 /**
482   * @brief  Judge TX Endpoint FIFO Is UnderRun or not
483   * @note   Must Set Endpoint Index first Before Call This Macro Function
484   * @param  __USB__ Specifies USB peripheral
485   * @retval 0 Isn't UnderRun
486   * @retval 1 Is UnderRun
487   */
488 #define __LL_USB_EPx_IsTXFIFOUnderRun(__USB__)      \
489         (READ_BIT((__USB__)->TX_CSRX, USB_EPX_TX_UNDER_RUN_Msk) >> USB_EPX_TX_UNDER_RUN_Pos)
490 
491 /**
492   * @brief  Clear TX Endpoint UnderRun Status
493   * @note   Must Set Endpoint Index first Before Call This Macro Function
494   * @param  __USB__ Specifies USB peripheral
495   * @return None
496   */
497 #define __LL_USB_EPx_TXFIFOUnderRun_Clr(__USB__)    CLEAR_BIT((__USB__)->TX_CSRX, USB_EPX_TX_UNDER_RUN_Msk)
498 
499 /**
500   * @brief  Judge TX Endpoint FIFO Is NoEmpty or not
501   * @note   Must Set Endpoint Index first Before Call This Macro Function
502   * @param  __USB__ Specifies USB peripheral
503   * @retval 0 Isn't NoEmpty
504   * @retval 1 Is NoEmpty
505   */
506 #define __LL_USB_EPx_IsTXFIFONoEmpty(__USB__)       \
507         (READ_BIT((__USB__)->TX_CSRX, USB_EPX_TX_FIFO_NOT_EPY_Msk) >> USB_EPX_TX_FIFO_NOT_EPY_Pos)
508 
509 /**
510   * @brief  Set TX Endpoint Packet Ready
511   * @note   Must Set Endpoint Index first Before Call This Macro Function
512   * @param  __USB__ Specifies USB peripheral
513   * @return None
514   */
515 #define __LL_USB_EPx_TXPktRdy_Set(__USB__)          SET_BIT((__USB__)->TX_CSRX, USB_EPX_TX_PKT_RDY_Msk)
516 
517 /**
518   * @brief  Judge Endpoint TX Packet Ready or not
519   * @note   Must Set Endpoint Index first Before Call This Macro Function
520   * @param  __USB__ Specifies USB peripheral
521   * @retval 0 Isn't Packet Ready
522   * @retval 1 Is Packet Ready
523   */
524 #define __LL_USB_EPx_IsTXPktRdy(__USB__)            \
525         (READ_BIT((__USB__)->TX_CSRX, USB_EPX_TX_PKT_RDY_Msk) >> USB_EPX_TX_PKT_RDY_Pos)
526 
527 
528 /**
529   * @brief  Set RX Max Payload
530   * @note   Must Set Endpoint Index first Before Call This Macro Function
531   * @param  __USB__ Specifies USB peripheral
532   * @param  max_payload Max Payload to be Set
533   * @return None
534   */
535 #define __LL_USB_EPx_RXMaxPayload_Set(__USB__,  max_payload)    \
536         MODIFY_REG((__USB__)->RXMAXP, USB_EPX_RX_MAX_PAYLD_Msk, ((max_payload & 0xFFFFUL) << USB_EPX_RX_MAX_PAYLD_Pos))
537 
538 /**
539   * @brief  Get RX Max Payload
540   * @note   Must Set Endpoint Index first Before Call This Macro Function
541   * @param  __USB__ Specifies USB peripheral
542   * @return RX Max Payload
543   */
544 #define __LL_USB_EPx_RXMaxPayload_Get(__USB__)                  \
545         (READ_BIT((__USB__)->RXMAXP, USB_EPX_RX_MAX_PAYLD_Msk) >> USB_EPX_RX_MAX_PAYLD_Pos)
546 
547 
548 /**
549   * @brief  Enable RX Packet Ready Auto Clear Function
550   * @param  __USB__ Specifies USB peripheral
551   * @return None
552   */
553 #define __LL_USB_EPx_RXPktRdyAutoClr_En(__USB__)    SET_BIT((__USB__)->RXCSRN, USB_EPX_RX_AUTO_CLR_Msk)
554 
555 /**
556   * @brief  Disable RX Packet Ready Auto Clear Function
557   * @param  __USB__ Specifies USB peripheral
558   * @return None
559   */
560 #define __LL_USB_EPx_RXPktRdyAutoClr_Dis(__USB__)   CLEAR_BIT((__USB__)->RXCSRN, USB_EPX_RX_AUTO_CLR_Msk)
561 
562 /**
563   * @brief  Enable Endpoint RX ISO
564   * @note   Must Set Endpoint Index first Before Call This Macro Function
565   * @param  __USB__ Specifies USB peripheral
566   * @return None
567   */
568 #define __LL_USB_EPx_RXISO_En(__USB__)              SET_BIT((__USB__)->RXCSRN, USB_EPX_RX_ISO_EN_Msk)
569 
570 /**
571   * @brief  Disable Endpoint RX ISO
572   * @note   Must Set Endpoint Index first Before Call This Macro Function
573   * @param  __USB__ Specifies USB peripheral
574   * @return None
575   */
576 #define __LL_USB_EPx_RXISO_Dis(__USB__)             CLEAR_BIT((__USB__)->RXCSRN, USB_EPX_RX_ISO_EN_Msk)
577 
578 /**
579   * @brief  Enable Endpoint RX DMA Request
580   * @note   Must Set Endpoint Index first Before Call This Macro Function
581   * @param  __USB__ Specifies USB peripheral
582   * @return None
583   */
584 #define __LL_USB_EPx_RXDMAReq_En(__USB__)           SET_BIT((__USB__)->RXCSRN, USB_EPX_RX_DMQ_REQ_EN_Msk)
585 
586 /**
587   * @brief  Disable Endpoint RX DMA Request
588   * @note   Must Set Endpoint Index first Before Call This Macro Function
589   * @param  __USB__ Specifies USB peripheral
590   * @return None
591   */
592 #define __LL_USB_EPx_RXDMAReq_Dis(__USB__)          CLEAR_BIT((__USB__)->RXCSRN, USB_EPX_RX_DMQ_REQ_EN_Msk)
593 
594 /**
595   * @brief  Judge RX ISO Endpoint PID Error or not
596   * @note   Must Set Endpoint Index first Before Call This Macro Function
597   * @param  __USB__ Specifies USB peripheral
598   * @retval 0 Isn't PID Error
599   * @retval 1 Is PID Error
600   */
601 #define __LL_USB_EPx_IsRXISOPIDErr(__USB__)         \
602         (READ_BIT((__USB__)->RXCSRN, USB_EPX_RX_ISO_PID_ERR_Msk) >> USB_EPX_RX_ISO_PID_ERR_Pos)
603 
604 /**
605   * @brief  Set Endpoint RX DMA Request Mode to 0
606   * @note   Must Set Endpoint Index first Before Call This Macro Function
607   * @param  __USB__ Specifies USB peripheral
608   * @return None
609   */
610 #define __LL_USB_EPx_RXDMAReqMode0_Set(__USB__)     CLEAR_BIT((__USB__)->RXCSRN, USB_EPX_RX_DMA_REQ_MODE_Msk)
611 
612 /**
613   * @brief  Set Endpoint RX DMA Request Mode to 1
614   * @note   Must Set Endpoint Index first Before Call This Macro Function
615   * @param  __USB__ Specifies USB peripheral
616   * @return None
617   */
618 #define __LL_USB_EPx_RXDMAReqMode1_Set(__USB__)     SET_BIT((__USB__)->RXCSRN, USB_EPX_RX_DMA_REQ_MODE_Msk)
619 
620 /**
621   * @brief  Judge RX ISO Endpoint Is Incomplete or not
622   * @note   Must Set Endpoint Index first Before Call This Macro Function
623   * @param  __USB__ Specifies USB peripheral
624   * @retval 0 Complete
625   * @retval 1 Incomplete
626   */
627 #define __LL_USB_EPx_IsRXISOInComp(__USB__)         \
628         (READ_BIT((__USB__)->RXCSRN, USB_EPX_RX_ISO_INCOMP_Msk) >> USB_EPX_RX_ISO_INCOMP_Pos)
629 
630 /**
631   * @brief  Clear RX Endpoint Data Toggle
632   * @note   Must Set Endpoint Index first Before Call This Macro Function
633   * @param  __USB__ Specifies USB peripheral
634   * @return None
635   */
636 #define __LL_USB_EPx_RXDataTog_Clr(__USB__)         SET_BIT((__USB__)->RXCSRN, USB_EPX_RX_CLR_DATA_TOG_Msk)
637 
638 /**
639   * @brief  Judge RX Endpoint has Sent Stall or not
640   * @note   Must Set Endpoint Index first Before Call This Macro Function
641   * @param  __USB__ Specifies USB peripheral
642   * @retval 0 Hasn't Sent Stall
643   * @retval 1 Has Sent Stall
644   */
645 #define __LL_USB_EPx_IsRXSentStall(__USB__)         \
646         (READ_BIT((__USB__)->RXCSRN, USB_EPX_RX_SENT_STALL_Msk) >> USB_EPX_RX_SENT_STALL_Pos)
647 
648 /**
649   * @brief  Clear RX Endpoint Sent Stall Status
650   * @note   Must Set Endpoint Index first Before Call This Macro Function
651   * @param  __USB__ Specifies USB peripheral
652   * @return None
653   */
654 #define __LL_USB_EPx_RXSentStall_Clr(__USB__)       CLEAR_BIT((__USB__)->RXCSRN, USB_EPX_RX_SENT_STALL_Msk)
655 
656 /**
657   * @brief  Enable RX Endpoint to Send Stall
658   * @note   Must Set Endpoint Index first Before Call This Macro Function
659   * @param  __USB__ Specifies USB peripheral
660   * @return None
661   */
662 #define __LL_USB_EPx_RXSendStall_En(__USB__)        SET_BIT((__USB__)->RXCSRN, USB_EPX_RX_SEND_STALL_Msk)
663 
664 /**
665   * @brief  Disable RX Endpoint to Send Stall
666   * @note   Must Set Endpoint Index first Before Call This Macro Function
667   * @param  __USB__ Specifies USB peripheral
668   * @return None
669   */
670 #define __LL_USB_EPx_RXSendStall_Dis(__USB__)       CLEAR_BIT((__USB__)->RXCSRN, USB_EPX_RX_SEND_STALL_Msk)
671 
672 /**
673   * @brief  Flush RX Endpoint FIFO
674   * @note   Must Set Endpoint Index first Before Call This Macro Function
675   * @param  __USB__ Specifies USB peripheral
676   * @return None
677   */
678 #define __LL_USB_EPx_RXFlushFIFO(__USB__)           SET_BIT((__USB__)->RXCSRN, USB_EPX_RX_FLUSH_FIFO_Msk)
679 
680 /**
681   * @brief  Judge RX ISO Endpoint Data Error or not
682   * @note   Must Set Endpoint Index first Before Call This Macro Function
683   * @param  __USB__ Specifies USB peripheral
684   * @retval 0 Isn't Data Error
685   * @retval 1 Is Data Error
686   */
687 #define __LL_USB_EPx_IsISORXDataErr(__USB__)        \
688         (READ_BIT((__USB__)->RXCSRN, USB_EPX_RX_ISO_DATA_ERR_Msk) >> USB_EPX_RX_ISO_DATA_ERR_Pos)
689 
690 /**
691   * @brief  Judge RX ISO Endpoint FIFO Is OverRun or not
692   * @note   Must Set Endpoint Index first Before Call This Macro Function
693   * @param  __USB__ Specifies USB peripheral
694   * @retval 0 Isn't OverRun
695   * @retval 1 Is OverRun
696   */
697 #define __LL_USB_EPx_IsISORXFIFOOverRun(__USB__)    \
698         (READ_BIT((__USB__)->RXCSRN, USB_EPX_RX_OVER_RUN_Msk) >> USB_EPX_RX_OVER_RUN_Pos)
699 
700 /**
701   * @brief  Clear RX ISO Endpoint OverrRun Status
702   * @note   Must Set Endpoint Index first Before Call This Macro Function
703   * @param  __USB__ Specifies USB peripheral
704   * @return None
705   */
706 #define __LL_USB_EPx_ISORXFIFOOverRun_Clr(__USB__)  CLEAR_BIT((__USB__)->RXCSRN, USB_EPX_RX_OVER_RUN_Msk)
707 
708 /**
709   * @brief  Judge RX FIFO Full or not
710   * @note   Must Set Endpoint Index first Before Call This Macro Function
711   * @param  __USB__ Specifies USB peripheral
712   * @retval 0 Isn't Full
713   * @retval 1 Is Full
714   */
715 #define __LL_USB_EPx_IsRXFIFOFull(__USB__)          \
716         (READ_BIT((__USB__)->RXCSRN, USB_EPX_RX_FIFO_FULL_Msk) >> USB_EPX_RX_FIFO_FULL_Pos)
717 
718 /**
719   * @brief  Judge Endpoint RX Packet Ready or not
720   * @note   Must Set Endpoint Index first Before Call This Macro Function
721   * @param  __USB__ Specifies USB peripheral
722   * @retval 0 Isn't Packet Ready
723   * @retval 1 Is Packet Ready
724   */
725 #define __LL_USB_EPx_IsRXPktRdy(__USB__)            \
726         (READ_BIT((__USB__)->RXCSRN, USB_EPX_RX_PKT_RDY_Msk) >> USB_EPX_RX_PKT_RDY_Pos)
727 
728 /**
729   * @brief  Clear RX Endpoint Packet Ready Status
730   * @note   Must Set Endpoint Index first Before Call This Macro Function
731   * @param  __USB__ Specifies USB peripheral
732   * @return None
733   */
734 #define __LL_USB_EPx_RXPktRdy_Clr(__USB__)          CLEAR_BIT((__USB__)->RXCSRN, USB_EPX_RX_PKT_RDY_Msk)
735 
736 
737 /**
738   * @brief  Get Endpoint RX Counter
739   * @note   Must Set Endpoint Index first Before Call This Macro Function
740   * @param  __USB__ Specifies USB peripheral
741   * @return RX Counter
742   */
743 #define __LL_USB_RXCount_Get(__USB__)               (READ_BIT((__USB__)->RXCOUNT, USB_RX_CNT_Msk) >> USB_RX_CNT_Pos)
744 
745 
746 /**
747   * @brief  Write Single Byte to Endpoint TX FIFO
748   * @param  __USB__ Specifies USB peripheral
749   * @param  ep_num USB_EpNumETypeDef Type Endpoint Number
750   * @param  dat Data to be Written
751   * @return None
752   */
753 #define __LL_USB_EPFIFOWriteByte(__USB__, ep_num, dat)      do{ (__USB__)->EP_FIFO[ep_num][0] = dat; }while(0)
754 
755 /**
756   * @brief  Read Single Byte form Endpoint RX FIFO
757   * @param  __USB__ Specifies USB peripheral
758   * @param  ep_num USB_EpNumETypeDef Type Endpoint Number
759   * @return Read Byte Data
760   */
761 #define __LL_USB_EPFIFOReadByte(__USB__, ep_num)            ((__USB__)->EP_FIFO[ep_num][0])
762 
763 
764 /**
765   * @brief  Config DM Output Hardware
766   * @param  __USB__ Specifies USB peripheral
767   * @return None
768   */
769 #define __LL_USB_DMOutputHardware(__USB__)          CLEAR_BIT((__USB__)->UCFG0, USB_DM_OE_EN_Msk)
770 
771 /**
772   * @brief  Config DM Output Normal
773   * @param  __USB__ Specifies USB peripheral
774   * @return None
775   */
776 #define __LL_USB_DMOutputNormal(__USB__)            SET_BIT((__USB__)->UCFG0, USB_DM_OE_EN_Msk | USB_DM_OE_Msk)
777 
778 /**
779   * @brief  Disable DM Output
780   * @param  __USB__ Specifies USB peripheral
781   * @return None
782   */
783 #define __LL_USB_DMOutputDisable(__USB__)           MODIFY_REG((__USB__)->UCFG0, 0x3UL<<USB_DM_OE_EN_Pos, 0x1UL<<USB_DM_OE_EN_Pos)
784 
785 /**
786   * @brief  Config DP Output Hardware
787   * @param  __USB__ Specifies USB peripheral
788   * @return None
789   */
790 #define __LL_USB_DPOutputHardware(__USB__)          CLEAR_BIT((__USB__)->UCFG0, USB_DP_OE_EN_Msk)
791 
792 /**
793   * @brief  Config DP Output Normal
794   * @param  __USB__ Specifies USB peripheral
795   * @return None
796   */
797 #define __LL_USB_DPOutputNormal(__USB__)            SET_BIT((__USB__)->UCFG0, USB_DP_OE_EN_Msk | USB_DP_OE_Msk)
798 
799 /**
800   * @brief  Disable DP Output
801   * @param  __USB__ Specifies USB peripheral
802   * @return None
803   */
804 #define __LL_USB_DPOutputDisable(__USB__)           MODIFY_REG((__USB__)->UCFG0, 0x3UL<<USB_DP_OE_EN_Pos, 0x1UL<<USB_DP_OE_EN_Pos)
805 
806 /**
807   * @brief  Config DM Input Hardware
808   * @param  __USB__ Specifies USB peripheral
809   * @return None
810   */
811 #define __LL_USB_DMInputHardware(__USB__)           CLEAR_BIT((__USB__)->UCFG0, USB_DM_IE_EN_Msk)
812 
813 /**
814   * @brief  Config DM Input Normal
815   * @param  __USB__ Specifies USB peripheral
816   * @return None
817   */
818 #define __LL_USB_DMInputNormal(__USB__)             SET_BIT((__USB__)->UCFG0, USB_DM_IE_EN_Msk | USB_DM_IE_Msk)
819 
820 /**
821   * @brief  Disable DM Input
822   * @param  __USB__ Specifies USB peripheral
823   * @return None
824   */
825 #define __LL_USB_DMInputDisable(__USB__)            MODIFY_REG((__USB__)->UCFG0, 0x3UL<<USB_DM_IE_EN_Pos, 0x1UL<<USB_DM_IE_EN_Pos)
826 
827 /**
828   * @brief  Config DP Input Hardware
829   * @param  __USB__ Specifies USB peripheral
830   * @return None
831   */
832 #define __LL_USB_DPInputHardware(__USB__)           CLEAR_BIT((__USB__)->UCFG0, USB_DP_IE_EN_Msk)
833 
834 /**
835   * @brief  Config DP Input Normal
836   * @param  __USB__ Specifies USB peripheral
837   * @return None
838   */
839 #define __LL_USB_DPInputNormal(__USB__)             SET_BIT((__USB__)->UCFG0, USB_DP_IE_EN_Msk | USB_DP_IE_Msk)
840 
841 /**
842   * @brief  Disable DP Input
843   * @param  __USB__ Specifies USB peripheral
844   * @return None
845   */
846 #define __LL_USB_DPInputDisable(__USB__)            MODIFY_REG((__USB__)->UCFG0, 0x3UL<<USB_DP_IE_EN_Pos, 0x1UL<<USB_DP_IE_EN_Pos)
847 
848 /**
849   * @brief  Config DM PullDown Hardware
850   * @param  __USB__ Specifies USB peripheral
851   * @return None
852   */
853 #define __LL_USB_DMPullDownHardware(__USB__)        CLEAR_BIT((__USB__)->UCFG0, USB_DM_PD_EN_Msk)
854 
855 /**
856   * @brief  Config DM PullDown Normal
857   * @param  __USB__ Specifies USB peripheral
858   * @return None
859   */
860 #define __LL_USB_DMPullDownNormal(__USB__)          SET_BIT((__USB__)->UCFG0, USB_DM_PD_EN_Msk | USB_DM_PD_Msk)
861 
862 /**
863   * @brief  Disable DM PullDown
864   * @param  __USB__ Specifies USB peripheral
865   * @return None
866   */
867 #define __LL_USB_DMPullDownDisable(__USB__)         MODIFY_REG((__USB__)->UCFG0, 0x3UL<<USB_DM_PD_EN_Pos, 0x1UL<<USB_DM_PD_EN_Pos)
868 
869 /**
870   * @brief  Config DM PullUp Hardware
871   * @param  __USB__ Specifies USB peripheral
872   * @return None
873   */
874 #define __LL_USB_DMPullUpHardware(__USB__)          CLEAR_BIT((__USB__)->UCFG0, USB_DM_PU_EN_Msk)
875 
876 /**
877   * @brief  Config DM PullUp Normal
878   * @param  __USB__ Specifies USB peripheral
879   * @return None
880   */
881 #define __LL_USB_DMPullUpNormal(__USB__)            SET_BIT((__USB__)->UCFG0, USB_DM_PU_EN_Msk | USB_DM_PU_Msk)
882 
883 /**
884   * @brief  Disable DM PullUp
885   * @param  __USB__ Specifies USB peripheral
886   * @return None
887   */
888 #define __LL_USB_DMPullUpDisable(__USB__)           MODIFY_REG((__USB__)->UCFG0, 0x3UL<<USB_DM_PU_EN_Pos, 0x1UL<<USB_DM_PU_EN_Pos)
889 
890 /**
891   * @brief  Config DP PullDown Hardware
892   * @param  __USB__ Specifies USB peripheral
893   * @return None
894   */
895 #define __LL_USB_DPPullDownHardware(__USB__)        CLEAR_BIT((__USB__)->UCFG0, USB_DP_PD_EN_Msk)
896 
897 /**
898   * @brief  Config DP PullDown Normal
899   * @param  __USB__ Specifies USB peripheral
900   * @return None
901   */
902 #define __LL_USB_DPPullDownNormal(__USB__)          SET_BIT((__USB__)->UCFG0, USB_DP_PD_EN_Msk | USB_DP_PD_Msk)
903 
904 /**
905   * @brief  Disable DP PullDown
906   * @param  __USB__ Specifies USB peripheral
907   * @return None
908   */
909 #define __LL_USB_DPPullDownDisable(__USB__)         MODIFY_REG((__USB__)->UCFG0, 0x3UL<<USB_DP_PD_EN_Pos, 0x1UL<<USB_DP_PD_EN_Pos)
910 
911 /**
912   * @brief  Config DP PullUp Hardware
913   * @param  __USB__ Specifies USB peripheral
914   * @return None
915   */
916 #define __LL_USB_DPPullUpHardware(__USB__)          CLEAR_BIT((__USB__)->UCFG0, USB_DP_PU_EN_Msk)
917 
918 /**
919   * @brief  Config DP PullUp Normal
920   * @param  __USB__ Specifies USB peripheral
921   * @return None
922   */
923 #define __LL_USB_DPPullUpNormal(__USB__)            SET_BIT((__USB__)->UCFG0, USB_DP_PU_EN_Msk | USB_DP_PU_Msk)
924 
925 /**
926   * @brief  Disable DP PullUp
927   * @param  __USB__ Specifies USB peripheral
928   * @return None
929   */
930 #define __LL_USB_DPPullUpDisable(__USB__)           MODIFY_REG((__USB__)->UCFG0, 0x3UL<<USB_DP_PU_EN_Pos, 0x1UL<<USB_DP_PU_EN_Pos)
931 
932 /**
933   * @brief  Set Vbus Above VBusValid Threshold
934   * @param  __USB__ Specifies USB peripheral
935   * @return None
936   */
937 #define __LL_USB_VbusValidThreshold_Set(__USB__)    SET_BIT((__USB__)->UCFG0, USB_VBUS_VALID_THRES_Msk)
938 
939 /**
940   * @brief  Clear Vbus Above VBusValid Threshold
941   * @param  __USB__ Specifies USB peripheral
942   * @return None
943   */
944 #define __LL_USB_VbusValidThreshold_Clr(__USB__)    CLEAR_BIT((__USB__)->UCFG0, USB_VBUS_VALID_THRES_Msk)
945 
946 /**
947   * @brief  Set Vbus Above Vbus A-device Session Threshold
948   * @param  __USB__ Specifies USB peripheral
949   * @return None
950   */
951 #define __LL_USB_VbusAboveAdevSessThres_Set(__USB__)    SET_BIT((__USB__)->UCFG0, USB_VBUS_A_SESS_THRES_Msk)
952 
953 /**
954   * @brief  Clear Vbus Above Vbus A-device Session Threshold
955   * @param  __USB__ Specifies USB peripheral
956   * @return None
957   */
958 #define __LL_USB_VbusAboveAdevSessThres_Clr(__USB__)    CLEAR_BIT((__USB__)->UCFG0, USB_VBUS_A_SESS_THRES_Msk)
959 
960 /**
961   * @brief  Set Vbus Above Session End Threshold
962   * @param  __USB__ Specifies USB peripheral
963   * @return None
964   */
965 #define __LL_USB_VbusAboveSessEndThres_Set(__USB__)     SET_BIT((__USB__)->UCFG0, USB_VBUS_SESS_END_THRES_Msk)
966 
967 /**
968   * @brief  Clear Vbus Above Session End Threshold
969   * @param  __USB__ Specifies USB peripheral
970   * @return None
971   */
972 #define __LL_USB_VbusAboveSessEndThres_Clr(__USB__)     CLEAR_BIT((__USB__)->UCFG0, USB_VBUS_SESS_END_THRES_Msk)
973 
974 /**
975   * @brief  Set Mini-AB Connector ID Pin
976   * @param  __USB__ Specifies USB peripheral
977   * @return None
978   */
979 #define __LL_USB_MiniABConnectorID_Set(__USB__)         SET_BIT((__USB__)->UCFG0, USB_MINI_AB_CONN_ID_Msk)
980 
981 /**
982   * @brief  Clear Mini-AB Connector ID Pin
983   * @param  __USB__ Specifies USB peripheral
984   * @return None
985   */
986 #define __LL_USB_MiniABConnectorID_Clr(__USB__)         CLEAR_BIT((__USB__)->UCFG0, USB_MINI_AB_CONN_ID_Msk)
987 
988 /**
989   * @brief  Enable USB PHY
990   * @param  __USB__ Specifies USB peripheral
991   * @return None
992   */
993 #define __LL_USB_PHY_En(__USB__)                        SET_BIT((__USB__)->UCFG0, USB_PHY_EN_Msk)
994 
995 /**
996   * @brief  Disable USB PHY
997   * @param  __USB__ Specifies USB peripheral
998   * @return None
999   */
1000 #define __LL_USB_PHY_Dis(__USB__)                       CLEAR_BIT((__USB__)->UCFG0, USB_PHY_EN_Msk)
1001 
1002 
1003 /**
1004   * @brief  Enable Interrupt Send to CPU
1005   * @param  __USB__ Specifies USB peripheral
1006   * @param  int_bit_mask Interrupt BitMask to be Enable
1007   * @return None
1008   */
1009 #define __LL_USB_INTSendToCPU_En(__USB__,  int_bit_mask)        SET_BIT((__USB__)->UCFG1, int_bit_mask)
1010 
1011 /**
1012   * @brief  Disable Interrupt Send to CPU
1013   * @param  __USB__ Specifies USB peripheral
1014   * @param  int_bit_mask Interrupt BitMask to be Disable
1015   * @return None
1016   */
1017 #define __LL_USB_INTSendToCPU_Dis(__USB__,  int_bit_mask)       CLEAR_BIT((__USB__)->UCFG1, int_bit_mask)
1018 
1019 
1020 /**
1021   * @brief  Get SendState
1022   * @param  __USB__ Specifies USB peripheral
1023   * @retval 0 Reserved
1024   * @retval 1 Setup
1025   * @retval 2 Out
1026   * @retval 3 IN
1027   */
1028 #define __LL_USB_SendState_Get(__USB__)             (READ_BIT((__USB__)->UCFG2, USB_SEND_STATE_Msk) >> USB_SEND_STATE_Pos)
1029 
1030 /**
1031   * @brief  Judge Is IN Packet or not
1032   * @param  __USB__ Specifies USB peripheral
1033   * @retval 0 Isn't IN Packet
1034   * @retval 1 Is IN Packet
1035   */
1036 #define __LL_USB_IsInPacket(__USB__)                (READ_BIT((__USB__)->UCFG2, USB_IN_STATE_Msk) >> USB_IN_STATE_Pos)
1037 
1038 /**
1039   * @brief  Judge Is OUT Packet or not
1040   * @param  __USB__ Specifies USB peripheral
1041   * @retval 0 Isn't OUT Packet
1042   * @retval 1 Is OUT Packet
1043   */
1044 #define __LL_USB_IsOutPacket(__USB__)               (READ_BIT((__USB__)->UCFG2, USB_OUT_STATE_Msk) >> USB_OUT_STATE_Pos)
1045 
1046 /**
1047   * @brief  Judge Is Setup Packet or not
1048   * @param  __USB__ Specifies USB peripheral
1049   * @retval 0 Isn't Setup Packet
1050   * @retval 1 Is Setup Packet
1051   */
1052 #define __LL_USB_IsSetupPacket(__USB__)             (READ_BIT((__USB__)->UCFG2, USB_SETUP_STATE_Msk) >> USB_SETUP_STATE_Pos)
1053 
1054 /**
1055   * @brief  Set Debounce Max
1056   * @param  __USB__ Specifies USB peripheral
1057   * @param  debouce debouce to be set
1058   * @return None
1059   */
1060 #define __LL_USB_DebouceMax_Set(__USB__,  debouce)  \
1061         MODIFY_REG((__USB__)->UCFG2, USB_DEBOUCE_MAX_Msk, ((debouce & 0x3FFFUL) << USB_DEBOUCE_MAX_Pos))
1062 
1063 /**
1064   * @brief  Enable Disconnect Interrupt
1065   * @param  __USB__ Specifies USB peripheral
1066   * @return None
1067   */
1068 #define __LL_USB_Disconn_Int_En(__USB__)            SET_BIT((__USB__)->UCFG2, USB_DISCONN_INT_EN_Msk)
1069 
1070 /**
1071   * @brief  Disable Disconnect Interrupt
1072   * @param  __USB__ Specifies USB peripheral
1073   * @return None
1074   */
1075 #define __LL_USB_Disconn_Int_Dis(__USB__)           CLEAR_BIT((__USB__)->UCFG2, USB_DISCONN_INT_EN_Msk)
1076 
1077 /**
1078   * @brief  Judge Is Disconnect Interrupt or not
1079   * @param  __USB__ Specifies USB peripheral
1080   * @retval 0 Isn't Disconnect Interrupt
1081   * @retval 1 Is Disconnect Interrupt
1082   */
1083 #define __LL_USB_IsDisconn(__USB__)                 (READ_BIT((__USB__)->UCFG2, USB_DISCONN_INT_STA_Msk) >> USB_DISCONN_INT_STA_Pos)
1084 
1085 /**
1086   * @brief  Clear Disconnect Interrupt Pending
1087   * @param  __USB__ Specifies USB peripheral
1088   * @return None
1089   */
1090 #define __LL_USB_Disconn_Clr(__USB__)               SET_BIT((__USB__)->UCFG2, USB_DISCONN_INT_STA_Msk)
1091 
1092 /**
1093   * @brief  Enable Connect Interrupt
1094   * @param  __USB__ Specifies USB peripheral
1095   * @return None
1096   */
1097 #define __LL_USB_Conn_Int_En(__USB__)               SET_BIT((__USB__)->UCFG2, USB_CONN_INT_EN_Msk)
1098 
1099 /**
1100   * @brief  Disable Connect Interrupt
1101   * @param  __USB__ Specifies USB peripheral
1102   * @return None
1103   */
1104 #define __LL_USB_Conn_Int_Dis(__USB__)              CLEAR_BIT((__USB__)->UCFG2, USB_CONN_INT_EN_Msk)
1105 
1106 /**
1107   * @brief  Judge Is Connect Interrupt or not
1108   * @param  __USB__ Specifies USB peripheral
1109   * @retval 0 Isn't Connect Interrupt
1110   * @retval 1 Is Connect Interrupt
1111   */
1112 #define __LL_USB_IsConn(__USB__)                    (READ_BIT((__USB__)->UCFG2, USB_CONN_INT_STA_Msk) >> USB_CONN_INT_STA_Pos)
1113 
1114 /**
1115   * @brief  Clear Connect Interrupt Pending
1116   * @param  __USB__ Specifies USB peripheral
1117   * @return None
1118   */
1119 #define __LL_USB_Conn_Clr(__USB__)                  SET_BIT((__USB__)->UCFG2, USB_CONN_INT_STA_Msk)
1120 
1121 /**
1122   * @}
1123   */
1124 
1125 
1126 /* Exported types ------------------------------------------------------------*/
1127 /** @defgroup USB_LL_Exported_Types USB LL Exported Types
1128   * @brief    USB LL Exported Types
1129   * @{
1130   */
1131 
1132 /**
1133   * @brief USB Endpoint Number
1134   */
1135 typedef enum {
1136     EP_NUM_0 = 0,   /*!< Endpoint Number 0  */
1137     EP_NUM_1 = 1,   /*!< Endpoint Number 1  */
1138     EP_NUM_2 = 2,   /*!< Endpoint Number 2  */
1139     EP_NUMS  = 3,   /*!< Endpoint Numbers   */
1140 } USB_EpNumETypeDef;
1141 
1142 /**
1143   * @}
1144   */
1145 
1146 
1147 /* Exported functions --------------------------------------------------------*/
1148 /** @addtogroup USB_LL_Exported_Functions
1149   * @{
1150   */
1151 
1152 /** @addtogroup USB_LL_Exported_Functions_Group1
1153   * @{
1154   */
1155 LL_StatusETypeDef LL_USB_Init(USB_TypeDef *Instance);
1156 LL_StatusETypeDef LL_USB_DeInit(USB_TypeDef *Instance);
1157 void LL_USB_MspInit(USB_TypeDef *Instance);
1158 void LL_USB_MspDeInit(USB_TypeDef *Instance);
1159 /**
1160   * @}
1161   */
1162 
1163 
1164 /** @addtogroup USB_LL_Exported_Functions_Group2
1165   * @{
1166   */
1167 void LL_USB_CtrlIRQHandler(USB_TypeDef *Instance);
1168 void LL_USB_CtrlSuspendCallback(USB_TypeDef *Instance);
1169 void LL_USB_CtrlResumeCallback(USB_TypeDef *Instance);
1170 void LL_USB_CtrlResetCallback(USB_TypeDef *Instance);
1171 void LL_USB_CtrlSofCallback(USB_TypeDef *Instance);
1172 void LL_USB_CtrlSessEndCallback(USB_TypeDef *Instance);
1173 /**
1174   * @}
1175   */
1176 
1177 
1178 /** @addtogroup USB_LL_Exported_Functions_Group3
1179   * @{
1180   */
1181 void LL_USB_DetIRQHandler(USB_TypeDef *Instance);
1182 void LL_USB_DetConnectCallback(USB_TypeDef *Instance);
1183 void LL_USB_DetDisonnectCallback(USB_TypeDef *Instance);
1184 /**
1185   * @}
1186   */
1187 
1188 
1189 /** @addtogroup USB_LL_Exported_Functions_Group4
1190   * @{
1191   */
1192 void LL_USB_EpIRQHandler(USB_TypeDef *Instance);
1193 void LL_USB_Ep0SetupCallback(USB_TypeDef *Instance);
1194 void LL_USB_Ep0InCallback(USB_TypeDef *Instance);
1195 void LL_USB_Ep0OutCallback(USB_TypeDef *Instance);
1196 void LL_USB_Ep1InCallback(USB_TypeDef *Instance);
1197 void LL_USB_Ep1OutCallback(USB_TypeDef *Instance);
1198 void LL_USB_Ep2InCallback(USB_TypeDef *Instance);
1199 void LL_USB_Ep2OutCallback(USB_TypeDef *Instance);
1200 /**
1201   * @}
1202   */
1203 
1204 /**
1205   * @}
1206   */
1207 
1208 
1209 /* Private types -------------------------------------------------------------*/
1210 /* Private variables ---------------------------------------------------------*/
1211 /* Private constants ---------------------------------------------------------*/
1212 /* Private macros ------------------------------------------------------------*/
1213 /* Private functions ---------------------------------------------------------*/
1214 
1215 
1216 /**
1217   * @}
1218   */
1219 
1220 /**
1221   * @}
1222   */
1223 
1224 
1225 #ifdef __cplusplus
1226 }
1227 #endif /* __cplusplus */
1228 
1229 
1230 #endif /* _TAE32F53XX_LL_USB_H_ */
1231 
1232 
1233 /************************* (C) COPYRIGHT Tai-Action *****END OF FILE***********/
1234 
1235