¿El sondeo interrumpiendo las lecturas de mi códec y las grabaciones USB?

0

Otra pregunta de USB aquí ... igual que la última vez; Audio USB en un microcontrolador ARM. Tengo ambos puntos finales (entrada y salida) como transferencias isócronas / asíncronas. Además, tengo interrupciones del Contador de temporizador (TC) para sondear los procesos de UI en mi placa.

Para resumir, cuando tengo un bypass limpio (no hay USB involucrado), no tengo interrupciones; señal limpia ¡¡¡Genial!!! No hay problemas extraños de sincronización con el bus / codec I2S; No hay bichos raros, nada. Sin embargo, cuando USB Audio está habilitado, las cosas se ponen extrañas. En mi pregunta anterior sobre stackexchange, no tenía ningún otro proceso de IU en marcha (verificando si se presionaba un botón), por lo que el audio USB estaba bastante limpio.

Cómo leí del códec a USB:

(1) USB Input enabled, start USB writes
(2) Write an empty buffer to USB endpoint
(3) Send USB data buffer
(4) Wait for USB write callback
(5) Completed USB write; do the following:
    (a) read next buffer from codec (I2S-DMA) and load that into USB buffers
    (b) Send next available USB buffer to endpoint
    (c) Repeat Step 4-5

Formas en las que he intentado sondear procesos de IU (pulsación de botón):

(1) USB start of frame interrupts
(2) Timer Counter interrupts 
(3) Main while loop polling

Todas estas fallas causan errores en mis lecturas de audio / códec USB. Solo puedo suponer que cuando ocurre una interrupción, la lectura de mi códec se interrumpe y el mcu deja caer algunas muestras. Sin embargo, no estoy seguro de por qué un sondeo regular está causando un problema de falla. En términos de prioridades de interrupción, mis interrupciones I2S-DMA y USB son las más altas mientras que las interrupciones TC son muy muy bajas (como el número más bajo).

La pregunta (si aún no lo has adivinado) es: ¿Cómo puedo hacer que mi mcu lea / escriba felizmente el audio continuo de mi códec a USB mientras realizo una encuesta para estos otros procesos de IU? solo puedo imaginar que tendré que hacer más que solo presionar botones en el futuro, así que creo que esto podría ser aplicable a otras aplicaciones periféricas mcu.

Lo siento por adelantado, esta es una pregunta fácil o la respuesta es realmente obvia; Todavía soy relativamente "nuevo" para los microcontroladores y USB. Ahora puedo entender fácilmente las cosas en el dominio del software, pero cuando se trata de hardware Y software ... es una historia completamente diferente para mí. Cualquier artículo que pueda leer sin molestar a nadie también sería apreciado. Gracias!

EDITAR - Respuesta: Así que sé que había un código aquí antes, pero al publicarlo ... me di cuenta de mi error. En mi código de procesamiento de botones, también tenía lecturas / escrituras realizadas en el flash de mcu. Cuando quité esas partes del código, ya no escuché fallos. Ugh! Lo siento por molestar a todos, tal error de usuario en mi final. Las lecturas / escrituras a flash estaban justo allí para guardar ciertas configuraciones en caso de que el usuario desconectara la alimentación accidentalmente.

    
pregunta yun.cloud

0 respuestas

Lea otras preguntas en las etiquetas