Похоже проблема разрешилась.
Дело было вот в чём. В основном цикле был сброс внешнего WDT
Код
if(IOPIN_bit.P0_31){IOCLR_bit.P0_31=1;}
else {IOSET_bit.P0_31=1;}
В прерывании менялся 14 бит порта. ИМХО операция записи бита в порт происходит (очень приблизительно) 1 .чтение порта + 2. наложение маски + 3. запись в порт. Предположим что в основном цикле записываем 31 бит.
И если между 1 и 2 этапом происходит прерывание, прочитанное значение сохраняется в стек. В прерывании меняется допустим 14 бит. Возвращаемся из прерывания, считывается значение из стека (с неизменённым в прерывании 14 битом), меняется 31 бит и значение пишется в порт. В итоге значение 14 бита потеряно.
Убрав из основного цикла изменение 31 бита, глюк полечился. Возможно мои домыслы неверны, так как начал писать под АРМ неделю назад

.
Что скажут старожилы форума?
И как вообще такой ситуации избежать?
З.Ы. Забыл самое важное пишу на IAR
Сообщение отредактировал xelax - Nov 9 2006, 08:55