STM32: evitando colisiones de DMA y CPU

5

La sección 13.4 del Manual de referencia de STM32 (para mi placa STM32F303RE) dice:

  

El controlador DMA realiza una transferencia de memoria directa al compartir el bus del sistema con el   Cortex-M4® F core. La solicitud DMA puede detener el acceso de la CPU al bus del sistema para algunos   ciclos de bus, cuando la CPU y DMA se dirigen al mismo destino (memoria o   periférico).

Mi pregunta es: ¿cuándo son exactamente 2 destinos de memoria los mismos en este contexto? Es solo cuando 2 se superponen realmente (por ejemplo, la CPU accede a 4 bytes @ A con una instrucción, accediendo a A,A+1,A+2,A+3 y DMA 1 byte @ A+2 ) o la memoria se divide en ¿Las regiones más grandes y las 2 chocan cuando acceden a la misma región?

Si es lo último, ¿qué tan grandes son esas regiones?

    
pregunta Corneliu Zuzu

2 respuestas

6

Lo que esto significa es que si el DMA y la CPU están apuntando a la RAM, dependiendo de qué turno esté en el programador de matriz de bus, la CPU puede verse obligada a esperar a que finalice el turno del DMA.

por ejemplo Si el DMA está haciendo una copia ram-ram y la CPU está leyendo / escribiendo en un registro periférico, entonces están usando dos canales de bus separados y no se produce ninguna espera.

por ejemplo Si el DMA está haciendo una copia ram-ram y la CPU está leyendo / escribiendo a ram, entonces Busmatrix arbitra el acceso al ram. A veces DMA esperará, a veces CPU esperará.

Vea la sección 3.1 del manual para las cosas de la matriz de bus.

No creo que puedas colocar tus buffers en una memoria donde la CPU no compita con el DMA.

    
respondido por el pgvoorhees
-3

El DMA aquí está conectando el hardware con los puertos de memoria designados para acceso exclusivo.

El DMA se puede usar con los periféricos principales: SPI, I2C, USART, temporizadores de propósito general, DAC y ADC con acceso exclusivo a la memoria DMA asignada

  • 0x4002 0400 - 0x4002 07FF (1K) DMA2
  • 0x4002 0000 - 0x4002 03FF (1K) DMA1

Los búferes circulares son compatibles con DMA.

    
respondido por el Tony EE rocketscientist

Lea otras preguntas en las etiquetas