?? videosetup.cpp
字號(hào):
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_VCLKSTRTSTOP = (ulVLinesTotal<<RASTER_START_SHIFT) | (ulVLinesTotal<<RASTER_STOP_SHIFT);
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_HCLKSTOTAL = ulHClocksTotal;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_HSYNCSTRTSTOP = (ulHSyncStart<<RASTER_START_SHIFT) | (ulHSyncStop<<RASTER_STOP_SHIFT);
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_HBLANKSTRTSTOP = (ulHBlankStart<<RASTER_START_SHIFT) | (ulHBlankStop<<RASTER_STOP_SHIFT);
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_HACTIVESTRTSTOP = (pStartStop->ulHActiveStart<<RASTER_START_SHIFT) |
(pStartStop->ulHActiveStop<<RASTER_STOP_SHIFT);
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_HCLKSTRTSTOP = (ulHClocksTotal<<RASTER_START_SHIFT) | (ulHClocksTotal<<RASTER_STOP_SHIFT);
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_LINECARRY = 0x00;
*RASTER_SCRNLINES = ulHeight -1 ;
*RASTER_LINELENGTH = (ulWidth * ulColorDepth) / 32 -1;
*RASTER_VLINESTEP = (ulWidth * ulColorDepth) / 32;
*RASTER_VIDSCRNPAGE = ulPhysicalFramePointer & VIDSCRNPAGE_MASK;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_VIDEOATTRIBS = VIDEOATTRIBS_INVCLK | VIDEOATTRIBS_DATEN | VIDEOATTRIBS_SYNCEN |
VIDEOATTRIBS_PCLKEN | VIDEOATTRIBS_EN | VIDEOATTRIBS_SDSEL_CS3;
}
//****************************************************************************
// GenericDisplaySetup
//****************************************************************************
// Uses the registry settings to setup the display.
//
//
void GenericDisplaySetup
(
Ep931xRegistrySettings *pRegSetting,
ULONG ulPhysicalFramePointer,
StartStop *pStartStop
)
{
ULONG ulRequestedVideoFreq;
ULONG ulVidDiv, ulVid1Div, ulVid2Div;
ULONG ulVid1Freq, ulVid2Freq;
ULONG ulTemp;
ULONG ulDevCfg;
//
// If we are using a Conexant CX25871 video encoder perform the
// following setup.
//
if(pRegSetting->fUseCX25871)
{
InitializeCX25871For640x480NTSC();
}
//
// Read in the device configuration register.
//
ulDevCfg = *CSC_DEVCFG;
//
// If we are using an external video clock then don't worry about calculating
// a video divisor.
//
if(pRegSetting->fExtVideoClock)
{
ulDevCfg |= DEVCFG_EXVC;
ulVidDiv = 0;
}
else
{
//
// Calculate the proper video clock based on the refresh rate, number of lines
// and pixels per line.
//
ulRequestedVideoFreq = ( pRegSetting->ulFrequency * pRegSetting->ulHClocksTotal *
pRegSetting->ulVLinesTotal);
CalculateClosestFreq
(
PLL1_CLOCK,
ulRequestedVideoFreq,
&ulVid1Freq,
&ulVid1Div
);
CalculateClosestFreq
(
PLL2_CLOCK,
ulRequestedVideoFreq,
&ulVid2Freq,
&ulVid2Div
);
//
// See which is closer, Video rate 1 or video rate 2.
//
if(abs(ulVid1Freq - ulRequestedVideoFreq) <abs(ulVid2Freq - ulRequestedVideoFreq))
{
ulVidDiv =ulVid1Div;
}
else
{
ulVidDiv =ulVid2Div | VIDDIV_PSEL;
}
ulVidDiv |= VIDDIV_ESEL;
}
//
// Change to Raster on P3, set/clear the EXVC bit and clear RAS.
//
HalWriteCommonReg
(
CSC_DEVCFG,
DEVCFG_EXVC | DEVCFG_RAS | DEVCFG_RASONP3,
ulDevCfg | DEVCFG_RASONP3
);
//
// Set the proper video divsor value.
//
HalWriteCommonReg(CSC_VIDDIV, 0xFFFFFFFF, VIDDIV_VENA | ulVidDiv);
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_VLINESTOTAL = pRegSetting->ulVLinesTotal;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_VSYNCSTRTSTOP = pRegSetting->ulVSyncStartStop;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_VBLANKSTRTSTOP = pRegSetting->ulVBlankStartStop;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_VACTIVESTRTSTOP = pRegSetting->ulVActiveStartStop;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_VCLKSTRTSTOP = pRegSetting->ulVClockStartStop;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_HCLKSTOTAL = pRegSetting->ulHClocksTotal;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_HSYNCSTRTSTOP = pRegSetting->ulHSyncStartStop;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_HBLANKSTRTSTOP = pRegSetting->ulHBlankStartStop;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_HACTIVESTRTSTOP = pRegSetting->ulHActiveStartStop;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_HCLKSTRTSTOP = pRegSetting->ulHClockStartStop;
//
// Calculate the active start stop values from the raster settings.
//
pStartStop->ulVActiveStop = (pRegSetting->ulVActiveStartStop & RASTER_STOP_MASK) >> RASTER_STOP_SHIFT;
pStartStop->ulVActiveStart= (pRegSetting->ulVActiveStartStop & RASTER_START_MASK) >> RASTER_START_SHIFT;
pStartStop->ulHActiveStop = (pRegSetting->ulHActiveStartStop & RASTER_STOP_MASK) >> RASTER_STOP_SHIFT;
pStartStop->ulHActiveStart= (pRegSetting->ulHActiveStartStop & RASTER_START_MASK) >> RASTER_START_SHIFT;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_LINECARRY = 0x00;
//*RASTER_SCRNLINES = pRegSetting->ulScreenHeight ;
*RASTER_SCRNLINES = pRegSetting->ulScreenHeight - 1;
*RASTER_LINELENGTH = (pRegSetting->ulScreenWidth * pRegSetting->ulColorDepth) / 32 -1;
*RASTER_VLINESTEP = (pRegSetting->ulScreenWidth * pRegSetting->ulColorDepth) / 32;
*RASTER_VIDSCRNPAGE = ulPhysicalFramePointer & VIDSCRNPAGE_MASK;
*RASTER_REALITI_SWLOCK = 0xaa;
*RASTER_VIDEOATTRIBS = VIDEOATTRIBS_DATEN | VIDEOATTRIBS_SYNCEN |
VIDEOATTRIBS_EN | VIDEOATTRIBS_SDSEL_CS3 |
((!pRegSetting->fExtVideoClock)?VIDEOATTRIBS_PCLKEN: 0) |
(pRegSetting->fInvertPixelClock? VIDEOATTRIBS_INVCLK: 0);
//
// Set the GPIO pin so that the screen wakes up.
//
if(pRegSetting->fSleepSignalActive)
{
ulTemp = *GPIO_PADDR;
*GPIO_PADDR = ulTemp | 0x2;
ulTemp = *GPIO_PADR;
*GPIO_PADR = ulTemp | 0x2;
}
}
//****************************************************************************
// ReadRegistryValue
//****************************************************************************
// Read the Registry Value
//
//
DWORD ReadRegistryValue(HKEY hKey, PTSTR szValueName, DWORD dwDefault)
{
LONG lStatus;
ULONG ulReturnValue;
DWORD dwValType;
DWORD dwValLen;
lStatus = RegQueryValueEx( hKey, szValueName, NULL, &dwValType, (PBYTE)&ulReturnValue, &dwValLen);
if ((lStatus != ERROR_SUCCESS) || (dwValType != REG_DWORD))
{
ulReturnValue = dwDefault;
}
return ulReturnValue;
}
//****************************************************************************
// GetDisplayRegistrySettings
//****************************************************************************
// Gets the display settings from the registry.
//
// See the platform.reg for example registry settings.
//
//
void GetDisplayRegistrySettings
(
Ep931xRegistrySettings *pRegSetting
)
{
HKEY hKey;
//
// remove our registry entry "claiming" this particular card
//
if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, DRIVER_REGISTRY_STRING, 0, 0, &hKey) != ERROR_SUCCESS)
{
return;
}
//
// Get the values from the registry.
//
pRegSetting->ulScreenWidth = ReadRegistryValue(hKey, REG_VALUE_SCREENWIDTH , 640 );
pRegSetting->ulScreenHeight = ReadRegistryValue(hKey, REG_VALUE_SCREENHEIGHT , 480 );
pRegSetting->ulFrequency = ReadRegistryValue(hKey, REG_VALUE_FREQUENCY , 60 );
pRegSetting->ulColorDepth = ReadRegistryValue(hKey, REG_VALUE_COLORDEPTH , 16 );
pRegSetting->ulSetDirectly = ReadRegistryValue(hKey, REG_VALUE_SETDIRECTLY , 0 );
pRegSetting->ulVLinesTotal = ReadRegistryValue(hKey, REG_VALUE_VLINESTOTAL , -1 );
pRegSetting->ulVSyncStartStop = ReadRegistryValue(hKey, REG_VALUE_VSYNCSTARTSTOP , -1 );
pRegSetting->ulVActiveStartStop = ReadRegistryValue(hKey, REG_VALUE_VACTIVESTARTSTOP , -1 );
pRegSetting->ulVBlankStartStop = ReadRegistryValue(hKey, REG_VALUE_VBLANKSTARTSTOP , 0 );
pRegSetting->ulVClockStartStop = ReadRegistryValue(hKey, REG_VALUE_VCLOCKSTARTSTOP , -1 );
pRegSetting->ulHClocksTotal = ReadRegistryValue(hKey, REG_VALUE_HCLOCKSTOTAL , -1 );
pRegSetting->ulHSyncStartStop = ReadRegistryValue(hKey, REG_VALUE_HSYNCSTARTSTOP , -1 );
pRegSetting->ulHActiveStartStop = ReadRegistryValue(hKey, REG_VALUE_HACTIVESTARTSTOP , -1 );
pRegSetting->ulHBlankStartStop = ReadRegistryValue(hKey, REG_VALUE_HBLANKSTARTSTOP , 0 );
pRegSetting->ulHClockStartStop = ReadRegistryValue(hKey, REG_VALUE_HCLOCKSTARTSTOP , -1 );
pRegSetting->fInvertPixelClock = ReadRegistryValue(hKey, REG_VALUE_INVERTPIXELCLOCK , 1 );
pRegSetting->fSleepSignalActive = ReadRegistryValue(hKey, REG_VALUE_SLEEPSIGNALACTIVE, 0 );
pRegSetting->fUseCX25871 = ReadRegistryValue(hKey, REG_VALUE_USECX25871 , 0 );
pRegSetting->fExtVideoClock = ReadRegistryValue(hKey, REG_VALUE_EXT_VIDEO_CLOCK , 0 );
//
// Check to make sure that all of the important registry settings are there.
//
if( pRegSetting->ulVLinesTotal == -1 ||
pRegSetting->ulVSyncStartStop == -1 ||
pRegSetting->ulVActiveStartStop == -1 ||
// pRegSetting->ulVBlankStartStop == -1 ||
pRegSetting->ulVClockStartStop == -1 ||
pRegSetting->ulHClocksTotal == -1 ||
pRegSetting->ulHSyncStartStop == -1 ||
pRegSetting->ulHActiveStartStop == -1 ||
// pRegSetting->ulHBlankStartStop == -1 ||
pRegSetting->ulHClockStartStop == -1)
{
pRegSetting->ulSetDirectly = 0;
}
RegCloseKey( hKey);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -