Привет. Такой вопрос. Работаю под Multi2000 через Wiggler. Процессор LPC2129. Код размещается пока в ОЗУ. При пошаговой и автоматической отладке простых программ все нормально. А вот попытка работать с прерываниями ничего не дает. Основная программа просто вызывает инициализацию и зацикливается.
____________________________________________________________________ Инициализация:
#include <lpc21xx.h> void init(void) { PLLCON = 1; // Enable the PLL PLLFEED = 0xAA; PLLFEED = 0x55; PLLCFG = 0x02; //M=010(x3),P=0(/1) PLLfreq = 60 Mhz, CCLK = 60 Mhz PLLFEED = 0xAA; PLLFEED = 0x55; while(!(PLLSTAT & 0x0400)); // Wait for PLL to lock VPBDIV=0x02; // 60/2=30 Mhz PLLCON = 3; // Enable & connct the PLL PLLFEED = 0xAA; PLLFEED = 0x55; IODIR0=1;
T0MR0=3000; // Match register value T0MCR=0x03; T0TCR=1; //Counter are enabled for counting T0IR=0x0001; //Interrupt flag for match channel 0
VICVectAddr0 = (unsigned long) Timer_int; // set interrupt vector in 0 VICVectCntl0 = 0x24; // use it for Timer 0 Interrupt VICIntEnable = 0x00000010; // Enable Timer0 Interrupt ________________________________________________________________________
Код обработчика прерывания такой:
#pragma ghs interrupt void irq_handler(void) { void (*interrupt_function)(); unsigned int vector;
vector = VICVectAddr; // Get interrupt vector. interrupt_function = (void(*)())vector; (*interrupt_function)(); // Call vectored interrupt function. VICVectAddr = 0; // Clear interrupt in VIC. } ________________________________________________________________ По этому коду вызывается подпрограмма Timer_int, которая дергает ногой:
void Timer_int(void) { if (IOPIN0&0x01) IOCLR0=0x01; else IOSET0=0x01;
T0IR = 1; // Clear interrupt flag VICVectAddr = 0; // Acknowledge Interrupt } _________________________________________________________________
|