2.RL78 での割り込み処理 ( 割り込み受け付け ) マスクが解除された (xxmk ビットが 0 の ) 割り込み要求信号は 2 つの用途で使用されます 一つ目は,CPU のスタンバイ状態の解除です この動作は, 割り込み優先順位とは全く無関係で, マスクされていない (xxmk=0 の )

Similar documents
スライド 1

初心者のための RL78 入門コース ( 第 3 回 : ポート出力例 2 とポート入力 ) 第 3 回の今回は, 前回作成したプログラムを RL78/G13 のハードウェアを用いて見直しをお こないます 今回の内容 8. コード生成を利用した実際のプログラム作成 ( その 2) P40 9. コー

スライド 1

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

PowerPoint プレゼンテーション

Microsoft PowerPoint - kougi7.ppt

スライド 1

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c

Microsoft PowerPoint - LogicCircuits09note.ppt [互換モード]

スライド 1

Microsoft PowerPoint - OS04.pptx

スライド 1

Microsoft Word - Ladder Tool 使çfl¨ã…žã…‰ã…¥ã‡¢ã…«ã…©ã…•ã…¼ã†ªã†Š_ docx

VLSI工学

計算機アーキテクチャ

スライド 1

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

Microsoft PowerPoint - RL78G14_動画マニュアル_タイマRD.ppt [互換モード]

81 /******************************************************************************/ 82 /* スレーブアドレスの設定 */ 83 /*****************************************

RL78/G10 シリアル・アレイ・ユニット (UART通信)(C言語編) CC-RL

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

このページは読み飛ばして構いません 1は通常はあまり意識しない ( マイコンの端子ではほぼ決まっている ) のですが,PC やその他の機器と接続する場合に問題になります 前述の RS-232-C は ±12V で駆動するインタフェースで, 通常は論理が反転してマイコンに接続されます 最も古くからある

データ収集用 NIM/CAMAC モジュールマニュアル 2006/5/23 目次 クレート コントローラ CC/ NIM ADC 1821 (Seiko EG&G)...3 ADC インターフェイス U デッドタイム

1.1 ラベル ラベルはカラム 1 から始まらなければならない ラベルの後にはコロン スペース タブ 改行が続いてよい ラベルはアルファベットかアンダーバーで始まり 英数字 アンダーバー クエスチョンマークを含んでよい ラベルは 32 文字までである デフォルトではこれらは大文字と小文字を区別するが

RL78/I1D 中速オンチップ・オシレータでのUART 通信の実現 CC-RL

内容 1. APX-3302 の特長 APX-3312 から APX-3302 へ変更するためには 差分詳細 ハードウェア ハードウェア性能および仕様 ソフトウェア仕様および制限 Ini ファイルの設

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

このダイナミックリンクライブラリ GaugeC48.dll は 8CH から 48CH 用の DigitalGaugeCounterDG3000 シリーズ共通の DLL です この説明書は GaugeC48.dll を使ったアプリケーションを作成するためのものです 開発環境は MicrosoftVi

Microsoft PowerPoint - OS07.pptx

TFTP serverの実装

05-scheduling.ppt

スライド 1

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

04-process_thread_2.ppt

ソフトウェア基礎技術研修

スライド 1

PowerPoint Presentation

MIPSのマイクロアーキテクチャ

Microsoft PowerPoint - OS09.pptx

ex05_2012.pptx

GR-SAKURA-SAのサンプルソフト説明

まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマ

/* モジュールストップ解除 */ SYSTEM.MSTPCRA.BIT.MSTPA24 = 0; /* MSTPA24(S12ADA 制御部 ) クロック供給開始 */ SYSTEM.MSTPCRA.BIT.MSTPA17 = 0; /* MSTPA17(S12ADA0) クロック供給開始 */

Jan/25/2019 errata_c17m11_10 S1C17 マニュアル正誤表 項目 リセット保持時間 対象マニュアル発行 No. 項目ページ S1C17M10 テクニカルマニュアル システムリセットコントローラ (SRC) 特性 19-3 S1C17M20/M

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

RL78/F13, F14 割り込み要因判別方法

スライド 1

Microsoft Word - XPC4ソフトマニュアル.doc

また RLF 命令は 図 2 示す様に RRF 命令とは逆に 各ビットを一つずつ 左方向に回転 ( ローテイト ) する命令である 8 ビット変数のアドレスを A とし C フラグに 0 を代入してから RLF A,1 を実行すると 変数の内容が 左に 1 ビットシフトし 最下位ビット (LSB)

MODBUS ユーザーズマニュアル 페이지 1 / 23

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

ETCB Manual

RL78/G13 制限事項について

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1

複数の Nios II を構成する際の注意事項

割り込み 今までのプログラムは 順番にそって命令を実行していくのみ それはそれで良いが 不便な場合もある 例えば 時間のかかる周辺機器を使う場合 その周辺機器が動作を終了するまで CPU は待たなければいけない 方法 1( ポーリング ) 一定時間毎に 周辺機器の動作が終了したか調べる 終了していれ

コンピュータ工学Ⅰ

コンピュータ工学Ⅰ

回路 7 レジスタ ( 同期イネーブル及び非同期リセット付 ) 入力データを保持するのに用いる記憶素子 使用用途として, マイクロプロセッサ内部で演算や実行状態の保持に用いられる Fig4-2 のレジスタは, クロック信号の立ち上がり時かつ 信号が 1 のときに外部からの 1 ビットデータ R をレ

ex04_2012.ppt

Microsoft PowerPoint - timer_pwm2.pptx

PLCシリアル通信 MODBUS通信 データ送信/受信プログラム例

10-vm1.ppt

AI1608AYUSB手順V3

プログラミング実習I

三菱電機マイコン機器ソフトウエア株式会社

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

適応フィルタのSIMD最適化

今週の進捗

TOPPERS 活用アイデア アプリケーション開発 コンテスト 部門 : 活用アイデア部門アプリケーション開発部門 作品のタイトル : Toppers_JSP と Scicos_lab / (Scilab でも可 ) による 組込みメカトロニクス制御シミュレーション 作成者 : 塩出武 ( シオデタ

Microsoft PowerPoint - No3.ppt

Section 36. Programmable Cyclic Redundancy Check (CRC)

Microsoft PowerPoint - Sol7 [Compatibility Mode]

Developer Camp

この方法では, 複数のアドレスが同じインデックスに対応づけられる可能性があるため, キャッシュラインのコピーと書き戻しが交互に起きる性のミスが発生する可能性がある. これを回避するために考案されたのが, 連想メモリアクセスができる形キャッシュである. この方式は, キャッシュに余裕がある限り主記憶の

PowerTyper マイクロコードダウンロード手順

スライド 1

アジェンダ Renesas Synergy TM プラットフォーム構成 ThreadX とは ThreadX の状態遷移 ThreadX とμITRONの機能比較 まとめ ページ 2

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

Notes and Points for TMPR454 Flash memory

DUSx200 シリーズコントローラ I2C インターフェース仕様書

Windows10の標準機能だけでデータを完全バックアップする方法 | 【ぱそちき】パソコン初心者に教えたい仕事に役立つPC知識

Microsoft Word - dg_sataahciip_refdesign_jp.doc

SOPC Builder ペリフェラル 簡易ユーザ・ガイド - PIO (Parallel I/O)

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

出 アーキテクチャ 誰が 出 装置を制御するのか 1

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

正転時とは反対に回転する これが逆転である 図 2(d) の様に 4 つのスイッチ全てが OFF の場合 DC モータには電流が流れず 停止する ただし 元々 DC モータが回転していた場合は 惰性でしばらく回転を続ける 図 2(e) の様に SW2 と SW4 を ON SW1 と SW3 を O

Microsoft Word - 実験4_FPGA実験2_2015

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

S1C17 Family Application Note S1C17 シリーズ PORT 多重割り込みアプリケーションノート Rev.1.0

2. オプション設定画面で, 必要事項を記入 選択します. 少なくとも, タイトル に課題の見出しとなる文章を入力する他, 種別 を アンケート( 無記名式 ) に設定する必要があります. また, アクセス制限はここでは コースメニューで非表示にする に設定します. その他設定は必要に応じて行って下

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

Microsoft PowerPoint - No6note.ppt

スライド 1

RL78/G14、R8C/36Mグループ アプリケーションノート R8CからRL78への移行ガイド:割り込み

スライド 1

論文番号 分 2-2 平成 24 年度全国情報技術教育研究会第 41 回全国大会 ( 新潟大会 ) Xbee を活用した無線通信の研究 期日平成 24 年 8 月 9 日 ( 木 )~10 日 ( 金 ) 場所長岡市シティホールプラザ アオーレ長岡 香川県立三豊工業高等学校 電子科 本行

Transcription:

割り込み / ポーリング /DMA/DTC(RL78 での周辺機能制御 ) 周辺機能を介してデータ転送を制御する方法には, 大きく分けて 3 つの方法があります その中で DMA や DTC は CPU を介することなく, 高速にデータを転送することができますが, 使用できるチャネル数が限られます そのため, たとえば,CSI のスレーブでの高速通信のように限られた時間内に転送が必要な場合に使用できます ただ,IIC のように, 受信したデータで処理が異なる ( たとえば, スレーブアドレスの LSB で送信 / 受信が切り替わるような ) 通信方式では使えません 割り込みやポーリングは DMA/DTC に比べると高速性は劣りますが,CPU で処理するために, 転送されたデータに応じて格納する先を変えたり, 処理を変えたりするような使い方が可能です 通常, 割り込みを使用しておけば, アプリケーションによってはかなりの高速通信にも対応できます 1.RL78 での割り込み処理 ( 割り込み要求 ) RL78 の割り込みは, 周辺機能が動作完了したときに,CPU の処理または,DMA/DTC 転送を要求するためのトリガとなります マニュアルでは INTxx で表されています これが, 全ての始まりです これは, 内部の割り込み要求元の段階でのハードウェアの信号名であり, ソフトウェアでは割り込みベクタを指定するときに使用するだけです #pragma interrupt r_tau0_channel1_interrupt(vect=inttm01,bank=rb3,enable=true) #pragma interrupt r_adc_interrupt(vect=intad) その後,CPU が割り込み処理やソフトウェアで使用する割り込み要求は TMIF01 や ADIF のような割り込み要求フラグになります ここらの関割り込み要求信号部の概要を図 1 に示します 周辺機能からの INTxx の立ち上がりエッジで割り込み要求フラグの F/F がセットされ, 割り込み要求フラグ (xxif) となります この割り込み要求 F/F は CPU がベクタ割り込みを受け付けた時にハードウェアが自動的にクリアする以外に, 命令でセットしたり, クリアしたり, 読み出したりすることができます これとは別に,xxMK 信号の反転信号で論理積が取られて CPU( 割り込み制御部 ) に行きます 割り込み要求フラグ xxif INTxx SET Q F/F CPU へ xxmk 図 1. 割り込み要求信号部

2.RL78 での割り込み処理 ( 割り込み受け付け ) マスクが解除された (xxmk ビットが 0 の ) 割り込み要求信号は 2 つの用途で使用されます 一つ目は,CPU のスタンバイ状態の解除です この動作は, 割り込み優先順位とは全く無関係で, マスクされていない (xxmk=0 の ) 割り込み要求信号が発生していると実行されます また, このような割り込み要求が発生している状態でスタンバイに入る命令を実行すると, 一旦スタンバイに入いり, スタンバイ解除の安定時間を待ってから解除されるようです 二つ目は, ベクタ割り込み処理です 通常, 割り込みと言うと, このベクタ割り込みのことを指します ベクタ割り込みは, 以下の条件が全て満足されたときに受け付けられます 1 マスクされていない割り込み要求が発生している 2 同時に発生している割り込み要求の中で一番優先順位が高い 3 処理中の割り込みよりも優先順位が高い 4 CPU がベクタ割り込み受け付け可能状態 5 割り込み保留命令の実行中でない ここで,1~3が割り込みの優先度に関する条件で,4が割り込み禁止/ 許可の条件です 5については, 殆ど意識されることがない条件ですが, 特定のタイミングだけで割り込みを受け付けさせる目的で EI 命令と DI 命令を連続させた場合に表面化する条件です 割り込み保留命令はその命令の次の命令の実行終了まで割り込みを受け付けません EI 命令は割り込み保留命令なので, 次の命令 ( ここでは DI 命令 ) の実行終了まで割り込みは受け付けません DI 命令も割り込み保留命令ですが, そもそも, 割り込みを禁止する命令なので,EI 命令とDI 命令が並んでいる場合には割り込みは受け付けられないことになります それでは, どうすればいいかと言うと, 単純に2つの命令に間に NOP 命令を入れればいいだけです これで, 有効な割り込み要求があれば,NOP 命令の実行後に割り込みを受け付けます スタンバイ状態での割り込み受け付けは, スタンバイが解除されてからベクタ割り込みが受け付けられます ベクタ割り込みが受け付けられると, 要求された割り込みに対応したアドレスからベクタ ( 処理アドレスの下位 16 ビット ) を読み出して, そのアドレス ( アドレス 20 ビット中の上位 4 ビットは 0) に分岐します そのとき, 実行していたプログラムのアドレスと PSW レジスタの値がスタックにセーブされます その後,PSW は割り込み禁止状態になり, 受け付けた割り込みの優先順位に対応したインサービス プライオリティ フラグに変更され, 割り込み要求フラグがクリアされます このように割り込み処理がスタートした段階では,CPU は割り込み禁止状態になります 割り込みは CPU の処理とは非同期に発生します 割り込み処理が通常処理の実行を妨害しないように, 割り込み処理の頭では, 使用する汎用レジスタをスタック領域にセーブします こ

のためにレジスタの分だけ PUSH 命令を使用します この PUSH 命令の実行時間がもったいないといった場合には,RL78 ではレジスタバンクが 4 バンク準備されていて,1 命令で使用する汎用レジスタを切り替えることができます また, 割り込み処理が完了したら,PUSH 命令でセーブしていたデータを POP 命令で元に戻して,RETI 命令で割り込み処理から復帰します このような手順をとることで, 割り込み処理は割り込み前の CPU の状態に戻どします 3. 多重割り込み処理アプリケーションによっては, 複数の割り込みを使用し, その割り込みに優先度を設定して, 優先度の低い割り込み処理中にも, より優先度の高い ( 緊急性の高い ) 割り込みを受け付けさせる必要が考えられます このための機能が多重割り込みです RL78 では,4 レベルの割り込み優先度 ( 優先順位 ) がサポートされていて, 最大 4 レベルの割り込みのネスティング ( 多重化 ) が可能です 多重割り込みの使い方は次の 2 つだけです 1 割り込み優先度の設定 2 割り込み処理中での割り込み許可 (EI 命令の実行 ) 以下の説明は参考程度として構いません 多重割り込みを使用するには, 使用する割り込みに優先度を設定します RL78 では, 各割り込みに対して,2 ビットの優先順位指定フラグ レジスタが準備されていて, 以下の 4 つのどれかに設定します ディフォルトでは, 全ての割り込みは最低優先に設定されています 00 : レベル 0( 最優先 ) 01 : レベル 1( 第 2 優先 ) 10 : レベル 2( 第 3 優先 ) 11 : レベル3( 最低優先 ) 起動後に, 割り込みを許可すると,CPU は PSW レジスタのインサービス プライオリティ フラグ (ISP1 と ISP0) が 11 となっており, 全てのレベルの割り込みが受け付け可能になります この状態では, 早い者勝ちで受け付けられます ここまでは, 通常の割り込み処理と同じですが, 多重割り込みを使用する場合には, 最優先の割り込み処理以外の割り込み処理では,EI 命令 (EI();) を実行して,CPU を割り込み許可状態にする必要があります 例えば, レベル 3 の割り込みが受け付けられたとします このとき,PSW レジスタのインサービス プライオリティ フラグ (ISP1 と ISP0) は 10 となります これによりレベル 3 の割

り込みは受け付けられず, レベル 2 以上の割り込みが受け付け可能になります これらの処理はハードウェアで実行されるので, こうなることを知っておくだけで十分です この状態で割り込みを許可して, レベル 1 の割り込みが受け付けられると,ISP1 と ISP0 は 00 となります この状態では, 割り込みを許可してもレベル 0 割り込みだけが受け付け可能になるだけで, レベル 1~3 の割り込みは受け付け禁止です このレベル 1 の割り込み処理を終了して,RETI 命令を実行すると,PSW は以前の値に戻るので,ISP1 と ISP0 は 10 となり, レベル 2 以上の割り込みが受け付け可能になります このように, 割り込み優先度の設定と割り込み処理中での割り込み許可 (EI 命令の実行 ) だけで 4 レベルの多重割り込みの制御が可能です CPU 内部のハードウェアの動作は面倒ですが, 使う方はそれらを意識しなくても多重割り込みは簡単に使うことが可能です あえて, 注意事項を上げるとすると, 割り込み優先度の設定は割り込みの関係を十分に考慮 して行ってください また, 優先度を動的に変化させるのはトラブルの原因になるので, お勧 めできません 4.RL78 でのベクタ割り込み制御 RL78 の CPU での割り込み制御は PSW レジスタに集約されると言っても過言ではありませ ん 以下に PSW の構成を示しますが, 朱書きしたビットが割り込みに関係したビットです bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 IE Z RBS1 AC RBS0 ISP1 ISP0 CY IE はベクタ割り込みの許可 / 禁止を指定するビットです RBS1 と RBS0 は使用する汎用レジスタのバンクを指定するビットです ISP1 と ISP0 は受け付け可能な割り込み優先度を指定するビットです このように, 半分以上が割り込みの制御用です この PSW レジスタを割り込み受け付け時にハードウェアが自動的にスタックにセーブし,RETI での割り込みからの復帰時に元に戻すことで, 殆ど意識することなく, 割り込みをスムースに処理できるようになっています なお, これらのことは知らなくても割り込みを使いこなすことは十分可能です 5.RL78 でのベクタ割り込み応用 RL78 の割り込み要求フラグはハードウェアでセットされることを前提にして話してきましたが, ソフトウェアでトリガすることも可能です この方法を使う最もいい例が, 割り込みによるデータ送信です

CSI や UART による送信を行う場合に, 割り込みは送信完了か送信バッファが空になったときに発生します つまり, 最初のデータに対しては割り込みが発生しないので,2 番目以降のデータと異なる処理を行わないといけないことになります この処理を真面目に実行しているのがコード生成の R_UART0_Send 関数です その該当する部分の抜粋を以下に示します 1,2 行目で送信データの格納されたバッファのアドレスとデータ数を作業用の変数にコピーし た後で割り込みをマスクして処理を行い, 割り込みマスクを解除しています これは,UART0 が送信完了割り込みでなく, バッファ空き割り込みだった場合に排他制御を 行うための処理です gp_uart0_tx_address = tx_buf; g_uart0_tx_count = tx_num; STMK0 = 1U; /* disable INTST0 interrupt */ TXD0 = *gp_uart0_tx_address; gp_uart0_tx_address++; g_uart0_tx_count--; STMK0 = 0U; /* enable INTST0 interrupt */ これは, 制御方法を工夫すれば, 不要な処理となります 見直したものを以下に示します gp_uart0_tx_address = tx_buf; g_uart0_tx_count = tx_num; STIF0 = 1U; /* set INTST0 interrupt request flag */ この方法は, 最初の送信データの書き込みから割り込み処理で行わせるものです ポインタやカウンタの更新も全て割り込み処理で既に行っているものを流用したものです このように, 割り込み要求フラグを利用すると, 処理がすっきりします なお, この方法は DMA には使えません DMA の場合には DMA 転送開始ソフトウェアトリガを使用することになります 6.RL78 での割り込みのポーリング制御 RL78 の割り込み要求は, これまで説明してきた様に,DMA/DTC のトリガ, スタンバイの解除及びベクタ割り込みで使用する以外に, ポーリングすることが可能です 初心者には, 割り込みに対して拒否反応を示す人が見受けられます これは, 割り込みが非同期の事象であり, プログラムの流れが途切れることへの恐れがあるのかもしれません そこで, 割り込みを使用しない制御として挙げられるのが, 割り込み要求フラグ (xxif) のポーリングです 割り込み要求が発生すると, 割り込み要求フラグがセットされるので, それをソフトウェアで確認するのが割り込みのポーリング制御です 割り込み要求フラグは原因となる事象が発生 (A/D 変換が完了した, 通信が完了した等 ) することでセットされます

割り込み要求フラグは単なる 1 ビットのフラグで, 割り込み要求があるか無いかだけを示すことしかできません いつ, どのようにして割り込み要求フラグをクリアするかが問題です ベクタ割り込みでは, ハードウェアでセットされ, ハードウェアでクリアされるので, 気にする必要はありませんが, ポーリングでは自動的にはクリアされないので, 注意が必要です 一番簡単なのは, 割り込み要求フラグがセットされたことを確認したらクリアすることです しかし, これだけでは不十分で, フラグをポーリングする前にクリアしておくことが必要な場合があることです 簡単な例を以下に示します while ( SRIF0 == 0 ) { NOP(); } SRIF0 = 0; ここで,while ループ中に NOP(); を入れてあるのは, デバッグを意識したものです これだけでうまくいきそうですが, 注意する必要があることが一つあります それは, INTSR0 割り込みをベクタ割り込み禁止にしておく必要があるということです SRIF0 ビット はベクタ割り込みが受け付けられるとクリアされます 割り込みを使わないからと, 割り込み 処理部に何も処理を記述してなかったとしても, 割り込みの受付と RETI は処理する可能性が あります そうすると, 割り込み受け付けで SRIF0 フラグがクリアされてしまい, 上記のプロ グラムでは SRIF0 がいつまでたってもセットされないとか,while ループから抜けたり抜けな かったりすると言った不安定な動作が発生することがあります そのため, 上記ポーリングを行う前に INTSR0 割り込みをマスクしたり DI にしてベクタ割り 込みを禁止したりすることが必要です SRMK0 = 1; while ( SRIF0 == 0 ) { NOP(); } SRIF0 = 0; また, 割り込みそのものは許可しておき, 割り込み処理でグローバル変数に準備したフラグ をセットし, そのフラグをポーリングする方法もあります