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.

急求!!关于6748UPP回环模式测试问题



我想问下,我的板子不是EVM板,硬件上面UPP接口和FPGA已经连上了可以做回环模式测试的吗?如果可以的话不知道为什么发送数据就是接受不到,初始化化

严格按照文档上面来的,能不能帮我分析下问题的所在,以下是程序的代码:

//    void pinmux()

        {       HWREG( SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13) ) = 0x48440000; //UPP_CHA(CH1),RESETOUT,bit0  需要被确认,可0可1?
		HWREG( SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(14) ) = 0x44444400; //UPP_D[10]-UPP_D[15]
		HWREG( SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(15) ) = 0x44444444; //UPP_D[2]-UPP_D[9]
		HWREG( SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(16) ) = 0x44444444; //UPP_XD[10]-UPP_XD[15],UPP_D[0]-UPP_D[1]
		HWREG( SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(17) ) = 0x44444444; //UPP_XD[2]-UPP_XD[9]
		HWREG( SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(18) ) = 0x00444444; 
		HWREG( SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(19) ) = 0x00010000; }

 

///test code 
#pragma DATA_ALIGN(xmit_buffer, 64)	//ensures data is alight on 64 byte boundry
short xmit_buffer[64] = 	//as required by UPP DMA controller
{
	512,562,612,661,708,753,796,837,874,908,938,964,985,1002,1014,1022,
	1023,1022,1014,1002,985,964,938,908,874,837,796,753,708,661,612,562,
	512,462,412,363,316,271,228,187,150,116,86,60,39,22,10,2,
	0,2,10,22,39,60,86,116,150,187,228,271,316,363,412,462
};

#pragma DATA_ALIGN(recv_buffer,64)
short recv_buffer[64] =
{
	0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0
};

void upp_test()
{
	int i,result = 1;
	UPQD0 = (Uint32)&xmit_buffer;//add next DMA transfer
	UPQD1 = 0x00010080;   			//1 lines 128 bytes per line
	UPQD2 = 0x00000080;   			//no offset between lines
	while(UPQS2 & 0x2){};
	UPID0 = (Uint32)&recv_buffer;//add next DMA transfer
	UPID1 = 0x00010080;   			//1 lines 128 bytes per line
	UPID2 = 0x00000080;   			//no offset between lines
	while(UPIS2 & 0x2){};
	for(i=0;i<64;i++)
	{
		if(xmit_buffer[i] != recv_buffer[i])
		{
			result = 0;
			break;
		}
	}
	if(result ==1)
		printf("test uPP OK/n");
		printf("test uPP not OK\n");
}


//UPP initialization funcition

void UPP_init()
{

	UPPCR = 0x00000010;                      
	sw_wait(400);   
	UPPCR = 0;                          
	UPCTL = 0x02020006;     
	//UPICR = 0X21000100;                 /
	UPICR = 0X01000000;
	UPIVR = 0x00000000;    
	UPTCR = 0;                 
	UPDLB |= 1<<13 ;    
                  
	UPIES = 0X0;     //关掉所有中断
	UPPCR = 0x0000000e;   //使能UPP
}

  • 可以看一下下面的帖子,uPP DLB模式下,应该是不能接外设的。
    http://www.deyisupport.com/question_answer/dsp_arm/c6000_dsp/f/32/p/68440/164006.aspx#164006

  • FPGA测试程序烧写了没?如果烧写了的话,DLB是不会正常工作的,562,和462会重复收两次,修改一下UPICR = 0x00300010;貌似你会有意想不到的结果

  • 程序已经测试完毕,如有需要,请联系西电老科B606,你懂的。

  • 能不能发个回环测试的代码给我看看,已经纠结几天了~~麻烦了280298400@qq.com

  • 但是我接了fpga  但是并没有向里面烧写程序啊~下面是TI的例程,对于UPP->UPQD0 = (uint32_t)&recv_buffer;有点不是很理解为什么后面又将recv_buffer给发送DMA channelQ呢,不是很理解

    uint32_t executeTest(void)
    {	
        upp_config_t config;
    	UPXS2_t	* UPIS2r = (UPXS2_t *)&(UPP->UPIS2);
    	UPXS2_t	* UPQS2r = (UPXS2_t *)&(UPP->UPQS2);
    
      	uint32_t retVal = ERR_NO_ERROR;
      	uint32_t i;
    
    	//UPCTL
    	config.UPCTL.value=0;
    	config.UPCTL.bits.IWB = 1;			//16 bit interface
    	config.UPCTL.bits.DPWB = 2;			//10 bit data
    
    	config.UPCTL.bits.DPFA = 0;
    	config.UPCTL.bits.DPWA = 2;
    	config.UPCTL.bits.IWA = 1;
    
    	config.UPCTL.bits.CHN = 1;			//dual channel mode
    	config.UPCTL.bits.MODE = 2;			//0 all recv, 1 all xmit, 2 a recv b xmit, 3 a xmit b recv
    										//Channel A ADC, Channel B DAC
    
    	//UPICR
    	config.UPICR.value=0;
    	config.UPICR.bits.CLKDIVB = 15;		//Set DAC sampling freqency at 75/16 Mhz (4.6875MHz)
    
    	//UPIVR
    	config.UPIVR.value=0;
    	config.UPIVR.bits.VALB = 0x1000;
    	config.UPIVR.bits.VALA = 0x0000;
    
    	//UPTCR
    	config.UPTCR.value=0;				//all values 0 for 64byte DMA bursts read / write
    	//UPDLB
    	config.UPDLB.value=0;				//no loopback				
    	//UPIES							
    	config.UPIES.value=0;				//dont enable any interrupts
    	//UPPCR
    	config.UPPCR.value = 0;				
    	config.UPPCR.bits.EN = 1;			//enable uPP
    	config.UPPCR.bits.RTEMU = 1;		//allow emulator use
    	config.UPPCR.bits.SOFT = 1;			//allow emulation
    		
        UPP_init(&config); 	
    
    	printf("---Generating 73.2421875KHz sine wave for 20 seconds---\r\n\r\n");
    	for(i = 1; i < 1464843; i++) 
    	{
    	
    			UPP->UPQD0 = (uint32_t)&xmit_buffer;//add next DMA transfer
      			UPP->UPQD1 = 0x00010080;   			//1 lines 128 bytes per line
      			UPP->UPQD2 = 0x00000080;   			//no offset between lines
    
    			while(UPQS2r->bits.PEND == 1){};
    	}
    	
    	printf("---Collecting 64 samples from ADC---\r\n");
    	UPP->UPID0 = (uint32_t)&recv_buffer;//add next DMA transfer
    	UPP->UPID1 = 0x00010080;   			//1 lines 128 bytes per line
    	UPP->UPID2 = 0x00000080;   			//no offset between lines
    	while(UPIS2r->bits.PEND == 1){};
    	
    
    	printf("---Displaying collected samples---\r\n");
    	for(i = 0; i < 1464843; i++)
    	{
    		UPP->UPQD0 = (uint32_t)&recv_buffer;//add next DMA transfer
      		UPP->UPQD1 = 0x00010080;   			//1 lines 128 bytes per line
      		UPP->UPQD2 = 0x00000080;   			//no offset between lines
    
    		while(UPQS2r->bits.PEND == 1){};	//wait for tx transfer to complete
    	}
    
       return retVal;
    }
    

  • 额,你是FH的?请叫你们的*总联系这边的合作伙伴吧。

  • 我这边是和FH合作的nbu~你懂的。。。

  • 额。。。加qq聊,有什么问题好一起商量 280298400

  • 你这个代码是从我这边流出的!!!!!!是没测试过的程序,不过现在已经弄好了。请叫FH的联系。