LPC 2138 ARM Taktung

OP #870504
Hi,
ich betreibe ein Olimex Board mit 14,7456 Mhz und PLL *4 Einstellung.
Folgendes Programm:
while(1) {
    IO0CLR|=IO_LED_Y; //Yellow LED on  (P0.12)
    IO0SET|=IO_LED_Y; //Yellow LED off
    }
erzeugt ein Rechtecksignal von ca. 1 Mhz. Müsste das nicht erheblich 
schneller sein?
In dem CrossStudio von Rowley muss für den Olimex Tiny der JTAG Clock 
Divider auf 2 oder höher stehen, sonst tut sich nix, ist das so richtig? 
Habe bisher leider keine Doku dazu gefunden.
Gruß Fried
OP #870517
Nachtrag, zugehöriger .h file Auszug:

#define REG(x) (*((volatile unsigned int *)(x)))
#define IO0DIR      REG(0xE0028008)  // I/O direction control
#define IO0CLR      REG(0xE002800C)  // output clear
#define IO0SET      REG(0xE0028004)  // output set

#define IO_LED_Y    (1<<12)
#define IO_LED_G    (1<<13)

Thx, Fried
#870581
Was für dein LPC2138 ist denn da drauf? LPC2138FBD64 oder 
LPC2138FBD64/01 ?
Ansprechen tust du die Pins zumindest im langsamen Modus. Damit sind bei 
60Mhz max. etwa 4Mhz möglich. Die schnellen IOs des LPC2138FBD64/01 
können das etwa 3.5x schneller.

Ein Grund, dass du nur etwa 1MHz erreichst liegt darin, dass du die 
Register falsch anspricht! Die IOxCLR bzw. IOxSET Register sollten nur 
geschrieben werden, da sie selbst rückstellend sind, d.h. wenn du deinen 
Code durch den nachfolgenden ersetzt solltest du die volle 
Geschwindigkeit erreichen:

while(1)
{
    IO0CLR = IO_LED_Y;
    IO0SET = IO_LED_Y;
}
Gast #870801
@Fried,

das Stichwort Fast I/O ist schon mehrfach genannt worden. Wenn I/O ueber 
die traditionelle Art gemacht wird, dann sind da mehrere Teiler drin zur 
Synchronisation des Peripheral Busses.
Fast I/O haengt am sogenannten Local Bus und hat keine Teiler, kann also 
deutlich schneller laufen.
Beim urspruenglichen Design der ARM Prozessoren wurde nicht in Betracht 
gezogen, dass sie eines Tages zur schnellen Bitmanipulation hergenommen 
wuerden, in den Telefonen der 90er Jahre war das nicht so notwendig. Das 
Anwendungsgebiet hat sich geaendert, die Preise fuer die Chips auch.
p.s. Du brauchst keinen 14.756 MHz Takt falls eigentlich ein "gerader 
Takt" besser waere. Es kann also ein 12 MHz Quartz genommen werden. Der 
213x/01 hat einen Fractional Baudrate Generator (im original 213x ist 
der noch nicht drin), d.h. es wird eine sehr genaue Baudrate auch dann 
erreicht, wenn der Takt kein vielfaches von 115200 ist.

Gruss, Robert Teufel
#870830
Da du den LPC2138FBD64/01 hast kannst du auch die Fast-IOs (FIO) nutzen.
Für FIOs mußt du gleich am Programmanfang folgende Zeile einfügen:

SCS = 0x00000003;

Danach DARFST du aber nicht mehr auf die normalen IOxxx-Register 
zugreifen, sondern nurnoch auf die FIOxxx. Für jedes IOxxx-Register gibt 
es ein FIOxxx Pendant und noch ein paar weitere, die einem das Leben 
leichter machen. Dann solltest du den 3.5 fachen Wert erreichen. Für 
maximale Geschwindigkeit sind vermutlich ein paar Zeilen Assembler 
notwendig.

Der von Robert erwähnte Fractional Baudrate Generator ist auch eine 
feine Sache und funktioniert bestens. Auf der Seite von NXP existiert 
auch eine Excel-Datei, die die Berechnung der Werte für das 
UxFDR-Register erleichtert.

Eine weitere, sehr nützliche Neuerung sind auch die erweiterten Register 
der A/D-Wandler, die die CPU-Auslastung drastisch reduzieren können.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.