реклама на сайте
подробности

 
 
> прерывания в IAR для LPC21x8
slava2148
сообщение Dec 11 2007, 14:09
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 11-12-07
Пользователь №: 33 185



Помогите, пожалуйста понять почему у меня не работают прерывания? Уже всё перечитал и перепробовал - не работает!!! Вот обработчик:
Код
#pragma vector=0x18
__irq __arm void IRQ_ISR_Handler (void)
{
    void (*interrupt_function)();
    unsigned int vector;

    vector = VICVectAddr;     // Get interrupt vector.
    interrupt_function = (void(*)())vector;
    (*interrupt_function)();  // Call vectored interrupt function.
}
вот майн:
int main()
{
    MEMMAP = 2;       // Must set this way when executing code out of RAM
    FrecInit();
    VIC_Init();
    __enable_interrupt();
    LedInit();
    T0_Init();                                     // 10 msec tick
    //PWM_Init();
    while(1)
    {
        if (f_10ms)                                // every 10 mseconds
        {
            f_10ms = 0;                            // reset flag
        }
    }
}
... и инициализация таймера
void T0_Isr(void)                         // Timer 0 ISR every 10 msec
{
    int IntStatus;
//    IntStatus = TIMER_CheckIntType(TIMER0);
//    TIMER_ClearInt(TIMER0, IntStatus);
//    if(cnt&1)
//        IO0CLR_bit.P0_23 = 1;
//    else
        IO0SET_bit.P0_23 = 1;
//    f_10ms = 1;                                 // toggles every 10 mseconds
//    if (++cnt > 20)
//    {
//        f_200ms = 1;                            // toggles every 200 mseconds
//        LedOn();
//    }
//    if (++cnt > 50)
//    {
//        cnt = 0;
//      LedOff();
//    }
    T0IR = 0xFF;                                // reset interrupt flag
    VICVectAddr = 0;                            // reset VIC
}
//------------------------------------------------------------------------------
void T0_Init(void)
{
    VICIntSelect &= ~(1<<VIC_TIMER0);            // Timer 0 intrpt is an IRQ (VIC_TIMER0 = 4)
    VICVectAddr0 = (unsigned int)&T0_Isr;        // Install ISR in VIC addr slot 0
    VICVectCntl0 = 0x20 | VIC_TIMER0;            // IRQ type, TIMER 0 int enabled
    VICIntEnable |= (1<<VIC_TIMER0);             // Turn on Timer0 Interrupt

    T0IR=0xFF;                                  // reset match and capture event interrupts
    T0MR2 = 0;                                    // match on the next positive edge of PCLK
    T0MR3 = 1;                                    //
    T0MCR_bit.MR3RES=1;                            // reset timer
    T0EMR_bit.EM2   =1;                            // MAT1.2 is on
    T0EMR_bit.EM3   =1;                            // MAT1.3 is on
    T0EMR_bit.EMC2  =1;                            // output set to low
    T0EMR_bit.EMC3  =2;                            // output set to high
    T0PR  = 0;                                    // prescale counter = 0 ms
    T0TC  = 0;                                  // reset Timer counter
    PINSEL1_bit.P0_28=3;                        // connect MAT1.2 to pin 19
    PINSEL1_bit.P0_29=3;                        // connect MAT1.3 to pin 20
    T0TCR = 1;                                  // enable Timer

    unsigned int pclk=GetPclk();
    T0TCR = 0;                                  // disable Timer
    PINSEL1_bit.P0_23=0;
    IO0DIR_bit.P0_23 = 1;
    IO0CLR_bit.P0_23 = 1;

    T0MCR_bit.MR3RES=1;                            // reset timer
    T0MCR_bit.MR3INT=1;                            // call interrupt
    T0EMR_bit.EMC2  =3;                            // toggle output
    T0EMR_bit.EMC3  =3;                            // toggle output
    T0MR2 = pclk/100;                            // = 10 msec
    T0MR3 = pclk/100;                            // = 10 msec
prescale counter = 1 ms
    T0TC  = 0;                                  // reset Timer counter
    T0TCR = 1;                                  // enable Timer
}

в обработчике таймера уже всё убрал, оставил только дёрганье ногой чтоб узнать сработало ли прерывание.
Заранее благодарен
Поправил, IgorKossak

Сообщение отредактировал IgorKossak - Dec 12 2007, 14:23
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016