首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSP1 1/GPDMA在大脑皮层-M3 (LPC1787)转移的例子

SSP1 1/GPDMA在大脑皮层-M3 (LPC1787)转移的例子
EN

Stack Overflow用户
提问于 2014-02-27 07:15:37
回答 1查看 520关注 0票数 1

我试图利用GPDMA控制器访问SSP1信道。使用CMSIS库应该是全面的。但是我在SSP1输出中看不到任何东西。

作为第一个例子,我想发送一个字节。

代码语言:javascript
复制
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);
}

注释:(A)我更改了大小:0、1、20,几个值不变(B) CMSIS实现总是重置DMAREQSEL寄存器中的位。因为我认为必须设置,所以我增加了这一行。但结果并没有改变。

当我使用直接读写LPC_SSP1寄存器的SSP轮询函数时,我可以在逻辑分析器上看到传输。但是当GPDMA被使用时什么都不会发生。这个方法有什么问题?

外面有有用的例子吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-27 15:22:05

设置不完整。当DMA准备好传输时,SSP接口必须启用DMA访问。

函数结束前的这一行使其工作:

代码语言:javascript
复制
SSP_DMACmd(LPC_SSP1, SSP_DMA_TX, ENABLE);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22061584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档