主题中讨论的其他器件:TM4C123
即使批量 USB0DeviceIntHandler()已在 Startup_ccs.c 中注册,它也会出现。 它不处理事件挂起或指示 恢复,并且显然没有从 USBDeviceIntHanderInternal()调用它。 相反,只有 pfnReceive 回调处理程序打印 状态 事件消息,而不显示 定义 的 ui32MsgValue 值, 而是 随机整数。 并且 我在内部中断处理程序中添加的暂停/恢复打印消息 永远不会发生。 这需要在空闲端点1 总线时间为3ms 时拔下 USB 电缆。
因此 、3ms 的空闲总线时间(挂起模式)主机将状态消息发送 至 挂起传输、 它永远不 会恢复。 我无法理解为什么 (USB_bulk_structs.c) 以任何方式通过设置以下所示的已注册硬件中断来构造 RxHandler (pfnCallback)。 如果 配置了硬件恢复/暂停中断、 它们应该置为有效来处理主机发送的暂停/恢复条件、对吧?
https://www.beyondlogic.org/usbnutshell/usb2.shtml#SuspendCurrent
否则、USBDCDInit()将启用下面显示的控制中断、但它们不会发出!
// //仅在堆栈不处于 OTG 模式时进行硬件更新。 // if (g_iUSBMode!= eUSBModeOTG) { // //获取当前中断状态。清除所有挂起的 USB //中断。 // MAP_USBIntStatusControl (USB0_BASE); MAP_USBIntStatusEndpoint (USB0_BASE); // //启用 USB 中断。 // MAP_USBIntEnableControl (USB0_BASE、USB_INTCTRL_RESET | USB_INTCTRL_DISCONNECT | USB_INTCTRL_RESUME | USB_INTCTRL_SUSPEND | USB_INTCTRL_SOF | USB_INTCTRL_VBUS_ERR); MAP_USBIntEnableEndpoint (USB0_BASE、USB_INTEP_ALL);