Привет.
Такой вопрос. Работаю под 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
}
_________________________________________________________________