- ベストアンサー
マイコンの特殊レジスタ定義
パナソニックのMN101というマイコンを使いたいのですが、特殊レジスタの定義方法がよくわかりません。 今までルネサスのマイコンを使っていて、ルネサスの方は#pragma addressと共用体をつかってバイトだけじゃなくてビット単位でレジスタに読み書き出来たのですが、パナソニックは#pragma addressが使えません。 サポートページでダウンロード出来る定義ファイルはバイト単位でしか読み書きできませんでした。 #pragma addressを使わずにビット単位で読み書きする方法を教えてください。 共用体で例えばPort1の中の1ビットをPort1.bit.b1みたいに読み書きする方法はわかったのですが、ルネサスのようにそれにP1_1と名前を付けて扱いたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Port1.bit.b1 というのが、メーカーの提供しているファイルに 定義されていればまず安全でしょう。 さて、 P1_1 という記述で、Port1.bit.b1 にアクセスするため には、単純に、 #define P1_1 Port1.bit.b1 とするだけです。 ルネサスのものも、#pragma address の指定はビット演算とは 直接関係ありません。(単に、固定アドレスであることを明示 しているだけです) ルネサスの定義ファイルの中でも、 union byte_def p1_addr; #define p1 p1_addr.byte #define p1_0 p1_addr.bit.b0 /* Port P10 bit */ のように指定されているのがわかると思います。
その他の回答 (3)
- titokani
- ベストアンサー率19% (341/1726)
ルネサスの場合、コンパイラでサポートされて、マニュアルにも載っているので安心ですが、そうでないコンパイラで無理にやるのは危険だと思います。 インライン関数やマクロとかで妥協するのが無難ではないかと思います。
- D-Matsu
- ベストアンサー率45% (1080/2394)
#SFRの定義じゃなくてSFRへのアクセス方法の定義、ですよね? > 共用体で例えばPort1の中の1ビットをPort1.bit.b1みたいに読み書きする方法はわかったのですが、ルネサスのようにそれにP1_1と名前を付けて扱いたいです。 質問の目的がそこだけなら、普通にdefineすればいいのでは。 #define P1_1 (Port1.bit.b1) というふうに。 #ってHEWのSFWもビット単位アクセスは同じような共用体使ってたような……
- jacta
- ベストアンサー率26% (845/3158)
ビット単位でレジスタにアクセスする一般的な方法はありません。 パナソニックのマイコン用のコンパイラは何を使っているのか知りませんが、(私が使ったことがある)GCCの場合、ビットフィールドを使ってレジスタにアクセスするのは危険です。 ビット演算とシフト演算を駆使して操作を行うようにしてください。