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.

[参考译文] CCS/PROCESSOR-SDK-AM65X:如何使用 RTOS GPIO API

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/914664/ccs-processor-sdk-am65x-how-to-use-rtos-gpio-api

器件型号:PROCESSOR-SDK-AM65X

工具/软件:Code Composer Studio

你好

我想控制 AM65x EVM IDK 上的 GPIO 输出。 我调查 RTOS 模板应用程序以了解 GPIO API。

我对 GPIO API 有一些伺服问题。

GPIO_socGetInitCfg()和 GPIO_socSetInitCfg()的用法是什么? 如果我们在调用 GPIO_write()等函数之前不调用它、会发生什么情况?

//在 main.c
中 void Board_initGPIO (void)
{
GPIO_V0_HwAttrs GPIO_cfg;

/*获取默认的 SPI 初始化配置*/
GPIO_socGetInitCfg (GPIO_LED0_PORT_NUM、&GPIO_cfg);

/*如有必要,修改默认 GPIO 配置*/
GPIO_configIntRouter (GPIO_LED0_PORT_NUM、GPIO_LED0_PIN_NUM、0、&GPIO_cfg);

/*设置默认的 GPIO 初始化配置*/
GPIO_socSetInitCfg (GPIO_LED0_PORT_NUM、&GPIO_cfg);
} 

2、大多数 GPIO API 的参数只包含索引信息、不包含域信息。 这些功能如何帮助我们设置特定的 GPIO 引脚。
   此外、在 app.c 中、它将 枚举器- USER_LED0传递给 GPIO_TOGGLE ()。 为什么它不传递目标 LED 的 GPIO 索引?

//在 GPIO_board.h
中、typedef 枚举 GPIO_LED{
USER_LED0 = 0、
USER_LED1
}GPIO_LED;

//在 app.h
中#define TEST_LED_GPIO_INDEX USER_LED0

//在 app.c
中 void GPIO_TOGGLE_LED_TASK (UARG arg0、UARG arg1)
{

appPrint ("\n GPIO_toggle_led 任务已启动");
while (1){
/*切换连接到 LED 的测试 GPIO */
GPIO_TOGGLE (TEST_LED_GPIO_INDEX);

/*设置脉冲周期的延迟*/
Task_sleep (LED_BLINK 延迟值);

/*如果触发了 End Test (结束测试),则退出
*注意:可通过 UART 通过命令触发结束测试
*
IF (g_endTestTrigged)
中断;
};
appPrint ("\n GPIO_TOGGLE_LED 任务已结束");
Task_exit();
}

模板中有一些宏、如"GPIO_LED0_PORT_NUM"。 "端口"一词的定义是什么。
   我在 AM65x 技术参考中找不到(或者我错过了)它。 "端口"是否与"组"相关?

此致。

ChingWei

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

    您好、ChingWei、

     中提供了一个 GPIO 示例 \packages/ti\drv\gpio\test\led_blink。 此示例将在 A53和 R5F 上构建并执行。

    [引用 user="ChingWei Huang"] GPIO_socGetInitCfg ()和 GPIO_socSetInitCfg ()的用法是什么?[/quot]

    提供这些 API 函数的目的是使应用能够更改 GPIO 硬件模块的默认驱动程序配置。 默认配置位于中 \packages/ti\drv\gpio\soc am65xx\gpio_soc.c、gpio_v0_hwAttrs。 使用这些函数、应用程序:

    • 使用 GPIO_socGetInitCfg()读取 GPIO_V0_hwAttrs 中的默认配置。
    • 通过根据需要覆盖返回的桩模成员来更新 GPIO_socGetInitCfg()返回的配置
    • 使用 GPIO_socSetInitCfg()将更新配置写回 GPIO_V0_hwAttrs。

    [引用 user="ChingWei Huang"]如果我们在调用 GPIO_write()等函数之前不调用它,会发生什么情况?

    应用程序将使用 GPIO 硬件模块的默认驱动程序配置。

    [引用 USER="ChingWei Huang">大多数 GPIO API 的参数只包含索引信息,不包含域信息。  [/报价]

    GPIO 驱动程序不会保留域特定的信息。 要在特定域(例如 WKUP_GPIO0)中使用 GPIO、应调用 GPIO_socGetInitCfg ()和 GPIO_socSetInitCfg () API 函数来更新所需端口的基址(例如、对于 WKUP_GPIO0、为端口0更新基址)。 这可以在上面提到的 R5F 示例中看到、请参阅函数 Board_initGPIO()。

    大多数 GPIO API 函数的 index 参数是应用定义表的索引、其中包含 GPIO 引脚配置。 例如、请参阅 \packages/ti\drv\gpio\test\led_blink\am65xx\gpio_board.c. index 参数用于索引到 gpioPinConfigs[]表中。 可以修改 GPIO_board.c 的内容以添加更多 GPIO、或更改现有 GPIO 的配置。

    [引用用户="ChingWei Huang"]这些函数如何帮助我们设置特定的 GPIO 引脚?

    特定引脚配置包含在 GPIO_board.c 中的数组 gpioPinConfigs[]和 gpioCallbackFunctions[]中、用于特定应用。

    [引用 user="ChingWei Huanga">此外,在 app.c 中,它会将枚举器- USER_LED0传递给 GPIO_toggle ()。 为什么它不传递目标 LED 的 GPIO 索引?[/quot]

    该索引用于 gpioPinConfigs[]。 gpioPinConfigs[]中的相应条目应包含与 LED 相关的端口和引脚编号。

    [引用用户="ChingWei Huanga">模板中有一些宏、如"GPIO_LED0_PORT_NUM"。 "港口"一词的定义是什么? 我在 AM65x 技术参考中找不到(或者我错过了)它。 "端口"是否与"银行"相关?[/quot]

    端口是 GPIO 硬件模块、即

    • 2个用于主域、GPIO0和 GPIO1
    • 1个用于 WKUP 域、WKUP_GPIO0

    每个端口有多个组、每个组有16个引脚、请参阅 TRM、12.1.2.1 GPIO 概述。

    此致、
    弗兰克

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

    你(们)好、Frank

    感谢你的答复。 它对我们有很大帮助!

    因此、我们似乎需要构建 GPIO 配置来告知 API 我们要使用哪种 GPIO。

    我们无法在运行时访问新的 GPIO (未包括在 GPIO 配置中)。

    如果我们已经为应用构建了自己的 GPIO 配置,则 不再需要调用 GPIO_socGetInitCfg()和 GPIO_socSetInitCfg()。

    例如、如果我要创建一个 AM65x 应用、该应用将控制 WKUP_GPIO0、GPIO0、GPIO1。

    我首先在 am65xx/GPIO_SoC.c 中更改 GPIO_V0_hwAttrs 和 GPIO_config

    /* GPIO 驱动程序硬件属性*/
    GPIO_V0_hwAttrsList GPIO_V0_hwAttrs =
    {
    {
    CSL_WKUP_GPIO0_BASE、
    GPIO_intCfgs[0]、
    &GPIO_socConfigIntraPath、
    }、
    
    {
    CSL_GPIO0_BASE、
    GPIO_intCfgs[1][0]、
    &GPIO_socConfigIntraPath、
    }、
    
    {
    CSL_GPIO1_base、
    GPIO_intCfgs[2][0]、
    &GPIO_socConfigIntraPath
    、}
    };
    
    /* GPIO 配置结构*/
    CSL_public_const GPIOConfigList GPIO_config =
    {
    {
    GPIO_FxnTable_V0、
    null、
    &GPIO_V0_hwAttrs[0]
    }、
    
    {
    GPIO_FxnTable_V0、
    null、
    GPIO_V0_hwAttrs[1]
    }、
    
    {
    GPIO_FxnTable_V0、
    null、
    &GPIO_V0_hwAttrs[2]
    }
    }; 

    在这种情况下、端口0将引用 WKUP_GPIO0、端口1将引用 GPIO0、端口2将引用 GPIO1。

    接下来、我更改 board.c 中的 gpioPinConfigs

    #define WKUP_GPIO0_PORT_NUM (0 << 8)
    #define GPIO0_PORT_NUM  (1 << 8)
    #define GPIO1_PORT_NUM (2 << 8)
    
    /* GPIO 驱动器板特定引脚配置结构*/
    GPIO_PinConfig gpioPinConfigs[]={
    WKUP_GPIO0_PORT_NUM | WKUP_GPIO15_PIN_NUM | GPIO_CFG_OUTPUT、
    WKUP_GPIO0_PORT_NUM | WKUP_GPIO16_PIN_NUM | GPIO_CFG_OUTPUT、
    GPIO0_PORT_NUM | GPIO0_12_PIN_NUM | GPIO_CFG_OUTPUT、
    GPIO1_PORT_NUM | GPIO1_2_PIN_NUM | GPIO_CFG_OUTPUT
    、};
    
    // GPIO 驱动程序回调函数*/
    GPIO_CallbackFxn gpioCallbackFunctions[]={
    null、
    null、
    null、
    空、
    };
    
    /* GPIO 驱动程序配置结构*/
    GPIO_V0_Config GPIO_V0_CONFIG ={
    gpioPinConfigs、
    GpioCallbackFunctions、
    sizeof (gpioPinConfigs)/sizeof (GPIO_PinConfig)、
    sizeof (gpioCallbackFunctions)/ sizeof (GPIO_CallbackFxn)、
    0、
    }; 

    因此、

    GPIO_TOGGLE (0);//这将切换 WKUP_GPIO0:GPIO-15
    GPIO_TOGGLE (1);//这将切换 WKUP_GPIO0:GPIO-16
    GPIO_TOGGLE (2);//这将切换 GPIO0:GPIO-12
    GPIO_TOGGLE (3);//这将切换 GPIO1:GPIO-2 

    我的想法是否正确?

    此致。
    ChingWei

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

    ChingWei、

    我将再次检查这个线程、这个线程看起来尚未完全关闭。 您是否能够解决您的问题?

    此致、

    Dave

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

    您好、Dave

    TI-RTOS GPIO API 问题仍未解决。

    但是、我们现在通过直接写入 GPIO 寄存器而不是使用 RTOS API 来完成 GPIO 控制。

    我认为这个问题现在可以解决、因为我们没有使用 RTOS API。

    当我们需要使用 RTOS API 时、我会打开一个新问题。 没关系吗?

    此致。

    ChingWei

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

    谢谢 ChingWei。 让我们这样做。

    此致、

    Dave