Ständige Receive Complete Feuerung xMega USART

OP #6543691
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
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

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.