( Instructions de gestion de la deuxieme UART. Version 0.10 du 21 Avril 2013. Ecrit par jpb.forth . ) TELECHARGEMENT HEX ( Definition des files de transmission. ) HERE 2 20+ 2/ ALLOT CONSTANT UART2_RECEIVE_FILE ( 34 Octets ) HERE 2 20+ 2/ ALLOT CONSTANT UART2_TRANSMIT_FILE ( 34 Octets ) ( Programme de gestion des interruptions de l'UART. ) PRGHERE ] 36 DUP >R @ R> ( Sauvegarde de RCOUNT ) UART2_RECEIVE_FILE DUP C@ 1+ 1F AND OVER 1+ C@ OVER = IF DROP DROP ELSE 21C ( U2RXREG ) C@ 3 PICK DUP C@ + 2+ C! SWAP C! THEN 86 ( IFS1 ) DUP >R @ F7FF AND R> ! ! ( Recuperation de RCOUNT ) [ 06 4000 PRG, ( RETFIE ) 00 0044 PRG! ( Vecteur IT UART2 RX ) PRGHERE ] 36 DUP >R @ R> ( Sauvegarde de RCOUNT ) UART2_TRANSMIT_FILE DUP 1+ C@ OVER C@ OVER = IF DROP DROP 8E ( IEC1 ) DUP >R @ 7FFF AND R> ! ELSE OVER + 2+ C@ >R 1+ DUP C@ 1+ 1F AND SWAP C! R> 21A ( U2TXREG ) C! THEN 86 ( IFS1 ) DUP >R @ FDFF AND R> ! ! ( Recuperation de RCOUNT ) [ 06 4000 PRG, ( RETFIE ) 00 0046 PRG! ( Vecteur IT UART2 TX ) ( Routine d'initialisation de l'interface UART2 : ----------------------------------------------- bdh,bdl,nbstop,parite,rts/cts RS232B_INIT - bdh-bdl : vitesse de transmission en nombre de bits par seconde nbstop : nombre de bits de stop { 1 ou 2 } parite : 0 pour pas de parite 1 pour parite forcee a "0" 2 pour parite impaire 3 pour parite paire 4 pour parite forcee a "1" rts/cts : different de 0 si controle de flux materiel ) : UART2_INIT 8E ( IEC1 ) DUP >R @ FCFF AND R> ! 0 216 ( U2MODE ) ! 400 218 ( U2STA ) ! IF 8100 ELSE 8000 THEN SWAP CASE 1 OF 6+ 0 21A ( U2TXREG ) ! ENDOF 2 OF 4+ ENDOF 3 OF 2+ ENDOF 4 OF 6+ 100 21A ( U2TXREG ) ! ENDOF ENDCASE SWAP 2 = 1 AND + >R 0 BEGIN 3 PICK IF >R >R DUP 1 AND F LSH >R -1 LSH R> R> -1 LSH + R> 1- 0 ELSE ROT DROP OVER 0< IF >R -1 LSH R> 1- THEN -1 THEN UNTIL 4+ 20C ( U1MODE ) @ 8 AND 4/ - 2+ >R 214 ( U1BRG ) @ 1+ 7080 ROT */ R> BEGIN DUP 4 > IF >R 2* R> 1- 0 ELSE DUP 2 < IF >R 1+ -1 LSH R> 1+ 0 ELSE DUP 3 = IF OVER 0< IF >R 1+ -1 LSH R> 1+ ELSE >R 2* R> 1- THEN THEN -1 THEN THEN UNTIL 2 = 8 AND R> + 216 ( U2MODE ) ! 1- 21E ( U2BRG ) ! 86 ( IFS1 ) DUP >R @ FCFF AND R> ! 8E ( IEC1 ) DUP >R @ 0300 OR R> ! ; ( Routine d'emission d'un octet : ------------------------------- octet RS232B_EMET - ) : UART2_EMET UART2_TRANSMIT_FILE DUP C@ 1+ 1F AND BEGIN OVER 1+ C@ OVER - IF -1 ELSE 96 ( IEC1 ) DUP >R @ 8000 OR R> ! 0 IDLE THEN UNTIL ROT 3 PICK DUP C@ + 2+ C! SWAP C! 96 ( IEC1 ) DUP >R @ 8000 OR R> ! ; ( Routine de reception d'un octet : --------------------------------- - RS232B_RECOIT octet ) : UART2_RECOIT UART2_RECEIVE_FILE DUP 1+ C@ BEGIN OVER C@ OVER = WHILE IDLE REPEAT OVER + 2+ C@ >R 1+ DUP C@ 1+ 1F AND SWAP C! R> ; DECIMAL ( FIN )