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.

[参考译文] RTOS/TMS320C6748:在 TI-RTOS 中使用 GPIO 作为 HWI 源

Guru**** 2539500 points
Other Parts Discussed in Thread: SYSBIOS, OMAP-L138, TMS320C6748

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/780536/rtos-tms320c6748-using-gpio-for-hwi-source-with-ti-rtos

器件型号:TMS320C6748
主题中讨论的其他器件:SYSBIOSOMAP-L138OMAPL138

工具/软件:TI-RTOS

我将 CCS 8.3与 SYS/BIOS 6.73.1.01搭配使用。  我正在尝试设置几个 GPIO 引脚以用作 HWI 的源。 现在、我将 LCDK 用于 C6748。  我能够使用 ti/sysbios/hal/hwi 支持按照我想要的方式配置 HWI。  但我很困惑如何配置 GPIO 线路。  器件页面上的 TI-RTOS 培训视频充分介绍了如何使用 SYS/BIOS 设置 HWI 和 SWI、并提到您可以将 GPIO 线路配置为 HWI 事件源、但不介绍如何进行 GPIO 配置部分。

C6748技术参考手册概述了需要对寄存器执行的操作、但 SYS/BIOS 中是否有任何支持来执行此操作?  我觉得应该有一种比我自己定义所有寄存器和寄存器位、然后编写低级驱动程序更好的方法。

我看到 Starterware 具有一些低级 GPIO 支持、但我不清楚 Starterware 是否与 SYS/BIOS 兼容、或者支持函数是否包括能够将 GPIO 事件与 HWI 事件关联。  我还看到了一个 BIOSPSP 驱动程序包、但我不清楚这是如何与 SYS BIOS 和 Starterware 兼容的、尽管 BIOSPSP 的文档确实指出它需要 Starterware。

在任何情况下、我现在已经阅读文档和观看视频了数周、我认为事情变得越来越清晰。

我计划将 TI-RTOS 与 HWI 和 SWI 一起使用(包括中断链接)。  是否有任何示例应用将 GPIO 用作 HWI 源?  我觉得这应该比较常见。

如果您能提供有关如何开始使用的建议、我们将不胜感激。

谢谢

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

    尊敬的 David:

    我们建议您开始使用 Processor SDK RTOS。

    http://www.ti.com/tool/PROCESSOR-SDK-C6748

    处理器 SDK 培训系列可在此处找到:

    https://training.ti.com/processor-sdk-training-series

    在 Processor SDK RTOS 中、您可以参考一个 GPIO LedBlink 示例。 需要使用 SDK 中提供的脚本将其内置到 CCS 工程中。

    有关更多详细信息、请参阅 Processor SDK 文档:  

    专门针对 GPIO 模块的文档可在此处找到:

    若要构建基于 CCS 的 GPIO 示例工程、请执行以下步骤:

    但愿这对您有所帮助。 如果您有任何疑问、请告知我们。

    此致、
    Sahin

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

    我使用的是 Processor SDK。  您是否说该 SDK 随附的 OMAP 188 PDK 驱动程序也与 C6748单机版兼容?  示例 LED 项目使用 GPIO 从 HWI 驱动 LED。  我专门想了解如何将 GPIO 输入与将触发 HWI 的事件相关联。

    我将在 main 中创建 HWI、如下所示:

       //设置硬件中断
       Hwi_Params rxSampleHwiParams;
       HWI_Handle rxSampleHwi;
       ERROR_Block rxSampleEb;

       error_init (&rxSampleEb);
       Hwi_Params_init (&rxSampleHwiParams);

       rxSampleHwiParams.arg = 0;
       rxSampleHwiParams.enableInt = false;
       rxSampleHwiParams.EventID = 49;// GPIO 组2
       rxSampleHwiParams.priority = 4;

       rxSampleHwi = Hwi_create (4、rxSampleIsr、
                                &rxSampleHwiParams、&rxSampleEb);

    我不了解如何设置 GPIO 引脚来触发 HWI 正在等待的事件。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我需要知道在哪里记录了如何将 GPIO 线配置为触发 HWI 的事件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    是的、OMAP-L138是一款 ARM + C6748 DSP 器件、因此 DSP 示例项目可在独立的 C6748上运行。  

    您可能需要根据要使用的 GPIO 引脚更改引脚多路复用。 默认引脚多路复用可在 ~\pdk_omapl138_1_0_7\packages/ti\board\src\lcdkOMAPL138\lcdkOMAPL138_pinmux.c 中找到  

    如果需要、有一个引脚多路复用工具可以帮助实现这一点:

    http://www.ti.com/lit/an/sprab63b/sprab63b.pdf

    如果引脚多路复用已更改、则需要重建电路板库。 这可以通过运行 setupenv 脚本并从 Processor SDK RTOS 文件夹中调用"gmake board"来实现。  

    默认情况下、GPIO LED 闪烁示例使用2个 GPIO 引脚。 第一个引脚被用来定期生成一个中断。 第二个引脚是连接到板载 LED 的输出引脚、该 LED 在中断 ISR 内的低电平和高电平之间切换、从而驱动 LED。 第一个引脚不接受任何外部输入,但使用软件写入寄存器以生成中断。 我们可以对其进行修改、以接受外部事件并触发中断。

    在 GPIO_board.c 中、将引脚更改为输入。 另请注意、上升沿配置为生成中断:

    /*启用中断的输入引脚*/
    GPIO_DEVICE_CONFIG (GPIO_LED0_PORT_NUM、GPIO_LED0_PIN_NUM)|
    GPIO_CFG_IN_INT_INT_RISING | GPIO_CFG_INPUT、 

    在 board_cfg.h 中、将 GPIO_LED0_PIN_NUM 更改为要使用的引脚。

    在 C6748上、您只能为整个组而不是单个引脚注册中断。 每个 GPIO 组的事件编号可在数据表的表6-6中找到。 这就是将 HWI 连接到 GPIO 的原因。 每组有16个 GPIO 引脚。 TRM 中的表21-2列出了组及其相关引脚。  

    此致、
    Sahin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您看一下上面的代码、您会发现我确实按照 TRM 中的表2-1为 GPIO 组分配了 HWI GPIO 组(我认为您引用的是21.2、这是一个拼写错误、因为这似乎是 DMA 的寄存器配置)。

    不过、我仍然对 ISR 例程感到困惑。 如果我为与 GPIO 组相对应的事件设置 HWI、ISR 中定义的 HWI ISR 与 GPIO_V0_Config 中定义的 GPIO 回调函数有何关系? 我是否应该没有 GPIO 回调函数、但取决于触发 HWI、然后是 HWI ISR 的事件#?

    由于我只能将 HWI 分配给一组 GPIO、因此连接到 GPIO 的每个 HWI 是否需要位于不同的组中?

    谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想我已经接近了。 我确实让 GPIO 示例从 CCS 运行、并且 LED 闪烁。 我只是对 HWI 函数与 GPIO 回调函数感到困惑。 GPIO 中断回调函数与 HWI 函数有何关系?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 David:

    GPIO 驱动程序负责为您提供 HWI。 您可以在~\pdk_omapl138_1_0_7\packages/ti\drv\gpio\src\v0\gpio_v0.c 中查看其实现

    您只需将 GPIO 设置为输入、以便它可以接收外部输入、然后修改 GPIO 回调函数、以便在 GPIO 中断触发时执行所需的任何操作。

    此致、
    Sahin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦、这很有趣。 是否有任何文档真正描述了 GPIO 驱动程序 API? 我所读过的任何内容都没有说明过这一点。 是否可以控制 HWI 的使用方式(指定 HWI 编号、HWI 的屏蔽属性等)? 基本上、您可以对具有 XDC 控制的 HWI 执行什么操作? 如果我使用 GPIO 驱动程序设置 HWI、我是否可以返回 HWI 编号、以便可以设置 HWI 的其他属性? 我需要一些 HWI 可由其他 HWI 中断、而某些 HWI 具有更高的优先级、其中它们只能由复位或 NMI 中断。

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

    您好~

    我是否可以获得一些有关配置/查找 EventID 的信息?  我对硬件中断矢量和 Hwi 的 EventID 之间的关系感到困惑。

    实际上、在从寄存器操作迁移到 TI-RTOS 编程的情况下、这个问题在新手用户中是很常见的。

    谢谢。

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

    《TMS320C6748技术参考指南》中的表2-1显示了相关事件。  www.ti.com/.../spruh79c.pdf

    您需要使用事件 ID 和优先级(中断编号)来配置 HWI 参数。   

    下面是 HWI 设置的部分示例。  请注意、如果使用 GPIO 事件、可能还需要配置 GPIO 设置。 此代码将用于常规函数、而不是 XDC 配置、后者使用的语法稍有不同。  

    Hwi_Params HwiParams;
    hwi_handle hwi;
    ERROR_Block hwiEb;
    
    ERROR_INIT (&hwiEb);
    Hwi_Params_init (hwiParams);
    
    hwiParams.arg = 0;
    hwiParams.enableInt = true;
    hwiParams.EventID = 75;// GPIO 组8事件
    hwiParams.priority = 4;//最高优先级可屏蔽
    hwiParams.maskSetting = Hwi_MaskingOption_none;
    
    Hwi = Hwi_create (4、hwiIsr、&hwiParams、&hwiEb); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用 GPIO 驱动程序、可以使用 GPIO_V0.h 中定义的 GPIO_IntCfg 结构设置 EventID 和中断编号 您可以参阅 main_led_blink.c 以获取有关此示例的信息。

    可以使用 GPIO_V0.h 中定义的 GPIO_V0_Config 结构来设置中断优先级 您也可以参阅 GPIO_board.c 以获取有关该示例的信息。

    HWI 在 GPIO_V0.c 中的 GPIO_setConfig_V0 ()内创建 如果您需要对驱动程序进行特定于应用的更改、以便不必使用 gmake 重新编译 GPIO 驱动程序、则可以将此文件放入 CCS 工程中。

    希望这对您有所帮助。

    此致、
    Sahin