This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2640R2F I2S 做音频采集与输出问题

Other Parts Discussed in Thread: CC2640R2F

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"

    如我把地址包含进去后,直接这样调用的编译也是编译不进去。。