2011年12月6日火曜日

MPLAB C18で優先割り込みを使う基本形パターン

PIC18で使用できるプログラムの基本パターンは3つあるけど、今回のUSB-TXでは新機能の優先割り込みを使ってみます。連続したPPM信号の変換だけなら2番のPIC16互換割り込みでもよいのだけど・・・使用するUSB内蔵PICはPIC18だし。

1. 割込みを使わない場合
2. PIC16互換の割込みを使う場合(優先割込みを使わない)
3. 優先割込みを使う場合(PIC18の新機能)

PIC18で優先割込みを使うプログラム場合は以下のように、高優先割込みに関する記述と低優先割込みに関する記述が必要で、どちらも、割込みベクタの定義と割込み処理の定義から成っています。

優先割込み機能を有効にするためには、RCONレジスタのIPENビットに1をセットします。上の例では、メイン処理の最初にセットしています。それ以外のレジスタは、使う割り込みの種類によって設定します。


#include <p18f1320.h>

#pragma config OSC = HS
#pragma config PWRT = OFF
#pragma config BOR = OFF
#pragma config WDT = OFF
#pragma config LVP = OFF

void high_isr (void);
void low_isr (void);

// ==(1)== ここから高優先割込み関連の記述 ====
#pragma code high_vector=0x8
void high_interrupt (void) {
    _asm
        GOTO high_isr
    _endasm
}
#pragma code

#pragma interrupt high_isr
void high_isr (void) {
/* ここに高優先割込み処理を記述する */
}

// ==(2)== ここから低優先割込み関連の記述 ====
#pragma code low_vector=0x18
void low_interrupt (void) {
    _asm
        GOTO low_isr
    _endasm
}

#pragma code

#pragma interruptlow low_isr
void low_isr (void) {
/* ここに低優先割込み処理を記述する */
}

// ==(3)== ここからメイン処理の記述 ====
void main (void) {
    RCONbits.IPEN = 1;    // 優先割込み機能を使う
/* ここにメイン処理を記述する */
}

0 件のコメント: