SysTick Timer in ARM arch - Mazidi book part

-1

En el libro mazidi ARM arch. , usando el contador sysTick ... leí esta parte

  

El programa 5-1 carga el valor inicial al máximo y descarga el   valor actual del SysTick en los LED de PORTF a medida que se realiza la cuenta regresiva. En TI   ARM LaunchPad, no podemos ver los 16 bits más bajos ya que está contando   abajo cada 62.5 nseg (1 / 16MHz = 62.5). Toma los 16 bits inferiores 65536   x 62.5ns = 0.4096 ms para desbordar a los 8 bits superiores. Eso es el   razón por la que lo cambiamos a la derecha 20 veces.

y aquí está el código

#include "TM4C123GH6PM.h"
int main (void)
{
int x;
/* enable clock to GPIOF at clock gating control register */
SYSCTL->RCGCGPIO |= 0x20;
/* enable the GPIO pins for the LED (PF3, 2 1) as output */
GPIOF->DIR = 0x0E;
/* enable the GPIO pins for digital function */
GPIOF->DEN = 0x0E;
/* Configure SysTick */
SysTick->LOAD = 0xFFFFFF; /* reload reg. with max value */
SysTick->CTRL = 5; /* enable it, no interrupt, use system clock */
while (1)
{
x = SysTick->VAL; /* read current value of down counter */
x = x >> 20; /* shift right to slow down the rate */
GPIOF->DATA = x; /* dump it to the LEDs */
}
}
/* This function is called by the startup assembly code to perform system specific
initialization tasks. */
void SystemInit(void)
{
__disable_irq(); /* disable all IRQs */
/* Grant coprocessor access */
/* This is required since TM4C123G has a floating point coprocessor */
SCB->CPACR |= 0x00F00000;
}

Mi pregunta es sobre la parte dentro del while (1) Todavía no puedo ver cómo al cambiar a la derecha x = x >> 20; puede reducir la velocidad para que podamos ver los LED "? ¿Y por qué exactamente eligió cambiar 20 veces?

    
pregunta Ahmed Safwat

1 respuesta

0

Matemáticas elementales:

Suponiendo que SysTick se ejecuta a 16MHz, el x = x >> 20; es el mismo que x = x / 1048576 o aproximadamente "divide por un millón".

Así que terminas cambiando el valor del Puerto cada 1/16 de segundo, lo que produce un bonito LED parpadeante de 8Hz, o lo haría si realmente usaran el pin 0 como salida.

Dado que el primer LED parece estar en el pin 1 y ese pin ve exactamente la mitad de la frecuencia, parpadeará aproximadamente 4Hz. El segundo y el tercero parpadearán a 2 y 1 Hz respectivamente.

    
respondido por el Turbo J

Lea otras preguntas en las etiquetas