Rev 56 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 56 | Rev 61 | ||
---|---|---|---|
Line 185... | Line 185... | ||
185 | */ |
185 | */ |
186 | 186 | ||
187 | 187 | ||
188 | #define __HAL_PCD_ENABLE(__HANDLE__) (void)USB_EnableGlobalInt ((__HANDLE__)->Instance) |
188 | #define __HAL_PCD_ENABLE(__HANDLE__) (void)USB_EnableGlobalInt ((__HANDLE__)->Instance) |
189 | #define __HAL_PCD_DISABLE(__HANDLE__) (void)USB_DisableGlobalInt ((__HANDLE__)->Instance) |
189 | #define __HAL_PCD_DISABLE(__HANDLE__) (void)USB_DisableGlobalInt ((__HANDLE__)->Instance) |
190 | #define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance) & (__INTERRUPT__)) == (__INTERRUPT__)) |
190 | #define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance)\ |
- | 191 | & (__INTERRUPT__)) == (__INTERRUPT__)) |
|
- | 192 | ||
191 | #define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->ISTR) &= (uint16_t)(~(__INTERRUPT__))) |
193 | #define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->ISTR)\ |
- | 194 | &= (uint16_t)(~(__INTERRUPT__))) |
|
192 | 195 | ||
193 | #define __HAL_USB_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_WAKEUP_EXTI_LINE |
196 | #define __HAL_USB_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_WAKEUP_EXTI_LINE |
194 | #define __HAL_USB_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_WAKEUP_EXTI_LINE) |
197 | #define __HAL_USB_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_WAKEUP_EXTI_LINE) |
195 | #define __HAL_USB_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_WAKEUP_EXTI_LINE) |
198 | #define __HAL_USB_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_WAKEUP_EXTI_LINE) |
196 | #define __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = USB_WAKEUP_EXTI_LINE |
199 | #define __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = USB_WAKEUP_EXTI_LINE |
Line 257... | Line 260... | ||
257 | 260 | ||
258 | /** |
261 | /** |
259 | * @} |
262 | * @} |
260 | */ |
263 | */ |
261 | 264 | ||
262 | HAL_StatusTypeDef HAL_PCD_RegisterCallback(PCD_HandleTypeDef *hpcd, HAL_PCD_CallbackIDTypeDef CallbackID, pPCD_CallbackTypeDef pCallback); |
265 | HAL_StatusTypeDef HAL_PCD_RegisterCallback(PCD_HandleTypeDef *hpcd, |
- | 266 | HAL_PCD_CallbackIDTypeDef CallbackID, |
|
- | 267 | pPCD_CallbackTypeDef pCallback); |
|
- | 268 | ||
263 | HAL_StatusTypeDef HAL_PCD_UnRegisterCallback(PCD_HandleTypeDef *hpcd, HAL_PCD_CallbackIDTypeDef CallbackID); |
269 | HAL_StatusTypeDef HAL_PCD_UnRegisterCallback(PCD_HandleTypeDef *hpcd, |
- | 270 | HAL_PCD_CallbackIDTypeDef CallbackID); |
|
- | 271 | ||
- | 272 | HAL_StatusTypeDef HAL_PCD_RegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd, |
|
- | 273 | pPCD_DataOutStageCallbackTypeDef pCallback); |
|
264 | 274 | ||
265 | HAL_StatusTypeDef HAL_PCD_RegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd, pPCD_DataOutStageCallbackTypeDef pCallback); |
- | |
266 | HAL_StatusTypeDef HAL_PCD_UnRegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd); |
275 | HAL_StatusTypeDef HAL_PCD_UnRegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd); |
267 | 276 | ||
268 | HAL_StatusTypeDef HAL_PCD_RegisterDataInStageCallback(PCD_HandleTypeDef *hpcd, pPCD_DataInStageCallbackTypeDef pCallback); |
277 | HAL_StatusTypeDef HAL_PCD_RegisterDataInStageCallback(PCD_HandleTypeDef *hpcd, |
- | 278 | pPCD_DataInStageCallbackTypeDef pCallback); |
|
- | 279 | ||
269 | HAL_StatusTypeDef HAL_PCD_UnRegisterDataInStageCallback(PCD_HandleTypeDef *hpcd); |
280 | HAL_StatusTypeDef HAL_PCD_UnRegisterDataInStageCallback(PCD_HandleTypeDef *hpcd); |
270 | 281 | ||
271 | HAL_StatusTypeDef HAL_PCD_RegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd, pPCD_IsoOutIncpltCallbackTypeDef pCallback); |
282 | HAL_StatusTypeDef HAL_PCD_RegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd, |
- | 283 | pPCD_IsoOutIncpltCallbackTypeDef pCallback); |
|
- | 284 | ||
272 | HAL_StatusTypeDef HAL_PCD_UnRegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd); |
285 | HAL_StatusTypeDef HAL_PCD_UnRegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd); |
273 | 286 | ||
274 | HAL_StatusTypeDef HAL_PCD_RegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd, pPCD_IsoInIncpltCallbackTypeDef pCallback); |
287 | HAL_StatusTypeDef HAL_PCD_RegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd, |
- | 288 | pPCD_IsoInIncpltCallbackTypeDef pCallback); |
|
- | 289 | ||
275 | HAL_StatusTypeDef HAL_PCD_UnRegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd); |
290 | HAL_StatusTypeDef HAL_PCD_UnRegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd); |
276 | 291 | ||
277 | #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ |
292 | #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ |
278 | /** |
293 | /** |
279 | * @} |
294 | * @} |
Line 310... | Line 325... | ||
310 | * @{ |
325 | * @{ |
311 | */ |
326 | */ |
312 | HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd); |
327 | HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd); |
313 | HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd); |
328 | HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd); |
314 | HAL_StatusTypeDef HAL_PCD_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address); |
329 | HAL_StatusTypeDef HAL_PCD_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address); |
315 | HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint16_t ep_mps, uint8_t ep_type); |
330 | HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, |
- | 331 | uint16_t ep_mps, uint8_t ep_type); |
|
- | 332 | ||
316 | HAL_StatusTypeDef HAL_PCD_EP_Close(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
333 | HAL_StatusTypeDef HAL_PCD_EP_Close(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
317 | HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len); |
334 | HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, |
- | 335 | uint8_t *pBuf, uint32_t len); |
|
- | 336 | ||
318 | HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len); |
337 | HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, |
319 | uint32_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
338 | uint8_t *pBuf, uint32_t len); |
- | 339 | ||
- | 340 | ||
320 | HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
341 | HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
321 | HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
342 | HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
322 | HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
343 | HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
323 | HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); |
344 | HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); |
324 | HAL_StatusTypeDef HAL_PCD_DeActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); |
345 | HAL_StatusTypeDef HAL_PCD_DeActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); |
- | 346 | ||
- | 347 | uint32_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
|
325 | /** |
348 | /** |
326 | * @} |
349 | * @} |
327 | */ |
350 | */ |
328 | 351 | ||
329 | /* Peripheral State functions ************************************************/ |
352 | /* Peripheral State functions ************************************************/ |
Line 402... | Line 425... | ||
402 | /******************** Bit definition for USB_COUNTn_RX register *************/ |
425 | /******************** Bit definition for USB_COUNTn_RX register *************/ |
403 | #define USB_CNTRX_NBLK_MSK (0x1FU << 10) |
426 | #define USB_CNTRX_NBLK_MSK (0x1FU << 10) |
404 | #define USB_CNTRX_BLSIZE (0x1U << 15) |
427 | #define USB_CNTRX_BLSIZE (0x1U << 15) |
405 | 428 | ||
406 | /* SetENDPOINT */ |
429 | /* SetENDPOINT */ |
- | 430 | #define PCD_SET_ENDPOINT(USBx, bEpNum, wRegValue) (*(__IO uint16_t *)\ |
|
407 | #define PCD_SET_ENDPOINT(USBx, bEpNum, wRegValue) (*(__IO uint16_t *)(&(USBx)->EP0R + ((bEpNum) * 2U)) = (uint16_t)(wRegValue)) |
431 | (&(USBx)->EP0R + ((bEpNum) * 2U)) = (uint16_t)(wRegValue)) |
408 | 432 | ||
409 | /* GetENDPOINT */ |
433 | /* GetENDPOINT */ |
410 | #define PCD_GET_ENDPOINT(USBx, bEpNum) (*(__IO uint16_t *)(&(USBx)->EP0R + ((bEpNum) * 2U))) |
434 | #define PCD_GET_ENDPOINT(USBx, bEpNum) (*(__IO uint16_t *)(&(USBx)->EP0R + ((bEpNum) * 2U))) |
411 | 435 | ||
412 | /* ENDPOINT transfer */ |
436 | /* ENDPOINT transfer */ |
413 | #define USB_EP0StartXfer USB_EPStartXfer |
437 | #define USB_EP0StartXfer USB_EPStartXfer |
414 | 438 | ||
415 | /** |
439 | /** |
416 | * @brief sets the type in the endpoint register(bits EP_TYPE[1:0]) |
440 | * @brief sets the type in the endpoint register(bits EP_TYPE[1:0]) |
417 | * @param USBx USB peripheral instance register address. |
441 | * @param USBx USB peripheral instance register address. |
418 | * @param bEpNum Endpoint Number. |
442 | * @param bEpNum Endpoint Number. |
419 | * @param wType Endpoint Type. |
443 | * @param wType Endpoint Type. |
420 | * @retval None |
444 | * @retval None |
421 | */ |
445 | */ |
422 | #define PCD_SET_EPTYPE(USBx, bEpNum, wType) (PCD_SET_ENDPOINT((USBx), (bEpNum), \ |
446 | #define PCD_SET_EPTYPE(USBx, bEpNum, wType) (PCD_SET_ENDPOINT((USBx), (bEpNum), ((PCD_GET_ENDPOINT((USBx), (bEpNum))\ |
423 | ((PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_T_MASK) | (wType) | USB_EP_CTR_TX | USB_EP_CTR_RX))) |
447 | & USB_EP_T_MASK) | (wType) | USB_EP_CTR_TX | USB_EP_CTR_RX))) |
- | 448 | ||
424 | 449 | ||
425 | /** |
450 | /** |
426 | * @brief gets the type in the endpoint register(bits EP_TYPE[1:0]) |
451 | * @brief gets the type in the endpoint register(bits EP_TYPE[1:0]) |
427 | * @param USBx USB peripheral instance register address. |
452 | * @param USBx USB peripheral instance register address. |
428 | * @param bEpNum Endpoint Number. |
453 | * @param bEpNum Endpoint Number. |
Line 435... | Line 460... | ||
435 | * toggles bit SW_BUF in the double buffered endpoint register |
460 | * toggles bit SW_BUF in the double buffered endpoint register |
436 | * @param USBx USB device. |
461 | * @param USBx USB device. |
437 | * @param bEpNum, bDir |
462 | * @param bEpNum, bDir |
438 | * @retval None |
463 | * @retval None |
439 | */ |
464 | */ |
440 | #define PCD_FreeUserBuffer(USBx, bEpNum, bDir) do { \ |
465 | #define PCD_FreeUserBuffer(USBx, bEpNum, bDir) \ |
- | 466 | do { \ |
|
441 | if ((bDir) == 0U) \ |
467 | if ((bDir) == 0U) \ |
442 | { \ |
468 | { \ |
443 | /* OUT double buffered endpoint */ \ |
469 | /* OUT double buffered endpoint */ \ |
444 | PCD_TX_DTOG((USBx), (bEpNum)); \ |
470 | PCD_TX_DTOG((USBx), (bEpNum)); \ |
445 | } \ |
471 | } \ |
446 | else if ((bDir) == 1U) \ |
472 | else if ((bDir) == 1U) \ |
447 | { \ |
473 | { \ |
448 | /* IN double buffered endpoint */ \ |
474 | /* IN double buffered endpoint */ \ |
449 | PCD_RX_DTOG((USBx), (bEpNum)); \ |
475 | PCD_RX_DTOG((USBx), (bEpNum)); \ |
450 | } \ |
476 | } \ |
451 | } while(0) |
477 | } while(0) |
452 | 478 | ||
453 | /** |
479 | /** |
454 | * @brief sets the status for tx transfer (bits STAT_TX[1:0]). |
480 | * @brief sets the status for tx transfer (bits STAT_TX[1:0]). |
455 | * @param USBx USB peripheral instance register address. |
481 | * @param USBx USB peripheral instance register address. |
456 | * @param bEpNum Endpoint Number. |
482 | * @param bEpNum Endpoint Number. |
457 | * @param wState new state |
483 | * @param wState new state |
458 | * @retval None |
484 | * @retval None |
459 | */ |
485 | */ |
460 | #define PCD_SET_EP_TX_STATUS(USBx, bEpNum, wState) do { \ |
486 | #define PCD_SET_EP_TX_STATUS(USBx, bEpNum, wState) \ |
- | 487 | do { \ |
|
461 | uint16_t _wRegVal; \ |
488 | uint16_t _wRegVal; \ |
462 | \ |
489 | \ |
463 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPTX_DTOGMASK; \ |
490 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPTX_DTOGMASK; \ |
464 | /* toggle first bit ? */ \ |
491 | /* toggle first bit ? */ \ |
465 | if ((USB_EPTX_DTOG1 & (wState))!= 0U) \ |
492 | if ((USB_EPTX_DTOG1 & (wState))!= 0U) \ |
466 | { \ |
493 | { \ |
467 | _wRegVal ^= USB_EPTX_DTOG1; \ |
494 | _wRegVal ^= USB_EPTX_DTOG1; \ |
468 | } \ |
495 | } \ |
469 | /* toggle second bit ? */ \ |
496 | /* toggle second bit ? */ \ |
470 | if ((USB_EPTX_DTOG2 & (wState))!= 0U) \ |
497 | if ((USB_EPTX_DTOG2 & (wState))!= 0U) \ |
471 | { \ |
498 | { \ |
472 | _wRegVal ^= USB_EPTX_DTOG2; \ |
499 | _wRegVal ^= USB_EPTX_DTOG2; \ |
473 | } \ |
500 | } \ |
474 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ |
501 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ |
475 | } while(0) /* PCD_SET_EP_TX_STATUS */ |
502 | } while(0) /* PCD_SET_EP_TX_STATUS */ |
476 | 503 | ||
477 | /** |
504 | /** |
478 | * @brief sets the status for rx transfer (bits STAT_TX[1:0]) |
505 | * @brief sets the status for rx transfer (bits STAT_TX[1:0]) |
479 | * @param USBx USB peripheral instance register address. |
506 | * @param USBx USB peripheral instance register address. |
480 | * @param bEpNum Endpoint Number. |
507 | * @param bEpNum Endpoint Number. |
481 | * @param wState new state |
508 | * @param wState new state |
482 | * @retval None |
509 | * @retval None |
483 | */ |
510 | */ |
484 | #define PCD_SET_EP_RX_STATUS(USBx, bEpNum,wState) do { \ |
511 | #define PCD_SET_EP_RX_STATUS(USBx, bEpNum,wState) \ |
- | 512 | do { \ |
|
485 | uint16_t _wRegVal; \ |
513 | uint16_t _wRegVal; \ |
486 | \ |
514 | \ |
487 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPRX_DTOGMASK; \ |
515 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPRX_DTOGMASK; \ |
488 | /* toggle first bit ? */ \ |
516 | /* toggle first bit ? */ \ |
489 | if ((USB_EPRX_DTOG1 & (wState))!= 0U) \ |
517 | if ((USB_EPRX_DTOG1 & (wState))!= 0U) \ |
490 | { \ |
518 | { \ |
491 | _wRegVal ^= USB_EPRX_DTOG1; \ |
519 | _wRegVal ^= USB_EPRX_DTOG1; \ |
492 | } \ |
520 | } \ |
493 | /* toggle second bit ? */ \ |
521 | /* toggle second bit ? */ \ |
494 | if ((USB_EPRX_DTOG2 & (wState))!= 0U) \ |
522 | if ((USB_EPRX_DTOG2 & (wState))!= 0U) \ |
495 | { \ |
523 | { \ |
496 | _wRegVal ^= USB_EPRX_DTOG2; \ |
524 | _wRegVal ^= USB_EPRX_DTOG2; \ |
497 | } \ |
525 | } \ |
498 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ |
526 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ |
499 | } while(0) /* PCD_SET_EP_RX_STATUS */ |
527 | } while(0) /* PCD_SET_EP_RX_STATUS */ |
500 | 528 | ||
501 | /** |
529 | /** |
Line 504... | Line 532... | ||
504 | * @param bEpNum Endpoint Number. |
532 | * @param bEpNum Endpoint Number. |
505 | * @param wStaterx new state. |
533 | * @param wStaterx new state. |
506 | * @param wStatetx new state. |
534 | * @param wStatetx new state. |
507 | * @retval None |
535 | * @retval None |
508 | */ |
536 | */ |
509 | #define PCD_SET_EP_TXRX_STATUS(USBx, bEpNum, wStaterx, wStatetx) do { \ |
537 | #define PCD_SET_EP_TXRX_STATUS(USBx, bEpNum, wStaterx, wStatetx) \ |
- | 538 | do { \ |
|
510 | uint16_t _wRegVal; \ |
539 | uint16_t _wRegVal; \ |
511 | \ |
540 | \ |
512 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & (USB_EPRX_DTOGMASK | USB_EPTX_STAT); \ |
541 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & (USB_EPRX_DTOGMASK | USB_EPTX_STAT); \ |
513 | /* toggle first bit ? */ \ |
542 | /* toggle first bit ? */ \ |
514 | if ((USB_EPRX_DTOG1 & (wStaterx))!= 0U) \ |
543 | if ((USB_EPRX_DTOG1 & (wStaterx))!= 0U) \ |
Line 566... | Line 595... | ||
566 | * @brief set & clear EP_KIND bit. |
595 | * @brief set & clear EP_KIND bit. |
567 | * @param USBx USB peripheral instance register address. |
596 | * @param USBx USB peripheral instance register address. |
568 | * @param bEpNum Endpoint Number. |
597 | * @param bEpNum Endpoint Number. |
569 | * @retval None |
598 | * @retval None |
570 | */ |
599 | */ |
571 | #define PCD_SET_EP_KIND(USBx, bEpNum) do { \ |
600 | #define PCD_SET_EP_KIND(USBx, bEpNum) \ |
- | 601 | do { \ |
|
572 | uint16_t _wRegVal; \ |
602 | uint16_t _wRegVal; \ |
573 | \ |
603 | \ |
574 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK; \ |
604 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK; \ |
575 | \ |
605 | \ |
576 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX | USB_EP_KIND)); \ |
606 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX | USB_EP_KIND)); \ |
577 | } while(0) /* PCD_SET_EP_KIND */ |
607 | } while(0) /* PCD_SET_EP_KIND */ |
578 | 608 | ||
579 | #define PCD_CLEAR_EP_KIND(USBx, bEpNum) do { \ |
609 | #define PCD_CLEAR_EP_KIND(USBx, bEpNum) \ |
- | 610 | do { \ |
|
580 | uint16_t _wRegVal; \ |
611 | uint16_t _wRegVal; \ |
581 | \ |
612 | \ |
582 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPKIND_MASK; \ |
613 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPKIND_MASK; \ |
583 | \ |
614 | \ |
584 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ |
615 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ |
Line 606... | Line 637... | ||
606 | * @brief Clears bit CTR_RX / CTR_TX in the endpoint register. |
637 | * @brief Clears bit CTR_RX / CTR_TX in the endpoint register. |
607 | * @param USBx USB peripheral instance register address. |
638 | * @param USBx USB peripheral instance register address. |
608 | * @param bEpNum Endpoint Number. |
639 | * @param bEpNum Endpoint Number. |
609 | * @retval None |
640 | * @retval None |
610 | */ |
641 | */ |
611 | #define PCD_CLEAR_RX_EP_CTR(USBx, bEpNum) do { \ |
642 | #define PCD_CLEAR_RX_EP_CTR(USBx, bEpNum) \ |
- | 643 | do { \ |
|
612 | uint16_t _wRegVal; \ |
644 | uint16_t _wRegVal; \ |
613 | \ |
645 | \ |
614 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & (0x7FFFU & USB_EPREG_MASK); \ |
646 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & (0x7FFFU & USB_EPREG_MASK); \ |
615 | \ |
647 | \ |
616 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_TX)); \ |
648 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_TX)); \ |
617 | } while(0) /* PCD_CLEAR_RX_EP_CTR */ |
649 | } while(0) /* PCD_CLEAR_RX_EP_CTR */ |
618 | 650 | ||
619 | #define PCD_CLEAR_TX_EP_CTR(USBx, bEpNum) do { \ |
651 | #define PCD_CLEAR_TX_EP_CTR(USBx, bEpNum) \ |
- | 652 | do { \ |
|
620 | uint16_t _wRegVal; \ |
653 | uint16_t _wRegVal; \ |
621 | \ |
654 | \ |
622 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & (0xFF7FU & USB_EPREG_MASK); \ |
655 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & (0xFF7FU & USB_EPREG_MASK); \ |
623 | \ |
656 | \ |
624 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX)); \ |
657 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX)); \ |
Line 628... | Line 661... | ||
628 | * @brief Toggles DTOG_RX / DTOG_TX bit in the endpoint register. |
661 | * @brief Toggles DTOG_RX / DTOG_TX bit in the endpoint register. |
629 | * @param USBx USB peripheral instance register address. |
662 | * @param USBx USB peripheral instance register address. |
630 | * @param bEpNum Endpoint Number. |
663 | * @param bEpNum Endpoint Number. |
631 | * @retval None |
664 | * @retval None |
632 | */ |
665 | */ |
633 | #define PCD_RX_DTOG(USBx, bEpNum) do { \ |
666 | #define PCD_RX_DTOG(USBx, bEpNum) \ |
- | 667 | do { \ |
|
634 | uint16_t _wEPVal; \ |
668 | uint16_t _wEPVal; \ |
635 | \ |
669 | \ |
636 | _wEPVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK; \ |
670 | _wEPVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK; \ |
637 | \ |
671 | \ |
638 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wEPVal | USB_EP_CTR_RX | USB_EP_CTR_TX | USB_EP_DTOG_RX)); \ |
672 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wEPVal | USB_EP_CTR_RX | USB_EP_CTR_TX | USB_EP_DTOG_RX)); \ |
639 | } while(0) /* PCD_RX_DTOG */ |
673 | } while(0) /* PCD_RX_DTOG */ |
640 | 674 | ||
641 | #define PCD_TX_DTOG(USBx, bEpNum) do { \ |
675 | #define PCD_TX_DTOG(USBx, bEpNum) \ |
- | 676 | do { \ |
|
642 | uint16_t _wEPVal; \ |
677 | uint16_t _wEPVal; \ |
643 | \ |
678 | \ |
644 | _wEPVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK; \ |
679 | _wEPVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK; \ |
645 | \ |
680 | \ |
646 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wEPVal | USB_EP_CTR_RX | USB_EP_CTR_TX | USB_EP_DTOG_TX)); \ |
681 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wEPVal | USB_EP_CTR_RX | USB_EP_CTR_TX | USB_EP_DTOG_TX)); \ |
Line 649... | Line 684... | ||
649 | * @brief Clears DTOG_RX / DTOG_TX bit in the endpoint register. |
684 | * @brief Clears DTOG_RX / DTOG_TX bit in the endpoint register. |
650 | * @param USBx USB peripheral instance register address. |
685 | * @param USBx USB peripheral instance register address. |
651 | * @param bEpNum Endpoint Number. |
686 | * @param bEpNum Endpoint Number. |
652 | * @retval None |
687 | * @retval None |
653 | */ |
688 | */ |
654 | #define PCD_CLEAR_RX_DTOG(USBx, bEpNum) do { \ |
689 | #define PCD_CLEAR_RX_DTOG(USBx, bEpNum) \ |
- | 690 | do { \ |
|
655 | uint16_t _wRegVal; \ |
691 | uint16_t _wRegVal; \ |
656 | \ |
692 | \ |
657 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)); \ |
693 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)); \ |
658 | \ |
694 | \ |
659 | if ((_wRegVal & USB_EP_DTOG_RX) != 0U)\ |
695 | if ((_wRegVal & USB_EP_DTOG_RX) != 0U)\ |
660 | { \ |
696 | { \ |
661 | PCD_RX_DTOG((USBx), (bEpNum)); \ |
697 | PCD_RX_DTOG((USBx), (bEpNum)); \ |
662 | } \ |
698 | } \ |
663 | } while(0) /* PCD_CLEAR_RX_DTOG */ |
699 | } while(0) /* PCD_CLEAR_RX_DTOG */ |
664 | 700 | ||
665 | #define PCD_CLEAR_TX_DTOG(USBx, bEpNum) do { \ |
701 | #define PCD_CLEAR_TX_DTOG(USBx, bEpNum) \ |
- | 702 | do { \ |
|
666 | uint16_t _wRegVal; \ |
703 | uint16_t _wRegVal; \ |
667 | \ |
704 | \ |
668 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)); \ |
705 | _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)); \ |
669 | \ |
706 | \ |
670 | if ((_wRegVal & USB_EP_DTOG_TX) != 0U)\ |
707 | if ((_wRegVal & USB_EP_DTOG_TX) != 0U)\ |
Line 678... | Line 715... | ||
678 | * @param USBx USB peripheral instance register address. |
715 | * @param USBx USB peripheral instance register address. |
679 | * @param bEpNum Endpoint Number. |
716 | * @param bEpNum Endpoint Number. |
680 | * @param bAddr Address. |
717 | * @param bAddr Address. |
681 | * @retval None |
718 | * @retval None |
682 | */ |
719 | */ |
683 | #define PCD_SET_EP_ADDRESS(USBx, bEpNum, bAddr) do { \ |
720 | #define PCD_SET_EP_ADDRESS(USBx, bEpNum, bAddr) \ |
- | 721 | do { \ |
|
684 | uint16_t _wRegVal; \ |
722 | uint16_t _wRegVal; \ |
685 | \ |
723 | \ |
686 | _wRegVal = (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK) | (bAddr); \ |
724 | _wRegVal = (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK) | (bAddr); \ |
687 | \ |
725 | \ |
688 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ |
726 | PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ |
Line 694... | Line 732... | ||
694 | * @param bEpNum Endpoint Number. |
732 | * @param bEpNum Endpoint Number. |
695 | * @retval None |
733 | * @retval None |
696 | */ |
734 | */ |
697 | #define PCD_GET_EP_ADDRESS(USBx, bEpNum) ((uint8_t)(PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPADDR_FIELD)) |
735 | #define PCD_GET_EP_ADDRESS(USBx, bEpNum) ((uint8_t)(PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPADDR_FIELD)) |
698 | 736 | ||
- | 737 | #define PCD_EP_TX_CNT(USBx, bEpNum) ((uint16_t *)((((uint32_t)(USBx)->BTABLE\ |
|
699 | #define PCD_EP_TX_CNT(USBx, bEpNum) ((uint16_t *)((((uint32_t)(USBx)->BTABLE + ((uint32_t)(bEpNum) * 8U) + 2U) * PMA_ACCESS) + ((uint32_t)(USBx) + 0x400U))) |
738 | + ((uint32_t)(bEpNum) * 8U) + 2U) * PMA_ACCESS) + ((uint32_t)(USBx) + 0x400U))) |
- | 739 | ||
- | 740 | #define PCD_EP_RX_CNT(USBx, bEpNum) ((uint16_t *)((((uint32_t)(USBx)->BTABLE\ |
|
700 | #define PCD_EP_RX_CNT(USBx, bEpNum) ((uint16_t *)((((uint32_t)(USBx)->BTABLE + ((uint32_t)(bEpNum) * 8U) + 6U) * PMA_ACCESS) + ((uint32_t)(USBx) + 0x400U))) |
741 | + ((uint32_t)(bEpNum) * 8U) + 6U) * PMA_ACCESS) + ((uint32_t)(USBx) + 0x400U))) |
- | 742 | ||
701 | 743 | ||
702 | /** |
744 | /** |
703 | * @brief sets address of the tx/rx buffer. |
745 | * @brief sets address of the tx/rx buffer. |
704 | * @param USBx USB peripheral instance register address. |
746 | * @param USBx USB peripheral instance register address. |
705 | * @param bEpNum Endpoint Number. |
747 | * @param bEpNum Endpoint Number. |
706 | * @param wAddr address to be set (must be word aligned). |
748 | * @param wAddr address to be set (must be word aligned). |
707 | * @retval None |
749 | * @retval None |
708 | */ |
750 | */ |
709 | #define PCD_SET_EP_TX_ADDRESS(USBx, bEpNum, wAddr) do { \ |
751 | #define PCD_SET_EP_TX_ADDRESS(USBx, bEpNum, wAddr) \ |
- | 752 | do { \ |
|
710 | __IO uint16_t *_wRegVal; \ |
753 | __IO uint16_t *_wRegVal; \ |
711 | uint32_t _wRegBase = (uint32_t)USBx; \ |
754 | uint32_t _wRegBase = (uint32_t)USBx; \ |
712 | \ |
755 | \ |
713 | _wRegBase += (uint32_t)(USBx)->BTABLE; \ |
756 | _wRegBase += (uint32_t)(USBx)->BTABLE; \ |
714 | _wRegVal = (__IO uint16_t *)(_wRegBase + 0x400U + (((uint32_t)(bEpNum) * 8U) * PMA_ACCESS)); \ |
757 | _wRegVal = (__IO uint16_t *)(_wRegBase + 0x400U + (((uint32_t)(bEpNum) * 8U) * PMA_ACCESS)); \ |
715 | *_wRegVal = ((wAddr) >> 1) << 1; \ |
758 | *_wRegVal = ((wAddr) >> 1) << 1; \ |
716 | } while(0) /* PCD_SET_EP_TX_ADDRESS */ |
759 | } while(0) /* PCD_SET_EP_TX_ADDRESS */ |
717 | 760 | ||
718 | #define PCD_SET_EP_RX_ADDRESS(USBx, bEpNum, wAddr) do { \ |
761 | #define PCD_SET_EP_RX_ADDRESS(USBx, bEpNum, wAddr) \ |
- | 762 | do { \ |
|
719 | __IO uint16_t *_wRegVal; \ |
763 | __IO uint16_t *_wRegVal; \ |
720 | uint32_t _wRegBase = (uint32_t)USBx; \ |
764 | uint32_t _wRegBase = (uint32_t)USBx; \ |
721 | \ |
765 | \ |
722 | _wRegBase += (uint32_t)(USBx)->BTABLE; \ |
766 | _wRegBase += (uint32_t)(USBx)->BTABLE; \ |
723 | _wRegVal = (__IO uint16_t *)(_wRegBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 4U) * PMA_ACCESS)); \ |
767 | _wRegVal = (__IO uint16_t *)(_wRegBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 4U) * PMA_ACCESS)); \ |
724 | *_wRegVal = ((wAddr) >> 1) << 1; \ |
768 | *_wRegVal = ((wAddr) >> 1) << 1; \ |
725 | } while(0) /* PCD_SET_EP_RX_ADDRESS */ |
769 | } while(0) /* PCD_SET_EP_RX_ADDRESS */ |
726 | 770 | ||
727 | /** |
771 | /** |
728 | * @brief Gets address of the tx/rx buffer. |
772 | * @brief Gets address of the tx/rx buffer. |
729 | * @param USBx USB peripheral instance register address. |
773 | * @param USBx USB peripheral instance register address. |
730 | * @param bEpNum Endpoint Number. |
774 | * @param bEpNum Endpoint Number. |
Line 738... | Line 782... | ||
738 | * @param pdwReg Register pointer |
782 | * @param pdwReg Register pointer |
739 | * @param wCount Counter. |
783 | * @param wCount Counter. |
740 | * @param wNBlocks no. of Blocks. |
784 | * @param wNBlocks no. of Blocks. |
741 | * @retval None |
785 | * @retval None |
742 | */ |
786 | */ |
743 | #define PCD_CALC_BLK32(pdwReg, wCount, wNBlocks) do { \ |
787 | #define PCD_CALC_BLK32(pdwReg, wCount, wNBlocks) \ |
- | 788 | do { \ |
|
744 | (wNBlocks) = (wCount) >> 5; \ |
789 | (wNBlocks) = (wCount) >> 5; \ |
745 | if (((wCount) & 0x1fU) == 0U) \ |
790 | if (((wCount) & 0x1fU) == 0U) \ |
746 | { \ |
791 | { \ |
747 | (wNBlocks)--; \ |
792 | (wNBlocks)--; \ |
748 | } \ |
793 | } \ |
749 | *(pdwReg) = (uint16_t)(((wNBlocks) << 10) | USB_CNTRX_BLSIZE); \ |
794 | *(pdwReg) = (uint16_t)(((wNBlocks) << 10) | USB_CNTRX_BLSIZE); \ |
750 | } while(0) /* PCD_CALC_BLK32 */ |
795 | } while(0) /* PCD_CALC_BLK32 */ |
751 | 796 | ||
752 | #define PCD_CALC_BLK2(pdwReg, wCount, wNBlocks) do { \ |
797 | #define PCD_CALC_BLK2(pdwReg, wCount, wNBlocks) \ |
- | 798 | do { \ |
|
753 | (wNBlocks) = (wCount) >> 1; \ |
799 | (wNBlocks) = (wCount) >> 1; \ |
754 | if (((wCount) & 0x1U) != 0U) \ |
800 | if (((wCount) & 0x1U) != 0U) \ |
755 | { \ |
801 | { \ |
756 | (wNBlocks)++; \ |
802 | (wNBlocks)++; \ |
757 | } \ |
803 | } \ |
758 | *(pdwReg) = (uint16_t)((wNBlocks) << 10); \ |
804 | *(pdwReg) = (uint16_t)((wNBlocks) << 10); \ |
759 | } while(0) /* PCD_CALC_BLK2 */ |
805 | } while(0) /* PCD_CALC_BLK2 */ |
760 | 806 | ||
761 | #define PCD_SET_EP_CNT_RX_REG(pdwReg, wCount) do { \ |
807 | #define PCD_SET_EP_CNT_RX_REG(pdwReg, wCount) \ |
- | 808 | do { \ |
|
762 | uint32_t wNBlocks; \ |
809 | uint32_t wNBlocks; \ |
763 | if ((wCount) == 0U) \ |
810 | if ((wCount) == 0U) \ |
764 | { \ |
811 | { \ |
765 | *(pdwReg) &= (uint16_t)~USB_CNTRX_NBLK_MSK; \ |
812 | *(pdwReg) &= (uint16_t)~USB_CNTRX_NBLK_MSK; \ |
766 | *(pdwReg) |= USB_CNTRX_BLSIZE; \ |
813 | *(pdwReg) |= USB_CNTRX_BLSIZE; \ |
Line 773... | Line 820... | ||
773 | { \ |
820 | { \ |
774 | PCD_CALC_BLK32((pdwReg), (wCount), wNBlocks); \ |
821 | PCD_CALC_BLK32((pdwReg), (wCount), wNBlocks); \ |
775 | } \ |
822 | } \ |
776 | } while(0) /* PCD_SET_EP_CNT_RX_REG */ |
823 | } while(0) /* PCD_SET_EP_CNT_RX_REG */ |
777 | 824 | ||
778 | #define PCD_SET_EP_RX_DBUF0_CNT(USBx, bEpNum, wCount) do { \ |
825 | #define PCD_SET_EP_RX_DBUF0_CNT(USBx, bEpNum, wCount) \ |
- | 826 | do { \ |
|
779 | uint32_t _wRegBase = (uint32_t)(USBx); \ |
827 | uint32_t _wRegBase = (uint32_t)(USBx); \ |
780 | __IO uint16_t *pdwReg; \ |
828 | __IO uint16_t *pdwReg; \ |
781 | \ |
829 | \ |
782 | _wRegBase += (uint32_t)(USBx)->BTABLE; \ |
830 | _wRegBase += (uint32_t)(USBx)->BTABLE; \ |
783 | pdwReg = (__IO uint16_t *)(_wRegBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 2U) * PMA_ACCESS)); \ |
831 | pdwReg = (__IO uint16_t *)(_wRegBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 2U) * PMA_ACCESS)); \ |
784 | PCD_SET_EP_CNT_RX_REG(pdwReg, (wCount)); \ |
832 | PCD_SET_EP_CNT_RX_REG(pdwReg, (wCount)); \ |
785 | } while(0) |
833 | } while(0) |
786 | 834 | ||
Line 789... | Line 837... | ||
789 | * @param USBx USB peripheral instance register address. |
837 | * @param USBx USB peripheral instance register address. |
790 | * @param bEpNum Endpoint Number. |
838 | * @param bEpNum Endpoint Number. |
791 | * @param wCount Counter value. |
839 | * @param wCount Counter value. |
792 | * @retval None |
840 | * @retval None |
793 | */ |
841 | */ |
794 | #define PCD_SET_EP_TX_CNT(USBx, bEpNum, wCount) do { \ |
842 | #define PCD_SET_EP_TX_CNT(USBx, bEpNum, wCount) \ |
- | 843 | do { \ |
|
795 | uint32_t _wRegBase = (uint32_t)(USBx); \ |
844 | uint32_t _wRegBase = (uint32_t)(USBx); \ |
796 | __IO uint16_t *_wRegVal; \ |
845 | __IO uint16_t *_wRegVal; \ |
797 | \ |
846 | \ |
798 | _wRegBase += (uint32_t)(USBx)->BTABLE; \ |
847 | _wRegBase += (uint32_t)(USBx)->BTABLE; \ |
799 | _wRegVal = (__IO uint16_t *)(_wRegBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 2U) * PMA_ACCESS)); \ |
848 | _wRegVal = (__IO uint16_t *)(_wRegBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 2U) * PMA_ACCESS)); \ |
800 | *_wRegVal = (uint16_t)(wCount); \ |
849 | *_wRegVal = (uint16_t)(wCount); \ |
801 | } while(0) |
850 | } while(0) |
802 | 851 | ||
803 | #define PCD_SET_EP_RX_CNT(USBx, bEpNum, wCount) do { \ |
852 | #define PCD_SET_EP_RX_CNT(USBx, bEpNum, wCount) \ |
- | 853 | do { \ |
|
804 | uint32_t _wRegBase = (uint32_t)(USBx); \ |
854 | uint32_t _wRegBase = (uint32_t)(USBx); \ |
805 | __IO uint16_t *_wRegVal; \ |
855 | __IO uint16_t *_wRegVal; \ |
806 | \ |
856 | \ |
807 | _wRegBase += (uint32_t)(USBx)->BTABLE; \ |
857 | _wRegBase += (uint32_t)(USBx)->BTABLE; \ |
808 | _wRegVal = (__IO uint16_t *)(_wRegBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 6U) * PMA_ACCESS)); \ |
858 | _wRegVal = (__IO uint16_t *)(_wRegBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 6U) * PMA_ACCESS)); \ |
809 | PCD_SET_EP_CNT_RX_REG(_wRegVal, (wCount)); \ |
859 | PCD_SET_EP_CNT_RX_REG(_wRegVal, (wCount)); \ |
810 | } while(0) |
860 | } while(0) |
811 | 861 | ||
812 | /** |
862 | /** |
813 | * @brief gets counter of the tx buffer. |
863 | * @brief gets counter of the tx buffer. |
814 | * @param USBx USB peripheral instance register address. |
864 | * @param USBx USB peripheral instance register address. |
815 | * @param bEpNum Endpoint Number. |
865 | * @param bEpNum Endpoint Number. |
Line 823... | Line 873... | ||
823 | * @param USBx USB peripheral instance register address. |
873 | * @param USBx USB peripheral instance register address. |
824 | * @param bEpNum Endpoint Number. |
874 | * @param bEpNum Endpoint Number. |
825 | * @param wBuf0Addr buffer 0 address. |
875 | * @param wBuf0Addr buffer 0 address. |
826 | * @retval Counter value |
876 | * @retval Counter value |
827 | */ |
877 | */ |
828 | #define PCD_SET_EP_DBUF0_ADDR(USBx, bEpNum, wBuf0Addr) do { \ |
878 | #define PCD_SET_EP_DBUF0_ADDR(USBx, bEpNum, wBuf0Addr) \ |
- | 879 | do { \ |
|
829 | PCD_SET_EP_TX_ADDRESS((USBx), (bEpNum), (wBuf0Addr)); \ |
880 | PCD_SET_EP_TX_ADDRESS((USBx), (bEpNum), (wBuf0Addr)); \ |
830 | } while(0) /* PCD_SET_EP_DBUF0_ADDR */ |
881 | } while(0) /* PCD_SET_EP_DBUF0_ADDR */ |
- | 882 | ||
831 | #define PCD_SET_EP_DBUF1_ADDR(USBx, bEpNum, wBuf1Addr) do { \ |
883 | #define PCD_SET_EP_DBUF1_ADDR(USBx, bEpNum, wBuf1Addr) \ |
- | 884 | do { \ |
|
832 | PCD_SET_EP_RX_ADDRESS((USBx), (bEpNum), (wBuf1Addr)); \ |
885 | PCD_SET_EP_RX_ADDRESS((USBx), (bEpNum), (wBuf1Addr)); \ |
833 | } while(0) /* PCD_SET_EP_DBUF1_ADDR */ |
886 | } while(0) /* PCD_SET_EP_DBUF1_ADDR */ |
834 | 887 | ||
835 | /** |
888 | /** |
836 | * @brief Sets addresses in a double buffer endpoint. |
889 | * @brief Sets addresses in a double buffer endpoint. |
Line 838... | Line 891... | ||
838 | * @param bEpNum Endpoint Number. |
891 | * @param bEpNum Endpoint Number. |
839 | * @param wBuf0Addr: buffer 0 address. |
892 | * @param wBuf0Addr: buffer 0 address. |
840 | * @param wBuf1Addr = buffer 1 address. |
893 | * @param wBuf1Addr = buffer 1 address. |
841 | * @retval None |
894 | * @retval None |
842 | */ |
895 | */ |
843 | #define PCD_SET_EP_DBUF_ADDR(USBx, bEpNum, wBuf0Addr, wBuf1Addr) do { \ |
896 | #define PCD_SET_EP_DBUF_ADDR(USBx, bEpNum, wBuf0Addr, wBuf1Addr) \ |
- | 897 | do { \ |
|
844 | PCD_SET_EP_DBUF0_ADDR((USBx), (bEpNum), (wBuf0Addr)); \ |
898 | PCD_SET_EP_DBUF0_ADDR((USBx), (bEpNum), (wBuf0Addr)); \ |
845 | PCD_SET_EP_DBUF1_ADDR((USBx), (bEpNum), (wBuf1Addr)); \ |
899 | PCD_SET_EP_DBUF1_ADDR((USBx), (bEpNum), (wBuf1Addr)); \ |
846 | } while(0) /* PCD_SET_EP_DBUF_ADDR */ |
900 | } while(0) /* PCD_SET_EP_DBUF_ADDR */ |
847 | 901 | ||
848 | /** |
902 | /** |
Line 861... | Line 915... | ||
861 | * @param bDir endpoint dir EP_DBUF_OUT = OUT |
915 | * @param bDir endpoint dir EP_DBUF_OUT = OUT |
862 | * EP_DBUF_IN = IN |
916 | * EP_DBUF_IN = IN |
863 | * @param wCount: Counter value |
917 | * @param wCount: Counter value |
864 | * @retval None |
918 | * @retval None |
865 | */ |
919 | */ |
866 | #define PCD_SET_EP_DBUF0_CNT(USBx, bEpNum, bDir, wCount) do { \ |
920 | #define PCD_SET_EP_DBUF0_CNT(USBx, bEpNum, bDir, wCount) \ |
- | 921 | do { \ |
|
867 | if ((bDir) == 0U) \ |
922 | if ((bDir) == 0U) \ |
868 | /* OUT endpoint */ \ |
923 | /* OUT endpoint */ \ |
869 | { \ |
924 | { \ |
870 | PCD_SET_EP_RX_DBUF0_CNT((USBx), (bEpNum), (wCount)); \ |
925 | PCD_SET_EP_RX_DBUF0_CNT((USBx), (bEpNum), (wCount)); \ |
871 | } \ |
926 | } \ |
Line 877... | Line 932... | ||
877 | PCD_SET_EP_TX_CNT((USBx), (bEpNum), (wCount)); \ |
932 | PCD_SET_EP_TX_CNT((USBx), (bEpNum), (wCount)); \ |
878 | } \ |
933 | } \ |
879 | } \ |
934 | } \ |
880 | } while(0) /* SetEPDblBuf0Count*/ |
935 | } while(0) /* SetEPDblBuf0Count*/ |
881 | 936 | ||
882 | #define PCD_SET_EP_DBUF1_CNT(USBx, bEpNum, bDir, wCount) do { \ |
937 | #define PCD_SET_EP_DBUF1_CNT(USBx, bEpNum, bDir, wCount) \ |
- | 938 | do { \ |
|
883 | uint32_t _wBase = (uint32_t)(USBx); \ |
939 | uint32_t _wBase = (uint32_t)(USBx); \ |
884 | __IO uint16_t *_wEPRegVal; \ |
940 | __IO uint16_t *_wEPRegVal; \ |
885 | \ |
941 | \ |
886 | if ((bDir) == 0U) \ |
942 | if ((bDir) == 0U) \ |
887 | { \ |
943 | { \ |
Line 898... | Line 954... | ||
898 | *_wEPRegVal = (uint16_t)(wCount); \ |
954 | *_wEPRegVal = (uint16_t)(wCount); \ |
899 | } \ |
955 | } \ |
900 | } \ |
956 | } \ |
901 | } while(0) /* SetEPDblBuf1Count */ |
957 | } while(0) /* SetEPDblBuf1Count */ |
902 | 958 | ||
903 | #define PCD_SET_EP_DBUF_CNT(USBx, bEpNum, bDir, wCount) do { \ |
959 | #define PCD_SET_EP_DBUF_CNT(USBx, bEpNum, bDir, wCount) \ |
- | 960 | do { \ |
|
904 | PCD_SET_EP_DBUF0_CNT((USBx), (bEpNum), (bDir), (wCount)); \ |
961 | PCD_SET_EP_DBUF0_CNT((USBx), (bEpNum), (bDir), (wCount)); \ |
905 | PCD_SET_EP_DBUF1_CNT((USBx), (bEpNum), (bDir), (wCount)); \ |
962 | PCD_SET_EP_DBUF1_CNT((USBx), (bEpNum), (bDir), (wCount)); \ |
906 | } while(0) /* PCD_SET_EP_DBUF_CNT */ |
963 | } while(0) /* PCD_SET_EP_DBUF_CNT */ |
907 | 964 | ||
908 | /** |
965 | /** |