dsp问题求教。这个程序看了好久不懂,求大神指教,在线等

voidprocessBuffer(void){Uint32addr;staticInt16pingPong=PING;Int16i,gBuffer0[BUFFSIZE/... void processBuffer(void)
{
Uint32 addr;
static Int16 pingPong = PING;
Int16 i,gBuffer0[BUFFSIZE/2],gBuffer1[BUFFSIZE/2],gBuffer2[BUFFSIZE/2],gBuffer3[BUFFSIZE/2];

while(DMA_FGETH (hDmaRcv, DMACCR, ENDPROG)){
;
}

// Determine which ping-pong state we're in
if (pingPong == PING)
{
// Configure the receive channel for pong input data
addr = ((Uint32)gBufferRcvPong) << 1;
DMA_RSETH(hDmaRcv, DMACDSAL, addr & 0xffff);
DMA_RSETH(hDmaRcv, DMACDSAU, (addr >> 16) & 0xffff);

// Set new state to PONG
pingPong = PONG;
}
else
{
// Configure the receive channel for ping input data
addr = ((Uint32)gBufferRcvPing) << 1;
DMA_RSETH(hDmaRcv, DMACDSAL, addr & 0xffff);
DMA_RSETH(hDmaRcv, DMACDSAU, (addr >> 16) & 0xffff);

// Set new state to PING
pingPong = PING;
}

DMA_FSETH (hDmaRcv, DMACCR, ENDPROG, 1);
// DMA_FSETH (hDmaXmt, DMACCR, ENDPROG, 1);

if (pingPong == PONG)
{
//Insert your application program here
copyData(gBufferRcvPing, gBufferRcvPing, BUFFSIZE);
for(i=0;i<BUFFSIZE/2;i++)
{
gBuffer0[i]=gBufferRcvPing[2*i];
gBuffer1[i]=gBufferRcvPing[2*i+1];
}

fir(gBuffer0, h, gBuffer0, dbptr, NE, NH);
fir(gBuffer1, h, gBuffer1, dbptr, NE, NH);

for(i=0;i<BUFFSIZE/2;i++)
{
gBufferXmtPing[2*i]=gBuffer0[i];
gBufferXmtPing[2*i+1]=gBuffer1[i];
}
// Configure the transmit channel for ping output data
addr = ((Uint32)gBufferXmtPing) << 1;
DMA_RSETH(hDmaXmt, DMACSSAL, addr & 0xffff);
DMA_RSETH(hDmaXmt, DMACSSAU, (addr >> 16) & 0xffff);

}
else
{
//Insert your application program here
copyData(gBufferRcvPong, gBufferRcvPong, BUFFSIZE);
for(i=0;i<BUFFSIZE/2;i++)
{
gBuffer2[i]=gBufferRcvPong[2*i];
gBuffer3[i]=gBufferRcvPong[2*i+1];
}

fir(gBuffer2, h, gBuffer2, dbptr, NE, NH);
fir(gBuffer3, h, gBuffer3, dbptr, NE, NH);

for(i=0;i<BUFFSIZE/2;i++)
{
gBufferXmtPong[2*i]=gBuffer2[i];
gBufferXmtPong[2*i+1]=gBuffer3[i];
}
// Configure the transmit channel for pong output data
addr = ((Uint32)gBufferXmtPong) << 1;
DMA_RSETH(hDmaXmt, DMACSSAL, addr & 0xffff);
DMA_RSETH(hDmaXmt, DMACSSAU, (addr >> 16) & 0xffff);
}

// Start the DMA
// DMA_start(hDmaRcv);
// DMA_start(hDmaXmt);

}
展开
 我来答
130啊斤
2013-07-07
知道答主
回答量:16
采纳率:100%
帮助的人:6.3万
展开全部
大概看了下 应该是用DMA实现乒乓缓存
以下是我猜的哈
while循环等待 DMA中断 或者DMA寄存器状态改变
然后DMA配置重置
下面的程序是对DMA搬得数进行乒乓缓存
然后开启DMA继续搬数

具体DMA搬数的方式和地址要看DMA的配置
北京康思
2018-09-20 广告
1、基本功能。市面上的电子负载均有基本的四项功能:恒流、恒压、恒阻和恒功率(安捷伦没有恒功率)。在功能基本相同,精确度相差不大的情况下,怎么判断是否符合要求呢?CHROMA和博计的电子负载只有一套工作电路,就是恒流功能。其他功能是根据欧姆定... 点击进入详情页
本回答由北京康思提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式