2016年11月26日土曜日

RXマイコンKPIT環境で多重割り込みを許可するには

RXマイコンをルネサスの純正コンパイラではなく、KPITを用いて動かしている場合、ルネサスのサンプルにあるような組み込み関数が使えなくて困ることが多いです。ルネサスのツールチェインを使っている場合多重割り込みを許可にするための組み込み関数が用意されているのですが、KPITのツールチェインを用いる場合はそのような組み込み関数がありません。<--正確にはKPITのユーザーガイドに書いてあるのを見てなかっただけ...




今回は、RXマイコンで割り込み関数を多重割り込み可能にする手順について書きたいと思います。

参考にしたurl: http://japan.renesasrulz.com/cafe_rene/f/69/t/1515.aspx

環境              : e2 studio
マイコン         : RX71M
ツールチェイン:KPITのものを使用
                     https://gcc-renesas.com/rx-download-toolchains/


1.ユーザーモードの解除
reset_program.asm内の89行目あたりを下のようにコメントアウト

/* change PSW PM to user-mode */ //ユーザーモードへは移行しない
//    MVFC   PSW,R1
//    OR     #00100000h,R1
//    PUSH.L R1
//    MVFC   PC,R1
//    ADD    #10,R1
//    PUSH.L R1
//    RTE
//    NOP
//    NOP

2.割り込み関数の先頭で以下を実行
__builtin_rx_setpsw('I');


////////参考にしたurlのリンク先のように次のようなマクロを作っておくと便利そうです.
#define enable_interrupt() __builtin_rx_setpsw('I')
#define disable_interrupt() __builtin_rx_clrpsw('I')

これだけです。ちなみに、ユーザーモードとスーパーバイザモードでは権限のレベルが異なり、ユーザーモードでは一部の命令の使用が禁止されています。多重割り込み許可のためにはPSWのIフラグをセットする必要がありますが、これはスーパーバイザモードのみ可能です。ですので、マイコンを常にスーパーバイザモードで動かしてしまえばよいという解決方法です。スーパーバイザモードで常に動かしてもおそらく問題はないと思います。









2016年10月24日月曜日

2016年全日本大会に間に合うか検討

久ぶりというのがブログ更新の枕言葉になってしまっていますが、全日本大会までもう時間がなくなってきたので状況の整理も兼ねてブログを書いてみましょう。


全日本大会まであとどれくらいの猶予があるか?

--- 10月残り日数 ---

平日 5日
休日 2日

--- 11月残り日数 ---

平日 11日
休日 5日

17日夜 移動日

18日 試走会
19日 9:00- 車検  予選
20日 決勝

--- 合計何時間あるのかな.... ---

平日16日   x 2h + 休日 7日  x 5h
= 67h

試走会 1日

希望的観測で67時間, 0.5掛けして33時間.

現状どこまで開発が進んでるんだろう?
 - rx71mのテスト基板を手配線で作った
 - 上記の基板で
    - クロックの設定
    - SPIでジャイロの値取得
    - AD変換
    - CMT割り込み
    - 時間測定
    - printfを使えるようにする作業
   までできている。

 - ハードウェアはどうなの?

    - エンコーダーとモーターの組(ただしモーターマウントができていない)
    - 2014年に使っていたRX631の手配線基板はある
    - 2014年に使っていた1717がついているマウスの筐体はある
    - rx71mの載った基板(モータードライバ基板とセンサLED基板が別に必要)をelecrowに発注状態(11月上旬に来る?)
    - モータードライバが載った基板をelecrowに発注状態(11月上旬に来る?)
 - マウスとPCの通信環境は?
    - まあまあ、作った。printfデバッグはかなり楽になった
    - 本命のマウスの記録している迷路情報のリアルタイム表示がまだできてない
    - マウスの3Dモデルも表示してぐるんぐるん表示させたい。
今年の目標は?
 - rx71mの載った基板で大会で最短走行を実現する
  - elecrowに発注した基板が動けば御の字
  - ↑ もし動かなければ,手配線の基板で何とか出場


目標を達成するのに必要なこと
  ハード面
  - rx71mの載った基板の実装作業およびデバッグ
  - モータードライバが載った基板の実装作業およびデバッグ
  - センサLED基板の調達(設計してる暇がないから手配線かな)

  ソフト面
   - エンコーダーの読み取り(位相係数)
   - PWMの出力
   - マイクロマウスとして走行するのに必要なこと
     - プログラムの移植作業



ざっと、列挙してみるとこんな感じになるのか。33時間でほんとにできるかなあ。

PCとマウスの通信に関しては割といい感じに作れていて、プログラムの任意のタイミングでprintf出力ができ、リアルタイムに監視対象の変数を表示し続けられるようにはなった。これはこれで結構資産になったと思う。
書き込み用のコネクタと通信用のコネクタを分けたことで実装スペースの観点からはつらくなったが書き込みのたびにteratermを落とす必要がなくなり、デバッグはすこぶる快適に。




主な機能以下
  - リアルタイム性(50fpsで更新、遅延はおそらく数msec)
  - 自動接続
  - 自動接続復帰


今発注している基板のコンセプトが"使いまわし"なので、モーターが2つついていてジャイロが必要なものはこの基板で今後対応できるようになるはず。ただ、ハーフでも使えるようにと、100ピンlqfpを採用しているにも関わらずかなり小さく基板を作ったので、ちゃんと動くか心配。 elecrowで当たり工場を引けるかどうかもある。4層にするとelecrowでも90ドルくらいになるのか。(8mm厚 + 金フラッシュ + ステンシル + 送料)


2014年、2015年もこんな感じでギリギリでしたが、奇跡的に完走はできました。今年はどうなるのでしょう。