DMA en Cortex M4 para una transferencia continua de UART

1

Nunca he usado un DMA antes y estoy leyendo la hoja de datos del Atmel SAM 4E Esta pregunta no necesariamente tiene que estar relacionada con este dispositivo, se puede aplicar a cualquier dispositivo que admita DMA si todos funcionan esencialmente igual.

¿Pero cuántos datos puedo transferir?

Si el transmisor y el receptor tienen un FIFO de 4 profundos, entonces puedo transmitir 4 bytes de forma segura, sin tener que preocuparme demasiado por la pérdida de datos. Entonces tendré que esperar hasta que pueda obtener alguna indicación de que el fifo está claro y listo para aceptar más datos.

Esto luego me lleva a usar UART controlado por flujo.

Si configuro el lado de transmisión y el lado de recepción para admitir el control de flujo, ¿ el transmisor pausará la transmisión cuando vea que el CTS no está configurado desde el receptor y se reanudará cuando el CTS esté configurado?

Si esto es cierto, entonces asumo que es posible enviar tantos datos como quiera sin tener que leer directamente los registros de recepción de UART y enviar tantos datos como quiera.

    
pregunta efox29

1 respuesta

1

Generalmente, DMA y FIFO son dos soluciones independientes para abordar el mismo problema: lidiar con los datos transmitidos de forma asíncrona (almacenarlos en alguna memoria) hasta que la CPU tenga tiempo para procesarlos. FIFO está limitado por su tamaño, por lo que si se escriben algunos datos mientras no haya suficiente espacio, se perdería algo. Por otro lado, DMA es capaz de lidiar con flujos limitados solo por su tamaño de contador (y el tamaño de la memoria de origen / destino, por supuesto). La transmisión de DMA para UART (y en general) puede configurarse para ser activada por interrupciones específicas. Por ejemplo, cuando el conteo FIFO está alcanzando algún nivel. Su segunda pregunta no está directamente relacionada con DMA / FIFO. Las señales de flujo de control solo afectan al transmisor. Si está configurado para esperar CTS antes de enviar algo, esperará. Incluso si está configurado con DMA, a menos que el control de flujo esté implementado en el software, por supuesto.

    
respondido por el Eugene Sh.

Lea otras preguntas en las etiquetas