Forum: Mikrocontroller und Digitale Elektronik SPI Frequenz ARM


von Luky S. (luky)


Lesenswert?

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?

von Der Albi (Gast)


Lesenswert?

Vielleicht könnte SoftwareSPI helfen...?

von Luky S. (luky)


Lesenswert?

40MHz Software-SPI? Leider nein...

von Selma (Gast)


Lesenswert?

Brauchst du denn wirklich einen so hohen SPI-Clock? Beschreib doch mal 
kurz deine Anwendung.

von Luky S. (luky)


Lesenswert?

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)

von Selma (Gast)


Lesenswert?

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.

von Luky S. (luky)


Lesenswert?

ist eben nicht egal da ich einen Sweep machen will.
Ich bin mir sicher dass ich die hohe Frequenz brauche...

von gerhard (Gast)


Lesenswert?

@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

von Dominic R. (dominic)


Lesenswert?

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

von Luky S. (luky)


Lesenswert?

Mindestens weiss ich jetzt das mit dem at91 nicht mehr drinn ist.
Umsteigen auf Phillips lohnt sich im jetzigen Stadium nicht mehr.

von Toni 2. (toni23)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du willst einen 40 MHz-Interrupt implementieren?

Auf einem Prozessor, der mit gerademal 48 MHz läuft?!

von Robert T. (robert_teufel_nxp)


Lesenswert?

@ 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

von Christof Rieger (Gast)


Lesenswert?

Eine Zweiten Contoller eisetzen, der mit 40MHZ arbeitet und die Daten 
8-Bit Paralell vom ersten abnimmt bzw. zum ersten ausgibt. (SPI-Paralell 
Wandler)

von TheMason (Gast)


Lesenswert?

oder nen cpld ...
der kann dann noch schneller :-)

von Toni 2. (toni23)


Lesenswert?

@  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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.