Forum: Mikrocontroller und Digitale Elektronik LPC 2138 ARM Taktung


von Fried V. (tich)


Lesenswert?

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

von Fried V. (tich)


Lesenswert?

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

von Kai F. (k-ozz)


Lesenswert?

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;
}

von Fried V. (tich)


Lesenswert?

Danke,
das war wohl einer der  Gründe, mit der Code Änderung sind es jetzt beim
LPC2138FBD64/01 ca. 2.5 Mhz. Mal sehen, was man da noch einstellen muss 
um die volle Speed zu erreichen.
Wenn man vom AVR und anderen 8 Bittern kommt ist der ARM an Anfang doch 
recht gewöhnungsbedürftig!
Thx, Fried

von Andreas K. (a-k)


Lesenswert?

Über den IOxxx Adressen der LPC2000 Ports sind keine Rennen zu gewinnen, 
das ist allgemein bekannt. Die hängen an einem vergleichweise langsamen 
Sekundärbus.

Wenn man es eilig hat, sollte man die Fast-IO verwenden. Wenn das Device 
die schon hat.

von Robert Teufel (Gast)


Lesenswert?

@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

von Kai F. (k-ozz)


Lesenswert?

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.

von Fried V. (tich)


Lesenswert?

Vlielen Dank für Eure Tips,
so laaangsam lernt man die Haken und Ösen
des LPC2138 kennen!
Gruß Fried

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
Noch kein Account? Hier anmelden.