2013-02-12 2 views
0

Привет, я пытаюсь настроить прерывание таймера переполнения на Таймер 3 8051. Код застревает в подпрограмме прерывания. Я использую 2511F32 (Wixel)Установка прерывания таймера в 8051, получение stuck

Вот код настройки прерываний:

{ ......

T3CTL |= 0xE0;     // set prescaler to tick frequency/128 (DIV) bits 7:5 
T3CTL |= 0x04;     // Clear counter value (CLR - bit 2) 
T3CTL |= 0x00;     // Timer mode set to free running (00) bits 1:0 
T3CTL |= 0x08;     // Enable overflow interrupt (OVFIM) bit 3 

T3CCTL1 &= ~0x40;    // disable timer compare interrupts 
T3CCTL0 &= ~0x40;    // disable timer compare interrupts 

IEN1 |= 0x08;     // Enable Timer 2 interrupts 


T3CTL |= 0x10;     // Start the timer (START - bit 4) 

EN = 1; 

...... 

}

Вот прерываний код

ISR(T3,0) 
{ 
    TIMIF &= ~0x07;  // T3OVFIF Clear T3 overflow interrupt flag - bit 0 
    LED_YELLOW_TOGGLE(); 
} 

Он остается в ловушке в рутине ISR. Других флагов прерывания нет. Есть идеи ?

+0

Что делает LED_YELLOW_TOGGLE()? Можете ли вы также опубликовать код этого? –

+0

Попробуйте 'IRCON & = ~ 0x07;' – UncleO

+0

@MartinThompson - это просто переключатель ввода/вывода: #define LED_YELLOW_TOGGLE() {P2DIR^= 0x04;} – jelipito

ответ

0

Как вы скажете, что код застрял в ISR? если светодиод переключается, прерывание все время включается, и isr ​​вызывается, как только он заканчивается. он никогда не возвращается к основному коду.

+0

Привет, я нашел проблему. MCU имеет загрузчик, и он считывает P2_2, который также является желтым светодиодным выводом, поэтому он входил в режим загрузчика. Он работает сейчас. всем спасибо – jelipito

Смежные вопросы