マイコンはRL78/G13 48ピンのR5F100GEです。
搭載されている評価ボードはRM-RL78-G13です。
LチカさせようとP00からHi/Loを出力させようとしたのですが
うまくいきませんでした。
最初、
P0_bit.no0 = 0 // 出力Lo(念のため)
PM0_bit.no0 = 0 // 出力モードに設定
としてから、1秒周期で
P0_bit.no0 = 0 or 1 // 出力ラッチ設定
としていたのですが、Lチカできていません。
ソフト的な設定は他に何か必要でしょうか?
→P00に関しては、PMCレジスタの設定で「デジタル入出力」に設定する必要がありますか?
PMC00はリセット値はアナログ入力です。
これを試そうとしたのですが、PMC0のシンボル定義がなく困っています。(←タイトルの質問です。)
PMC12と14だけ定義されているのですが、なぜPMC0がないのか理解できません。
48ピンにはあると思うのですが違うのでしょうか?
> PMC12と14だけ定義されているのですが、なぜPMC0がないのか理解できません。
PMC0 は ポート0 のピンのデジタル入出力/アナログ入力を切り替えるレジスタですが、RL78/G13 の 48ピン製品でデジタル入出力とアナログ入力が切り替えられるピンは 24: P147/ANI18 37: P120/ANI19 だけであり、ポート0 のピンは 34: P01/TO00/RxD1 35: P00/TI00/TxD1 となっていてアナログ入力機能がないため、PMC0 も存在しないのだと思います。
チョコです。
fujitaさんが正解ですね。P00とP01は20ピン~32ピンだけがアナログ入力が存在し、
36ピン~48ピンはP0はP00とP01しかないので、P0にアナログ機能が兼用されtれいないので、PMC0がなかったのですね。
探してみたら、RM-RL78-G13が見つかったので、P00とP01にLEDを接続して(実際はLEDと電流制限抵抗を実装したボードに接続して)、
実際に動作させてみました。
RM-RL78-G13では、P00とP01は下側のピン以外にUART1の4ピンのヘッダにも出ているので、そちらから信号を引き出してみました。
デバッガとしては、E1を使いました。
CS+CC-RLでコード生成を使用して、TM00を500msのインターバル・タイマで使用しています。
初期設定は以下のようにP0とPM0を設定しているだけです。
void R_PORT_Create(void){ P0 = _00_Pn0_OUTPUT_0 | _00_Pn1_OUTPUT_0; PM0 = _00_PMn0_MODE_OUTPUT | _00_PMn1_MODE_OUTPUT | _FC_PM0_DEFAULT;}
main関数の中は以下のようにHALTで500msのインターバル・タイマ割り込みを待って、P00の設定を行っています。
while (1U) { P0_bit.no0 = 0; HALT(); P0_bit.no0 = 1; HALT(); }
これとは別にTM00の割り込み処理の中でP01を反転させています。
static void __near r_tau0_channel0_interrupt(void){ /* Start user code. Do not edit comment generated here */ P0_bit.no1 ^= 0x01; /* End user code. Do not edit comment generated here */}
これで、P00とP01に接続した2つのLEDが1秒周期で点滅しました。
参考までに、プロジェクト・ファイルをzipで圧縮したものを添付しておきます。
TEST_G13_PMC.zip
参考として、こちらで評価したときの写真を添付します。
ここからブレーク・ポイントを使って、いくつかの表示状態を作りました。
ダウンロードし、起動時でブレーク・ポイントを設定した画面です。
LEDはカソードをポートに接続しているので、起動時には点灯しています。
ここから、ブレーク・ポイントを有効にして実行します。
設定したブレーク・ポイントで実行を中断し、P01だけが1になり、消灯した状態です。
P00をリセットするところにブレーク・ポイントを設定して、実行します。
P00が消灯して、P01が点灯した状態です。
ということで、動作が確認されました。