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.

[参考译文] EK-TM4C1294XL:tm4c1294ncpdt

Guru**** 2611705 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1228902/ek-tm4c1294xl-tm4c1294ncpdt

器件型号:EK-TM4C1294XL

您好!  

  在阅读对这个问题的答复时,我看到你指出问题可能是注册了 int

这是否意味着您不能使用  GPIOIntRegisterPin (GPIO_PORTP_BASE、GPIO_PIN_1和&UserButton2ISR);  

为该引脚动态注册中断?

我发现自己需要这样做。 在 P1处于中断状态时、ISR 的一部分是为 P1上任何后续中断注册一个新处理程序

谢谢

 

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

    Patrick、您好!

     可以、可以将  GPIOIntRegisterPin 用于指定的端口引脚、或者将 GPIOIntRegister 用于指定的端口。  GPIOIntRegister/GPIOIntRegisterPin  最终将调用 IntRegister 来将矢量表从闪存移动到 SRAM、并相应地插入 ISR。  

    //*****
    //
    //! 为 GPIO 端口的单个管脚注册一个中断处理程序。
    //!
    //! \param ui32Port 是 GPIO 端口的基地址。
    //! \param ui32Pin 是要注册其中断的引脚。
    //! param pfnIntHandler 是 GPIO 端口中断处理的指针
    //! 停止。
    //!
    //! 该函数确保指定中断处理程序
    //! \e 从选定的中检测到中断时调用 pfnIntHandler
    //! 的 GPIO 引脚。 此函数还会启用相应的 GPIO 引脚
    //! 中断控制器中的中断。
    //!
    //! \sa IntRegister()以了解有关注册中断的重要信息
    //! 处理程序。
    //!
    //! \无返回。
    //
    //*****
    空隙
    GPIOIntRegisterPin (uint32_t ui32Port、uint32_t ui32Pin、
    void (* pfnIntHandler)(void)

    uint32_t ui32Int;

    //
    //检查参数。
    //
    assert ((ui32Port == GPIO_PORTP_BASE)||(ui32Port == GPIO_PORTQ_BASE));
    断言((ui32Pin > 0)&&(ui32Pin < 8));
    assert (pfnIntHandler!= 0);

    //
    //获取与指定 GPIO 关联的中断编号。
    //
    ui32Int =_GPIOIntNumberGet (ui32Port);

    //
    //注册中断处理程序。
    //
    IntRegister (((ui32Int + ui32Pin)、pfnIntHandler);

    //
    //启用 GPIO 引脚中断。
    //
    IntEnable (ui32Int + ui32引脚);
    }

    空隙
    IntRegister (uint32_t ui32中断、void (* pfnHandler)(void))

    uint32_t ui32Idx、ui32Value;

    //
    //检查参数。
    //
    assert (ui32Interrupt < NUM_INTERRUPT);

    //
    //确保 RAM 矢量表正确对齐。
    //
    assert (((uint32_t) g_pfnRAMVectors & 0x000003ff)== 0);

    //
    //查看 RAM 矢量表是否已初始化。
    //
    if (HWREG (NVIC_VTABLE)!=(uint32_t) g_pfnRAMVectors)

    //
    //将矢量表从闪存的开头复制到 RAM 矢量
    //表。
    //
    ui32Value = HWREG (NVIC_VTABLE);
    for (ui32Idx = 0;ui32Idx < NUM_INTERRUTS;ui32Idx++)

    g_pfnRAMVectors [ui32Idx]=(void (*)(void)) HWREG (ui32Idx * 4)+
    ui32Value);
    }

    //
    //将 NVIC 指向 RAM 矢量表。
    //
    HWREG (NVIC_VTABLE)=(uint32_t) g_pfnRAMVectors;
    }

    //
    //保存中断处理程序。
    //
    g_pfnRAMVetters[ui32Interrupt]= pfnHandler;
    }

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

    谢谢、我整理了。  

    重要说明:在调用函数时指定 PIN#时、必须使用实际的 PIN 码。 无法使用 GPIO_PIN_x 定义

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

    Patrick、您好!

     你是对的。 它需要是像"1"这样的实际数字、而不是  GPIO_PIN_1、即 0x00000002。