Hi, Ich versuche über den SPI mit dem DMA mehrmals Daten eines AS5048a auszulesen (http://www.mouser.com/ds/2/588/AS5048-EK-AB_Operation-Manual_Rev.1.3-820438.pdf), (https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwjOqo-G5ODWAhXDCcAKHQk5DIYQFggtMAE&url=https%3A%2F%2Fams.com%2Feng%2Fcontent%2Fdownload%2F438523%2F1341157%2Ffile%2FAS5048_DS000298_3-00.pdf&usg=AOvVaw1kcnV9G51ORmSPkN1SUFSM). Nun möchte ich dafür die Funktion HAL_SPI_TransmitReceive_DMA() verwenden, doch zwischen zwei Transfers muss ich ja den SS Pin low und high schalten, dies kann ich ja aber nicht im DMA bewerkstelligen, oder? Wie würdet ihr mit dem DMA mehrmals Daten über den SPI auslesen, wenn man den SS Pin schalten muss und möchlichst nur ein RX und ein TX Interrupt haben möchte?
Ich würde nur den RX Handler implementieren, denn wenn er da reinkommt ist der Transfer auch wirklich zu Ende. Dort macht man dann den CS High, wartet die >=350ns laut Datenblatt mit einigen NOPs und macht CS wieder LOW. Nachfolgend startet man den nächsten DMA Transfer. Allerdings hat der Chip nur ca. 12 kHz Messfrequenz, da sollte man IMHO besser einen Timer verwenden.
Ich habe das mal probiert mit jedem DMA transfer einzeln, doch der Overhead ist so groß, dass bei angemessener Geschwindigkeit für den Regler, die Interrupts den Rest stark bremsen.
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.