mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik GPIO Zugriff bei ARM9 nicht schnell genug


Autor: Der Thomas (soundso)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum testen ob mein ARM9 (str912, programmiert mit Embedded Workbench 5) 
wirklich mit PLL auf 96 MHz läuft habe ich einfach eine Endlosschleife 
geschrieben, die nur einen GPIO-Pin toggeln läßt. Obwohl er beim Start 
laut Debugger durch die PLL-Initialisierung läuft im Startup.s), messe 
ich nun am Ausgang gerade mal o,8-1us zwischen den Pegelwechsel. Da der 
ARM doch mit einem CPU-Zyclus auf die GPIO schreiben können sollte und 
eine Schleife, eine Ausgabe und eine Invertierung doch auch in Assembler 
nicht mehr als drei Befehle sein sollte, kann ich das irgendwie nicht 
nachvollziehen! Müßte das nicht irgendwo die dreifache Geschwindigkeit 
sein? Hatte zwischendrin auch immer mal Probleme das er beim 
Programmstart in der PLL_Lock Schleife hing, und nach ein paar resets 
wars wieder ok, keine Ahnung ob da ein Zusammenhang besteht... Im 
Endeffekt will ich mit meiner Anwendung ein Signal abtasten, und da ist 
es natürlich entscheident zu wissen wie schnell ich die Werte abfragen 
kann. Hoffe es kann mit diesen Phänomenen jemand was anfangen. Danke 
euch!

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Thomas wrote:

> Da der ARM doch mit einem CPU-Zyclus auf die GPIO
> schreiben können sollte

Warum sollte er das können? Beim STR9 hängen die Ports an einem der eher 
langsamen Peripheriebusse. Wobei man an den diversen Busbridges auch ein 
bischen rumkonfigurieren kann.

Wenn du schneller Pin-I/O benötigst, bist du mit neueren LPC2000 besser 
dran. Da hängt die Fast-I/O am schnellen Bus.

Autor: Der Thomas (soundso)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe irgendwas im Hitex Guide gelesen, das durch die zusätzlichen DR 
ja keine zusätzliche maskierung mehr nötig ist beim Schreiben in die 
Register, das hab ich wohl irgendwie durcheinander geworfen. Kannst du 
mir ein paar Tipps geben, wie ich das Optimum raushole? Wäre mir sehr, 
sehr hilfreich. Und wie gesagt, im Endeffekt muss ich schnell lesen, 
weniger schreiben...

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstens ist, wie du schon erwähnst, üblicherweise kein read-modify-write 
nötig, da in der Adresse eine Maske mitgegeben werden kann.

Wenn du darüber hinaus maximale Leistung rauskitzeln willst, kann es 
nötig sein, die entsprechende Doku reinzuziehen. Da gibt's so einiges, 
nicht nur von ST sondern insbesondere auch von ARM, aber dieses Thema 
ist nicht wirklich trivial.

Das fängt damit an, dass die Peripheriebusse ab Reset mit halben Takt 
(HCLK) arbeiten. Was nicht sein muss. Aber was dein Startup-Code da 
anstellt musst du selber rauskriegen.

Und geht dann weiter mit dem Bus Split. Wobei ich nicht weiss ob der bei 
GPIO relevant ist, aber wenn, dann ist dieser Parameter der zuständigen 
AHB Bridge die nächste Stellschraube weil ein Split zwar effiziente 
Busausnutzung ermöglicht, aber mindestens Lesezugriffe leicht ausbremsen 
kann.

Was schnelle Schreibzugriffe angeht, ist dann Lektüre der Dokumentation 
des ARM verwendeten Cores wichtig (ARM966E-S, kriegt man bei arm.com), 
denn darin ist die BIU nebst ihrer Pufferung beschrieben. Spielt aber 
bei reinen Lesezugriffen nicht so die grosse Rolle.

Einen Eindruck von Arbeitsweise und Zeitverhalten der AHB Bridge 
vermittelt die AMBA Spezifikation (auch arm.com, IHI0011A).

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es dir nur darum geht, rauszufinden wie schnell das Teil ist, dann 
ist schnelle Port-I/O der falsche Weg. Dann machst du ganz gemütliche 
Port-I/O mit einer wohldefinierte längeren Wartezeit dazwischen. Und 
schon spielen AHB&Co kaum noch eine Rolle.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.