Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Problem z przerwaniew w GCC dla ATMEGA162

neemo
-
-
Posty:7
Rejestracja:25 mar 2003, o 20:58
Problem z przerwaniew w GCC dla ATMEGA162

Postautor: neemo » 28 sty 2007, o 14:06

Witam serdecznie!
Panowie mam problem z przerwaniem w kompilatorze GCC dla procesora ATMEGA162. Otóż w programie wykorzystuję dwa przerwania: jedno jako SIGNAL dla RS232, a drugie jako INTERRUPT dla timera T1; i program nie chce obsłużyć przerwania timera T1. Gdy zmienię dyrektywę INTERRUPT na SIGNAL wszystko śmiga bez problemu. Poniżej zamieszczam kod programu.
Proszę o pomoc bo nie mam pojęcia co jest grane.

#include <avr/io.h>
#include <avr/iom162.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <inttypes.h>

#define BusyLedOn 0xfe //PB0
#define BusyLedOff 0x01
//------------------------------------------- funkcje

void init(void)
{
//konfiguracja portów
DDRA = 0;
DDRB = 1;
DDRC = 0;
DDRD = 0x10;
DDRE = 0;
PORTA = 0xff;
PORTB = 0xff;
PORTC = 0xff;
PORTD = 0xff;
PORTE = 0xff;
//konfiguracja portu szeregowego
UBRR0H = 0;
UBRR0L = 11; //prędkość 57600bps
UCSR0C = 0x86;
UCSR0B = 0x90;
sei();
}

void BusyLed(char tryb, char onoff)
{
if(tryb!=0)
{
switch(tryb)
{
case 1: {TCCR1B=0x02; break;}
case 2: {TCCR1B=0x03; break;}
case 3: {TCCR1B=0x04; break;}
}
TIMSK|=0x80;
}
else
if(onoff)
{
TIMSK&=0x7f;
PORTB&=BusyLedOn;
}
else
{
TIMSK&=0x7f;
PORTB|=BusyLedOff;
}
}

//------------------------------------------- pętla główna

int main(void)
{
init();
while(1==1);
return 0;
}

//--------------------------------------------- przerwania

SIGNAL (SIG_USART0_RECV)
{
unsigned char odbbuf;
odbbuf = UDR0;
if(odbbuf==11)
{
BusyLed(1,0);
}
if(odbbuf==12)
{
BusyLed(2,0);
}
if(odbbuf==13)
{
BusyLed(3,0);
}
if(odbbuf==14)
{
BusyLed(0,1);
}
if(odbbuf==15)
{
BusyLed(0,0);
}
}

INTERRUPT (SIG_OVERFLOW1)
{
if(PORTB&BusyLedOff) PORTB&=BusyLedOn;
else PORTB|=BusyLedOff;
}

Wróć do „AVR/AVR32”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość