Последовательность действий такова
Код
volatile __no_init unsigned int WANT_BL_FEED @ 0x40000000;
__disable_interrupt();
MAMCR = 0;
MEMMAP = 0x01;
VICINTENCLEAR = 0xFFFFFFFF;
WANT_BL_FEED = 0xEECCAA55;
....
различная инициализация, взаимодействующая исключительно с областью регистров периферии
...
WDCLKSEL = 0x00;
WDTC = 4000000 / 8;
WDMOD = 0x03;
WDFEED = 0xAA;
WDFEED = 0x55;
while(1);
__disable_interrupt();
MAMCR = 0;
MEMMAP = 0x01;
VICINTENCLEAR = 0xFFFFFFFF;
WANT_BL_FEED = 0xEECCAA55;
....
различная инициализация, взаимодействующая исключительно с областью регистров периферии
...
WDCLKSEL = 0x00;
WDTC = 4000000 / 8;
WDMOD = 0x03;
WDFEED = 0xAA;
WDFEED = 0x55;
while(1);
В итоге перед перезагрузкой вижу по адресу 0x40000000 записанное значение, а после перезагрузки - исходное.
Похоже на то что последнее обращение к ОЗУ где-то кэшируется.
Опытным путем выяснил, что в память не попадает лишь одно слово. То есть если записать последовательно 8 слов, то после перезагрузки записанными окажутся только 7.
Выходит полагатся на содержимое ОЗУ бесполезно, если была перезагрузка по Собаке..
Кто в этом виноват? Это баг или фитча?