弊社RTOS「μC3/Standard」に関する書込みはこちらにお願いします。
-
iga
- 記事: 2
- 登録日時: 2016年2月01日(月) 16:42
投稿記事
by iga » 2016年2月01日(月) 16:55
OSの管理割込みについて教えてください。
後述のルネサス社さんのサンプルプログラムに対して、OSを入れ込む方法と、CMTやMTU等の各タイマー割り込みルーチンから
iset_flagを呼べるようにするためのC言語ソースコードの記述(準備)の方法、または、Configuratorを用いた作成の仕方をお教え願います。
サンプルプログラムのURL:
http://japan.renesas.com/products/mpumc ... _Notes.jsp
内のRZ/T1グループ コンペアマッチタイマ(CMT) R01AN2555JJ0120 (R01AN2555JJ0110)
DEC.03.15 Rev.1.20
Project, C source ( DS-5 / ARMCC )( EWARM / ICCARM )( e2studio / KPITGCC )
以上、よろしくお願いいたします。
-
eForce技術担当
- 記事: 193
- 登録日時: 2014年4月24日(木) 14:18
投稿記事
by eForce技術担当 » 2016年2月02日(火) 23:10
iga様
投稿ありがとうございます。
取り急ぎ、回答できる箇所のみ回答させていだたきます。
>後述のルネサス社さんのサンプルプログラムに対して、OSを入れ込む方法
CMTのサンプルを参照しました。
申し訳ございませんが、具体的なコードを用いた説明はルネサス社のライセンスの関係でできません。
抽象的な説明になってしまいますが以下のような回答になります。
μC3のタスクからルネサス社のサンプルのAPIは呼び出すことはできそうですが、下記の点に注意してください。
・μC3の割込みサービスルーチン作成し、ルネサス社のサンプルの割込み関数を登録してください。
・割込み(CortexR4, 割込みコントローラ)に関連したレジスタを操作している箇所を修正してください。
- 割込みコントローラの初期化はμC3が行っているので実行しないでください。
- 各割込み要因に対する割込みを許可する場合はena_int()を使用してください。
- 各割込み要因に対する割込みを禁止する場合はdis_int()を使用してください。
- 割込み検出タイプを設定する場合はset_type_int()を使用してください。
・μC3ではチックを供給するために1チャネルのCMTを使用しています。
μC3で使用しているCMTの使用は避けてください。
・ルネサス社のサンプルはリアルタイムOS向けに作成していないと思われるので、
ループで待ち処理を実行している場合、他のタスクに処理が周りません。
セマフォやイベントフラグといった同期・通信機能、slp_tsk()等のタスク付属同期機能を活用して
待ち処理を実現してください。
>CMTやMTU等の各タイマー割り込みルーチンからiset_flagを呼べるようにするためのC言語ソースコードの記述(準備)の方法、
>または、Configuratorを用いた作成の仕方をお教え願います。
現在準備しております。
後日、投稿します。
-
eForce技術担当
- 記事: 193
- 登録日時: 2014年4月24日(木) 14:18
投稿記事
by eForce技術担当 » 2016年2月05日(金) 23:04
>CMTやMTU等の各タイマー割り込みルーチンからiset_flagを呼べるようにするためのC言語ソースコードの記述(準備)の方法、
>または、Configuratorを用いた作成の仕方をお教え願います。
実際にCMTを動作させるサンプルプログラムと割込みを扱う手順を説明した記事をかきました。
下のURLを参照してください。
viewtopic.php?f=16&t=117
最後に編集したユーザー
eForce技術担当 [ 2016年4月11日(月) 21:11 ], 累計 1 回
-
iga
- 記事: 2
- 登録日時: 2016年2月01日(月) 16:42
投稿記事
by iga » 2016年2月08日(月) 15:48
To: eForce技術担当様
ご回答、CMTを動作させるサンプルプログラムと、割込みを扱う手順説明記載いただきありがとうございました。
無事に理解することができました。
ありがとうございました。
早速で申し訳ありませんが、今回ご回答いただいたサンプルプログラムにて1点質問があります。
【質問内容】
ファイル名:sample_CMT.c
関数名 :void CMTSampleTask(VP_INT exinf)
上記関数内の処理にて、
OSへの”割込み許可” ena_int(INT_CMT_CMI2);
と
”該当CMTのカウントスタート” CMT.CMSTR1.BIT.STR2 = 1;
の順番は、sample_CMT.c内に記述されている順番が推奨でしょうか?
-------------- <以下、sample_CMT.c内より抜粋> --------------
/*******************************************************************************
* CMTサンプルタスク
* (コンフィグレータで登録しているので、OS起動時に生成される)
******************************************************************************/
void CMTSampleTask(VP_INT exinf)
{
LED0_PODR = 0;
<途中省略>
/* 割込み許可 */
ena_int(INT_CMT_CMI2);
/*------------------------------------------------------------------------
* CMT設定
*------------------------------------------------------------------------*/
/* カウントスタート */
/* コンペアマッチタイマスタートレジスタ1(CMSTR1)のSTR2ビット */
CMT.CMSTR1.BIT.STR2 = 1;
<以下省略>
}
-------------- <以上、sample_CMT.c内より抜粋> --------------
OSへの”割込み許可” ena_int(INT_CMT_CMI2);
と
”該当CMTのカウントスタート” CMT.CMSTR1.BIT.STR2 = 1;
の順番をに入れ替えても現段階では動作するので問題ないのですが、
もし、貴社様の推奨があればお教え願いたく思います。
ご回答、よろしくお願いいたします。
-
eForce技術担当
- 記事: 193
- 登録日時: 2014年4月24日(木) 14:18
投稿記事
by eForce技術担当 » 2016年2月09日(火) 11:37
>OSへの”割込み許可” ena_int(INT_CMT_CMI2);
>と”該当CMTのカウントスタート” CMT.CMSTR1.BIT.STR2 = 1;
>の順番をに入れ替えても現段階では動作するので問題ないのですが、
>もし、貴社様の推奨があればお教え願いたく思います。
どちらでもよいと思いますが、全ての準備(コントローラの設定,割込みの設定)
を終えてからスタートするのが自然だと思います。