Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
unsigned int *resetvec = (unsigned int *)0x0;
unsigned int *irqvec = (unsigned int *)0x18;
unsigned int *fiqvec = (unsigned int *)0x1C;
unsigned int *swivec = (unsigned int *)0x08;
// Pointers to interrupt callback functions.
static void (*timer_function)(void);
static void DefDummyInterrupt()
{
IO2SET_bit.P2_20 = 1 ;
}
// IRQ exception handler. Calls the interrupt handlers.
#pragma vector=0x18
__irq __arm 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.
}
void Timer0Interrupt (void)
{
(*timer_function)(); // Call timer callback function.
IO2SET_bit.P2_20 = 1 ;
T0IR = 0xff; // Clear timer 0 interrupt line.
}
// Setup Timer interrupt
void LPC2294InitTimerInterrupt(void(*timer_func)())
{
// Setup timer callback function.
timer_function = timer_func;
VICIntSelect = 0;
VICVectAddr0 = (unsigned int) & Timer0Interrupt;
VICVectCntl0 = 0x24; // Enable vector interrupt for timer 0.
VICIntEnable = 0x04; // Enable timer 0 interrupt.
}
void LPC2294InitVIC()
{
// Setup interrupt controller.
VICProtection = 0;
// Disable all interrupts
VICIntEnClear = 0xffffffff;
VICDefVectAddr = (unsigned int)&DefDummyInterrupt;
}
void delay(volatile int count)
{
while (--count) ;
}
// Setup Timer
void LPC2294InitTimer()
{
T0TCR = 0; // Disable timer 0.
T0TCR = 2; // Reset timer 0.
T0TCR = 0;
T0IR = 0xff; // Clear timer 0 interrupt line.
T0PR = 0; // Prescaler is set to no division.
T0MR0 = 300; // Count up to this value. To generate 1000KHz.
T0MCR = 3; // Reset and interrupt on MR0 (match register 0).
T0CCR = 0; // Capture is disabled.
T0EMR = 0; // No external match output.
}
// Start Timer
void LPC2294StartTimer()
{
T0TCR = 1; // Enable timer 0.
}
int main (void)
{
PINSEL0=0x00000055;
PINSEL1=0x00000000;
MEMMAP = 2; // Map interrupt vectors to internal ram
VPBDIV=0x00000021;
I2SCLH = 0x08;
I2SCLL = 0x08;
IO0DIR|=0x00003CD0;
IO0SET|=0x00003C80;
IO0CLR|=0x00000050;
//Íàñòðîéêà â ìàêðîñå äåáàããåðà
// PINSEL2=0x0D806914;
/*
BCFG0=0x1000FFEF;
BCFG1=0x1000FFEF;
BCFG2=0x1000FBEF;
*/
//-----------------------------
IO2DIR|=0x00070000;
IO2SET|=0x00070000;
IO2DIR_bit.P2_20 = 1;
IO2CLR_bit.P2_20 = 1 ;
delay(100000);
IO2SET_bit.P2_20 = 1 ;
delay(100000);
IO2CLR_bit.P2_20 = 1 ;
// First disable interrupts.
__disable_interrupt();
// Setup interrupt controller.
LPC2294InitVIC();
LPC2294InitTimerInterrupt(Timer0Interrupt);
// Periodic timer initialization.
LPC2294InitTimer();
// Enable interrupts.
__enable_interrupt();
// Start periodic timer.
LPC2294StartTimer();
// Loop forever.
for (;;)
{
}
}