Timers en Arduino Due - SAM
Publicado: 22 Feb 2018, 17:00
Mientras implementaba la compatibilidad de la librería uTimerLib con el microcontrolador SAM (Arduino Due) me he dado cuenta que existe poca información sobre como hacerlo en Internet. Y, debido a que uTimerLib usa un timer definido, he querido explicar cómo implementar timers manualmente en este microcontrolador.
Este microcontrolador posee 3 timers con 3 canales de 32 bits cada uno por cada timer. Esto significa que podemos usarlos casi como 9 timers de 32 bits, pero en cada grupo de 3 el prescaler ha de ser el mismo.
Prescalers
Cada Timer tiene 4 opciones de prescaler: 2, 8, 32 y 128.
Para referirnos a ellos usaremos las siguientes definiciones: TC_CMR_TCCLKS_TIMER_CLOCK1, TC_CMR_TCCLKS_TIMER_CLOCK2, TC_CMR_TCCLKS_TIMER_CLOCK3 y TC_CMR_TCCLKS_TIMER_CLOCK4 respectivamente.
Si usamos como ejemplo un Arduino Due, que funciona a 84MHz, los ticks por segundo quedarían:
Timers
Los 3*3 timers se definen como:
Recuerda: ¡32 bits!
Acostumbrados a timers de 8 o 16 bits, recuerda que estos timers son de 32 bits (unsigned long int).
(Continuará en breve)
Este microcontrolador posee 3 timers con 3 canales de 32 bits cada uno por cada timer. Esto significa que podemos usarlos casi como 9 timers de 32 bits, pero en cada grupo de 3 el prescaler ha de ser el mismo.
Prescalers
Cada Timer tiene 4 opciones de prescaler: 2, 8, 32 y 128.
Para referirnos a ellos usaremos las siguientes definiciones: TC_CMR_TCCLKS_TIMER_CLOCK1, TC_CMR_TCCLKS_TIMER_CLOCK2, TC_CMR_TCCLKS_TIMER_CLOCK3 y TC_CMR_TCCLKS_TIMER_CLOCK4 respectivamente.
Si usamos como ejemplo un Arduino Due, que funciona a 84MHz, los ticks por segundo quedarían:
Código: Seleccionar todo
Base DEFINE Prescaler Frecuencia Intervalo base Intervalo overflow
84MHz TC_CMR_TCCLKS_TIMER_CLOCK1 2 42MHz 0,023809524us 102261126,913327104us, 102,261126913327104s
84MHz TC_CMR_TCCLKS_TIMER_CLOCK2 8 10.5MHz 0,095238095us 409044503,35834112us, 409,04450335834112s
84MHz TC_CMR_TCCLKS_TIMER_CLOCK3 32 2.625MHz 0,380952381us 1636178017,523809524us, 1636,178017523809524s
84MHz TC_CMR_TCCLKS_TIMER_CLOCK4 128 656.25KHz 1,523809524us 6544712070,913327104us, 6544,712070913327104s
Timers
Los 3*3 timers se definen como:
Código: Seleccionar todo
Nombre Timer Canal Pines disponibles
TC0 0 0 2, 13
TC1 0 1 60, 61
TC2 0 2 58
TC3 1 0 -
TC4 1 1 -
TC5 1 2 -
TC6 2 0 4, 5
TC7 2 1 3, 10
TC8 2 2 11, 12
Acostumbrados a timers de 8 o 16 bits, recuerda que estos timers son de 32 bits (unsigned long int).
(Continuará en breve)