Включил watchdog. В документации написано, что для активации/сброса wdt нужно писать в feed регистр последовательно 0xaa , 0x55. В процессе хождения по граблям выясняется, что писать нужно еще и атомарно, то есть нельзя допускать вставки дополнительных команд между командами записи. Получается, что нельзя записать 0xaa, потом что-то поделать, а потом записать 0x55, поскольку после записи 0xaa и не записи 0x55 следом uC рестартует по wdt.
В UM на LPC213x формулировка:
Цитата
"Once 0xAA is written to the WDFEED register the next operation in the Watchdog register space should be a WRITE (0x55) to the WDFFED register otherwise the watchdog is triggered."
То есть говорится о следующей операции записи в конкретное пространство wdt регистров, а не о любой следующей операции записи вообще. Или у меня с английским совсем плохо?
Конечно, не проблема записать сразу последовательно 0xaa и 0x55.
Но приходится писать в критической секции, запрещая irq и fiq, поскольку любой int между операциями записи приводит к рестарту. А если это к тому же под ОС, а если я fiq запрещать вообще не хочу?
Кто как юзает этот wdt ?
Пасу котов...