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.

[FAQ] [参考译文] [常见问题解答] AM6442:如何配置 GPIO 中断

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1123825/faq-am6442-how-to-configure-the-gpio-interrupt

器件型号:AM6442
Thread 中讨论的其他器件:SysConfig

此常见问题解答介绍了如何为不同内核配置 GPIO 中断、并在不同内核上创建了不同的示例。

e2e.ti.com/.../empty_5F00_am64x_2D00_evm_5F00_r5fss1_2D00_1_5F00_freertos_5F00_ti_2D00_arm_2D00_clang.zipe2e.ti.com/.../empty_5F00_am64x_2D00_evm_5F00_r5fss0_2D00_1_5F00_freertos_5F00_ti_2D00_arm_2D00_clang.zipe2e.ti.com/.../empty_5F00_am64x_2D00_evm_5F00_r5fss1_2D00_0_5F00_freertos_5F00_ti_2D00_arm_2D00_clang.zip

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

    AM64x GPIO 概述

    什么是 GPIO?

    通用输入/输出(GPIO)外设可提供专用的通用引脚

    配置为输入或输出。

    GPIO 可用于三种模式: 输入/输出/中断

    AM64X SDK 中的 GPIO 可用性:

    该器件具有三个 GPIO 模块实例。 GPIO 引脚被分成组(每组16个引脚、每模块9个组)、这意味着每个 GPIO 模块提供多达144个具有输入和输出功能的专用通用引脚; 因此、通用接口支持多达432个(3个实例×(9组×16引脚))引脚。 由于该器件中保留了 MCU_GPIO0[23:143]、GPIO0[87:143]和 GPIO1[88:143]、通用接口最多支持198个引脚。

    AM64X SDK 中的 GPIO 中断连接:

    由于该器件将 GPIO 信号与其他功能信号进行多路复用、因此任何特定 GPIO 的可用性及其关联中断的可用性都将根据用例引脚多路复用而变化。 由于 GPIO 中断源数量庞大、因此将所有中断事件路由到每个处理元件不切实际。 由于大多数应用通常不需要大量 GPIO 中断、因此通过将所有 GPIO 中断映射到使用中断路由器(IntRouter)模块实现的一系列事件多路复用器来解决中断不确定性。 这些多路复用器允许选择任何一个可用的 GPIO 中断、并将其作为事件传递给各种处理器中断控制器和 DMA 控制器。 事件选择通过每个 IntRouter 内的相关寄存器进行控制。

    GPIO 组中断已经表示与每个组关联的16个 GPIO 中断的合并、它们直接路由到各种中断控制器、而不是通过 GPIO IntRouters。

    其中一个 GPIO 引脚具有作为 Arm 复位输入的潜在用例、因此应在 GIC 中路由为最高优先级中断、并在软件中映射到 nFIQ。

    图1. MCU_GPIO 中断路由器连接

    图2. MAIN_GPIO 中断路由器连接

    图3:MCU 域上的 GPIOMUX_INTR0集成。

    图4. 主域上的 GPIOMUX_INTR0集成。

    GPIO 中断配置的步骤

    1. GPIO 配置:根据您的 GPIO 要求进行系统配置。

    2. 中断路由器配置:根据目标内核配置中断路由器输出。 到目前为止、此信息在系统配置中不可配置。 这将在下一个版本中实施。

    由于当前系统配置中无法配置路由器信息、请按照以下步骤手动配置中断路由器输出。

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

    手动配置中断路由器输出

    示例:在 R5FST_0内核上为 GPIO0_63配置 GPIO 中断。

    请检查 sciclient_defaultBoardcfg_rm.c 文件并在以下路径中找到它


    \source\drivers\sciclient\sciclient_default_boardcfg\am64x_am243x。

     

    1. 在上面的示例 中,我们选择了 MCU_GPIO0_63引脚作为中断,并且 GPIO 的所有中断都属于 TISCI_DEV_MAIN_GPIOMUX_INTROUTER0路由器,而选定的目标内核则属于 R5FS_0
    2. 我们可以从0到15选择 MAIN_GPIO_MUX_INTROUTER0_OUTP。 但是、在 TISCI_HOST_ID_MAIN_0_R5_0内核中的 TISCI_DEV_MAIN_GPIOMUX_INTROUTER0路由器下仅分配2 (num_resource)资源、并且中断路由器输出应从8开始、因为 START_RESOURCE 从8开始。

        {

          num_resource = 2、

          .type = TISCI_RESSASG_UTYPE (TISCI_DEV_MAIN_GPIOMUX_INTROUTER0、 TISCI_RESSASG_SUBTYPE_IR_OUTPUT)、

          .start_resource = 8、

          .host_id = TISCI_HOST_ID_MAIN_0_R5_0

        }、

     

    1. 因此、我们可以将中断路由器输出设置为8或9、目标内核为 R5FST_0。

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

    示例1:在具有免费 RTOS 的 R5FST_1内核上为 GPIO0_63配置 GPIO 中断

    步骤1: 使用 SysConfig 配置 GPIO

    步骤2:在工作区中包含 board.c 文件、该文件在路径上可用。 \examples\drivers\gpio\gpio_input_interrupt\am64x-evm\r5fss0-0_nortos。

    在上面的示例 中、我们为中断选择了 MCU_GPIO0_63引脚、目标内核为 R5FS_1。

    步骤3:R5FST_1内核中的 TISCI_DEV_MAIN_GPIOMUX_INTROUTER0路由器下分配了2个资源、中断路由器输出应从10开始。

        {

          num_resource = 2、

          .type = TISCI_RESSASG_UTYPE (TISCI_DEV_MAIN_GPIOMUX_INTROUTER0、TISCI_RESSASG_SUBTYPE_IR_OUTPUT)、

          .start_resource = 10、

          .host_id = TISCI_HOST_ID_MAIN_0_R5_3

        }、

    因此、我们可以将中断路由器输出(START_RESOURCE)分配 为10或11。

    步骤4:最后,我们需要在 board.c 文件中更新宏下面的内容

      #define Board_button_GPIO_INTR_NUM CSLR_R5FSS0_Core1_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_10 CSLR_R5FSS0_Core1_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_11
       B.rmIrqReq.src_id                = TISCI_DEV_GPIO0;

       rmIrqReq.src_INDEX             = TISCI_Bank_SRC_IDX_BASE_GPIO0 + GPIO_GET_Bank_INDEX (GPIO_PUSH_button_PIN);

      rmIrqReq.dst_id            = TISCI_DEV_R5FSS0_Core1;

    步骤5: 在 GPIO 初始化之前调用 Board_gpioInit ()

    步骤6: 编译代码并在 R5FST_1内核上加载二进制文件

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

    示例2:在具有免费 RTOS 的 R5FST_0内核上为 GPIO0_63配置 GPIO 中断

    步骤1: 使用 SysConfig 配置 GPIO

    步骤2: 在工作区中包含 board.c 文件、该文件在路径上可用。  \examples\drivers\gpio\gpio_input_interrupt\am64x-evm\r5fss0-0_nortos。  

    步骤3: 在 R5FST_0内核中的 TISCI_DEV_MAIN_GPIOMUX_INTROUTER0路由器下分配了2个资源、中断路由器输出应从8开始

        {

          num_resource = 2、

          .type = TISCI_RESSASG_UTYPE (TISCI_DEV_MAIN_GPIOMUX_INTROUTER0、TISCI_RESSASG_SUBTYPE_IR_OUTPUT)、

          .start_resource = 8

          .host_id =  TISCI_HOST_ID_MAIN_0_R5_0

        }、

    因此、我们可以将中断路由器输出(START_RESOURCE)分配 为89

    步骤4: 最后,我们需要更新 board.c 文件\中的以下宏

      #define  Board_button_GPIO_INTR_NUM  CSLR_R5FSS0_Core1_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_8   CSLR_R5FSS0_Core1_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_9
       B.rmIrqReq.src_id                = TISCI_DEV_GPIO0;

       rmIrqReq.src_INDEX             = TISCI_Bank_SRC_IDX_BASE_GPIO0 + GPIO_GET_Bank_INDEX (GPIO_PUSH_button_PIN);

      rmIrqReq.dst_id            = TISCI_DEV_R5FSS0_CORE0

    步骤5: 在 GPIO 初始化之前调用 Board_gpioInit ()

    步骤6: 编译代码并在 R5FST_0内核上加载二进制文件

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

    示例3:在具有 免费 RTOS 的 R5FST_1内核上为 GPIO0_43配置 GPIO 中断

    步骤1: 使用 SysConfig 配置 GPIO  

    步骤2: 在工作区中包含 board.c 文件、该文件在路径上可用。  \examples\drivers\gpio\gpio_input_interrupt\am64x-evm\r5fss0-0_nortos。  

    步骤3: R5FST_1 内核中的 TISCI_DEV_MAIN_GPIOMUX_INTROUTER0路由器下分配了2个资源、中断路由器输出应从开始  10.

        {

          num_resource = 2、

          .type = TISCI_RESSASG_UTYPE (TISCI_DEV_MAIN_GPIOMUX_INTROUTER0、TISCI_RESSASG_SUBTYPE_IR_OUTPUT)、

          .start_resource =  10

          .host_id =  TISCI_HOST_ID_MAIN_0_R5_3

        }、

    因此、我们可以将中断路由器输出(START_RESOURCE分配 为10  11.

    步骤4: 最后,我们需要更新 board.c 文件\中的以下宏

      #define  Board_button_GPIO_INTR_NUM  CSLR_R5FSS0_Core1_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_10   CSLR_R5FSS0_Core1_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_11
       B.rmIrqReq.src_id                = TISCI_DEV_GPIO0;

       rmIrqReq.src_INDEX             = TISCI_Bank_SRC_IDX_BASE_GPIO1 + GPIO_GET_Bank_INDEX (GPIO_PUSH_button_PIN);

      rmIrqReq.dst_id            = TISCI_DEV_R5FSS0_Core1

    步骤5: 在 GPIO 初始化之前调用 Board_gpioInit ()

    步骤6: 编译代码并在 R5FST_1 内核上加载二进制文件