Timer/Counter0 y Timer/counter1
Presale Register PR
Presale Counter PC
Timer counter TC
Puede generar una interrupcin
PC++
La seal de que incrementa al timer es la que proviene del prescaler o prescale counter Un registro que incrementa o decrementa en base a una seal de clock no
PC=PR?
Si
El prescale counter se resetea cada vez que iguala al prescale register y enva la seal para incrementar el TC
TC++ PC=0
PIC de Microchip Recordando cmo trabajamos en PIC de Microchip
Modo Timer/counter Cargar TMR0 Cargar Prescaler Realizar la rutina de interrupcin Decremento Prescaler Bajar bandera de interrupcin Prescaler=0? Return
En la interrupcin
main
Cargar TMR0 a su valor original
Decremento TMR0
TMR0=0?
Disparo interrupcin
PIC de Microchip
ARM LPC2148
Fijar Pclk (PLL+Divisor APV)
Timer/counter CTCR Habilitar timer -reset timer counter/prescale counter TCR Counter
Match/Captura MCR-CCR
PCLK es la seal de clock que reciben los perifricos y puede o no ser la misma seal de clock que recibe el core.(CCLK) Tenemos la capacidad de modificar el clock del core (CCLK) y el PCLK (clock de los perifricos) de forma independiente para cuestiones de ahorro de energa.
Captura
Pin de captura (entrada) Pinsel
Configuracin de la captura (flanco y habilitacin de interrupcin) CCR
Puedo hacer una captura sin generar interrupciones
CR0
Puedo usar funcionalidades del mdulo Timer sin necesidad de generar una interrupcin
CR1
CR2
PIN Registro CAPX.0 CR0 CAPX.1 CR1 CAPX.2 CR2 CAPX.3 CR3
CR3
Timer Counter (TC)
El modo captura consiste en tomar una fotografa del TC y almacenarla en los registros destinados a tal fin. Al hacer una captura del TC puedo o no generar una interrupcin
Aplicacin prctica Este problema puede resolverse de forma muy simple utilizando las entradas de captura. El pndulo se desplazar de un extremo a otro dentro de ciertos lmites. Podemos colocar sensores pticos en cada uno de esos extremos del trayecto, de modo que cuando la masa del pndulo corte el haz de luz este excite la entrada de captura y se capture el valor del TC en ese momento.
Si bien se dispararn ambas capturas, slo la segunda generar una interrupcin. Momento en el cual se calcular el de TC y su correspondiente intervalo de tiempo.
Conexin
Podemos conectar los sensores, por ejemplo a los pines P0.30 y P0.29 para generar capturas diferentes
Por lo tanto tendremos que generar un flanco de subida o bajada, de acuerdo a la configuracin que nos convenga, en el pin P0.30 y P0.29 para que el valor del TC se almacene en CR0 y CR3 respectivamente. Luego, ya con los datos disponibles estaremos en condiciones de hacer los clculos necesarios.
Pin P0.30 CAP0.0 y Pin P0.29 CAP0.3
Match (Comparacin)
Los registros de match se comparan constantemente con el Timer counter (TC). Cada vez que el TC iguala alguno de los registros de Match me permite realizar acciones que no se limitan solo a generar interrupciones
Timer Counter (TC) Disparar una interrupcin MATX.0-MATX.3 Pin=0 Pin=1 Pin= Toggle
=
MR0 MR1
Manipular un Pin Resetear TC Detener el TC y PC
MR2
MR3
Las posibles acciones descritas arriba no son excluyentes. Esto me permite, por ejemplo, Disparar una interrupcin, detener el TC y PC, resetear el TC y manipular un pin de salida.
Pines para captura y match
Pines captura Timer0
Pines Match Timer0
Pines captura Timer1 Pines Match Timer1
Ms de un pin puede desempear una misma funcin CAP0.0
Gestin de interrupciones
Dentro del mdulo Timer tengo 8 fuentes de interrupcin, 4 de captura y 4 de comparacin.
Sin embargo en el bloque de control de interrupciones VIC solo figuran TIMER0 y Timer1 como fuentes de interrupcin Por lo tanto tengo 8 fuentes de interrupcin con una nica salida hacia el VIC de esto se deduce que tendremos que hacer una gestin en la rutina de interrupcin.
Gestin de interrupciones Dentro del mdulo Timer tengo 8 fuentes de interrupcin, 4 de captura y 4 de comparacin. Rutina de servicio de interrupcin (ISR)
si Utilizo una sola fuente de interrupcin del mdulo Timer? no
Realizo la rutina Rutina_de_interrupcin () { }
Pregunto quin interrumpe IR
Realizo la rutina Rutina_de_interrupcin () { }
Bajo las banderas (IR) Limpiamos el registro VICVectAddr (IRQ/no_vectorizadas)
Diagrama Timer/Counter0-1 LPC2148
Generacin de eventos de forma peridica
Nos dedicaremos ahora a generar un Evento de forma peridica. Para lo cual nos valdremos del mdulo timer y particularmente haremos uso de los registros de match. Generaremos una interrupcin y reseteamos el TC.
Configurar mdulo Timer/Counter como Timer (CTCR) Cargar Prescale Register (PR) Cargamos Registro de Match0 (MR0) Configuramos el mdulo Timer/Counter para que interrumpa y resetee TC (MCR) Cargamos La direccin de la interrupcin de ser necesario (VICVectAddrX) Asignamos la prioridad de la interrupcin (VICVectCntlX) Habilitamos la interrupcin (VICIntEnable) Habilitamos el mdulo Timer/Counter para que comience a contar (TCR)
Implementacin C para Keil
Implementacin C para Keil