Ejemplo SCI Recepción por Interrupciones
De Wikitronica
Este artículo está incompleto. Necesita trabajo adicional. Revisar la discusión.
El siguiente es un ejemplo de Recepción de datos por puerto serial utilizando interrupciones. Los datos recibidos son mostrados por los LEDS de la tarjeta de desarrollo DEMOQE128.
;*******************************************************************
;* Ejemplo de recepción serial por interrupciones
;* Se muestra el dato recibido por los LEDS del DEMOQE128
;*******************************************************************
; Include derivative-specific definitions
INCLUDE 'derivative.inc'
;
; export symbols
;
XDEF _Startup
ABSENTRY _Startup
;
; variable/data section
;
ORG RAMStart ; Insert your data definition here
DatoSerial: DS.B 1
;
; code section
;
ORG ROMStart
_Startup:
LDHX #RAMEnd+1 ; initialize the stack pointer
TXS
LDA #%00000011
STA SOPT1 ;Disable Watch Dog, Enable BKGND debugging
LDA #$0
STA DatoSerial ;inicialización de la variable
BSR InitGPIO
BSR InitSerial
CLI ; enable interrupts
mainLoop:
; Insert your code here
BSR MostrarDato
BRA mainLoop
;**************************************************************
;* Rutinas de inicializacion *
;**************************************************************
InitGPIO: ;Se configuran los LEDS del DEMOQE como salida
LDA #$3F ;Pines 0:5 del Puerto C y 6:7 del Puerto E como salida
STA PTCDD
STA PTCD
LDA #$C0
STA PTEDD
STA PTED
RTS
InitSerial:
LDA #$00
STA SCI1BDH
LDA #$1A ;/* Pre-escaler ajustado: [SBR12:SBR0] = 4Mhz/(16*9600) =~ 26,04d= 1A (hex)*/
STA SCI1BDL ;/*Baud Rate = 9600bps para un clock de 4MHZ*/
LDA #$00
STA SCI1C1 ;/*Transmisión y recepción normal de 8 bits sin paridad*/
LDA #%00100100
STA SCI1C2 ;/*Habilita solo el receptor CON interrupciones*/
RTS
;**************************************************************
;* Rutina para mostrar el dato por el puerto *
;**************************************************************
MostrarDato:
LDA DatoSerial
;Mostramos los pines 0:5 del PTC
LDA #%00111111 ;Mascara de bits
AND DatoSerial
COMA ;Logica negada en los leds
STA PTCD
;Mostramos los pines 6:7 del PTE
LDA #%11000000 ;Mascara de bits superiores
AND DatoSerial
COMA ;Logica negada en los leds
STA PTED
RTS ;Se sale de la sub rutina y vuelve al PC+1 de donde fue Llamada.
;**************************************************************
;* Rutina de interrupción serial para recepción *
;**************************************************************
RecepcionSerial:
LDA SCI1S1 ;Primer paso para limpiar la bandera
LDA SCI1D ;Segundo paso para limpiar la bandera. Se lee el dato recibido
STA DatoSerial ;Se coloca el valor del acumulador en la variable DatoSerial.
RTI ;Se sale de la sub rutina y vuelve al PC+1 de donde fue Llamada.
;**************************************************************
;* spurious - Spurious Interrupt Service Routine. *
;* (unwanted interrupt) *
;**************************************************************
spurious: ; placed here so that security value
NOP ; does not change all the time.
RTI
;**************************************************************
;* Interrupt Vectors *
;**************************************************************
ORG $FFE0 ; Posición en memoria del vector de interrupción Serial para recibir
DC.W RecepcionSerial ; Rutina de recepción
ORG $FFFA
DC.W spurious ;
DC.W spurious ; SWI
DC.W _Startup ; Reset