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
Um welche Zeiten geht es hier? Möglichst kurzes Delay ist ja 0. I2 sagt mir nichts.
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
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.
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?
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.
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
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"
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
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.