Hallo! Ich steuere mit einem AT91Sam7S einen AD9834 DDS über SPI an um verschiedene Signalformen zu erzeugen. Da ich auch noch USB brauche, läuft der ARM mit 48MHz. Der DDS verträgt maximal eine SPI Frequenz von 40Mhz, also habe ich den 2x-Teiler gesetzt, SPI läuft also mit 24Mhz. Leider ist die Ansteuerung des DDS etwa zu langsam, ich müsste also mit der SPI Frequenz höher gehen, wenn möglich auf 40Mhz. Gibt es eine Möglichkeit die SPI Frequenz zu ändern und dabei auch noch die richtige Frequenz für USB bereitzustellen?
Brauchst du denn wirklich einen so hohen SPI-Clock? Beschreib doch mal kurz deine Anwendung.
Ich steuere mit einem AT91Sam7S einen AD9834 DDS über SPI an um verschiedene Signalformen zu erzeugen. Und je schneller der DDS angesteuert wird desto bessere Signalformen kommen am Ende raus. 40MHz SPI Takt wären optimal, im Moment habe ich 24MHz (FCPU/2)
Soweit habe ich das schon verstanden. Der AD9834 kann Sinus und Dreieck und die Signalform bestimmt doch der DDS. Ob ich den Baustein via SPI jetzt mit 1kHz Takt oder mit 40MHz Takt einstelle, ist doch egal.
ist eben nicht egal da ich einen Sweep machen will. Ich bin mir sicher dass ich die hohe Frequenz brauche...
@lukas, das wird mit dem at91sam7s nicht gehen da sowohl sub takt als auch spi takt von MCK abgeleitet sind und die prescaler nur mit vielfachem von 2 einstellbar sind. gruss gerhard
Der LPC214x verfügt über zwei PLLs, wobei die zweite PLL nur für die 48MHz des USB da sind. Leider läuft das SPI Interface nur mit maximal PCLK/8, der SSC mit PCLK/2. Damit wären 30MHz möglich, falls dir das etwas hilft. Gruss, Dominic
Mindestens weiss ich jetzt das mit dem at91 nicht mehr drinn ist. Umsteigen auf Phillips lohnt sich im jetzigen Stadium nicht mehr.
Ist die Hardware, also der AD9834 DDS mit dem AT91Sam7S fest verdrahtet? Ansonsten schließe den SPI Periperie Baustein über einen seperaten Port an den µC an. Setze den MCK meinetwegen wieder auf 48MHz. Programmiere einen der Timer auf 40 MHz und erzeuge dir einen Timerinterrupt. In diesem Interrupt erzeugst du das SCK Signal für deinen Baustein. Zwei andere Ports benutzt du für MOSI und MISO eine dritte Leitung für CS und programmierst dir deine SPI Schnittstelle einfach selbst. So müsste es funktionieren.
Du willst einen 40 MHz-Interrupt implementieren? Auf einem Prozessor, der mit gerademal 48 MHz läuft?!
@ Toni & Der Albi, wann habt ihr das letzte mal eine Software geschrieben, die einen seriellen Kanal emuliert hat oder einen Timer programmiert?? Ein Timer kann im allgemeinen ganzzahlige Teilerfaktoren der Prozessorfrequenz erzeugen, Ausnahmen, ein paar PWM Timer mit PLL. Also 40 MHz mit einem 48 MHz Takt, das ist echt schwierig! Ein software SPI, obwohl generell einfach, kann im besten Fall so ca. CPU-Takt / 20 erzeugen, dann passiert aber sonst nicht mehr viel im System. Konnte mir das nicht verkneifen :-| Robert
Eine Zweiten Contoller eisetzen, der mit 40MHZ arbeitet und die Daten 8-Bit Paralell vom ersten abnimmt bzw. zum ersten ausgibt. (SPI-Paralell Wandler)
@ Robert Teufel Ich habe letztes Jahr einen I²C Bus auf einem 8051 Derivat nachgebildet, Du hast aber mit der Geschwindigkeit vollkommen recht. Ich hatte 12 MHz Taktfrequenz zur Verfügung, wobei 1Mhz effektiv galt. (Da ein Befehl 12 Maschinentakte benötigt) und habe 400kHz realisiert. Das System war ausgelastet. Aber es hat funktioniert. Und vieleicht braucht - luky - in seinem System nur einen SPI, dann ist die Auslasstung egal, aber er kann mit der Hardware arbeiten und muss nichts neues entwickeln.
Keinen zweiten Controller verwenden, sondern ein einfaches Schieberegister mit etwas externer Logik, das mit 40 MHz Takt betrieben wird und parallel vom ARM mit Daten gefüttert wird. Nach Befüllen des Schieberegisters und "Triggern" der externen Logik werden 8 Taktimpulse an das Schieberegister gesandt und danach der Takt abgeschaltet. Das müsste sich mit einem PLD o.ä. realisieren lassen. Allerdings sollte man auch mal eine Realismusbetrachung anstellen. Bei 40 MHz SPI-Takt stehen gerade mal 200 nsec für die Übertragung eines einzelnen Bytes zur Verfügung. Das auf dem Controller laufende Programm muss also schon sehr schnell die entsprechenden Daten heranholen können, auch ist zu klären, wie schnell der Controller überhaupt seine I/O-Port beschreiben kann. Die hier erforderliche Datenrate von 5 MByte/sec wäre beispielsweise mit einem der alten LPC21xx-Modelle gar nicht möglich. Ein 48-MHz-Controller hat gerade mal 9,6 Taktzyklen pro Byte zur Verfügung. Bei 24 MHz SPI-Takt stehen immerhin 333.- nsec für die Übertragung eines Bytes zur Verfügung, der 48-MHz-Controller hat aber auch hier nur 16 Taktzyklen pro Byte zur Verfügung. Ein ARM7 benötigt aber mehr als einen Taktzyklus für eine einzelne Maschineninstruktion. Daher erscheint mir die Anforderung ziemlich realitätsfern.
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.