Forma correcta de esperar N ciclos en ARM Cortex-M4

4

Después de habilitar un reloj para un puerto determinado, debe esperar 4 ciclos para que el reloj termine de inicializarse. ¿Cómo se puede esperar por N ciclos de la manera correcta?

En mi código utilicé esto:

__asm("nop");
__asm("nop");
__asm("nop");
__asm("nop");

Después de lo cual uKeil IDE parece que deja de quejarse.

    
pregunta Daveel

1 respuesta

2

Este es un método de aquí :

 volatile unsigned long delay;

 SYSCTL_RCGC2_R |= 0x00000010;   // 1) activate clock for Port E
 delay = SYSCTL_RCGC2_R;         //    allow time for clock to stabilize

También puedes configurar el reloj (s) e ir a hacer otra cosa durante unos ciclos (inicializar algunas cosas), pero ese es un error potencial en el futuro.

Editar: La línea ficticia se compila en:

  400286:   681b        ldr r3, [r3, #0]
  400288:   9301        str r3, [sp, #4]

En el Cortex M4

  

ldr es 2 ciclos

     

str es 2 ciclos

Consulte aquí para los recuentos del ciclo M4 .

La palabra clave volatile evita que las instrucciones ldr y str se combinen, tal como lo entiendo.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas