0

我正在使用 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);

MHC在“system_interrupt.c”中生成的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();  
    }

这没有成功。我提到了链接http://microchip.wikidot.com/faq:78。我觉得从“/pic32mx/include/proc/p32mz2048ech144.h”中选择 ISR 宏的向量号是错误的。(我使用 _ADC1_DATA22_VECTOR 和 _ADC1_DATA23_VECTOR 认为针对它们的值 81 和 82 是引脚编号,这同样不起作用。)关于如何设置引脚电平中断(同一端口上的 2 个引脚)的任何帮助或提示都会非常棒!请为我帖子中的任何错误道歉。

提前致谢。

4

1 回答 1

1

简短的回答是,您所要求的不能通过两个单独的 ISR 直接实现。整个 H 端口只有一个更改通知 ISR 向量可用。您通常会通过添加软件检查来确定您的两个引脚中的哪一个处于不同状态来实现您正在寻找的内容。另一种方法是将您的信号简单地移动到另一个端口(如果您的电路板尚未完成)。

您为函数命名的名称与 ISR 的反应无关。真正的魔力来自 __ISR 宏参数。

例如:

void __ISR(_CHANGE_NOTICE_H_VECTOR, ipl3AUTO) _IntHandler1234()

注意_CHANGE_NOTICE_H_VECTOR; 它表示当更改通知中断发生在端口 H 上时,将调用该中断服务程序。

于 2016-06-08T19:56:43.170 回答