This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] EK-TM4C123GXL:来自 TI#39的此中断禁用/使能对游戏示例项目是否实现了任何功能?

Guru**** 1794070 points
Other Parts Discussed in Thread: EK-TM4C123GXL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/574141/ek-tm4c123gxl-does-this-interrupt-disable-enable-pair-from-ti-s-gamepad-example-project-accomplish-anything

器件型号:EK-TM4C123GXL

来自 此堆栈溢出问题的 X-POST。

此代码来自 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();
}
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Nicholas

    我认为你是对的。 这可能是一个错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当我最初提出问题时,我提到只包装 USBDHIDGameadSendReport()函数,但堆栈溢出指出,空闲 TX 事件可能会在发送报告和更改为发送状态枚举之间返回, 这将永远不会离开发送状态。 这种解释似乎对为什么首先出现禁用/使能中断对最有意义。