Ejemplo Timer TPM por encuesta

De Wikitronica
Saltar a: navegación, buscar
Este artículo está incompleto. Necesita trabajo adicional. Revisar la discusión.
;*******************************************************************
;* Ejemplo de manejo del Timer TPM utilizando encuesta.
;* Se configura el timer para que desborde el contador cada 2s
;* Cada vez que se reinicia el contador se niegan los LEDS del DEMOQE
;*******************************************************************

; Include derivative-specific definitions
            INCLUDE 'derivative.inc'
;
; export symbols
;
            XDEF _Startup
            ABSENTRY _Startup
;
; variable/data section
;
            ORG    RAMStart         ; Insert your data definition here
ExampleVar: DS.B   1
;
; code section
;
            ORG    ROMStart
_Startup:
            LDHX   #RAMEnd+1        ; initialize the stack pointer
            TXS                 
            ;Configuracion de los pines del Demoqe128
            BSR Configurar_GPIO                          
            ;Configuramos el TPM
            BSR Configurar_TPM 
            CLI                     ; enable interrupts

mainLoop:       
                       
            ;Comparamos el contador (16bits)
            ;Verificamos si llego al valor de interes
            LDHX #$FFFF
            CPHX TPM1CNT
            BNE Fin
			;------------------------------------------			
            ;Negamos los pines  (Leds Logica negada)          
            LDA PTCD
            COMA
			;------------------------------------------
			;Mascara de bits para pines inferiores  PTC
            AND #%00111111              
            STA PTCD            
            LDA PTED
            COMA
			;------------------------------------------
			;Mascara de bits para pines superiores PTE
            AND #%11000000   
            STA PTED
			;------------------------------------------			
            ;Reiniciamos contador
            CLRA
            STA TPM1CNT           
Fin:
            NOP
            feed_watchdog
            BRA    mainLoop            
            
;**************************************************************
;                Subrutinas de Configuracion                  *
;**************************************************************
Configurar_GPIO:
			; Configuración de los leds del DEMOQE como salida
			; Los Leds tienen lógica negada
			;Parte inferior de Puerto C (0:5)
            LDA #$3F
            STA PTCDD
			STA PTCD
			;------------------------------------------
			;Parte superior de Puerto D (6:7)
            LDA #$C0
            STA PTEDD   
			STA PTED		 
            RTS
            
Configurar_TPM:
            ;Configuracion del timer TPM1 
            ;(Contador SIN interrupciones al hacer overflow)
            LDA #%00001111
            ; TPM1SC: TOF=0,TOIE=0,CPWMS=0,CLKSB=0,CLKSA=1,PS2=1,PS1=1,PS0=1 
            ;Probar diferentes valores de PS2,PS1,PS0
            STA TPM1SC
			;------------------------------------------
            ;Valor maximo de contador (Probar diferentes valores)
            LDHX    #$FFFF
            STHX    TPM1MOD 
            RTS
                        
            
;**************************************************************
;* 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   $FFFA
            DC.W  spurious          ;
            DC.W  spurious          ; SWI
            DC.W  _Startup          ; Reset

Contributors

JCaceres, Racuna