?? mstar.lst
字號:
1160 1 #if VGA_ENABLE
1161 1 if( IsVGAInUse())
1162 1 {
1163 2 if( g_bInputTimingChangeFlag || SyncLossState() || UnsupportedModeFlag )
1164 2 return FALSE;
1165 2 }
1166 1 else // Digital port
1167 1 #endif
C51 COMPILER V8.18 MSTAR 09/29/2009 23:58:02 PAGE 20
1168 1 {
1169 2 if( (SIG_NONE == g_VdInfo.ucVideoSystem)
1170 2 ||(0 ==(g_VdInfo.wVideoStatus&VD_HSYNC_LOCKED)))
1171 2 return FALSE;
1172 2 }
1173 1 return TRUE;
1174 1 }
1175
1176
1177 void SetOutputTimingAndWindow( BYTE ucOutputTimingCtl )
1178 {
1179 1 // Get input sync info
1180 1 if( IsSrcHasSignal() || (ucOutputTimingCtl&OUTPUT_SNOW) ) // Has signal or snow
1181 1 {
1182 2 GetInputSignalHV();
1183 2 }
1184 1 else // No signal or Freerun
1185 1 {
1186 2 g_InOutCtl.inOutVFreq = 60;
1187 2
1188 2 if( g_InOutCtl.inOutVFreq == 50 )
1189 2 {
1190 3 g_InOutCtl.inHFreq = 15625;
1191 3 g_InOutCtl.inVTotal = 625;
1192 3 }
1193 2 else // 60 Hz
1194 2 {
1195 3 g_InOutCtl.inHFreq = 15734;
1196 3 g_InOutCtl.inVTotal = 525;
1197 3 }
1198 2 g_InOutCtl.inHPeriod = MST_CLOCK_HZ/g_InOutCtl.inHFreq;
1199 2 }
1200 1
1201 1 msProgWindow( ucOutputTimingCtl );
1202 1 msSetOutputTiming( ucOutputTimingCtl ); // This function must after msProgWindow()
1203 1
1204 1 #if (PANEL_TYPE>=PanelSHARP08_DT) //for digital panel only
if(ucOutputTimingCtl&OUTPUT_SNOW) // Has signal or snow
msWriteRegsTbl(tTVSnowModeTbl);
#endif
1208 1 }
1209
1210 void msSetScaler(void)
1211 {
1212 1 #if (!WidePanel)
msLoadModeIndexTBL(tModeIndexTbl);
#else
1215 1
1216 1 BYTE ucBank;
1217 1 WORD ulNewHsize,uwInput_H_Resol,uwTemp;
1218 1 DWORD ulH_Scaling_Factor, ulTemp;
1219 1
1220 1 ucBank = msReadByte(BK0_00_REGBK); // store bank
1221 1 msWriteByte( BK0_00_REGBK, REG_BANK_SCALER); // bank 1
1222 1
1223 1 if (g_VideoSetting.Scaling==Scaling_Full)
1224 1 {
1225 2 #if VGA_ENABLE
1226 2 if(IsVGAInUse())
1227 2 SetScalingRatio( g_InOutCtl.bInterlace );
1228 2 else
1229 2 #endif
C51 COMPILER V8.18 MSTAR 09/29/2009 23:58:02 PAGE 21
1230 2 SetScalingRatio( 1 );
1231 2 msWriteWord(BK0_49_SIHST_H, PanelHStart); // horizontal DE start
1232 2 msWriteWord(BK0_43_HFDEST_H, PanelHStart); // horizontal DE start
1233 2 msWriteWord(BK0_4D_SIHEND_H, (PanelHStart + PanelWidth - 1)); // Image H end
1234 2 msWriteWord(BK0_47_HFDEEND_H, (PanelHStart+ PanelWidth - 1)); // horizontal DE end
1235 2
1236 2 msLoadModeIndexTBL(tModeIndexTbl);
1237 2 //printMsg("test 169");
1238 2 }
1239 1 else
1240 1 {
1241 2 msWriteByte(BK0_38_NLDTI, 0x00); // Disable Nonlinear scaling function
1242 2
1243 2 //ulNewHsize=PANEL_DOT_HEIGHT;//X*4/3=>4:3,X/3=>3dot in 1 pixel
1244 2 //ulNewHsize=ulNewHsize*PanelHeight;
1245 2 //ulNewHsize=ulNewHsize/PANEL_DOT_WIDTH;
1246 2 //ulNewHsize=(ulNewHsize*SCAL_RATIO_NUMERATOR)/(SCAL_RATIO_DENOMINATOR*3);
1247 2 ulNewHsize=PanelWidth*3/4;
1248 2
1249 2 uwInput_H_Resol = msReadWord(BK0_0C_SPRHDC_H);//Get Input H resolution
1250 2
1251 2 //New start point
1252 2 uwTemp = PanelHStart+ (PanelWidth- ulNewHsize )/2;
1253 2 msWriteWord(BK0_49_SIHST_H,uwTemp);//new Start //BK0_48_SIHST_L, BK0_49_SIHST_H
1254 2 msWriteWord(BK0_43_HFDEST_H,uwTemp);
1255 2
1256 2 // New end point
1257 2 msWriteWord(BK0_4D_SIHEND_H,uwTemp+ulNewHsize);//new End //BK0_4C_SIHEND_L, BK0_4D_SIHEND_H
1258 2 msWriteWord(BK0_47_HFDEEND_H,uwTemp+ulNewHsize);
1259 2
1260 2 // Get new scaling factor
1261 2 ulH_Scaling_Factor = (DWORD)ulNewHsize <<20 ;
1262 2 ulTemp = (DWORD)uwInput_H_Resol*(SCAL_CUTOFF_RESOL - SCAL_CUTOFF_H_PER);
1263 2 ulH_Scaling_Factor /= (ulTemp/SCAL_CUTOFF_RESOL);
1264 2
1265 2 // Mask the front and back block
1266 2 // msWriteWord(BK0_5D_FRAME_COLOR_2,0);//BK0_5C_FRAME_COLOR_1, BK0_5D_FRAME_COLOR_2
1267 2
1268 2 ulH_Scaling_Factor += 0xC00;//0xc00 get from fine tune
1269 2
1270 2 msWriteWord(BK0_31_SRH_M,(unsigned int)(ulH_Scaling_Factor&0xFFF000) );//BK0_30_SRH_L,BK0_31_SRH_M
1271 2 msWriteByte(BK0_32_SRH_H,(unsigned char)((ulH_Scaling_Factor&0x0F0000)>>16)+0xC0);
1272 2 //printMsg("test 43");
1273 2 }
1274 1
1275 1 msWriteByte( BK0_00_REGBK, ucBank); // bank 1
1276 1 #endif
1277 1 }
1278
1279
1280 void msSetLineBufferClock( BYTE ucModeIdx, BYTE ucOutputClock )
1281 {
1282 1 BYTE ucInputClock;
1283 1 BYTE ucBank;
1284 1 BYTE ucBk0_36_val = 0; // Use default clock
1285 1
1286 1 ucInputClock = ((float)GetStdModeHTotal(ucModeIdx)*GetStdModeHFreq(ucModeIdx))/10000;
1287 1
1288 1 #ifndef D800480PANEL
1289 1 if( ucInputClock > 50 )
1290 1 ucBk0_36_val = 0x80; // Using input clock
1291 1 else
C51 COMPILER V8.18 MSTAR 09/29/2009 23:58:02 PAGE 22
1292 1 #endif
1293 1 ucInputClock = 50;
1294 1
1295 1 if( ucOutputClock > ucInputClock )
1296 1 ucBk0_36_val = 0x40; // Using output clock
1297 1
1298 1 ucBank = msReadByte( BK0_00_REGBK);
1299 1 msWriteByte( BK0_00_REGBK, 0 );
1300 1 msWriteByteMask( BK0_36_VDSUSG, ucBk0_36_val, 0xC0 );
1301 1 msWriteByte( BK0_00_REGBK, ucBank );
1302 1 }
1303
1304 void msSetOutputFreeRunClock( BYTE ucVFreq )
1305 {
1306 1 BYTE ucBank = msReadByte( BK0_00_REGBK);
1307 1
1308 1 msWriteByte( BK0_00_REGBK, REG_BANK_SCALER);
1309 1
1310 1 #if PANEL_ANALOG_TCON
1311 1 if( ucVFreq != 60 )
1312 1 msWrite3Bytes( BK0_27_OPL_SET2, PANEL_FREE_RUN_DCLK_FACTOR*60/ucVFreq/3 );
1313 1 else
1314 1 msWrite3Bytes( BK0_27_OPL_SET2, PANEL_FREE_RUN_DCLK_FACTOR/3 );
1315 1 #else
if( ucVFreq != 60 )
msWrite3Bytes( BK0_27_OPL_SET2, PANEL_FREE_RUN_DCLK_FACTOR*60/ucVFreq );
else
msWrite3Bytes( BK0_27_OPL_SET2, PANEL_FREE_RUN_DCLK_FACTOR );
#endif
1321 1
1322 1 msSetLineBufferClock( MD_720x480_60I, PANEL_FREE_RUN_DCLK/1000000);
1323 1
1324 1 msWriteByte( BK0_00_REGBK, ucBank );
1325 1 }
1326
1327 void SetOutputClock( BYTE ucOutputTimingCtl )
1328 {
1329 1 //printf("\r\nmsSetOutputClock(%x)", ucOutputTimingCtl);
1330 1
1331 1 WatchDogClear();
1332 1
1333 1 if( ucOutputTimingCtl&OUTPUT_FREERUN )
1334 1 {
1335 2 msSetOutputFreeRunClock( 60 );
1336 2 }
1337 1 else
1338 1 {
1339 2 msLCDSetClock();
1340 2 }
1341 1
1342 1 WatchDogClear();
1343 1 }
1344
1345 void msLCDSetClock(void)
1346 {
1347 1 BYTE ucBank;
1348 1 XDATA WORD wInputHPeriod; // horizontal period
1349 1 XDATA WORD wOutputClock;
1350 1 XDATA DWORD dwClockFactor; // clock factor
1351 1
1352 1 wInputHPeriod = g_InOutCtl.inHPeriod;
1353 1
C51 COMPILER V8.18 MSTAR 09/29/2009 23:58:02 PAGE 23
1354 1 ucBank = msReadByte( BK0_00_REGBK);
1355 1 msWriteByte( BK0_00_REGBK, REG_BANK_SCALER );
1356 1
1357 1 if( IsVGAInUse() )
1358 1 {
1359 2 // get more accurate horzontal total for output
1360 2 if( wInputHPeriod > (MST_H_PERIOD_MASK / 16) ) // check overflow
1361 2 {
1362 3 wInputHPeriod = wInputHPeriod * 16;
1363 3 }
1364 2 else // general
1365 2 {
1366 3 WORD wVSyncTime; // VSync time
1367 3
1368 3 msWriteBit( BK0_E8_HSTOL, 1, _BIT6 ); // enable 16 line to calculate hsync period
1369 3
1370 3 wVSyncTime = ((WORD)msCalculateVSyncTime() * 3);
1371 3 Delay1ms(wVSyncTime); // delay for stable
1372 3
1373 3 wInputHPeriod = msGetHorizontalPeriod();
1374 3 if (abs((wInputHPeriod / 16) - g_wHorizontalPeriod) > 5)
1375 3 wInputHPeriod = g_wHorizontalPeriod * 16;
1376 3
1377 3 msWriteBit( BK0_E8_HSTOL, 0, _BIT6 ); // recovry one line to calculate hsync period
1378 3 Delay1ms(wVSyncTime);
1379 3 }
1380 2 }
1381 1 else
1382 1 {
1383 2 wInputHPeriod *= 16;
1384 2 }
1385 1
1386 1 // Cal output clock
1387 1 {
1388 2 // if expansion, chip will assume output clock is faster than input clock,
1389 2 #if (SCALING_FORMULA)
1390 2 wOutputClock = (((float)PanelMinHTotal * (PanelHeight-1) * MST_CLOCK_KHZ * 16) + 500) /
1391 2 ((float)wInputHPeriod * (g_WindowInfo.V_CapSize-1) * 1000);
1392 2 #else
wOutputClock = (((float)PanelMinHTotal * (PanelHeight) * MST_CLOCK_KHZ * 16) + 500) /
((float)wInputHPeriod * (g_WindowInfo.V_CapSize) * 1000);
#endif
1396 2 if( g_InOutCtl.bInterlace )
1397 2 {
1398 3 wOutputClock *= 2;
1399 3 }
1400 2 }
1401 1
1402 1 #if (SCALING_FORMULA)
1403 1 dwClockFactor = ((float)wInputHPeriod*(g_WindowInfo.V_CapSize-1)*524288ul*PANEL_MASTER_PLL_DIVIDER)/
1404 1 ((float)PanelMinHTotal*(PanelHeight-1)*16);
1405 1 #else
dwClockFactor = ((float)wInputHPeriod*(g_WindowInfo.V_CapSize)*524288ul*PANEL_MASTER_PLL_DIVIDER)/
((float)PanelMinHTotal*(PanelHeight)*16);
#endif
1409 1
1410 1 if( g_InOutCtl.bInterlace )
1411 1 {
1412 2 dwClockFactor /= 2;
1413 2 }
1414 1
1415 1 #if (PANEL_ANALOG_TCON)
C51 COMPILER V8.18 MSTAR 09/29/2009 23:58:02 PAGE 24
1416 1 dwClockFactor /= 3;
1417 1 #endif
1418 1
1419 1 printf("\r\nDclk %dMhz", (DClkFactor+dwClockFactor/2)/dwClockFactor/2);
1420 1
1421 1 msWrite3Bytes( BK0_27_OPL_SET2, dwClockFactor );
1422 1 msSetLineBufferClock( g_ucSrcModeIndex, wOutputClock );
1423 1 msWriteByte( BK0_00_REGBK, ucBank );
1424 1 }
1425
1426 #if(ENABLE_MONITOR_VTOTAL)
XDATA WORD g_wMsMonitorVTotal_OriginalVCapsize;
XDATA WORD g_wMsMonitorVTotal_LastVTotal;
XDATA WORD g_wMsMonitorVTotal_VTotalChangeCnt;
void msMonitorVTotal( BYTE ucFlag )
{
BYTE ucBank;
WORD wCurVTotal;
bit bVTotalChange = 0;
ucBank = msReadByte( BK0_00_REGBK);
msWriteByte( BK0_00_REGBK, REG_BANK_SCALER);
wCurVTotal = msVDGetVTotal();
if( ucFlag&1 ) // Reset
{
g_wMsMonitorVTotal_OriginalVCapsize = msReadWord( BK0_0A_SPRVDC_H);
g_wMsMonitorVTotal_VTotalChangeCnt = 0;
g_wMsMonitorVTotal_LastVTotal = 0;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -