割り込み機能を使うと、特定のイベントが通常のプロ グラムフローに割り込む事ができます。ファームウェ アによって割り込み要因を判断し、それに基づいて動 作します。MCU をスリープから復帰させるように設 定できる割り込みもあります。
この章では、割り込みに関する以下の情報を提供します。
•
動作•
割り込みレイテンシ•
スリープ中の割り込み• INT
ピン•
コンテキスト自動保存機能多くの周辺モジュールが割り込みを生成します。詳細 は、該当する章を参照してください。
図7-1に、割り込みロジックのブロック図を示します。
図 7-1: 割り込みロジック
TMR0IF TMR0IE INTF INTE IOCIF
IOCIE
Interruptto CPUWake-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: 非同期割り込みのレイテンシ = 3~5 TCY、同期割り込みのレイテンシ = 3~4 TCY (TCY = 命令のサイクル時間) です。命令(PC)が1サイクルと2サイクルのどちらでも、レイテンシは同じです。
3: CLKOUTは全てのオシレータモードで使えるわけではありません。
4: INTの最小パルス幅については、セクション26.0「電気的仕様」のAC仕様を参照してください。
5: INTFは、Q4~Q1サイクルの間にいつでもセットできます。
(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」 = ビットはクリア