Я использую PIC32MZ2048ECH144. У меня есть два переключателя, подключенных к RH8 (контактный номер 81) и RH9 (контактный номер 82). Я не вижу никакой опции в MHC, чтобы установить прерывание на уровне булавки, поэтому я получаю ISR, сгенерированный для порта-H. Мне нужны ISR для каждого вывода, который вызывается отдельно. Следовательно, в функции "system_init.c", в "SYS_Initialize" Я добавил следующие строки,Как написать макрос ISR для 2 контактов на одном и том же порту в PIC32MZ2048ECH144 с помощью Microchip Harmony Configurator (MHC)?
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":
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. Я чувствую, что ошибаюсь в выборе номеров векторов для макросов ISR из «/pic32mx/include/proc/p32mz2048ech144.h». (Я использовал _ADC1_DATA22_VECTOR и _ADC1_DATA23_VECTOR, думая, что значения против них 81 и 82 являются номерами контактов, что опять не сработало.) Любая помощь или подсказки о том, как установить прерывания уровня булавки (2 контакта на одном и том же порту), будет действительно здорово! Прошу прощения за любые ошибки в моем посте.
Заранее спасибо.
Скорее всего, вам необходимо проверить регистр флага изнутри ISR, чтобы узнать, какой порт вызвал прерывание, а затем выполнить код, специфичный для буфера оттуда. – Lundin
Я думаю, что ISR с вектором (_CHANGE_NOTICE_H_VECTOR) запускается только в случае изменения порта H. Поэтому в этом случае я могу напрямую использовать код, специфичный для PIN-кода, внутри ISR. –