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

📄 pll.c

📁 三星s3c2460开发板完整功能测试代码
💻 C
📖 第 1 页 / 共 2 页
字号:
void Test_ARMClock(void)
{
	rCLKOUTCON	=rCLKOUTCON&~(7<<12)|(2<<12);  //CLKOUT  2:ARMCLK 3:HCLK, 4:PCLK
	rSPCON&=~(1<<17);  // CLKOUT enable
	
	printf("[ARMCLK Source & Clock Divisor test]\n");
	printf("[Now ARMCLK:HCLK:PCLK= 204:102:51 ]\n");
	printf("Probe CLKOUT(TP1) & check Clock speed !!!\n\n");
	
	printf("Test Sequence\n");
	printf("1:MPLL CLK(204MHz) ==> 2:EXTERNAL CLK(12MHz) ==> 3:DIVIDED EXTERNAL CLK(3MHz)\n");
	printf("==> 4:MPLL CLK(204MHz) ==> 5:SYSCLK/2(101MHz) ==> 6:SYSCLK/2 & DVS ON(51MHz)\n");
	printf("==> 7:MPLL CLK(204MHz)\n\n");

	printf("Hit the any key to start test !!! \n");
	getchar();

       //////////////////////////      1:MPLL CLK(204MHz)      /////////////////////////////////	
	
       Delay(10000);
       /////////////////////////        2:EXTERNAL CLK(12MHz)      /////////////////////////////
       rCLKSRCCON&=~(1<<4);
       ChangeSDRAMParameter(FIN/2);
       Delay(1000);
       
        ////////////////////////       3:DIVIDED EXTERNAL CLK(3MHz)      ///////////////////////
		rCLKSRCCON|=(1<<3);
		ChangeSDRAMParameter(FIN/8);
		rCLKSRCCON=rCLKSRCCON&~(7<<0)|(2<<0);
		Delay(250);

       ////////////////////////      4:MPLL CLK(204MHz)       //////////////////////////////////
	rCLKSRCCON=rCLKSRCCON&~(0xf<<0)|(1<<4);
	ChangeSDRAMParameter(HCLK);
	Delay(10000);
	
       ////////////////////////      5:SYSCLK/2(101MHz)      ///////////////////////////////////
	rCLKDIVCON|=(1<<16);
	ChangeSDRAMParameter(HCLK/2);
       Delay(5000);
	 ////////////////////////      6:SYSCLK/2 & DVS ON(51MHz)     ///////////////////////////
	rCLKDIVCON|=(1<<17);
	Delay(2500);
       ////////////////////////      7:MPLL CLK(204MHz)      ///////////////////////////////////
	rCLKDIVCON&=~((1<<17)|(1<<16));
	ChangeSDRAMParameter(HCLK);
       printf("ARMCLK change test OK!!! \n");
	
}



void Test_Clk_divide(void)
{
      ////////////////////////       HCLK Divide test       ////////////////////////////

	rCLKOUTCON	=rCLKOUTCON&~(7<<12)|(3<<12);  //CLKOUT  2:ARMCLK 3:HCLK, 4:PCLK
	rSPCON&=~(1<<17);  // CLKOUT enable

   	printf("\nMPLL=%.2fMHz, ARMCLK=%.2fMHz (%d:%d:%d), HCLK=%.2fMHz, PCLK=%.2fMHz\n\n",(float)MPLL/1.0e6,(float)ARMCLK/1.0e6,ARMCLKdiv+1,(ARMCLKdiv+1)*(HCLKdiv+1),(ARMCLKdiv+1)*(HCLKdiv+1)*(PCLKdiv+1),(float)HCLK/1.0e6,(float)PCLK/1.0e6);
	
	printf("[HCLK Divide test]\n");
	printf("[Now ARMCLK:HCLK:PCLK= 120:120:60 ]\n");
	printf("Probe CLKOUT(TP1) & check Clock speed !!!\n\n");

////////////////////////////////////////////////////////////////////////////////////	

	PreChangeSDRAMParameter();

	SetMPLL( 52, 1, 0);		//	240 MHz
	SetCLKDIV( 1, 0, 1);

	GlobalCLK();
	ChangeSDRAMParameter(HCLK);

	//////////////////////////      1:1 HCLK      /////////////////////////////////	
	rCLKDIVCON=rCLKDIVCON&~(0x7)|(1<<2)|(0);
	GlobalCLK();
	ChangeSDRAMParameter(HCLK);
	
	Init_LogicalConsole();
   	printf("\nMPLL=%.2fMHz, ARMCLK=%.2fMHz (%d:%d:%d), HCLK=%.2fMHz, PCLK=%.2fMHz\n\n",(float)MPLL/1.0e6,(float)ARMCLK/1.0e6,ARMCLKdiv+1,(ARMCLKdiv+1)*(HCLKdiv+1),(ARMCLKdiv+1)*(HCLKdiv+1)*(PCLKdiv+1),(float)HCLK/1.0e6,(float)PCLK/1.0e6);
    MemoryTest();
	
	//////////////////////////      1:2 HCLK      /////////////////////////////////	
	rCLKDIVCON=rCLKDIVCON&~(0x7)|(1<<2)|(1);
	GlobalCLK();
	ChangeSDRAMParameter(HCLK);
	
	Init_LogicalConsole();
   	printf("\nMPLL=%.2fMHz, ARMCLK=%.2fMHz (%d:%d:%d), HCLK=%.2fMHz, PCLK=%.2fMHz\n\n",(float)MPLL/1.0e6,(float)ARMCLK/1.0e6,ARMCLKdiv+1,(ARMCLKdiv+1)*(HCLKdiv+1),(ARMCLKdiv+1)*(HCLKdiv+1)*(PCLKdiv+1),(float)HCLK/1.0e6,(float)PCLK/1.0e6);
    MemoryTest();
	 
	//////////////////////////      1:3 HCLK      /////////////////////////////////	
	rCLKDIVCON=rCLKDIVCON&~(0x7)|(1<<2)|(2);
	GlobalCLK();
	ChangeSDRAMParameter(HCLK);

	Init_LogicalConsole();
   	printf("\nMPLL=%.2fMHz, ARMCLK=%.2fMHz (%d:%d:%d), HCLK=%.2fMHz, PCLK=%.2fMHz\n\n",(float)MPLL/1.0e6,(float)ARMCLK/1.0e6,ARMCLKdiv+1,(ARMCLKdiv+1)*(HCLKdiv+1),(ARMCLKdiv+1)*(HCLKdiv+1)*(PCLKdiv+1),(float)HCLK/1.0e6,(float)PCLK/1.0e6);
    MemoryTest();

	//////////////////////////      1:4 HCLK      /////////////////////////////////	
	rCLKDIVCON=rCLKDIVCON&~(0x7)|(1<<2)|(3);
	GlobalCLK();
	ChangeSDRAMParameter(HCLK);
	
	Init_LogicalConsole();
   	printf("\nMPLL=%.2fMHz, ARMCLK=%.2fMHz (%d:%d:%d), HCLK=%.2fMHz, PCLK=%.2fMHz\n\n",(float)MPLL/1.0e6,(float)ARMCLK/1.0e6,ARMCLKdiv+1,(ARMCLKdiv+1)*(HCLKdiv+1),(ARMCLKdiv+1)*(HCLKdiv+1)*(PCLKdiv+1),(float)HCLK/1.0e6,(float)PCLK/1.0e6);
    MemoryTest();

	rCLKDIVCON=rCLKDIVCON&~(0x7)|(1<<2)|(1);

	SetMPLL(42,1,0);
	SetCLKDIV( 0, 1, 1);
	GlobalCLK();
	ChangeSDRAMParameter(HCLK);
	Init_LogicalConsole();
	
   	printf("MPLL=%.2fMHz, ARMCLK=%.2fMHz (%d:%d:%d), HCLK=%.2fMHz, PCLK=%.2fMHz\n\n",(float)MPLL/1.0e6,(float)ARMCLK/1.0e6,ARMCLKdiv+1,(ARMCLKdiv+1)*(HCLKdiv+1),(ARMCLKdiv+1)*(HCLKdiv+1)*(PCLKdiv+1),(float)HCLK/1.0e6,(float)PCLK/1.0e6);
	printf("HCLK change test OK!!! \n");

	///////////////////////////   PCLK Divide test   ///////////////////////////////

	rCLKOUTCON	=rCLKOUTCON&~(7<<12)|(4<<12);  //CLKOUT  2:ARMCLK 3:HCLK, 4:PCLK
	SetMPLL( 52, 1, 1);
	rCLKDIVCON=rCLKDIVCON&~(0x7)|(1<<2)|(0);
	GlobalCLK();
	ChangeSDRAMParameter(HCLK);
	Init_LogicalConsole();
   	printf("MPLL=%.2fMHz, ARMCLK=%.2fMHz (%d:%d:%d), HCLK=%.2fMHz, PCLK=%.2fMHz\n\n",(float)MPLL/1.0e6,(float)ARMCLK/1.0e6,ARMCLKdiv+1,(ARMCLKdiv+1)*(HCLKdiv+1),(ARMCLKdiv+1)*(HCLKdiv+1)*(PCLKdiv+1),(float)HCLK/1.0e6,(float)PCLK/1.0e6);
	
	printf("\n\n\n[PCLK Divide test]\n");
	printf("[Now ARMCLK:HCLK:PCLK= 120:120:60 ]\n");
	printf("Probe CLKOUT(TP1) & check Clock speed !!!\n\n");
	
	printf("Test Sequence\n");
	printf("1:1 PCLK(60MHz) ==> 1:2 PCLK(30MHz)\n");
	
	printf("Hit the any key to start test !!! \n");
	getchar();

	//////////////////////////      1:1 PCLK(60MHz)      /////////////////////////////////	
	rCLKDIVCON=rCLKDIVCON&~(0x7)|(0<<2)|(1);
	Delay(10000);
	
       //////////////////////////      1:2 PCLK(30MHz)      /////////////////////////////////	
	rCLKDIVCON=rCLKDIVCON&~(0x7)|(1<<2)|(1);
	Delay(10000);


	SetMPLL(42,1,0);
	SetCLKDIV( 0, 1, 1);
	GlobalCLK();
	ChangeSDRAMParameter(HCLK);
	Init_LogicalConsole();
	
   	printf("MPLL=%.2fMHz, ARMCLK=%.2fMHz (%d:%d:%d), HCLK=%.2fMHz, PCLK=%.2fMHz\n\n",(float)MPLL/1.0e6,(float)ARMCLK/1.0e6,ARMCLKdiv+1,(ARMCLKdiv+1)*(HCLKdiv+1),(ARMCLKdiv+1)*(HCLKdiv+1)*(PCLKdiv+1),(float)HCLK/1.0e6,(float)PCLK/1.0e6);
	printf("PCLK change test OK!!! \n");
	
}


void Test_HoldMode(void)
{
  
	printf("[Power Saving Mode by Stopping Each Block]\n");
	printf("Check the current cunsumption. Type any key to proceed.\n");	
	printf("All Clocks On.\n");
	
	rCLKDIVCON&=~(0x3<<14);
	
	 rHCLKCON=(1<<31)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(1<<26)|(1<<25)|(1<<24)|(1<<23)\
                  // L2RAM1   L2RAM2  DDR1       DDR2       CSI       NFLASH  SROM      Matrix      M DMA1
	               |(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16)|(1<<15)|(1<<14)\
                  //  M DMA0    MBX        DSP        OTG          IrDA     MODEM   UHost      DBLOCK  VLX
	               |(1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(1<<7)|(1<<6)|(1<<5)\
                  //   LCD        CAMIF       POST    DCTQ      MC         ME      DDMA3  DDMA2  DDMA1
	               |(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);
	           //  DDMA0   DMA3     DMA2   DMA1    DMA0

     rPCLKCON=(1<<31)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(1<<26)|(1<<25)|(1<<24)|(1<<23)\
                  // DDMA3     DDMA2   DDMA1    DDMA0   DMA3       DMA2      DMA1     DMA0     MDMA1
	               |(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16)|(1<<15)|(1<<14)\
                  //  MDMA0     CSI         GPIO       Key        RTC         WDT       PWM       DSP        PCM
	               |(1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(1<<7)|(1<<6)|(1<<5)\
                  //     I2S        AC97           reserved           SDIO    Mstick  reserved  SPI      Udevice
	               |(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);
		    //   I2C        IrDA      Uart2   Uart1     Uart0
     rSCLKCON=(0x1ff<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16)|(1<<15)|(1<<14)\
                  //                       I2SCLK   LCD         UART    MBX 3D    MBX      Dmemory Dsystem   L2RAM1  L2RAM0
	               |(1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(1<<7)|(1<<6)|(1<<5)\
	           //    DDR1      DDR0      CSI        OTG12    CAMIF   Deblock VLX       POST     DCTQ    
	               |(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);
		    //    ME        IrDA     OTG       Host     Device
		    
	getchar();
	printf("L2RAM Off.\n");   //7mA
	rHCLKCON&=~(0x3<<30);
//	rPCLKCON&=~(0x3<<30);
	rSCLKCON&=~(0x3<<14);
	
	getchar();
	printf("DDR Off.\n"); // DDR1   //2mA
	rHCLKCON&=~(0x1<<29);   
//	rPCLKCON&=~(0x3<<30);
	rSCLKCON&=~(0x1<<13);   
	
	getchar();
	printf("CSI Off.\n");   // 1mA
	rHCLKCON&=~(0x1<<27);	
	rPCLKCON&=~(0x1<<21);
	rSCLKCON&=~(0x1<<11);	

	getchar();
	printf("Nand flash Off.\n");  // 1mA
	rHCLKCON&=~(0x1<<26);	
//	rPCLKCON&=~(0x1<<21);
//	rSCLKCON&=~(0x1<<11);	

       getchar();
	printf("MODEM Off.\n");  // 2mA
	rHCLKCON&=~((0x3<<22)|(0x1<<17));	
	rPCLKCON&=~(0x3<<22);
//	rSCLKCON&=~(0x1<<11);	

	getchar();
	printf("MBX Off.\n");  // 51MHz (46mA), 102MHz(80mA)
	rHCLKCON&=~(0x1<<21);	
//	rPCLKCON&=~(0x1<<21);
	rSCLKCON&=~(0x3<<18);

	getchar();
	printf("DSP Off.\n");  // include DSP DMA  //30mA
	rHCLKCON&=~((0x1<<20)|(0xf<<4));	
	rPCLKCON&=~((0xf<<28)|(0x1<<15));
	rSCLKCON&=~(0x3<<16);

	getchar();
	printf("USB OTG Off.\n");  // 10mA
	rHCLKCON&=~(0x1<<19);	
//	rPCLKCON&=~(0x1<<21);
	rSCLKCON&=~((0x1<<2)|(0x1<<10));

	getchar();
	printf("USB HOST Off.\n");  // 3mA
	rHCLKCON&=~(0x1<<16);	
//	rPCLKCON&=~(0x1<<21);
	rSCLKCON&=~(0x1<<1);

	getchar();
	printf("USB Device Off.\n"); // 1mA
//	rHCLKCON&=~(0x1<<27);	
	rPCLKCON&=~(0x1<<5);
	rSCLKCON&=~(0x1<<0);

	getchar();
	printf("IrDA Off.\n"); // 0mA
	rHCLKCON&=~(0x1<<18);	
	rPCLKCON&=~(0x1<<3);
	rSCLKCON&=~(0x1<<3);

	getchar();
	printf("MPEG4 DCTQ Off.\n");  // 25mA
	rHCLKCON&=~(0x1<<10);	
//	rPCLKCON&=~(0x1<<21);
	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("MPEG4 MC Off.\n"); // 4mA
	rHCLKCON&=~(0x1<<9);	
//	rPCLKCON&=~(0x1<<21);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("MPEG4 ME Off.\n"); // 8mA
	rHCLKCON&=~(0x1<<8);	
//	rPCLKCON&=~(0x1<<21);
	rSCLKCON&=~(0x1<<4);

	getchar();
	printf("DEBLOCK Off.\n"); // 2mA
	rHCLKCON&=~(0x1<<15);	
//	rPCLKCON&=~(0x1<<21);
	rSCLKCON&=~(0x1<<8);

	getchar();
	printf("VLX Off.\n"); // 6mA
	rHCLKCON&=~(0x1<<14);	
//	rPCLKCON&=~(0x1<<21);
	rSCLKCON&=~(0x1<<7);

	getchar();
	printf("POST Off.\n"); // 4mA
	rHCLKCON&=~(0x1<<11);	
//	rPCLKCON&=~(0x1<<21);
	rSCLKCON&=~(0x1<<6);

	getchar();
	printf("LCD Off.\n"); // 7mA
	rHCLKCON&=~(0x1<<13);	
//	rPCLKCON&=~(0x1<<21);
	rSCLKCON&=~(0x1<<21);

	getchar();
	printf("CAMERA Off.\n"); // 10mA
	rHCLKCON&=~(0x1<<12);	
//	rPCLKCON&=~(0x1<<21);
	rSCLKCON&=~(0x1<<9);

	getchar();
	printf("DMA Off.\n"); // 2mA
	rHCLKCON&=~(0xf<<0);	
	rPCLKCON&=~(0xf<<24);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("Key pad Off.\n"); // 0mA
//	rHCLKCON&=~(0x1<<10);	
	rPCLKCON&=~(0x1<<19);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("RTC Off.\n");  // 0mA
//	rHCLKCON&=~(0x1<<10);	
	rPCLKCON&=~(0x1<<18);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("Watch Dog Timer Off.\n"); // 0mA
//	rHCLKCON&=~(0x1<<10);	
	rPCLKCON&=~(0x1<<17);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("PWM Timer Off.\n"); // 1mA
//	rHCLKCON&=~(0x1<<10);	
	rPCLKCON&=~(0x1<<16);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("PCM Off.\n"); // 2mA
//	rHCLKCON&=~(0x1<<10);	
	rPCLKCON&=~(0x1<<14);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("I2S.\n");  // 0mA
//	rHCLKCON&=~(0x1<<10);	
	rPCLKCON&=~(0x1<<13);
	rSCLKCON&=~(0x1<<22);

	getchar();
	printf("AC97 Off.\n");  // 1mA
//	rHCLKCON&=~(0x1<<10);	
	rPCLKCON&=~(0x1<<12);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("SDIO Off.\n"); // 1mA
//	rHCLKCON&=~(0x1<<10);	
	rPCLKCON&=~(0x1<<9);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("Memory Stick Off.\n"); // 1mA
//	rHCLKCON&=~(0x1<<10);	
	rPCLKCON&=~(0x1<<8);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("SPI Off.\n"); // 0mA
//	rHCLKCON&=~(0x1<<10);	
	rPCLKCON&=~(0x1<<6);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("I2C Off.\n"); // 1mA
//	rHCLKCON&=~(0x1<<10);	
	rPCLKCON&=~(0x1<<4);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("Uart Off.\n");  // 2mA
//	rHCLKCON&=~(0x1<<10);	
	rPCLKCON&=~(0x3<<1);
//	rSCLKCON&=~(0x1<<5);

	getchar();
	printf("All Clocks On.\n");
	rHCLKCON=(0xffffffff);	
	rPCLKCON=(0xffffffff);
	rSCLKCON=(0xffffffff);
	
}


void Test_Dclk(void)
{
       int s_clk, Dclk_div, Dclk_cmp;
	unsigned int Dclk;
	
 	printf(" DCLK Test \n");
       printf(" 0: PCLK=51MHz        1: USBCLK=48MHz\n");
       printf("Select the DCLK Source clock: 0 or 1\n");
	s_clk=GetIntNum();

     	printf(" Input the DCLKDIV (DCLKDIV+1)\n");
	Dclk_div=GetIntNum();

	printf(" Input the DCLKCMP(DCLKCMP+1)\n");
	Dclk_cmp=GetIntNum();
	
	rCLKOUTCON=(0x5<<12)|((Dclk_cmp)<<8)|((Dclk_div)<<4)|(s_clk<<1)|(0x1<<0);
	rSPCON&=~(1<<17);  // CLKOUT enable

       
	if(s_clk==0)
       Dclk = (unsigned int)( (float)(51000000)/(float)(Dclk_div+1));
       else if (s_clk==1)
	Dclk = (unsigned int)( (float)(48000000)/(float)(Dclk_div+1));

	
	printf("\n[Dclk: %4.1f MHz]\n", (float)Dclk/1.0e6);   
       printf("High level duration: %d\n", Dclk_div-Dclk_cmp);
	printf("High level duration: %d\n", Dclk_cmp+1);

	printf("Hit the any key to exit !!!");
	
	getchar();
}

⌨️ 快捷键说明

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