如何使用 Microchip Harmony Configurator (MHC) 在 PIC32MZ2048ECH144 的同一端口上为 2 个引脚编写 ISR 宏?

Posted

技术标签:

【中文标题】如何使用 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)? 【发布时间】:2016-06-08 19:31:34 【问题描述】:

我正在使用 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 个引脚)的任何帮助或提示都会非常棒!请为我帖子中的任何错误道歉。

提前致谢。

【问题讨论】:

很可能您必须从 ISR 内部检查标志寄存器以查看哪个端口触发了中断,然后从那里执行特定于引脚的代码。 我认为只有在 H 端口发生变化时才会触发带有向量的 ISR(_CHANGE_NOTICE_H_VECTOR) 本身。所以在这种情况下,我可以直接使用 ISR 中的 pin-specific 代码。 【参考方案1】:

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

你给函数起的名字与 ISR 的反应没有关系。真正的魔力在于 __ISR 宏参数。

例如:

void __ISR(_CHANGE_NOTICE_H_VECTOR, ipl3AUTO) _IntHandler1234()

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

【讨论】:

你的回答真的很有帮助。谢谢!由于板子已经确定,我将无法更改端口。但我可以使用软件检查,通过存储每个引脚的先前状态并检查当前状态。感谢您的快速回复:) 我有一个使用 PIC32MX 系列的设计,它只有一个 CN ISR。我使用 sw 来确定在一组 4 个 CN 引脚上哪个引脚发生了变化。这是可行的。

以上是关于如何使用 Microchip Harmony Configurator (MHC) 在 PIC32MZ2048ECH144 的同一端口上为 2 个引脚编写 ISR 宏?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSX Harmony 时,如何让 WebStorm 调整结束标签的缩进以匹配其父标签?

microchip PIC芯片使用方法

视频:Microchip安全加密技术入门教程——第四集:非对称加密

Harmony OSJAVA UI鸿蒙应用如何集成OKHttp网络三方库

采用Microchip的ChipLink开发工具加快产品上市

二.microchip samE54-- ATSAME54P20A 开发板使用总结