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.

[参考译文] TM4C129ENCPDT:如何在 TI RTOS 中为 GPIO 配置 Hwi

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1233916/tm4c129encpdt-how-to-configure-hwi-for-gpio-in-ti-rtos

器件型号:TM4C129ENCPDT
主题中讨论的其他器件: EK-TM4C1294XL

您好!

我正在使用 TM4C129ENCPDT MCU 开发其中一个需要集成 TI RTOS 的项目。 为此、我需要为2个 GPIO 引脚配置硬件中断。 我按照用户指南中所示进行配置、但中断不起作用。 我在没有使用 TI RTOS 的情况下进行了中断、但在使用 RTOS 的情况下无法实现。

如何将 GPIO 配置为外部硬件中断?

2.可以分享任何样例代码吗?

TI RTOS 库中的函数不会同时为端口和引脚提供参数。  其中是否有任何具体的声明? 或者如何声明端口和引脚?

GPIO_setConfig (GPIO_PIN_0、GPIO_CFG_IN| GPIO_CFG_IN_INT_Both_EDGE);  

这是用于配置 GPIO 引脚的功能之一。 这种方式是否正确? 端口的概念?

下面是我的代码 

#define CT_SESR GPIO_PORTM_BASE | GPIO_PIN_0

BOOL MOTOR_ON;
hwi_handle hwiHandle;

/* GPIO 中断处理程序*/
void gpioInterruptHandler (uintptr_t arg)

uint32_t status = GPIOIntStatus (GPIO_PORTM_BASE、TRUE);
if (status 和(GPIO_PORTM_BASE | GPIO_PIN_0 | GPIO_PIN_7))

//找到中断状态
MOTOR_ON =!(GPIOPinRead (GPIO_PORTM_BASE、GPIO_PIN_0)| GPIOPinRead (GPIO_PORTM_BASE、GPIO_PIN_7);

//清除中断标志
GPIO_clearInt (CT_SESR);
}
}

int main (空)

/*初始化 TI-RTOS 和驱动程序*/
Board_initGeneral();

/*初始化 GPIO 引脚*/
GPIO_init ();

GPIO_setConfig (CT_SESR、GPIO_CFG_INPUT | GPIO_CFG_IN_INT_Both_EDGE);
GPIO_setCallback (CT_SESR、gpioInterruptHandler); 
///*启用 GPIO 中断*/ 
Hwi_Params hwiParams;
Hwi_Params_init (&hwiParams);
hwiParams.arg = CT_SESR;
hwiHandle = Hwi_create (INT_GPIOM、gpioInterruptHandler、&hwiParams、NULL);
GPIO_enableInt (CT_SESR); 
/*启动 TI-RTOS 调度程序*/ 
BIOS_start();

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

    您好!

     您可以从 C:\ti\tirtos_tivac_2_16_00_08\resources\ek_tm4C1294XLEvaluationKit\driverExamples\tiDriverExamples\gpioExamples 导入 GPIO 中断示例  

     您可以 从 CCS 中的 Resource Explorer 下载相同的示例。 请参见下方的。  

    此示例使用 PJ0和 PJ1在上升沿生成中断。 您可以修改 EK-TM4C1294XL.c 文件、以适应您的应用程序的引脚、从而生成中断。 下面是一个代码片段。  

    /*
    *=================================== GPIO===================================
    */
    /*放置在子段中以允许 TI 链接器正确删除项目*/
    #if defined (__TI_Compiler_version__)
    #pragma DATA_SECTION (GPIOTIVA_CONFIG、".const:GPIOTIVA_CONFIG")
    #endif

    #include
    #include

    /*
    *引脚配置数组
    *注:引脚配置的顺序必须与之前的顺序一致
    *在 EK_TM4C1294XL.h 中定义
    *注:不用于中断的引脚应放置在的末尾
    *数组。 回调数组中可以省略回调条目
    *减少内存使用。
    */
    GPIO_PinConfig gpioPinConfigs[]={
    /*输入引脚*/
    /* EK_TM4C1294XL_USR_SW1 */
    GPIOTIVA_PJ_0 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_Rising、
    /* EK_TM4C1294XL_USR_SW2 */
    GPIOTIVA_PJ_1 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_Rising、

    /*输出引脚*/
    /* ek_TM4C1294XL_USR_D1 */
    GPIOTiva_Pn_1 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
    /* EK_TM4C1294XL_USR_D2 */
    GPIOTIVA_PN_0 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
    };

    /*
    *回调函数指针的数组
    *注:引脚配置的顺序必须与之前的顺序一致
    *在 EK_TM4C1294XL.h 中定义
    *注:回调数组中可以省略不用于中断的引脚
    *减少内存使用量(如果放置在 gpioPinConfigs 数组的末尾)。
    */
    GPIO_CallbackFxn gpioCallbackFunctions[]={
    null、/* EK_TM4C1294XL_USR_SW1 */
    null /* EK_TM4C1294XL_USR_SW2 */
    };

    /*特定于器件的 GPIO_CONFIG 结构*/
    CONST GPIOTIVA_Config GPIOTIVA_CONFIG ={
    .pinConfigs =(GPIO_PinConfig *) gpioPinConfigs、
    .callbacks =(GPIO_CallbackFxn *) gpioCallbackFunctions、
    .numberOfPinConfigs = sizeof (gpioPinConfigs)/sizeof (GPIO_PinConfig)、
    .numberOfCallbacks = sizeof (gpioCallbackFunctions)/sizeof (GPIO_CallbackFxn)、
    .intPriority =(~0)
    };

    另请参阅 TI-RTOS 用户指南中有关使用 GPIO 驱动程序的第5.5节。  

    https://www.ti.com/lit/pdf/SPRUHD4M

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

    尊敬的 Charles:

    这个问题仍然存在。 我尝试配置 GPIO、正如您提到过的。 但结果仍然相同。 我想它中缺少了什么。

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

    您好!

     再次阅读您先前的代码、我看到下面的#define。  

    #define CT_SESR GPIO_PORTM_BASE | GPIO_PIN_0 

    上面的内容是错误的、因为当您调用任何 I2C 函数时、它会变成下面的样子。 例如、

    GPIO_setConfig (GPIO_PORTM_BASE | GPIO_PIN_0、GPIO_CFG_IN| GPIO_CFG_IN_INT_Both_EDGE);//这是错误的。 

    请参阅 GPIO_setConfig 用户指南。 您需要提供 GPIO_setConfig 的索引。 索引已定义
    更改了 TPIOTiva.h 中的 TIVA 器件 请参阅以下片段。



    如果您希望动态配置 PM0、则可以执行以下操作:

    #define CT_SESR GPIOTIVA_PM_0


    原因是 GPIOTiva_PM_0已在 GPIOTiva.h 中定义 请参见下方的。



    您为什么不首先运行常用的 GPIO 中断? 请运行它并确保它能正常工作。 然后、您只需进行修改
    EK-TM4C1294XL.c 文件

    发件人:
    GPIO_PinConfig gpioPinConfigs[]={
    /*输入引脚*/
    /* EK_TM4C1294XL_USR_SW1 */
    GPIOTIVA_PJ_0 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_Rising、
    /* EK_TM4C1294XL_USR_SW2 */
    GPIOTIVA_PJ_1 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_Rising、

    至:
    GPIO_PinConfig gpioPinConfigs[]={
    /*输入引脚*/
    /* EK_TM4C1294XL_USR_SW1 */
    GPIOTIVA_PM_0 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_Both_EDGE
    /* EK_TM4C1294XL_USR_SW2 */
    GPIOTIVA_PJ_1 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_Rising、

    OSS 示例静态配置 GPIO 引脚。 如果您希望动态配置 GPIO 引脚、您也可以这样做
    但您需要修复
    我提到的 CT_SESR。