请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:EK-TM4C123GXL 此代码来自 TI 的 EK-tm4c123gxl USB-dev-gamepad CCS 示例、在中断禁用/启用对中将易失性枚举分配包装到 g_iGamepadState。 对我来说,它看起来像是一个错误;它应该包装发送报告函数 USBDHIDGamepadSendReport()以防止发送中途中断。 正如我假设的那样、它可以防止单个存储指令中断、这是冗余的。
下面是引用枚举的所有代码...
volatile enum{ eStateNotConfigured、 //尚未配置。 eStateIdle、 //已连接,不等待要发送的数据 eStateSuspend、 //暂停 eStateSending //已连接,正在等待要发送的数据 } g_iGamepadState; ... // // //处理来自 HID 游戏驱动程序的异步事件。 // //\param pvCBData 是 // USBDHIDGamepadInit()期间提供的事件回调指针。 这是指向游戏 epad 设备结构 //(&g_sGamepadDevice)的指针。 //\param ui32event 标识我们被回叫的事件。 //\param ui32MsgData 是特定于事件的值。 //\param pvMsgData 是特定于事件的指针。 // //此函数由 HID gamepad 驱动程序调用,以通知应用 //与 gamepad HID //设备操作相关的特定异步事件。 // //\return 在所有情况下返回0。 //// ***************** uint32_t GamepadHandler (void * pvCBData、uint32_t ui32事件、 uint32_t ui32MsgData、void *pvMsgData){ switch (ui32event){ 案例 USB_EVENT_Connected:{ G_iGamepadState = eStateIdle; 中断; } 案例 USB_EVENT_DISCONNECTED:{ G_iGamepadState = eStateNotConfigured; 中断; } 案例 USB_EVENT_TX_COMPLETE:{ G_iGamepadState = eStateIdle; 中断; } 案例 USB_EVENT_SUSPEND:{ G_iGamepadState = eStateSuspend; 中断; } 案例 USB_EVENT_RESUME:{ G_iGamepadState = eStateIdle; 中断; } (笑声) 默认值:{ 中断; } } 返回(0); }... int main (void){ (笑声) //最初未配置。 G_iGamepadState = eStateNotConfigured; (笑声) while (1){ // //在这里等待,直到 USB 设备连接到主机。 // if (g_GamepadState =eStateIdle){ (笑声) USBDHIDGamepadSendReport (&g_sGamepadDevice、&sReport、 sizeof (sReport)); // //现在正在发送数据,但保护它不受中断的影响,因为 //它也可以在中断上下文中更改。 // IntMasterDisable(); G_iGamepadState = eStateSending; IntMasterEnable(); } }