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

📄 xmain.c

📁 wince bsp 原文件, 在s3c2442上使用
💻 C
字号:
//====================================================================
// File Name : xmain.c
// Function  : S3C2440 Test Main Menu
// Program   : Junon
// Date      : Nov 29, 2003
// Version   : 0.0
// History
//   0.0 : Programming start (February 20,2002) -> 
//====================================================================

#include <stdlib.h>
#include <string.h>

#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h" // 03.11.27 junon


/**************** User test program header file ********************/

#include	"lcd.h"
#include	"Glib.h"
#include	"LCDlib.h"

void Isr_Init(void);
void HaltUndef(void);
void HaltSwi(void);
void HaltPabort(void);
void HaltDabort(void);

void Clk0_Enable(int clock_sel);	
void Clk1_Enable(int clock_sel);
void Clk0_Disable(void);
void Clk1_Disable(void);

extern void Calc_Clock(int print_msg);
extern U32 Mdiv, Pdiv, Sdiv, Fclk, Hclk, Pclk, Hdivn, Pdivn, Hclk_Ratio, Pclk_Ratio, Ref_Cnt;

// Clock select argument.
#define	UCLK_SEL	(1)
#define	HCLK_SEL	(3)
#define	PCLK_SEL	(4)
#define	DCLK_SEL	(5)
// Hidden
#define	MPLL_SEL	(0)
#define	FCLK_SEL	(2)

//===================================================================

void Main(void)
{
	int i, voltage=120;
	unsigned int mpll_val;

	// GPIO port init.
	Port_Init();

	// MMU init. I/D cache on.
	//MMU_Init();
   

	//////// user can set clock again.	/////////
#if 0
	Delay(0);
	voltage=110;
	Max1718_Set(voltage);		// set proper voltage after clock changed.
	Delay(1);

	#if FIN==12000000	//When 12MHz.
	ChangeUPllValue(56,2,2);		// 48MHz
	for(i=0; i<7; i++);
	ChangeClockDivider(13,12);
	ChangeMPllValue(68,1,1);		//2440x
	#else	// else xtal_in=16.9344MHz.
	ChangeUPllValue(60,4,2);		// 48MHz
	for(i=0; i<7; i++);
	ChangeClockDivider(13,12);
	//ChangeMPllValue(118,2,2);	//265Mhz
	ChangeMPllValue(97,1,2);		//295Mhz  // 9.21 xm.h
//	ChangeMPllValue(60,4,1);		//295Mhz
	//ChangeMPllValue(110,3,1);	//398Mhz
	//ChangeMPllValue(120,2,1);	//531Mhz
	#endif
#endif
	/////////////////////////////////////////

	Uart_Init(Pclk, 115200);
	Uart_Select(0);
	Uart_TxEmpty(0);

	Calc_Clock(1);
	UPDATE_REFRESH(Hclk);

	// ISR init
	Isr_Init();
//	Uart_Init(Pclk, 115200);
//	Uart_Select(0);

	// timer setting for delay 100us unit.
	//Check whether or not the POWER_OFF wake-up.
	Delay(1);	//calibrate Delay()

	 //Turn on LCD.
    //PWR_Lcd_Tft_24Bit_240320_On();

	//Check_SleepWakeUp();  //It's needed only for sleep mode test.   


	//Save the wasted power consumption on GPIO.
	//rIISPSR=(2<<5)|(2<<0); //IIS_LRCK=44.1Khz @384fs,PCLK=50Mhz.

	// Set I/O strength control.
	rDSC0 = (0<<31)|(0x3<<8)|(0xff<<0);
//	rDSC0 = (0<<31)|(0x0<<8)|(0x00<<0);
	// nEN_DSC	[31]	: 0:I/O drive strength enable, 1:Disable
	// DSC_ADR	[9:8]	: Addr drive strength, 0:10mA, 1:8mA, 2:6mA, 3:4mA
	// DSC_DATA	[7:0]	: DATA drive strength, 0:12mA, 1:10mA, 2:8mA, 3:6mA
	rDSC1 = (0x3<<28)|(0x3<<26)|(0xfffff<<0);
//	rDSC1 = (0x0<<28)|(0x0<<26)|(0x00000<<0);	
	// DSC_SCK1	[29:28]	: SCLK1, 0:16mA, 1:12mA, 2:8mA, 3:6mA 
	// DSC_SCK0	[27:26]	: SCLK0, 0:16mA, 1:12mA, 2:8mA, 3:6mA 
	// DSC_SCKE	[25:24]	: SCLKE, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	// DSC_SDR	[23:22]	: nRAS/nCAS, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	// DSC_NFC	[21:20]	: Nand flash(nFCE,nFRE,nFWE,CLE,ALE), 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	// DSC_BE	[19:18]	: nBE[3:0], 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	// DSC_WOE	[17:16]	: nBE[3:0], 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	// DSC_CS7	[15:14]	: nGCS7, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	// DSC_CS6	[13:12]	: nGCS6, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	// DSC_CS5	[11:10]	: nGCS5, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	// DSC_CS4	[9:8]	: nGCS4, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	// DSC_CS3	[7:6]	: nGCS3, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	// DSC_CS2	[5:4]	: nGCS2, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	// DSC_CS1	[3:2]	: nGCS1, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	// DSC_CS0	[1:0]	: nGCS0, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		
	// CLKOUT0/1 select.
	//Uart_Printf("CLKOUT0:MPLL in, CLKOUT1:RTC clock.\n");
	Clk0_Enable(2);	// 0:MPLLin, 1:UPLL, 2:FCLK, 3:HCLK, 4:PCLK, 5:DCLK0
	Clk1_Enable(3);	// 0:MPLLout, 1:UPLL, 2:RTC, 3:HCLK, 4:PCLK, 5:DCLK1	
	//Clk0_Disable();
	//Clk1_Disable();
	
	Uart_Printf("\n\n");
	
///////////////////// menu start ///////////////////////////
	while(1) {
	
/*	    ClearMemory();
	    Uart_Printf("ok now\n\n");
	    while(1)
	   {
	   ;
	   }
	    
	    IicPortSet();  */
	    /*
	    	rINTMSK |= (BIT_IIC);

	//Enable ACK, Prescaler IICCLK=PCLK/512, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
     	rIICCON  = (1<<7) | (1<<6) | (1<<5) | (0x3);

	rIICADD  = 0x10;                    //24A0 slave address = [7:1]
	rIICSTAT = 0x10;                    //IIC bus data output enable(Rx/Tx)
	rIICLC = (1<<2)|(3);   			// SDAOUT has 5clock cycle delay
*/
    rGPBCON &= ~(0x1<<4);
    rGPBCON |= (0x1<<3); 
    rGPBUP |= ~(0x1<<2);
    rGPBDAT |= (0x1<<2);
    rGPEUP  |= 0xc000;                  //Pull-up disable
    rGPECON |= 0xa00000;                //GPE15:IICSDA , GPE14:IICSCL    

      //Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
    rIICCON  = (1<<7) | (0<<6) | (1<<5) | (0xf);
    rIICADD  = 0x10;                    //2440 slave address = [7:1]
    rIICSTAT = 0x10;    
                    //IIC bus data output enable(Rx/Tx)
 //     Wr_CamIIC(0x90,0x2a,0xbb);
//      CameraModuleSetting();
		//Lcd_Test();
		Camera_Test();
		Uart_Printf("\n");
	}

} // end of Main().

//===================================================================
void Isr_Init(void)
{
    pISR_UNDEF  = (unsigned)HaltUndef;
    pISR_SWI    = (unsigned)HaltSwi;
    pISR_PABORT = (unsigned)HaltPabort;
    pISR_DABORT = (unsigned)HaltDabort;
	
    rINTMOD     = 0x0;					 //All=IRQ mode
//  rINTCON=0x5;						   //Non-vectored,IRQ enable,FIQ disable    
    rINTMSK     = BIT_ALLMSK;			  //All interrupt is masked.
    rINTSUBMSK  = BIT_SUB_ALLMSK;		  //All sub-interrupt is masked. <- April 01, 2002 SOP

//  rINTSUBMSK  = ~(BIT_SUB_RXD0);		 //Enable Rx0 Default value=0x7ff
//  rINTMSK     = ~(BIT_UART0);			//Enable UART0 Default value=0xffffffff    
	
//  pISR_UART0=(unsigned)RxInt;			//pISR_FIQ,pISR_IRQ must be initialized
}

//===================================================================
void HaltUndef(void)
{
    Uart_Printf("Undefined instruction exception.\n");
    while(1);
}

//===================================================================
void HaltSwi(void)
{
#if !SEMIHOSTING	
		Uart_Printf("SWI exception!!!\n");
		while(1);
#endif	
}

//===================================================================
void HaltPabort(void)
{
    Uart_Printf("Pabort exception.\n");
    while(1);
}

//===================================================================
void HaltDabort(void)
{
    Uart_Printf("Dabort exception.\n");
    while(1);
}

void Clk0_Enable(int clock_sel)	
{	// 0:MPLLin, 1:UPLL, 2:FCLK, 3:HCLK, 4:PCLK, 5:DCLK0
	rMISCCR = rMISCCR&~(7<<4) | (clock_sel<<4);
	rGPHCON = rGPHCON&~(3<<18) | (2<<18);
}
void Clk1_Enable(int clock_sel)
{	// 0:MPLLout, 1:UPLL, 2:RTC, 3:HCLK, 4:PCLK, 5:DCLK1	
	rMISCCR = rMISCCR&~(7<<8) | (clock_sel<<8);
	rGPHCON = rGPHCON&~(3<<20) | (2<<20);
}
void Clk0_Disable(void)
{
	rGPHCON = rGPHCON&~(3<<18);	// GPH9 Input
}
void Clk1_Disable(void)
{
	rGPHCON = rGPHCON&~(3<<20);	// GPH10 Input
}

void ClearMemory(void)
{
	int i;
	U32 data;
	int memError=0;
	U32 *pt;
	
	//
	// memory clear
	//
	Uart_Printf("Clear Memory (%xh-%xh):WR",_RAM_STARTADDRESS,HEAPEND);

	//pt=(U32 *)_RAM_STARTADDRESS;
	pt=(U32 *)0x30200000;//0x30200000;
	while((U32)pt < 0x33FF3000)  //0X3020 -0X37FF
	{ 
		*pt=(U32)0x0; //0x33577fff;
		
		pt++;
	}
	
		pt=(U32 *)0x33ff6000;//0x30200000;
	while((U32)pt < 0x37FF5000)  //0X3020 -0X37FF
	{ 
		*pt=(U32)0x0; //0x33577fff;
		
		pt++;
	}
	
	if(memError==0)Uart_Printf("\b\bO.K.\n");
}

⌨️ 快捷键说明

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