Actualizado el 21 de Marzo del 2018 (Publicado el 9 de Noviembre del 2017)
746 visualizaciones desde el 9 de Noviembre del 2017
289,3 KB
38 paginas
Creado hace 15a (15/07/2009)
TIMER INTERFACE
MODULE
(TIM)
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
TIMER INTERFACE MODULE
Clock
Generation
Module
(CGM)
Serial
Communications
Interface
(SCI)
System
Integration
Module
(SIM)
LVI
IRQ
COP
BREAK
68HC08
CPU
RESET
Timer
Interface
Module
(TIM)
Direct
Memory
Access
Module
(DMA)
Internal Bus (IBUS)
Serial
Peripheral
Interface
(SPI)
Random
Access
Memory
(RAM)
Electronically
Programmable
ROM
Monitor
ROM
Cuatro canales programables
•
Input captures
• Output compares
– x flanco ascendente, descendente, o cualquier flanco de disparo
– Set, clear, o “toggle action” como nivel de salida
• Pulse width modulation (PWM) ( Modulación por Ancho de Pulso )
– Generación de señal “Buffereada o no Buffereada”
Entrada de Clock programable
• Clock del sistema con “prescaler” de 7 pasos.
Modo de operación “Free-running’ o “ Modulo up-count”
Acción “ togle” sobre cualquier pin de canal en “Overflow ”
Stop y reset del TIM Counter !!!!!
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Diagrama en Bloques del Clock de
refencia del TIM
Internal
BusClock
PRESCALER
TSTOP
TRST
D
a
t
a
B
u
s
16-Bit Counter
16-Bit Comparator
TMODH:TMODL
16-Bit Latch
PRESCALER SELECT
PS2
PS1
PS0
TOF
TOE
INT
Logic
A la logica del canal
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
El módulo TIM como timer simple solamente…..
Como se puede observar en el cuadro anterior, el módulo de timer del HC908, toma como referencia
para su temporización el Clock interno del Bus (FBUS), que obviamente esta relacionado con la
frecuencia del Xtal externo (Fxtal / 4) o bién con la frecuencia del oscilador interno en el caso que el
dispositívo tenga la opción de oscilador interno o PLL.
El módulo posee un “prescaler” que divide “N” veces la frecuencia de referencia que entra al
mismo, para de esta forma obtener mayor flexibilidad en los rangos de demoras a obtener. Este
prescaler puede ser programado por medio de los bits PS2, PS1, PS0 en el Timer Status and Control
Register (TSC).
Luego que el clock há sido dividido en el prescaler, ingresa a un contador de 16 bits de longitud.
Este contador es del tipo “free-running” (de cuenta libre) con rango desde $0000 a $FFFF. Existe un
comparador de 16 bits vinculado al contador y a un registro, también de 16 bits, denominado
“TMOD” (Timer Modulo register) que está dividido en parte “alta” (TMODH) y parte “baja” (TMODL).
Durante el funcionamiento del timer, el contador es comparado permanentemente con el registro
TMOD (TMODH , TMODL), por medio del comparador asociado a ellos, cuando la cuenta del mismo
coincide con el valor almacenado en dicho registro, se produce “desborde” del timer o “Timer
Overflow” , provocando las siguientes acciones:
- Se genera un Señal de “Timer Overflow Flag” (TOF), que nos indicará la condición de
overflow del contador/comparador.
- Se genera un pedido de interrupción (Timer Overflow Interrupt) si esta se encuentra
habilitada y se atiende la misma saltando a la dirección indicada por el vector
respectivo (TIMx Overflow Vector).
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
El módulo TIM como timer simple solamente…… continua.
- Se produce un RESET automático del contador “Free – Running” forzandolo a $0000.
Esta configuración permite operar el timer en modo “Free – Running”, o en modo “Modulo Up Counter”,
según el valor del registro TMOD.
Si el registro TMOD (TMODH y TMODL) tiene un valor igual a $FFFF, el timer funcionará en modo free-
running, ya que al llegar a $FFFF , recien allí, el comparador emitirá una señal de RESET del contador y
de disparo del flag TOF y de la interrupción, si estubiera habilitada.
Si el registro TMOD, tiene un valor menor a $FFFF, entonces el timer funcionará como “Módulo Up
Counter”, ya que al llegar al valor establecido en TMOD, provocará el mismo efecto que en el modo
“free – running”, lo que garantiza la generación de una temporización (delay) flexible y programable, a
diferencia del tipico modo “free – running” del timer de los HC705.
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Timer Clock Reference
Los 2 canales de timer reciben sus clock reference desde:
• Free running counter
• Modulo up counter
Consisten de :
• Timer counter “ free running ” de solo lectura de 16 bits
• Modulo Register de 16 bit de lectura/escritura por software
• Comparador de 16 bits (timer counter vs. modulo register)
– Cuando el contador concuerda con el modulo register..
• Se setea el Timer Overflow Flag (TOF)
• Resetea el contador a $0000
• Los contadores comienzan las cuentas nuevamente !!!!
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Timer Status and Control Register (TSC)
TSC
READ:
WRITE:
TOF
0
TOE
TSTOP
0
TRST
0
PS2 PS1 PS0
RESET:
0
0
1
0
0
0
0
0
Timer Status and Control Register (TSC)
• Clock select and prescaler bits (PS2-PS0)
• Timer Overflow Flag (TOF)
Seteado cuando el timer counter de 16 bits se resetea a $0000
Limpiado por lectura del TSC y luego escritura de un “0” en el TOF
• Timer Stop (TSTOP)
– Detiene el conteo del timer
1 = Timer stopped
0 = Timer active
– Si ocurre un “overflow ” durante la operación de limpieza, la
• Timer Reset (TRST)
escritura no tiene efecto.
1 = Timer ha sido reseteado
0 = Timer no ha sido reseteado todavia
• Timer Overflow interrupt Enable (TOE)
habilita interrupciones por “timer overflow “
1 = Habilita interrupción
0 = Deshabilita interrupción
– Resetea el timer counter y el prescaler
– Limpieza automática despues del counter reset
1 = Reset contador y prescaler
0 = No tiene efecto
NOTA: Seteando ambos TSTOP y TRST
detiene el contador en $0000 !!!!!
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Timer Prescale Select Bits (PS0-2)
PS2
0
0
0
0
1
1
1
1
PS1
0
0
1
1
0
0
1
1
PS0
0
1
0
1
0
1
0
1
TIM Clock Source
Internal Bus Clock ÷ 1
Internal Bus Clock ÷ 2
Internal Bus Clock ÷ 4
Internal Bus Clock ÷ 8
Internal Bus Clock ÷ 16
Internal Bus Clock ÷ 32
Internal Bus Clock ÷ 64
no disponible !!
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Timer Counter Register
READ: BIT 15 BIT 14 BIT 13 BIT 12 BIT 11 BIT 10 B IT 9 BIT 8
TCNTH
TCNTL
WRITE:
RESET:
0
0
WRITE:
RESET:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
READ:
BIT 7 BIT 6
B IT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0
Timer Counter Register (TCNTH, TCNTL)
• Contador de solo lectura “free running” de 16 bits
• Se lee el byte alto manteniendo el byte bajo “latcheado” hasta la lectura
Timer Modulo Register
TMODH
BIT 15 BIT 14 BIT 13 BIT 12 BIT 11 BIT 10 BIT 9 BIT 8
READ:
WRITE:
RESET:
1
1
1
1
1
1
1
1
BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0
TMODL
READ:
WRITE:
BIT 7
BIT 6
RESET:
1
1
1
1
1
1
1
1
Timer Modulo Register (TMODH, TMODL)
• El Contenido se compara con TCNTH, TCNTL para determinar el tiempo de reset
• Escribiendo el TMODH deshabilita TOF y overflow interrupts, hasta escribir el TMODL
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Resolución y Rango del Timer
La resolución de Timer está determinada por el Clock del sistema y el valor del prescaler
Resolución (sec) = 1 ÷ (Bus Clock ÷ prescaler)
El rango del Timer depende del valor en TMODH y TMODL
Rango = 0 .. Resolución x valor de TMOD
Max Rango = 0 .. Resolución x 65,535
Ejemplo:
• Calculamos la resolución y el rango dado por un Bus clock de 4 Mhz, y un valor de
prescaler de 4 (010), y TMOD = $00FF
Resolución = 1 ÷ ( 4 MHz ÷ 4 ) = 1 ÷ 1 MHz = 1µs
Rango = 1µs x $00FF = 1µs x 255 = 255 µs
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Diagrama en Bloques del Timer del Canal
desde TOF
D
a
t
a
B
u
s
CHANNEL X
16-bit Comparator
TCHxH : TCHxL
16-bit Latch
ELSxB
ELSxA
CHxF
X
MSxA
CHxMAX
TOVx
CHxIE
PTx/
TCHx
PTx
Logic
Int
Logic
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Función “Input Capture”
• Provee un mecanismo para capturar el tiempo en el cuál
ocurre un evento externo
Flancos Ascendentes
Flancos Descendentes
Cualquier Flanco
ICx
Edge Select
& Detect
Latch
Mascara de Interrupción local opcional
(habilitada por medio del software)
TCNTH:TCNTHL
Compare/Capture Unit
16-bit Free Running Counter
16-bit Input Capture Latch
TCHxH:TCHxL
CHxF
El Status Flag se setea
durante la captura
CHxIE
Interrupt request
to CPU08
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Ejemplo de Input Capture
- Medición del PERIODO de un pulso-
T2
T1
1. Configurar el canal del timer para “input capture” , “rising edge”
2. Tiempo de Captura T1
3. Tiempo de Captura T2
4. Periodo = T2 - T1
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Ejemplo de Input Capture
- Medición del ANCHO de un pulso-
T2
T1
1. Configurar el canal del timer para “input capture” , “ANY edge”
2. Tiempo de Captura T1
3. Tiempo de Captura T2
4. Periodo = T2 - T1
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Función “Output
Comentarios de: HC908 FLASH, TIMER INTERFACE MODULE (TIM) (0)
No hay comentarios