A、芯片:DSP6670
B、硬件环境:TMDXEVM6670L开发板,仿真器是560v2
C、软件环境:CCS 5.3
在利用6670开发板调试BCP协处理器过程中,无线电标准选择为 WiMAX ,现将调试过程中的问题罗列如下:
1. 单独调试uplink 里的 SSL 子模块时,输出并非软比特信息,而是+127或-127,貌似是硬判决,WiMAX 标准下是否支持软调制?
2. 在 MOD 和 SSL 子模块中出现的 UVL 代表什么含义,rms 作为一个量化因子计算得出 UVL?
3. 在 ENC 子模块中,明确写明 SRC_CRC_EN=3 时,为 WiMAX 标准下编码进行加扰,可是在 uplink 流程中,却没有相应模块对 WiMAX 标准进行解扰(SSL 模块中的解扰只在 LTE 下有效)?
希望能够得到解答,非常感谢!
Bear Melon:
回复 Andy Yin1:
感谢 Andy 的回答,我再补充一些我的疑问:
1. 我将例程中的其他模块全部屏蔽,上行去掉了 RD,只保留SSL子模块,但是不管输入怎么修改,查看pRxDataBuffer指向的值都是127或-127(int8_t)
Bcp_recv (hRx,&hRxDrvBuffer,&pRxDataBuffer,&rxDataBufferLen,&pRxPsInfo,&rxPsInfoLen,&rxFlowId,&rxSrcId,&rxDestnTag);
软信息应该是根据输入值不同而改变的,为什么我看到的只有正负号正确,但值却不变呢?
2. 例程中给出的宏定义BCP_EXAMPLE_SIZE_HOST_DESC = 64,但我并没有发现有 PS 信息,Host Descriptor 不是应该是32bytes 吗?BCP_EXAMPLE_NUM_HOST_DESC = 256,Host Descriptor的数量根据什么值来确定?
3. 例程中是根据什么值确定分配 TX 和 RX 的 descriptor 分别为
TX_NUM_DESC = 2;
RX_NUM_DESC= (BCP_EXAMPLE_NUM_HOST_DESC/4 – TX_NUM_DESC) = 62( PS: 这里的除以4是个什么概念)
4. 希望可以获得 BCP和FFTC 不带 BIOS 的例程
期待您能够给予帮助和解惑,谢谢~
Andy Yin1:
回复 Bear Melon:
1 SSL输出为-127~127,说明信号幅度溢出,可以调整每个symbol对应的噪声因子C值;
2 BCP的header信息是在payload中带进去,对应的描述符大小及个数完全可以根据应用决定,PDK中的64及256都只是测试,你可以修改;
3 同样TX/RX描述符的个数也是由应用软件决定;
4 FFTC的例程参见如下STK,我们没有Wimax相关的BCP 非Bios例程,对于BCP的使用最主要是配置Navigator、BCP header参数配置,对于非bios流程,可以使用如下STK common及Navigator c文件中的API进行配置。
STK: http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx
Bear Melon:
回复 Andy Yin1:
Andy 你好
在最近调试BCP(WiMAX 标准)过程中,发生如下疑问:
1. numRxPackets = Bcp_rxGetNumOutputEntries (hRx),这个API是用来计算包的个数的,但是我看到 dataBuffer 和 Packet 的bytes 个数是一样的,也就是说, 输入一串 payload 数据,numRxPackets的值应该恒为1才对,这里放一个 for 循环【for (i = 0; i < numRxPackets; i ++)】有什么意义?
2. WiMAX 下选用的描述符都是 Host Descriptor Pointer
1)Source 和 Destination Tag 真正的意义是什么?
2)Host DP 其中一个 word 表示 link infor,也就是 next DP, 只有一个 packet 为什么会有两个相连的 descriptor?
3. 调试单一子模块的时候,我都是打断点在下面这个 API
Bcp_recv (hRx, &hRxDrvBuffer, &pRxDataBuffer, &rxDataBufferLen, &pRxPsInfo, &rxPsInfoLen, &rxFlowId, &rxSrcId, &rxDestnTag);
查看pRxDataBuffer,就可以看到输出数据,但是当我想将输出添加到函数接口里面,发现这个指针的指针无法传递参数,原因是其地址在经过Bcp_recv 这个 API 后突然改变了,请问我该如何添加该输出到函数接口?
谢谢!
Andy Yin1:
回复 Bear Melon:
1 BCP支持一对多的模式,即输入一个packet经过处理后输出多个包,如果对于wimax只是一对一的输入输出,则始终恒1;
2 src dest tag在BCP中没有特殊的含义,可以用来传输自定义的信息;输入一个packet可以是多个不连续地址的数据link在一起作为一个payload整体输入;
3 你是说pRxDataBuffer传递进去的地址没有实际生效么,那你需要看看这个函数内部的实现,修改一下代码。
Bear Melon:
回复 Andy Yin1:
谢谢 Andy 的解答。
关于pRxDataBuffer参数传递的问题,下面这个Bcp_recv的 API 是 TI 直接提供的,并未提供具体实现,也就是说该函数是一个内部实现未知的黑盒子。
Bcp_recv (hRx, &hRxDrvBuffer, &pRxDataBuffer, &rxDataBufferLen, &pRxPsInfo, &rxPsInfoLen, &rxFlowId, &rxSrcId, &rxDestnTag);
我在查询 memory 地址的时候,发现下面这个为 RX 分配存储空间的函数,
allocate_fdq (hGlblFDQ, RX_NUM_DESC, RX_DATA_BUFFER_SIZE, 0, &hRxFDQ, NULL)
该函数中的局部变量 pDataBuffer 的地址正是最后运行Bcp_recv后pRxDataBuffer的地址,这是不是意味着,我需要将函数allocate_fdq内部随机为 RX 分配的策略修改成非随机分配,才能保证外部pRxDataBuffer能够传递进Bcp_recv?
Bear Melon:
回复 Andy Yin1:
我用 memcpy()将 pRxDataBuffer 地址指向的值拷贝到我新建的一个全局变量,传递到被调用函数中,似乎解决了输出参数传递这个问题。
PS:
1. 对于 SSL submodule 的输出,无论如何修改噪声因子的值,所得到的输出在符号正确的情况下是正负127,在错误的情况下则是+1,+1或者-1,-1,
我想问,此处的噪声因子是否有一个匹配公式计算,该如何正确确定输入的噪声因子?
2. WiMAX 下,若只有一个 packet,是不是只需要各分配一个 Descriptor 给 TX 和 RX,也不需要检查 next Descriptor Point ?
Thanks!
Bear Melon:
回复 Andy Yin1:
今天通过不停的尝试,找到了适合的噪声因子,在这里分享一下。
例程中, rms=1024,此时,噪声因子并非例程wimax_sslin 里面的0x7f800000,而应该是0x36B00000左右,一个很小的区间;
rms=8192时,噪声因子应该是0x34760000左右,同样是一个很小的区间。
目前还没发现噪声因子和 rms 等有确定的数量关系,更方便的计算出噪声因子,只能通过这种不断的试验。
PS:
上行链路完成输出的计算后,有如下释放空间的代码,
if (hRx) Bcp_rxClose (hRx);
deallocate_fdq (hRxFDQ, hGlblFDQ, RX_NUM_DESC, RX_DATA_BUFFER_SIZE, NULL);
if (hTx) Bcp_txClose (hTx);
deallocate_fdq (hTxFDQ, hGlblFDQ, TX_NUM_DESC, TX_DATA_BUFFER_SIZE, NULL);
但是运行第一个 if 语句就跑飞,这可能是什么缘故?没法关闭 bcp 的 rx 通道?(下行链路没有出现这个问题)
Bear Melon:
回复 Andy Yin1:
例程中的 RD 模块的输出,给出的对比参考数据有一个 header,8个32bit 数据
static UInt32 wimax_ul_out_packet_1[WIMAX_UL_OUTPUT_PKT_1_WRD_SIZE] = {0x00000000,0x00000000,0x00000000,0x00000000,0x000001E0,0x00000000,0x00000000,0x00000000};
我查看了datasheet,WiMAX 下RD 的输出 header 信息应该是128bit,本应该是4个32bit 数据才对。
我自己调试程序时输出的也是4个32bit 数据,是例程写错了么?
TI中文支持网




