如何使用 Microchip Harmony Configurator(MHC) 为 PIC32MZ2048ECH144 中同一端口上的 2 个引脚编写 ISR 宏?
How to write ISR macro for 2 pins on the same port in PIC32MZ2048ECH144 using Microchip Harmony Configurator(MHC)?
我正在使用 PIC32MZ2048ECH144。我有两个开关连接到 RH8(引脚号 81)和 RH9(引脚号 82)。我在 MHC 中看不到任何在引脚级别设置中断的选项,因此我得到了为端口 H 生成的 ISR。我需要单独调用每个引脚的 ISR。
因此,在 "system_init.c" 中,在 "SYS_Initialize" 函数中,我添加了以下行,
PLIB_PORTS_PinChangeNoticePerPortEnable(PORTS_ID_0, PORT_CHANNEL_H, PORTS_BIT_POS_8);
PLIB_PORTS_PinChangeNoticePerPortEnable(PORTS_ID_0, PORT_CHANNEL_H, PORTS_BIT_POS_9);
"system_interrupt.c"中MHC生成的ISR:
void __ISR(_CHANGE_NOTICE_H_VECTOR, ipl3AUTO) _IntHandlerChangeNotification_PortH1(void)
{
PLIB_INT_SourceFlagClear(INT_ID_0,INT_SOURCE_CHANGE_NOTICE_H);
APP_SwitchChangeNoticed();
}
我用下面几行替换了上面的 ISR 宏:
void __ISR(_ADC1_DATA22_VECTOR, ipl3AUTO) _IntHandlerChangeNotification_PortH1(void)
{
PLIB_INT_SourceFlagClear(INT_ID_0, INT_SOURCE_CHANGE_NOTICE);
APP_SwitchChangeNoticed();
}
void __ISR(_ADC1_DATA23_VECTOR, ipl3AUTO) _IntHandlerChangeNotification_PortH(void)
{
PLIB_INT_SourceFlagClear(INT_ID_0,INT_SOURCE_CHANGE_NOTICE_H);
test1();
}
这没有成功。我提到了 link http://microchip.wikidot.com/faq:78。我觉得我从“/pic32mx/include/proc/p32mz2048ech144.h”中为 ISR 宏选择向量编号是错误的。 (我使用 _ADC1_DATA22_VECTOR 和 _ADC1_DATA23_VECTOR 认为针对它们的值 81 和 82 是引脚号,这再次不起作用。)关于如何设置引脚电平中断的任何帮助或提示(2 个引脚上相同的端口)真的很棒!请为我的 post 中的任何错误道歉。
提前致谢。
简短的回答是,您所要求的无法通过两个单独的 ISR 直接实现。整个 H 端口只有一个变化通知 ISR 向量可用。您通常会通过添加软件检查来确定您的两个引脚中的哪一个处于不同状态,从而实现您正在寻找的内容。另一种方法是将您的信号简单地移动到另一个端口(如果您的电路板未完成)。
您为函数指定的名称与 ISR 的反应无关。真正的魔力来自 __ISR 宏参数。
例如:
void __ISR(_CHANGE_NOTICE_H_VECTOR, ipl3AUTO) _IntHandler1234()
注意_CHANGE_NOTICE_H_VECTOR
;表示当端口H发生变化通知中断时,将调用该中断服务程序。
我正在使用 PIC32MZ2048ECH144。我有两个开关连接到 RH8(引脚号 81)和 RH9(引脚号 82)。我在 MHC 中看不到任何在引脚级别设置中断的选项,因此我得到了为端口 H 生成的 ISR。我需要单独调用每个引脚的 ISR。 因此,在 "system_init.c" 中,在 "SYS_Initialize" 函数中,我添加了以下行,
PLIB_PORTS_PinChangeNoticePerPortEnable(PORTS_ID_0, PORT_CHANNEL_H, PORTS_BIT_POS_8); PLIB_PORTS_PinChangeNoticePerPortEnable(PORTS_ID_0, PORT_CHANNEL_H, PORTS_BIT_POS_9);
"system_interrupt.c"中MHC生成的ISR:
void __ISR(_CHANGE_NOTICE_H_VECTOR, ipl3AUTO) _IntHandlerChangeNotification_PortH1(void)
{
PLIB_INT_SourceFlagClear(INT_ID_0,INT_SOURCE_CHANGE_NOTICE_H);
APP_SwitchChangeNoticed();
}
我用下面几行替换了上面的 ISR 宏:
void __ISR(_ADC1_DATA22_VECTOR, ipl3AUTO) _IntHandlerChangeNotification_PortH1(void)
{
PLIB_INT_SourceFlagClear(INT_ID_0, INT_SOURCE_CHANGE_NOTICE);
APP_SwitchChangeNoticed();
}
void __ISR(_ADC1_DATA23_VECTOR, ipl3AUTO) _IntHandlerChangeNotification_PortH(void)
{
PLIB_INT_SourceFlagClear(INT_ID_0,INT_SOURCE_CHANGE_NOTICE_H);
test1();
}
这没有成功。我提到了 link http://microchip.wikidot.com/faq:78。我觉得我从“/pic32mx/include/proc/p32mz2048ech144.h”中为 ISR 宏选择向量编号是错误的。 (我使用 _ADC1_DATA22_VECTOR 和 _ADC1_DATA23_VECTOR 认为针对它们的值 81 和 82 是引脚号,这再次不起作用。)关于如何设置引脚电平中断的任何帮助或提示(2 个引脚上相同的端口)真的很棒!请为我的 post 中的任何错误道歉。
提前致谢。
简短的回答是,您所要求的无法通过两个单独的 ISR 直接实现。整个 H 端口只有一个变化通知 ISR 向量可用。您通常会通过添加软件检查来确定您的两个引脚中的哪一个处于不同状态,从而实现您正在寻找的内容。另一种方法是将您的信号简单地移动到另一个端口(如果您的电路板未完成)。
您为函数指定的名称与 ISR 的反应无关。真正的魔力来自 __ISR 宏参数。
例如:
void __ISR(_CHANGE_NOTICE_H_VECTOR, ipl3AUTO) _IntHandler1234()
注意_CHANGE_NOTICE_H_VECTOR
;表示当端口H发生变化通知中断时,将调用该中断服务程序。