Pregunta

Intento utilizar el controlador GPDMA para acceder al canal SSP1.Usando la biblioteca del CMSIS, esto debería ser integral.Pero no puedo ver nada en la salida SSP1.

Como primer ejemplo, quiero enviar un byte.

uint8_t buffer[20] = { 0x9F };

int main(void)
{
  // ... using PINSEL_ConfigPin to configure the SSP1 pins...

  // configure SSP
  SSP_CFG_Type ssp_config;
  ssp_config.Databit = SSP_DATABIT_8;
  ssp_config.CPHA = SSP_CPHA_SECOND;
  ssp_config.CPOL = SSP_CPOL_LO;
  ssp_config.Mode = SSP_MASTER_MODE;
  ssp_config.FrameFormat = SSP_FRAME_SPI;
  ssp_config.ClockRate = 4500000;

  SSP_Init(LPC_SSP1, &ssp_config);
  SSP_Cmd(LPC_SSP1, ENABLE);

  // configure GPDMA
  GPDMA_Channel_CFG_Type dma_config;

  dma_config.ChannelNum = GPDMA_CONN_SSP1_Tx;
  dma_config.TransferSize = 1;                   // <-- (A)
  dma_config.TransferWidth = 0; // M2M only
  dma_config.SrcMemAddr = (uint32_t)&buffer[0];
  dma_config.DstMemAddr = 0;
  dma_config.TransferType = GPDMA_TRANSFERTYPE_M2P;
  dma_config.SrcConn = 0;
  dma_config.DstConn = GPDMA_CONN_SSP1_Tx;
  dma_config.DMALLI = 0;

  Status status = GPDMA_Setup(&dma_config);

  // (B) this was just a try
  LPC_SC->DMAREQSEL |= (1 << dma_config.DstConn);

  // now start DMA
  GPDMA_ChannelCmd(4, ENABLE);
}

anotaciones: (A) Varí el tamaño: 0, 1, 20, varios valores nada cambia (B) La implementación del CMSIS siempre restablece los bits en el Registro Dmareqsel.Como creo que se debe establecer, agregué esta línea.Pero el resultado no cambia.

Cuando uso la función de sondeo SSP que lee / escribe directamente los registros LPC_SSP1, puedo ver la transferencia en el analizador lógico.Pero nada sucede cuando se usa el GPDMA.¿Qué pasa con el enfoque?

¿Hay algún ejemplo de trabajo por ahí?

¿Fue útil?

Solución

La configuración fue incompleta.Mientras que el DMA está listo para transferir la interfaz SSP debe habilitar el acceso DMA.

Esta línea antes del final de la función lo hace funcionar:

SSP_DMACmd(LPC_SSP1, SSP_DMA_TX, ENABLE);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top