MB9D560 Series 割込みコントローラの使用方法

MB9D560 Series
割込みコントローラの使用方法
32-Bit Microcontroller
Spansion® TraveoTM Family
APPLICATION NOTE
Publication Number MB9D560_AN708-00006
CONFIDENTIAL
Revision 1.0
Issue Date July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
対象製品
本操作マニュアルに記載されている内容の対象製品は、下記のとおりです。
シリーズ名
MB9D560
2
CONFIDENTIAL
品種型格(パッケージサフィックスは除く)
MB9DF564MAE/F565MAE/F566MAE
MB9DF564MGE/F565MGE/F566MGE
MB9D560_AN708-00006-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
Table of Contents
1.
2.
3.
4.
5.
6.
7.
はじめに ......................................................................................................................................... 6
1.1
この文書について................................................................................................................ 6
1.2
開発環境 ........................................................................................................................... 6
割込みコントローラの概要 ............................................................................................................ 7
2.1
割込みコントローラ構成 ..................................................................................................... 7
割込みコントローラ操作時の注意 .................................................................................................. 8
3.1
割込み受け付け停止状態 ..................................................................................................... 8
3.2
割込み抑止状態 ................................................................................................................... 8
3.2.1
IRQ 割込み状況ビット読出し時の注意 .............................................................. 9
3.3
割込み抑止状態解除 ............................................................................................................ 9
3.4
割込み受け付け停止状態時のみ書込み可能なレジスタ .................................................... 10
多重割込みに対応した割込みハンドラ実装時の注意 ................................................................... 11
4.1
割込み抑止状態解除 .......................................................................................................... 11
4.2
割込み処理終了時のホールドクリア ................................................................................. 11
4.3
割込みを無効にする方法 ................................................................................................... 12
......................................................................................................................... 15
4.4
実装例
多重割込みに対応しない割込みハンドラ実装時の注意 ................................................................ 16
5.1
割込み受け付け停止方法 ................................................................................................... 16
5.2
IRQ 割込み状況ビットからの読出し ................................................................................. 16
5.3
実装例
......................................................................................................................... 17
参考文書 ....................................................................................................................................... 18
主な変更内容 ................................................................................................................................ 19
July 16, 2015, MB9D560_AN708-00006-1v0-J
CONFIDENTIAL
3
V1.1
A P P L I C A T I O N
N O T E
Figures
Figure 2-1 割込みコントローラ構成 .......................................................................................................... 7
Figure 4-1 方法 1 実装例 ......................................................................................................................... 13
Figure 4-2 方法 2 実装例 ......................................................................................................................... 13
Figure 4-3 方法 3 実装例 ......................................................................................................................... 14
Figure 4-4 方法 4 実装例 ......................................................................................................................... 14
Figure 4-5 多重割込み対応割込みハンドラ実装例 ................................................................................... 15
Figure 5-1 多重割込みに対応しない割込みハンドラ実装例 ..................................................................... 17
4
CONFIDENTIAL
MB9D560_AN708-00006-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
Tables
Table 1-1 開発環境 ..................................................................................................................................... 6
Table 3-1 IRQ 割込み状況ビットの値が示す割込みコントローラの割込み状態 ........................................ 8
Table 3-2 割込み抑止解除レジスタ ........................................................................................................... 9
Table 3-3 割込み受け付け停止状態時のみ書込み可能なレジスタ ........................................................... 10
Table 4-1 割込みを無効にする方法 ......................................................................................................... 12
July 16, 2015, MB9D560_AN708-00006-1v0-J
CONFIDENTIAL
5
V1.1
A P P L I C A T I O N
N O T E
1. はじめに
1.1
この文書について
本アプリケーションノートは、スパンション製マイコン Traveo ファミリ MB9D560 の利用を検討されて
いる方を対象としています。
割込みを検出してから割込みコントローラが処理を行うタイミングと CPU が処理を行うタイミングが異な
るため、割込みコントローラを操作する際には特有の注意が必要になります。
本アプリケーションノートでは、割込みコントローラを操作する際の注意点について記載します。
1.2
開発環境
本アプリケーションノートの内容は Table 1-1 に示す環境で開発されています。
Table 1-1 開発環境
6
CONFIDENTIAL
マイコン
MB9DF566MGB
統合開発環境
MULTI v6.1.4
評価ボード
MB2198-770-02-E0
最適化
Optimize for Speed
MB9D560_AN708-00006-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
2. 割込みコントローラの概要
割込みコントローラは割込みを検出すると、以下の処理を行います。
 CPU への nIRQ 通知
 割込みのプライオリティレベル/マスクレベルを制御
 割込みベクタアドレスの通知
2.1
割込みコントローラ構成
割込みコントローラは Figure 2-1 の基本ブロックから構成されています。
Figure 2-1 割込みコントローラ構成
Bus
Bus Slave
IRQ Processing
Stage
CPUn
nIRQ
Hold Stage
Preprocessed Status Stage
NMI
IRQ Channel
Enable Stage
RAW Status Stage
IRQ
Software Interrupt Stage
Control
Registers
FIQ Processing
Stage
nFIQ
割込みコントローラ
各ブロックの詳細は、MB9D560 シリーズハードウェアマニュアル CHAPTER10:割込みコントローラを参
照してください。
July 16, 2015, MB9D560_AN708-00006-1v0-J
CONFIDENTIAL
7
V1.1
A P P L I C A T I O N
N O T E
3. 割込みコントローラ操作時の注意
割込みコントローラは CPU とは異なるタイミングで割込みの優先順位を制御しています。そのため割込み
コントローラのレジスタには、割込みコントローラが割込みを受け付けられる状態で書込みを行うと誤動作
を引き起こすものがあります。該当レジスタに書込みを行う際は割込みコントローラを割込み受け付け停止
状態にする必要があります。
本章では割込みコントローラを割込み受け付け停止状態にする方法と、割込み受け付け停止状態時のみ書込
み可能なレジスタについて記します。
3.1
割込み受け付け停止状態
割込みコントローラに対して割込みの受け付けを停止させるには以下の 2 つの方法があります。
 割込みコントローラを IRQ 処理ブロック無効にする
(IRC 制御/ステータスレジスタの IRQ 処理ブロック有効/無効設定ビット(IRCn_CSR[bit0])に”0”を設定)
 割込みコントローラを割込み抑止状態にする
(IRC IRQ ステータスレジスタの IRQ 割込み状況ビット(IRCn_IRQST[bit24])を読出す)
3.2
割込み抑止状態
割込みコントローラが割込み抑止状態に遷移すると CPU に対して割込みの発生を通知しません。割込みコ
ントローラは以下のいずれかの条件が満たされた場合、割込み抑止状態に遷移します。
 割込みコントローラが CPU へ割込み通知を行った
 IRC IRQ ステータスレジスタの IRQ 割込み状況ビット(IRCn_IRQST[bit24])が読出された
IRC IRQ ステータスレジスタの IRQ 割込み状況ビット(IRCn_IRQST[bit24])は割込みコントローラの割込
み状態の表示及び、割込みの抑止制御を行うためのビットです。IRQ 割込み状況ビットに対して読出しを行
うことにより任意のタイミング(CPU の I-FLAG が”1”(割込み禁止)時を除く)で割込みコントローラを
割込み抑止状態へ遷移させることができます。
IRQ 割込み状況ビットの値が示す割込みコントローラの状態を Table 3-1 に記します。
Table 3-1 IRQ 割込み状況ビットの値が示す割込みコントローラの割込み状態
IRQ 割込み状況ビットの値
割込みコントローラの状態
以下のいずれかであることを示す。
0
・割込みコントローラが CPU に対して割込みを通知している。
・割込みコントローラが割込み抑止状態である。
1
8
CONFIDENTIAL
受け付け中の割込みが存在せず、nIRQ ビットの読出しにより割込みコントローラが割
込み抑止状態へ遷移した。
MB9D560_AN708-00006-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
3.2.1
N O T E
IRQ 割込み状況ビット読出し時の注意
IRC IRQ ステータスレジスタの IRQ 割込み状況ビット(IRCn_IRQST[bit24])に対して読出しを行う場合は
以下の点に注意してください。
 読出される値について
IRQ 割込み状況ビットから”1”を読出すことにより割込みコントローラは割込み抑止状態となるため、IRQ
割込み状況ビットに対する 2 回目以降の読出し結果は常に”0”となります。再度”1”が読出されるタイミン
グは割込み抑止状態を解除した直後の読出し時のみとなります。
 読出しが禁止されているタイミングについて
CPU の I-FLAG が”1”(割込み禁止)のときに IRQ 割込み状況ビットに対して読出しを行うことは禁止で
す。CPU の I-FLAG が”1”のときに割込みコントローラが次の割込みを受け付けた場合、IRQ 割込み状況
ビットに対して読出しを行っても割込みコントローラが割込み抑止状態へ遷移しない可能性があります。
3.3
割込み抑止状態解除
Table 3-2 の割込み抑止解除レジスタに対して書込みを行うことで割込み抑止状態は解除されます。
Table 3-2 割込み抑止解除レジスタ
レジスタ略称
レジスタ名
IRCn_IRQVAr
IRC IRQ ベクタアドレスレジスタ
IRCn_IRQPL0-127
IRC IRQ プライオリティレベルレジスタ
IRCn_IRQS0-15
IRC IRQ ソフトウェア割込みセットレジスタ
IRCn_IRQR0-15
IRC IRQ ソフトウェア割込みリセットレジスタ
IRCn_IRQCES0-15
IRC IRQ チャネル許可セットレジスタ
IRCn_IRQCEC0-15
IRC IRQ チャネル許可クリアレジスタ
IRCn_IRQCE0-15
IRC IRQ チャネル許可設定レジスタ
IRCn_IRQHC
IRC IRQ ホールドクリアレジスタ
IRCn_IRQPLM
IRC IRQ プライオリティレベルマスクレジスタ
IRCn_CSR
IRC 制御/ステータスレジスタ
割込みコントローラは割込み抑止状態へ遷移すると、割込み抑止解除レジスタに対して書込みを行うまで割
込み抑止状態のままになります。そのため、再度割込みを有効にする場合はレジスタ操作が不要であっても
割込み抑止解除レジスタに対して書込み(ダミーライト)を行ってください。
July 16, 2015, MB9D560_AN708-00006-1v0-J
CONFIDENTIAL
9
V1.1
A P P L I C A T I O N
3.4
N O T E
割込み受け付け停止状態時のみ書込み可能なレジスタ
Table 3-3 のレジスタへの書込みは必ず、割込みコントローラが割込み受け付け停止状態時に行ってください。
割込みの受け付けを停止していないときに書込みを行うと誤動作の原因となります。
Table 3-3 割込み受け付け停止状態時のみ書込み可能なレジスタ
レジスタ略称
レジスタ名
IRCn_IRQPL0-127
IRC IRQ プライオリティレベルレジスタ
IRCn_IRQHC
IRC IRQ ホールドクリアレジスタ
IRCn_IRQPLM
IRC IRQ プライオリティレベルマスクレジスタ
IRCn_CSR
IRC 制御/ステータスレジスタ
なお、Table 3-3 のレジスタは割込み抑止解除レジスタ(Table 3-2)に含まれているため、Table 3-3 のレジス
タへ書込みを行った後は割込み抑止状態が解除されます。そのため、Table 3-3 のレジスタに対して複数回書
込みを行う場合は以下のいずれかの方法で行ってください。
 Table 3-3 のレジスタへ書込みを行うごとに IRC IRQ ステータスレジスタの IRQ 割込み状況ビット
(IRCn_IRQST[bit24])から読出しを行う
 Table 3-3 のレジスタへ書込みを行う前に割込みコントローラを IRQ 処理ブロック無効に設定(IRC 制御/
ステータスレジスタの IRQ 処理ブロック有効/無効設定ビット(IRCn_CSR[bit0])に”0”を設定)する
10
CONFIDENTIAL
MB9D560_AN708-00006-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
4. 多重割込みに対応した割込みハンドラ実装時の注意
ARM アーキテクチャでは多重割込みをサポートしていないため、ソフトウェアで実装する必要があります。
本章では多重割込みに対応した割込みハンドラを実装する際の注意点について記します。
4.1
割込み抑止状態解除
割込みコントローラは CPU へ割込み通知を行うと割込み抑止状態へ遷移します。そのため、割込みハンド
ラ処理開始時、割込みコントローラは割込み抑止状態となっています。多重割込みを行う場合は割込みハン
ドラの先頭にて割込み抑止解除レジスタ(Table 3-2)に対して書込みを行わなければなりません。
また、割込みハンドラ処理開始時、CPU の I-FLAG にはハードウェアによって”1” (割込み禁止)が設定さ
れています。割込み抑止解除と同時に CPU の I-FLAG に”0” (割込み許可)を設定してください。
4.2
割込み処理終了時のホールドクリア
割込み処理終了時のホールドクリアは必ず CPU の I-FLAG が”1”(割込み禁止)の状態で行ってください。
CPU の I-FLAG が”0”(割込み許可)の状態でホールドクリアを行った場合、ホールドクリアを行ったタイ
ミングで割込み抑止状態が解除されます。そのため実行中の割込みハンドラの処理が完了する前に次の割込
み処理が実行され、スタックオーバーフローを引き起こす可能性があります。
IRC IRQ ホールドクリアレジスタ(IRCn_IRQHC)は割込み受け付け停止状態時のみ書込み可能なレジスタ
(Table 3-3)に含まれるため、CPU の I-FLAG が”1”(割込み禁止)の状態でホールドクリアを行うために
は以下の手順で行う必要があります。
1.
2.
3.
IRC IRQ ステータスレジスタの IRQ 割込み状況ビット(IRCn_IRQST[bit24])を読出す
CPU の I-FLAG に”1”を設定
IRC IRQ ホールドクリアレジスタ(IRCn_IRQHC)にクリアする IRQ チャネル番号を書込む
July 16, 2015, MB9D560_AN708-00006-1v0-J
CONFIDENTIAL
11
V1.1
A P P L I C A T I O N
4.3
N O T E
割込みを無効にする方法
Table 4-1 の方法を行うことにより、多重割込み対応割込みハンドラ処理内で割込みを無効にすることが可能
です。
ただし、割込み無効中にそれぞれの禁止事項に記載している処理は行わないでください。
各方法の実装例を Figure 4-1~Figure 4-4 に記します。
Table 4-1 割込みを無効にする方法
割込みを無効にする方法
禁止事項
IRQ 割込み状況ビットからの読出し。
方法 1
CPU の I-FLAG に”1”(割込み禁止)を設定。
割込み受け付け停止状態時のみ書込み可能なレジスタ
(Table 3-3)への書込み。
方法 2
IRQ 割込み状況ビットからの読出し。
※1
割込み受け付け停止状態時のみ書込み可能なレジスタ
(Table 3-3)への複数回書込み。
CPU の I-FLAG へ”1”(割込み禁止)を設定後の IRQ 割込み
方法 3
IRQ 割込み状況ビット読出し実施直後に CPU
状況ビットからの読出し。
の I-FLAG に”1”(割込み禁止)を設定。 ※1
割込み受け付け停止状態時のみ書込み可能なレジスタ
(Table 3-3)への複数回書込み。
方法 4
IRQ 処理ブロック有効/無効設定ビットに”0”
(IRQ 処理ブロック無効)を設定。 ※2
IRQ 割込み状況ビットからの読出し。
※1 IRQ 割込み状況ビット:IRCn_IRQST[bit24]
※2 IRQ 処理ブロック有効/無効設定ビット:IRCn_CSR[bit0]
12
CONFIDENTIAL
MB9D560_AN708-00006-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
Figure 4-1 方法 1 実装例
sample.c
事前の処理によって以下の状態であるものとする。
- CPUのI-FLAGが"0"(割込み許可)
- 割込み抑止解除状態
-
CPUのI-FLAGに"1"(割込み禁止)を設定。
__DI();
FRT16B00_TCCS = 0x014800FF;
FRT16B00_CPCLRB = 0xFFFF;
FRT16B00_TCDT = 0x0000;
FRT16B00_TCCS = 0x010800FF;
割込み無効期間中に行う処理
__EI();
CPUのI-FLAGに"0"(割込み許可)を設定。
-
Figure 4-2 方法 2 実装例
sample.c
-
事前の処理によって以下の状態であるものとする。
- CPUのI-FLAGが"0"(割込み許可)
- 割込み抑止解除状態
割込み抑止状態に遷移。
while(IRC0_IRQST_nIRQ == 0);
IRC0_IRQPL0_IRQPL0 = 1;
-
July 16, 2015, MB9D560_AN708-00006-1v0-J
CONFIDENTIAL
割込み無効期間中に行う処理
割込み抑止状態解除レジスタへの書込み。
割込み抑止状態解除。
13
V1.1
A P P L I C A T I O N
N O T E
Figure 4-3 方法 3 実装例
sample.c
-
事前の処理によって以下の状態であるものとする。
- CPUのI-FLAGが"0"(割込み許可)
- 割込み抑止解除状態
割込み抑止状態に遷移。
必ずCPUのI-FLAGに"1"設定前に実施。
while(IRC0_IRQST_nIRQ == 0);
CPUのI-FLAGに"1"(割込み禁止)を設定。
__DI();
IRC0_IRQPL0_IRQPL0 = 1;
FRT16B00_TCCS = 0x014800FF;
FRT16B00_CPCLRB = 0xFFFF;
FRT16B00_TCDT = 0x0000;
FRT16B00_TCCS = 0x010800FF;
割込み無効期間中に行う処理
__EI();
CPUのI-FLAGに"0"(割込み許可)を設定。
-
Figure 4-4 方法 4 実装例
sample.c
-
事前の処理によって以下の状態であるものとする。
- CPUのI-FLAGが"0"(割込み許可)
- 割込み抑止解除状態
IRQ処理ブロック無効を設定。
while(IRC0_IRQST_nIRQ == 0);
IRC0_UNLOCK = INTERRUPTS_INT_CTRL_KEY_UNLOCK;
IRC0_CSR = 0;
IRC0_UNLOCK = INTERRUPTS_INT_CTRL_KEY_LOCK;
IRC0_IRQPL0_IRQPL0 = 1;
IRC0_IRQPLM_IRQPLM = 25;
FRT16B00_TCCS = 0x014800FF;
FRT16B00_CPCLRB = 0xFFFF;
FRT16B00_TCDT = 0x0000;
FRT16B00_TCCS = 0x010800FF;
IRC0_UNLOCK = INTERRUPTS_INT_CTRL_KEY_UNLOCK;
IRC0_CSR = 1;
IRC0_UNLOCK = INTERRUPTS_INT_CTRL_KEY_LOCK;
割込み受け付け停止状態時のみ書込み可能
レジスタへの書込み。
IRQ処理ブロック無効が設定されているため、
IRQ割込み状況ビットの読出しは行わない。
割込み無効期間中に行う処理
IRQ処理ブロック有効を設定。
-
14
CONFIDENTIAL
MB9D560_AN708-00006-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
4.4
N O T E
実装例
多重割込みに対応した割込みハンドラの実装例を Figure 4-5 に記します。
MULTI コンパイラでは Cortex-R の多重割込みに対応した疑似命令が存在しないため、必要な処理をアセン
ブラで実装する必要があります。
Figure 4-5 多重割込み対応割込みハンドラ実装例
sample.asm
ADDRESS_OF_IRC0_CSR
ADDRESS_OF_IRQST_nIRQ
ADDRESS_OF_IRC0_IRQHC
ADDRESS_OF_IRC0_UNLOCK
VALUE_OF_IRC0_UNLOCK
VALUE_OF_IRC0_LOCK
nested_handler:
SUB
SRSFD
CPS
PUSH
FSTMDBD
FMRX
PUSH
AND
SUB
PUSH
.equ
.equ
.equ
.equ
.equ
.equ
0xb0400c98
0xb040000f
0xb0400c48
0xb0400d30
0x17ACC911
0x17B10C11
lr, lr, #4
sp!, #0x1f
#0x1f
{r0-r3, r12}
sp!, {d0-d7}
r1, fpscr
r1
r1, sp, #4
sp, sp, r1
{r1, lr}
CPSIE
i
MOVW
MOVT
MOVW
MOVT
STR
r1, #(ADDRESS_OF_IRC0_UNLOCK & 0xFFFF)
r1, #(ADDRESS_OF_IRC0_UNLOCK >> 16)
r0, #(VALUE_OF_IRC0_UNLOCK & 0xFFFF)
r0, #(VALUE_OF_IRC0_UNLOCK >> 16)
r0, [r1]
MOVW
MOVT
MOV
STR
r1, #(ADDRESS_OF_IRC0_CSR & 0xFFFF)
r1, #(ADDRESS_OF_IRC0_CSR >> 16)
r0, #1
r0, [r1]
MOVW
MOVT
MOVW
MOVT
STR
r1, #(ADDRESS_OF_IRC0_UNLOCK & 0xFFFF)
r1, #(ADDRESS_OF_IRC0_UNLOCK >> 16)
r0, #(VALUE_OF_IRC0_LOCK & 0xFFFF)
r0, #(VALUE_OF_IRC0_LOCK >> 16)
r0, [r1]
LDR
BLX
r1, =isr_name
r1
割込み許可
ダミーライトを行うために書込みロック解除
割込み抑止状態を解除するためのダミーライト実施
再度、書込みロック状態に設定
割込み処理実施関数に遷移
MOVW
r1, #(ADDRESS_OF_IRQST_nIRQ & 0xFFFF)
MOVT
r1, #(ADDRESS_OF_IRQST_nIRQ >> 16)
IRQST_check_loop:
LDRB
r0, [r1]
CMP
r0, #0
BEQ
IRQST_check_loop
CPSID
i
MOVW
MOVW
MOVT
STR
r0, #(irq_num & 0x1FF)
r1, #(ADDRESS_OF_IRC0_IRQHC & 0xFFFF)
r1, #(ADDRESS_OF_IRC0_IRQHC >> 16)
r0, [r1]
POP
ADD
POP
FMXR
FLDMIAD
POP
RFEFD
{r1, lr}
sp, sp, r1
r1
fpscr, r1
sp!, {d0-d7}
{r0-r3, r12}
sp!
July 16, 2015, MB9D560_AN708-00006-1v0-J
CONFIDENTIAL
※isr_name = 割込み処理実施関数の先頭アドレス
割込み抑止状態に遷移
割込み禁止
ホールドクリア実施
※irq_num = IRQのISR に対応するチャネル番号
15
V1.1
A P P L I C A T I O N
N O T E
5. 多重割込みに対応しない割込みハンドラ実装時の注意
実行中の割込みハンドラの処理が完了するまで次の割込みを受け付けないようにするため、割込みハンドラ
処理が完了するまで以下の全ての条件を満たし続ける必要があります。
 割込みコントローラが割込み受け付け停止状態であること
 CPU の I-FLAG が”1”(割込み禁止)であること
本章では多重割込みに対応しない割込みハンドラを実装する際の注意点について記します。
5.1
割込み受け付け停止方法
割込みハンドラの先頭で IRC 制御/ステータスレジスタの IRQ 処理ブロック有効/無効設定ビット
(IRCn_CSR[bit0])に”0”(IRQ 処理ブロック無効)を書込むことで割込みコントローラを割込み受け付け
停止状態にしてください。
割込みハンドラに処理が遷移したときには割込み抑止状態となっているため、割込みコントローラは割込み
受け付け停止状態となっています。しかし、割込み抑止状態であることによる割込み受け付け停止状態の場
合、割込み抑止解除レジスタへ書込みを行ったタイミングで割込み受け付け停止状態が解除されてしまいま
す。
なお、割込みハンドラ処理完了後に次の割込みを受付けられるよう、必ず割込みハンドラの最後で IRQ 処
理ブロックを有効に戻してください。
ホールドクリア時に書込みを行う IRC IRQ ホールドクリアレジスタ(IRCn_IRQHC)は割込み受け付け停止
状態時のみ書込み可能なレジスタ(Table 3-3)であるため、ホールドクリア実施後に IRQ 処理ブロックを有
効にしてください。
5.2
IRQ 割込み状況ビットからの読出し
割込みハンドラの処理中は CPU の I-FLAG は”1”でなければならないことから、割込みハンドラ処理内での
IRC IRQ ステータスレジスタの IRQ 割込み状況ビット(IRCn_IRQST[bit24])からの読出しは禁止されてい
ます。
割込みハンドラ処理中は IRQ 処理ブロックを無効にしているため、割込みコントローラは割込み受け付け
停止状態になっています。割込み受け付け停止状態時のみ書込み可能なレジスタ(Table 3-3)へ書込みを行
う場合は、割込みの受け付けを停止させる処理は不要です。
16
CONFIDENTIAL
MB9D560_AN708-00006-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
実装例
5.3
多重割込みに対応しない割込みハンドラの実装例を Figure 5-1 に記します。
多重割込み対応しない割込みハンドラは MULTI コンパイラの疑似命令(__interrupt)を使用した実装が可能
です。
Figure 5-1 多重割込みに対応しない割込みハンドラ実装例
sample.c
#define INTERRUPTS_INT_CTRL_KEY_UNLOCK
#define INTERRUPTS_INT_CTRL_KEY_LOCK
(0x17ACC911)
(0x17B10C11)
__interrupt void NotNestedHandler(void)
{
IRC0_UNLOCK = INTERRUPTS_INT_CTRL_KEY_UNLOCK;
IRC0_CSR = 0;
IRC0_UNLOCK = INTERRUPTS_INT_CTRL_KEY_LOCK
IRQ処理ブロック無効を設定。
FRT16B00_TCCS = 0x014800FF;
FRT16B00_CPCLRB = 0xFFFF;
FRT16B00_TCDT = 0x0000;
FRT16B00_TCCS = 0x010800FF;
ホールドクリア実施。
IRQ割込み状況ビットの読出しは行ってはいけない。
IRC0_IRQHC = irq_num;
※irq_num = IRQのISR に対応するチャネル番号
IRC0_UNLOCK = INTERRUPTS_INT_CTRL_KEY_UNLOCK;
IRC0_CSR = 1;
IRC0_UNLOCK = INTERRUPTS_INT_CTRL_KEY_LOCK;
IRQ処理ブロック有効を設定。
}
July 16, 2015, MB9D560_AN708-00006-1v0-J
CONFIDENTIAL
17
V1.1
A P P L I C A T I O N
N O T E
6. 参考文書
[1]. 32 ビット・マイクロコントローラ MB9D560 シリーズハードウェアマニュアル
18
CONFIDENTIAL
MB9D560_AN708-00006-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
7. 主な変更内容
ページ
場所
-
-
変更箇所
Revision 1.0
July 16, 2015, MB9D560_AN708-00006-1v0-J
CONFIDENTIAL
Initial release
19
V1.1
A P P L I C A T I O N
N O T E
免責事項
本資料に記載された製品は、通常の産業用, 一般事務用, パーソナル用, 家庭用などの一般的用途 (ただし、用途の限定はあ
りません) に使用されることを意図して設計・製造されています。(1) 極めて高度な安全性が要求され、仮に当該安全性が
確保されない場合、社会的に重大な影響を与えかつ直接生命・身体に対する重大な危険性を伴う用途 (原子力施設における
核反応制御, 航空機自動飛行制御, 航空交通管制, 大量輸送システムにおける運行制御, 生命維持のための医療機器, 兵器シ
ステムにおけるミサイル発射制御等をいう) 、ならびに(2) 極めて高い信頼性が要求される用途 (海底中継器, 宇宙衛星等を
いう) に使用されるよう設計・製造されたものではありません。上記の製品の使用法によって惹起されたいかなる請求また
は損害についても、Cypress は、お客様または第三者、あるいはその両方に対して責任を一切負いません。半導体デバイス
はある確率で故障が発生します。当社半導体デバイスが故障しても、結果的に人身事故, 火災事故, 社会的な損害を生じさ
せないよう、お客様において、装置の冗長設計, 延焼対策設計, 過電流防止対策設計, 誤動作防止設計などの安全設計をお願
いします。本資料に記載された製品が、外国為替及び外国貿易法、米国輸出管理関連法規などの規制に基づき規制されてい
る製品または技術に該当する場合には、本製品の輸出に際して、同法に基づく許可が必要となります。
商標および注記
このドキュメントは、断りなく変更される場合があります。本資料には Cypress が開発中の Cypress 製品に関する情報が記
載されている場合があります。Cypress は、それらの製品に対し、予告なしに仕様を変更したり、開発を中止したりする権
利を有します。このドキュメントに含まれる情報は、現状のまま、保証なしに提供されるものであり、その正確性, 完全性,
実施可能性および特定の目的に対する適合性やその市場性および他者の権利を侵害しない事を保証するものでなく、また、
明示, 黙示または法定されているあらゆる保証をするものでもありません。Cypress は、このドキュメントに含まれる情報を
使用することにより発生したいかなる損害に対しても責任を一切負いません。
Copyright © 2015 Cypress Semiconductor Corp. All rights reserved.
商標:Cypress, Cypress ロゴ,Spansion®, Spansion ロゴ (図形マーク), MirrorBit®, MirrorBit® Eclipse™, ORNAND™, Easy
DesignSim™, Traveo™ 及びこれらの組合せは、米国・日本ほか諸外国における Cypress Semiconductor Corp.の商標です。第三
者の社名・製品名等の記載はここでは情報提供を目的として表記したものであり、各権利者の商標もしくは登録商標となっ
ている場合があります。
20
CONFIDENTIAL
MB9D560_AN708-00006-1v0-J, July 16, 2015
v1.1