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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren