2017-03-06 23 views
1

난 그냥 PIC32MX340F12와 MPLABX를 시작하려고한다. 내 첫 번째 시도는 타이머 인터럽트를 작성하는 것이므로 데이터 시트, 컴파일러 설명서 및 예제로 작업하고 아래에서 제안했다. 하지만 그것은 작동하지 않습니다 ... 인터럽트는 결코 발생하지 않습니다. 실제로 타이머 인터럽트 인 에이블 (T1IE = 1)과 일반 인터럽트 인 에이블 ("ei")을 둘 다 남겨두면 몇 초 동 안 실행됩니다. (디버그 모드에서 "목표 중단됨"이라고 표시됨). 둘 중 하나를 제거하면 무기한으로 실행되지만 타이머 인터럽트는 여전히 발생하지 않습니다. 그래서 나는 ISR 구문 어딘가에 꽤 나쁜 문제가있는 것처럼 보입니다. 누구 한테 뛰어 내리는거야?내 첫 번째 PIC32MX ISR이 실행되지 않고 코드가 걸려있다

내가 막 시작했기 때문에 나는 그것이 꽤 바보 같은 감독이라고 확신한다. 그리고 레지스터와 컴파일러 지시문 (제조업체가 제공하는 함수가 아닌)을 사용하여 가능한 한 직접 작업하는 것을 보았을 때 가장 많이 배우는 것처럼 느껴집니다.

감사합니다!

#include <stdio.h> 
#include <stdlib.h> 
#include "p32mx340f512h.h" 
#include <stdint.h> 

int x = 0; 

int main(int argc, char** argv) 
{ 
    INTCONbits.MVEC = 1; // turn on multi-vector interrupts 
    T1CON = 0;   // set timer control to 0 
    T1CONbits.TCKPS = 1; // set T1 prescaler to 8 
    PR1 = 62499;   // set t1 period 
    TMR1 = 0;    // initialize the timer 
    T1CONbits.ON = 1;  // activate the timer 

    IPC1bits.T1IP = 5; // T1 priority to 5 
    IPC1bits.T1IS = 0; // T1 secondary priority to 
    IFS0bits.T1IF = 0; // clear the T1 flag 
    IEC0bits.T1IE = 1; // enable the T1 interrupts 

    asm volatile("ei"); // enable interrupts 

    while (1) 
    { 
     x++; 

     if (x > 10000) 
     { 
      x = 0; 
     } 
    } 
    return (EXIT_SUCCESS); 
} 

bool zzz = false; 

void __attribute__((interrupt(IPL5AUTO))) T1Handler(void) 
{ 
    IFS0bits.T1IF = 0; 
    zzz = true; 
} 

답변

0

다음 질문에 대한 답변 :이 사이트에 무슨 문제가 있습니까? 매우 인기있는 칩에 대한 간단한 "hello world"유형 작업을위한 완전한 소스 코드를 제공합니다. 현상금, 무응답을 지정하십시오. 나는 stackoverflow에 포기하고 있다고 생각합니다.

1

임베디드 시스템은 다소 전문화되어 있으며 이는 익숙하지 않은 특정 시스템입니다.

그러나 다른 시스템에서 작업 할 때 Int Handler 함수 주소 (T1Handler)를 처리중인 인터럽트와 연결해야 할 수 있습니다. (사용중인 프레임 워크가 빌드 할 때 커버 아래에있는 것을 사용하지 않는 한)

사용중인 모든 이름이 빌드 시스템에 의해 자동으로 매핑됩니까? 그렇지 않은 경우, 사용하기 전에 메인 맨 위에서 HW init 또는 framework init을 호출해야 할 수도 있습니다.

HW를 프로그래밍하기 전에 일부 HW 초기화/재설정이 필요할 수도 있습니다.

일부 도움이 되길 바랍니다.