Цитата(jcxz @ Jan 16 2014, 12:48)

1. Вот потому, что "дальше код", потому и не имеете

частота дерганья ножкой 40kHz. обработчик упростил
Код
void TIMER0_IRQHandler(){
if(LPC_TIM0->IR & (1<<0)){
LED3_TOG; //LPC_GPIO2->FIOPIN ^= 0x1000;
}
LPC_TIM0->IR = (1<<0);
}
все работает, как и раньше. в UM ни слова о том, в каком месте сбрасывать флаг.
Цитата(jcxz @ Jan 16 2014, 12:48)

2. Операция if(_interrupt_source & (1<<0)){ бессмысленна, так как если у вас установлены ещё и другие флаги запросов в IF, то функция всё равно зациклится в непрерывных входах в ISR (ведь регистра маски прерываний в таймере вроде нету?).
3. Операция |= в LPC_TIM0->IR |= (1<<0); также бессмысленна, читайте UM.
это не принципиально в конкретном примере. прерывания по MATCH и CAP маскируются.
Цитата(jcxz @ Jan 16 2014, 12:48)

4. volatile объявлять бессмысленно если переменная больше нигде не используется (а она больше нигде не используется).
5. Делать так: LPC_GPIO2->FIOPIN ^= 0x1000; крайне опасно, если учесть, что в основном коде (или другом ISR) могут быть операции с другими битами этого порта. Курите UM на предмет - зачем придуманы FIOSET и FIOCLR.
я же написал - для чистоты эксперимента. иначе получается, что вы знаете о том, что переменная нигде не используется, но не знаете, что порт 2 пустой