150 likes | 299 Views
タイマ割り込みと受信割り込み. 高橋 横道 野口. 割り込みとは. CPU の現在の処理を一時中断し,別の処理を行う仕組み. 割り込み要求が入った時点で,予め登録しておいた関数が呼ばれる.. 割り込みの必要性(一般例). エアバッグ 衝突を検知したらエアバックを即時展開する ABS (アンチロックブレーキシステム) タイヤがロックされたらブレーキ制御を一時無視し,タイヤを回す キャッチフォン 電話がかかってきたら割り込ませる レンジ トビラが開いたら過熱を即時停止. 割り込みの流れ. 3. 2. 割り込み関数. main. 割り込み 関数へ.
E N D
タイマ割り込みと受信割り込み 高橋 横道 野口
割り込みとは • CPUの現在の処理を一時中断し,別の処理を行う仕組み. • 割り込み要求が入った時点で,予め登録しておいた関数が呼ばれる.
割り込みの必要性(一般例) • エアバッグ • 衝突を検知したらエアバックを即時展開する • ABS(アンチロックブレーキシステム) • タイヤがロックされたらブレーキ制御を一時無視し,タイヤを回す • キャッチフォン • 電話がかかってきたら割り込ませる • レンジ • トビラが開いたら過熱を即時停止
割り込みの流れ 3 2 割り込み関数 main 割り込み 関数へ mainを一時 中断 1 4 割り込み 発生 割り込み時の 処理を実行 6 中断されたところから mainの処理を実行 元の場所へ 戻る 5
食事中に電話がかかってきたら・・・ • 食事を中断して電話に出ます 3 2 電話 食事 電話を 受ける 食事を一時 中断 1 4 電話が かかってくる 電話をする 6 中断されたところから 食事を再開 電話を終了 時間 5
マイコンの構成 0x000000 ベクタエリア 0x000100 内蔵ROM 0x07FFFF 外部アドレス空間 0xFEE000 内部I/Oレジスタ 0xFFBF20 外部アドレス空間 内蔵RAM 0xFFFF20 内部I/Oレジスタ 0xFFFFFF 外部アドレス空間
ベクタテーブル 0x0000 0 リセット 0x0004 1 システム予約 0x001C 7 外部割込み(NMI) 0x0020 8 トラップ命令 0x0030 12 外部割込み(IRQ0-5) 0x0048 18 システム予約 0x0050 20 内部割込み
内部割込みのベクタテーブル 0x0050 20 WOVI 0x0054 21 CMI 0x0058 22 リザーブ 0x005C 23 ADI 0x0060 24 IMIA0 0x0064 25 IMIB0 0x0068 26 OVI0
アセンブリコードの書き方 • アセンブリとは? • C言語よりも機械側よりの言語 • C言語では記述しきれない内容も記述できる. • 今回やること • レジスタの退避 • 割り込みの許可・設定
タイマ割り込み1 • タイマを使用し、ある一定のタイミングで割り込み処理を行う TISRAレジスタ IMIEA0に1を入れることで、割り込みを許可する。 ビット 7 6 5 4 3 2 1 0 IMIEA2 IMIEA1 IMIEA0 IMFA2 IMFA1 IMFA0 1:IMFA0フラグによる割り込み許可/0:禁止 GRAがコンペアマッチのとき、1になる。 ※コンペアマッチ:GRAに設定した値と現在のカウント値が 一致したとき、カウント値がクリアされる
GRA タイマ割り込み2 GRAの設定値と現在のカウント値が一致 割り込み発生 0xffff IMFAフラグ=1 0x0000
受信割り込み1 • シリアル通信での受信時に割り込みを行う SCRレジスタ RIEに1を入れることで、受信での割り込みを許可する。 ビット 7 6 5 4 3 2 1 0 TIE RIE TE RE MPIE TEIE CKE1 CKE0 1:受信データフル割り込み(RXI)要求、 受信エラー割り込み(ERI)要求を許可 0:禁止
受信割り込み2 • シリアル通信での受信時に割り込みを行う SSRレジスタ 受信が完了すると,RDRFレジスタが1になる. ビット 7 6 5 4 3 2 1 0 TDRE RDRF ORER FER/ERS PER TBND MPB MPBT レシーブデータレジスタフル 受信を完了し,RDRにデータが 格納されていることを示すレジスタ. 1:受信完了 ※手動で0に戻す必要がある
受信割り込み3 ・割り込みの許可 SCI1.SCR.BIT.RIE=1; ・RXI(受信割り込み)要求の流れ データ受信→RSRレジスタに格納 →RDRレジスタに格納 SSRレジスタのRDRFが1になる 受信割り込み発生