Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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
Ich nutze:
C-Control II Unit, CC2-Application-Board
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)