[LPC] lpc1768的i2s相关问题求解答~~

[复制链接]
 楼主| happydaysxw 发表于 2014-2-12 13:47 | 显示全部楼层 |阅读模式
我用i2s传输音频数据,用dma接收,如何一次性接收多个数据呢?就是设置dma接收数据,cpu干其他的事情
 楼主| happydaysxw 发表于 2014-2-12 14:20 | 显示全部楼层
目前我i2s传输的数据长度为32位,dma一次性接收8个数据后下面就是重复数据了,怎么解决这个问题呢?
guangbiao 发表于 2014-2-12 14:34 | 显示全部楼层
楼主说明白点。。。参考信息太少无法分析的。。。
 楼主| happydaysxw 发表于 2014-2-12 14:51 | 显示全部楼层
guangbiao 发表于 2014-2-12 14:34
楼主说明白点。。。参考信息太少无法分析的。。。

我用i2s传输音频数据,dma方式接收,传输宽度为32位,传输方向是i2s的接收fifo,到内存,dma传输数据个数为160,但是实际运行时,dma目的地址上前8个数据是正确的,后面就是重复数据了
 楼主| happydaysxw 发表于 2014-2-12 14:56 | 显示全部楼层
由于i2s的接收FIFO是8*32位的,我觉得是不是这个的原因呢?如果是这样的话,dma的传输数据个数就只能小于等于8吗?目前我测试的结果是这样的,那么我希望传输更多的数据要怎么办呢?
guangbiao 发表于 2014-2-12 15:15 | 显示全部楼层
DMA接收数据个数不要设置成160,要设置成触发接收DMA请求的FIFO深度。
如果你FIFO的深度是8,那DMA接收的个数也设成8。
然后在DMA传输完成中断中,修改目标地址(便宜8个字)保存下一次的DMA传输数据,直到设置的缓冲区尾部(比如你设置的160个字),再从缓冲区头部开始或者存到别的地址。
guangbiao 发表于 2014-2-12 15:16 | 显示全部楼层
偏移
 楼主| happydaysxw 发表于 2014-2-12 16:21 | 显示全部楼层
guangbiao 发表于 2014-2-12 15:15
DMA接收数据个数不要设置成160,要设置成触发接收DMA请求的FIFO深度。
如果你FIFO的深度是8,那DMA接收的个 ...

哦~谢啦~我试试
 楼主| happydaysxw 发表于 2014-2-12 17:18 | 显示全部楼层
guangbiao 发表于 2014-2-12 15:15
DMA接收数据个数不要设置成160,要设置成触发接收DMA请求的FIFO深度。
如果你FIFO的深度是8,那DMA接收的个 ...

这样的话,就会每接收8个数据进一次中断,过于频繁,dma不是可以配制成自动循环接收吗?就是在接收完数据后自动开始接收下8个数据。但是我用的LPC1768,没看到要怎么配制成这种模式
guangbiao 发表于 2014-2-12 17:40 | 显示全部楼层
happydaysxw 发表于 2014-2-12 17:18
这样的话,就会每接收8个数据进一次中断,过于频繁,dma不是可以配制成自动循环接收吗?就是在接收完数据 ...

你可以将FIFO配置成每接收到1个数据,就触发一次DMA传输,即将FIFO深度配置成1。
然后将DMA接受的数据设置成你想要的数目(比如160),这样DMA在接收完160个数据后会产生中断。
如果你将DMA配置成循环模式,当接收完指定数目的数据后,DMA会再从缓冲区的开始位置进行存储。
guangbiao 发表于 2014-2-12 17:49 | 显示全部楼层
其实FIFO的作用就是怕你的应用程序处理不过来,而进行的数据缓冲。
既然你每个数据都能通过DMA转移,相当于通过DAM将你的缓冲区变成了一个更大的FIFO。
而且你自己的这个FIFO的深度由你自己控制,可长可短。
所以就没有必要在使用原有的FIFO了,除非你程序处理不过来,这种情况基本不可能,因为DMA是CPU无关的,可以将其看做一个硬件行为。
 楼主| happydaysxw 发表于 2014-2-12 17:57 | 显示全部楼层
guangbiao 发表于 2014-2-12 17:40
你可以将FIFO配置成每接收到1个数据,就触发一次DMA传输,即将FIFO深度配置成1。
然后将DMA接受的数据设 ...

将FIFO配置成每接收到1个数据,就触发一次DMA传输,即将FIFO深度配置成1。。是这样配置吗?
LPC_I2S->I2SDMA2 = (0x01<<8);
这样配置了之后,LPC_GPDMACH0->DMACCControl  |=0xa0 ;设置接收数据个数为160,但是这样的结果就是我最开始说的接收了8个之后就重复一个数据了
这样配置对吗?
guangbiao 发表于 2014-2-13 10:02 | 显示全部楼层
happydaysxw 发表于 2014-2-12 17:57
将FIFO配置成每接收到1个数据,就触发一次DMA传输,即将FIFO深度配置成1。。是这样配置吗?
LPC_I2S->I2S ...

不会吧,楼主连这个都要问吗?现成的数据手册在哪里,自己多看看就知道怎么配置了哦!!!
方法都告诉你了,实践出真知。
 楼主| happydaysxw 发表于 2014-2-13 10:35 | 显示全部楼层
guangbiao 发表于 2014-2-13 10:02
不会吧,楼主连这个都要问吗?现成的数据手册在哪里,自己多看看就知道怎么配置了哦!!!
方法都告诉你 ...

我就是按照数据手册配的嘛。。不对才问的噻
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部