-
Path: news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!goblin1!goblin.s
tu.neva.ru!news.motzarella.org!motzarella.org!news.motzarella.org!not-for-mail
From: Piotr <p...@g...com>
Newsgroups: pl.misc.elektronika
Subject: Atmega8 i USART
Date: Sun, 04 Jan 2009 17:31:11 +0100
Organization: A noiseless patient Spider
Lines: 112
Message-ID: <gjqo8s$691$1@news.motzarella.org>
Reply-To: p...@g...com
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: news.eternal-september.org
U2FsdGVkX1+/Z4vE2IcmeauhLeleNStVXh3JqREPA/vnVBboOGi6xLoWpgmvOAnUhwZanlPBu/YQMyPRN/CfjGUMYh8cRRBZznhko7pwwYm3c8zh9Khfv9qQgNcJvmxvSl7hDnLUIVs=
X-Complaints-To: Please send complaints to a...@m...org with full headers
NNTP-Posting-Date: Sun, 4 Jan 2009 16:31:25 +0000 (UTC)
X-Antivirus-Status: Clean
X-Auth-Sender: U2FsdGVkX19UyPNRo1d8IcWu9eEpVXuWqFfDc+sML1k=
X-Antivirus: avast! (VPS 090104-0, 2009-01-04), Outbound message
X-Face: Mv4(E%UaE*shXz=?X`*oGW^F)Iqmp(N:~Rw}F=S}/aM&bv8LG'<M2R26wq.5Oz13A"bn=Rw
,xPL8/C%$>@4O#Oar@/o+'sB/Os&cBEFtUdxk[\\9"G7'Y224koPP!XsvHd|7),9+S!)_F92PR;-
Cancel-Lock: sha1:2Mw1VIeJfx+8UoYCStgUecaVatk=
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl-PL; rv:1.8.1.3)
Gecko/20070326 Thunderbird/2.0.0.0 Mnenhy/0.7.5.666
Xref: news-archive.icm.edu.pl pl.misc.elektronika:553449
[ ukryj nagłówki ]Witam,
Nie wiem dlaczego, ale mam dość dziwną i niejasną dla mnie sytuację. Próbuję
odebrać dane przez USART z wykorzystaniem przerwania. Robiłem już to setki
razy zarówno dla AVR, PIC, Freescale i nigdy nie miałem z tym najmniejszego
kłopotu.
Używam kompilatora gcc 4.3.2 (WinAVR-20081205) z następującymi parametrami
kompilacji:
avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -DF_CPU=4000000 -Os
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
-Wp,-M,-MP,-MT,main.o,-MF,dep/main.o.d -c ../main.c -o main.o
uC pracuje z wykorzystaniem wewnętrznego oscylatora o częstotliwości 4MHz.
Wysyłanie oraz odbieranie znaków w aktywnej pętli działa bez najmniejszego
problemu. Kłopoty się zaczynają, gdy próbuję to zrobić w obsłudze przerwania.
Wygląda na to, iż ani razu przerwanie nie jest wywoływane. Dodam, iż jeżeli
korzystam z aktywnego czekania podczas gdy włączone są przerwania, dane
również nie są odbierane. Oto mój kod:
//--------------------------------------------------
---
#include <avr\io.h>
#include <avr\interrupt.h>
#include <avr\signal.h>
volatile unsigned char data_rx = 1;
////////////////////////////////////////////////////
///
// Inicjalizacja interfejsu
////////////////////////////////////////////////////
///
void usart_init(int baud_rate)
{
// Ustawienie bauda
UBRRH = (baud_rate >> 8);
UBRRL = baud_rate;
// Ustawienia USART
UCSRB = (1 << RXEN) // Wlaczenie odczytywania
| (1 << TXEN) // Wlaczenie wysylania
| (1 << RXCIE); // Wlacz przerwanie odczytywania
// Ustawienia transmisji
UCSRC = (1<<URSEL) // Odycztywanie rejestru UCSRC
| (1<<USBS) // 2 bity stopu
| (3<<UCSZ0); // 8 bitowy znak
}
////////////////////////////////////////////////////
///
// Wysłanie danych
////////////////////////////////////////////////////
///
void usart_send_char(unsigned char data)
{
// Poczekaj az zwolni sie bufor transmisji
while ( !( UCSRA & (1<<UDRE)) )
;
// Umiesc dane w buforze
UDR = data;
}
////////////////////////////////////////////////////
///
// Odebranie danych
////////////////////////////////////////////////////
///
char usart_receive_char()
{
// Czekaj az dane beda gotowe
while ( !(UCSRA & (1<<RXC)) )
;
// Pobierz dane
return UDR;
}
////////////////////////////////////////////////////
///
// Obsługa przerwania odbioru
////////////////////////////////////////////////////
///
ISR(USART_RXC_vect)
{
PORTB &= ~(1 << PB0); // Zgas diode
data_rx = UDR; // Pobierz dane
}
////////////////////////////////////////////////////
///
// main()
////////////////////////////////////////////////////
///
int main()
{
unsigned char tmp;
// Led uC
DDRB |= (1 << PB0);
PORTB |= (1 << PB0);
// Inicjalizacja interfejsu USART
usart_init(25); // Baud rate dla 4Mhz i 9600 bps
// Wlacz wszystkie przerwania
sei();
while(1)
;
return 0;
}
//--------------------------------------------------
---
Będę bardzo wdzięczny za wszelkie sugestie.
--
Piotr Piwko
http://www.embedded-engineering.pl/
Najnowsze wątki z tej grupy
- Propagation velocity v/c dla kabli RF
- Jakie natynkowe podwójne gniazdo z bolcem (2P+PE)
- Czujnik nacisku
- Protoków komunikacyjny do urządzenia pomiarowego
- Hiszpania bez pradu
- amperomierz w plusie
- 3G-nadal działa
- Historia pewnego miernika kalibratora
- Ustym 4k Pro i wyświetlacz
- Czemu rozwaliło celę?
- Wojna w portfelu
- Jaki trojfazowy licznik tuya lub podobny?
- Problem z dekoderem adresów
- Intel się wyprzedaje: po 10latach pchnęli pakiet kontrolny Altery za 1/4 kwoty zakupu
- Korekcja perspektywy
Najnowsze wątki
- 2025-05-10 Szczecin => Key Account Manager IT <=
- 2025-05-10 Rudno => Administrator sieci IT <=
- 2025-05-10 Wrocław => Controlling systems Consultant <=
- 2025-05-10 Rudno => IT network administrator <=
- 2025-05-10 Warszawa => Customer Service with Spanish + translation <=
- 2025-05-10 Warszawa => Senior Account Manager <=
- 2025-05-10 Trójmiasto => Head of Social Media <=
- 2025-05-10 Warszawa => C Programmer <=
- 2025-05-10 Warszawa => Java Developer <=
- 2025-05-10 powąchaj instrybutor
- 2025-05-10 Prawomocny wyrok. Rowerzysta nie ma pierwszeństwa, dojeżdżając do przejazdu
- 2025-05-09 Propagation velocity v/c dla kabli RF
- 2025-05-09 Warszawa => Senior Node.js Developer (doświadczenie z framework Nest.
- 2025-05-09 Patrolowanie kampusów
- 2025-05-09 Faktyczne opodatkowanie medianowej płacy w Polsce wyniosło 39,4% w lis. 2024r.