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 | /** |