|
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
Void UPP_TASK(Void)
{
int i,j,k,target_int_count=2;
char ch[2];
upp_interrupt_count = 0;
upp_error_count = 0;
UARTPuts("\tResetting uPP buffers...\r\n",-2);
// Initialize data buffers
for (i = 0; i < upp_frame_size; i++)
{
upp_buffer_b =i;
upp_buffer_a = 0xDEAD;
}
//for(i=0;i<1024;i++)
// temp=0;
//UPPReset();
/*启动UPP DMA传输*/
UARTPuts("upp_prog_dma_i\n",-2);
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
UARTPuts("upp_prog_dma_i\n",-2);
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/*等待UPP传输完毕*/
//i=0;
//j=0;
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
{
/* 测试UPP传输的同时操作普通DDR数据
temp=i;
i++;
if(i==1024)
{
i=0;
j++;
}
*/
asm(" nop");
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
}
/*检查UPP传输的数据是否正确 (loopback modes only)*/
//UARTprintf( "i=%d\n",i);
//UARTprintf( "j=%d\n",j);
UARTPuts("Data mismatch in buffers.\n",-2);
if (upp_interrupt_count == 2 && upp_error_count == 0)
{
for (i = 0; i<upp_frame_size; i++)
{
if (upp_buffer_a != upp_buffer_b)
{
upp_error_count++;
}
}
}
/* 报告通信结果*/
if(upp_error_count != 0)
UARTprintf( "upp_error_count=%d\n",upp_error_count);
else
UARTPuts("uPP transfers complete!\n",-2);
UARTPuts("Do you want to print all the data?(y/n) ",-2);
UARTGets(ch,2);
UARTPuts("\n", -2);
if(ch[0] == 'y')
{
/*打印全部读到的数据*/
for(i=0; i<upp_frame_size; )
{
for(j=0; j<5; j++)
{
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);
i++;
//if(i >= 4096)
// break;
}
UARTPuts("\n",-2);
}
}
}
|
|