📄 testusba.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 + -