Re: Seriellen Port Initialisieren Kategorie: Progr. Assembler, TaskingTools, OS (von Thomas, http://www.tho-bai.de - 30.01.2005 22:11) | ||
Als Antwort auf Re: Seriellen Port Initialisieren von André H. - 29.01.2005 21:09 | ||
| ||
Danke für deine Antwort. Ich habe nun den korrekten Wert (1Fh) in Register S0BG geschrieben. An dem Problem hat sich jedoch nichts geändert. Ich habe mich darauf einmal kurz mit den gemachten Einstellungen befasst und bemerkt, dass hier ja die Interrupts bei Ein- und Ausgang von Daten aktiviert werden. Diese haben natürlich nur dann eine Wirkung wenn IEN gesetzt wird. Aus den Interrupt-Routinen im disassemblierten OS bin ich jedoch leider noch nicht ganz schlau geworden. Gibt es eine Möglichkeit auf diese zu verzichten? Während des Bootvorgangs werden diese doch auch nicht benötigt. Hier mal mein Testcode: $case $segmented $model(medium) $extend $nomod166 $stdnames(reg164ci.def) regdef R0-R15 code_s SECTION CODE WORD AT 00h assume DPP3:code_s assume DPP2:system pa4cc2 PROC FAR ;Initialisierung DISWDT ;Watchdogtimer beenden MOV STKOV,#0FA00H ;Stackgrenzen initialisieren MOV STKUN,#0FC00H MOV SP,#0FC00H ;Stack-Pointer initialisieren MOV CP,#0FC00H ;Context-Pointer initilisieren BFLDL BUSCON0,#37H,#15H ;Buskonfiguration BFLDH BUSCON0,#12H,#00H BFLDL SYSCON,#04H,#04H ;Systemkonfiguration BFLDH SYSCON,#0FFH,#00H EINIT ;Ende der Initialisierung EXTR #1 ;extended Register MOV DP1L,#0FFh ;P1L.6 auf Ausgang MOV S0CON,#8011h MOV S0EIC,#00h MOV S0RIC,#057h ;Interrupt enabled MOV S0TIC,#056h ;Interrupt enabled MOV S0BG,#01Fh ;Baudrate 192000 ;BSET IEN ;Interrupt enable JNB T3EUD, cmd_Mode ;Hosttaste gedrückt? CALL gotoSeg3 BSET P1L.6 ;P1L.6 setzen endl: JMP endl ;Endlosschleife gotoSeg3: CALLS 3,0 JMP endl cmd_Mode: MOV P1L,#080h recvCMD: JNB S0RIR, recvCMD ;Auf Kommando-Byte warten MOV R7,S0RBUF ;Kommando-Byte in R10 sichern BCLR S0RIR ;Request-Flag wieder zuruecksetzen ;Kommando-Byte auswerten CMP R7,#0 JMPR cc_EQ, null CMP R7,#1 JMPR cc_EQ, eins CMP R7,#2 JMPR CC_EQ, zwei MOVB RL0,#0 ;wird ausgeführt wenn keiner der obigen Fälle zutrifft CALL echo ;Echo ausgeben err: MOV P1L,#11111100B JMP err null: MOV P1L,#1110000B JMP null eins: MOV P1L,#1000000B JMP eins zwei: MOV P1L,#100000B JMP zwei ;Routine zum senden eines Echos echo: MOV P1L,#0FFh JNB S0TIR,echo ;Ueberpruefen, ob Request-Flag ; bereits gesetzt ist MOV P1L,#0AAh BCLR S0TIR ;Request-Flag wieder zuruecksetzen MOVBZ R12,RL0 MOV S0TBUF,R12 ;Daten in Sende-Register schieben wait4: BCLR P1L.7 JNB S0TIR,wait4 ;warten, bis Daten gesendet wurden RET ;Ruecksprung An P1L habe ich einer LED-Schaltung. Hieran sehe ich, dass nie einer der 3 Fälle zutrifft und immer zur Echo-Routine gesprungen wird. Diese hängt dann beim �berprüfen des Requestflags. Wenn ich IEN setze ist das natürlich hier wie ein Reset, da an den entsprechenden Interruptvektoren nichts steht. Ich habe auch einmal ausprobiert S0TIC und S0RIC auf 0 zu setzen. Aber auch das hat keinen Erfolg gebracht. Was genau machen also die Interrupt-Routinen im OS oder kann man darauf auch verzichten? Nochmals danke für die Hilfe Thomas Meine Seite: http://www.tho-bai.de | ||
Antwort schreiben Antworten: Re: Seriellen Port Initialisieren (von Thomas - 2.02.2005 0:32) Re: Seriellen Port Initialisieren (von André H. - 13.02.2005 11:30) |