Necesita ayuda para localizar la fuente de un retraso entre las interrupciones del temporizador en SAM MCU

1

Tengo un proyecto que genera una serie de valores para DAC con un intervalo de tiempo preciso. El problema es que a veces hay una demora más larga de lo esperado entre la interrupción del temporizador del sistema en la que se actualizan los valores DAC. Esto lleva a jitter en la salida. Necesito ayuda para averiguar qué está causando este retraso. El único otro código de usuario que se ejecuta que el temporizador es el manejo de los paquetes USB entrantes que contienen los datos que se van a generar.

Cosas que he probado:

  • Disminuyendo la prioridad de cada interrupción única que no sea el temporizador
  • Deshabilitar cualquier tipo de modo de suspensión que pueda requerir tiempo para despertarse de
  • Disminuir el tamaño del paquete USB para que sea más rápido de procesar (aunque, debido a que sus interrupciones tienen una prioridad más baja, no debería interferir con el temporizador)

Pero nada ha funcionado hasta ahora.

El código completo está aquí: enlace

El MCU es un Atmel ATSAM4S2B (32-bit arm cortex-m4)

¿Alguna idea?

EDITAR: Encontré el problema, fueron las prioridades de interrupción. Establecí las prioridades en el arranque, sin embargo, la función SysTick_Config () de la biblioteca CMSIS en realidad restablece la prioridad para el systick cada vez que se llama, por lo que tuve que corregir manualmente la prioridad cada vez que llamé a esto.

    
pregunta GrixM

1 respuesta

3

Encontré el problema, eran las prioridades de interrupción después de todo. Establecí las prioridades en el arranque, sin embargo, la función SysTick_Config () de la biblioteca CMSIS realmente restablece la prioridad para el systick cada vez que se llama, así que tuve que corregir manualmente la prioridad cada vez que llamé esto.

    
respondido por el GrixM

Lea otras preguntas en las etiquetas