⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testusba.c

📁 usb 检验程序
💻 C
字号:
#include "UtilFunc.h"
#include "stdio.h"
#include "XsUartDrv.h"
#include "RegCtl.h"
#include "XsGpioDrv.h"
#include "SitsangBrdRegs.h"
#include "SitsangBrdDrv.h"
#include "XsClkMgrDrv.h"

#ifdef AUTO_TEST
#include "package.h"
#endif

#define HcDataPort 0x10000000
#define HcCmdPort  0x10000002
#define rHcChipid  0x27
#define rHcScratch 0x28
#define wHcScratch 0xA8
#define rITLBufferRam 0x2A
#define wITLBufferRam 0xAA
#define USB_CHIP_ID	0x6120

static char g_Buf[100];
int CEntry_TestUsbA()
{ 
	volatile unsigned short value;
	int i = 0;
	int error;

	//init FFUart	
	BRD_UartInitDefaultFF();

	//enable device power and periphery device
	SET_BIT(BRD_PCR_ADDR, PCR_USB_HOST_ON_OFS);
	SET_BIT(BRD_PCR_ADDR, PCR_PER_ON_OFS);
	
	//open bus
	SET_BIT(BRD_BCR_ADDR, BCR_BUS_OPEN_OFS);

#ifndef AUTO_TEST
	//PrintfUartFF("Begin USB host controller chip test...\r\n");

	//reset USB controller chip, write '1' to bit BCR_USB_HC_RESET, then write '0' 
	//PrintfUartFF("Reset USB controller chip...\r\n");
    SET_BIT(BRD_BCR_ADDR, BCR_USB_HC_RESET_OFS);
    //Util_DelayMs(1);
    RESET_BIT(BRD_BCR_ADDR, BCR_USB_HC_RESET_OFS);
    //Util_DelayMs(10);

	while(1)
	{		    
		//PrintfUartFF("Test times = %d\r\n", ++i);
		//PrintfUartFF("PCR = 0x%X, BCR = 0x%4.4X\r\n", BRD_PCR, BRD_BCR);

		//read chip ID	
		*((volatile unsigned short *)HcCmdPort) = rHcChipid;
		//Util_DelayMs(10);
		value = *((volatile unsigned short *)HcDataPort); 
		//PrintfUartFF("Get USB ChipID:  0x%X\r\n\r\n", (unsigned int)value);
	
		//write scratch register
		value = 0xdead;
		*((volatile unsigned short *)HcCmdPort) = wHcScratch;
		//Util_DelayMs(10);
		*((volatile unsigned short *)HcDataPort) = value;
		//PrintfUartFF("Write Scratch register with 0x%X\r\n", (unsigned int)value);
		
	
		//write ITL length register
		value = 0x50a0;
		*((volatile unsigned short *)HcCmdPort) = wITLBufferRam;
		//Util_DelayMs(10);
		*((volatile unsigned short *)HcDataPort) = value;
		PrintfUartFF("Write ITL length register with 0x%X\r\n\r\n", (unsigned int)value);		
		
		//read back scratch register
		*((volatile unsigned short *)HcCmdPort) = rHcScratch;
		//Util_DelayMs(10);	
		value = *((volatile unsigned short *)HcDataPort);
		//PrintfUartFF("Read Scratch register: 0x%X ==>", (unsigned int)value);
		//PrintfUartFF("Read register %s\r\n", (value == 0xdead)? "OK":"ERROR");
				
		//read back ITL length register
		*((volatile unsigned short *)HcCmdPort) = rITLBufferRam;
		//Util_DelayMs(10);	
		value = *((volatile unsigned short *)HcDataPort);
		//PrintfUartFF("Read ITL length register: 0x%X ==>", (unsigned int)value);
		//PrintfUartFF("Read register %s\r\n", (value == 0x50a0)? "OK":"ERROR");
		
		
		//PrintfUartFF("-------------------------------------\r\n");
		
		//Util_TestCpldLed_OneByeOne();
		//Util_DelayMs(500);
	}
	
#else	
		error = 0;

		//reset USB controller chip, write '1' to bit BCR_USB_HC_RESET, then write '0' 
		FormatNormalMessage("Reset USB controller chip...");
	    SET_BIT(BRD_BCR_ADDR, BCR_USB_HC_RESET_OFS);
	    //Util_DelayMs(1);
	    RESET_BIT(BRD_BCR_ADDR, BCR_USB_HC_RESET_OFS);
	    //Util_DelayMs(10);
		
		//read chip ID	
		*((volatile unsigned short *)HcCmdPort) = rHcChipid;
		//Util_DelayMs(10);
		value = *((volatile unsigned short *)HcDataPort); 

		if(value == USB_CHIP_ID)
			FormatNormalMessage("USBA chip id read success : 0x%x", USB_CHIP_ID);
		else
		{
			FormatErrorMessage("USBA chip id read error(expected:0x%x, read:0x%x)", USB_CHIP_ID, value);
			error ++;
		}
		
		//write scratch register
		value = 0xBEAF;
		*((volatile unsigned short *)HcCmdPort) = wHcScratch;
		//Util_DelayMs(10);
		*((volatile unsigned short *)HcDataPort) = value;

		//read back scratch register
		*((volatile unsigned short *)HcCmdPort) = rHcScratch;
		//Util_DelayMs(10);	
		value = *((volatile unsigned short *)HcDataPort);
				
		if(value == 0xBEAF)
			SendNormalMessage("Write scratch register OK");
		else
		{
			sprintf(g_Buf, "Write scratch register failed(expected:0xBEAF, read:0x%X)",value);
			SendErrorMessage(g_Buf);
			error++;
		}
	
		return (error == 0);
#endif	//AUTO_TEST	

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -