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

 
 
> Прерывание LPC2378 не срабатывает., посоветуйте, где искать причину, пож.
svss
сообщение May 26 2010, 08:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Ситуация: после инициализации процессора разрешается прерывание,
в результате в регистре VICADDRESS я вижу адрес входной точки прерывания таймера Timer0IntrHandler (код ниже),
однако ловушки (breakpoints) в обработчике прерываний не срабатывают::

продолжает крутиться main() - "мотает" счётчик loops,
считают аппаратные счётчики таймера, а
lbolt (изменяемый в обработчике прерывания) стоит в нуле.

Регистры:
CPSR = 0x3F
VICIRQSTATUS = 0x0000010 // timer0
VICPRIORITY4 = 9
VICINTENABLE = 0x000010 // timer0

Куда б ещё поглядеть, чтоб понять причину невхода в обработчик прерывания?
Подскажите, кто знает, пож.

Станок: Olimex-LPC2378 + JLINK, инструмент: IAR.

Код
void main(void)
{
    PlatformInit();        
    timer_initialize();    
    i2c_initialize(false);
    uart_initialize();
    __enable_interrupt();

    while(1){
        loops++;
    }//end while(1)
} // main ()


Таблица векторов:
Код
__irq __arm void IRQ_Handler (void) {
    void (*interrupt_function)();
    UINT32 vector;

    vector = VICVectAddr;               // Get the interrupt vector.
    interrupt_function = (void(*)())vector;                                         //  <--- breakpont is set here  ---
    if(interrupt_function != NULL) {
        interrupt_function();           // Call vectored interrupt function.
    } else {
        VICVectAddr = 0;                // Clear interrupt request in VIC.
    }
} // void IRQ_Handler

__irq __arm void Abort_Handler (void)      { while (true); }
__irq __arm void FIQ_Handler (void)        { while (true); }
__irq __arm void Prefetch_Handler (void)   { while (true); }
__irq __arm void SWI_Handler (void)        { while (true); }
__irq __arm void Undefined_Handler (void)  { while (true); }


Обработчик прерываний таймера:
Код
void Timer0IntrHandler (void)
{
    lbolt++;                //                                                  <--- breakpont is set here  ---
    T0IR = 1;               // T0IR.MR0INT = 1; -- Clear interrupt flag */
    VICVectAddr = 0;        // Acknowledge Interrupt.
} // Timer0IntrHandler
Go to the top of the page
 
+Quote Post



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

 


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


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