参考資料 Application Report JAJA237 TMSx70 MCU の RTI( リアルタイム割り込み ) を使用してオペレーティングシステムの Tick を発生させる方法 Hari Udayakumar 要約 このアプリケーションノートの目的は T M S x70 シリーズ MCU の RTI モジュールの設定方法の一助となることである TI の TMSx70 ファミリーの MCU はローパワー ビット RISC M CU ファミリーの一員で先進的なアーキテクチャ 豊富な周辺 セットを備えている 内容 1. イントロダクション...2 2. OSのためのティック生成...3 3. Appendix A Software Listing...7 説明図図 1. RTI Module Block Diagram...2 図 2. RTI Counter Block (x) Diagram...3 図 3. Operating System Tick Generation Block Diagram...3 図 4. RTI Clock Source Selection and Pre-Scaling...4 図 5. Operating System Tick Output Waveform...5 図 6. Software Flow Diagram...6 図 7. Output Waveform...6 この資料は Texas Instruments Incorporated(TI) が英文で記述した資料を 皆様のご理解の一助として頂くために日本テキサス インスツルメンツ ( 日本 TI) が英文から和文へ翻訳して作成したものです 資料によっては正規英語版資料の更新に対応していないものがあります 日本 TI による和文資料は あくまでも TI 正規英語版をご理解頂くための補助的参考資料としてご使用下さい 製品のご検討およびご採用にあたりましては必ず正規英語版の最新資料をご確認下さい TI および日本 TI は 正規英語版にて更新の情報を提供しているにもかかわらず 更新以前の情報に基づいて発生した問題や障害等につきましては如何なる責任も負いません SPNA123 翻訳版 最新の英語版資料 http://www.ti.com/lit/spna123
1 イントロダクション 1.1 リアルタイム割り込み R T Iモジュールは O Sのためのタイマー機能やコードのベンチマークに必要なタイマー機能を提供する このモジュールはマルチプルカウンターを備えており このマルチプルカウンターは OSのスケジューリングに必要なタイムベースを定義する このアプリケーションノートは TMSx70 RTI ユーザーガイドと併用して参照されるものである 主な特長 2 つの独立したカウンターブロックで構成 ( 異なったタイムベースを生成 ) それぞれのブロックは次のもので構成されている - ビットプリスケール カウンタ - ビットフリーラン カウンタ システムあるいは周辺割り込みのために 2つまでのタイムスタンプ ( キャプチャ ) それぞれのカウンタブロックに対して 1つ フリーラン カウンタ 0 は 内部プリスケール カウンタあるいは外部イベントによりインクリメント可能 ( クロック監視を含む FlexRayネットワークでのアプリケーションの同期のため ) 外部クロックが予め定義されたウィンドウの中でインクリメントされ故障と判断された場合は オプショナルの外部クロック監視回路によって内部のプリスケール カウンタ 0 に切り替え可能 OS 用のティックや DM Aリクエストのための 4つのコンフィギュアブル コンペアレジスタそれぞれのイベントはカウンタブロック 0あるいはカウンタブロック 1でドライブされる 全てのコンペアレジスタの自動アップデート ( コンペアマッチで周期割り込みを発生させるとき ) 割り込みの高速なイネーブル / ディスエーブル どのようなクロックソースから生成された R T Iクロック入力でも システムモジュールの中で選択可能 1. 2 RTI モジュール ブロック ダイヤグラム Event0 VIM REQ[2] DMA REQ[12] FlexRay Macrotick (NTU0) FlexRay Start of Cycle Counter Block 0 64 bit incl Flex Ray Feature Capture Feature Event1 VIM REQ[3] DMA REQ[13] Counter Block 1 64 bit Capture Feature Event2 VIM REQ[4] DMA REQ[18] Event3 VIM REQ[5] DMA REQ[19] 図 1. RTI Module lo k Diagram 2
1.3 RTI カウンタブロック (x) ダイヤグラム 下図 ( 図 2) はRTIカウンタブロック (X) の簡略化されたブロック図である はビットRTIUPCxカウンタでプリスケールされる RTIUPCxカウンタはRTICPUCxレジスタの中の比較値が到達するまでカウントアップする 比較値が一致すると RTIFRCxカウンタはインクリメントされる If CPUx 0 : FRCx 2 If CPUx! 0 : FRCx CPUCx 1 (1) 2 OS のためのティック生成 クコールを解りやすくするために 独立したI/Oピンはサンプルコードの中でトグルされている 異なったタイムベースを使ってタスクをトリガーするために 3つの異なった割り込みをどのように構成するかを このアプリケーションノートは示している ( 図 3を参照 ) 2.1 フロー図 第 3 図は割り込みを用いて 異なる時間間隔でタスクを起動する RTIモジュールの使い方を示します Compare 0 Interrupt Task1 (GIO- PortA [0] Pin Toggle) - 10mS. Compare 1 Interrupt Task2 (GIO- PortA [1] Pin Toggle) - 5mS. Compare 2 Interrupt Task3 (GIO- PortA [2] Pin Toggle) - 1mS. この項はある周期 ( 調整可能 ) でOSティック割り込みを発生するためのRTIモジュールの使い方を説明する 必要なOSティックの生成と それに相当するタスクを実行するために3つのコンペア割り込みが用いられる タス RTI 64-Bit Counter Block (x) RTICAUCx RTIUPCx RTICAFRCx RTIFRCx INT_Req or DMA_Req RTICPUCx RTICOMPx 図 2. RTI Counter lo k (x) Diagram 10ms Task 1 control block Real Time Interrupt OS GIOA [0] GIOA [1] GIOA [2] 5ms Task 2 control block 1ms Task 3 control block 図 3. Operating System Ti k Generation lo k Diagram 3
2.2 周波数と T カウントの計算について カウンタブロックへのはアプリケーションの要求にしたがって システムモジュールの中のSRC レジスタをプログラム可能である もし 源が VCLKだけの場合 源はVCLKよりも少なくとも 3 倍遅くなくてはならない これはSRCレジスタのRTIxDIVビットをコンフィグすることによって可能 図 4はSRCレジスタとRTICPUCxレジスタを使用しての選択とプリスケールを設定することを現している RTICPUCxレジスタを設定して を2 分の1にプリスケールします セクション 1.3 を参照してください 2.3 カウント値の比較の計算法 周期的な OS のティックのためのコンペアレジスタのカ ウント値は T カウント周期から計算で求められる は UP カウンタ (x) でプリスケールされ それぞれの フリーラン (x) カウンタに供給される Task1 = T1period = 10ms Task2 = T2period = 5ms Task3 = T3period = 1ms このように INT0 INT1 INT2の割り込みのために周期的なティックを発生することができる RITCLK VCLK 8 MHz 8 MHz FRC0CLK 4 MHz CPUC0 1 1 1 1 1 Tcount 0.25 s FRC0CLK 4 MHz (2) Compare 0 Count Value ( Task1) T1period 10 ms Tcount 0.25 s Compare 1 Count Value ( Task2) T 2period 5 ms Tcount 0.25 S 40000 20000 Compare 2 Count Value ( Task3) T 3period 1ms 4000 Tcount 0.25 S (3) DiffClk Sources RTIx SRC [3:0] RTIxDIV [3:0] RTIUPCx RTIFRCx SRC Reg RTICPUC 図 4. RTI Clo k Sour e Sele tion and Pre-S aling 4
2.4 OS ティック出力波形 5 2.5 OSティック生成のためのコンフィグレーション ( 手順 ) システムモジュールの中のSRCレジスタを使用して VCLKを選択する 次のクロック設定を選択 : HCLK OSCIN HCLK VCLK 2 VCLK (4) RTICOMP(x) レジスタとそれぞれのRTIUDCP(x) レジスタを (x) カウント値を初期化するために設定 GIOポートAを出力に設定 RTIモジュール割り込みを設定例 :RTISETINTとステータスレジスタ例 :RTIINTFLAG - 割り込みのペンディングをクリア - コンペア0, 1, 2 割り込みをイネーブル コンペア0 割り込みサービスルーチンは次のことを行うように設定 : - Comp0 割り込みフラグはRTIINTFLAGレジスタのINT0ビットに1を書き込みことによってクリアされる - GIO ポートA - ピン0をトグル コンペア1 割り込みサービスルーチンは次のことを行うように設定 : - Comp1 割り込みフラグはRTIINTFLAGレジスタのINT1ビットに1を書き込みことによってクリアされる - GIO ポートA - ピン1をトグル コンペア2 割り込みサービスルーチンは次のことを行うように設定 : - Comp2 割り込みフラグはRTIINTFLAGレジスタのINT2ビットに1を書き込みことによってクリアされる - GIO ポートA - ピン2をトグル 5
2.6 Software Flow Start Select RTI CLK source Configure UCx, CPUCx, FRCx Task 1 ISR Task 2 ISR Task 3 ISR Configure GIOA, COMPx Reg and UDCOMPx Reg Clear INT0 interrupt Clear INT1 interrupt Clear INT2 interrupt Enable the interrupt Toggle GIOA [0] Toggle GIOA [1] Toggle GIOA [2] Enable RTI Counter Block Check for Interrupt 6 2.7 Captured Output Waveform 7 6
3 付録 A ソフトウェアリスト 7
IMPORTANT NOTICE