R8C/M12でのポート入出力設定について

R8C/M12を趣味で使っております。

今回、ポートの入出力で、想定外の動作をしたので、質問させて頂きます。
条件として、
P1-3ポートは、オープンドレインで外部プルアップ
P1-7ポートは、オープンドレインで外部プルアップ
で、それに合わせてレジスタの設定を行っています。

ここで、

bclr 3\,PD1  ;input-dir
bclr 7\,PD1

bclr 3\,P3 ;out-data-set
bclr 7\,P3

bset 3\,PD1 ;output-dir
bset 7\,PD1
bclr 3\,PD1 ;input-dir
bclr 7\,PD1
bset 3\,PD1
bset 7\,PD1
bclr 3\,PD1
bclr 7\,PD1

と記述した時、P1-3の出力ラッチレジスタの内容が1に
変化している様な動作をします。
(この時、P1-3のポートレベルは1です。)
端子レベル強制読み出しビットは0で変更していません。

P1-7など1ビット単体で変更する際に、変更する以外のビットでは出力レジスタの値でなく、入力レジスタの値が反映される様な気がします。

お手数ですが、ご教示ください。
マニュアルの注意記述など指示頂ければ幸いです。
Parents
  • さるさん

    どういった状況で使われるか?にもよるのではないでしょうか。

    非割込みと割込みでアクセスすることがあるなら、さるさんが仰るようにDI/EIによる挟み込みが有効ですよね。

    一方でI2Cの様な通信ライン制御を自前でやる場合、割込み処理内でR/Wを切り替えることもあると思います。そんな時は仕様上でタイミングチャートやフローを明記し視覚化をしておけば機能品質は保障しやすくなり、テストも実施しやすくなるのではないでしょうか。

    コスト要求や用途にもよると思いますが、ハード要件のハードルを上げ過ぎるとソフトが苦しくなります。ある程度のマイコン資源は確保できるといいですね。

    すと@embedded property
Reply
  • さるさん

    どういった状況で使われるか?にもよるのではないでしょうか。

    非割込みと割込みでアクセスすることがあるなら、さるさんが仰るようにDI/EIによる挟み込みが有効ですよね。

    一方でI2Cの様な通信ライン制御を自前でやる場合、割込み処理内でR/Wを切り替えることもあると思います。そんな時は仕様上でタイミングチャートやフローを明記し視覚化をしておけば機能品質は保障しやすくなり、テストも実施しやすくなるのではないでしょうか。

    コスト要求や用途にもよると思いますが、ハード要件のハードルを上げ過ぎるとソフトが苦しくなります。ある程度のマイコン資源は確保できるといいですね。

    すと@embedded property
Children
No Data