Hallo Forum, ich habe ein Problem mit Atmels SAM4E. Ich baue eine SPI-Slave-Anwendung mit der USART im SPI-Modus. Dabei kommuniziert mein Controller mit einem anderen System. Weil Interrupt u.U. nicht schnell genug ist, verwende ich die DMA. Ich habe schon den DMAC und auch den PDC probiert aber bei beiden verhält es sich gleich. Wenn der Master das CS am Ende eine Kommunikation (1 oder mehrere Bytes) wieder auf High zieht geht das Byte welches als nächstes im Slave-Ausgabepuffer liegt verloren. Bsp: ich weise die DMA an, 10 Bytes zu senden. Wenn der Master nach dem ersten Byte das CS auf High zieht, wird das folgende zweite Byte im Slave verschluckt und die DMA rückt (scheinbar) um 2 weiter. Beim nächsten Byte sendet der Slave jetzt das dritte Byte. Folge: es kommt nur jedes 2. Byte an. Wenn das CS über alle 10 Bytes auf Low bleibt funktioniert alles prima. Was ist das für ein beklopptes Verhalten und wie kann ich das unterdrücken? Danke für Hilfe und Ratschläge
hey, du kannst es mal mit den transfer delays versuchen, datenblatt seite 790 (DLYBCS), dies wäre hilfreich, falls immer das letzte byte beim deselect verloren gehen würde. sonst - beim sam4l zumindest konnte man einstellen, ob er das CS für die gesamte dauer einer übertragung auf low halten soll, hab es jetz jedoch nicht im datenblatt vom sam4e gesucht. schon länger her, könnt sein das es was mit dem LASTXFER zu tun hatte. möchte mich da jetzt aber nicht festlegen. man kann es jedoch im "user interface" der schnittstelle in den registern konfigurieren. hatte teilweise gleiche fehler. sobald CS für die gesamtdauer low war und am ende nicht zu schnell high wurde, hat alles funktioniert. gruß adam
es hängt mit CSAAT, LASTXFER and CSNAAT zusammen. Seite 700 der Referenz. Beim Empfang könnte Transfer Size nicht stimmen bzw. sie wird falsch übergeben und dann meint der PDC er hätte fertig ;) Seite 699 :) Ein Stück Code würde sicherlich weiterhelfen wenn du die Ursache nicht findest.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.