SAM3x8e unverhältnismäßig langsam

Gast #3967167
Lesenswert?

Hallo zusammen.

Habe gerade ein etwas mit meinem Arduino Due gespielt. (SAM3x8e 
Controller, getaktet auf 84MHz). Programmiert wird der Controller in C.

Ich wollte ein PWM-Signal (2MHz) auf eine gewisse Anzahl an Pulsen 
begrenzen. Also nach jeder PWM-Periode einen Interrupt generieren, eine 
Variable hochzählen und ab einer gewissen Anzahl das PWM-Modul 
deaktivieren.

Der Ansatz funktioniert für Frequenzen von wenigen KHz super. Bei 2Mhz 
überspringt er mir jedoch immer einen Puls. Also bei gewünschten 8 
Pulsen, wird erst nach 9 deaktiviert usw. (Und ja, man könnte ja auch 
einfach immer auf einen Zählschritt weniger abfragen, is jedoch 
unbrauchbar wenn man nur einen Puls will!!!)

Ich habe das Problem jetzt bereits anderweitig gelöst (über einen 
weiteren Timer), also benötige ich keine Lösung mehr für mein Problem. 
Jedoch stellt sich bei mir schon die Frage ob dass normal ist. Verlange 
ich vielleicht zu viel von dem Controller, oder liegt ein Anwenderfehler 
meinerseits vor...

Ich meine 2MHz, bei einer Taktfrequenz von 84MHz. Also 1/42'tel der 
Prozessortaktfrequenz...Klar pro Befehl braucht der Controller mehrere 
Schritte (fetch, decode, execude, writeback). Aber ein 
ARM-Microcontroller macht doch sicher schon Pipelining. Und selbst wenn 
nicht, könnte ich theoretisch bei 2MHz - PWM - Periode bis zu 10 Befehle 
zwischen den Perioden abarbeiten.

Hat jemand eine Idee woran es liegen könnte? Muss man bei 
ARM-Controllern noch irgend eine Optimierung einstellen? Oder hat jemand 
schon das selbe Problem gehabt?


Mit freundlichen Grüßen

Stefan


PS: Ja der Controller ist wirklich mit 84MHz getaktet, ich habe schon 
die Eingänge toggeln lassen und auf dem Oszi angeschaut
Persönliche Seite #3967195
Lesenswert?

Stefan schrieb:
> Stimmt das mit dem Interrupt hab ich zeitlich nicht bedacht. Ja DMA ist
> bereits getestet worden, hat auch super funktioniert.
>
> Aber dann müsste doch das Pollen des Interruptflags ohne Ausführen des
> Interrupt um einiges schneller sein oder...
> Ist es leider auch nicht :/

Ausführen aus dem internen SRAM haste schon probiert ?
Persönliche Seite #3967206
Lesenswert?

Solltest dich vielleicht mit der Direkten Programmierung der Register 
auseinandersetzen.
Die CMSIS-Bib ist ja schön und gut, aber ziemlich überladen.

Ich denke aber der Cortex ist nicht die Richtig Plattform für dich.
Du mußt einen schnelleren nehmen oder eine andere Plattform so ala CPLD 
z.b. oder FPGA.

Oder vielleicht ein alter Atmel SAM7 mit viel Takt.
Der hat intern die Schattenregister für den Fastinterrupt und Stacking 
hat der auch nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren