Forum: Mikrocontroller und Digitale Elektronik Adress- Datenbus


von mark (Gast)


Lesenswert?

problem:
ich hab bis jetzt nur mit "kleinen" uC gearbeitet, d.h. da hat man ein 
Port das ein Direction Register hat und ein Data Register, wenn ich 
jetzt auf das Port was schreiben/lesen will sag ich einfach Port1 ist 
Ausgang Port1.Pin1 ist 1 mittels dem DataRegister, klingt logisch, jetzt 
hab ich aber einen uC der einen fixen Adressbus und einen fixen Datenbus 
hat, wie funktioniert es jetzt das ich auf eine bestimmte Adresse Daten 
schreiben kann?? wenn ich in der headerdatei ein #define mache und zum 
Beispiel auf die Adresse 0x60000 schreiben will:
#define Addresse1 *(volatile unsigned char*) 0x60000, wenn ich dann im C 
Teil schreib, Adresse1=1; müsst er doch die Adresse 0x60000 am Adressbus 
anlegen und am Datenbus 1, oder nicht?? klingt sehr kompliziert, hoffe 
es versteht irgendwer

von Norbert (Gast)


Lesenswert?

Da meine C-Kenntnissse noch nicht so berauschend sind, kann ich Dir 
konkret nicht helfen. Ich habe jedoch mit einer C167-MCU gearbeitet, und 
da hat der C-Compiler von Keil diese Aufgaben mit speziellen Befehlen 
gelöst.

Zu erwähnen ist natürlich, daß bei Bussystemen die verschiedenen
Bausteine (EPROM, RAM, USART usw.) über eine seperate Dekodoerlogik 
(Stichworte: 'HC138, GAL) enabled werden müssen.

Wenn Du wirklich noch keine Ahnung hast, wäre als Einstieg ein fertiges 
EVAL-Board mit zugehöriger Software richtig.

Sieh' mal unter:  http://www.phytec.de  nach.

Norbert

von mark (Gast)


Lesenswert?

Die CPU hat ein festgelegtes Memorymapping, das heißt spricht man eine 
Adresse an wird der richte Chip Select aktiviert, d.h. daran scheitert 
es nicht

von Carsten (Gast)


Lesenswert?

Genau so läufts.

Beim STK300 von Atmel funktioniert zum Beispiel das LCD-Interface 
grundsetzlich auf diese Weise.

von mark (Gast)


Lesenswert?

das es grundsätzlich so funktioniert ist schön aber es funktioniert 
praktisch nicht :-(

von Alex1 (Gast)


Lesenswert?

Hallo,
bist Du sicher, dass das #define richtig ist?
Ich habe schon mit mehreren Compilern gearbeitet. Jeder benutzt so seine 
eigene Syntax.
Alex

von Peter D. (peda)


Lesenswert?

Hallo Mark,

jeder Adreß-, Datenbus funktioniert anders.

Deshalb steht auch in jedem Datenblatt eines µC, wie externer Speicher 
angeschlossen werden muß.

D.h. ohne zu wissen, welchen µC Du meinst, kann Dir keiner helfen.

Muß ja doch schon ein 16-Bitter sein mit mindestens 19 Adreßleitungen, 
um Adresse 0x60000 zu dekodieren.


Was grundsätzlich funktioniert, funktioniert auch praktisch, sonst müßte 
der Hersteller seine Chips ja einstampfen.

D.h. immer den Fehler zuerst bei sich selber suchen oder nochmal 
gründlicher alle dazu gehörenden data sheets, user guides, application 
notes, design examples, errata sheets usw. lesen.


Im Zweifelsfall die Hardware auch immer erst mit Assembler testen.
Wenn z.B. die externen Speicherzugriffe nicht klappen, der C-Compiler 
dort aber seinen Stack ablegt, kann es nur noch crashen.



Peter

von mark (Gast)


Lesenswert?

@peter:
das der fehler bei mir liegt ist mir durchaus bewußt deshalb wende ich 
mich ja an euch,
es ist ein h8s/2655 von Hitachi der 24 adressbusleitungen (16mb)

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.