CC2640R2F I2S 做音频采集与输出问题
Dear All:
大家好,请问有没有人搞过 CC2640R2F I2S 采集音频与输出的列子?
本人在测试过程中,发现只能采集音频输入,没办法做到输出,请问这个是什么原因?
主体过程如下图:
在分配缓存队列时 把带进去的缓存赋值 0x1A;
设置队列,右边的参数栏可以看到带进的缓存是正常的。
设置完输入队列后 则设置输出队列,如下图:
把缓存放到输出寄存器
输出中断
下图位捕捉的波形,可以看到其他信号都正常,就是 AD1 作为输出时没有输出任何波形。
请各位大神求解。。谢谢!
上面的步骤自我感觉应该是没什么问题的,缓存的分配和队列都指向正常,就是不知道为什么没有把缓存里的数据输出出来。。
没有用过,你i2s驱动的音频芯片啥型号?可能采集和输出不能同时进行?
协议栈里有I2S的专属例程,是否有更改过?
\CC2640R2F_SDK_1_40_00_45\source\ti\devices\cc26x0r2\driverlib\ i2s.c 和 i2s.h 里面的都没有改过,也设置过断点在该函数
//****************************************************************************
//
// Set the buffer pointers
//
//****************************************************************************
void
I2SPointerSet(uint32_t ui32Base, bool bInput, void * pNextPointer)
{
// Check the arguments.
ASSERT(I2SBaseValid(ui32Base));
// Update the next input/output pointer with the correct address.
if(bInput == true)
{
HWREG(I2S0_BASE + I2S_O_AIFINPTRNEXT) = (uint32_t)pNextPointer;
}
else
{
HWREG(I2S0_BASE + I2S_O_AIFOUTPTRNEXT) = (uint32_t)pNextPointer;
}
}
输出的指针指向指向Buf 也用过 测试把Buf的数据memcpy复制出来查看,都是由数据的。
else if(object->currentStream->status != PDMCC26XX_I2S_STREAM_STOPPED) {
if(!Queue_empty(i2sBlockAvailOutQueue)) {
i2sBlockNextOut = Queue_get(i2sBlockAvailOutQueue);
I2SPointerSet(hwAttrs->baseAddr, false, (uint32_t *)i2sBlockNextOut->buf);
object->currentStream->status = PDMCC26XX_I2S_STREAM_BUFFER_READY;
}
I2SPointerSet(hwAttrs->baseAddr, false, (uint32_t *)i2sBlockNextOut->buf);这个缓存里的数据是有的,地址指向的最初分配 pdmContinuousBuffer 也是对的。
就是不知道为什么没有输出。。
我所使用的环境是 simplelink_cc2640r2_sdk_1_40_00_45 的 MultiRole 工程。IAR为 8.11.2版本。
顺便问个问题,在FlashRom 工程编译OK的,在 使用CacheAsRAM工程编译就提示错误,需要把 部分定义的Ram减小才可以通过,这是为什么?
开启Cache不是应该增加了8k的Ram吗?
错误提示:
把减少Ram的情况下编译通过跟 FlashRom 的map查看了下,部分如下,不是很懂,希望能对分析问题有帮助 :
这个cacheRam的问题解决了,不过还是想问下这个CacheRam的分配,
// GPRAM
define block GPDATA {
section .data object UserGattProfile.o,
section .data object UserMic.o,
section .data object icall.o,
section .data object PDMCC26XX.o,
section .data object PDMCC26XX_util.o,
section .data object prcm.o,
section .data object i2s.o};
place in GPRAM { block GPDATA };
为什么我这里写的
section .data object PDMCC26XX.o,
section .data object PDMCC26XX_util.o,
这些文件就无法编译到 Cacheram里面?是要怎么包含才能装载进去?
//#include <ti/drivers/pdm/PDMCC26XX.h>
#include "PDMCC26XX.h"
如我把地址包含进去后,直接这样调用的编译也是编译不进去。。