난 그냥 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;
}