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

📄 modetbl.cpp

📁 Sm501 VGA芯片wince下驱动代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	value = FIELD_SET(value, GPIO_MUX_HIGH, 57, CRT_ZVPORT);
	value = FIELD_SET(value, GPIO_MUX_HIGH, 56, CRT_ZVPORT);
	POKE_32(GPIO_MUX_HIGH, value);
*/
	//RETAILMSG(1,(TEXT("SMI - Modetbl.cpp - WaitForVBlank---\n")));
	//WaitForVBlank();
	//WaitForVBlank();
	//WaitForVBlank();
	//WaitForVBlank();
	//RETAILMSG(1,(TEXT("SMI - Modetbl.cpp - WaitForVBlank+++\n")));

	// Configure PCI Burst
	//value = peekRegisterDWord(SYSTEM_CTRL);
	//value = FIELD_SET(value, SYSTEM_CTRL, PCI_BURST, ENABLE);
	//value = FIELD_SET(value, SYSTEM_CTRL, PCI_MASTER, START);
	//value = FIELD_SET(value, SYSTEM_CTRL, PCI_BURST_READ, ENABLE);
	//value = FIELD_SET(value, SYSTEM_CTRL, PCI_SLAVE_BURST_READ_SIZE, 8);
	//value = FIELD_SET(value, SYSTEM_CTRL, LATENCY_TIMER, ENABLE);
	//value = 0x22008030;
	//pokeRegisterDWord(SYSTEM_CTRL, value);

	//RETAILMSG(1,(TEXT("SMI - Modetbl.cpp - PCIBurst+++\n")));

	//--------------------------------------------------------------------
	//--------------------------------------------------------------------
	//Memory clock setting and Enginer clock setting - mill.chen -20070119
	//--------------------------------------------------------------------
	//--------------------------------------------------------------------
		value = peekRegisterDWord(POWER_MODE0_CLOCK);
		switch(m_SMISettings.m_EngineClock)
		{
			case 0://336MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 0);
				break;
			case 1://288MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 0);
				break;
			case 2://168MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 1);
				break;
			case 3://144MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 1);
				break;
			case 4://112MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 0);
				break;
			case 5://96MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 0);
				break;
			case 6://84MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 2);
				break;
			case 7://72MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 2);
				break;
			case 8://56MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 1);
				break;
			case 9://48MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 1);
				break;
			case 10://42MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 3);
				break;
			case 11://36MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 3);
				break;
			case 12://28MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 2);
				break;
			case 13://24MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 2);
				break;
			case 14://21MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 4);
				break;
			case 15://18MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 4);
				break;
			case 16://14MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 3);
				break;
			case 17://7MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 4);
				break;
			case 18://6MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 4);
				break;
			case 19://3MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 5);
				break;
			default:
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 2);
				break;
		}
		switch(m_SMISettings.m_MemoryClock)
		{
			case 0://336MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 0);
				break;
			case 1://288MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 0);
				break;
			case 2://168MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 1);
				break;
			case 3://144MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 1);
				break;
			case 4://112MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 0);
				break;
			case 5://96MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 0);
				break;
			case 6://84MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 2);
				break;
			case 7://72MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 2);
				break;
			case 8://56MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 1);
				break;
			case 9://48MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 1);
				break;
			case 10://42MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 3);
				break;
			case 11://36MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 3);
				break;
			case 12://28MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 2);
				break;
			case 13://24MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 2);
				break;
			case 14://21MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 4);
				break;
			case 15://18MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 4);
				break;
			case 16://14MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 3);
				break;
			case 17://7MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 4);
				break;
			case 18://6MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 4);
				break;
			case 19://3MHZ
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 5);
				break;
			default:
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
				value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 1);
				break;
		}
		pokeRegisterDWord(POWER_MODE0_CLOCK, value);

    //------------------------------------------------------------
	//-----------------------------------------------------------
	//use the 502 PLL3 -- mill.chen
	//--------------------------------------------------------------- 
	//--------------------------------------------------------------
	if(rev() > 0xB0)
	{
		//find vesamode
		vesaMode = findMode(mode_table,	m_SMISettings.m_dwCxPanel, m_SMISettings.m_dwCyPanel,
					m_pMode->frequency);
		//change to mode0
		value = peekRegisterDWord(POWER_MODE_CTRL);
		value = FIELD_SET(value, POWER_MODE_CTRL, MODE, MODE0);
		pokeRegisterDWord(POWER_MODE_CTRL, value);
		//configue 0x74  mode_table
		value = 0;
		value = FIELD_VALUE(value, SYSTEM_PLL3_CLOCK, M, vesaMode->M);
		value = FIELD_VALUE(value, SYSTEM_PLL3_CLOCK, N, vesaMode->N);
		if(vesaMode->bit15 == true)
		  value = FIELD_SET(value, SYSTEM_PLL3_CLOCK, DIVIDE, 2);
	    else
		  value = FIELD_SET(value, SYSTEM_PLL3_CLOCK, DIVIDE, 1);
		value = FIELD_SET(value, SYSTEM_PLL3_CLOCK, INPUT, CRYSTAL);
		value = FIELD_SET(value, SYSTEM_PLL3_CLOCK, POWER, ON);
		pokeRegisterDWord(SYSTEM_PLL3_CLOCK, value);
		//configue 0x44
		value = peekRegisterDWord(POWER_MODE0_CLOCK);
	    value &= 0x00FFFFFF	;
		if(vesaMode->bit31 == true)
			value = FIELD_SET(value, POWER_MODE0_CLOCK, PLL3_P1XCLK	, ENABLE);
		else
			value = FIELD_SET(value, POWER_MODE0_CLOCK, PLL3_P1XCLK	, DISABLE);
		value = FIELD_SET(value, POWER_MODE0_CLOCK, PLL3, ENABLE);
		//Memory clock to 166MHZ and Enginer clock to 83MHZ
  //      value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
		//value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
		//value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 2);
		//value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
		//value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
		//value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 1);
		pokeRegisterDWord(POWER_MODE0_CLOCK, value);
		//configue 0x080024 and 0x080028 panel H-clock
		value = 0;
		value = FIELD_VALUE(value, PANEL_HORIZONTAL_TOTAL, TOTAL, vesaMode->horizontal_total-1); 
		value = FIELD_VALUE(value, PANEL_HORIZONTAL_TOTAL, DISPLAY_END, vesaMode->horizontal_display_end-1); 
		pokeRegisterDWord(PANEL_HORIZONTAL_TOTAL, value);
		value = 0;
		value = FIELD_VALUE(value, PANEL_HORIZONTAL_SYNC, WIDTH, vesaMode->horizontal_sync_width);
		value = FIELD_VALUE(value, PANEL_HORIZONTAL_SYNC, START, vesaMode->horizontal_sync_start-1);
		pokeRegisterDWord(PANEL_HORIZONTAL_SYNC, value);
        //configue 0x08002c and 0x080030 panel V-clock
		value = 0;
		value = FIELD_VALUE(value, PANEL_VERTICAL_TOTAL, TOTAL, vesaMode->vertical_total-1); 
		value = FIELD_VALUE(value, PANEL_VERTICAL_TOTAL, DISPLAY_END, vesaMode->vertical_display_end-1); 
		value = 0;
		value = FIELD_VALUE(value, PANEL_VERTICAL_SYNC, HEIGHT, vesaMode->vertical_sync_height);
		value = FIELD_VALUE(value, PANEL_VERTICAL_SYNC, START, vesaMode->vertical_sync_start-1);
		pokeRegisterDWord(PANEL_VERTICAL_SYNC, value);
		//config polirity
        value = peekRegisterDWord(PANEL_DISPLAY_CTRL);
		value = FIELD_VALUE(value, PANEL_DISPLAY_CTRL, HSYNC_PHASE, vesaMode->horizontal_sync_polarity);
		value = FIELD_VALUE(value, PANEL_DISPLAY_CTRL, VSYNC_PHASE, vesaMode->vertical_sync_polarity);
		pokeRegisterDWord(PANEL_DISPLAY_CTRL, value);
		//PCI burst enable
		value = peekRegisterDWord(SYSTEM_CTRL);
		value = FIELD_SET(value, SYSTEM_CTRL, PCI_BURST, ENABLE);
		pokeRegisterDWord(SYSTEM_CTRL, value);
       	
	}

}

⌨️ 快捷键说明

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