データフラッシュの準備

 

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