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

📄 gpio_api_5010.c

📁 SAMSUNG 5009的源代码
💻 C
字号:
/******************************************************************************
 * File name  : Gpio_api.c
 * Start date : 2003. 5. 13
 * By         : Taejin Kwon
 * Contact    : eric.kwon@samsung.com
 * Description: APIs for GPIO
 * 
 *****************************************************************************/
#ifndef	_GPIO_API_C_
#define	_GPIO_API_C_
   
 
/******************************************************************************
 *  								 INCLUDES                                                                 *
 ******************************************************************************/

/******************************************************************************
 *  Global Defines
 ******************************************************************************/

VOID SetInputMode(unsigned char port,unsigned char io)
{

//rPCON8 define for s5s5001 else for s5l5000
#ifdef rPCON8
	unsigned int mask = ~(0x0f<<(io<<2));
#else
	unsigned int mask = ~(3<<(io<<1));
#endif

//set rPCONX  = 00 
	switch(port){
		case 0:
			rPCON0 &= mask;
			break;
		case 1:
			rPCON1 &= mask;
			break;
		case 2:
			rPCON2 &= mask;
			break;
		case 3:
			rPCON3 &= mask;
			break;
		case 4:
			rPCON4 &= mask;
			break;
	}
}

VOID SetOutputMode(unsigned char port,unsigned char io)
{
//rPCON8 define for s5s5001 else for s5l5000
#ifdef rPCON8
	unsigned int mask1 = (1<<(io<<2));
	unsigned int mask2 = ~(0x0E<<(io<<1));
#else
	unsigned int mask1 = (1<<(io<<1));
	unsigned int mask2 = ~(2<<(io<<1));
#endif

//set rPCONX  = 01
	switch(port){
		case 0:
			rPCON0 |= mask1;
			rPCON0 &= mask2;
			break;
		case 1:
			rPCON1 |= mask1;
			rPCON1 &= mask2;
			break;
		case 2:
			rPCON2 |= mask1;
			rPCON2 &= mask2;
			break;
		case 3:
			rPCON3 |= mask1;
			rPCON3 &= mask2;
			break;
		case 4:
			rPCON4 |= mask1;
			rPCON4 &= mask2;
			break;
	}
}

VOID SetGpioPort(unsigned char port,unsigned char io)
{
	unsigned char iomask = (1<<io);
	SetOutputMode(port,io);
	switch(port){
		case 0:
			OUT_High(rPDAT0,iomask);
			break;
		case 1:
			OUT_High(rPDAT1,iomask);
			break;
		case 2:
			OUT_High(rPDAT2,iomask);
			break;
		case 3:
			OUT_High(rPDAT3,iomask);
			break;
		case 4:
			OUT_High(rPDAT4,iomask);
			break;
	}
}

VOID ClrGpioPort(unsigned char port,unsigned char io)
{
	unsigned char iomask = (1<<io);
	SetOutputMode(port,io);
	switch(port){
		case 0:
			OUT_Low(rPDAT0,iomask);
			break;
		case 1:
			OUT_Low(rPDAT1,iomask);
			break;
		case 2:
			OUT_Low(rPDAT2,iomask);
			break;
		case 3:
			OUT_Low(rPDAT3,iomask);
			break;
		case 4:
			OUT_Low(rPDAT4,iomask);
			break;
	}
}

unsigned char GetGpioPort(unsigned char port,unsigned char io)
{
	unsigned char iodata;
	unsigned char iomask = (1<<io);

	SetInputMode(port,io);

	switch(port){
		case 0:
			iodata = (rPDAT0&iomask);
			break;
		case 1:
			iodata = (rPDAT1&iomask);
			break;
		case 2:
			iodata = (rPDAT2&iomask);
			break;
		case 3:
			iodata = (rPDAT3&iomask);
			break;
		case 4:
			iodata = (rPDAT4&iomask);
			break;
	}

	return (iodata?1:0);
}

extern FP_IFCALLBACK AttachedKeySendCallback;

/******************************************************************************
 *  Function Defines
 ******************************************************************************/

/******************************************************************************
 * Function name  : GPIO_Init 
 * Arguments      : 
 * Return         : 
 * By             : Taejin Kwon
 * Description    : Initialize GPIO
 *	Ref. Developer's Toolkit #08
 *****************************************************************************/

//rPCON0 = 0x43322222;		//ARM JTAG, I2S Input, SPDIF In/Out
//rPCON1 = 0x01114225;		//P1.3 CKO output, I2S Output
//rPCON2 = 0x22233112;		//P2.6 output, I2C mode
//rPCON3 = 0x22221112; 	           //P3.6 LED output, Servo control

//-----------------------------------------------------------------------------
//CAUTION (For S5L5010)
//-----------------------------------------------------------------------------
//	PxPUR	:	1: The pull-up resitor is diabled.
//		:	0: The pull-up resitor of the corresponding port pin is enabled.
//-----------------------------------------------------------------------------

VOID GPIO_Init( VOID )
{ 
	/*
		 CAUTION!!!!!!!!.
	 
		 In DVS solution
		 CD/DVD and RRQ_H is initialized '1'
		 Close_sw and Open_sw should need  pull-up
	*/
	
	/*
		P1.1, P1.0, P0.6, P0.3 must high before reset.
		if those are low before reset, S5L5010x enters test mode.
	*/

#ifdef _BOARD_EVA
	/*
		CAUTION!!!!!!!!.
	 		 
		CD/DVD and DR_MUTE must have initial value '1'
		Close_sw and Open_sw should need pull-up
	*/
	
	/*
		P0.3, P0.6, P1.0, P1.1 must high before reset.
		If these are low before reset, S5L5010x enters test mode.
	*/
	
/*
	P0.7	  P0.6	    P0.5  	P0.4	  P0.3		P0.2	  P0.1	   P0.0
   TMSADM    NTRSTADM	RTCK	SYS_TDO	 SYS_TMS   SYS_TCK	 SYS_TDI  SYS_nTRST
	 x		    x   	 x		  x		   x		 x			x	     x
*/
	rPCON0 = ((2<<28)|(2<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));
	
	//rPDAT0 |= 0x40;	

/*
	P1.7	P1.6	P1.5		P1.4	  P1.3	   P1.2		P1.1		P1.0
	RxD 	TxD     IRIN     SPD_SENSE   DR_MUTE   OPEN    TDIADM      TCKADM   
  	 x		 x		 x	   		 I		   O		O		 x			 x
*/
	rPCON1 = ((2<<28)|(2<<24)|(2<<20)|(0<<16)|(1<<12)|(1<<8)|(2<<4)|(1<<0));
	
	rPDAT1 |= 0x00;
	//rP1PUR  |= 0x03;

/*
	P2.7	P2.6	P2.5	P2.4	 P2.3	   P2.2	    P2.1    P2.0
  CLOSE_SW  SMON2	SMON1	I2SDO1  I2SDO0    I2CDAT   I2CCK   CD/DVD
	  I		  x		  x		 x		   x	    x		 x	      O
*/
	rPCON2 = ((0<<28)|(5<<24)|(5<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(1<<0));	
//	rPCON2 = ((2<<28)|(2<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(1<<0));
	rPDAT2 |= 0x01; //DVD_CD select on
	//rP2PUR |= 0x80; //CLOSE_SW pull-up

/*
	P3.7	P3.6	P3.5	P3.4	P3.3   	P3.2	P3.1	P3.0
	-   	 ML    OPEN_SW	 MC      MD    I2SBCKO	I2SWSO	I2SMCK0
	xx		 O		 I		 O		 O		 x		 x		  x
										
*/
	rPCON3 = ((1<<24)|(0<<20)|(1<<16)|(1<<12)|(2<<8)|(2<<4)|(2<<0));
		
	//rP3PUR |= 0x20; //OPEN_SW pull-up

/*
	P4.7 ~ P4.0 : FDA9  ~ FDA0  (Flash memory)
	P5.7 ~ P5.0 : FDA17 ~ FAD10
	P6.7 ~ P6.0 : FDB5  ~ FDA18
	P7.1 ~ P7.0 : FDB7  ~ FDB6  (P7.7 ~ P7.2 : No_Pin)
*/
	rPCON4 = ((2<<28)|(2<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));
	rPCON5 = ((2<<28)|(2<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));
	rPCON6 = ((0<<28)|(0<<24)|(0<<20)|(0<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));
	rPCON7 = ((2<<28)|(2<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));
#else	

	/*
		 CAUTION!!!!!!!!.
	 
		 In DVS solution
		 CD/DVD and RRQ_H is initialized '1'
		 Close_sw and Open_sw should need  pull-up
	*/
	
	/*
		P1.1, P1.0, P0.6, P0.3 must high before reset.
		if those are low before reset, S5L5010x enters test mode.
	*/
/*
	P0.7       P0.6      P0.5     P0.4	  	P0.3	        P0.2	  P0.1	  P0.0
	 x            x  	    RTCK   SYS_TDO   SYS_TMS  SYS_TCK	SYS_TDI  SYS_nTRST
   close	x  	   	          x		         x		  x		   x		   x
    FMON1      FMON0
    O/CLOSE  DR_MUTE
*/
/*   xu for 5010_V2  051026
P0.7       P0.6      P0.5     P0.4	  	P0.3	        P0.2	  P0.1	  P0.0
CLOSE	 MD     	    RTCK   SYS_TDO   SYS_TMS  SYS_TCK	SYS_TDI  SYS_nTRST
*/	 
	
//	rPCON0 = ((0<<28)|(1<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0)); //Old Board
//	rPCON0 = ((1<<28)|(0<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));
rPCON0 = ((1<<28)|(1<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));
	rPDAT0 = 0x80;  
	
/*
	 P1.7    	P1.6		 P1.5	P1.4	       P1.3	       P1.2       P1.1	 	P1.0
	 RXD       TXD        VRCD     SCLK 			TXD_L 		RXD       SRQ    	CD/DVD    
  	  I	        O 	         O	   	  x	 	 		 x	        x		  I	  	  	O
     S_SENSE                                                                        FMON3  	FMON2
*/

/* Zhan 20050819
	 P1.7    	P1.6		 P1.5		P1.4	   	P1.3	    P1.2       P1.1	 	P1.0
	 RXD       TXD           IR     	MC 			ML 			MD         X	  OPEN    
  	  I	        O 	         I	   	  	O	 	  	O	        O		  	O	  	  O
     S_SENSE                                                                FMON3  	FMON2
*/
/* for 5010_V2 xu051026
P1.7    	       P1.6		 P1.5		P1.4	   	P1.3	                     P1.2       P1.1	 	P1.0
OPEN_SW/RXD       TXD           IR     	OPEN	SPD_SENSE	     DR_MUTE	   MC            ML    
 */	  
	 
	//rPCON1  = ((2<<28)|(2<<24)|(1<<20)|(0<<16)|(2<<12)|(2<<8)|(0<<4)|(1<<0));
	rPCON1  = ((0<<28)|(2<<24)|(2<<20)|(1<<16)|(0<<12)|(1<<8)|(1<<4)|(1<<0));
//	rPDAT1 |= 0x00; 
	rP1PUR |= 0x80;  //for 5010_V2 xu051026

/*
	P2.7	       P2.6  	P2.5	      P2.4	     	P2.3	    	P2.2	    	P2.1		 P2.0
	 MC		 ML		 MD		 x        I2SDAT0   I2CDAT   I2CCK     VRDVD
	 O		 O		 O		 I		  x		  x		  x	          O
	                                        PDDVS     
*/
/*
	Zhan 20050819
	P2.7	       P2.6  		P2.5	      P2.4	     	P2.3	    	P2.2	    	P2.1		 P2.0
	SpD_sense	   DR_MUTE		I2SDO2		  ISDO1        I2SDAT0          I2CDAT   		I2CCK        SMONITOR0
	 0				 1			 2				2		 	 2		 		 2		 		 2	          5
		                                        PDDVS     
*/
/*  for 5010_V2 xu051026
P2.7	              P2.6  		P2.5	      P2.4	     	P2.3	    	P2.2	    	P2.1		 P2.0
SMONITOR1	 VR_CD		I2SDO2		  ISDO1        I2SDAT0          I2CDAT  
*/
	//rPCON2 = ((5<<28)|(5<<24)|(5<<20)|(1<<16)|(2<<12)|(2<<8)|(2<<4)|(1<<0)); //Old Board
	rPCON2 = ((5<<28)|(1<<24)|(5<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(1<<0));//p2.6 VR_CD xu051026

//	rPDAT2 |= 0x10;
//	rP2PUR |= 0x08;

/*
	P3.7    P3.6 	P3.5  	P3.4	          P3.3		 P3.2	   P3.1 	       P3.0
	-   	RRQ_L   SPDIFO	OPEN_SW  		CLOSE_SW   I2SBCKO   I2SWSO			I2SMCK0
	 x	    O		  x		  I		    I			  x		        x		  x
										
*/
/*
 	Zhan 20050819
	P3.7    P3.6 		P3.5  	P3.4	      	P3.3		 P3.2	   P3.1 	       P3.0
	-   	Close_SW   SPDIFO	OPEN_SW 		CD/DVD   	I2SBCKO   I2SWSO		I2SMCK0
	 x	    I		  	2		I		    	O			  2		    2		  	 2
										
*/
/*  for 5010_V2 xu051026
P3.7    P3.6 		P3.5  	P3.4	      	P3.3		 P3.2	   P3.1 	       P3.0
-   	Close_SW   SPDIFO VR_DVD   CD/DVD   	I2SBCKO   I2SWSO		I2SMCK0
*/
	rPCON3 = ((0<<24)|(2<<20)|(1<<16)|(1<<12)|(2<<8)|(2<<4)|(2<<0));
	rPDAT3 |= 0x04;	//xu0901
	rP3PUR |= 0x40;  //xu051026

/*
	P4.7 ~ P4.0 : FDA9  ~ FDA0  (Flash memory)
	P5.7 ~ P5.0 : FDA17 ~ FAD10
	P6.7 ~ P6.0 : FDB5  ~ FDA18
	P7.1 ~ P7.0 : FDB7  ~ FDB6  (P7.7 ~ P7.2 : No_Pin)
*/
	rPCON4 = ((2<<28)|(2<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));
	rPCON5 = ((2<<28)|(2<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));
	rPCON6 = ((2<<28)|(2<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));
	rPCON7 = ((2<<28)|(2<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));


#endif

}

VOID GPIO_SetInterProgMode( BOOL interlace )
{
}

VOID GPIO_SetAudioMuteState( BOOL mute )
{
}

VOID GPIO_SetPowerState( BOOL power_on )
{
}


#endif /* _GPIO_API_C_ */

⌨️ 快捷键说明

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