データフラッシュの準備
1.データフラッシュが、難しい訳ではない
表題通りなんですが、なんせ、1つのPushスイッチに、多機能を、押し付けていますので
その辺が、手間取っています...
初期画面
VFOモード
メモリーモード (データフラッシュでない、メモリーは、15に、増やしました)
15番のメモリー内容の表示
*の印は、メモリー15番は、VFOモードの記憶であって、
offsetが、455KHzである事を、示しています。
メイン周波数と、offset周波数の両方を、表示するべく、努力したのですが、
なんせ、2mS毎の割り込みで、表示させていますので、時間が、足りまへん、ジャ無念。
やむなく、offsetだけ、表示して、これが、VFOモードの記憶である事を、示しています。
2.データフラッシュの準備
データフラッシュのプログラム自体は、EW1 モードを用いたデータフラッシュの書き換えプログラム に、あります。
大いに使わせていただきました、御礼申し上げます m(__)m
只、上記のプログラムは、R8C/13用で、若干の修正が、必要です。
/*-----------------------------------
- Initialize SFR -
-----------------------------------*/
prcr = 0x02;
pm1 = 0x01; /* Data block enable */
prcr = 0;
fmr4 = 0x00; /* Erase suspend mode disable */
この辺りは、不要です。
何故なら
R8C/15では、データフラッシュ領域は、設定不要だからです。
プロテクト対象では、ないのです。
pm1 = 0x01; /* Data block enable */
R8C/15では、
pm1の 0bitは、「何も配置されていない。書く場合、0を書く。読んだ場合、その値は不定」
fmr4 = 0x00; /* Erase suspend mode disable */は、最初から、01000000bで、設定不要です。
それから、データフラッシュのアドレスは、変更が、必要です。
R8C/13では
/* Definition of const data */
#define BLOCK_A ((unsigned char *)0x2000) /* BLOCK A first address */
#define BLOCK_A_END ((unsigned char *)0x27ff) /* BLOCK A last address */
#define BLOCK_B ((unsigned char *)0x2800) /* BLOCK B first address */
#define BLOCK_B_END ((unsigned char *)0x2fff) /* BLOCK B last address */
R8C/15では
#include "sfr_r815.h"
/* Definition of const data */
#define BLOCK_A ( (unsigned char*)0x2400 ) /* BLOCK A first address */
#define BLOCK_A_END ( (unsigned char*)0x27ff )
#define BLOCK_B ( (unsigned char*)0x2800 )
#define BLOCK_B_END ( (unsigned char*)0x2bff )
上記の、参考プログラムを、R8C/15用に、修正したものを、ここ、に置いておきます。(これなら、tabがあって、見やすいのでは...)
少しの修正で、simulateできます。(無限ループを取る等)
3.データフラッシュは、ROM領域(C000h〜)にも、可能
現在の所、私の組んだプログラムは、HEWによると、6KBに、達していません。
従って、E000hからの、8KB(ブロック0)に、収まります。
そうしますと、C000hからDFFFhまでの、8KB(ブロック1)は、空いたままです。
実は、ここにも、書き込み可能なのです、凄い!
データでも、プログラムでも!
でも、書き込める回数が少ない...
その通りですが、R8C/15は、1000回の、書き込みが可能です。(保証されていると、思う)
データシートを見ると、100回だけのように、見えますが、よく見てください。
100回は、R8C/14グループです。
R8C/15グループの性能概要をみると、1000回なんです。
このrjj09なんとか(ほら、トラ技に付いてたドキュメント)の16ページです。
すると、long型整数 100個をメモリーすると
100 x 4 = 400byte(1ブロック)
この1ブロックを、2048回書き込める! ことに、なります。
メモリーが、いっぱいになったら、1回eraseして、これが、1000回 eraseできる!
2048x1000=2,048,000回 !
long型の整数100個をメモリーして、これが、200万回繰り返せる!
恐ろしい....
ところがですね...
メーカー製のリグを触ってみて、解ったのですが、
私は、せいぜい、メモリーは10位しか、使わないんです....
100chメモリーと、言われても、使い道が.....私には、思いつかないんですわ、とほほ。
私は、今、データフラッシュ領域に、1ブロック 128byteで、読み書きして、みてますが、読み込みは、0.05秒位でしょうか、わからん。
とにかく、充分、速いです。
すんごい、実力を秘めたR8C/15、乗算器も付いて....16bit....
ほとほと、感心いたします、たまげた.....
H.17.12.22