Hi! Ich versuche verzweifelt einen SPI DMA transfer per timer auszulösen. Ich programmiere mit der libopencm3 und einen STM32F72. Was ich will ist eigentlich ganz einfach, alle 100ms einen 8 Byte transfer starten. DMA setup funktioniert, wenn ich den SPI transfer manuell trigger sehe ich die 8 bytes. Lasse ich aber nun den Timer1 compare match cc2 den DMA triggern sehe ich nur ein byte?! Grüße, Simon
Bin inzwischen etwas weitergekommen. Ich setze beim DMA setup die transferlänge auf 8 Bytes. Es scheint so als ob jeder compare match genau ein Byte überträgt. Das ganze dann 8 mal. Ich hätte jetzt erwartet dass ein compare match den DMA transfer initieiert und der dann erst stoppt wenn <len> bytes übertragen wurden. Grüße, Simon
Ssss S. schrieb: > Bin inzwischen etwas weitergekommen. > Ich setze beim DMA setup die transferlänge auf 8 Bytes. > Es scheint so als ob jeder compare match genau ein Byte überträgt. Das > ganze dann 8 mal. > Ich hätte jetzt erwartet dass ein compare match den DMA transfer > initieiert und der dann erst stoppt wenn <len> bytes übertragen wurden. > > Grüße, > Simon Jeder compare Match schickt einen Request an die DMA. Die DMA selbst hat verschiedene einstellbare Datenbreiten und einen eigenen 16Bit Zähler. damit kannst du mit einem Compare event 65536 DMA transfers machen.
Das dachte ich auch. Scheint aber aus irgendeinem Grund nicht zu gehen. Es wird immer nur ein Byte pro compare match gesendet. Ist der buffer 0x01 0x02 0x03 .. sehe ich pro match auch 0x01 0x02 0x03... Transfer länge steht aber auf 8 byte. Triggere ich per spi tx request sendet er auch alle.
Ok, war ein missverständnis meinerseits. Die DMA engine verschickt in der tat nur ein byte pro trigger event. Beim SPI ist es halt nur so dass das TXE flag als trigger dient -> alle bytes werden gesendet. Siehe: https://community.st.com/message/153747
Verwende Bursts. Dafür gibt es die Felder PBURST und MBURST in den SxCR. Dann kann ein DMA-Request auch mehrere SPI-Übertragungen starten.
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.