Ejemplo Timer TPM por encuesta
De Wikitronica
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