Пытаюсь использовать возможность записи во флеш из программы, но почему то при стирании зависает процессор в железе, а в симуляторе нормально.
вот написал код в начале программы
Код
// начало
page =__builtin_tblpage(&MyRowData5InFlash[0]);
offset =__builtin_tbloffset(&MyRowData5InFlash[0]);
// читаем из флэшки
TBLPAG = page;
MyRowDataInRam[0] = __builtin_tblrdl(offset);
MyRowDataInRam[1] = __builtin_tblrdh(offset);
// стираем страницу
NVMCON = 0x4042;
offset = offset & 0xFF00;
TBLPAG = page;
__builtin_tblwtl(offset, 0); // Dummy TBLWT to load address
__builtin_disi(5); // Disable interrupts for NVM unlock
__builtin_write_NVM(); // Start write cycle
// пишем в флешку
MyRowDataInRam[0] = 0x1234;
// MyRowDataInRam[1] = 333;
NVMCON = 0x4001;
offset = (offset & 0xFFFE);
TBLPAG = page;
__builtin_tblwtl(offset, MyRowDataInRam[0]); // Load write latches
__builtin_tblwth(offset, MyRowDataInRam[1]);
__builtin_disi(5); // Disable interrupts for NVM unlock
__builtin_write_NVM(); // Start write cycle
__builtin_disi(0);
// конец
page =__builtin_tblpage(&MyRowData5InFlash[0]);
offset =__builtin_tbloffset(&MyRowData5InFlash[0]);
// читаем из флэшки
TBLPAG = page;
MyRowDataInRam[0] = __builtin_tblrdl(offset);
MyRowDataInRam[1] = __builtin_tblrdh(offset);
// стираем страницу
NVMCON = 0x4042;
offset = offset & 0xFF00;
TBLPAG = page;
__builtin_tblwtl(offset, 0); // Dummy TBLWT to load address
__builtin_disi(5); // Disable interrupts for NVM unlock
__builtin_write_NVM(); // Start write cycle
// пишем в флешку
MyRowDataInRam[0] = 0x1234;
// MyRowDataInRam[1] = 333;
NVMCON = 0x4001;
offset = (offset & 0xFFFE);
TBLPAG = page;
__builtin_tblwtl(offset, MyRowDataInRam[0]); // Load write latches
__builtin_tblwth(offset, MyRowDataInRam[1]);
__builtin_disi(5); // Disable interrupts for NVM unlock
__builtin_write_NVM(); // Start write cycle
__builtin_disi(0);
// конец
может есть еще какие то установки?