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.

[参考译文] TMDS64EVM:TMDS64EVM 中断输入

Guru**** 2430620 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1547485/tmds64evm-tmds64evm-interrupt-inputs

器件型号:TMDS64EVM
主题:SysConfig 中讨论的其他器件

工具/软件:

您好:

使用构建系统: mcu_plus_sdk_am64x_10_01_00_32

下面详细介绍了不同路由器的中断分配错误问题:

使用示例:gpio_input_interrupt

引脚分配和路由器 7 到 GPIO1_43 引脚的中断:

和头文件 ti_drivers_config.h 中的结果:

/* GPIO PIN 宏*/

#define GPIO_Push_button_BASE_ADDR (CSL_GPIO1_BASE)

#define GPIO_PUSH_BUTLE_PIN (43)

#define GPIO_Push_Button_DIR (GPIO_DIRECTION_INPUT)

#define GPIO_Push_Button_TRIG_TYPE (GPIO_TRIG_TYPE_RISE_EDGE)

#define GPIO_Push_Button_INTR_NUM  (CSLR_R5FSS0_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_7)

和 Board_getGpioButtonIntrNum () 在 ti_drivers_config.c 中分配 如下:

uint32_t Board_getGpioButtonIntrNum (void)

  返回 (Board_Button_GPIO_INTR_NUM);

}

其中 Board_Button_GPIO_INTR_NUM 定义为:

 /*

 *主板信息

 */

/*这基于 DMSC 板配置和内核*/

#define BOARD_BUTLE_GPIO_INTR_NUM   (CSLR_R5FSS0_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_7)

#define Board_BUTTON_GPIO_SWITCH_NUM  (5)

请注意、已正确分配给 BUTTONT_GPIO_43 的相同中断号 (39U)

 ------------------------------------------------

除了将此示例移植到我的工程中时一切都正常、因为我的工程已经分配了另一个中断引脚、但尚未为此中断创建回调函数。 此中断标签为:prgm_INTn 到 GPIO1_7、路由器为 0、如下所示:

 

对于 GPIO1_47、路由器 7 的 GPIO_PUSH 按钮、示例中断保持不变:

因此、在工程构建之后、按钮 SW5 的中断 (GPIO1_43) 未注册、也无法正常工作

和进一步研究以下行的 gpio_input_interrupt.c:

  PinNum      = GPIO_Push_putton_pin;

  IntrNum     = Board_getGpioButtonIntrNum ();

  buttonNum   = Board_getGpioButtonSwitchNum ();

将导致 ti_drivers_config.h 中的定义:  

#define GPIO_Push_button_BASE_ADDR (CSL_GPIO1_BASE)

#define GPIO_PUSH_BUTLE_PIN (43)

#define GPIO_Push_Button_DIR (GPIO_DIRECTION_INPUT)

#define GPIO_Push_Button_TRIG_TYPE (GPIO_TRIG_TYPE_RISE_EDGE)

#define GPIO_Push_Button_INTR_NUM (CSLR_R5FSS0_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_7)

但是 Board_getGpioButtonIntrNum () 在 ti_drivers_config.c 中定义为:

uint32_t Board_getGpioButtonIntrNum (void)

  返回 (Board_Button_GPIO_INTR_NUM);

}

  Board_Button_GPIO_INTR_NUM 定义为:

/*这基于 DMSC 板配置和内核*/

#define BOARD_BUTLE_GPIO_INTR_NUM   (CSLR_R5FSS0_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_0)

#define Board_BUTTON_GPIO_SWITCH_NUM  (5)

这是为 ti_drivers_config.h 中的 prgm_INTn 引脚定义的宏:

#define PRGM_INTN_BASE_ADDR (CSL_GPIO1_BASE)

#define PRGM_INTN_PIN (7)

#define PRGM_INTN_DIR (GPIO_DIRECTION_INPUT)

#define PRGM_INTN_TRIG_TYPE (GPIO_TRIG_TYPE_RISE_EDGE)

#define PRGM_INTN_INTR_NUM  (CSLR_R5FSS0_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_0)

因此、为什么中断路由器从另一个原始中断 prgm_INTn 错误地分配到 BUTLE_GPIO_43。 显然、两个中断的标签是不同的、并且没有相关性。

只有在 SysConfig 中删除了将 prgm_INTn 引脚分配为中断时、该问题才会消失。

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

    尊敬的 Huynh:

    感谢您提供上述详细信息。 生成这些函数的模板当前以其所采用的方式创建  第一个 GPIO 中断路由器的 Board_Button_GPIO_INTR_NUM 宏值。

    。  Board_Button_GPIO_SWITCH_NUM  宏也是值为 5 的硬代码、因为 EVM 上的 SW5 开关负责 为 GPIO_INPUT_INTERRUPT 示例从 EVM 生成 GPIO 中断。

     Board_getGpioButtonIntrNum 函数 也是要返回的硬代码  Board_Button_GPIO_INTR_NUM  完成。

    而不是使用  Board_Button_GPIO_INTR_NUM 对于路由器号码、可以使用宏 ${PIN_NAME}_INTR_NUM  在中生成的宏 ti_drivers_config.h 添加到工程。

    希望上述信息有所帮助。

    此致、

    Tushar

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

    我想到了直接分配、这是有效的

    IntrNum      = GPIO_Push_putton_INTR_NUM;而不是 Board_getGpioButtonIntrNum ();

    但我想知道模板如何决定要在许多中断中分配哪个中断  Board_Button_GPIO_INTR_NUM。

    谢谢。

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

    尊敬的 Huynh:

    GPIO_PUSH 按钮是您使用 SysConfig 配置的 PIN 的名称、GPIO_PUSH BUTLE_INTR_NUM 将仅保存为此引脚配置的路由器输出。

     Board_getGpioButtonIntrNum () 在内部返回  Board_Button_GPIO_INTR_NUM 宏、这将是 SysConfig 工具中配置的第一个 GPIO 中断号。

    此致、

    Tushar