Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Пожалуйста помогите одолеть прерывание в LPC2294. Пишу в IAR Код внутри

Отправлено Evgeny 02 февраля 2007 г. 13:56


#include
#include
#include


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 (;;)
{
}
}


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
вычтите два из трёх, получится:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru