[戻る]
一括表示

プログラム領域への書込み 投稿者:mikan 投稿日:2017/05/02(Tue) 17:53:26 No.904

pic24FJ256GB108を用いてプログラム領域の一部を外部からの設定データ保存用としてソフトを作成しています。
初期値設定して、内部に書込み(ProgramMemoryで確認)を確認し、その後、テーブル命令にて読込み他のBuffに展開(Watchにて確認)
することは出来たのですが、書込みを行ってもProgramMemoryには書き込まれていなく0のままです。もしかして、Pickit3のDebugで
行うと書かれないとか...すみませんがご教示頂けないでしょうか。
ソースは以下になります。
宜しくお願い致します。
int __attribute__((section(".eep_setdata"), space(prog), address (0x0AE00) )) eep_data[_FLASH_PAGE];

void writeFlashRow(void)
{
unsigned int page = (__builtin_tblpage(eep_vrtap_data)>>16);
unsigned int offset = (__builtin_tbloffset(eep_vrtap_data)&0xFFFF);
unsigned int i=0;
TBLPAG = page;
__builtin_tblwtl(__offset, 0x0000);
NVMCON = 0x4042;
asm ("disi #5");
__builtin_write_NVM();
while(NVMCONbits.WR);

NVMCON = 0x4001;

for(i=0; i < 128; i++)
{
__builtin_tblwtl(offset+(i*2), str_eep[i]); // Write to address low word
__builtin_tblwth(offset+(i*2), 0xFF); // Write to upper byte
}
asm("DISI #5");
__builtin_write_NVM();
while(NVMCONbits.WR);
}

int readFlashRow(void)
{
unsigned int page = (__builtin_tblpage(eep_vrtap_data)>>16);
unsigned int offset = (__builtin_tbloffset(eep_vrtap_data)&0xFFFF);
unsigned int val;
int i;
while(NVMCONbits.WR);
TBLPAG = page;
val = 0;
for(i=0; i<128; i++)
{
 val += str_eep[i] = __builtin_tblrdl(offset+(i*2));
 str_eep2[i] = __builtin_tblrdl(offset+((i*2)+512));
}
ret = val;
return ret;
}

- WebForum -