裸机S3C6410显示控制器(1)-设置时钟源

//------------------------------------------------------------
// Function Name : LCD_SetClkSrc
//
// Function Desctiption :
//  This function sets video clock source 
//
//------------------------------------------------------------
void LCD_SetClkSrc(CLK_SRC eClkSrc)
{
	u32 uVidConVal;
	u32 uClkSrc, uEpllCon0;

	uClkSrc =
		(eClkSrc == SRC_HCLK) ? H_CLK_INPUT :
		(eClkSrc == SRC_27M) ? EXT_CLK_1_INPUT : EXT_CLK_0_INPUT;

	uVidConVal=Inp32(LCD_BASE+rVIDCON0);

	uVidConVal &= ~(0x3<<2);
	uVidConVal |= uClkSrc;

	LcdcOutp32(rVIDCON0, uVidConVal);

	uClkSrc = Inp32SYSC(0x1C);
	uEpllCon0 = Inp32SYSC(0x14);

	if(eClkSrc == SRC_MOUT_EPLL) 
	{
		Outp32SYSC(0x14, uEpllCon0 |(1u<<31));
		Delay(100);
		Outp32SYSC(0x1C, uClkSrc & ~(0x3<<26) |(1<<2));	
	}
	else if (eClkSrc == SRC_DOUT_MPLL) Outp32SYSC(0x1C, uClkSrc & ~(0x3<<26)|(1<<26));
	else if (eClkSrc == SRC_FIN_EPLL) Outp32SYSC(0x1C, uClkSrc & ~(0x3<<7)|(2<<26));

}

根据LCD时钟源的类型来设置寄存器,时钟源可能是:

typedef enum
{
	SRC_HCLK, SRC_MOUT_EPLL, SRC_DOUT_MPLL, SRC_FIN_EPLL, SRC_27M
} CLK_SRC;



(1)设置VIDCON0寄存器


如果时钟源是HCLK或27M,只需设置此寄存器。如果是SRC_MOUT_EPLL, SRC_DOUT_MPLL, SRC_FIN_EPLL,还需要设置系统控制器中的CLKSRC寄存器

(2)设置系统控制器中的CLKSRC寄存器,选择LCD的时钟源


第26,27位是LCD_SEL字段。

另外EPLLCON0的31位表示启用EPLL:




你可能感兴趣的:(c,function,video,ext,input,delay)