PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AT89C52 und Programm ins RAM



Import-Script
26.04.2003, 16:08
Hallöchen! <BR> <BR>Hab da mal ne Frage an Controllerspezialisten: <BR> <BR>Kann es klappen, wenn ich eine Laderoutine ins Flash eines 89C52 schreibe, die ein &uuml;ber RS232 gesendetes HEX-File in ein 128kByte RAM schreibt? Danach soll beim 1. externen Lesevorgang ein FlipFlop kippen, welches das /EA-Signal auf LOW zieht. Soweit so gut. Ich mache mir Sorgen wegen des Timings, ich möchte den A16 des RAMs = /PSEN machen? Klappt das, oder &uuml;bersehe ich da irgendetwas großes?!? <BR> <BR>Thx

Import-Script
26.04.2003, 17:33
Also ich kenne es vom 68000er her, da wird auch z.B. ein FlipFlop genommen um das ROM an Adresse 0 einzublenden wegen Resetvektor. Schreib einfach 100 oder 200 mal NOP an den Anfang nach der Einsprungadresse, dann ist es egal in welcher RAM-Bank die CPU ist und ob das FF synchron zum nächsten Befehl kippt oder erst einen später, es ist ja egal, die CPU bekommt auf jeden Fall NOP und macht keinen Operandenfetch, an dem sie sich verhaspeln könnte. Kleiner Trick...

Import-Script
26.04.2003, 18:28
Das geht und zwar sehr gut. Ich hab das mal mit einem C515 gemacht, weil der nur OTP ist. <BR> <BR>Und nach jedem Versuch einen wegschmeißen wollte ich nicht. <BR> <BR>Wichtig ist, daß der interne Flash / OTP kleiner als 64kB ist und das Du nicht die Lockbits setzt. Sonst kann man den EA-Pin nicht umschalten. <BR> <BR>Ich habe EA einfach mit einem Pin von P1 verbunden. Nach dem Reset sind alle Ports = 1 und somit der interne Speicher aktiv. <BR> <BR>Dann wird eine Routine nach ganz oben &#40;z.B. 0F000h&#41; geladen, die diesen Pin auf 0 setzen kann. <BR> <BR>Nachdem Deine Bootroutine sich vergewissert hat, daß ein ausf&uuml;hrbares Programm im externen Speicher ist, springt es diese Routine an. Da diese Routine außerhalb der Größe des internen Speichers ist, ist der EA-Pin egal und es wird immer vom externen Speicher ausgef&uuml;hrt. Somit gibt es keinerlei Timing Probleme. Die Routine setzt EA = 0 und springt zu 0000h zur&uuml;ck, wo nun der externe Speicher ausgef&uuml;hrt wird. <BR> <BR> <BR>Peter <BR>