2017-03-06 27 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)を処理中の割り込みに関連付ける必要があります。 (使用しているフレームワークがビルド時にカバーしていない限り)

ビルドシステムによって使用されている名前はすべて自動的にマップされますか? もしそうでなければ、mainの先頭にある何らかのHW initやフレームワークinitを使う必要があります。

HWがプログラムされる前に、HW init/resetが必要な場合もあります。

これはいくつか役立ちます。