Ständige Receive Complete Feuerung xMega USART

OP #6543691
Lesenswert?
• ▲
▼
Hallo,
ich versuche USART-Daten über einen xMega64A3u an meinen PC 
weiterzuleiten.

-Die Daten kommen von einem Sender auf Knopfdruck (921,6 kBaud)
Der Sender ist an PortC/Pin2 angeschlossen.

-Die eben eingegangenen Daten sollen den xMega unverändert zu meinem PC 
über PortE/Pin3 verlassen(115,2 kBaud)

-Ich versuche die USART Beispiele aus AVR1307 entsprechend 
umzuschreiben. Ich habe keinen Hardware Debugger.

Ich sende einmal per Knopfdruck ein paar Bytes vom meinem Sender zum 
xMega und dieser hört dann nicht mehr auf die ISR USARTC0_RXC_vect 
aufzurufen (schickt meinem PC den Buchstaben J). Es hilft nur ein Reset.

Warum ist das so?

Ich habe ein Oszilloskop am Eingang, der Sender schickt nur während des 
Knopfdrucks. Im Ruhezustand liegt am Eingang High an. Das sollte richtig 
sein.
1
#include "usart_driver.h"
2
#include "clksys_driver.h"
3
#include "avr_compiler.h"
4

5
/*! Define that selects the Usart used in example. */
6
#define USARTT USARTE0
7
#define USARTR USARTC0
8

9
/*! USART data struct used in example. */
10
USART_data_t USART_data;
11

12
int main(void)
13
{
14
  //set 16mhz external programmable clock 
15
  CLKSYS_XOSC_Config( OSC_FRQRANGE_12TO16_gc,
16
  false,
17
  OSC_XOSCSEL_EXTCLK_gc );
18
  CLKSYS_Enable( OSC_XOSCEN_bm );
19
  do {} while ( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 );
20
  CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_XOSC_gc );
21

22
  /* PIN3 (TXD0) as output. */
23
  PORTE.DIRSET = PIN3_bm;
24
  /* PC2 (RXD0) as input. */
25
  PORTC.DIRCLR = PIN2_bm;
26
  
27
  
28
  /* Use USARTC0 and initialize buffers. */
29
  USART_InterruptDriver_Initialize(&USART_data, &USARTR,&USARTT,  USART_DREINTLVL_LO_gc);
30

31
  /* USARTC0, 8 Data bits, No Parity, 1 Stop bit. */
32
  USART_Format_Set(&USARTR, USART_CHSIZE_8BIT_gc, USART_PMODE_DISABLED_gc, false);
33
  /* USARTE0, 8 Data bits, No Parity, 1 Stop bit. */
34
  USART_Format_Set(&USARTT, USART_CHSIZE_8BIT_gc, USART_PMODE_DISABLED_gc, false);
35
  
36
  /* Enable RXC interrupt. */
37
  USART_RxdInterruptLevel_Set(&USARTR, USART_RXCINTLVL_LO_gc);
38

39
  //921600 baud
40
  USART_Baudrate_Set(&USARTR, 11 , -7);
41
  //11500 baud
42
  USART_Baudrate_Set(&USARTT, 983 , -7);
43

44
  /* Enable both RX and TX. */
45
  USART_Rx_Enable(&USARTR);
46
  USART_Tx_Enable(&USARTT);  
47
  /* Enable PMIC interrupt level low. */
48
  PMIC.CTRL |= PMIC_LOLVLEX_bm;
49
  sei();
50
  while(true) {
51
  }  
52
}
53
ISR(USARTC0_RXC_vect)
54
{
55
  while (!(USARTE0.STATUS & USART_DREIF_bm));
56
  USARTE0.DATA=0x4a;
57
}
Gast #6543748
Lesenswert?
• ▲
▼
Hi

>  /* PIN3 (TXD0) as output. */
>  PORTE.DIRSET = PIN3_bm;
>  /* PC2 (RXD0) as input. */
>  PORTC.DIRCLR = PIN2_bm;

Wozu? Das wird doch schon mit TXEN und RXEN gemacht:

Manual:

'The receiver will override normal port operation for the RxD pin, when
'enabled.

'The transmitter will override normal port operation for the TxD pin,
'when enabled.

MfG Spess

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.