Diferencia entre revisiones de «Ejemplo SCI Transmisión por Interrupciones»

De Wikitronica
Saltar a: navegación, buscar
 
(No se muestran 2 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 +
[[Categoría: EC2721 - Arquitectura del Computador 1]]
 +
[[Categoría: EC3731 - Arquitectura del Computador 2]]
 +
[[Categoría:MC9S08QE128]]
 
El siguiente es un ejemplo de Transmisión de una Tabla de caractares ASCII por puerto Serial para la tarjeta DEMOQE128.
 
El siguiente es un ejemplo de Transmisión de una Tabla de caractares ASCII por puerto Serial para la tarjeta DEMOQE128.
  
Línea 7: Línea 10:
  
 
; Include derivative-specific definitions
 
; Include derivative-specific definitions
 
 
             INCLUDE 'derivative.inc'
 
             INCLUDE 'derivative.inc'
 
 
;
 
;
 
 
; export symbols
 
; export symbols
 
 
;
 
;
 
 
             XDEF _Startup
 
             XDEF _Startup
 
 
             ABSENTRY _Startup
 
             ABSENTRY _Startup
 
 
ROMTable:      EQU    $3000  ;Lugar donde definimos la Tabla
 
ROMTable:      EQU    $3000  ;Lugar donde definimos la Tabla
 
 
;
 
;
 
 
; variable/data section
 
; variable/data section
 
 
;
 
;
 
 
             ORG    RAMStart        ; Insert your data definition here
 
             ORG    RAMStart        ; Insert your data definition here
 
 
Apuntador: DS.B  1                ; Apuntador al Byte que se va a mandar
 
Apuntador: DS.B  1                ; Apuntador al Byte que se va a mandar
 
 
;
 
;
 
 
; code section
 
; code section
 
 
;
 
;
 
 
             ORG    ROMStart
 
             ORG    ROMStart
 
 
_Startup:
 
_Startup:
 
 
             LDHX  #RAMEnd+1        ; initialize the stack pointer
 
             LDHX  #RAMEnd+1        ; initialize the stack pointer
 
 
             TXS
 
             TXS
 
 
             LDA #$00
 
             LDA #$00
 
 
             STA SCI1BDH  ;/* Tasa alta de transmisión deshabilitada (Baud high disabled)*/
 
             STA SCI1BDH  ;/* Tasa alta de transmisión deshabilitada (Baud high disabled)*/
 
 
             LDA #$1A      ;/* Pre-escaler ajustado: [SBR12:SBR0] = 4Mhz/(16*9600) =~ 26,04d= 1A (hex)*/  
 
             LDA #$1A      ;/* Pre-escaler ajustado: [SBR12:SBR0] = 4Mhz/(16*9600) =~ 26,04d= 1A (hex)*/  
 
 
             STA SCI1BDL  ;/*Baud Rate = 9600bps*/
 
             STA SCI1BDL  ;/*Baud Rate = 9600bps*/
 
 
             LDA #$00
 
             LDA #$00
 
 
             STA SCI1C1    ;/*Transmisión y recepción normal de 8 bits sin paridad*/
 
             STA SCI1C1    ;/*Transmisión y recepción normal de 8 bits sin paridad*/
 
 
             LDA #$AC
 
             LDA #$AC
 
 
             STA SCI1C2    ;/*Habilita transmisor y receptor y habilita interrupciones*/
 
             STA SCI1C2    ;/*Habilita transmisor y receptor y habilita interrupciones*/
 
 
             LDHX #$0
 
             LDHX #$0
 
 
             LDA #$0
 
             LDA #$0
 
 
             STA Apuntador ;Apuntador a la Tabla  
 
             STA Apuntador ;Apuntador a la Tabla  
 
 
             CLI          ; enable interrupts
 
             CLI          ; enable interrupts
 
 
              
 
              
 
 
mainLoop:
 
mainLoop:
 
 
             ; Insert your code here
 
             ; Insert your code here
 
 
             NOP
 
             NOP
 
 
             feed_watchdog
 
             feed_watchdog
 
 
             BRA    mainLoop
 
             BRA    mainLoop
 
 
;**************************************************************
 
;**************************************************************
 
 
;* spurious - Spurious Interrupt Service Routine.            *
 
;* spurious - Spurious Interrupt Service Routine.            *
 
 
;*            (unwanted interrupt)                          *
 
;*            (unwanted interrupt)                          *
 
 
;**************************************************************
 
;**************************************************************
  
 
spurious:                          ; placed here so that security value
 
spurious:                          ; placed here so that security value
 
 
             NOP                    ; does not change all the time.
 
             NOP                    ; does not change all the time.
 
 
             RTI
 
             RTI
  
 
Transmite: PSHH          ; La interrupción no guarda H (la guardamos nosotros)
 
Transmite: PSHH          ; La interrupción no guarda H (la guardamos nosotros)
 
+
           LDA SCI1S1    ; Se baja la bandera de transmisión             
           LDA SCI1S1    ; Se baja la bandera de transmisión  
+
 
+
            
+
 
+
 
           CLRH
 
           CLRH
 
 
           LDX Apuntador       
 
           LDX Apuntador       
 
 
           LDA Tabla,X
 
           LDA Tabla,X
 
 
           CMP #$0        ;Comparamos si llegamos al final de la tabla
 
           CMP #$0        ;Comparamos si llegamos al final de la tabla
 
 
           BEQ FinTrans  ;Si es el final apagamos el SCI
 
           BEQ FinTrans  ;Si es el final apagamos el SCI
 
 
                                  
 
                                  
 
 
           STA SCI1D      ;Mandamos el siguiente valor de la tabla
 
           STA SCI1D      ;Mandamos el siguiente valor de la tabla
 
 
            
 
            
 
 
           LDA Apuntador  ;Incrementamos el Apuntador  
 
           LDA Apuntador  ;Incrementamos el Apuntador  
 
 
           INCA
 
           INCA
 
 
           STA Apuntador
 
           STA Apuntador
 
 
           PULH          ; Retornamos H
 
           PULH          ; Retornamos H
 
 
           RTI
 
           RTI
 
 
            
 
            
 
 
FinTrans:  MOV #$00, SCI1C2 ; Deshabilitamos completamente el SCI
 
FinTrans:  MOV #$00, SCI1C2 ; Deshabilitamos completamente el SCI
 
 
           PULH            ; Retornamos H
 
           PULH            ; Retornamos H
 
 
           RTI           
 
           RTI           
 
 
;**************************************************************
 
;**************************************************************
 
 
;*                Tabla en ROM                              *
 
;*                Tabla en ROM                              *
 
 
;**************************************************************
 
;**************************************************************
 
 
       ORG    ROMTable
 
       ORG    ROMTable
 
 
Tabla: DC.B    'H'
 
Tabla: DC.B    'H'
 
 
       DC.B    'O'
 
       DC.B    'O'
 
 
       DC.B    'L'
 
       DC.B    'L'
 
 
       DC.B    'A'
 
       DC.B    'A'
 
 
       DC.B    0
 
       DC.B    0
 
 
;**************************************************************
 
;**************************************************************
 
 
;*                Interrupt Vectors                          *
 
;*                Interrupt Vectors                          *
 
 
;**************************************************************
 
;**************************************************************
 
 
             ORG  $FFDE ; Posición en memoria donde se encuentra el vector de interrupción   
 
             ORG  $FFDE ; Posición en memoria donde se encuentra el vector de interrupción   
 
 
             DC.W  Transmite    ; Rutina de Transmisión
 
             DC.W  Transmite    ; Rutina de Transmisión
 
 
              
 
              
 
 
             ORG  $FFFA  
 
             ORG  $FFFA  
 
 
             DC.W  spurious          ;
 
             DC.W  spurious          ;
 
 
             DC.W  spurious          ; SWI
 
             DC.W  spurious          ; SWI
 
 
             DC.W  _Startup          ; Reset
 
             DC.W  _Startup          ; Reset
 
 
</syntaxhighlight>
 
</syntaxhighlight>

Revisión actual del 01:18 27 feb 2013

El siguiente es un ejemplo de Transmisión de una Tabla de caractares ASCII por puerto Serial para la tarjeta DEMOQE128.

;*******************************************************************
;Ejemplo de Transmision Serial de una tabla por interrupciones     *
;*******************************************************************

; Include derivative-specific definitions
            INCLUDE 'derivative.inc'
;
; export symbols
;
            XDEF _Startup
            ABSENTRY _Startup
ROMTable:      EQU     $3000  ;Lugar donde definimos la Tabla
;
; variable/data section
;
            ORG    RAMStart         ; Insert your data definition here
Apuntador: DS.B   1                 ; Apuntador al Byte que se va a mandar
;
; code section
;
            ORG    ROMStart
_Startup:
            LDHX   #RAMEnd+1        ; initialize the stack pointer
            TXS
            LDA #$00
            STA SCI1BDH   ;/* Tasa alta de transmisión deshabilitada (Baud high disabled)*/
            LDA #$1A      ;/* Pre-escaler ajustado: [SBR12:SBR0] = 4Mhz/(16*9600) =~ 26,04d= 1A (hex)*/ 
            STA SCI1BDL   ;/*Baud Rate = 9600bps*/
            LDA #$00
            STA SCI1C1    ;/*Transmisión y recepción normal de 8 bits sin paridad*/
            LDA #$AC
            STA SCI1C2    ;/*Habilita transmisor y receptor y habilita interrupciones*/
            LDHX #$0
            LDA #$0
            STA Apuntador ;Apuntador a la Tabla 
            CLI           ; enable interrupts
            
mainLoop:
            ; Insert your code here
            NOP
            feed_watchdog
            BRA    mainLoop
;**************************************************************
;* spurious - Spurious Interrupt Service Routine.             *
;*             (unwanted interrupt)                           *
;**************************************************************

spurious:                           ; placed here so that security value
            NOP                     ; does not change all the time.
            RTI

Transmite: PSHH           ; La interrupción no guarda H (la guardamos nosotros)
           LDA SCI1S1     ; Se baja la bandera de transmisión            
           CLRH
           LDX Apuntador       
           LDA Tabla,X
           CMP #$0        ;Comparamos si llegamos al final de la tabla
           BEQ FinTrans   ;Si es el final apagamos el SCI
                                 
           STA SCI1D      ;Mandamos el siguiente valor de la tabla
           
           LDA Apuntador  ;Incrementamos el Apuntador 
           INCA
           STA Apuntador
           PULH           ; Retornamos H
           RTI
           
FinTrans:  MOV #$00, SCI1C2 ; Deshabilitamos completamente el SCI
           PULH             ; Retornamos H
           RTI          
;**************************************************************
;*                 Tabla en ROM                               *
;**************************************************************
       ORG     ROMTable
Tabla: DC.B    'H'
       DC.B    'O'
       DC.B    'L'
       DC.B    'A'
       DC.B    0
;**************************************************************
;*                 Interrupt Vectors                          *
;**************************************************************
            ORG   $FFDE ; Posición en memoria donde se encuentra el vector de interrupción   
            DC.W  Transmite     ; Rutina de Transmisión
            
            ORG   $FFFA 
            DC.W  spurious          ;
            DC.W  spurious          ; SWI
            DC.W  _Startup          ; Reset

Contributors

Racuna