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

📄 rwreg.c

📁 飞利浦公司usb2.0芯片isp1581的通用驱动代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	if(error)
		cprintf("test dma endpoint register failed/partial passed\r\n");
	else
		cprintf("test dma endpoint register passed\r\n");
}

void test_scratch(void)
{
	unsigned int i=1, j;
	unsigned char error=0, key;

	while(i)
	{
		ISP1581_SetDataToChipRam(i);
//		outport(0x36a, 00);
		j = ISP1581_GetDataFromChipRam();
//		outport(0x36a, 00);
		if(j != i)
		{
			cprintf("test scratch register failed, write = %x, read = %x, \r\n", i, j);
			error = 1;
			key = key2go();
			if(key == 0x1b)
				return;
		}
		else
			cprintf("test scratch register passed,  %x                      \r\n", i);

		if(i == 0x8000)
		{
			key = key2go();
			if(key == 'r')
				i = 1;
			else if(key == 'g')
				return;
			else
				i <<= 1;
		}
		else
			i <<= 1;
	}
	if(error)
		cprintf("test scratch register failed/partial passed\n");
	else
		cprintf("test scratch register passed\n");
}

void test_testmode(void)
{
	unsigned char i=1, j, error = 0, key;

	while(i)
	{
		ISP1581_SetTestMode(i);
		j = ISP1581_GetTestMode();
		if(j != i)
		{
			cprintf("test testmode register failed, write = %x, read = %x, \r\n", i, j);
			key2go();
			error = 1;
			if(key2go() == 'g')
				return;
		}

		i <<= 1;
	}

	if(error)
		cprintf("test testmode register failes/partial passed\r\n");
	else
		cprintf("test testmode register passed\r\n");
}

unsigned char key2go(void)
{
		unsigned char key;
#ifdef debug
		debug_out(debug_code_waitkey);
#endif
		key = 0;
		cprintf("\rpress 'G' skip, 'C' next, 'R' repeat. 'ESC' Quit\r");
		while(key != 'g' && key != 'G' \
				&& key != 'c' && key != 'C' \
				&& key != 'r' && key != 'R' \
				&& key != 0x1b \
				)
		{
			if(bioskey(1))
			key = (bioskey(0)&0xff);
//			cprintf("key=%x, ", key);
		}// error been read

		if(key == 'g' || key == 'G')
			return 'g';
		else if(key == 'c' || key == 'C')
			return 'c';
		else if(key == 0x1b)
			return 0x1b;
		else
			return 'r';
}

unsigned char key2break(void)
{
		unsigned char key;
		key = 0;
		if(bioskey(1))
			key = (bioskey(0)&0xff);

		if(key == 0x1b) // 'ESC" pressed.
			return true;
		else
			return false;
}

void bus_direction(void)
{
	unsigned char go = 1;
	unsigned short i= 1;
	while(go)
	{
		outport(0x368, i);
		if (i == 0x8000)
			i = 1;
		else
			i <<= 1;
		cprintf("%x,",i);
		if(key2break())
			return;
	}
}

void test_poweronvalue(void)
{
	unsigned char cb, cbd, i;
	unsigned short cs, csd, j;
	textattr(0x07);
	cprintf("\rStart to test register default value                              \r\n");
	cprintf("Address byte                  ");
		cb = ISP1581_GetAddress();
		cbd = 0;
		PrintResult(cb, cbd);
	cprintf("mode                          ");
		cb = ISP1581_GetMode();
		cbd = 0x0;
		PrintResult(cb, cbd);
	cprintf("Interrupt Config              ");;
		cb = ISP1581_GetIntConfig();
		cbd = 0xfc;
		PrintResult(cb, cbd);
	cprintf("Interrupt EN High             ");
		cs = ISP1581_GetIntEnableHigh();
		csd = 0;
		PrintResults(cs, csd);
	cprintf("Interrupt EN Low              ");
		cs = ISP1581_GetIntEnableLow();
		csd = 0;
		PrintResults(cs, csd);
	cprintf("Interrupt Reg High            ");
		cs = ISP1581_ReadInterruptRegisterHigh();
		csd = 0;
		PrintResults(cs, csd);
	cprintf("Interrupt Reg Low             ");
		cs = ISP1581_ReadInterruptRegisterLow();
		csd = 0;
		PrintResults(cs, csd);
	cprintf("Endpoint Index                ");
		cb = ISP1581_GetEPIndex();
		cbd = 0;
		PrintResult(cb, cbd);
	cprintf("EP Short Packet               ");
		cs = ISP1581_CheckShortPKT();
		csd = 0;
		PrintResult(cs, csd);
	cprintf("Device ID                     ");
		cs = ISP1581_ReadChipID();
		csd = 0x1581;
		PrintResults(cs, csd);
	cprintf("Frame Number                  ");
		cs = ISP1581_ReadCurrentFrameNumber();
		csd = 0;
		PrintResults(cs, csd);
	cprintf("Scratch Register              ");
		cs = ISP1581_GetDataFromChipRam();
		csd = 0;
		PrintResults(cs, csd);
	cprintf("Test Mode                     ");
		cb = ISP1581_GetTestMode();
		cbd = 0;
		PrintResult(cb, cbd);
	cprintf("Skip DMA command & unlock command\r\n");
	cprintf("DMA Counter High              ");
		cs = ISP1581_GetDMACounterHigh();
		csd = 0;
		PrintResults(cs, csd);
	cprintf("DMA Counter Low               ");
		cs = ISP1581_GetDMACounterLow();
		csd = 0;
		PrintResults(cs, csd);
	cprintf("DMA Config register           ");
		cs = ISP1581_GetDMAConfig();
		csd = 0;
		PrintResults(cb, cbd);
	cprintf("DMA Hardware                  ");
		cb = ISP1581_GetDMAHDCfg();
		cbd = 0;
		PrintResult(cb, cbd);
	cprintf("DMA Strober Timing            ");
		cb = ISP1581_GetDMAStrobeTiming();
		cbd = 0;
		PrintResult(cb, cbd);
	cprintf("DMA Interrupt Reg             ");
		cs = ISP1581_GetDMAInt();
		csd = 0;
		PrintResults(cs, csd);
	cprintf("DMA Interrupt Enable          ");
		cs = ISP1581_GetDMAIntMask();
		csd = 0;
		PrintResults(cs, csd);
	cprintf("DMA Endpoing Number           ");
		cb = ISP1581_GetDMAEP();
		cbd =0;
		PrintResult(cb, cbd);
	cprintf("DMA State Byte                ");
		cs = ISP1581_GetDMAState();
		csd = 0;
		PrintResults(cs, csd);

	key2go();
	cprintf("\rStart to test task files register default value			                  \r\n");
	j = 0x1f0;
	while(j <= 0x3f7)
	{
		cbd = 0;
		cprintf("TaskFile Register  %03x        ", j);
			cb = ISP1581_GetTaskFile(j);
			PrintResult(cb, cbd);
		if(j < 0x1f7)
			j++;
		else if(j == 0x1f7)
			j = 0x3f6;
		else
			j++;
	}

	key2go();
	cprintf("\rStart to test endpoint register default value					         \r\n");
	i = 0;
	for(i=0; i<= 0xf;i++)
	{
		if(i == 0)
		{	IndexEPReg(i + 0x20);
			key2go();
		}

		IndexEPReg(i);
		key2go();
	}
	return;
}

void IndexEPReg(unsigned char epindex)
{
	unsigned char i, cb, cbd, cs, csd;
	textattr(0x06);
	cprintf("SetEP Index is                ");
	textattr(0x07);
	ISP1581_SetEPIndex(epindex);
	i = ISP1581_GetEPIndex();
		PrintResult(i, epindex);
	cprintf("Control Function              ");
		outport(aport, rega_epctlfc);
		cb = inport(dport);
		cbd = 0;
		PrintResult(cb, cbd);
	cprintf("Data Lenght                   ");
		outport(aport, rega_dcount);
		cs = inport(dport);
		csd = 0;
		PrintResult(cs, csd);
	cprintf("Data Port                     ");
		outport(aport, rega_dport);
		cs = inport(dport);
		csd = 0;
		PrintResult(cs, csd);
	cprintf("EP Max Pkt Length             ");
		outport(aport, rega_epmaxsize);
		cs = inport(dport);
		csd = 0;
		PrintResult(cs, csd);
	cprintf("EP Type                       ");
		outport(aport, rega_eptype);
		cs = inport(dport);
		csd = 0;
		PrintResult(cs, csd);
	return;
}

void PrintResult(unsigned char cb, unsigned char cbd)
{

	if(cb == cbd)
		cprintf("%02x", cb);
	else
	{
		textattr(0x85);
		cprintf("%02x", cb);
		textattr(0x07);
	}
	cprintf("       %x                           \r\n", cbd);
	return;
}

void PrintResults(unsigned short cs, unsigned short csd)
{
	if(cs == csd)
		cprintf("%04x", cs);
	else
	{
		textattr(0x85);
		cprintf("%04x", cs);
		textattr(0x07);
	}
	cprintf("     %x                             \r\n", csd);
	return;
}

void regtest(void)
{
	cprintf("Perform chipid test!\r");
	test_chipid();
	cprintf("                                                                 \r");

	cprintf("Perform address enable register test!\r");
	test_addren();
	cprintf("                                                                 \r");

	cprintf("Perform enpoint type test!\r");
	test_eptype();
	cprintf("                                                                 \r");

	cprintf("Perform endpoint max size test!\r");
	test_epmaxsize();
	cprintf("                                                                 \r");

	cprintf("Perform mode register test!\r");
	test_mode();
	cprintf("                                                                 \r");

	cprintf("Perform interrupt config test!\r");
	test_intcfg();
	cprintf("                                                                 \r");

	cprintf("Perform interrupt mask test!\r");
	test_intmask();
	cprintf("                                                                 \r");

	cprintf("Perform dma endpoint test!\r");
	test_dmaep();
	cprintf("                                                                 \r");

	cprintf("Perform data counter test!\r");
	test_dcount();
	cprintf("                                                                 \r");

	cprintf("Perform dma counter test!\r");
	test_dmacount();
	cprintf("                                                                 \r");

	cprintf("Perform dma configuration test!\r");
	test_dmacfg();
	cprintf("                                                                 \r");

	cprintf("Perform dms hardware config test!\r");
	test_dmahdcfg();
	cprintf("                                                                 \r");

	cprintf("Perform dma interrupt mask test!\r");
	test_dmaintmask();
	cprintf("                                                                 \r");

	cprintf("Perform dma endpoint number test!\r");
	test_dmaep();
	cprintf("                                                                 \r");

	cprintf("Perform scratch test!\r");
	test_scratch();
	cprintf("                                                                 \r");

	cprintf("Perform testmode register test!\r");
	test_testmode();
	cprintf("                                                                 \r");

	return;
}

void softreset_1581(void)
{
	unsigned char i=0,j,k;
	cprintf("SOFT RESET ISP1581, *&%$#@!_+(*");
	for(i = 0; i <15; i++)
	{
		for(j = 0; j < 255; j++)
		{
			for(k = 0; k < 255; k++)
			{}
		}
		cprintf(".");
	}
	cprintf("RESET OK!\r\n");
}

void hardware_reset(void)
{
	unsigned char i=0,j,k;
	cprintf("HARDWARE RESET ISP1581, !@@#%$#@!!@@#$!_^");
	outport(ctlport, 0x0);
	for(i = 0; i <17; i++)
	{
		for(j = 0; j < 255; j++)
		{
			for(k = 0; k < 255; k++)
			{}
		}
		cprintf(".");

		if(i == 14)
			outport(ctlport, ctlportb_hdreset);
	}
	cprintf("RESET OK!\r\n");
}

⌨️ 快捷键说明

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