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

📄 gpio_api_5005.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
 *****************************************************************************/
VOID GPIO_Init( VOID )
{ 
#ifdef _BOARD_EVA
	/*
	 *	Evaluation board for IP test 
	 */
	rPCON0 = 0x22222222;
	rPCON1 = 0x22222111;
	rPCON2 = 0x55222222;
	rPCON3 = 0x00100111;
#elif defined(_BOARD_CHINA)
	/*
	 *	China basic model main board
	 */

/*
	#define pSPD_SENSE  		0x01	//P8.0
	#define pCLOSE_SW			0x02	//P2.1
	#define pOPEN_SW			0x01	//P2.0
	#define pVR_DVD				0x02	//P1.1
	#define pVR_CD				0x04	//P1.2
	#define pCLOSE_MOTOR		0x01	//P1.0
	#define pOPEN_MOTOR			0x01	//P3.0
	//#define pCLOSE_OPEN			0x10	//P1.0 
	#define pCD_DVD_LD			0x02	//P3.1
	#define pDR_MUTE			0x80	//P1.7
*/

	rPCON0 = 0x02222222;
	rPCON1 = 0x62222001; 
	
	#if (_APP_CAP_AUD_USE_PWM)
		rPCON2 = 0x66222222;//0x66233222;
	#else
		/* When using ADAC (20050922, ishan) */
		rPCON2 = 0x66222222;		
	#endif
		
		rPCON3 = 0x01111121;
		rPDAT3 &= 0xfffffffb;	/* Set DAT 3.2 to 0 in order to mute off */

	#if (_APP_CAP_AUD_USE_PWM)
		/* USE below setting as init value -- jae youl kim -- */

		#define	PWM_CTL1_INITVAL		0x00301818
		/* default PWM_CONTROL1 register value = 0x00301818 : PWM on, mute off, VOL_R&L = 0db */
		rPWM0_CONTROL1 = PWM_CTL1_INITVAL;
		//	rPWM1_CONTROL1 = PWM_CTL1_INITVAL;
		//	rPWM2_CONTROL1 = PWM_CTL1_INITVAL;

		//rPWM0_CONTROL2 = 0x000E2410;
		//rPWM0_CONTROL2 = 0x00064600;
		#define	PWM_CTL2_INITVAL		0x00014610	
		/* default PWM_CONTROL2 register value = 0x00064600 : 00 10 0 0 10 0 01 10 0 000 00 00
		32X over sample mode, No deemphasis, 32Fs serial clock rate, 16bit data format, 1024FS audio clock rate, Normal operating state	
		*/
		rPWM0_CONTROL2 = PWM_CTL2_INITVAL;
		//	rPWM1_CONTROL2 = PWM_CTL2_INITVAL;
		//	rPWM2_CONTROL2 = PWM_CTL2_INITVAL;

	#endif


	
#else /* Old china style main board designed by Chunhee Park */

/*        P0.7              P0.6         P0.5     P0.4	  P0.3 	 P0.2  P0.1   P0.0
      CLOSE_SW     UART_TXD     RTCK   TCK       TMS	 TDI   TD0  NTRST
             I             UART_TXD     RTCK   TCK       TMS	 TDI   TD0  NTRST
*/
	rPCON0 = ((0<<28)|(2<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));
	
	//rPDAT0 = ;
	//rP0PUR =;
	
/*         P1.7               P1.6        P1.5          P1.4          P1.3        P1.2            P1.1               P1.0
        SERVO_MON3    SPDIFO  IIC_CLK   IIC_DATA       IR       OPEN_SW   SPD_SENSE    DR_MUTE
        SMONITOR3       SPDIFO  I2CCK      I2CDAT          IRIN       I                  I                   O
*/	
	rPCON1  = ((6<<28)|(2<<24)|(2<<20)|(2<<16)|(2<<12)|(0<<8)|(0<<4)|(1<<0));
	 
	//rPDAT1 =;
	//rP2PUR
		
/*           P2.7            P2.6                      P2.5                P2.4                P2.3         P2.2 	   P2.1	     P2.0
      SERVO_MON2    SERVO_MON1      IISDATA_2      IISDATA_1      IISDATA_0   IISWSO  IISMCKO     IISBCKO	
      SMONITOR2       SMONITOR1        I2SDO2           I2SDO1             I2SDO0     I2SWSO  I2SMCKO     I2SBCKO   
*/	
	rPCON2 = ((6<<28)|(6<<24)|(2<<20)|(2<<16)|(2<<12)|(2<<8)|(2<<4)|(2<<0));

	//rPDAT2 =;
	//rP2PUR =;

/*   P3.7    P3.6     P3.5        P3.4        P3.3      P3.2      P3.1       P3.0
        X      OPEN   CLOSE   VR_DVD   VR_CD  CMUTE  SSTOP    CD/DVD
        X          O        O             O             O      O           I              O
*/	
	rPCON3 = ((0<<28)|(1<<24)|(1<<20)|(1<<16)|(1<<12)|(1<<8)|(2<<4)|(1<<0)); 
	
	//FE_RESET Enable and CD/DVD Selection
	//rPDAT3 |= 0x20 ;
	//rP3PUR =;

/*   P4.7    P4.6     P4.5    P4.4     P4.3  P4.2     P4.1   	P4.0
      X    UART_RxD UART_TxD  NSCS1     IR  SPICLK    DR_MUTE  SP_MUTE
      X    UART_RxD UART_TxD   O        IR  SPD_SENSE   O        O 
*/	
		
	//rPCON4 = ((0<<28)|(2<<24)|(2<<20)|(0<<16)|(2<<12)|(0<<8)|(1<<4)|(1<<0));
	
	//rPDAT4 |= 0x01;
	//rP4PUR =;

	//rCKOCON = 0x143014F;

/*================================================================================
	#define pOPEN_SW		0x08	// P3.3
	#define pCLOSE_SW		0x10	// P3.4
	#define pSPD_SENSE  		0x40  	// p3.6

	#define pDR_MUTE		0x20	// P3.5
	#define pOPEN			0x01	// P3.0
	#define pCDDVD			0x02	// P3.1
	
	#define pCLOSE			0x01	// p1.0
	

//--------------------------------------------------------------------------------	
	#define VR_DVD			0x20	// P1.5:|0010|0000|	//OUTPUT
	#define VR_CD			0x08	// P1.3:|0000|1000|	//OUTPUT	

	0:GPIN, 1:GPOUT
	0:PULLUP ENABLE
	1:PULLUP DISABLE
	
================================================================================*/
#endif	
}


VOID GPIO_SetInterProgMode( BOOL interlace )
{
}

VOID GPIO_SetAudioMuteState( BOOL mute )
{
}

VOID GPIO_SetPowerState( BOOL power_on )
{
}

#if _APP_CAP_NAV_FX_DATA

#define _VCC_ON_OFF_TEST		0 // temporary test routine for just test. 2006.1.10. by CKLee.

SysTimer_t	gTimer_McardMonitor;

BOOL	gConnected_CF, gConnected_MS_SD_SM;

void KeyMsgSender( UINT data, void *param );

VOID CardVccOn(VOID)
{
	rPDAT3 |= (1<<4);
}

VOID CardVccOff(VOID)
{
	rPDAT3 &= ~(1<<4);
}

BOOL CardDetectCF(VOID)
{
#if 0
	/*
		if connected, port 3.3 become 0... by CKLee.
	*/
	if( rPDAT3 & 0x8 )
		return FALSE;
	else
		return TRUE;
#else
	return TRUE;
#endif
}

BOOL CardDetectMS_SD_SM(VOID)
{
#if 0
	/*
		if connected, port 1.4 become 0... by CKLee.
	*/
	if( rPDAT1 & 0x10 )
		return FALSE;
	else
		return TRUE;
#else
	return TRUE;
#endif
}

VOID CardDetectTimerExpired(UNSIGNED id )
{
#if 0
	BOOL	bCF, bMS;
#if _VCC_ON_OFF_TEST
	static BOOL bVcc;

	if(bVcc)
		CardVccOff();
	else
		CardVccOn();

	bVcc = !bVcc;
#endif
	
	/*
		check CF card connect pin...
	*/
	bCF = CardDetectCF();
	bMS = CardDetectMS_SD_SM();
	
	if( bCF != gConnected_CF )
	{
		gConnected_CF = bCF;
		
		if(bCF)
		{
			SysPrintf("\n[MCARD] CF inserted!!");
			KeyMsgSender( KEY_M_CARD_INSERT, 0 );
		}
		else
		{
			SysPrintf("\n[MCARD] CF removed!!");
			KeyMsgSender( KEY_M_CARD_REMOVE, 0 );
		}
	}
	
	/*
		check MS_SD_SM card connect pin...
	*/	
	if( bMS != gConnected_MS_SD_SM )
	{
		gConnected_MS_SD_SM = bMS;
		
		if(bMS)
		{
			SysPrintf("\n[MCARD] MS/SD/SM inserted!!");
			KeyMsgSender( KEY_M_CARD_INSERT, 0 );
		}
		else
		{
			SysPrintf("\n[MCARD] MS/SD/SM removed!!");
			KeyMsgSender( KEY_M_CARD_REMOVE, 0 );
		}
	}
#endif
}

VOID CardDetectTimerPreInit(VOID)
{
	SysSetTimer( &gTimer_McardMonitor, "MCARD_T", CardDetectTimerExpired, 
				0, 100, 100, TIMER_DISABLE, NULL );
}

VOID CardDetectTimerEnable(BOOL cf, BOOL ms)
{
	gConnected_CF = cf;
	gConnected_MS_SD_SM = ms;
	
	SysPrintf("\n[MCARD] Timer Enable!!");
	SysControlTimer(&gTimer_McardMonitor, TIMER_DISABLE, NULL);
	SysControlTimer(&gTimer_McardMonitor, TIMER_ENABLE, NULL);
}

VOID CardDetectTimerDisable(VOID)
{
	SysPrintf("\n[MCARD] Timer Disable!!");
	SysControlTimer(&gTimer_McardMonitor, TIMER_DISABLE, NULL);
}


#endif
#endif /* _GPIO_API_C_ */

⌨️ 快捷键说明

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