Lcd_func.~c
上传用户:xmyjxjd
上传日期:2013-05-04
资源大小:1517k
文件大小:65k
开发平台:

C/C++

  1. #define __FUNC__
  2. #include "reg52.h"
  3. #include "intrins.h"
  4. #include "HeaderMAIN_DEF.H"
  5. #include "HeaderCONFIG.H"
  6. #include "HeaderACCESS.H"
  7. #include "HeaderOSD.H"
  8. #include "HeaderLCD_COEF.H"
  9. #include "HeaderLCD_MAIN.H"
  10. #include "HeaderLCD_AUTO.H"
  11. #include "HeaderLCD_FUNC.H"
  12. #include "HeaderFRAME_SYNC.H"
  13. #include "HeaderLCD_OSD.H"
  14. #if (TV_CHIP != TV_NONE)
  15. #include "TUNER.H"
  16. #endif
  17. void SetVolume()
  18. {
  19.     stGUD3.VOLUME   &= 0x1f;
  20. #if (AUDIO_TYPE == AUDIO_LM4832)
  21.     Data[0] = 10;
  22.     Data[1] = ADDR_LM4832;
  23.     Data[2] = 0x00;
  24.     Data[3] = 0x02;
  25.     Data[4] = 0x00;                     // Input Volume - 0 dB
  26.     Data[5] = 0x26;                     // Bass         - 0 dB
  27.     Data[6] = 0x46;                     // Treble       - 0 dB
  28.     Data[7] = 0x60 | stGUD3.VOLUME;     // Right Volume
  29.     Data[8] = 0x80 | stGUD3.VOLUME;     // Left Volume
  30.     // Mic 1 selected with 20dB when input source is VGA or DVI
  31.     // Both Mic 1 and 2 selected with 20dB when input source is AV or S-Video
  32.     Data[9] = (SOURCE_AV <= (stGUD1.INPUT_SOURCE & 0x07)) ? 0xa6 : 0xa4;
  33.     
  34.     I2CWrite(Data);
  35. #endif
  36. #if (AUDIO_TYPE == AUDIO_PWM2)
  37.     Data[0] = 6;
  38.     Data[1] = Y_INC;
  39.     Data[2] = OSD_ROW_90;
  40.     Data[3] = 0x80;
  41.     Data[4] = 0x01;
  42. #if (INV_VOLUME)
  43.     Data[5] = (0xff -(stGUD3.VOLUME << 3));
  44. #else
  45. Data[5] = (stGUD3.VOLUME << 3);
  46. #endif
  47. Data[6] = 0;
  48.     RTDWrite(Data);
  49. #endif
  50. #if (AUDIO_TYPE == AUDIO_PWM0)
  51.     Data[0] = 6;
  52.     Data[1] = Y_INC;
  53.     Data[2] = OSD_ROW_90;
  54.     Data[3] = 0x00;
  55.     Data[4] = 0x01;
  56. #if (INV_VOLUME)
  57.     Data[5] = (0xff -(stGUD3.VOLUME << 3));
  58. #else
  59. Data[5] = (stGUD3.VOLUME << 3);
  60. #endif
  61. Data[6] = 0;
  62.     RTDWrite(Data);
  63. #endif
  64. }
  65. void WriteGamma(unsigned char code *arrayR, unsigned char code *arrayG, unsigned char code *arrayB)
  66. {
  67.     unsigned char   n   = 0;
  68.     RTDSetBit(COLOR_CTRL_5D, 0xfb, 0x10);   // Disable GAMMA & Enable Access Channel
  69.     
  70.     // GAMMA_RED
  71.     bRTD_SCSB   = 0;
  72.     RTDSendAddr(RED_GAMMA_64, WRITE, N_INC);
  73.     do
  74.     {
  75.         RTDSendByte(arrayR[n]);
  76.     }
  77.     while (++n);    // if n is 0xff, then n will be 0x00 after increased.
  78. #if(MCU_TYPE == MCU_WINBOND)
  79.     bRTD_SCLK   = 0; 
  80.     bRTD_SCLK   = 1;           
  81.     bRTD_SCSB   = 1;
  82.     
  83.     // GAMMA_GREEN
  84.     bRTD_SCSB   = 0;
  85. #else
  86.     MCU_WriteRtdSclk(LOW); 
  87.     MCU_WriteRtdSclk(HIGH);           
  88.     MCU_WriteRtdScsb(HIGH);
  89.     
  90.     // GAMMA_GREEN
  91.     MCU_WriteRtdScsb(LOW);
  92. #endif
  93.     RTDSendAddr(GRN_GAMMA_65, WRITE, N_INC);
  94.     do
  95.     {
  96.         RTDSendByte(arrayG[n]);
  97.     }
  98.     while (++n);
  99. #if(MCU_TYPE == MCU_WINBOND)
  100.     bRTD_SCLK   = 0; 
  101.     bRTD_SCLK   = 1;           
  102.     bRTD_SCSB   = 1;
  103.     
  104.     //GAMMA_BLUE
  105.     bRTD_SCSB   = 0;
  106. #else
  107.     MCU_WriteRtdSclk(LOW); 
  108.     MCU_WriteRtdSclk(HIGH);           
  109.     MCU_WriteRtdScsb(HIGH);
  110.     
  111.     //GAMMA_BLUE
  112.     MCU_WriteRtdScsb(LOW);
  113. #endif
  114.     RTDSendAddr(BLU_GAMMA_66, WRITE, N_INC);
  115.     do
  116.     {
  117.         RTDSendByte(arrayB[n]);
  118.     }
  119.     while (++n);
  120. #if(MCU_TYPE == MCU_WINBOND)
  121.     bRTD_SCLK   = 0; 
  122.     bRTD_SCLK   = 1;           
  123.     bRTD_SCSB   = 1;
  124. #else
  125.     MCU_WriteRtdSclk(_LOW); 
  126.     MCU_WriteRtdSclk(_HIGH);           
  127.     MCU_WriteRtdScsb(_HIGH);
  128. #endif
  129.     
  130.     RTDSetBit(COLOR_CTRL_5D, 0xef, 0x04);   // Enable GAMMA & Diable Access Channel
  131. }
  132. void WriteDither(unsigned char code *array , bit new_dither)
  133. {
  134.     unsigned char   n;
  135.     if(new_dither)
  136.       RTDSetBit(FX_LST_LEN_H_5A,0xff,0x80);
  137.     else
  138.       RTDSetBit(FX_LST_LEN_H_5A,0x7f,0x00);
  139.     RTDSetBit(COLOR_CTRL_5D, 0xb7, 0x68);   // Enable DITHER & Enable Access Channels
  140. #if(MCU_TYPE == MCU_WINBOND)
  141.     bRTD_SCSB   = 0;
  142.     RTDSendAddr(DITHER_PORT_67, WRITE, N_INC);
  143.     for (n = 0; n < 8; n++)     RTDSendByte(array[n]);
  144.     bRTD_SCLK   = 0; 
  145.     bRTD_SCLK   = 1;           
  146.     bRTD_SCSB   = 1;
  147. #else
  148.     MCU_WriteRtdScsb(_LOW);
  149.     RTDSendAddr(DITHER_PORT_67, WRITE, N_INC);
  150.     for (n = 0; n < 8; n++)     RTDSendByte(array[n]);
  151.     MCU_WriteRtdSclk(_LOW); 
  152.     MCU_WriteRtdSclk(_HIGH);           
  153.     MCU_WriteRtdScsb(_HIGH);
  154. #endif
  155.     
  156.     //RTDSetBit(COLOR_CTRL_5D, 0xdf, 0x48);   // Enable DITHER & Disable Access Channels
  157. RTDSetBit(COLOR_CTRL_5D, 0x1f, 0x88);   // Enable DITHER & Disable Access Channels
  158. }
  159. void WriteSU_COEF(unsigned char code *arrayH, unsigned char code *arrayV)
  160. {
  161.     unsigned char   n;
  162.     
  163.     RTDSetBit(FILTER_CTRL1_1C, 0xfc, 0x01);     // Enable H-Coeff access
  164. #if(MCU_TYPE == MCU_WINBOND)
  165.     bRTD_SCSB   = 0;
  166.     RTDSendAddr(FILTER_PORT_1D, WRITE, N_INC);
  167.     for (n = 0; n < 128; n++)    RTDSendByte(arrayH[n]);
  168.     bRTD_SCLK   = 0; 
  169.     bRTD_SCLK   = 1;           
  170.     bRTD_SCSB   = 1;
  171.     RTDSetBit(FILTER_CTRL1_1C, 0xfc, 0x03);     // Enable V-Coeff access
  172.     
  173.     bRTD_SCSB   = 0;
  174.     RTDSendAddr(FILTER_PORT_1D, WRITE, N_INC);
  175.     for (n = 0; n < 128; n++)    RTDSendByte(arrayV[n]);
  176.     bRTD_SCLK   = 0; 
  177.     bRTD_SCLK   = 1;           
  178.     bRTD_SCSB   = 1;
  179. #else
  180.     MCU_WriteRtdScsb(_LOW);
  181.     RTDSendAddr(FILTER_PORT_1D, WRITE, N_INC);
  182.     for (n = 0; n < 128; n++)    RTDSendByte(arrayH[n]);
  183.     MCU_WriteRtdSclk(_LOW); 
  184.     MCU_WriteRtdSclk(_HIGH);           
  185.     MCU_WriteRtdScsb(_HIGH);
  186.     RTDSetBit(FILTER_CTRL1_1C, 0xfc, 0x03);     // Enable V-Coeff access
  187.     
  188.     MCU_WriteRtdScsb(_LOW);
  189.     RTDSendAddr(FILTER_PORT_1D, WRITE, N_INC);
  190.     for (n = 0; n < 128; n++)    RTDSendByte(arrayV[n]);
  191.     MCU_WriteRtdSclk(_LOW); 
  192.     MCU_WriteRtdSclk(_HIGH);           
  193.     MCU_WriteRtdScsb(_HIGH);
  194. #endif
  195.     RTDSetBit(FILTER_CTRL1_1C, 0xfc, 0xc4);     // Disable filter coefficient access
  196. }
  197. void Set_H_Position(void)
  198. {
  199. #if(AS_NON_FRAMESYNC)
  200.     RTDSetBit(ODD_CTRL_8E,0xef,0x00);
  201. #endif
  202.     // if the backporch is far small then the standard one,
  203. // it is possibile that even IHS_Delay decrease to zero still can't correct the H position
  204. // so adjust the usIPH_ACT_STA first and turn back to original value later
  205.     if(stMUD.H_POSITION < ucH_Min_Margin)
  206.     {
  207.        usIPH_ACT_STA = usIPH_ACT_STA - (ucH_Min_Margin - stMUD.H_POSITION);
  208.        stMUD.H_POSITION = ucH_Min_Margin;
  209.     }
  210. #if(ALIGN_LEFT == CLOCK_ALIGN)
  211.     ((unsigned int*)Data)[4] = usIPH_ACT_STA + (stMUD.CLOCK >> 2) - 32;
  212. #else
  213.     ((unsigned int*)Data)[4] = usIPH_ACT_STA + (stMUD.CLOCK >> 1) - 64;
  214. #endif
  215.     Wait_For_Event(EVENT_IEN_STOP);
  216.         
  217.     Data[0] = 5;
  218.     Data[1] = Y_INC;
  219.     Data[2] = IPH_ACT_STA_06;
  220.     Data[3] = (unsigned char)((unsigned int*)Data)[4];
  221.     Data[4] = (unsigned char)(((unsigned int*)Data)[4] >> 8);
  222.     Data[5] = 0;    
  223.     RTDWrite(Data);
  224.     // Update IHS delay according to phase
  225. //    Set_Phase(stMUD.PHASE & 0x7c);
  226.     //Data[0]     = PROGRAM_HDELAY + (stMUD.H_POSITION - ucH_Min_Margin);
  227.      Data[12] = (stMUD.H_POSITION - ucH_Min_Margin) + PROGRAM_HDELAY;
  228. RTDSetByte(IHS_DELAY_8D, Data[12]);
  229.    
  230. #if(AS_NON_FRAMESYNC)
  231.     if(bFrameSync && bStable)
  232.         RTDSetBit(ODD_CTRL_8E,0xef,0x10);
  233. #endif
  234. }
  235. #if(PANEL_TYPE == PANEL_HYUNDAI) //hgxxxx 0522 for Hyundai
  236. #define MAX_MOVE_LINE 2
  237. bit bSTEP_VPOS = 0;
  238. static unsigned char idata ucPre_V_POS = 0x80;
  239. void Set_V_Position4HD(void);
  240. void Set_V_Position(void)
  241. {
  242. unsigned char tempstore;
  243. tempstore = stMUD.V_POSITION;
  244. bSTEP_VPOS = 1;
  245.     do
  246. {
  247. if(stMUD.V_POSITION > ucPre_V_POS)
  248. {
  249. if(stMUD.V_POSITION - ucPre_V_POS > MAX_MOVE_LINE)
  250. stMUD.V_POSITION = ucPre_V_POS + MAX_MOVE_LINE;
  251. }
  252. else
  253. {
  254. if(ucPre_V_POS - stMUD.V_POSITION > MAX_MOVE_LINE)
  255. stMUD.V_POSITION = ucPre_V_POS - MAX_MOVE_LINE;
  256. }
  257. Set_V_Position4HD();
  258. stMUD.V_POSITION = tempstore;
  259. }
  260. while(stMUD.V_POSITION != ucPre_V_POS);
  261. bSTEP_VPOS = 0;
  262. }
  263. void Set_V_Position4HD(void)
  264. #else
  265. void Set_V_Position(void)
  266. #endif
  267. {
  268.     unsigned int    usIV_Temp, usDV_Temp;
  269. #if(AS_NON_FRAMESYNC)
  270.     RTDSetBit(ODD_CTRL_8E,0xef,0x00);
  271. #endif
  272. #if(AS_DV_TOTAL)
  273.     RTDSetBit(DV_BKGD_STA_31,0x7f,0x00);
  274. #endif
  275.     if ((ucV_Max_Margin - 1)  < stMUD.V_POSITION)
  276.     {
  277.        
  278.         RTDSetByte(IVS_DELAY_8C, (PROGRAM_VDELAY + stMUD.V_POSITION - (ucV_Max_Margin - 1)));
  279.         usIV_Temp   = usIPV_ACT_STA + (ucV_Max_Margin - 1) - 128;
  280.         usDV_Temp   = (unsigned int)ucDV_Delay + (ucV_Max_Margin - 1) - 128;
  281.     }
  282.     else
  283.     {
  284.         RTDSetByte(IVS_DELAY_8C, PROGRAM_VDELAY);
  285.         usIV_Temp   = usIPV_ACT_STA + stMUD.V_POSITION - 128;
  286.         usDV_Temp   = (unsigned int)ucDV_Delay + stMUD.V_POSITION - 128;
  287.     }
  288.     Wait_For_Event(EVENT_IEN_START);
  289.     Data[0] = 4;
  290.     Data[1] = N_INC;
  291.     Data[2] = IV_DV_LINES_38;
  292.     Data[3] = (unsigned char)usDV_Temp;
  293.     Data[4] = 5;    
  294.     Data[5] = Y_INC;
  295.     Data[6] = IPV_ACT_STA_0A;
  296.     Data[7] = (unsigned char)usIV_Temp;
  297.     Data[8] = (unsigned char)(usIV_Temp >> 8);
  298.     Data[9] = 0;
  299.     RTDWrite(Data);
  300.     Wait_For_Event(EVENT_IEN_START);
  301. RTDSetByte(STATUS0_01, 0x00);  // Clear status
  302.     RTDSetByte(STATUS1_1F, 0x00);  // Clear status
  303. #if(AS_NON_FRAMESYNC)
  304.     if(bFrameSync && bStable)
  305.         RTDSetBit(ODD_CTRL_8E,0xef,0x10);
  306. #endif
  307. #if(AS_DV_TOTAL)
  308.     if(bFrameSync && bStable)
  309.     {
  310.        RTDSetByte(DV_TOTAL_STATUS_3D,0x00);  //Write once to clear status
  311.        RTDSetBit(DV_BKGD_STA_31,0x7f,0x80);
  312.     }
  313. #endif
  314. #if(PANEL_TYPE == PANEL_HYUNDAI) //hgxxxx 0522 for Hyundai
  315. ucPre_V_POS = stMUD.V_POSITION;
  316. #endif
  317. }
  318. /*
  319. void Set_V_Position(void)
  320. {
  321.     unsigned int    usIV_Temp, usDV_Temp;
  322. #if(PANEL_TYPE == PANEL_HANDAI)
  323. unsigned int usDHT,usDHTc;
  324. unsigned char ucIVD0,ucIVD1;
  325. #endif
  326. #if(AS_NON_FRAMESYNC)
  327.     RTDSetBit(ODD_CTRL_8E,0xef,0x00);
  328. #endif
  329.     if (ucV_Max_Margin < stMUD.V_POSITION)
  330.     {
  331.         RTDSetByte(IVS_DELAY_8C, (PROGRAM_VDELAY + stMUD.V_POSITION - ucV_Max_Margin));
  332.         usIV_Temp   = usIPV_ACT_STA + ucV_Max_Margin - 128;
  333.         usDV_Temp   = (unsigned int)ucDV_Delay + ucV_Max_Margin - 128;
  334.     }
  335.     else
  336.     {
  337.         RTDSetByte(IVS_DELAY_8C, PROGRAM_VDELAY);
  338.         usIV_Temp   = usIPV_ACT_STA + stMUD.V_POSITION - 128;
  339.         usDV_Temp   = (unsigned int)ucDV_Delay + stMUD.V_POSITION - 128;
  340.     }
  341. #if(PANEL_TYPE == PANEL_HANDAI)
  342. //DHT =  xxxxxxxx_xxx00000 (0x22) + 00000000_00xxxxx0 (0x2e)
  343. RTDRead(0x22, 0x02, Y_INC);
  344. usDHT = 256 * (Data[1]&0x07) + Data[0] + 2;
  345. RTDRead(0x2E, 0x01, Y_INC);
  346. //to restore DV_tatal
  347. Data[15] = Data[0];
  348. usDHT = usDHT*32 + ((Data[0]>>2) & 0x3e);
  349. //compensated DH_Total
  350. RTDRead(IVS_DELAY_8C, 0x01, Y_INC);
  351. //original IVS delay
  352. ucIVD0 = Data[0];  
  353. //The IVS delay you are going to set
  354. ucIVD1 = (ucV_Max_Margin < stMUD.V_POSITION) ? (0x80 | (PROGRAM_VDELAY + stMUD.V_POSITION - ucV_Max_Margin)) : (0x80 | PROGRAM_VDELAY);
  355. //original IVS_DVS_Delay
  356. RTDRead(IV_DV_LINES_38, 0x01, Y_INC);
  357. //usDV_Temp  => IVS_DVS_delay you are going to set
  358. usDHTc = (unsigned long)usDHT * (usVsync + usDV_Temp - Data[0] + ucIVD1 - ucIVD0)/usVsync - 0x40;//-2
  359.     
  360.     
  361. //modify DH_Total
  362.     Wait_For_Event(EVENT_IEN_STOP);
  363. Data[0] = 5;
  364.     Data[1] = Y_INC;
  365.     Data[2] = DH_TOTAL_22;
  366.     Data[3] = (unsigned char)((usDHTc>>5) & 0x00fe);
  367. Data[4] = (unsigned char)((usDHTc>>13) & 0x0007);
  368. Data[5] = 4;
  369. Data[6] = Y_INC;
  370. Data[7] = 0x2e;
  371. Data[8] = (Data[15] & 0x07) | (((usDHTc+1)<<2) & 0x00f8);
  372. Data[9] = 0;
  373.     RTDWrite(Data);
  374. #endif
  375.     Wait_For_Event(EVENT_IEN_START);
  376.     Data[0] = 4;
  377.     Data[1] = N_INC;
  378.     Data[2] = IV_DV_LINES_38;
  379.     Data[3] = (unsigned char)usDV_Temp;
  380.     Data[4] = 5;    
  381.     Data[5] = Y_INC;
  382.     Data[6] = IPV_ACT_STA_0A;
  383.     Data[7] = (unsigned char)usIV_Temp;
  384.     Data[8] = (unsigned char)(usIV_Temp >> 8);
  385.     Data[9] = 0;
  386.     RTDWrite(Data);
  387. #if(PANEL_TYPE == PANEL_HANDAI)
  388.     //restore DH_Total
  389. usDHT = usDHT - 0x40;
  390.     Wait_For_Event(EVENT_DEN_STOP);
  391. Data[0] = 5;
  392.     Data[1] = Y_INC;
  393.     Data[2] = 0x22;
  394.     Data[3] = (unsigned char)((usDHT>>5) & 0x00fe);
  395. Data[4] = (unsigned char)((usDHT>>13) & 0x0007);
  396. Data[5] = 4;
  397. Data[6] = Y_INC;
  398. Data[7] = 0x2e;
  399. Data[8] = (Data[15] & 0x07) | ((usDHT<<2) & 0x00f8);
  400. Data[9] = 0;
  401.     RTDWrite(Data);
  402. #endif
  403.     Wait_For_Event(EVENT_IEN_START);
  404. RTDSetByte(STATUS0_01, 0x00);  // Clear status
  405.     RTDSetByte(STATUS1_1F, 0x00);  // Clear status
  406. #if(AS_NON_FRAMESYNC)
  407.     if(bFrameSync && bStable)
  408.         RTDSetBit(ODD_CTRL_8E,0xef,0x10);
  409. #endif
  410. }
  411. */
  412. void Set_Clock(void)
  413. {
  414.     unsigned char   ucM_Code, ucN_Code, ucTemp0, ucTemp1, ucResult;
  415.     // Issac :
  416.     // In this F/W, the frequency of PLL1 is fixed to 24.576*19/2=233.472MHz.
  417.     // Our goal is to find the best M/N settings of PLL2 according to the relationship below
  418.     // Best Fav = 233.472 * 32 / 31 = 241.003Mhz, and pixel rate = Fav * M / N
  419.     // Too small or large N code will cause larger jitter of ADC clock.
  420.     // In this F/W, I limite N code value between 16 and 31.
  421.     unsigned int    usClock = usADC_Clock + (unsigned int)stMUD.CLOCK - 128;    // Pixel clock number
  422.     unsigned long   ulRate  = (unsigned long)24576 * usClock / usStdHS;         // Pixel clock in kHz
  423. #if(AS_PLL_NONLOCK)
  424.     RTDSetBit(ODD_CTRL_8E,0xdf,0x00);
  425. #endif
  426. #if(AS_NON_FRAMESYNC)
  427.     RTDSetBit(ODD_CTRL_8E,0xef,0x00);
  428. #endif
  429. #if (TUNE_APLL)
  430.     RTDSetBit(DV_TOTAL_STATUS_3D, 0xdf, 0x00);//Disable PE Max Measurement
  431.     RTDSetByte(DV_TOTAL_STATUS_3D,0x40); //clear PE Max value
  432.     ucPE_Max = 0;
  433. #endif
  434. /*
  435.     ((unsigned int *)Data)[0]  = 375;
  436.     ucM_Code    = 0;
  437.     ucN_Code    = 0;
  438.     ucResult    = 0;
  439.     ucTemp0     = 7;
  440.     do
  441.     {
  442.         ucTemp1 = ulRate * ucTemp0 / 241003;
  443.         if (2 <= ucTemp1)
  444.         {
  445.             ((unsigned long *)Data)[2]  = ulRate * ucTemp0 / ucTemp1;
  446.             
  447.             ((unsigned int *)Data)[1]   = (unsigned long)3735552000 / ((unsigned long *)Data)[2];
  448.             if (15500 <= ((unsigned int *)Data)[1])
  449.             {
  450.                 if (15700 >= ((unsigned int *)Data)[1])
  451.                 {
  452.                     if (0 != ucResult || (((unsigned long)usClock * ucTemp0 / ucTemp1) * ucTemp1) != ((unsigned long)usClock * ucTemp0))
  453.                     {
  454.                         ucN_Code    = ucTemp0;
  455.                         ucM_Code    = ucTemp1;
  456.                         break;
  457.                     }
  458.                 }
  459.                 ((unsigned int *)Data)[1]   = ((unsigned int *)Data)[1] - 15500;
  460.             }
  461.             else
  462.             {
  463.                 if (15375 <= ((unsigned int *)Data)[1])
  464.                 {
  465.                     if (0 != ucResult || (((unsigned long)usClock * ucTemp0 / ucTemp1) * ucTemp1) != ((unsigned long)usClock * ucTemp0))
  466.                     {
  467.                         ucN_Code    = ucTemp0;
  468.                         ucM_Code    = ucTemp1;
  469.                         break;
  470.                     }
  471.                 }
  472.                 
  473.                 ((unsigned int *)Data)[1]   = 15500 - ((unsigned int *)Data)[1];
  474.             }
  475.             
  476.             if (((unsigned int *)Data)[0] > ((unsigned int *)Data)[1])
  477.             {
  478.                 ((unsigned int *)Data)[0]   = ((unsigned int *)Data)[1];
  479.                 ucN_Code    = ucTemp0;
  480.                 ucM_Code    = ucTemp1;
  481.             }
  482.         }
  483.         ucTemp1 = ucTemp1 + 1;
  484.         if (2 <= ucTemp1)
  485.         {
  486.             ((unsigned long *)Data)[2]  = ulRate * ucTemp0 / ucTemp1;
  487.             ((unsigned int *)Data)[1]   = (unsigned long)3735552000 / ((unsigned long *)Data)[2];
  488.             if (15500 <= ((unsigned int *)Data)[1])
  489.             {
  490.                 if (15700 >= ((unsigned int *)Data)[1])
  491.                 {
  492.                     if (0 != ucResult || (((unsigned long)usClock * ucTemp0 / ucTemp1) * ucTemp1) != ((unsigned long)usClock * ucTemp0))
  493.                     {
  494.                         ucN_Code    = ucTemp0;
  495.                         ucM_Code    = ucTemp1;
  496.                         break;
  497.                     }
  498.                 }
  499.                 ((unsigned int *)Data)[1]   = ((unsigned int *)Data)[1] - 15500;
  500.             }
  501.             else
  502.             {
  503.                 if (15375 <= ((unsigned int *)Data)[1])
  504.                 {
  505.                     if (0 != ucResult || (((unsigned long)usClock * ucTemp0 / ucTemp1) * ucTemp1) != ((unsigned long)usClock * ucTemp0))
  506.                     {
  507.                         ucN_Code    = ucTemp0;
  508.                         ucM_Code    = ucTemp1;
  509.                         break;
  510.                     }
  511.                 }
  512.                 
  513.                 ((unsigned int *)Data)[1]   = 15500 - ((unsigned int *)Data)[1];
  514.             }
  515.             if (((unsigned int *)Data)[0] > ((unsigned int *)Data)[1])
  516.             {
  517.                 ((unsigned int *)Data)[0]   = ((unsigned int *)Data)[1];
  518.                 ucN_Code    = ucTemp0;
  519.                 ucM_Code    = ucTemp1;
  520.             }
  521.         }
  522.         if (0 == ucResult)
  523.         {
  524.             if (43 < ucTemp0 && 60000 < ulRate)
  525.             {
  526.                 ucTemp0     = 10;
  527.                 ucResult    = 1;
  528.                 ((unsigned int *)Data)[0]  = 500;
  529.             }
  530.         }
  531.         else
  532.         {
  533.             if (36 < ucTemp0 && 200 > ((unsigned int *)Data)[0])
  534.             {
  535.                 break;
  536.             }
  537.         }
  538.     }
  539.     while (53 >= ++ucTemp0);
  540.     if (8 >= ucN_Code)
  541.     {
  542.         ucN_Code    = ucN_Code * 3;
  543.         ucM_Code    = ucM_Code * 3;
  544.     }
  545.     else if (12 >= ucN_Code)
  546.     {
  547.         ucN_Code    = ucN_Code * 2;
  548.         ucM_Code    = ucM_Code * 2;
  549.     }
  550.     usClock     = usClock - 1;
  551.     Wait_For_Event(EVENT_IEN_STOP);
  552.     RTDSetByte(I_CODE_MB_CA, 0x18);
  553.     RTDSetByte(I_CODE_LB_C9, 0x00);
  554.     RTDSetByte(P_CODE_CB, 0x18);
  555.     Data[0]     = 5;
  556.     Data[1]     = Y_INC;
  557.     Data[2]     = PLL1_M_D7;
  558.     Data[3]     = 0x11;
  559.     Data[4]     = 0x00;
  560.     Data[5]     = 0;
  561.     RTDWrite(Data);
  562. */
  563.     ((unsigned int *)Data)[0]  = 500;
  564.     ucM_Code    = 0;
  565.     ucN_Code    = 0;
  566.     ucResult    = 0;
  567.     ucTemp0     = 7;
  568.     do
  569.     {
  570.         //Fav * PLL2_M / PLL2_N = ulRate
  571.         //PLL2_M = ulRate * PLL2_N / Fav;
  572.         //ucTemp1 = ulRate * ucTemp0 / 253687;// (20/2 * 24.576 *32/31)
  573.         ucTemp1 = ulRate * ucTemp0 / 215634;// (17/2 * 24.576 *32/31)
  574.         if (2 <= ucTemp1)
  575.         {   //Fav = ulRate * PLL2_N / PLL2_M
  576.             ((unsigned long *)Data)[2]  = ulRate * ucTemp0 / ucTemp1;
  577.                                                         //(20/2 * 24.576 * 16)
  578. //((unsigned int *)Data)[1]   = (unsigned long)393216000 / ((unsigned long *)Data)[2];
  579.             ((unsigned int *)Data)[1]   = (unsigned long)334223600 / ((unsigned long *)Data)[2];
  580.             // > 31/2 = 15.5
  581.             if (1550 <= ((unsigned int *)Data)[1])
  582.             {
  583.                 if (1570 >= ((unsigned int *)Data)[1])
  584.                 {
  585.                     ucN_Code    = ucTemp0;
  586.                     ucM_Code    = ucTemp1;
  587.                     break;
  588.                 }
  589.                 ((unsigned int *)Data)[1]   = ((unsigned int *)Data)[1] - 1550;
  590.             }
  591.             else //