78K0R/KE3-AのファームをRL78/G13に移植してみて、RESET周りの動きが異なっていて困っています。
1, RL78の方の電源を入れた時、RESFレジスターのTRAPビットが1になっている。他のビットは0。
ハードリセットを掛けた時やVddのみの入り切りでは、RESFレジスターは全て0。
GNDとVddの両方を入り切りしたときに(同時ではなく、GNDとVddの入り切りに時間差があっても)、TRAPビットが1になります。
78K0R/KE3-Aの場合はファームを書き換えた直後に電源を入れた時にTRAPビットが1になりますが、その後電源を入り切りしてもTRAPビットが1になる事はありませんでした。
上記の78K0R/KE3-AとRL78/G13の動作は再現性があります。
RESFレジスターの読み込み場所は、各機能の初期設定を行う前のファームの先頭で読み込んでおり、メインループの外側です。
RL78のこの動作を回避する方法はありませんか? 78K0R/KE3-Aと同じ動きで良いのですが
2, 以下の現象は常に起きるのではなく、起きたり起きなかったりします。
RL78/G13の-RESET端子をLowにしたまま,電源の入り切りを行うと、RL78/G13が動かなくなる。再度動かすにはファームを書き換えなければならない。
78K0R/KE3-Aではこの現象が見られませんでした。
他のCPUから動作を制御することがありますので、不安が残ります。
チョコです。
>チェコさんの言うような事でしたら、もしかしたらパワーオンリセットと不正命令の二重リセットが掛かっていたら、RESFレジスターのTRAPビットが1になると思いますし、
>単純にCPU内のRESFレジスターのTRAPビットに該当するウェハー上のコンデンサーの容量が他より小さめなので、電源立ち上げ時は閾値が曖昧になるのかなと考えていました。
何か誤解があるようです。G13のマニュアルには、「PORリセットでRESFは全てクリアされます。」と明記されています。
PORが解除された段階では、RESFは0x00です。問題はその段階でのクロック周波数です。オプションバイト(000C2H番地)でどのように設定されているかです。
RL78はPORでの起動電源電圧(1.55V)は動作可能電源電圧(LVモードでの4MHz動作の1.6V以上)より若干低くなっています。LSモードやHSモードなら、さらに差が広がります。
ここらは、フラッシュの動作モードなので、まともにフラッシュからデータが読めない可能性が高くなります。そうなると0xFFを命令コードとして読出し不正命令リセットになる可能性が高くなります。
これを避けるには、とりあえず、オプションバイトの000C1HでLVDを2.7Vのリセット・モードに設定してみてください。
>「RESFレジスターのTRAPビットが1」になるのが疑問なのです。
あくまで、TRAPは通常の動作で命令をフェッチして実行しようとしたときに発生します。
よくあるのが、ベクタを定義していない割り込みが発生したときに発生するケースです。
割り込みでベクタを読み出して、そのアドレスから命令をフェッチしようとしても、定義していないベクタは0xFFになっています。そのため、0FFFFHから命令をフェッチし、暴走して、命令コードとして0xFFをフェッチした場合にTRAPが発生します。リセット動作もある意味割り込みと同じです。フラッシュの0番地と1番地からベクタを読み出しますが、電源電圧がオプション・バイトのC2番地で指定されたフラッシュの動作モードに対応した電圧になっていないのではないかと疑っています。その為に、フラッシュが正しく読み出せずに、暴走してTRAPが発生しているのではということです。
>PORでリセットが掛かっても、まだクロックの安定時間とか、電源の安定状況によっては不正命令が出てしまうのかと思った次第です。
クロック(高速オンチップオシレータ)の安定は気にしなくて構いません。電源の安定状態については、PORの電圧が動作可能な電源電圧より低いことが影響して、動作条件を満足していないにも関わらずリセットがかからない可能性があります。その結果暴走してTRAPが発生していると考えられます。
これを避けるにはLVDを使用する必要があります。マニュアルにも以下のように記述されています。
>000C1HのVPOC2を0にしても外部リセットは使えますでしょうか?
使えます。マニュアルには、「電源投入時またはリセットからの起動時に,自動的にオプション・バイトを参照して,」と記載されています。つまり、PORが解除され、かつ外部リセットが解除されてからオプション・バイトの参照が行われます。一部のRL78でP125とRESETが共用になっている端子をポートに設定したにだけ、オプション・バイトが参照された後は、外部リセットは無効になります。この場合でも、PORがかかると外部RESETが有効になり、PORか外部リセットが解除された時点でオプション・バイトが参照されます。
>VPOC2を0でもタイミングが異なりますが、PORも動作するように思えますが??
問題はPORの電圧です。
>とりあえず>「オプションバイトの000C1HでLVDを2.7Vのリセット・モード」>を試してみます。
ぜひ、そうしてください。