mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LPC2294 und External Memory Controller


Autor: Michael Blum (m_blum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;

Autor: Dominic R. (dominic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael Blum (m_blum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael Blum (m_blum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK danke ,denke das ist es gewesen.

Gruß Michael

Autor: Michael Blum (m_blum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: roberto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

#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 !!!

#define EMC_FLASH_BASE *((volatile unsigned short *)0x80000000)//Beginn Flash bereich

EMC_FLASH_5555=0x00AA; // schreiben
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.

Autor: roberto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: roberto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok Michael,
Danke sehr für die Antwort.Ich werde es ausprobieren.Danke
Grüß
Roberto

Autor: roberto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Roberto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Michael,

jetzt ist die Sache ein klarer.Ich werde versuchen einzuarbeiten.

Grüß
Roberto

Autor: Roberto (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Roberto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Sani (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi Roberto,

hast du schon dein Problem mit LPC2294 schon gelöst?

gruss Sani

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.