灵动微mm32f系列的 tinyusb 例程 是怎样进入 suspend 模式的,以及怎样退出的,请根据demo code 指出详细的软件流程步骤
时间: 2023-06-11 18:06:46 浏览: 148
灵动微MM32SPIN系列软件
在 MM32F系列的 tinyusb 例程中,进入 suspend 模式的具体流程如下:
1. 在 main 函数中,调用 `tusb_init()` 函数初始化 TinyUSB 库。
2. 在 `tud_task()` 函数中,TinyUSB 库会调用 `hcd_int_poll()` 函数来监听 USB 中断事件。
3. 当 USB 控制器收到 SUSPEND 命令时,会触发一个 USB 中断事件。在 `hcd_int_poll()` 函数中,如果检测到了 SUSPEND 中断事件,会调用 `usbh_suspend()` 函数进入 SUSPEND 模式。
4. 在 `usbh_suspend()` 函数中,首先会调用 `hcd_int_disable()` 函数禁用 USB 控制器中断,并将 USB 控制器设置为 SUSPEND 模式。然后,会调用 `mcu_sleep()` 函数将 CPU 进入低功耗模式。
5. 在低功耗模式下,CPU 会进入等待状态,等待 USB 控制器的唤醒信号。
6. 当 USB 控制器收到 RESUME 命令时,会触发一个 USB 中断事件。在 `hcd_int_poll()` 函数中,如果检测到了 RESUME 中断事件,会调用 `usbh_resume()` 函数退出 SUSPEND 模式。
7. 在 `usbh_resume()` 函数中,首先会调用 `hcd_int_enable()` 函数使能 USB 控制器中断,并将 USB 控制器设置为正常模式。然后,会调用 `usbh_control_xfer()` 函数发送一个 GET_STATUS 控制命令,以确认 USB 设备是否已经准备好恢复传输。
8. 如果 USB 设备已经准备好恢复传输,就会重新开始 USB 数据传输。
总结来说,进入 SUSPEND 模式的流程就是禁用 USB 控制器中断,并将 CPU 进入低功耗模式。退出 SUSPEND 模式的流程就是使能 USB 控制器中断,并发送一个 GET_STATUS 控制命令以确认 USB 设备是否已经准备好恢复传输。
阅读全文