Hallo,
habe folgendes Problem und hoffe, dass ich hier kompetente Tipps
bekomme:
Ich habe ein neues 80C517A-Entwicklungsboard mit 32kB externem RAM und
dem Keil-Monitor 10FF0 auf einem EPROM. Das Ding muss ich laut
Beschreibung im Lieferzustand in Harvard-Architektur betreiben (nach
Durchtrennen einer Leiterbahn und Einlöten eines Jumpers sowie eines 2.
ROM-Bausteins ließe es sich auch auf v.-Neumann-Adressierung
umstellen...).
Die Adressierung des externen Speichers ist dabei laut Datenblatt
folgende:
ROM0 (Monitor-EPROM/Code): 0x0000-0x7FFF
RAM1 (XData): 0x8000-0xFFFF
Speicheraufteilung im Keil-Compiler:
Code:
Start 0x8000, Size 0x2000
XData:
Start 0xA000, Size 0x8000
Das RAM dient als Speicher für Code & XData, d.h. der Keil-Monitor lädt
das Programm aus der Entwicklungsumgebung komplett ins RAM, so dass ein
Debuggen über serielle Schnittstelle am PC möglich ist.
Das ist ja alles ganz schön, funktioniert auch soweit (serielle
Schnittstellen, I/O-Ports etc.) - bis auf die Interrupts! Deren Vektoren
liegen nämlich im Speicherbereich, der vom EPROM belegt ist, der
beschreibbare Code-Bereich geht aber erst ab 0x8000 los. Eine andere
Speicherkonfiguration funktioniert nicht!
Beim kompilieren einer fehlerfreien! Serviceroutine (hier für Interrupt
2) erscheint nun:
*** WARNING L5: CODE SPACE MEMORY OVERLAP
FROM: 000BH
TO: 7FFFH
Beim Übertragen des entsprechenden Programms meldet der Keil-Monitor:
MONITOR ERROR 22: NO CODE MEMORY AT ADDRESS 000DH
Meine Frage an die Experten ist nun: gibt es eine Möglichkeit, wie ich
auch ohne zusätzliche Hardware wie nichtflüchtigen Speicher auf die
Interrupt-Requestadressen zugreifen könnte (ich programmiere in C mit
Keil µVision3) oder habe ich die bloss die Speichereinstellungen in
µVisions "Options for Target" versemmelt?
Hoffe, das war einigermassen verständlich...
1000 Dank für eure Bemühungen, bin für jeden Tipp dankbar!