打印

i2s的DMA模式数据不能发送问题

[复制链接]
4720|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
夜夜|  楼主 | 2010-8-25 11:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SPI2口以i2s模式数据发送,直接往SPI->DR送数据,正常。要提高效率,配置到DMA模式送数据,无法启动数据发送。

望指教。

DMA 配置的代码:
static void DMA_i2sTxConfiguration(uint16_t *BufferSRC, uint32_t BufferSize)
{
  DMA_InitTypeDef DMA_InitStructure;

  /* DISABLE the SPI2/I2S2 peripheral */
  I2S_Cmd(SPI2, DISABLE);

  DMA_ClearFlag(DMA1_FLAG_TC5 | DMA1_FLAG_TE5 | DMA1_FLAG_HT5 | DMA1_FLAG_GL5);

  /* DMA1 Channel4 disable */
  DMA_Cmd(DMA1_Channel5, DISABLE);

  /* DMA1 Channel4 Config */
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&SPI2->DR;
  printf("addr:%x\r\n", DMA_InitStructure.DMA_PeripheralBaseAddr);

  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)BufferSRC;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
  DMA_InitStructure.DMA_BufferSize = BufferSize / 2;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(DMA1_Channel5, &DMA_InitStructure);

  // 允许DMA数据发送
  SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE);

  /* DMA1 Channel5 enable */
  DMA_Cmd(DMA1_Channel5, ENABLE);

  /* ENABLE the SPI2/I2S2 peripheral */
  I2S_Cmd(SPI2, ENABLE);
}
沙发
janeslee| | 2010-8-25 11:47 | 只看该作者
DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord;

这里写错了,应该是DMA_MemoryDataSize_HalfWord,我以前也犯过这个错误。

使用特权

评论回复
板凳
夜夜|  楼主 | 2010-8-25 14:12 | 只看该作者
本帖最后由 夜夜 于 2010-8-25 14:15 编辑

多谢janes 数据字长确实配置错了。

改了以后还是不发数据 可能还有别的问题;仔细检查了下又没发现;困惑啊。

使用特权

评论回复
地板
sinc_mark| | 2014-6-16 17:30 | 只看该作者
楼主,问题解决了吗?是怎么回事啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:一庭芳草围新绿 有情芍药含春泪

14

主题

63

帖子

1

粉丝