您好!
在阅读对这个问题的答复时,我看到你指出问题可能是注册了 int
这是否意味着您不能使用 GPIOIntRegisterPin (GPIO_PORTP_BASE、GPIO_PIN_1和&UserButton2ISR);
为该引脚动态注册中断?
我发现自己需要这样做。 在 P1处于中断状态时、ISR 的一部分是为 P1上任何后续中断注册一个新处理程序
谢谢
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.
您好!
在阅读对这个问题的答复时,我看到你指出问题可能是注册了 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;
}