Configuré mi kit de relajación Infineon para una frecuencia máxima (120 MHz). Configuré mi SYSTick para una interrupción periódica de 10 ms. Para ahorrar energía, uso una instrucción de ensamblador WFI cada vez que mi procesador está inactivo. WFI (esperar interrupción) debe poner el procesador en modo de bajo consumo hasta que ocurra una interrupción. Entonces mi procesador debería activarse 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 tres interrupciones. ¿Cuál puede ser la razón posible por la que WFI no se despierta en cada interrupción?
No estoy familiarizado con estos dispositivos, pero en el manual del usuario se menciona que:
El estado de suspensión del sistema corresponde al estado de suspensión de la CPU. El estado se ingresa a través de la instrucción WFI o WFE de la CPU. En este estado, el reloj de la CPU se detiene. La fuente del reloj del sistema puede estar alterada. Los relojes de los periféricos están activados de acuerdo con el registro SLEEPCR.
Echando un vistazo a la descripción del registro SLEEPCR se muestra:
Field Bits Type Description
SYSSEL 0 rwh System Clock Selection Value
0 -> f OFI clock, 1 -> f PLL clock
como el valor de reinicio de dicho registro es 0, por defecto es el reloj. Que funciona a 36,5 MHz sin calibrar o 24 MHz calibrado. Tiene un rango de precisión bastante grande si no está calibrado (consulte la hoja de datos ) de al menos + -15%, junto con el hecho de que obtendrá algunos syssticks con 120 MHz nuevamente durante su ejecución, podría resultar ser aproximadamente 40MHz en promedio.
Solución (con suerte): establezca el bit SYSSEL en 1.
Rogelio Rowland
código central
Saqib Ahmed
Saqib Ahmed
Arsenal
Saqib Ahmed