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:在器件模式下为 USB 注册的 ISR 永远不会被调用

Guru**** 2481465 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/696578/ek-tm4c123gxl-isr-registered-for-usb-in-device-mode-never-get-invoked

器件型号:EK-TM4C123GXL

我使用的是 Tiva C 系列 launchpad EK-TM4C123GXL,配备了 TM4C 123GPMH MPU。
我正在尝试对 USB 批量设备操作进行编码。 示例不起作用-根据 dmesg 无法枚举。 因此、我 没有机会使用提供的 libusb。 所以,我戴上眼镜,开始编码。
我使用以下代码初始化 USB0。 我的 ISR 不执行任何操作、而是浅蓝色 LED。 猜猜猜会怎么样-无论我做什么、连接/断开电缆、都尝试枚举器件。 从未调用过 ISR、LED 未亮起。
请指引我或提示我的错误。 感谢您的任何帮助。

#define USB_PINDM GPIO_PIN_4 /* portD GPIO 引脚4 GPIO_PIN_4 d-*/
#define USB_PINDP GPIO_PIN_5 /* portD GPIO 引脚5 GPIO_PIN_5 d+*/

#define USB_PINID GPIO_PIN_0 /* PORTB GPIO 引脚4 GPIO_PIN_0+/+++

配置 USB++++++++++++++++++++++++









外设使能(sysctl_Periph_GPIOD);//信号线 while (!SysCtlPeripheralReady (SYSCtl_Periph_GPIOD);//信号线 GPIO_Periph_GPIOD);// VBUS*/ while (!VBUS_PTOP0*
);GPUS_GPIOB_PINUS_INTOP0*(US_GPIOB_PH_GPIOB_GPB);







SysCtlUSBPLLEnable();
USBClockEnable (USB0_BASE、7/*8*/、USB_CLOCK _INTERNAL);
IntDisable (INT_USB0);
USBIntDisableControl (USB0_BASE、(uint32_t) USB_INTCTRL_ALL);/*通过毛刺脉冲防止中断*/
USBIntRegister (USB0_BASE、USB0_ISR_Handle);//寄存器回调*/
USBIntEnableControl (USB0_BASE、USB_INTCTRL_RESET |复位
USB_INTCTRL_DISCONNECT |
USB_INTCTRL_RESUME |
USB_INTCTRL_SUSPEND |
USB_INTCTRL_SOF);

IntEnable (INT_USB0);
USBIntEnableEndpoint (USB0_BASE、USB_EP_0);
USBIntEnableEndpoint (USB0_BASE、USB_EP_1); 

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

    您是否正在使用 TIvaWare 示例? USB_DEV_BULK?

    如果是、则可能是枚举问题、因为您没有安装正确的 USB 驱动程序。

    请从 software-dl.ti.com/.../SW-TM4C-2.1.4.178.PATCH-1.0.zip 获取我们的最新驱动程序 、然后通过设备管理器进行安装。 您可能需要手动安装它们。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ralph、非常感谢您付出的时间和努力! 我下载了 zip 文件。 它包含 Windows 驱动程序、我正在使用 Linux 操作系统。 我想问题是 libusb 本身。 实际上、根据我的理解、枚举发生在调用驱动程序之前、因此枚举在内核级别完成、然后加载驱动程序以确定需要将哪个驱动程序用于特定器件... 因此、libusb 应该独立于操作系统。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alexander、

    我看到、我不知道您是在 Linux 上、是的、我共享的驱动程序专门用于 Windows。 尽管如此、TM4C USB 库可用于 Linux 中的枚举、我们只是没有 TI 提供的 Linux 驱动程序。 但是、许多客户成功地出于 Linux 目的修改了 TI 驱动程序、并且不需要更改 USB 库代码。

    下面是一篇 E2E 文章、在一些指导下、社区成员能够制作所需的 USB 驱动程序、也可以参考 您想要使用的确切示例:https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/612214/2254101#2254101

    另外、 在 Linux USB 驱动程序方面为他人提供帮助的一个常见共享资源是:https://kernel.readthedocs.io/en/sphinx-samples/writing_usb_driver.html

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ralph、感谢您的输入、但我的问题不是操作系统驱动程序! 但在板上闪存的相当软... 顺便说一下、我再次尝试了 usblib 和 dev_bulk 示例。 现在我甚至无法编译代码,因为要列出的错误太多。 D 您知道我可以在哪里下载最新和最优秀的示例和库? 再说一次、我肯定的是、它不是操作系统驱动程序、它是板载代码或单元本身、您能解释一下、请说明为什么从未调用过 ISR?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Alexander、

    库和软件示例可从 http://www.ti.com/tool/SW-TM4C 下载

    刚刚运行代码、它在 Windows 上运行正常、正确枚举为 TivaWare 批量驱动程序。

    请注意、您需要将 USB 电缆插入器件端口、LaunchPad 才能看到它。 如果要同时进行编程并查看、则需要两根电缆。 如果只有一个、则对器件进行编程、然后将电缆切换至器件端口、并将交换机翻转至器件。

    关于 ISR、您是指 USB0DeviceIntHandler 吗? 如果是、这是因为 USB0DeviceIntHandler 位于 usblib 的库文件中、因此除非您手动取消链接库并将所有需要的 USB 文件链接到项目中、否则您将无法进入 ISR、因为它打包在库文件中。 尽管您需要查看 USB Get 调用的 ISR 的原因仍然不清楚、因为我以前没有将其作为一个问题提出...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、非常感谢您抽出宝贵的时间参加本次活动。 我对你的链接进行了粗略的设计、看起来是库

     我已从同一页安装的...
    我正在使用 USBIntRegister (USB0_BASE、USB0_ISR_Handle);API 函数来注册 ISR、我尝试在启动文件的矢量数组中对其进行硬编码、结果是相同的-从未调用过 ISR。
    我之所以选择这个 API、是因为我需要根据自己的需求开发 USB 通信、并且我必须评估是否可以将 TI 的处理器用于此目的。

    监视是否调用 ISR 只是开发例程过程中的第一个检查点。
    谢谢、

    Alex。

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

    这对我来说解释得更多。

    我们的 USB 示例基于我们的 usblib、而您尝试使用 driverlib 中的 usb.c/usb.h 文件。 在我们提供这些文件以完成我们的服务时、您应该使用 usblib 来确定如何开发定制的 USB 固件。 这就是我们所有客户开发 USB 应用的方式。

    批量器件模式的 ISR 由 USB0DeviceIntHandler 处理、后者是 USB 器件应用中使用的 USB 中断处理程序的主要入口点。 此函数包含在 usbdhandler.c 中、您可以在此处阅读其完整说明。

    我建议您阅读 docs 文件夹中的 TivaWare USB 库文档、以便您熟悉完整的 USB 库。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Alexander、

    您在这方面是否取得了任何进展? 我们是否仍然需要保持该线程处于打开状态、或者我是否可以继续并关闭它?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alexander、

    我想 Ralph 想说(间接)的意思      是、您主要是为 USB0配置 GPIO、但尚未初始化目标批量器件驱动程序以建立连接 Linux OS 的端点管道。 您可以 修改 Visual Studio 的 USB 批量器件项目文件、  这是从编译(USB_bulk_example.vcproj/exe)中键入的字符回显示例、它不是 Linux IPM。 目标 USB 代码是 Tiva 批量器件(USB_dev_bulk.c) 、您可以 通过 CCS 对其进行修改。 批量器件示例可能位于 Tivaware 库文件的示例文件夹中、它以前是单独下载的、 现在不再看到它列出 (单独列出)、而 是以前的内容。 它 现在可以捆绑在 USB 库文件中。

    software-dl.ti.com/.../index_FDS.html