14
2017 Microchip Technology Inc. DS90003162A_JP - p. 1 TB3162 はじめに 割り込みは、マイクロコントローラがメインルーチン の実行を一時的に停止して別のタスク( 割り込みサービ スルーチン (ISR) と呼ぶ ) を実行するよう要求します。 通常、割り込みハンドラ内に含まれる各種割り込み要 因は 1 つの割り込みベクタを共有します。割り込みが 発生すると、ハンドラ内部で割り込みフラグをスキャ ンする事によって割り込みの要因が特定された後、そ の割り込み要因に対応する ISR が呼び出されます。こ れとは異なり、ベクタ割り込みコントローラ モジュー ルは、割り込みベクタテーブル (IVT) を使って割り込み を処理します。 IVT は、個々の割り込み要因に割り込み ベクタを割り当てます。このため割り込み要因のフラ グビットをスキャンする必要がなく、割り込みが発生 すると割り込みルーチンは直接実行されます。 本書では、ベクタ割り込みコントローラを使った割り 込みルーチンの処理および実装の機能と柔軟性を紹介 します。 ベクタ割り込みコントローラの動作 1 に、ベクタ割り込みコントローラの状態遷移図を 示します。 INTCON0 レジスタの IPEN ビットをセット する事により、割り込みを高優先度割り込みと低優先 度割り込みにグループ分けできます。高優先度と低優 先度の割り込み要求が同時に発生した場合、常に高優 先度の割り込みが先に処理されます ( 2)。高優先度 割り込みは、実行中の低優先度 ISR の処理を中断させ る事もできます ( 3)1: ベクタ割り込みの状態遷移図 Author: June Anthony Asistio Microchip Technology Inc. HIGH ISR (STAT = 11) HIGH ISR (STAT = 10) MAIN (STAT = 00) LOW ISR (STAT = 01) High-Priority Interrupt Addressed, Low-Priority Interrupt Pending Low-Priority Interrupt Addressed, High-Priority Interrupt Pending High-Priority Interrupt Requested, Low-Priority Interrupt Pending High-Priority Interrupt Requested Low-Priority Interrupt Requested High-Priority Interrupt Addressed, No Pending Interrupts Low-Priority Interrupt Addressed, No Pending Interrupts High-Priority Interrupt Addressed, Low-Priority Interrupt Pending High-Priority Interrupt Requested Low-Priority Interrupt Requested 8 ビット PIC ® マイクロコントローラの ベクタ割り込みコントローラ 注意 : この日本語版文書は参考資料としてご利用ください。最 新情報は必ずオリジナルの英語版をご参照願います。

TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

TB31628 ビット PIC® マイクロコントローラの

ベクタ割り込みコントローラ

注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジナルの英語版をご参照願います。

はじめに

割り込みは、マイクロコントローラがメインルーチンの実行を一時的に停止して別のタスク(割り込みサービスルーチン (ISR) と呼ぶ ) を実行するよう要求します。通常、割り込みハンドラ内に含まれる各種割り込み要因は 1 つの割り込みベクタを共有します。割り込みが発生すると、ハンドラ内部で割り込みフラグをスキャンする事によって割り込みの要因が特定された後、その割り込み要因に対応する ISR が呼び出されます。これとは異なり、ベクタ割り込みコントローラ モジュールは、割り込みベクタテーブル (IVT) を使って割り込みを処理します。IVT は、個々の割り込み要因に割り込みベクタを割り当てます。このため割り込み要因のフラグビットをスキャンする必要がなく、割り込みが発生すると割り込みルーチンは直接実行されます。

本書では、ベクタ割り込みコントローラを使った割り込みルーチンの処理および実装の機能と柔軟性を紹介します。

ベクタ割り込みコントローラの動作

図 1 に、ベクタ割り込みコントローラの状態遷移図を示します。INTCON0 レジスタの IPEN ビットをセットする事により、割り込みを高優先度割り込みと低優先度割り込みにグループ分けできます。高優先度と低優先度の割り込み要求が同時に発生した場合、常に高優先度の割り込みが先に処理されます ( 図 2)。高優先度割り込みは、実行中の低優先度 ISR の処理を中断させる事もできます ( 図 3)。

図 1: ベクタ割り込みの状態遷移図

Author: June Anthony AsistioMicrochip Technology Inc.

HIGH ISR(STAT = 11)

HIGH ISR(STAT = 10)

MAIN(STAT = 00)

LOW ISR(STAT = 01)

High-Priority Interrupt Addressed,Low-Priority Interrupt Pending

Low-Priority Interrupt Addressed,High-Priority Interrupt Pending

Hig

h-Pr

iorit

y In

terr

upt R

eque

sted

,Lo

w-P

riorit

y In

terr

upt P

endi

ng

High-PriorityInterrupt Requested

Low-PriorityInterrupt Requested

High-Priority Interrupt Addresse

d,

No Pending Interrupts

Low-Priority Interrupt Addressed,

No Pending Interrupts

Hig

h-Pr

iorit

y In

terr

upt A

ddre

ssed

,Lo

w-P

riorit

y In

terr

upt P

endi

ng

High-Priority Interru

pt Requested Low-Priority Interrupt Requested

2017 Microchip Technology Inc. DS90003162A_JP - p. 1

Page 2: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

TB3162

図 2: 高優先度と低優先度の割り込み要求が同時に発生した場合

図 3: 高優先度割り込みによる低優先度 ISRの 中断

MAIN ROUTINE EXECUTING MAIN ROUTINE HALTED MAIN ROUTINE

EXECUTINGMAIN CODE

High-Priority Interrupt

LOW_ISR

Low-PriorityInterrupt

HIGH_ISR HIGH_ISREXECUTING

LOW_ISR EXECUTING

High-Priority InterruptReceived

High-Priority InterruptCleared

Low-Priority InterruptReceived

Low-Priority InterruptCleared

RETFIE

RETFIE

RETFIE

RETFIE

MAIN ROUTINE EXECUTING MAIN ROUTINE HALTED

LOW_ISR EXECUTING

MAIN ROUTINE EXECUTING

HIGH_ISREXECUTING

LOW_ISREXECUTING

LOW_ISR EXECUTION

HALTED

MAIN CODE

High-PriorityInterrupt

LOW_ISR

Low-PriorityInterrupt

HIGH_ISR

High-PriorityInterruptReceived

High-PriorityInterruptCleared

Low-PriorityInterruptReceived

Low-PriorityInterrupt Cleared

DS90003162A_JP - p. 2 2017 Microchip Technology Inc.

Page 3: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

TB3162

ベクタ割り込みコントローラでは、2 通りの方法で割り込みを実装できます。最初の方法は、割り込みハンドラを使います。この方法を使う場合、CONFIG_2Lレジスタのマルチベクタ イネーブル (MVECEN)ヒューズをクリアします。この方法では、高優先度と低優先度の割り込みハンドラ向けの 2 つの割り込みベクタを使って、各割り込み信号をどちらかのハンドラに割り当てる事ができます。IPR レジスタにより、割り込み要因に高優先度または低優先度を割り当てます。同じ優先度を持つ複数の割り込み要因が同時に発生した場合、割り込みハンドラ内でポーリングされたフラグビットの順位を調べる事により競合を解決します。 もう 1 つの方法は、割り込みハンドラを使わない代わりに IVT を使います。この方法を使う場合、MVECENヒューズをセットする事で、IVT を使ったマルチベクタ割り込みを有効にします。IPR レジスタにより、割り込み要因に高優先度または低優先度を割り当てます。IVT は、各割り込み要因に固有の割り込みベクタアドレスを与えます。同時に発生した同一優先度の割り込みの優先順位は IVT によって決まります。すなわち IVT 内で最も上に位置する ( 最小ベクタ番号 ) の割り込み信号が最初に処理されます。この方法は、ソフトウェア割り込みハンドラを使うよりも低レイテンシです。割り込み要因を特定するために割り込みフラグをスキャンする必要はありません。メインルーチンから ISRへのジャンプには 3 クロックサイクルを要します。

再配置可能な割り込みベクタアドレス

ベクタ割り込みコントローラは、割り込みベクタのベースアドレスを再配置できるプログラマブルIVTBASE レジスタも備えています。表 1 に、MVECENヒューズが OFFの時のPIC18FXXK42 の高優先度および低優先度ハンドラの割り込みベクタアドレスを示します。この表は、IVTBASEの値が既定値の場合と0010hの場合のアドレスを示しています。

MVECEN が ON の場合、IVTBASE レジスタによってIVT 内の各割り込み要因のベクタアドレスのベース位置を変更できます。各割り込み要因の割り込みベクタアドレスは式 1 により求まります。

式 1: ベクタアドレスの計算式

表 1: PIC18(L)FXXK42 の割り込みベクタアドレス (MVECEN = OFF)

割り込みベクタIVTBASE( 既定値 )

IVTBASE(0010h)

高優先度割り込みベクタ = IVTBASE 0008h 0010h

低優先度割り込みベクタ = IVTBASE + 8 ワード

0018h 0020h

Vector Address IVTBASE 2 Vector Number +=

2017 Microchip Technology Inc. DS90003162A_JP - p. 3

Page 4: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

TB3162

表 2 に、PIC18(L)FXXK42 の IVT を示します。この表には、IVTBASE が 0008h( 既定値 ) の場合と 40F0h の場合の、各割り込み要因の割り込みベクタアドレスを記載しています。

表 2: PIC18(L)FXXK42 の IVT (IVTBASE = 0008h、40F0h)

ベクタ

番号 (n)

割り込み

ベクタアドレス

( 既定値IVTBASE)

割り込み

ベクタアドレス (IVTBASE = 40F0h)

割り込み

要因

0 0008h 40F0h ソフトウェ

ア割り込み

1 000Ah 40F2h HLVD2 000Ch 40F4h OSF3 000Eh 40F6h CSW4 0010h 40F8h NVM5 0012h 40FAh SCAN6 0014h 40FCh CRC7 0016h 40FEh IOC8 0018h 4100h INT09 001Ah 4102h ZCD10 001Ch 4104h AD11 001Eh 4106h ADT12 0020h 4108h CMP113 0022h 410Ah SMT114 0024h 410Ch SMU1PRA15 0026h 410Eh SMU1PWA16 0028h 4110h DMA1SCNT17 002Ah 4112h DMA1DCNT18 002Ch 4114h DMA1OR19 002Eh 4116h DMA1A20 0030h 4118h SPI1RX21 0032h 411Ah SPI1TX22 0034h 411Ch SPI123 0036h 411Eh I2C1RX24 0038h 4120h I2C1TX25 003Ah 4122h I2C126 003Ch 4124h I2C1E27 003Eh 4126h U1R28 0040h 4128h U1T29 0042h 412Ah U1E30 0044h 412Ch U1G31 0046h 412Eh TMR032 0048h 4130h TMR133 004Ah 4132h TMR1G34 004Ch 4134h TMR2

35 004Eh 4136h CCP136 0050h 4138h —37 0052h 413Ah NCO138 0054h 413Ch CWG1

39 0056h 413Eh CLC140 0058h 4140h INT141 005Ah 4142h CMP242 005Ch 4144h DMA2SCNT43 005Eh 4146h DMA2DCNT44 0060h 4148h DMA2OR45 0062h 414Ah DMA2ABRT46 0064h 414Ch I2C2RX47 0066h 414Eh I2C2TX48 0068h 4150h I2C249 006Ah 4152h I2C2E50 006Ch 4154h U2R51 006Eh 4156h U2T52 0070h 4158h U2E53 0072h 415Ah U2G54 0074h 415Ch TMR355 0076h 415Eh TMR3G56 0078h 4160h TMR457 007Ah 4162h CCP258 007Ch 4164h —59 007Eh 4166h CWG260 0080h 4168h CLC261 0082h 416Ah INT262 0084h 416Ch —63 0086h 416Eh —64 0088h 4170h —65 008Ah 4172h —66 008Ch 4174h —67 008Eh 4176h —68 0090h 4178h —69 0092h 417Ah —70 0094h 417Ch TMR571 0096h 417Eh TMR5G72 0098h 4180h TMR673 009Ah 4182h CCP374 009Ch 4184h CWG375 009Eh 4186h CLC376 00A0h 4188h —77 00A2h 418Ah —78 00A4h 418Ch —79 00A6h 418Eh —80 00A8h 4190h CCP481 00AAh 4192h CLC4

表 2: PIC18(L)FXXK42 の IVT (IVTBASE = 0008h、40F0h) ( 続き )

ベクタ

番号 (n)

割り込み

ベクタアドレス

( 既定値IVTBASE)

割り込み

ベクタアドレス (IVTBASE = 40F0h)

割り込み

要因

DS90003162A_JP - p. 4 2017 Microchip Technology Inc.

Page 5: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

TB3162

再配置可能割り込みベクタは、ブートローダを備えたマイクロコントローラをプログラミングする際に特に役立ちます。ブートローダは既定値の割り込みベクタが配置されるメモリ空間を使うため、プログラマブルIVTBASE を使ってメインルーチンの割り込みベクタアドレス位置をオフセットさせる事ができます。そうする事で、ブートローダは独自の割り込みのセットを使う事ができます ( メインプログラム用の割り込みベクタとは異なる位置に独自の割り込みベクタを生成できます )。

自動コンテクスト退避 / 復元

割り込みコントローラは、メインルーチン コンテクストと低優先度 ISRコンテクストの両方を自動的に退避させる事ができます。STATUS、WREG、BSR、FSR0/1/2、PRODL/H、PCLATH/U は対応するシャドーレジスタに退避させます。コンテクスト退避 / 復元動作を図 4 に示します。

図 4: コンテクスト退避の状態遷移図

HIGH ISR(STAT = 11)

HIGH ISR(STAT = 10)

MAIN(STAT = 00)

LOW ISR(STAT = 01)

No Context Save/Restore

No Context Save/Restore

Save

Low

Con

text

Rest

ore

Low

Con

text

No Context Save/Restore

No Context Save/Restore

Restore Main Context

Save Main Context

Restore Main Context

Save Main Context

2017 Microchip Technology Inc. DS90003162A_JP - p. 5

Page 6: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

TB3162

高優先度および低優先度割り込みの生成

以下では例を示しながら、高優先度および低優先度の割り込みを生成する方法について説明します。

高優先度割り込みは、以下の割り込み要因から生成します。 INT0、ZCD、CMP1、CLC1低優先度割り込みは、以下のタイマから生成します。 TMR0、TMR1、TMR2、TMR3ここでは 2 通りの方法を紹介します。1 つの方法は各割り込み要因に固有のベクタ割り込みを使い、もう 1 つの方法はソフトウェア割り込みハンドラを使います。

方法 1: マルチベクタ割り込み (MVECON = ON) を使う

高優先度および低優先度割り込み向けに IVT を使います。例 1 に、割り込みコントローラの初期化方法を示します。IVTBASE は 40F0h に設定します。例 2 に、各ISR 向けのコードを示します。各 ISR は固有の割り込みベクタを持ちます。

例 1: 割り込みの初期化 (IPEN = 1、IVTBASE = 40F0h)void INTERRUPT_Initialize (void){

// Enable priority in interruptsINTCON0bits.IPEN = 1;

// Set IVTBASEIVTBASEU = 0x00;IVTBASEH = 0x40;IVTBASEL = 0xF0;

//Clear interrupt flagsPIR1bits.INT0IF = 0;PIR1bits.ZCDIF = 0;PIR1bits.C1IF = 0; PIR4bits.CLC1IF = 0;PIR3bits.TMR0IF = 0;PIR4bits.TMR1IF = 0;PIR4bits.TMR2IF = 0; PIR6bits.TMR3IF = 0;

//Enable interruptsPIE1bits.INT0IE = 1;PIE1bits.ZCDIE = 1;PIE1bits.C1IE = 1; PIE4bits.CLC1IE = 1;PIE3bits.TMR0IE = 1;PIE4bits.TMR1IE = 1;PIE4bits.TMR2IE = 1; PIE6bits.TMR3IE = 1;

//Make timer interrupts low priorityIPR3bits.TMR0IP = 0;IPR4bits.TMR1IP= 0;

IPR4bits.TMR2IP = 0; IPR6bits.TMR3IP = 0;

// Enable interruptsINTCON0bits.GIEH = 1;INTCON0bits.GIEL = 1;

}

DS90003162A_JP - p. 6 2017 Microchip Technology Inc.

Page 7: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

TB3162

例 2: マルチベクタ割り込みの ISR (MVCEN = ON、IVTBASE = 40F0h)//Vectored Interrupts for MVECEN=ONvoid __interrupt(irq(IRQ_INT0), base(0x40F0)) INT0_ISR(void){

PIR1bits.INT0IF = 0; // Clear INT0 interrupt flag//place code here

}void __interrupt(irq(IRQ_ZCD), base(0x40F0)) ZCD_ISR(void){

PIR1bits.ZCDIF = 0; // Clear ZCD interrupt flag //place code here}void __interrupt(irq(IRQ_CMP1), base(0x40F0)) C1_ISR(void){

PIR1bits.C1IF = 0; // Clear C1 interrupt flag//place code here

}void __interrupt(irq(CLC1_TMR3), base(0x40F0)) CLC1_ISR(void){

PIR4bits.CLC1IF = 0; // Clear CLC1 interrupt flag//place code here

}void __interrupt(irq(IRQ_TMR0), base(0x40F0)) TMR0_ISR(void){

PIR3bits.TMR0IF = 0; // Clear TMR0 interrupt flag//place code here

}void __interrupt(irq(IRQ_TMR1), base(0x40F0)) TMR1_ISR(void){

PIR4bits.TMR1IF = 0; // Clear TMR1 interrupt flag//place code here

}void __interrupt(irq(IRQ_TMR2), base(0x40F0)) TMR2_ISR(void){

PIR4bits.TMR2IF = 0; // Clear TMR2 interrupt flag//place code here

}void __interrupt(irq(IRQ_TMR3), base(0x40F0)) TMR3_ISR(void){

PIR6bits.TMR3IF = 0; // Clear TMR3 interrupt flag//place code here

}

2017 Microchip Technology Inc. DS90003162A_JP - p. 7

Page 8: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

TB3162

結果として、各割り込み要因には表 3 に示す通りに高優先度と低優先度が割り当てられます。割り込みのコードを書くにあたってソフトウェア割り込みハンドラは必要ありません。

方法 2: レガシーモードの割り込み(MVECEN = OFF) を使う

高優先度および低優先度割り込み向けに 2 つの割り込みハンドラを使います。例 3 に、割り込みの初期化コードを示します。例 1 のコードと同様ですが、IVTBASEを 0010h に設定している点が異なります。2 つの割り込みハンドラを例 4 に示します。

例 3: 割り込みの初期化 (IPEN = 1、IVTBASE = 0010h)

表 3: 高優先度および低優先度割り込み

高優先度割り込み 低優先度割り込み

ベクタ番号

割り込み要因

ベクタ番号

割り込み要因

8 INT0 31 TMR09 ZCD 32 TMR1

12 CMP1 34 TMR239 CLC1 54 TMR3

void INTERRUPT_Initialize (void){

// Enable priority in interruptsINTCON0bits.IPEN = 1;

// Set IVTBASEIVTBASEU = 0x00;IVTBASEH = 0x00;IVTBASEL = 0x10;

//Clear interrupt flagsPIR1bits.INT0IF = 0;PIR1bits.ZCDIF = 0;PIR1bits.C1IF = 0; PIR4bits.CLC1IF = 0;PIR3bits.TMR0IF = 0;PIR4bits.TMR1IF = 0;PIR4bits.TMR2IF = 0; PIR6bits.TMR3IF = 0;

//Enable interruptsPIE1bits.INT0IE = 1;PIE1bits.ZCDIE = 1;PIE1bits.C1IE = 1; PIE4bits.CLC1IE = 1;PIE3bits.TMR0IE = 1;PIE4bits.TMR1IE = 1;PIE4bits.TMR2IE = 1; PIE6bits.TMR3IE = 1;

//Make timer interrupts low priorityIPR3bits.TMR0IP = 0;IPR4bits.TMR1IP = 0;IPR4bits.TMR2IP = 0; IPR6bits.TMR3IP = 0;

// Enable interruptsINTCON0bits.GIEH = 1;INTCON0bits.GIEL = 1;

}

DS90003162A_JP - p. 8 2017 Microchip Technology Inc.

Page 9: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

TB3162

例 4: 高優先度と低優先度の割り込みハンドラ (MVCEN = OFF、IPEN = 1、IVTBASE = 0010h)

ベクタ番号を使った割り込みの実装

割り込み中に、WREG レジスタは割り込み信号のベクタ番号を格納します。MVECEN が OFF の場合、このベクタ番号を使って割り込みハンドラを実装する事もできます ( 例 5 参照 )。

// MVECEN = OFF and IPEN = 1void __interrupt() highPriorityInterrupt010(void){ if(INTCON0bits.GIE == 1 && PIE1bits.INT0IE == 1 && PIR1bits.INT0IF == 1) { PIR1bits.INT0IF = 0; INT0_ISR(); } if(INTCON0bits.GIE == 1 && PIE1bits.ZCDIE == 1 && PIR1bits.ZCDIF == 1) { PIR1bits.ZCDIF = 0; ZCD_ISR(); } if(INTCON0bits.GIE == 1 && PIE1bits.C1IE == 1 && PIR1bits.C1IF == 1) { PIR1bits.C1IF = 0; C1_ISR(); } if(INTCON0bits.GIE == 1 && PIE4bits.CLC1IE == 1 && PIR4bits.CLC1IF == 1) { PIR4bits.CLC1IF = 0; CLC1_ISR(); } }

void __interrupt(low_priority) lowPriorityInterrupt020 (void){ if(INTCON0bits.GIE == 1 && PIE6bits.TMR3IE == 1 && PIR6bits.TMR3IF == 1) { PIR6bits.TMR3IF = 0; TMR3_ISR(); } if(INTCON0bits.GIE == 1 && PIE4bits.TMR2IE == 1 && PIR4bits.TMR2IF == 1) { PIR4bits.TMR2IF = 0; TMR2_ISR(); } if(INTCON0bits.GIE == 1 && PIE4bits.TMR1IE == 1 && PIR4bits.TMR1IF == 1) { PIR4bits.TMR1IF = 0; TMR1_ISR(); } if(INTCON0bits.GIE == 1 && PIE3bits.TMR0IE == 1 && PIR3bits.TMR0IF == 1) { PIR3bits.TMR0IF = 0; TMR0_ISR(); } }

2017 Microchip Technology Inc. DS90003162A_JP - p. 9

Page 10: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

TB3162

例 5: ベクタ番号を使った割り込みハンドラの実装

// Vector ID number of the Interrupt Sources#define INT08#define ZCD 9#define CMP112#define CLC139#define TMR031#define TMR132#define TMR234#define TMR354

// MVECEN = OFF and IPEN = 1void __interrupt() highPriorityInterrupt010(void){ uint8_t VectorID_High = WREG; switch (VectorID_High) { case INT0: PIR1bits.INT0IF = 0; INT0_ISR(); break; case ZCD: PIR1bits.ZCDIF = 0; ZCD_ISR(); break; case CMP1: PIR1bits.C1IF = 0; C1_ISR(); break; case CLC1: PIR4bits.CLC1IF = 0; CLC1_ISR(); break; default: break; }}

void __interrupt(low_priority) lowPriorityInterrupt020 (void){ uint8_t VectorID_Low = WREG; switch (VectorID_Low) { case TMR3: PIR6bits.TMR3IF = 0; TMR3_ISR(); break; case TMR2: PIR4bits.TMR2IF = 0; TMR2_ISR(); break; case TMR1: PIR4bits.TMR1IF = 0; TMR1_ISR(); break; case TMR0: PIR3bits.TMR0IF = 0; TMR0_ISR(); break; default: break; }}

DS90003162A_JP - p. 10 2017 Microchip Technology Inc.

Page 11: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

TB3162

まとめ

ベクタ割り込みコントローラ モジュールは、最大で2 通りの優先度を持つ割り込みを処理できます。

本モジュールは、同時に発生した同一優先度を持つ割り込みの競合を、2 通りの方法 ( 割り込みハンドラ内のポーリングされたフラグビットの順位に基づく方法と、マイクロコントローラの IVT によって設定されるハードウェアの優先順位に基づく方法 ) により解決できます。

本モジュールにより、割り込みベクタアドレスを柔軟に再配置できます。

IVT のマルチベクタ割り込みを使う事で、ソフトウェア割り込みハンドラは不要となるため、コードを簡素化できます。また、レガシーのソフトウェア割り込みハンドラに比べて、応答速度とレイテンシが向上します。

2017 Microchip Technology Inc. DS90003162A_JP - p. 11

Page 12: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

TB3162

NOTE:

DS90003162A_JP - p. 12 2017 Microchip Technology Inc.

Page 13: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

2017 Microchip Technology Inc. DS90003162A_JP - p. 13

本書に記載されているデバイス アプリケーション等に関する

情報は、ユーザの便宜のためにのみ提供されているものであ

り、更新によって無効とされる事があります。お客様のアプ

リケーションが仕様を満たす事を保証する責任は、お客様に

あります。Microchip 社は、明示的、暗黙的、書面、口頭、法

定のいずれであるかを問わず、本書に記載されている情報に

関して、状態、品質、性能、商品性、特定目的への適合性を

はじめとする、いかなる類の表明も保証も行いません。

Microchip 社は、本書の情報およびその使用に起因する一切の

責任を否認します。Microchip 社の明示的な書面による承認な

しに、生命維持装置あるいは生命安全用途に Microchip 社の製

品を使用する事は全て購入者のリスクとし、また購入者はこ

れによって発生したあらゆる損害、クレーム、訴訟、費用に

関して、Microchip 社は擁護され、免責され、損害をうけない

事に同意するものとします。暗黙的あるいは明示的を問わず、

Microchip社が知的財産権を保有しているライセンスは一切譲

渡されません。

商標

Microchip 社の名称と Microchip ロゴ、dsPIC、FlashFlex、KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、PIC32 ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、

米国およびその他の国における Microchip TechnologyIncorporated の登録商標です。

FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、MTP、SEEVAL、Embedded Control Solutions Company は、

米国における Microchip Technology Incorporated の登録商標

です。

Silicon Storage Technologyは、その他の国におけるMicrochipTechnology Incorporated の登録商標です。

Analog-for-the-Digital Age、Application Maestro、BodyCom、

chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、MPASM、MPF、MPLAB 認証ロゴ、MPLIB、MPLINK、mTouch、Omniscient Code Generation、PICC、PICC-18、PICDEM、

PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、SQI、Serial Quad I/O、Total Endurance、TSHARC、UniWinDriver、WiperLock、ZENA、Z-Scale は、米国およびその他の国におけ

る Microchip Technology Incorporatedの登録商標です。

SQTP は、米国における Microchip Technology Incorporatedのサービスマークです。

GestICとULPPは、その他の国におけるMicrochip TechnologyGermany II GmbH & Co. & KG (Microchip TechnologyIncorporated の子会社 ) の登録商標です。

その他、本書に記載されている商標は各社に帰属します。

©2013, Microchip Technology Incorporated, Printed in theU.S.A., All Rights Reserved.

ISBN: 978-1-5224-1611-1

Microchip 社製デバイスのコード保護機能に関して次の点にご注意ください。

• Microchip 社製品は、該当する Microchip 社データシートに記載の仕様を満たしています。

• Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に流

通している同種製品の中でも最も高度であると考えています。

• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、

Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知的所

有権の侵害に該当する可能性が非常に高いと言えます。

• Microchip 社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。

• Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保護

機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。

コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社

のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著

Microchip 社では、Chandler および Tempe ( アリゾナ州 )、Gresham( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を取得しています。Microchip 社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得しています。

QUALITY MANAGEMENT SYSTEM CERTIFIED BY DNV

== ISO/TS 16949 ==

Page 14: TB3162 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/90003162A_JP.pdfTB3162 DS90003162A_JP - p. 2 2017 Microchip Technology Inc. 図2: 高優先度と低優先度の割り込み要求が同時に発生した場合

DS90003162A_JP - p. 14 2017 Microchip Technology Inc.

北米本社2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel:480-792-7200 Fax:480-792-7277技術サポート : http://www.microchip.com/supportURL: www.microchip.com

アトランタDuluth, GA Tel:678-957-9614 Fax:678-957-1455

オースティン (TX)Tel:512-257-3370

ボストンWestborough, MA Tel:774-760-0087 Fax:774-760-0088

シカゴItasca, IL Tel:630-285-0071 Fax:630-285-0075

クリーブランドIndependence, OH Tel:216-447-0464

Fax:216-447-0643

ダラスAddison, TX Tel:972-818-7423 Fax:972-818-2924

デトロイトNovi, MI Tel:248-848-4000

ヒューストン (TX) Tel:281-894-5983

インディアナポリスNoblesville, IN Tel:317-773-8323Fax:317-773-5453

ロサンゼルスMission Viejo, CA Tel:949-462-9523 Fax:949-462-9608

ニューヨーク (NY) Tel:631-435-6000

サンノゼ (CA) Tel:408-735-9110

カナダ - トロントTel:905-673-0699 Fax:905-673-6509

アジア / 太平洋

アジア太平洋支社Suites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel:852-2943-5100Fax:852-2401-3431

オーストラリア - シドニーTel:61-2-9868-6733Fax:61-2-9868-6755

中国 - 北京Tel:86-10-8569-7000 Fax:86-10-8528-2104

中国 - 成都Tel:86-28-8665-5511Fax:86-28-8665-7889

中国 - 重慶Tel:86-23-8980-9588Fax:86-23-8980-9500

中国 - 東莞

Tel:86-769-8702-9880

中国 - 杭州Tel:86-571-8792-8115 Fax:86-571-8792-8116

中国 - 香港 SARTel:852-2943-5100 Fax:852-2401-3431

中国 - 南京Tel:86-25-8473-2460Fax:86-25-8473-2470

中国 - 青島Tel:86-532-8502-7355Fax:86-532-8502-7205

中国 - 上海Tel:86-21-5407-5533 Fax:86-21-5407-5066

中国 - 瀋陽Tel:86-24-2334-2829Fax:86-24-2334-2393

中国 - 深圳Tel:86-755-8864-2200 Fax:86-755-8203-1760

中国 - 武漢Tel:86-27-5980-5300Fax:86-27-5980-5118

中国 - 西安Tel:86-29-8833-7252Fax:86-29-8833-7256

アジア / 太平洋

中国 - 厦門Tel:86-592-2388138 Fax:86-592-2388130

中国 - 珠海Tel:86-756-3210040 Fax:86-756-3210049

インド - バンガロールTel:91-80-3090-4444 Fax:91-80-3090-4123

インド - ニューデリーTel:91-11-4160-8631Fax:91-11-4160-8632

インド - プネTel:91-20-3019-1500

日本 - 大阪Tel:81-6-6152-7160 Fax:81-6-6152-9310

日本 - 東京Tel:81-3-6880- 3770 Fax:81-3-6880-3771

韓国 - 大邱Tel:82-53-744-4301Fax:82-53-744-4302

韓国 - ソウルTel:82-2-554-7200Fax:82-2-558-5932 または 82-2-558-5934

マレーシア - クアラルンプールTel:60-3-6201-9857Fax:60-3-6201-9859

マレーシア - ペナンTel:60-4-227-8870Fax:60-4-227-4068

フィリピン - マニラTel:63-2-634-9065Fax:63-2-634-9069

シンガポールTel:65-6334-8870Fax:65-6334-8850

台湾 - 新竹Tel:886-3-5778-366Fax:886-3-5770-955

台湾 - 高雄Tel:886-7-213-7828

台湾 - 台北Tel:886-2-2508-8600 Fax:886-2-2508-0102

タイ - バンコクTel:66-2-694-1351Fax:66-2-694-1350

ヨーロッパ

オーストリア - ヴェルスTel:43-7242-2244-39

Fax:43-7242-2244-393

デンマーク - コペンハーゲンTel:45-4450-2828 Fax:45-4485-2829

フランス - パリTel:33-1-69-53-63-20 Fax:33-1-69-30-90-79

ドイツ - デュッセルドルフTel:49-2129-3766400

ドイツ - ミュンヘンTel:49-89-627-144-0 Fax:49-89-627-144-44

ドイツ - プフォルツハイムTel:49-7231-424750

イタリア - ミラノ Tel:39-0331-742611 Fax:39-0331-466781

イタリア - ベニスTel:39-049-7625286

オランダ - ドリューネンTel:31-416-690399 Fax:31-416-690340

ポーランド - ワルシャワTel:48-22-3325737

スペイン - マドリッドTel:34-91-708-08-90Fax:34-91-708-08-91

スウェーデン - ストックホルムTel:46-8-5090-4654

イギリス - ウォーキンガムTel:44-118-921-5800Fax:44-118-921-5820

各国の営業所とサービス

01/27/15