[feat][usbd] add support for suspend and resume usbd interrupts

This commit is contained in:
Iscle 2023-01-23 02:31:36 +01:00 committed by sakumisu
parent 607c24d7fe
commit 3652f3584a
2 changed files with 18 additions and 0 deletions

View File

@ -143,6 +143,14 @@ int usbd_ep_start_read(const uint8_t ep, uint8_t *data, uint32_t data_len);
/* usb dcd irq callback */ /* usb dcd irq callback */
/**
* @brief Usb resume irq callback.
*/
void usbd_event_resume_handler(void);
/**
* @brief Usb suspend irq callback.
*/
void usbd_event_suspend_handler(void);
/** /**
* @brief Usb reset irq callback. * @brief Usb reset irq callback.
*/ */

View File

@ -530,6 +530,8 @@ int usb_dc_init(void)
/* enable rst/tx0/rx0 irq in source group2 */ /* enable rst/tx0/rx0 irq in source group2 */
regval = 0xffffffff; regval = 0xffffffff;
regval &= ~USB_MUSBRST_INT; regval &= ~USB_MUSBRST_INT;
regval &= ~USB_MSUSP_INT;
regval &= ~USB_MRESM_INT;
regval &= ~USB_MTX0BYTE_INT; regval &= ~USB_MTX0BYTE_INT;
regval &= ~USB_MRX0BYTE_INT; regval &= ~USB_MRX0BYTE_INT;
putreg32(regval, BLFB_USB_BASE + USB_DEV_MISG2_OFFSET); putreg32(regval, BLFB_USB_BASE + USB_DEV_MISG2_OFFSET);
@ -888,6 +890,14 @@ void USBD_IRQHandler(int irq, void *arg)
if (dev_intstatus & USB_INT_G2) { if (dev_intstatus & USB_INT_G2) {
subgroup_intstatus = bflb_usb_get_source_group_intstatus(2); subgroup_intstatus = bflb_usb_get_source_group_intstatus(2);
if (subgroup_intstatus & USB_SUSP_INT) {
bflb_usb_source_group_int_clear(2, USB_SUSP_INT);
usbd_event_suspend_handler();
}
if (subgroup_intstatus & USB_RESM_INT) {
bflb_usb_source_group_int_clear(2, USB_RESM_INT);
usbd_event_resume_handler();
}
if (subgroup_intstatus & USB_TX0BYTE_INT) { if (subgroup_intstatus & USB_TX0BYTE_INT) {
for (uint8_t i = 1; i < 5; i++) { for (uint8_t i = 1; i < 5; i++) {
if (bflb_usb_get_tx_zlp_intstatus() & (1 << (i - 1))) { if (bflb_usb_get_tx_zlp_intstatus() & (1 << (i - 1))) {