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

📄 gpio_api_5008.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));
/*rainbow.zhang 050829:support vfd*/
#if !(_APP_CAP_PERI_VFD)
	unsigned int mask2 = ~(0x0E<<(io<<1));
#endif /*  !(_APP_CAP_PERI_VFD) */
/*rainbow.zhang 050829:support vfd*/
#else /* rPCON8 */
	unsigned int mask1 = (1<<(io<<1));
	unsigned int mask2 = ~(2<<(io<<1));
#endif /* rPCON8 */

//set rPCONX  = 01
	switch(port){
		case 0:
			rPCON0 |= mask1;
/*rainbow.zhang 050829:support vfd*/
#if !(_APP_CAP_PERI_VFD)
			rPCON0 &= mask2;
#endif
/*rainbow.zhang 050829:support vfd*/
			break;
		case 1:
			rPCON1 |= mask1;
/*rainbow.zhang 050829:support vfd*/
#if !(_APP_CAP_PERI_VFD)
			rPCON1 &= mask2;
#endif/*rainbow.zhang 050829:support vfd*/
			break;
		case 2:
			rPCON2 |= mask1;
/*rainbow.zhang 050829:support vfd*/
#if !(_APP_CAP_PERI_VFD)
			rPCON2 &= mask2;
#endif/*rainbow.zhang 050829:support vfd*/
			break;
		case 3:
			rPCON3 |= mask1;
/*rainbow.zhang 050829:support vfd*/
#if !(_APP_CAP_PERI_VFD)
			rPCON3 &= mask2;
#endif/*rainbow.zhang 050829:support vfd*/
			break;
		case 4:
			rPCON4 |= mask1;
/*rainbow.zhang 050829:support vfd*/
#if !(_APP_CAP_PERI_VFD)
			rPCON4 &= mask2;
#endif/*rainbow.zhang 050829:support vfd*/
			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 S5L5008)
//-----------------------------------------------------------------------------
//	PxPUR	:	1: The pull-up resitor is diabled.
//		:	0: The pull-up resitor of the corresponding port pin is enabled.
//-----------------------------------------------------------------------------

void GPIO_Init( void )
{ 
#ifdef _BOARD_EVA

/*==============================================================================
	#define pSPD_SENSE  		0x40	// p0.6:|0100|0000|//INPUT
	#define pOPEN_SW		0x20	// P0.5:|0010|0000|//INPUT
	#define pCLOSE_SW		0x20	// P1.5:|0010|0000|//INPUT

	#define pCLOSE_MOTOR		0x08	// p1.3:|0000|1000|//OUTPUT
	#define pOPEN_MOTOR		0x08	// P1.3:|0000|1000|//OUTPUT
	#define pCLOSE_OPEN		0x08	// P1.3:|0000|1000|//OUTPUT

	#define pCD_DVD_LD		0x08	// P2.3:|0000|1000|//OUTPUT
	#define pDR_MUTE		0x10	// P2.4:|0001|0000|//OUTPUT

================================================================================*/

/*			P0.7	P0.6	P0.5	P0.4	P0.3	P0.2	P0.1	P0.0	*/
/*			RTCLK	SPD_SNS	OPN_SW	TDO	TMS	TCK	TDI	NTRST	*/
/*			4	0	0	2	2	2	2	2	*/
			//ARM JTAG, I2S Input, SPDIF In/Out
	rPCON0 = 	(4<<28)|(0<<24)|(0<<20)|(2<<16)|(2<<12)|(2<< 8)|(2<< 4)|(2<< 0);
	rP0PUR &=	0xdf;
/*			P1.7	P1.6	P1.5	P1.4	P1.3	P1.2	P1.1	P1.0	*/
/*			N.C	DMON3	CLS_SW	TDO	OPN/CLS	TCK	TDI	SPDIFO	*/
/*			0	1	0	1	0	2	2	5	*/

//	rPCON1 =  	(0<<28)|(1<<24)|(0<<20)|(1<<16)|(0<<12)|(2<< 8)|(2<< 4)|(5<< 0);
	/* change gpio 1.6 to spdif output. 2005.01.20. by cklee. */
	rPCON1 =  	(0<<28)|(3<<24)|(0<<20)|(1<<16)|(0<<12)|(2<< 8)|(2<< 4)|(5<< 0);
	rPDAT1 &= 	0xf7;		//initial state is CLOSE
	rP1PUR |= 	0x08;		//P1.3 Pull-Up disable
	rP1PUR &= 	0xdf;		//P1.3 Pull-Up disable
/*			P2.7	P2.6	P2.5	P2.4	P2.3	P2.2	P2.1	P2.0	*/
/*			I2SBCKO	I2WSO	I2SMCKO	DR_MUTE	CD_DVD	I2SDO2	I2SDO1	I2SDO0	*/
/*			2	2	2	1	1	2	2	2	*/
			//2channel(I2SDO0),6channel(I2SDO0,I2SDO1,I2SDO2)
	rPCON2 =  	(2<<28)|(2<<24)|(2<<20)|(1<<16)|(1<<12)|(2<< 8)|(2<< 4)|(2<< 0);
			//P2.6 output, I2C mode
	rPDAT2 |= 0x18;			//DR_MUTE on, DVD_SELECTION
	rP2PUR |= 0x18;	

/*			P3.7	P3.6	P3.5	P3.4	P3.3	P3.2	P3.1	P3.0	*/
/*			FDA1	FDA0	RXD	TXD	SMON3	SMON2	SMON1	IRIN	*/
/*			2	2	2	2	5	5	5	2	*/

	rPCON3 = 	(2<<28)|(2<<24)|(2<<20)|(2<<16)|(5<<12)|(5<< 8)|(5<< 4)|(2<< 0);

#elif defined(HITACHI_SSCR)	//CHINA)
/*================================================================================
	#define pOPEN_SW		0x20	// P0.5:|0010|0000|	//INPUT
	#define pCLOSE_SW		0x10	// P1.4:|0001|0000|	//INPUT
	#define pSPD_SENSE  		0x02  	// p6.1:|0000|0010|	//INPUT

	#define pDR_MUTE		0x40	// P1.6:|0100|0000|	//OUTPUT
	#define pCD_DVD_LD		0x40	// P0.6:|0100|0000|	//OUTPUT

	#define pOPEN_MOTOR		0x08	// P1.3:|0000|1000|	//OUTPUT
	#define pCLOSE_MOTOR		0x20	// p1.5:|0010|0000|	//OUTPUT

	0:GPIN, 1:GPOUT
================================================================================*/
/*			P0.7	P0.6	P0.5	P0.4	P0.3	P0.2	P0.1	P0.0		*/
/*			RTCLK	CD/DVD	OPEN_SW	TDO	TMS	TCK	TDI	NTRST		*/
/*			4	1	0	2	2	2	2	2		*/
	rPCON0 =	(4<<28)|(1<<24)|(0<<20)|(2<<16)|(2<<12)|(2<< 8)|(2<< 4)|(2<< 0);
			// ARM JTAG, I2S Input, SPDIF In/Out
	rP0PUR &= 0xdf;

/*			P1.7	P1.6	P1.5	P1.4	P1.3	P1.2	P1.1	P1.0		*/
/*			N.C.	DR_MUTE	CLOSE	CLS_SW	OPEN	IICDATA	IIC_CLK	SPDIFO		*/
/*			0	1	1	0	1	2	2	5		*/
	rPCON1 =	(0<<28)|(1<<24)|(1<<20)|(0<<16)|(1<<12)|(2<< 8)|(2<< 4)|(5<< 0);
			// P1.3 CKO output, I2S Output
	rP1PUR &= 0xef;			//all disable

/*			P2.7    P2.6    P2.5   	P2.4   	P2.3   	P2.2	P2.1	P2.0		*/
/*			I2SBCKO	I2WSO	I2SMCKO	MC	ML	I2SDO2	I2SDO1	I2SDO0	//2channel(I2SDO0),6channel(I2SDO0,I2SDO1,I2SDO2)	*/
/*			2	2	2	1	1	2	2	2		*/
	rPCON2 =	(2<<28)|(2<<24)|(2<<20)|(1<<16)|(1<<12)|(2<< 8)|(2<< 4)|(2<< 0);
			// P2.6 output, I2C mode
	rPDAT2 |= 0x18;
//	rP2PUR &= 0xe7;

/*			P3.7	P3.6    P3.5   	P3.4   	P3.3   	P3.2   	P3.1   	P3.0		*/
/*			FDA1   	FDA0   	RXD   	TXD  	SMON3  	SMON2  	SMON1  	IRIN		*/
/*			2      	2      	2       2      	5     	5	5 	2		*/
	rPCON3 =	(2<<28)|(2<<24)|(2<<20)|(2<<16)|(5<<12)|(5<< 8)|(5<< 4)|(2<< 0);

/*			P6.7	P6.6	P6.5	P6.4	P6.3	P6.2	P6.1	P6.0		*/
/*      								SPD_SNS			*/
/*									0			*/
//	rPCON6 =	(0<<28)|(0<<24)|(0<<20)|(0<<16)|(0<<12)|(0<< 8)|(0<< 4)|(0<< 0);
	rPCON6 &=	0xffffff0f;  

#elif defined(_BOARD_CHINA_VER6)	//8M FLASH
/*================================================================================
	#define pOPEN_SW		0x20	// P0.5:|0010|0000|	//INPUT
	#define pCLOSE_SW		0x10	// P1.4:|0001|0000|	//INPUT
	#define pSPD_SENSE  		0x20  	// p3.5:|0010|0000|	//INPUT

	#define pDR_MUTE		0x40	// P1.6:|0100|0000|	//OUTPUT
	#define VR_DVD			0x20	// P1.5:|0010|0000|	//OUTPUT
	#define VR_CD			0x08	// P1.3:|0000|1000|	//OUTPUT
	
	#define pOPEN_MOTOR		0x08	// P2.3:|0000|1000|	//OUTPUT
	#define pCLOSE_MOTOR		0x10	// p2.4:|0001|0000|	//OUTPUT

	0:GPIN, 1:GPOUT
	0:PULLUP ENABLE
	1:PULLUP DISABLE
	
================================================================================*/
/*			P0.7	P0.6	P0.5	P0.4	P0.3	P0.2	P0.1	P0.0		*/
/*			RTCLK	CD/DVD	OPEN_SW	TDO	TMS	TCK	TDI	NTRST		*/
/*			4	1	0	2	2	2	2	2		*/
	rPCON0 =	(4<<28)|(1<<24)|(0<<20)|(2<<16)|(2<<12)|(2<< 8)|(2<< 4)|(2<< 0);
			// ARM JTAG, I2S Input, SPDIF In/Out
	rP0PUR &= 0xdf;

/*			P1.7	P1.6	P1.5	P1.4	P1.3	P1.2	P1.1	P1.0		*/
/*			N.C.	DR_MUTE	VR_DVD	CLS_SW	VR_CD	IICDATA	IIC_CLK	SPDIFO		*/
/*			0	1	1	0	1	2	2	5		*/
	rPCON1 =	(0<<28)|(1<<24)|(1<<20)|(0<<16)|(1<<12)|(2<< 8)|(2<< 4)|(5<< 0);
			// P1.3 CKO output, I2S Output
	rP1PUR &= 0xef;			//all disable

/*			P2.7    P2.6    P2.5   	P2.4   	P2.3   	P2.2	P2.1	P2.0		*/
/*			I2SBCKO	I2WSO	I2SMCKO	CLOSE	OPEN	I2SDO2	I2SDO1	I2SDO0	//2channel(I2SDO0),6channel(I2SDO0,I2SDO1,I2SDO2)	*/
/*			2	2	2	1	1	2	2	2		*/
	rPCON2 =	(2<<28)|(2<<24)|(2<<20)|(1<<16)|(1<<12)|(2<< 8)|(2<< 4)|(2<< 0);
			// P2.6 output, I2C mode
	rPDAT2 |= 0x08;
//	rP2PUR &= 0xe7;
/*rainbow.zhang 050826: support vfd*/
#if _APP_CAP_PERI_VFD
/*			P3.7	P3.6    P3.5   	P3.4   	P3.3   	P3.2   	P3.1   	P3.0		*/
/*			FDA1   	FDA0   	SPD_S  	TXD  	FP_CLK  FP_DATA FP_STB 	IRIN		*/
/*			2      	2      	0       2      	1     	1	     1      	2		*/
	rPCON3 =	(2<<28)|(2<<24)|(0<<20)|(2<<16)|(1<<12)|(1<< 8)|(1<< 4)|(2<< 0);
#else /* _APP_CAP_PERI_VFD */
/*			P3.7	P3.6    P3.5   	P3.4   	P3.3   	P3.2   	P3.1   	P3.0		*/
/*			FDA1   	FDA0   	SPD_S  	TXD  	SMON3  	SMON2  	SMON1  	IRIN		*/
/*			2      	2      	0       2      	5     	5	5 	2		*/
	rPCON3 =	(2<<28)|(2<<24)|(0<<20)|(2<<16)|(5<<12)|(5<< 8)|(5<< 4)|(2<< 0);
#endif /* _APP_CAP_PERI_VFD */
/*rainbow.zhang 050826: support vfd*/
/*			P6.7	P6.6	P6.5	P6.4	P6.3	P6.2	P6.1	P6.0		*/
/*      								SPD_SNS			*/
/*									0			*/
//	rPCON6 =	(0<<28)|(0<<24)|(0<<20)|(0<<16)|(0<<12)|(0<< 8)|(0<< 4)|(0<< 0);

	/* Moved to int_pid.s (20050927, ishan) */
	/* FDA19 for 8M Flash or SRAM  */
	//rPCON6 = 0x22222222;
#elif defined(_BOARD_CHINA)
/*================================================================================
	#define pOPEN_SW		0x20	// P0.5:|0010|0000|	//INPUT
	#define pCLOSE_SW		0x10	// P1.4:|0001|0000|	//INPUT
	#define pSPD_SENSE  		0x02  	// p6.1:|0000|0010|	//INPUT

	#define pDR_MUTE		0x40	// P1.6:|0100|0000|	//OUTPUT
	#define pCD_DVD_LD		0x40	// P0.6:|0100|0000|	//OUTPUT

	#define pOPEN_MOTOR		0x08	// P1.3:|0000|1000|	//OUTPUT
	#define pCLOSE_MOTOR		0x20	// p1.5:|0010|0000|	//OUTPUT

	0:GPIN, 1:GPOUT
================================================================================*/
/*			P0.7	P0.6	P0.5	P0.4	P0.3	P0.2	P0.1	P0.0		*/
/*			RTCLK	CD/DVD	OPEN_SW	TDO	TMS	TCK	TDI	NTRST		*/
/*			4	1	0	2	2	2	2	2		*/
	rPCON0 =	(4<<28)|(1<<24)|(0<<20)|(2<<16)|(2<<12)|(2<< 8)|(2<< 4)|(2<< 0);
			// ARM JTAG, I2S Input, SPDIF In/Out
	rP0PUR &= 0xdf;

/*			P1.7	P1.6	P1.5	P1.4	P1.3	P1.2	P1.1	P1.0		*/
/*			N.C.	DR_MUTE	CLOSE	CLS_SW	OPEN	IICDATA	IIC_CLK	SPDIFO		*/
/*			0	1	1	0	1	2	2	5		*/
	rPCON1 =	(0<<28)|(1<<24)|(1<<20)|(0<<16)|(1<<12)|(2<< 8)|(2<< 4)|(5<< 0);
			// P1.3 CKO output, I2S Output
	rP1PUR &= 0xef;			//all disable

/*			P2.7    P2.6    P2.5   	P2.4   	P2.3   	P2.2	P2.1	P2.0		*/
/*			I2SBCKO	I2WSO	I2SMCKO	MC	ML	I2SDO2	I2SDO1	I2SDO0	//2channel(I2SDO0),6channel(I2SDO0,I2SDO1,I2SDO2)	*/
/*			2	2	2	1	1	2	2	2		*/
	rPCON2 =	(2<<28)|(2<<24)|(2<<20)|(1<<16)|(1<<12)|(2<< 8)|(2<< 4)|(2<< 0);
			// P2.6 output, I2C mode
	rPDAT2 |= 0x18;
//	rP2PUR &= 0xe7;

/*			P3.7	P3.6    P3.5   	P3.4   	P3.3   	P3.2   	P3.1   	P3.0		*/
/*			FDA1   	FDA0   	RXD   	TXD  	SMON3  	SMON2  	SMON1  	IRIN		*/
/*			2      	2      	2       2      	5     	5	5 	2		*/
	rPCON3 =	(2<<28)|(2<<24)|(2<<20)|(2<<16)|(5<<12)|(5<< 8)|(5<< 4)|(2<< 0);

/*			P6.7	P6.6	P6.5	P6.4	P6.3	P6.2	P6.1	P6.0		*/
/*      								SPD_SNS			*/
/*									0			*/
//	rPCON6 =	(0<<28)|(0<<24)|(0<<20)|(0<<16)|(0<<12)|(0<< 8)|(0<< 4)|(0<< 0);
	rPCON6 &=	0xffffff0f;

#endif  //_BOARD_EVA
}

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 + -