Hallo an alle erstmal, im Rahmen eines gerade laufenden Projektes arbeite ich mich in den LPC2294 ein. Beim in betrieb nehmen des EMC ist mir ein gerade nicht erklärliches Verhalten aufgefallen. Wenn ich den externen Bus als 8 oder 16 Bitbreit konfiguriere bekomme ich Verzögerungen bei der Ausgabe von Daten. Wenn ich ihn aber als 32 Bit konfiguriere ist alles in Ordnung und ich erhalte keine Verzögerung. Kann mir bitte jemand erklären was ich übersehe! PS. IDCY = 0; WST1 = 0; WST2 = 30; RBLE = ja WP,BM nein; PINSEL2 = 0x0FE149E4;
Könntest du "Verzögerung bei der Ausgabe von Daten" etwas näher erklären? z.B. wäre es ja verständlich, dass ein 32-bit Zugriff auf einem 8-bit breiten Datenbus länger dauert als auf einem 32-bit breiten Bus. Gruss, Dominic
Ich gebe eine int mit 255 aus, ohne andere Programmaufrufe. Mit meinen Einstellungen dauert diese Datenausgabe ca. 500 ns, danach habe ich die besagte Verzögerung von ca. 1.2µs (bei 8 Bit).
Also wenn Du in einer Schleife arbeitest und vom externen Bus die Befehle holst, dann dauert das mit 16-bit doppelt so lange und mit 8-bit bus 4x so lange wie mit einem 32-bit Bus. Der Prozessor kann erst einen weiteren Befehl ausfuehren, wenn die 32-bit beisamen sind. Solltest Du im Thumb mode arbeiten, dann ist ein Befehl 16-bit breit und sollte vom externen Bus gleich schnell laufen wie vom 32-bit Bus. Im ARM mode (default) ist alles 32-bit breit. Robert
Hallo ist anscheinend doch noch nicht ganz gegessen! Habe immer noch Verständnis Probleme bei dem EMC. Ich möchte konkret einen Flash an den EMC anschließen. Dieser besitzt einen 19Bit Adr- und 16 Bit Datenbus. Nach Datenblatt habe ich den Flash mit A1-A20 (vom LPC) angeschlossen und in Keil den Startupcode folgendermaßen eingestellt: IDCY =1; WST1 und WST2 =5; RBLE =0;WP & BM =0;MW = 16 Bit PINSEL2 ist folgendermaßen konfiguriert (PINSEL2 =0x0f000924), also A1-A23 sind ein A0 ist aus, kein PLCK, kein CL2/3. Dabei ergeben sich im Moment zwei Probleme beim Testen dieser Einstellungen. Erstens ist bei der 16Bit- Einstellung auf dem A1(LPC) also A0 am Flash ein Takt egal ob ich auf Adressen mit A0 schreibe oder nicht. Bei der 32Bit Einstellung ist dieser nicht da, ist auch nicht auf A2(LPC). Gibt es bei µVision3 noch Besonderheiten die man dazu wissen sollte? Zweitens ist es für mich immer noch ein wenig unlogisch einen 8/16 Bit Modus anzubieten wenn ich im Endeffekt eh immer 32 Bit ausgebe! Diese dann aber auf die Entsprechende Busbreite anpasse und 4x1Byte oder 2x1 Word ausgebe um ein Lese- oder Schreibzyklus durchzuführen. Liegt das an dem Verwendeten Bustypen im LPC? Danke für jeden hilfreichen Gedanken Michael
Hallo Michael, Ich arbeite auch mit einem lpc2294,und versuche daten duch den external bus auszulesen.Ich bin aber noch anfänger und habe leider noch keine klare idee wie es zu implementieren ist ,außerdem habe ich den Abschnitt vom EMC in user manual durchgelsen aber habe ehrlich gesagt nicht so viel verstanden .Koenntest du mir vielleicht ein bisshen erklaeren was diese external memory ist?und hast du vielleicht konkrete beispiele wie man sie implementieren kann? Danke. Roberto.
Möchtest du Daten von einem externen Device auslesen oder schreiben? mit welcher Umgebung arbeitest du ? ich habe mit Keil gearbeitet generell ist sieht ein Zugriff folgender maßen aus:
1 | #define EMC_FLASH_5555 *((volatile unsigned short *)0x8000AAAA)//ADRESSE 1 anstadt 5555<<1=AAAA wichtig da hier ein 16-bit zu griff erfolgt und die adr A0 nicht verwendet wird !!!
|
2 | |
3 | #define EMC_FLASH_BASE *((volatile unsigned short *)0x80000000)//Beginn Flash bereich
|
4 | |
5 | EMC_FLASH_5555=0x00AA; // schreiben |
6 | Producer = EMC_FLASH_BASE; // lesen |
wichtig ist hierbei das du den Bus aktivierst und die Daten breite einstellst achja bei mir musste ich noch das Register PINSEL2 im Hauptprogramm nochmal neu setzen ohne dies ging es nicht.
aso,Danke für die schnelle Antwort.Ich möchte daten durch ein SPC3 von einem profi bus auslesen.Ich benutze Eclispse GNU gcc compiler.Ich werde es ausprobieren .Bis dann. Roberto.
kein Problem BCFG Register musst du noch setzen für das Timing und Busbreite und den Adressbereich den du verwenden willst eventuell im Programm angeben viel erfolg PS: für GCC sollte es auch Bsp. geben die auf den externen bus zugreifen kann di aber nicht mehr sagen wo!
ok Michael, Danke sehr für die Antwort.Ich werde es ausprobieren.Danke Grüß Roberto
Hallo, ich habe eine Frage über den Code den du geshrieben hast : EMC_FLASH_5555=0x00AA; // schreiben Producer = EMC_FLASH_BASE; // lesen was ist producer?Außerdem wenn ich auslesen will wie soll ich WST1 einstellen? oder lass ich es auf null genauso wie du gemacht hast???Danke. Roberto
Producer ist eine Variable entsprechend dem typ der ADR- Definition (unsigned short) WST 1 und 2 musst du auf die Geschwindigkeit deines Devices anpassen (ist abhängig davon wie schnell der ARM getaktet ist) RBLe auch einschalten
Danke Michael, jetzt ist die Sache ein klarer.Ich werde versuchen einzuarbeiten. Grüß Roberto
Hallo, ich habe diese Funktion kopiert und eingefügt in meinem Code für die Configurration von der externen memory.Meine Frage ist :jetzt hat man die BCFG registers und PINSEL2 konfiguriert,wie klappt jetzt mit dem auslesen und schreiben weiter oder sobald das SPC3 angeschloßen ist und es auch zu funktionalität gebracht wird,werden automatisch daten gesendet und empfangen von und zum µC?Danke. Roberto.
ne automatisch geht da nix ! muss als erstes versuchen mal die ID oder ein Testregister vom Chip zu lesen und dann eines zu schreiben. Im Anschluss daran musst du dir ne Bibliothek schreiben die die gewünschten Funktionen bereitstellt. Mit dieser kannst du dann arbeiten.
aso ok, und wie kann ich auf einem Register auf dem Modul zugreiffen??soll das im user manual vom modul beschrieben werden? und wenn ja wie kann das programm das ich für den µC geschrieben habe auf die hardware vom Modul zugreiffen??Danke.
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.