![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo Jens! Eigentlich ist "Softwarereset" nicht die richtige Bezeichnung für das, was Du vorhast. Du möchtest ein laufendes BASIC-Programm unterbrechen, sobald der PC ein Zeichen über die serielle Schnittstelle (RS232) zur OM sendet. Ich würde dafür einfach die IRQ-Fähigkeit der OM-Kontroller nutzen. Sobald IRQEN im CONFIG2-Register des Kontrollers gesetzt wird, startet üblicherweise die BASIC-Interruptroutine, nachdem der Kontroller am IRQ-Pin (gleich PORT[3]) eine fallende Flanke detektiert hat. Das paßt sehr gut zum RS232-Signal an PORT[1]. Es ist HIGH, bis ein Stopbit gesendet wird. Man muß also einfach ein passendes Programm in die OM laden und anschließend PORT[1] mit PORT[3] verbinden. Der Hostmodeschalter muß natürlich immer auf "RUN" stehen, es muß also an PORT[3] HIGH-Potential liegen, sonst werden beide Ports auf LOW gesetzt. Die BASIC-Interruptroutine kann man sich in diesem Fall sogar sparen. Du möchtest ja nur herausfinden, ob ein IRQ-Interrupt stattgefunden hat. Dafür kann man die interne Variable IrqReq abfragen. Ich habe es gerade mit meinem PE-Board ausgetestet: Wenn ich das folgende Programm auf die Open-Micro lade und starte und anschließend PORT[3] mit PORT[1] direkt verbinde, kann ich die OM in den Hostmodus versetzen, wenn ich ein beliebiges Zeichen mittels Terminalprogramm über die serielle Schnittstelle vom PC zur OM sende. Das Zeichen wird von der OM verworfen. Anschließend kann ich ein neues Programm übertragen und die OM über die serielle Schnittstelle starten, ohne die Verbindung zwischen PORT[3] und PORT[1] zu entfernen. Nachdem ich die beiden Ports verbinde, messe ich während der Programmausführung eine Spannung von 4,06 Volt. INCLUDE "om.def" DIM led PORT[2] 'IRQEN im CONFIG2-Register des Kontrollers setzen. Das Register laesst sich 'nur einmal nach jedem Reset beschreiben ("write once"), nachfolgendes Be- 'schreiben wird ignoriert. CONFIG2=&b01000000 'Durch das Einschalten evt. ausgeloeste Interrupt-Anforderungen loeschen. IrqReq=OFF '--- Das Hauptprogramm ------------------------------------------------------ 'Der Kontroller wartet, bis er am IRQ-Eingang (das ist der gleiche Pin 'wie PTA2 oder PORT[3]) eine negative Flanke detektiert. led=OFF WHILE NOT IrqReq PAUSE 10 TOG led WEND PRINT "Ich starte den Hostmodus." End2Host=ON END Viele Grüße Dietmar Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |