Handle Host Channel IN interrupt requests.
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);
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.