instrucción WFI ralentizando la interrupción SYStick

1

He configurado mi kit de relajación Infineon para la frecuencia máxima (120 MHz). He configurado mi SYSTick para una interrupción periódica de 10 ms. Para ahorrar energía, uso una instrucción de ensamblador WFI cuando mi procesador está inactivo. WFI (esperar la interrupción) debe poner el procesador en modo de bajo consumo hasta que se produzca una interrupción. Así que mi procesador debería activarse después de cada 10 ms. Pero de alguna manera, esta instrucción WFI redujo mi frecuencia de interrupción a casi 3 veces y se activa cada tercera interrupción. ¿Cuál puede ser la razón para que WFI no se despierte en cada interrupción?

    
pregunta Saqib Ahmed

1 respuesta

3

No estoy familiarizado con estos dispositivos, pero en usuario manual se menciona que:

  

El estado de suspensión del sistema corresponde al estado de suspensión del   UPC. El estado se ingresa a través de WFI o WFE instrucción de la CPU. En   este estado se detiene el reloj a la CPU. La fuente del sistema   el reloj puede ser modificado. Los relojes de periféricos están sincronizados de acuerdo con la   Registro SLEEPCR.

Echa un vistazo a la registro SLEEPCR muestra la descripción :

Field  Bits Type Description 
SYSSEL 0    rwh  System Clock Selection Value
                 0 -> f OFI clock, 1 -> f PLL clock

como el valor de restablecimiento de dicho registro es 0, el valor predeterminado es \ $ f_ {OFI} \ $ clock. Que corre a 36.5 MHz sin calibrar o 24 MHz calibrado. Tiene un rango de precisión bastante grande si no está calibrado (consulte ) de al menos + -15%, junto con el hecho de que obtendrá algunos systicks con 120 MHz nuevamente durante su ejecución, puede que se convierta en aproximadamente 40MHz en promedio.

Solución (con suerte): establezca el bit SYSSEL en 1.

    

Lea otras preguntas en las etiquetas