Configuración de interrupción del temporizador en ThreadX

0


Estamos intentando configurar ThreadX por primera vez y estamos tratando de entender todos los ajustes del temporizador. Aunque hay básicamente dos constantes que debemos establecer, no están muy claras para nosotros ...

Nuestro MCU es el STM32H7, y estamos usando CubeMX para generar el código inicial. Hemos configurado el reloj central a 400MHz, y la fuente de base de tiempo se configuró en Timer6 - Timer6 Interrupt Period = 1ms

La configuración del temporizador ThreadX se define en tx_initialize_low_level.s, y hay dos configuraciones:

  • SYSTEM_CLOCK: debe ser el mismo que el reloj central
  • SYSTICK_CYCLES: ???

En el manual no hay información clara sobre cuál debería ser esta configuración, solo que por defecto es de 10 ms.

¿Deberíamos configurar SYSTICK_CYCLES en 1 ms como la interrupción del temporizador? ¿Cuál es el propósito de la configuración? ¿Hay alguna diferencia entre esta configuración y la interrupción del temporizador de hardware? ¿Existen "mejores prácticas" para la configuración de temporización de ThreadX?

Gracias de antemano, Trucha

    
pregunta Trout

1 respuesta

0

Ok, así que después de investigar un poco más, creo que hemos descubierto la respuesta a esto:

  • Independientemente de la configuración de la Fuente de base de tiempo en CubeMX, HAL inicializa el temporizador SysTick y habilita su interrupción en el NVIC.
  • Después de que ThreadX se carga por primera vez, sobrescribe los valores en el NVIC para que se ajusten al valor de SYSTICK_CYCLES.

Esto significa que, básicamente, al usar la función HAL_Delay() , contará las interrupciones creadas con la fuente de base de tiempo. Al llamar a tx_thread_sleep(n) , la CPU se suspenderá durante n ciclos SYSTICK_CYCLES.

Respuesta corta, no hay una conexión inmediata entre SYSTICK_CYCLES y la CPU SysTick. Pero si desea utilizar la función HAL_Delay() , asegúrese de que esté configurada correctamente.

    
respondido por el Trout

Lea otras preguntas en las etiquetas