Question

J'essaie d'utiliser le contrôleur GPDMA pour accéder au canal SSP1.Utilisation de la bibliothèque CMSIS, cela devrait être complet.Mais je ne vois rien à la sortie SSP1.

comme premier exemple, je veux envoyer un octet.

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);
}

Annotations: (A) J'ai varié la taille: 0, 1, 20, plusieurs valeurs rien ne changent (B) La mise en œuvre de la CMSIS réinitialise toujours les bits du registre DMAREQSEL.Depuis que je pense que le doit être défini, j'ai ajouté cette ligne.Mais le résultat ne change pas.

Lorsque j'utilise la fonction de sondage SSP qui lit directement / écrit les registres LPC_SSP1, je peux voir le transfert à l'analyseur de logique.Mais rien ne se passe lorsque le GPDMA est utilisé.Quel est le problème avec l'approche?

Y a-t-il un exemple de travail là-bas?

Était-ce utile?

La solution

La configuration était incomplète.Bien que le DMA soit prêt à transférer l'interface SSP doit permettre l'accès DMA.

Cette ligne avant la fin de la fonction le fait fonctionner:

SSP_DMACmd(LPC_SSP1, SSP_DMA_TX, ENABLE);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top