私はちょうど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;
}