entrada circular DMA

0

Quiero copiar el mismo valor, por ejemplo, 0.0f , en un bloque grande de SDRAM a través de DMA. Por ejemplo, STM Discovery 429 usa DMA2D para el borrado rápido de la pantalla con el uint32_t color especificado. Quiero hacer lo mismo para DMA. Pero no veo la API para hacerlo con la biblioteca HAL.

Cuando llamo a HAL_DMA_Start_IT(&hdma, srcAddress, dstAddress, dataLength) , quiero especificar que mi srcAddress (no destino) es un búfer circular con longitud 1. Por lo tanto, siempre transmitirá el mismo valor a través de una gran parte de SDRAM .

¿Cómo puedo hacerlo?

Placa de programación: STM32F429I DISCOVERY

    
pregunta dizcza

1 respuesta

2

Una forma de hacerlo es escribir el valor que desea en la primera ubicación del búfer de destino, luego realizar la operación DMA con la dirección de origen establecida al inicio del búfer de destino, la dirección de destino establecida al inicio del búfer de destino más uno y la longitud del búfer establecida en la longitud del búfer de destino menos uno. La operación DMA luego copiará el valor de la primera ubicación a la segunda, luego de la segunda a la tercera y así sucesivamente al final del búfer.

Es un viejo truco de los días de la programación de Z80 en ensamblador con la instrucción LDIR ...

    
respondido por el Finbarr

Lea otras preguntas en las etiquetas