Tengo un proyecto que genera una serie de valores para DAC con un intervalo de tiempo preciso. El problema es que a veces hay un retraso más largo de lo esperado entre la interrupción del temporizador del sistema en la que se actualizan los valores DAC. Esto conduce a fluctuaciones en la salida. Necesito ayuda para averiguar qué está causando este retraso. El único otro código de usuario que se ejecuta además del temporizador es el manejo de los paquetes USB entrantes que contienen los datos que se van a enviar.
Cosas que he probado:
Pero nada ha funcionado hasta ahora.
El código completo está aquí: https://github.com/Grix/helios_dac/blob/master/firmware/AtmelStudio_helios/lasdac_mainfirmware/src/main.c
El MCU es un Atmel ATSAM4S2B (cortex-m4 de brazo de 32 bits)
¿Algunas ideas?
EDITAR: Encontré el problema, eran 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 del sysstick cada vez que se llama, por lo que tuve que corregir manualmente la prioridad cada vez que llamé a esto.
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 en realidad restablece la prioridad del sysstick cada vez que se llama, por lo que tuve que corregir manualmente la prioridad cada vez que llamé a esto.
krambo
krambo
Sam Gibson