www.mikrocontroller.net

Forum: Compiler & IDEs ARM7 Cortex M3 NOP-Befehl?!


Autor: Benny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe eigentlich eine sehr einfache Frage:

Ich bin z.Z. dabei für einen Cortex M3 eine softwaregebaute I2 
nachzubilden und benötige da bei zwischen meinen Ansteuerungen der Pins 
eine möglichst kleine Delay Zeit.

Bei anderen Controllern habe ich NOP genommen, ist dies auch beim Cortex 
M3 möglich?!
Wenn ja wie?

Vielen Dank.
Vg. Benny

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um welche Zeiten geht es hier? Möglichst kurzes Delay ist ja 0. I2 sagt 
mir nichts.

Autor: Benny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

sorry habe ein C vergesen (I2C) aber es ist im Prinzip einen Abwandlung 
also kein I2C konformes Protokoll, deswegen auch das nutzen von I/O 
Pins, aber es gibt eine Daten und eine Clock Leitung das Delay sollte so 
10ns sein.
Im Beispielcode (8051 mit 11 Mhz) wird ein einfaches NOP() verwendet...

Vg
Benny

Autor: Andreas Schweigstill (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ARM-Prozessoren haben keinen expliziten NOP-Befehl. Stattdessen 
verwendet man im Allgemeinen einen reinen Registerbefehl, der auch die 
Flags unangetastet lässt, z.B. MOV R0, R0.

Einige Assembler haben einen NOP-Befehl, der aber auf solch einen 
unschädlichen Befehl abgebildet wird.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benny schrieb:

> Pins, aber es gibt eine Daten und eine Clock Leitung das Delay sollte so
> 10ns sein.

10ns ist doch etwas sportlich, vor allem auf einem 11 MHz 8051 mit dem 
üblichen 12er Teiler. ;-)

I2C bewegt sich mit 100 oder 400KHz, das sind Delays im 
Mikrosekundenbereich. Die einzige mir bekannte ähnliche aber 
inkompatible Variante sind die SHT1x/7x Sensoren, für die es hier 
bereits funktionsfähigen Code gibt, zumal es den Dinger ziemlich egal 
ist, ob sie mit 2MHz oder 20KHz angeprochen werden.

Also Butter bei die Fische: Worum geht es konkret?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was kurze Delays angeht. Unterhalb von ein paarhundert Nanosekunden 
abhängig vom Controllertakt ist das Sache spezieller Hardware, nicht von 
Programmen.

Wer bei ARM7/CM3 nach einzelnen NOPs fragt, signalisiert damit, dass er 
sehr wahrscheinlich auf dem Holzweg ist und die falsche Frage stellt. 
Apropos ARM7: Wat denn nu? ARM7 und CM3 sind zwei recht verschiedene 
paar Stiefel.

Aber trotzdem: Ab diesen paarhundert Nanosekunden kann man sich bei den 
Cortexen einerseits direkt des Sysclock-Timers bedienen, d.h. ihn 
abfragen. Andererseits eine normale Delayloop verwenden, die man anfangs 
einmal anhand einer bekannten Zeit kalibriert. Letzteres Verfahren 
besitzt den Vorteil, dass es von exakten Architektur- und 
Implementierungsmerkmalen ziemlich unabhängig ist.

Autor: Benny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ja es geht um die SHT-Sensoren,

das hier keine 10 ns eingehalten werden müssen ist mir klar, jedoch ist 
das die minimale Zeit. Und die Frage bezog sich hier zum einen generell 
um einen leeren Maschinenbefehl und zum anderen um die SHT Ansteuerung. 
Wo gibt es denn Cortext M3 Code für die Ansteuerung der SHT15 Sensoren? 
Kenn nur 8051 Implementierungen mit NOP Code...

Vielen Dank schonmal.

Vg
Benny

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 10ns für SHTs sind in diesem Zusammenhang Blödsinn.

Das Forum hat eine Suchfunktion. Ob du dabei Code für den CM3 finden 
wirst weiss ich nicht, nur ist es ziemlich schnurz für welchen 
Controller der Code ist, wenn du nicht grad in Assembler programmieren 
willst (wer einen CM3 komplett in Assembler programmiert, der hat das 
entweder als Aufgabe bekommen, oder ein Rad ab). Einzig die Bit-I/O und 
die Delays müssen angepasst werden.

Beispiel: Beitrag "Sensirion SHT11 Code"

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Schweigstill schrieb:
> ARM-Prozessoren haben keinen expliziten NOP-Befehl. Stattdessen
> verwendet man im Allgemeinen einen reinen Registerbefehl, der auch die
> Flags unangetastet lässt, z.B. MOV R0, R0.

Neuere ARM Architekturen haben einen echten NOP Befehl. Allerdings 
garantiert keine ARM Architektur, dass der Befehl auch Zeit verbraucht.

Benny kann beruhigt sein, der Cortex-M3 benötigt genau einen Taktzyklus 
um nichts zu tun. Zu empfehlen ist das natürlich trotzdem nicht.

--
Marcus

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.