Mam dziwny problem z kompilatorem w AVR Studio.
Jest sobie taki przykładowy kod (zatrzymałem się już przy konfiguracji uarta)
I żeby zobaczyć, czy kod jest wykonywany prawidłowo po prostu zapalam sobie diody (bled gled rled).
Najpierw zapala się czerwona dioda - PORTD &= ~(rled);
potem jest wykonywana funkcja UART_Init_a();
W momencie wywołania UCSRB |= (1<<TXEN); program się zawiesza (tzn nie zapala się już niebieska dioda - PORTD &= ~(bled);
nie mam pojęcia o co chodzi.
AVR Studio 4.18 - najnowszy
WinAVR 2010 01 10 - najnowszy
winxp pro x64
atmega8
wyłączona optymalizacja
kwarc 12MHz (próbowałem także przełączyć na 1MHz wew RC - też nie działa)
Ciekawe jest to, że program napisany w bascomie działa idealnie bez problemu wysyła znaki przez uart.
Jest sobie taki przykładowy kod (zatrzymałem się już przy konfiguracji uarta)
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define bled 1<<5
#define gled 1<<6
#define rled 1<<7
void UART_Init_a(void)
{
UCSRB |= (1<<RXEN);
UCSRB |= (1<<TXEN);
UCSRB |= (1<<RXCIE);
UCSRC |= (1<<UCSZ1);
UCSRC |= (1<<UCSZ0);
sei();
}
int main(void)
{
DDRD |= (bled);
DDRD |= (gled);
DDRD |= (rled);
PORTD |= (bled);
PORTD |= (gled);
PORTD |= (rled);
PORTD &= ~(rled);
UART_Init_a();
PORTD &= ~(bled);
while(1)
{
}
return 0;
}
I żeby zobaczyć, czy kod jest wykonywany prawidłowo po prostu zapalam sobie diody (bled gled rled).
Najpierw zapala się czerwona dioda - PORTD &= ~(rled);
potem jest wykonywana funkcja UART_Init_a();
W momencie wywołania UCSRB |= (1<<TXEN); program się zawiesza (tzn nie zapala się już niebieska dioda - PORTD &= ~(bled);
nie mam pojęcia o co chodzi.
AVR Studio 4.18 - najnowszy
WinAVR 2010 01 10 - najnowszy
winxp pro x64
atmega8
wyłączona optymalizacja
kwarc 12MHz (próbowałem także przełączyć na 1MHz wew RC - też nie działa)
Ciekawe jest to, że program napisany w bascomie działa idealnie bez problemu wysyła znaki przez uart.
Moderowany przez inventco.eu:inventco.eu - temat poprawiłem - regulamin p.11.1
