2016-06-08 10 views
0

PIC32MZ2048ECH144를 사용하고 있습니다. RH8 (핀 번호 81)과 RH9 (핀 번호 82)에 연결된 두 개의 스위치가 있습니다. MHC에서 핀 수준에서 인터럽트를 설정하는 옵션이 표시되지 않으므로 포트 -H에 대해 ISR이 생성됩니다. 각 핀을 별도로 호출하려면 ISR이 필요합니다. 는 따라서 "SYS_Initialize"에서 "system_init.c"함수 I는 다음 행을 첨가마이크로 칩 Harmony Configurator (MHC)를 사용하여 PIC32MZ2048ECH144의 동일한 포트에있는 2 핀용 ISR 매크로를 작성하는 방법은 무엇입니까?

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(); 
    } 

이 작동하지 않았다. 나는 http://microchip.wikidot.com/faq:78 링크를 참조했다. "/pic32mx/include/proc/p32mz2048ech144.h"에서 ISR 매크로의 벡터 번호를 선택하는 것이 잘못되었습니다. (_ADC1_DATA22_VECTOR 및 _ADC1_DATA23_VECTOR는 81 및 82에 대한 값이 다시 작동하지 않는 핀 번호라고 생각했습니다.) 핀 레벨 인터럽트 (동일한 포트의 2 핀)를 설정하는 방법에 대한 도움말이나 도움이 정말 좋습니다! 내 게시물의 모든 실수에 대해 사과드립니다.

미리 감사드립니다.

+0

인터럽트를 트리거 한 포트를 확인하려면 ISR 내부에서 플래그 레지스터를 확인하고 핀 특정 코드를 실행해야합니다 거기에서. – Lundin

+0

나는 벡터 (_CHANGE_NOTICE_H_VECTOR)를 가진 ISR은 H 포트에 변화가있을 때만 트리거된다고 생각한다. 따라서이 경우 ISR 내부의 핀 특정 코드를 직접 사용할 수 있습니다. –

답변

1

간단한 대답은 두 개의 개별 ISR로 직접 달성 할 수 없다는 것입니다. 전체 H 포트에 대해 사용할 수있는 변경 알림 ISR 벡터는 하나뿐입니다. 두 개의 핀 중 어느 것이 다른 상태에 있는지 판별하기 위해 추가로 소프트웨어 검사를 통해 원하는 것을 얻을 수 있습니다. 또 다른 방법은 신호를 다른 포트로 간단하게 이동하는 것입니다 (보드가 마무리되지 않은 경우).

함수에 지정한 이름은 ISR이 반응 할 내용과 아무런 관련이 없습니다. 진짜 마술은 __ISR 매크로 인수에서옵니다. 예를 들어

:

void __ISR(_CHANGE_NOTICE_H_VECTOR, ipl3AUTO) _IntHandler1234() 

을 주목 _CHANGE_NOTICE_H_VECTOR; 포트 H에서 변경 알림 인터럽트가 발생할 때이 인터럽트 서비스 루틴이 호출됨을 나타냅니다.

+0

답변이 정말 도움이됩니다. 고맙습니다! 이사회가 마무리되면 항구를 변경할 수 없습니다. 하지만 각 핀의 이전 상태를 저장하고 현재 상태를 확인하여 소프트웨어 검사를 사용할 수 있습니다. 빠른 답장을 보내 주셔서 감사합니다 :) –

+0

하나의 CN ISR 만있는 PIC32MX 시리즈를 사용하는 디자인이 있습니다. sw를 사용하여 4 개의 CN 핀 세트에서 어떤 핀이 변경되었는지 확인합니다. 할 수 있어요. – blsmit5728