[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 */
/**
* @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.
*/

View File

@ -530,6 +530,8 @@ int usb_dc_init(void)
/* enable rst/tx0/rx0 irq in source group2 */
regval = 0xffffffff;
regval &= ~USB_MUSBRST_INT;
regval &= ~USB_MSUSP_INT;
regval &= ~USB_MRESM_INT;
regval &= ~USB_MTX0BYTE_INT;
regval &= ~USB_MRX0BYTE_INT;
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) {
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) {
for (uint8_t i = 1; i < 5; i++) {
if (bflb_usb_get_tx_zlp_intstatus() & (1 << (i - 1))) {