Hallo ! Ich sitze gerade mit dem Oszi an einem LPC2106 board (Eigenbau). In einer kleinen Schleife toggle ich einen Port Pin: ...<Intialisierung>... 1: str r0,[r1,#_IO0SET] str r0,[r1,#_IO0CLR] b 1b MAM auf maximale Beschleunigung, PLL auf 4-fach, Quarz 14.7456MHz. Mein Programm fuehre ich aus dem RAM aus. Prophylaktisch habe ich die Flash-Waitstates (unzulaessigerweise) auf 1 gesetzt. ABER: Am Port ergeben sich dann nur ca. 4Mhz. Erwarten wuerde ich etwa 60MHz/3 = 20MHz, da die 3*32bit Code-Sequenz in eine 128bit Cache-Line passt, un damit zu keinem fetch fuehren sollte. Da VPB-Teiler = 1 gesetzt und damit CCLK = PCLK = knapp 60Mhz frage ich mich, warum das so langsam ist. In welchem Manual kann ich lesen, welche Frequenz theoretisch herauskommen musste? Wo steht eigentlich, wie schnell ich PCLK laufen lassen darf? Teilt die GPIO-Einheit den PCLK nochmals herunter? Dauert der Befehl STR so lange?? Da die LPC2101..2103 ein 'fast IO' haben nehm ich mal an dass es am GPIO liegt.
Wohlbekannt. Mit Beinchen wackeln gehört zu den schwachen Seiten der älteren LPC2000-er. Der I/O-Bus bremst aus.
Hier kommen mehrere Probleme zusammen. - Eine STR Instruktion benoetigt immer mindestens zwei Cycles (siehe ARM7TDMI-S TRM). - Da die GPIOs beim LPC2106 noch dazu am langsamen VPB haengen dauert der Zugriff noch einige Cycles laenger. - Der Branch hat ein Penalty von 2 Cycles, da die Pipeline (3-stufig) wieder neu gefuellt werden muss.
Danke! Ich kapiers schon fast ;-) Ich werde nun das Manual mal studieren und dann nachrechnen wie die Zeiten zustandekommen. Ein Impuls ist bei mir derzeit mind. 120ns breit. (2*16ns + 2*16ns) + oder * VPB-Geschichten... @Dominik: kannst du mir aus dem Stehgreif auch noch kurz sagen was das -S am ARM7TDMI-S ausmacht? Das habe ich auch schon vergeblich versucht herauszufinden. Marc
Ohne S: Der ATM7-Core ist fix- und fertig von ARM konfiguriert. Mit S: Core liegt als VHDL-Beschreibung oder sowas in der Art vor und kann dementsprechend optimiert in das Kundendesign integriert werden. Braucht aber etwas mehr Platz und Strom.
@Marc Prager: Beschäftige mich außer dem C-Code auch kürzlich mit ARM Assembler, da man nicht immer darum herum kommt, für spezielle Dinge. Was bedeutet "1b" beim Befehl "B 1b" ? Das Label heißt doch "1:". b 1b Ist das eine spezielle Assemblersyntax, oder hat das was mit Offset oder Pipeline zu tun? Gruß Dietmar
Spezielle Labelsyntax. Temporäres Label "1" und "b" für "backwards", spricht also das letzte vorherige Auftreten dieses Labels an. Vorwärts wäre "1f".
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.