UART1 am ATmega128

OP #4430745
Lesenswert?
• ▲
▼
Ich habe heute leider noch ein Anliegen:
Folgendes Programm soll über den UART1 eines ATmega128 die Nachricht 
"Test" ausgeben. Das Programm soll nur zum Test der UART-Schnittstelle 
dienen. Leider kann ich sowohl am PC, als auch mit einem Oszi direkt am 
Mikrocontroller nichts erkennen.
1
/*
2
 * TestUARTATmega128.c
3
 *
4
 * Created: 18.01.2016 13:52:28
5
 * Author : Jens
6
 */ 
7

8
#include <avr/io.h>
9

10
#define F_CPU 800000L
11
#define BAUD 9600L
12
#define MYUBRR F_CPU/16/BAUD-1
13

14
void debug_message(char *pt);
15
void init_uart2(uint32_t baudRate);
16

17
int main(void)
18
{
19
    uint8_t output;
20
    
21
    // Init UART
22
  init_uart2(MYUBRR);
23
  
24
    while (1) 
25
    {
26
    debug_message("Test\n\r");
27
    }
28
}
29

30
// Transmit a message through the debug interface (UART2)
31
void debug_message(char *pt)
32
{
33
  while(*pt != '\0')
34
  {
35
    while(!(UCSR1A & (1<<UDRE1))); // Wait while transmitter is busy
36
    UDR1 = *pt; // Write data to output register
37
    pt++;
38
  }
39
}
40

41
void init_uart2(uint32_t baudRate)
42
{
43
  uint8_t output;
44

45
  UBRR1L = (unsigned char) baudRate;   // Baudrate Low Byte
46
  UBRR1H = (unsigned char) (baudRate >> 8); // High Byte
47
  
48
  UCSR1B |= (1<<TXEN1) | (1<<RXEN1) | (1<<RXCIE1); // Enable receiver, transmitter and receive interrupt
49
  UCSR1C |= (1<<UCSZ11) | (1<<UCSZ10); // Data format 8N1
50

51
  output = UDR1;                         // Reset receive register
52
}
Gast #4430839
Lesenswert?
• ▲
▼
Hi

>trotzdem würde ich noch die CPU-Pins TxD und RxD auf
>Ausgang bzw. Eingang initialisieren

Warum? Mit Setzen von TXEN1 und/oder RXEN1 übernimmt die USART die 
Kontrolle über die PINs.

MfG Spess
#4431060
Lesenswert?
• ▲
▼
Jens K. schrieb:
1
UCSR1B |= (1<<TXEN1) | (1<<RXEN1) | (1<<RXCIE1); // Enable receiver, transmitter and receive interrupt

Der Interrupt sollte nicht enabled werden, wenn er nicht benutzt wird 
und keine ISR vorhanden ist.
Es stört hier zwar nicht, da der gesamte Interrupt nicht enabled wurde. 
Aber wehe man fügt z.B. später noch einen Timerinterrupt hinzu und 
wundert sich dann über das komische Verhalten...

Gruß Dietrich

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.