• 検索結果がありません。

割り込み

ドキュメント内 PIC16(L)F1703/7 Data Sheet (ページ 80-93)

割り込み機能を使うと、特定のイベントが通常のプロ グラムフローに割り込む事ができます。ファームウェ アによって割り込み要因を判断し、それに基づいて動 作します。MCU をスリープから復帰させるように設 定できる割り込みもあります。

この章では、割り込みに関する以下の情報を提供します。

動作

割り込みレイテンシ

スリープ中の割り込み

• INT

ピン

コンテキスト自動保存機能

多くの周辺モジュールが割り込みを生成します。詳細 は、該当する章を参照してください。

図7-1に、割り込みロジックのブロック図を示します。

図 7-1: 割り込みロジック

TMR0IF TMR0IE INTF INTE IOCIF

IOCIE

Interruptto CPU

Wake-up (If in Sleep mode)

GIE

(TMR1IF) PIR1<0>

PIRn<7>

PEIE

(TMR1IE) PIE1<0>

Peripheral Interrupts

PIEn<7>

PIC16(L)F1703/7

7.1 動作

デバイスリセット後、割り込みは無効です。有効にす るには、以下のビットをセットします。

• INTCON

レジスタの

GIE

ビット

特定の割り込みイベントに対する割り込みイネーブ ルビット

• INTCON

レジスタの

PEIE

ビット

(

その割り込みイ ベントの割り込みイネーブルビットが

PIE1

PIE2

レジスタに含まれる場合

)

INTCON、PIR1、PIR2

レジスタは、割り込みフラグ ビットにより各割り込みを記録します。割り込みフラ グビットは、GIE、PEIE、各割り込みイネーブルビッ トの状態に関わらずセットされます。

GIE

ビットがセットされている場合に割り込みイベン トが発生すると、以下のイベントが発生します。

現在プリフェッチされている命令がフラッシュ

(

消去

)

される。

• GIE

ビットがクリアされる。

現在の

PC (

プログラム カウンタ

)

がスタックに プッシュされる。

重要なレジスタ値がシャドウレジスタに自動保存さ れる

(

セクション7.5「コンテキスト自動保存機能」

を参照

)。

• PC

に割り込みベクタ

0004h

が読み込まれる。

割り込みサービスルーチン

(ISR)

のファームウェアで は、割り込みフラグビットをポーリングして割り込み 要因を判断します。割り込み動作の繰り返しを避ける ため、

ISR

から抜ける前に割り込みフラグビットをク リアする必要があります。ISR実行中に発生する割り 込みは全て割り込みフラグで記録されますが、

GIE

ビットがクリアされているためプロセッサがその割り 込みベクタにリダイレクトする事はありません。

RETFIE

命令では、割り込み前に実行していたアドレ スをスタックからポップし、シャドウレジスタに保存 されていたコンテキストを復元し、GIEビットをセッ トする事によって、

ISR

から通常動作に復帰します。

具体的な割り込み動作のその他の情報は、各周辺モ ジュールの章を参照してください。

7.2 割り込みレイテンシ

割り込みレイテンシとは、割り込みイベントが発生して から、割り込みベクタのコード実行が開始するまでの時 間を意味します。同期割り込みのレイテンシは、3~

4

命令サイクルです。非同期割り込みのレイテンシは割 り込み発生タイミングによって異なり、3~

5

命令サ イクルです。詳細は図7-2と図7-3を参照してください。

Note 1:

各割り込みフラグビットは、その他のイ

ネーブルビットの状態とは無関係にセッ トされます。

2: GIE

ビットがクリアされている限り、全 ての割り込みは無視されます。GIE ビッ トがクリアされている間に発生した全て の割り込みは、GIE ビットが再びセット された時点で処理されます。

PIC16(L)F1703/7

図 7-2: 割り込みレイテンシ

Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 OSC1

CLKR

PC 0004h 0005h

PC

Inst(0004h) NOP

GIE

Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

1 Cycle Instruction at PC

PC

Inst(0004h) 2 Cycle Instruction at PC NOP

FSR ADDR PC+1 PC+2 0004h 0005h

PC

Inst(0004h) NOP

GIE

PC PC-1

3 Cycle Instruction at PC Execute

Interrupt

Inst(PC)

Interrupt Sampled during Q1

Inst(PC)

PC-1 PC+1

NOP

PC New PC/

PC+1 0005h

PC-1 PC+1/FSR

ADDR 0004h

NOP Interrupt

GIE

Interrupt

INST(PC) NOP NOP

FSR ADDR PC+1 PC+2 0004h 0005h

PC

Inst(0004h) NOP

GIE

PC PC-1

3 Cycle Instruction at PC Interrupt

INST(PC) NOP NOP NOP

Inst(0005h) Execute

Execute

Execute

PIC16(L)F1703/7

図 7-3:

INT

ピン割り込みのタイミング

Q2

Q1 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

OSC1 CLKOUT

INT pin INTF GIE

INSTRUCTION FLOW PC

Instruction Fetched Instruction Executed

Interrupt Latency

PC PC + 1 PC + 1 0004h 0005h

Inst (0004h) Inst (0005h)

Forced NOP Inst (PC) Inst (PC + 1)

Inst (PC – 1) Inst (PC) Forced NOP Inst (0004h)

Note 1: INTFフラグは、ここでサンプリングされます(Q1ごと)。

2: 非同期割り込みのレイテンシ = 35 TCY、同期割り込みのレイテンシ = 34 TCY (TCY = 命令のサイクル時間) です。命令(PC)1サイクルと2サイクルのどちらでも、レイテンシは同じです。

3: CLKOUTは全てのオシレータモードで使えるわけではありません。

4: INTの最小パルス幅については、セクション26.0「電気的仕様」のAC仕様を参照してください。

5: INTFは、Q4Q1サイクルの間にいつでもセットできます。

(1)

(2) (3)

(4)

(1) (5)

PIC16(L)F1703/7

7.3 スリープ中の割り込み

割り込みの種類によっては、スリープからの復帰に使 えます。この場合、周辺モジュールがシステムクロッ クを使わずに動作できる必要があります。使う割り込 み要因のイネーブルビットは、スリープに移行する前 にセットしておく必要があります。

スリープから復帰する際、GIEビットもセットされて いると、プロセッサは割り込みベクタへ分岐します。

セットされていない場合、

SLEEP

命令の次の命令から 実行を再開します。

SLEEP

命令の直後の命令は、ISR へ分岐する前に必ず実行されます。詳細はセクション 8.0「パワーダウン モード (スリープ)」を参照してく ださい。

7.4 INT ピン

INT

ピンを使うと、非同期のエッジトリガ型割り込み を生成できます。INTCONレジスタの

INTE

ビットを セ ッ ト す る と、こ の 割 り 込 み が 有 効 化 さ れ ま す。

OPTION_REG

レジスタの

INTEDG

ビットで割り込み を発生させるエッジを設定します。INTEDGビットが セットされている場合、立ち上がりエッジで割り込み が発生します。INTEDGビットがクリアされている場 合、立ち下がりエッジで割り込みが発生します。

INT

ピンに有効なエッジが現れると、

INTCON

レジスタの

INTF

ビットがセットされます。この時

GIE

ビットと

INTE

ビットもセットされていると、プロセッサはプロ グラムの実行を割り込みベクタへリダイレクトします。

7.5 コンテキスト自動保存機能

割り込み動作に移行する際、

PC

の戻りアドレス値が スタックに保存されます。また、以下に示すレジスタ 値も自動的にシャドウレジスタに保存されます。

• W

レジスタ

• STATUS

レジスタ

(TO

PD

を除く

)

• BSR

レジスタ

• FSR

レジスタ

• PCLATH

レジスタ

割り込みサービスルーチンから通常動作に戻る際、こ れらのレジスタ値は自動的に復元されます。

ISR

中にこ れらのレジスタに加えられた変更は、全て失われます。

変更が失われないようにするには、対応するシャドウ レジスタも変更しておきます。これにより、

ISR

終了 時に変更後の値が書き戻されます。シャドウレジスタ はバンク

31

内にあり、読み書き可能です。ユーザア プリケーションによっては、その他のレジスタ値の保 存が必要になる場合があります。

PIC16(L)F1703/7

7.6 レジスタ定義 : 割り込み制御

レジスタ 7-1:

INTCON: 割り込み制御レジスタ

R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R-0/0

GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF

(1)

bit 7 bit 0

凡例

:

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

u = ビットは不変 x = ビットは未知 -n/n = POR時とBOR時の値/その他の全てのリセット時の値

「1」 = ビットはセット 「0」 = ビットはクリア

bit 7 GIE: グローバル割り込みイネーブルビット

1 =

全てのアクティブな割り込みを有効にする

0 =

全ての割り込みを無効にする

bit 6 PEIE: 周辺モジュール割り込みイネーブルビット

1 =

全てのアクティブな周辺モジュール割り込みを有効にする

0 =

全ての周辺モジュール割り込みを無効にする

bit 5 TMR0IE: Timer0

オーバーフロー割り込みイネーブルビット

1 = Timer0

割り込みを有効にする

0 = Timer0

割り込みを無効にする

bit 4 INTE: INT

外部割り込みイネーブルビット

1 = INT

外部割り込みを有効にする

0 = INT

外部割り込みを無効にする

bit 3 IOCIE: 状態変化割り込みイネーブルビット

1 =

状態変化割り込みを有効にする

0 =

状態変化割り込みを無効にする

bit 2 TMR0IF: Timer0

オーバーフロー割り込みフラグビット

1 = TMR0

レジスタがオーバーフローした

0 = TMR0

レジスタはオーバーフローしていない

bit 1 INTF: INT

外部割り込みフラグビット

1 = INT

外部割り込みが発生した

0 = INT

外部割り込みは発生していない

bit 0 IOCIF:

状態変化割り込みフラグビット(1)

1 =

状態変化割り込みピンの少なくとも

1

つの状態が変化した

0 =

状態変化割り込みピンの状態は変化していない

Note 1: IOCIF

フラグビットは読み出し専用で、

IOCxF

レジスタの全ての状態変化割り込みフラグがソフトウェア

によってクリアされると、このビットもクリアされます。

Note:

割り込み条件が発生すると、

INTCON

レジ

スタのグローバル イネーブルビット

(GIE)

または対応するイネーブルビットの状態 に関係なく割り込みフラグビットがセッ トされます。ユーザソフトウェアでは、

割り込みを許可する前に、対応する割り 込みフラグビットを確実にクリアしてく ださい。

PIC16(L)F1703/7

レジスタ 7-2:

PIE1: 周辺モジュール割り込みイネーブル レジスタ 1

R/W-0/0 R/W-0/0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0

TMR1GIE ADIE - - SSP1IE CCP1IE TMR2IE TMR1IE

bit 7 bit 0

凡例

:

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

u = ビットは不変 x = ビットは未知 -n/n = POR時とBOR時の値/その他の全てのリセット時の値

「1」 = ビットはセット 「0」 = ビットはクリア

bit 7 TMR1GIE: Timer1

ゲート割り込みイネーブルビット

1 = Timer1

のゲート アクイジション割り込みを有効にする

0 = Timer1

のゲートアクイジション割り込みを無効にする

bit 6 ADIE: A/D

コンバータ

(ADC)

割り込みイネーブルビット

1 = ADC

割り込みを有効にする

0 = ADC

割り込みを無効にする

bit 5-4

未実装

:「 0

」として読み出し

bit 3 SSP1IE: 同期シリアルポート (MSSP)

割り込みイネーブルビット

1 = MSSP

割り込みを有効にする

0 = MSSP

割り込みを無効にする

bit 2 CCP1IE: CCP1

割り込みイネーブルビット

1 = CCP1

割り込みを有効にする

0 = CCP1

割り込みを無効にする

bit 1 TMR2IE: TMR2/PR2

一致割り込みイネーブルビット

1 = Timer2/PR2

一致割り込みを有効にする

0 = Timer2/PR2

一致割り込みを無効にする

bit 0 TMR1IE: Timer1

オーバーフロー割り込みイネーブルビット

1 = Timer1

オーバーフロー割り込みを有効にする

0 = Timer1

オーバーフロー割り込みを無効にする

Note:

周辺モジュール割り込みを有効にするには、

INTCONレジスタのPEIE

ビットをセット する必要があります。

ドキュメント内 PIC16(L)F1703/7 Data Sheet (ページ 80-93)