Forum: Mikrocontroller und Digitale Elektronik AVR Xmega USART DMA


von Hans W. (hans_w30)


Lesenswert?

Hy,
Ich bin gerade dran an einem USART der über SPI Master Mode 
kommuniziert. Dies mache ich da ich den DMA Controller verwende.
Nun meine Frage, kann ich wenn ich ihn als Master betreibe und nur den 
RX DMA Controller eingeschaltet habe, auch mit einem anderen Master ein 
Takt auf den XCK legen. Hört das mein Xmega und versteht das auch?

Gruß und danke für eure Hilfe

von Werner B. (werner-b)


Lesenswert?

Das ist ähnlich wie bei einem Motorrad ohne Rückwärtsgang.

Wenn ich mich verkehrt herum draufsetzte, fährt es dann rückwärts?

Antwort: Nicht wirklich

von Hans W. (hans_w30)


Lesenswert?

Durch ausprobieren habe ich herausgefunden, das es bedingt geht. Wenn 
ich als USART noch nichts gesendet habe kann ich empfangen. Sobald ich 
einmal was gesendet habe passt irgendwas mit dem Clock nicht mehr.
Jetzt kann ich RX und TX aus und wieder einschalten dann kann ich wieder 
empfangen.

von Hans W. (hans_w30)


Lesenswert?

Weiß zufällig jemand was das an Zeit kostet:
1
  USARTC0.CTRLB&= (~USART_TXEN_bm) & (~USART_RXEN_bm) ; 
2
  USARTC0.CTRLB|=  USART_RXEN_bm | USART_TXEN_bm ;

macht dann der DMA controller überhaupt noch sinn?

von haha (Gast)


Lesenswert?

Deassemlber View! Und dann mal fix deine Grundschulmathematik-Kenntnisse
bemühen

von Hans W. (hans_w30)


Lesenswert?

1
    usart_spi_master.module->CTRLB&= (~USART_TXEN_bm) & (~USART_RXEN_bm)  ; 
2
0000031C  LDS R30,0x2001    Load direct from data space 
3
0000031E  LDS R31,0x2002    Load direct from data space 
4
00000320  LDD R24,Z+4    Load indirect with displacement 
5
00000321  ANDI R24,0xE7    Logical AND with immediate 
6
00000322  STD Z+4,R24    Store indirect with displacement 
7
    usart_spi_master.module->CTRLB|=  USART_RXEN_bm | USART_TXEN_bm;
8
00000323  LDD R24,Z+4    Load indirect with displacement 
9
00000324  ORI R24,0x18    Logical OR with immediate 
10
00000325  STD Z+4,R24    Store indirect with displacement

Als dann clk =32Mhz ~=31,25 ns

8*31,25ns = 250ns

stimmt das so?

von Kurz.Helmut (Gast)


Lesenswert?

Hi,

nicht ganz.

LDS, LDD, STD brauchen 2 Zyklen
ANDI, ORI brauchen jeweils 1 Zyklus.

Also anstatt 8 hast du dann 14 Zyklen.

von Hans W. (hans_w30)


Angehängte Dateien:

Lesenswert?

Ok Danke,
ich hab jetzt weiterhin ein problem, das der DMA Controller manchmal ein 
Byte verschluckt. Ich schicke dauerhaft das gleiche raus und schau mir 
das ganz mit dem Oszilloskop an.
Hier sehe ich das immer wieder  (nicht vorhersagbar) das 3. Byte einfach 
fehlt.
Ich hab nur ein XMEAG 128A1 dran hängen und die Ausgnänge ans 
Oszilloskop gehängt.

Hat hierbei jemand schon erfahrungen gemacht?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.