60 #ifdef HAL_HCD_MODULE_ENABLED 62 #if defined (USB_OTG_FS) 110 USB_OTG_GlobalTypeDef *USBx;
121 USBx = hhcd->Instance;
128 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 136 if (hhcd->MspInitCallback == NULL)
142 hhcd->MspInitCallback(hhcd);
152 if ((USBx->CID & (0x1U << 8)) == 0U)
154 hhcd->Init.dma_enable = 0U;
158 __HAL_HCD_DISABLE(hhcd);
205 HAL_StatusTypeDef status;
208 hhcd->hc[ch_num].do_ping = 0U;
209 hhcd->hc[ch_num].dev_addr = dev_address;
210 hhcd->hc[ch_num].max_packet = mps;
211 hhcd->hc[ch_num].ch_num = ch_num;
212 hhcd->hc[ch_num].ep_type = ep_type;
213 hhcd->hc[ch_num].ep_num = epnum & 0x7FU;
215 if ((epnum & 0x80U) == 0x80U)
217 hhcd->hc[ch_num].ep_is_in = 1U;
221 hhcd->hc[ch_num].ep_is_in = 0U;
224 hhcd->hc[ch_num].speed = speed;
247 HAL_StatusTypeDef status =
HAL_OK;
250 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
271 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 272 if (hhcd->MspDeInitCallback == NULL)
278 hhcd->MspDeInitCallback(hhcd);
284 __HAL_HCD_DISABLE(hhcd);
374 hhcd->hc[ch_num].ep_is_in = direction;
375 hhcd->hc[ch_num].ep_type = ep_type;
379 hhcd->hc[ch_num].data_pid = HC_PID_SETUP;
383 hhcd->hc[ch_num].data_pid = HC_PID_DATA1;
390 if ((token == 1U) && (direction == 0U))
395 hhcd->hc[ch_num].toggle_out = 1U;
399 if (hhcd->hc[ch_num].toggle_out == 0U)
402 hhcd->hc[ch_num].data_pid = HC_PID_DATA0;
407 hhcd->hc[ch_num].data_pid = HC_PID_DATA1;
416 if (hhcd->hc[ch_num].toggle_out == 0U)
419 hhcd->hc[ch_num].data_pid = HC_PID_DATA0;
424 hhcd->hc[ch_num].data_pid = HC_PID_DATA1;
429 if (hhcd->hc[ch_num].toggle_in == 0U)
431 hhcd->hc[ch_num].data_pid = HC_PID_DATA0;
435 hhcd->hc[ch_num].data_pid = HC_PID_DATA1;
444 if (hhcd->hc[ch_num].toggle_out == 0U)
447 hhcd->hc[ch_num].data_pid = HC_PID_DATA0;
452 hhcd->hc[ch_num].data_pid = HC_PID_DATA1;
457 if (hhcd->hc[ch_num].toggle_in == 0U)
459 hhcd->hc[ch_num].data_pid = HC_PID_DATA0;
463 hhcd->hc[ch_num].data_pid = HC_PID_DATA1;
469 hhcd->hc[ch_num].data_pid = HC_PID_DATA0;
476 hhcd->hc[ch_num].xfer_buff = pbuff;
477 hhcd->hc[ch_num].xfer_len = length;
478 hhcd->hc[ch_num].urb_state =
URB_IDLE;
479 hhcd->hc[ch_num].xfer_count = 0U;
480 hhcd->hc[ch_num].ch_num = ch_num;
481 hhcd->hc[ch_num].state =
HC_IDLE;
493 USB_OTG_GlobalTypeDef *USBx = hhcd->Instance;
494 uint32_t USBx_BASE = (uint32_t)USBx;
495 uint32_t i, interrupt;
498 if (
USB_GetMode(hhcd->Instance) == USB_OTG_MODE_HOST)
501 if (__HAL_HCD_IS_INVALID_INTERRUPT(hhcd))
506 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT))
509 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT);
512 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_IISOIXFR))
515 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_IISOIXFR);
518 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_PTXFE))
521 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_PTXFE);
524 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_MMIS))
527 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_MMIS);
531 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_DISCINT))
535 USBx_HPRT0 &= ~(USB_OTG_HPRT_PENA | USB_OTG_HPRT_PCDET | \
536 USB_OTG_HPRT_PENCHNG | USB_OTG_HPRT_POCCHNG);
539 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 540 hhcd->DisconnectCallback(hhcd);
546 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_DISCINT);
550 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_HPRTINT))
556 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_SOF))
558 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 559 hhcd->SOFCallback(hhcd);
564 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_SOF);
568 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_HCINT))
571 for (i = 0U; i < hhcd->Init.Host_channels; i++)
573 if ((interrupt & (1UL << (i & 0xFU))) != 0U)
575 if ((USBx_HC(i)->HCCHAR & USB_OTG_HCCHAR_EPDIR) == USB_OTG_HCCHAR_EPDIR)
585 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_HCINT);
589 if ((__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_RXFLVL)) != 0U)
591 USB_MASK_INTERRUPT(hhcd->Instance, USB_OTG_GINTSTS_RXFLVL);
595 USB_UNMASK_INTERRUPT(hhcd->Instance, USB_OTG_GINTSTS_RXFLVL);
702 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 721 HAL_StatusTypeDef status =
HAL_OK;
723 if (pCallback == NULL)
726 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
737 hhcd->SOFCallback = pCallback;
741 hhcd->ConnectCallback = pCallback;
745 hhcd->DisconnectCallback = pCallback;
749 hhcd->PortEnabledCallback = pCallback;
753 hhcd->PortDisabledCallback = pCallback;
757 hhcd->MspInitCallback = pCallback;
761 hhcd->MspDeInitCallback = pCallback;
766 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
777 hhcd->MspInitCallback = pCallback;
781 hhcd->MspDeInitCallback = pCallback;
786 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
795 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
822 HAL_StatusTypeDef status =
HAL_OK;
862 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
883 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
893 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
913 HAL_StatusTypeDef status =
HAL_OK;
915 if (pCallback == NULL)
918 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
928 hhcd->HC_NotifyURBChangeCallback = pCallback;
933 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
953 HAL_StatusTypeDef status =
HAL_OK;
965 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
1005 __HAL_HCD_ENABLE(hhcd);
1080 return hhcd->hc[chnum].urb_state;
1093 return hhcd->hc[chnum].xfer_count;
1115 return hhcd->hc[chnum].state;
1158 USB_OTG_GlobalTypeDef *USBx = hhcd->Instance;
1159 uint32_t USBx_BASE = (uint32_t)USBx;
1160 uint32_t ch_num = (uint32_t)chnum;
1164 if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_AHBERR) == USB_OTG_HCINT_AHBERR)
1166 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_AHBERR);
1167 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1169 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_ACK) == USB_OTG_HCINT_ACK)
1171 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_ACK);
1173 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_STALL) == USB_OTG_HCINT_STALL)
1175 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1177 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_NAK);
1178 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_STALL);
1179 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1181 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_DTERR) == USB_OTG_HCINT_DTERR)
1183 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1184 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1185 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_NAK);
1187 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_DTERR);
1194 if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_FRMOR) == USB_OTG_HCINT_FRMOR)
1196 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1197 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1198 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_FRMOR);
1200 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_XFRC) == USB_OTG_HCINT_XFRC)
1202 hhcd->hc[ch_num].state =
HC_XFRC;
1203 hhcd->hc[ch_num].ErrCnt = 0U;
1204 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_XFRC);
1206 if ((hhcd->hc[ch_num].ep_type == EP_TYPE_CTRL) ||
1207 (hhcd->hc[ch_num].ep_type == EP_TYPE_BULK))
1209 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1210 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1211 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_NAK);
1213 else if (hhcd->hc[ch_num].ep_type == EP_TYPE_INTR)
1215 USBx_HC(ch_num)->HCCHAR |= USB_OTG_HCCHAR_ODDFRM;
1216 hhcd->hc[ch_num].urb_state =
URB_DONE;
1218 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 1219 hhcd->HC_NotifyURBChangeCallback(hhcd, (uint8_t)ch_num, hhcd->hc[ch_num].urb_state);
1228 hhcd->hc[ch_num].toggle_in ^= 1U;
1231 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_CHH) == USB_OTG_HCINT_CHH)
1233 __HAL_HCD_MASK_HALT_HC_INT(ch_num);
1235 if (hhcd->hc[ch_num].state ==
HC_XFRC)
1237 hhcd->hc[ch_num].urb_state =
URB_DONE;
1239 else if (hhcd->hc[ch_num].state ==
HC_STALL)
1243 else if ((hhcd->hc[ch_num].state ==
HC_XACTERR) ||
1246 hhcd->hc[ch_num].ErrCnt++;
1247 if (hhcd->hc[ch_num].ErrCnt > 3U)
1249 hhcd->hc[ch_num].ErrCnt = 0U;
1258 tmpreg = USBx_HC(ch_num)->HCCHAR;
1259 tmpreg &= ~USB_OTG_HCCHAR_CHDIS;
1260 tmpreg |= USB_OTG_HCCHAR_CHENA;
1261 USBx_HC(ch_num)->HCCHAR = tmpreg;
1263 else if (hhcd->hc[ch_num].state ==
HC_NAK)
1267 tmpreg = USBx_HC(ch_num)->HCCHAR;
1268 tmpreg &= ~USB_OTG_HCCHAR_CHDIS;
1269 tmpreg |= USB_OTG_HCCHAR_CHENA;
1270 USBx_HC(ch_num)->HCCHAR = tmpreg;
1276 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_CHH);
1279 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_TXERR) == USB_OTG_HCINT_TXERR)
1281 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1282 hhcd->hc[ch_num].ErrCnt++;
1284 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1285 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_TXERR);
1287 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_NAK) == USB_OTG_HCINT_NAK)
1289 if (hhcd->hc[ch_num].ep_type == EP_TYPE_INTR)
1291 hhcd->hc[ch_num].ErrCnt = 0U;
1292 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1293 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1295 else if ((hhcd->hc[ch_num].ep_type == EP_TYPE_CTRL) ||
1296 (hhcd->hc[ch_num].ep_type == EP_TYPE_BULK))
1298 hhcd->hc[ch_num].ErrCnt = 0U;
1299 hhcd->hc[ch_num].state =
HC_NAK;
1300 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1301 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1307 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_NAK);
1324 USB_OTG_GlobalTypeDef *USBx = hhcd->Instance;
1325 uint32_t USBx_BASE = (uint32_t)USBx;
1326 uint32_t ch_num = (uint32_t)chnum;
1329 if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_AHBERR) == USB_OTG_HCINT_AHBERR)
1331 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_AHBERR);
1332 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1334 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_ACK) == USB_OTG_HCINT_ACK)
1336 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_ACK);
1338 if (hhcd->hc[ch_num].do_ping == 1U)
1340 hhcd->hc[ch_num].do_ping = 0U;
1342 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1343 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1346 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_NYET) == USB_OTG_HCINT_NYET)
1348 hhcd->hc[ch_num].state =
HC_NYET;
1349 hhcd->hc[ch_num].do_ping = 1U;
1350 hhcd->hc[ch_num].ErrCnt = 0U;
1351 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1352 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1353 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_NYET);
1355 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_FRMOR) == USB_OTG_HCINT_FRMOR)
1357 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1358 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1359 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_FRMOR);
1361 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_XFRC) == USB_OTG_HCINT_XFRC)
1363 hhcd->hc[ch_num].ErrCnt = 0U;
1364 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1365 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1366 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_XFRC);
1367 hhcd->hc[ch_num].state =
HC_XFRC;
1369 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_STALL) == USB_OTG_HCINT_STALL)
1371 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_STALL);
1372 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1373 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1376 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_NAK) == USB_OTG_HCINT_NAK)
1378 hhcd->hc[ch_num].ErrCnt = 0U;
1379 hhcd->hc[ch_num].state =
HC_NAK;
1381 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1382 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1383 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_NAK);
1385 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_TXERR) == USB_OTG_HCINT_TXERR)
1387 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1388 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1390 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_TXERR);
1392 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_DTERR) == USB_OTG_HCINT_DTERR)
1394 __HAL_HCD_UNMASK_HALT_HC_INT(ch_num);
1395 (void)
USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
1396 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_NAK);
1397 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_DTERR);
1400 else if ((USBx_HC(ch_num)->HCINT & USB_OTG_HCINT_CHH) == USB_OTG_HCINT_CHH)
1402 __HAL_HCD_MASK_HALT_HC_INT(ch_num);
1404 if (hhcd->hc[ch_num].state ==
HC_XFRC)
1406 hhcd->hc[ch_num].urb_state =
URB_DONE;
1407 if ((hhcd->hc[ch_num].ep_type == EP_TYPE_BULK) ||
1408 (hhcd->hc[ch_num].ep_type == EP_TYPE_INTR))
1410 hhcd->hc[ch_num].toggle_out ^= 1U;
1413 else if (hhcd->hc[ch_num].state ==
HC_NAK)
1417 else if (hhcd->hc[ch_num].state ==
HC_NYET)
1421 else if (hhcd->hc[ch_num].state ==
HC_STALL)
1425 else if ((hhcd->hc[ch_num].state ==
HC_XACTERR) ||
1428 hhcd->hc[ch_num].ErrCnt++;
1429 if (hhcd->hc[ch_num].ErrCnt > 3U)
1431 hhcd->hc[ch_num].ErrCnt = 0U;
1440 tmpreg = USBx_HC(ch_num)->HCCHAR;
1441 tmpreg &= ~USB_OTG_HCCHAR_CHDIS;
1442 tmpreg |= USB_OTG_HCCHAR_CHENA;
1443 USBx_HC(ch_num)->HCCHAR = tmpreg;
1450 __HAL_HCD_CLEAR_HC_INT(ch_num, USB_OTG_HCINT_CHH);
1466 USB_OTG_GlobalTypeDef *USBx = hhcd->Instance;
1467 uint32_t USBx_BASE = (uint32_t)USBx;
1474 temp = hhcd->Instance->GRXSTSP;
1475 ch_num = temp & USB_OTG_GRXSTSP_EPNUM;
1476 pktsts = (temp & USB_OTG_GRXSTSP_PKTSTS) >> 17;
1477 pktcnt = (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
1481 case GRXSTS_PKTSTS_IN:
1483 if ((pktcnt > 0U) && (hhcd->hc[ch_num].xfer_buff != (
void *)0))
1485 (void)
USB_ReadPacket(hhcd->Instance, hhcd->hc[ch_num].xfer_buff, (uint16_t)pktcnt);
1488 hhcd->hc[ch_num].xfer_buff += pktcnt;
1489 hhcd->hc[ch_num].xfer_count += pktcnt;
1491 if ((USBx_HC(ch_num)->HCTSIZ & USB_OTG_HCTSIZ_PKTCNT) > 0U)
1494 tmpreg = USBx_HC(ch_num)->HCCHAR;
1495 tmpreg &= ~USB_OTG_HCCHAR_CHDIS;
1496 tmpreg |= USB_OTG_HCCHAR_CHENA;
1497 USBx_HC(ch_num)->HCCHAR = tmpreg;
1498 hhcd->hc[ch_num].toggle_in ^= 1U;
1503 case GRXSTS_PKTSTS_DATA_TOGGLE_ERR:
1506 case GRXSTS_PKTSTS_IN_XFER_COMP:
1507 case GRXSTS_PKTSTS_CH_HALTED:
1520 USB_OTG_GlobalTypeDef *USBx = hhcd->Instance;
1521 uint32_t USBx_BASE = (uint32_t)USBx;
1522 __IO uint32_t hprt0, hprt0_dup;
1526 hprt0_dup = USBx_HPRT0;
1528 hprt0_dup &= ~(USB_OTG_HPRT_PENA | USB_OTG_HPRT_PCDET | \
1529 USB_OTG_HPRT_PENCHNG | USB_OTG_HPRT_POCCHNG);
1532 if ((hprt0 & USB_OTG_HPRT_PCDET) == USB_OTG_HPRT_PCDET)
1534 if ((hprt0 & USB_OTG_HPRT_PCSTS) == USB_OTG_HPRT_PCSTS)
1536 USB_MASK_INTERRUPT(hhcd->Instance, USB_OTG_GINTSTS_DISCINT);
1538 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 1539 hhcd->ConnectCallback(hhcd);
1544 hprt0_dup |= USB_OTG_HPRT_PCDET;
1548 if ((hprt0 & USB_OTG_HPRT_PENCHNG) == USB_OTG_HPRT_PENCHNG)
1550 hprt0_dup |= USB_OTG_HPRT_PENCHNG;
1552 if ((hprt0 & USB_OTG_HPRT_PENA) == USB_OTG_HPRT_PENA)
1554 if (hhcd->Init.phy_itface == USB_OTG_EMBEDDED_PHY)
1556 if ((hprt0 & USB_OTG_HPRT_PSPD) == (HPRT0_PRTSPD_LOW_SPEED << 17))
1567 if (hhcd->Init.speed == HCD_SPEED_FULL)
1569 USBx_HOST->HFIR = 60000U;
1572 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 1573 hhcd->PortEnabledCallback(hhcd);
1574 hhcd->ConnectCallback(hhcd);
1583 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 1584 hhcd->PortDisabledCallback(hhcd);
1590 USBx_HPRT0 &= ~(USB_OTG_HPRT_PENA | USB_OTG_HPRT_PCDET | \
1591 USB_OTG_HPRT_PENCHNG | USB_OTG_HPRT_POCCHNG);
1593 USB_UNMASK_INTERRUPT(hhcd->Instance, USB_OTG_GINTSTS_DISCINT);
1598 if ((hprt0 & USB_OTG_HPRT_POCCHNG) == USB_OTG_HPRT_POCCHNG)
1600 hprt0_dup |= USB_OTG_HPRT_POCCHNG;
1604 USBx_HPRT0 = hprt0_dup;
HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num, uint8_t epnum, uint8_t dev_address, uint8_t speed, uint8_t ep_type, uint16_t mps)
Initialize a host channel.
HAL_StatusTypeDef HAL_HCD_Stop(HCD_HandleTypeDef *hhcd)
Stop the host driver.
HAL_StatusTypeDef HAL_HCD_RegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd, pHCD_HC_NotifyURBChangeCallbackTypeDef pCallback)
Register USB HCD Host Channel Notify URB Change Callback To be used instead of the weak HAL_HCD_HC_No...
USB_OTG_URBStateTypeDef
URB States definition.
HAL_HCD_CallbackIDTypeDef
uint32_t USB_HC_ReadInterrupt(USB_OTG_GlobalTypeDef *USBx)
Read all host channel interrupts status.
HAL_StatusTypeDef USB_DriveVbus(USB_OTG_GlobalTypeDef *USBx, uint8_t state)
USB_DriveVbus : activate or de-activate vbus.
static void HCD_RXQLVL_IRQHandler(HCD_HandleTypeDef *hhcd)
Handle Rx Queue Level interrupt requests.
void HAL_HCD_PortDisabled_Callback(HCD_HandleTypeDef *hhcd)
Port Disabled Event callback.
HCD_HCStateTypeDef HAL_HCD_HC_GetState(HCD_HandleTypeDef *hhcd, uint8_t chnum)
Return the Host Channel state.
void * USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len)
USB_ReadPacket : read a packet from the RX FIFO.
HAL_StatusTypeDef USB_ResetPort(USB_OTG_GlobalTypeDef *USBx)
USB_OTG_ResetPort : Reset Host Port.
HAL_StatusTypeDef HAL_HCD_Init(HCD_HandleTypeDef *hhcd)
Initialize the host driver.
HAL_StatusTypeDef HAL_HCD_ResetPort(HCD_HandleTypeDef *hhcd)
Reset the host port.
This file contains all the functions prototypes for the HAL module driver.
uint32_t HAL_HCD_GetCurrentSpeed(HCD_HandleTypeDef *hhcd)
Return the Host enumeration speed.
HAL_StatusTypeDef USB_InitFSLSPClkSel(USB_OTG_GlobalTypeDef *USBx, uint8_t freq)
USB_InitFSLSPClkSel : Initializes the FSLSPClkSel field of the HCFG register on the PHY type and set ...
void HAL_HCD_MspDeInit(HCD_HandleTypeDef *hhcd)
DeInitialize the HCD MSP.
HAL_StatusTypeDef HAL_HCD_UnRegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd)
UnRegister the USB HCD Host Channel Notify URB Change Callback USB HCD Host Channel Notify URB Change...
HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDef *hc)
Start a transfer over a host channel.
void(* pHCD_CallbackTypeDef)(HCD_HandleTypeDef *hhcd)
uint32_t HAL_HCD_GetCurrentFrame(HCD_HandleTypeDef *hhcd)
Return the current Host frame number.
struct __HCD_HandleTypeDef else typedef struct endif HCD_HandleTypeDef
void(* pHCD_HC_NotifyURBChangeCallbackTypeDef)(HCD_HandleTypeDef *hhcd, uint8_t epnum, HCD_URBStateTypeDef urb_state)
void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd)
Disconnection Event callback.
HCD_URBStateTypeDef HAL_HCD_HC_GetURBState(HCD_HandleTypeDef *hhcd, uint8_t chnum)
Return URB state for a channel.
HAL_StatusTypeDef USB_HC_Halt(USB_OTG_GlobalTypeDef *USBx, uint8_t hc_num)
Halt a host channel.
void HAL_HCD_HC_NotifyURBChange_Callback(HCD_HandleTypeDef *hhcd, uint8_t chnum, HCD_URBStateTypeDef urb_state)
Notify URB state change callback.
HAL_StatusTypeDef HAL_HCD_HC_Halt(HCD_HandleTypeDef *hhcd, uint8_t ch_num)
Halt a host channel.
HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg)
Initializes the USB Core.
HAL_StatusTypeDef HAL_HCD_RegisterCallback(HCD_HandleTypeDef *hhcd, HAL_HCD_CallbackIDTypeDef CallbackID, pHCD_CallbackTypeDef pCallback)
Register a User USB HCD Callback To be used instead of the weak predefined callback.
void HAL_HCD_PortEnabled_Callback(HCD_HandleTypeDef *hhcd)
Port Enabled Event callback.
HCD_StateTypeDef HAL_HCD_GetState(HCD_HandleTypeDef *hhcd)
Return the HCD handle state.
uint32_t USB_GetCurrentFrame(USB_OTG_GlobalTypeDef *USBx)
Return Host Current Frame number.
static void HCD_Port_IRQHandler(HCD_HandleTypeDef *hhcd)
Handle Host Port interrupt requests.
HAL_StatusTypeDef HAL_HCD_HC_SubmitRequest(HCD_HandleTypeDef *hhcd, uint8_t ch_num, uint8_t direction, uint8_t ep_type, uint8_t token, uint8_t *pbuff, uint16_t length, uint8_t do_ping)
Submit a new URB for processing.
void HAL_HCD_IRQHandler(HCD_HandleTypeDef *hhcd)
Handle HCD interrupt request.
HAL_StatusTypeDef HAL_HCD_Start(HCD_HandleTypeDef *hhcd)
Start the host driver.
USB_OTG_HCStateTypeDef
Host channel States definition.
HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx)
Stop Host Core.
void HAL_HCD_MspInit(HCD_HandleTypeDef *hhcd)
Initialize the HCD MSP.
void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd)
Connection Event callback.
HAL_StatusTypeDef HAL_HCD_HC_Init(HCD_HandleTypeDef *hhcd, uint8_t ch_num, uint8_t epnum, uint8_t dev_address, uint8_t speed, uint8_t ep_type, uint16_t mps)
Initialize a host channel.
HAL_StatusTypeDef HAL_HCD_DeInit(HCD_HandleTypeDef *hhcd)
DeInitialize the host driver.
void HAL_HCD_SOF_Callback(HCD_HandleTypeDef *hhcd)
SOF callback.
static void HCD_HC_IN_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum)
Handle Host Channel IN interrupt requests.
HAL_StatusTypeDef USB_SetCurrentMode(USB_OTG_GlobalTypeDef *USBx, USB_ModeTypeDef mode)
USB_SetCurrentMode : Set functional mode.
HAL_StatusTypeDef USB_HostInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg)
USB_HostInit : Initializes the USB OTG controller registers for Host mode.
static void HCD_HC_OUT_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum)
Handle Host Channel OUT interrupt requests.
HAL_StatusTypeDef HAL_HCD_UnRegisterCallback(HCD_HandleTypeDef *hhcd, HAL_HCD_CallbackIDTypeDef CallbackID)
Unregister an USB HCD Callback USB HCD callabck is redirected to the weak predefined callback...
uint32_t HAL_HCD_HC_GetXferCount(HCD_HandleTypeDef *hhcd, uint8_t chnum)
Return the last host transfer size.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
uint32_t USB_GetMode(USB_OTG_GlobalTypeDef *USBx)
Returns USB core mode.
uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef *USBx)
Return Host Core speed.