Цитата(GetSmart @ Nov 12 2009, 14:13)

Поставил в начале main() вот это
Код
VICVectAddr = 0;
VICVectAddr = 0;
VICVectAddr = 0;
VICVectAddr = 0;
VICVectAddr = 0;
VICVectAddr = 0;
VICVectAddr = 0;
И всё заработало

Посмотрел в свои исходники - у меня есть такая строчки
Код
for (i=0; i<16; i++) pVic->sVIC_VECTOR = 0; // очищаем аппаратный стек вложений
Начал вспоминать и вспомнил - VIC в LPC поддерживает схему приоритетов прерываний - когда происходит прерывание, VIC запоминает в свое внутреннем аппаратном стеке текущий уровень приоритета и все прерывания с более низким приоритетом - блокируются, с более высоким - разрешаются и "нестяться". Вот этот внутренний стек и чистится многократной записью VIC_VECTOR. 16 - глубина стека, равная числу уровней приоритета.
Цитата(GetSmart @ Nov 12 2009, 14:13)

Может кто-нибудь знает, как сбрасываются запросы от Embedded ICE, DbgCommRx и Embedded ICE, DbgCommTX или сиё тайна NXP?
Да нет, в LPC23 все стандартно, задокументировано в документации ARM на ядро ARM7TDMI.
Доступ к регистрам DCC, например, такой:
Код
#define hal_status_dcc() __MRC(14, 0, 0, 0, 0)
#define hal_write_dcc(a) __MCR(14, 0, a, 1, 0, 0)
#define hal_read_dcc() __MRC(14, 0, 1, 0, 0)