皆様、はじめまして。つくしと申します。
以後よろしくお願いします。
さて早速で恐縮ですが、質問です。
現在、R8C/3MQを使用したプログラムを作成中です。
プログラムも凡そ順調に動いているのですが、どうしても「ポート0_4」が出力設定に変更できません。
「pd0_4」レジスタが常に0となってしまいます。
何か心当たりのある方はいらっしゃらないでしょうか。
確認は、
・デバッガ(E8a)でレジスタ値を読み取る (pd0_4=1; P0_4=0; と記述した箇所をステップ実行しても変更なし)
・ポート状態をテスタで確認 (上記と同様に、pd0_4=1; P0_4=0; の箇所をステップしても電圧に変更なし。(外部プルアップのため、3.3V固定))
の2通りを実施しました。
データシートを見ると、アンテナスイッチ出力、タイマRCコンペア出力、タイマRE出力などと共用しているピンですが、入力専用ピンではない様です。
「ANTSWEN」「TRCIOBSEL」「TOENA」の各レジスタに問題が無い事も確認しました。
デバッガ(E8a)を接続して、プログラムロード前に「pd0_4」「p0_4」レジスタを直接操作してもやはり変更出来ませんでした。
対象マイコンはR5F213MCQNNP(R8C/3MQ)、開発環境はWindows7 Pro(32bit)、HEW(Version 4.09.00.007・コンパイラV.5.45 Release 01)です。
皆様のお知恵をお貸しください。
つくしさん
もしかして、P0_4とGNDが基板上でショートしてたりしません?
その昔、10KΩプルダウンのはずが、誤実装でなぜか10Ωでプルダウンされていたことがありました。 デジタル系部品の誤実装はなかなか気がつかないんですよね、、、、
kirinnさん、お返事ありがとうございます。
確かにショートは考えていませんでした。ちょっと確認してみます。
ですがそれが原因だとすると、p0_4だけならともかくpd0_4が動かないのはちょっと納得いかない挙動ですね。
そういえば、PD0を操作する直前に、「PRCR=0x04;」してます?
PRCR=0x04; PD0=0x10; で試してみてください。
Kirinさん
お返事ありがとうございます。
前回名前間違えました。すみません。
む、PRCRとは何ぞや、と思って調べてみたら・・・なんとプロテクトですか!
これはすっかり見落としていました。恐らくこれですね。ご指摘ありがとうございます。
しかしなんでこのポートだけプロテクトが掛かっているのでしょうか。うーむ、意図が謎です。
ちょっと今すぐは確認できないので、動作報告は後になります。また後ほど。
動作報告です。
以下のコードで、無事pd0_4レジスタの書き換えに成功しました。
Kirinさん、鋭いご指摘、感謝感謝です。
prc2 = 1;
pd0_4 = 1;
prc2だけプロテクトが自動復帰する仕様なのですね。
おそらく元の用途があったのでしょうが、一体何の用途だったのやら。
H8→R8C→RL78とどんどん変わったせいで、ペリフェラル仕様がコロコロと変わるのでいまいち慣れませんね。
私は元々H系(この言い方はNGかな?)に属していたのですが、データシートやマニュアルの書き方も変わってしまって、
ちょっとH系の書き方が懐かしく感じられる今日この頃です。
では、ありがとうございました。