vladimir_orl 0 4 февраля, 2014 Опубликовано 4 февраля, 2014 · Жалоба Да. Спасибо. Это как учиться плавать. Вначале всё делаешь как надо и удивляешься почему не получается. Потом, когда научился, удивляешься почему раньше не умел. Вначале прерывание от таймера детально разберу, а там уже на более серьёзное переходить буду. Сделал программу для LPC1343. По совпадению таймера должно генерироваться прерывание: #include <LPC13xx.h> #include <core_cm3.h> void TIMER_32_0_IRQ_Handler() { LPC_GPIO0->DATA|=(1<<7); } int main() { LPC_GPIO0->DIR = 0xFFFF; LPC_TMR32B0->MCR = 0x01; LPC_TMR32B0->MR0 = 0x30; __enable_irq(); NVIC_EnableIRQ(TIMER_32_0_IRQn); NVIC_SetPendingIRQ(TIMER_32_0_IRQn); LPC_TMR32B0->TCR = 0x01; while(1){ __asm("nop"); } } Программа зависает на строке NVIC_SetPendingIRQ(TIMER_32_0_IRQn); Подскажите, может в стартапе подправить что надо? И SystemInit(); вначале дописал, всё равно зависает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vladimir_orl 0 4 февраля, 2014 Опубликовано 4 февраля, 2014 · Жалоба Заработало! Вот код: #include <LPC13xx.h> #include <core_cm3.h> unsigned long p = 0; void TIMER32_0_IRQHandler() { LPC_GPIO0->DATA = p; ++p; } int main() { SystemInit(); LPC_GPIO0->DIR = 0xFFFFFFFF; LPC_TMR32B0->MCR = 0x01; LPC_TMR32B0->MR0 = 0x30; __enable_irq(); NVIC_EnableIRQ(TIMER_32_0_IRQn); TIMER32_0_IRQHandler(TIMER_32_0_IRQn); LPC_TMR32B0->TCR = 0x01; while(1){ __asm("nop"); __asm("nop"); __asm("nop"); } } Всем большое спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться