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

📄 lcd_func.c.bak

📁 液晶显示器程序代码
💻 BAK
📖 第 1 页 / 共 2 页
字号:
    Data[5] = Y_INC;
    Data[6] = IPV_ACT_STA_0A;
    Data[7] = (unsigned char)usIV_Temp;
    Data[8] = (unsigned char)(usIV_Temp >> 8);
    Data[9] = 0;
    RTDWrite(Data);

    Wait_For_Event(EVENT_IEN_START);


	RTDSetByte(STATUS0_01, 0x00);  // Clear status
    RTDSetByte(STATUS1_1F, 0x00);  // Clear status


#if(AS_NON_FRAMESYNC)
    if(bFrameSync && bStable)
        RTDSetBit(ODD_CTRL_8E,0xef,0x10);
#endif

#if(AS_DV_TOTAL)
    if(bFrameSync && bStable)
    {
       RTDSetByte(DV_TOTAL_STATUS_3D,0x00);  //Write once to clear status
       RTDSetBit(DV_BKGD_STA_31,0x7f,0x80);
    }
#endif

#if(PANEL_TYPE == PANEL_HYUNDAI)		//hgxxxx 0522 for Hyundai
	ucPre_V_POS = stMUD.V_POSITION;
#endif
}

/*
void Set_V_Position(void)
{
    unsigned int    usIV_Temp, usDV_Temp;
#if(PANEL_TYPE == PANEL_HANDAI)
	unsigned int	usDHT,usDHTc;
	unsigned char	ucIVD0,ucIVD1;
#endif

#if(AS_NON_FRAMESYNC)
    RTDSetBit(ODD_CTRL_8E,0xef,0x00);
#endif


    if (ucV_Max_Margin < stMUD.V_POSITION)
    {

        RTDSetByte(IVS_DELAY_8C, (PROGRAM_VDELAY + stMUD.V_POSITION - ucV_Max_Margin));


        usIV_Temp   = usIPV_ACT_STA + ucV_Max_Margin - 128;
        usDV_Temp   = (unsigned int)ucDV_Delay + ucV_Max_Margin - 128;
    }
    else
    {

        RTDSetByte(IVS_DELAY_8C, PROGRAM_VDELAY);


        usIV_Temp   = usIPV_ACT_STA + stMUD.V_POSITION - 128;
        usDV_Temp   = (unsigned int)ucDV_Delay + stMUD.V_POSITION - 128;
    }

#if(PANEL_TYPE == PANEL_HANDAI)
	//DHT =  xxxxxxxx_xxx00000 (0x22) + 00000000_00xxxxx0 (0x2e)
	RTDRead(0x22, 0x02, Y_INC);
	usDHT = 256 * (Data[1]&0x07) + Data[0] + 2;
	RTDRead(0x2E, 0x01, Y_INC);
	//to restore DV_tatal
	Data[15] = Data[0];
	usDHT =	usDHT*32 + ((Data[0]>>2) & 0x3e);


	//compensated DH_Total
	RTDRead(IVS_DELAY_8C, 0x01, Y_INC);
	//original IVS delay
	ucIVD0 = Data[0];  
	//The IVS delay you are going to set
	ucIVD1 = (ucV_Max_Margin < stMUD.V_POSITION) ? (0x80 | (PROGRAM_VDELAY + stMUD.V_POSITION - ucV_Max_Margin)) : (0x80 | PROGRAM_VDELAY);
	//original IVS_DVS_Delay
	RTDRead(IV_DV_LINES_38, 0x01, Y_INC);
	//usDV_Temp  => IVS_DVS_delay you are going to set
	usDHTc = (unsigned long)usDHT * (usVsync + usDV_Temp - Data[0] + ucIVD1 - ucIVD0)/usVsync - 0x40;//-2
    
    


	//modify DH_Total
    Wait_For_Event(EVENT_IEN_STOP);
	Data[0] = 5;
    Data[1] = Y_INC;
    Data[2] = DH_TOTAL_22;
    Data[3] = (unsigned char)((usDHTc>>5) & 0x00fe);
	Data[4] = (unsigned char)((usDHTc>>13) & 0x0007);
	Data[5] = 4;
	Data[6] = Y_INC;
	Data[7] = 0x2e;
	Data[8] = (Data[15] & 0x07) | (((usDHTc+1)<<2) & 0x00f8);
	Data[9] = 0;
    RTDWrite(Data);

#endif
    Wait_For_Event(EVENT_IEN_START);

    Data[0] = 4;
    Data[1] = N_INC;
    Data[2] = IV_DV_LINES_38;
    Data[3] = (unsigned char)usDV_Temp;
    Data[4] = 5;    
    Data[5] = Y_INC;
    Data[6] = IPV_ACT_STA_0A;
    Data[7] = (unsigned char)usIV_Temp;
    Data[8] = (unsigned char)(usIV_Temp >> 8);
    Data[9] = 0;
    RTDWrite(Data);


#if(PANEL_TYPE == PANEL_HANDAI)
    //restore DH_Total
	usDHT = usDHT - 0x40;	
    Wait_For_Event(EVENT_DEN_STOP);
	Data[0] = 5;
    Data[1] = Y_INC;
    Data[2] = 0x22;
    Data[3] = (unsigned char)((usDHT>>5) & 0x00fe);
	Data[4] = (unsigned char)((usDHT>>13) & 0x0007);
	Data[5] = 4;
	Data[6] = Y_INC;
	Data[7] = 0x2e;
	Data[8] = (Data[15] & 0x07) | ((usDHT<<2) & 0x00f8);
	Data[9] = 0;
    RTDWrite(Data);	
#endif

    Wait_For_Event(EVENT_IEN_START);


	RTDSetByte(STATUS0_01, 0x00);  // Clear status
    RTDSetByte(STATUS1_1F, 0x00);  // Clear status


#if(AS_NON_FRAMESYNC)
    if(bFrameSync && bStable)
        RTDSetBit(ODD_CTRL_8E,0xef,0x10);
#endif
}
*/
void Set_Clock(void)
{
    unsigned char   ucM_Code, ucN_Code, ucTemp0, ucTemp1, ucResult;

    // Issac :
    // In this F/W, the frequency of PLL1 is fixed to 24.576*19/2=233.472MHz.
    // Our goal is to find the best M/N settings of PLL2 according to the relationship below
    // Best Fav = 233.472 * 32 / 31 = 241.003Mhz, and pixel rate = Fav * M / N
    // Too small or large N code will cause larger jitter of ADC clock.
    // In this F/W, I limite N code value between 16 and 31.

    unsigned int    usClock = usADC_Clock + (unsigned int)stMUD.CLOCK - 128;    // Pixel clock number
    unsigned long   ulRate  = (unsigned long)24576 * usClock / usStdHS;         // Pixel clock in kHz

#if(AS_PLL_NONLOCK)
    RTDSetBit(ODD_CTRL_8E,0xdf,0x00);
#endif

#if(AS_NON_FRAMESYNC)
    RTDSetBit(ODD_CTRL_8E,0xef,0x00);
#endif

#if (TUNE_APLL)
    RTDSetBit(DV_TOTAL_STATUS_3D, 0xdf, 0x00);//Disable PE Max Measurement
    RTDSetByte(DV_TOTAL_STATUS_3D,0x40); //clear PE Max value
    ucPE_Max = 0;
#endif

/*

    ((unsigned int *)Data)[0]  = 375;

    ucM_Code    = 0;
    ucN_Code    = 0;
    ucResult    = 0;
    ucTemp0     = 7;
    do
    {
        ucTemp1 = ulRate * ucTemp0 / 241003;

        if (2 <= ucTemp1)
        {
            ((unsigned long *)Data)[2]  = ulRate * ucTemp0 / ucTemp1;
            
            ((unsigned int *)Data)[1]   = (unsigned long)3735552000 / ((unsigned long *)Data)[2];

            if (15500 <= ((unsigned int *)Data)[1])
            {
                if (15700 >= ((unsigned int *)Data)[1])
                {
                    if (0 != ucResult || (((unsigned long)usClock * ucTemp0 / ucTemp1) * ucTemp1) != ((unsigned long)usClock * ucTemp0))
                    {
                        ucN_Code    = ucTemp0;
                        ucM_Code    = ucTemp1;
                        break;
                    }
                }

                ((unsigned int *)Data)[1]   = ((unsigned int *)Data)[1] - 15500;
            }
            else
            {
                if (15375 <= ((unsigned int *)Data)[1])
                {
                    if (0 != ucResult || (((unsigned long)usClock * ucTemp0 / ucTemp1) * ucTemp1) != ((unsigned long)usClock * ucTemp0))
                    {
                        ucN_Code    = ucTemp0;
                        ucM_Code    = ucTemp1;
                        break;
                    }
                }
                
                ((unsigned int *)Data)[1]   = 15500 - ((unsigned int *)Data)[1];
            }
            
            if (((unsigned int *)Data)[0] > ((unsigned int *)Data)[1])
            {
                ((unsigned int *)Data)[0]   = ((unsigned int *)Data)[1];

                ucN_Code    = ucTemp0;
                ucM_Code    = ucTemp1;
            }
        }

        ucTemp1 = ucTemp1 + 1;

        if (2 <= ucTemp1)
        {
            ((unsigned long *)Data)[2]  = ulRate * ucTemp0 / ucTemp1;

            ((unsigned int *)Data)[1]   = (unsigned long)3735552000 / ((unsigned long *)Data)[2];

            if (15500 <= ((unsigned int *)Data)[1])
            {
                if (15700 >= ((unsigned int *)Data)[1])
                {
                    if (0 != ucResult || (((unsigned long)usClock * ucTemp0 / ucTemp1) * ucTemp1) != ((unsigned long)usClock * ucTemp0))
                    {
                        ucN_Code    = ucTemp0;
                        ucM_Code    = ucTemp1;
                        break;
                    }
                }

                ((unsigned int *)Data)[1]   = ((unsigned int *)Data)[1] - 15500;
            }
            else
            {
                if (15375 <= ((unsigned int *)Data)[1])
                {
                    if (0 != ucResult || (((unsigned long)usClock * ucTemp0 / ucTemp1) * ucTemp1) != ((unsigned long)usClock * ucTemp0))
                    {
                        ucN_Code    = ucTemp0;
                        ucM_Code    = ucTemp1;
                        break;
                    }
                }
                
                ((unsigned int *)Data)[1]   = 15500 - ((unsigned int *)Data)[1];
            }

            if (((unsigned int *)Data)[0] > ((unsigned int *)Data)[1])
            {
                ((unsigned int *)Data)[0]   = ((unsigned int *)Data)[1];

                ucN_Code    = ucTemp0;
                ucM_Code    = ucTemp1;
            }
        }

        if (0 == ucResult)
        {
            if (43 < ucTemp0 && 60000 < ulRate)
            {
                ucTemp0     = 10;
                ucResult    = 1;

                ((unsigned int *)Data)[0]  = 500;
            }
        }
        else
        {
            if (36 < ucTemp0 && 200 > ((unsigned int *)Data)[0])
            {
                break;
            }
        }
    }
    while (53 >= ++ucTemp0);

    if (8 >= ucN_Code)
    {
        ucN_Code    = ucN_Code * 3;
        ucM_Code    = ucM_Code * 3;
    }
    else if (12 >= ucN_Code)
    {
        ucN_Code    = ucN_Code * 2;
        ucM_Code    = ucM_Code * 2;
    }

    usClock     = usClock - 1;

    Wait_For_Event(EVENT_IEN_STOP);

    RTDSetByte(I_CODE_MB_CA, 0x18);
    RTDSetByte(I_CODE_LB_C9, 0x00);
    RTDSetByte(P_CODE_CB, 0x18);

    Data[0]     = 5;
    Data[1]     = Y_INC;
    Data[2]     = PLL1_M_D7;
    Data[3]     = 0x11;
    Data[4]     = 0x00;
    Data[5]     = 0;
    RTDWrite(Data);

*/

    ((unsigned int *)Data)[0]  = 500;

    ucM_Code    = 0;
    ucN_Code    = 0;
    ucResult    = 0;
    ucTemp0     = 7;
    do
    {
        //Fav * PLL2_M / PLL2_N = ulRate
        //PLL2_M = ulRate * PLL2_N / Fav;
        //ucTemp1 = ulRate * ucTemp0 / 253687;// (20/2 * 24.576 *32/31)
        ucTemp1 = ulRate * ucTemp0 / 215634;// (17/2 * 24.576 *32/31)

        if (2 <= ucTemp1)
        {   //Fav = ulRate * PLL2_N / PLL2_M
            ((unsigned long *)Data)[2]  = ulRate * ucTemp0 / ucTemp1;
                                                        //(20/2 * 24.576 * 16)
			//((unsigned int *)Data)[1]   = (unsigned long)393216000 / ((unsigned long *)Data)[2];
            ((unsigned int *)Data)[1]   = (unsigned long)334223600 / ((unsigned long *)Data)[2];
            // > 31/2 = 15.5
            if (1550 <= ((unsigned int *)Data)[1])
            {
                if (1570 >= ((unsigned int *)Data)[1])
                {
                    ucN_Code    = ucTemp0;
                    ucM_Code    = ucTemp1;
                    break;
                }

                ((unsigned int *)Data)[1]   = ((unsigned int *)Data)[1] - 1550;
            }
            else //

⌨️ 快捷键说明

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