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
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
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
Genau so läufts. Beim STK300 von Atmel funktioniert zum Beispiel das LCD-Interface grundsetzlich auf diese Weise.
das es grundsätzlich so funktioniert ist schön aber es funktioniert praktisch nicht :-(
Hallo, bist Du sicher, dass das #define richtig ist? Ich habe schon mit mehreren Compilern gearbeitet. Jeder benutzt so seine eigene Syntax. Alex
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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.