Ejemplo Timer TPM por interrupciones
De Wikitronica
;*******************************************************************
;* Ejemplo de manejo del Timer TPM utilizando interrupciones. *
;* Se configura el timer para que interrumpa cuando el contador *
;* tiene el mismo valor que el registro modulo. *
;* Cada vez que se interrumpe se niegan los Leds *
;*******************************************************************
; 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
;------------------------------------------
;Configuracion del timer TPM1
BSR Configurar_TPM
CLI ; enable interrupts
mainLoop:
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
;Valor maximo de conteo (Probar diferentes valores)
LDHX #$FFFF
STHX TPM1MOD
;(Contador SIN interrupciones al hacer overflow)
LDA #%01001111
; TPM1SC: TOF=0,TOIE=1,CPWMS=0,CLKSB=0,CLKSA=0,PS2=1,PS1=1,PS0=1
;Probar diferentes valores de PS2,PS1,PS0
STA TPM1SC
RTS
;**************************************************************
;* . Rutinas de atencion a las interrupciones *
*
;**************************************************************
Interrupcion_TPM1:
;Limpiamos las banderas de interrupcion
;Primero se lee el regristro TPMxSC
LDA TPM1SC
;Luego se baja el bit 7 (TOF) escribiendo 0
AND #%01111111
STA TPM1SC
;------------------------------------------
;Negamos los pines de los puertos
;Los leds del demoqe son los primeros 6 de PTC
; junto a los 2 ultimos de PTE
;Los tratamos por separado
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
;Regresamos de la interrupcion
RTI
;**************************************************************
;* 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 Vtpm1ovf
DC.W Interrupcion_TPM1
ORG $FFFA
DC.W spurious ;
DC.W spurious ; SWI
DC.W _Startup ; Reset