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

📄 gpio_api.c

📁 三星ic 9980的源代码. 718版.
💻 C
字号:
/******************************************************************************
 * File name  : Gpio_api.c
 * Start date : 2003. 5. 13
 * By         : Taejin Kwon
 * Contact    : eric.kwon@samsung.com
 * Description: APIs for GPIO
 * 
 *****************************************************************************/
   
 
/******************************************************************************
 *   INCLUDES                                                                 *
 ******************************************************************************/
#include "Basic_typedefs.h"
#include "Sys_call_abstract.h"
#include "S5h_types.h"
#include "S5h_common_reg.h"
#include "Select_cap.h"
#include "Custom.h"
#include "Gpio_api.h"
#include "..\..\api\s5h_capability.h"
/******************************************************************************
 *  Global Defines
 ******************************************************************************/

SysHisr_t	gEINTG_SrqHisr;

#ifndef _FP_IS_MICOM
volatile UCHAR		_gKey_pos = 0;
#endif

extern S5H_FPCALLBACK AttachedKeySendCallback;
/******************************************************************************
 *  Function Defines
 ******************************************************************************/

#if DOUBLE_LOGO_GPIO//By May 060412
void SetInputModeGPIO_16(void)
{
	unsigned int 	temp0,temp1;
	temp0 = rPCON1_H;
	temp1 = rPCON1_L;
	temp0&= ~0x1c;							
	IO_WData32_EX((unsigned char *)&rPCON1_H, temp0 ,temp1);
}
unsigned char GetPortGPIO_16(void)
{
	unsigned char ui8Temp = 0;
	unsigned char iodata;
	unsigned char iomask = (1<<6);
	ui8Temp = rPDAT1_L;
	iodata = (ui8Temp & iomask);	
	return (iodata?1:0);
}
#endif


 /******************SET GPIO12 INPUT***************************/ 
unsigned int 	GPIOOutputTemp = 0x3f;
#if 0
void SetInputModeGPIO12(void)
{
	unsigned int 	temp0,temp1;
	temp0 = rPCON1_H;
	temp1 = rPCON1_L;
	temp1 &= ~0x1c0;						/*~(111 000 000)*/
	IO_WData32_EX((unsigned char *)&rPCON1_H,temp0 ,temp1);
}
unsigned char GetPortGPIO12(void)
{
	//unsigned int	ui16Temp = 0;
	unsigned char ui8Temp = 0;
	unsigned char iodata;
	unsigned char iomask = (1<<2);

	ui8Temp = rPDAT1_L;
	iodata = (ui8Temp & iomask);	
/*	ui16Temp = rPDAT1_L;
	iodata = (ui16Temp & iomask);*/
	return (iodata?1:0);
}
#endif
 /******************SET GPIO10 OUTPUT***************************//*lucy add for vfd port*/
 void SetOutputModeGPIO10(void)				
{
	unsigned int 	temp0,temp1;
	temp0 = rPCON1_H;
	temp1 = rPCON1_L;
	temp1 &= ~0x07;						/*~(111)*/		
	temp1 |= 0x01;						   /*001*/
	IO_WData32_EX((unsigned char *)&rPCON1_H,temp0 ,temp1);
}
void SetPortGPIO10(void)
{
	GPIOOutputTemp |= 0x01;
	IO_WData32_EX((unsigned char *)&rPDAT1_H, 0 , GPIOOutputTemp);
}
void ClrPortGPIO10(void)
{
	unsigned int 	temp0;
	GPIOOutputTemp &= ~0x01;
	temp0 = GPIOOutputTemp;
	IO_WData32_EX((unsigned char *)&rPDAT1_H, 0 , GPIOOutputTemp);		
}
/******************SET GPIO11 INPUT***************************/
void SetInputModeGPIO11(void)
{
	unsigned int 	temp0,temp1;
	temp0 = rPCON1_H;
	temp1 = rPCON1_L;
	temp1 &= ~0x038;						/*~(000 111 000)*/
	IO_WData32_EX((unsigned char *)&rPCON1_H,temp0 ,temp1);
}
unsigned char GetPortGPIO11(void)
{
	//unsigned int	ui16Temp = 0;
	unsigned char ui8Temp = 0;
	unsigned char iodata;
	unsigned char iomask = (1<<1);

	ui8Temp = rPDAT1_L;
	iodata = (ui8Temp & iomask);	
/*	ui16Temp = rPDAT1_L;
	iodata = (ui16Temp & iomask);*/
	return (iodata?1:0);
}
 /******************SET GPIO11 OUTPUT***************************/
void SetOutputModeGPIO11(void)
 {
	unsigned int 	temp0,temp1;
	temp0 = rPCON1_H;
	temp1 = rPCON1_L;
	temp1 &= ~0x38;						/*~(111 000)*/
	temp1 |= 0x08;						    /*001 000*/
	IO_WData32_EX((unsigned char *)&rPCON1_H,temp0 ,temp1);
}
void SetPortGPIO11(void)
{
	GPIOOutputTemp |= 0x02;
	IO_WData32_EX((unsigned char *)&rPDAT1_H, 0 , GPIOOutputTemp);
}
void ClrPortGPIO11(void)
{
	unsigned int 	temp0;
	GPIOOutputTemp &= ~0x02;
	temp0 = GPIOOutputTemp;
	IO_WData32_EX((unsigned char *)&rPDAT1_H, 0 , GPIOOutputTemp);		
}
 #if 0
 /******************SET GPIO12 OUTPUT***************************/
 void SetOutputModeGPIO12(void)
 {
	unsigned int 	temp0,temp1;
	temp0 = rPCON1_H;
	temp1 = rPCON1_L;
	temp1 &= ~0x1c0;						/*~(111 000 000)*/
	temp1 |= 0x40;						   /*001 000 000*/
	IO_WData32_EX((unsigned char *)&rPCON1_H,temp0 ,temp1);
}

void SetPortGPIO12(void)
{
	GPIOOutputTemp |= 0x04;
	IO_WData32_EX((unsigned char *)&rPDAT1_H, 0 , GPIOOutputTemp);
}
void ClrPortGPIO12(void)
{
	unsigned int 	temp0;
	GPIOOutputTemp &= ~0x04;
	temp0 = GPIOOutputTemp;
	IO_WData32_EX((unsigned char *)&rPDAT1_H, 0 , GPIOOutputTemp);		
}
#endif
  /******************SET GPIO13 OUTPUT***************************/
  void SetOutputModeGPIO13(void)
 {
	unsigned int 	temp0,temp1;
	temp0 = rPCON1_H;
	temp1 = rPCON1_L;
	temp1 &= ~0xe00;						/*~(111 000 000 000)*/
	temp1 |= 0x200;						   /*001 000 000 000*/
	IO_WData32_EX((unsigned char *)&rPCON1_H,temp0 ,temp1);
}
void SetPortGPIO13(void)
{
	GPIOOutputTemp |= 0x08;
	IO_WData32_EX((unsigned char *)&rPDAT1_H, 0 , GPIOOutputTemp);
}
void ClrPortGPIO13(void)
{
	unsigned int 	temp0;
	GPIOOutputTemp &= ~0x08;
	temp0 = GPIOOutputTemp;
	IO_WData32_EX((unsigned char *)&rPDAT1_H, 0 , GPIOOutputTemp);		
}

#if 0//Lumin20050822==>optimized
void SetInputMode(unsigned char port,unsigned char io)
{
	UINT32	ui32Temp = 0;
	unsigned long mask = ~(3<<(io<<1));

//set rPCONX  = 00 
	switch(port){
		case 0:
			ui32Temp = (UINT)( (UINT32)rPCON0_H << 16 ) |rPCON0_L;
			ui32Temp &= mask;
			WRITE32 ((UINT8 *)&rPCON0_H, (UINT32)mask );
			break;
		case 1:
			ui32Temp = (UINT)( (UINT32)rPCON1_H << 16 ) |rPCON1_L;
			ui32Temp &= mask;
			WRITE32 ((UINT8 *)&rPCON1_H, (UINT32)mask );
			break;
		case 2:
			ui32Temp = (UINT)( (UINT32)rPCON2_H << 16 ) |rPCON2_L;
			ui32Temp &= mask;
			WRITE32 ((UINT8 *)&rPCON2_H, (UINT32)mask );
			break;
		case 3:
			ui32Temp = (UINT)( (UINT32)rPCON3_H << 16 ) |rPCON3_L;
			ui32Temp &= mask;
			WRITE32 ((UINT8 *)&rPCON3_H, (UINT32)mask );
			break;
		#if 0
		case 4:
			ui32Temp = (UINT)( (UINT32)rPCON4_H << 16 ) |rPCON4_L;
			ui32Temp &= mask;
			WRITE32 ((UINT8 *)&rPCON4_H, (UINT32)mask );
			break;
		#endif
	}
}

void SetOutputMode(unsigned char port,unsigned char io)
{
	UINT32	ui32Temp = 0;
	unsigned long mask1 = (1<<(io<<1));
	unsigned long mask2 = ~(2<<(io<<1));

//set rPCONX  = 01
	switch(port){
		case 0:
			ui32Temp = (UINT)( (UINT32)rPCON0_H << 16 ) |rPCON0_L;
			ui32Temp |= mask1;
			ui32Temp &= mask2;
			WRITE32 ((UINT8 *)&rPCON0_H, ui32Temp );
			break;
		case 1:
			ui32Temp = (UINT)( (UINT32)rPCON1_H << 16 ) |rPCON1_L;
			ui32Temp |= mask1;
			ui32Temp &= mask2;
			WRITE32 ((UINT8 *)&rPCON1_H, ui32Temp );
			break;
		case 2:
			ui32Temp = (UINT)( (UINT32)rPCON2_H << 16 ) |rPCON2_L;
			ui32Temp |= mask1;
			ui32Temp &= mask2;
			WRITE32 ((UINT8 *)&rPCON2_H, ui32Temp );
			break;
		case 3:
			ui32Temp = (UINT)( (UINT32)rPCON3_H << 16 ) |rPCON3_L;
			ui32Temp |= mask1;
			ui32Temp &= mask2;
			WRITE32 ((UINT8 *)&rPCON3_H, ui32Temp );
			break;
		#if 0
		case 4:
			ui32Temp = (UINT)( (UINT32)rPCON4_H << 16 ) |rPCON4_L;
			ui32Temp |= mask1;
			ui32Temp &= mask2;
			WRITE32 ((UINT8 *)&rPCON4_H, ui32Temp );
			break;
		#endif
	}
}

void SetGpioPort(unsigned char port,unsigned char io)
{
	UINT32	ui32Temp = 0;
	unsigned char iomask = (1<<io);
	SetOutputMode(port,io);
	switch(port){
		case 0:
			// OUT_High(rPDAT0,iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT0_H << 16 ) |rPDAT0_L;
			ui32Temp |= iomask;
			WRITE32 ((UINT8 *)&rPDAT0_H, ui32Temp );			
			break;
		case 1:
			// OUT_High(rPDAT1,iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT1_H << 16 ) |rPDAT1_L;
			ui32Temp |= iomask;
			WRITE32 ((UINT8 *)&rPDAT1_H, ui32Temp );						
			break;
		case 2:
			// OUT_High(rPDAT2,iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT2_H << 16 ) |rPDAT2_L;
			ui32Temp |= iomask;
			WRITE32 ((UINT8 *)&rPDAT2_H, ui32Temp );			
			break;
		case 3:
			// OUT_High(rPDAT3,iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT3_H << 16 ) |rPDAT3_L;
			ui32Temp |= iomask;
			WRITE32 ((UINT8 *)&rPDAT3_H, ui32Temp );			
			break;
		#if 0
		case 4:
			// OUT_High(rPDAT4,iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT4_H << 16 ) |rPDAT4_L;
			ui32Temp |= iomask;
			WRITE32 ((UINT8 *)&rPDAT4_H, ui32Temp );			
			break;
		#endif
	}
}

void ClrGpioPort(unsigned char port,unsigned char io)
{
	UINT32	ui32Temp = 0;
	unsigned char iomask = (1<<io);
	SetOutputMode(port,io);
	switch(port){
		case 0:
			// OUT_Low(rPDAT0,iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT0_H << 16 ) |rPDAT0_L;
			ui32Temp &= ~iomask;		
			WRITE32 ((UINT8 *)&rPDAT0_H, ui32Temp );				
			break;
		case 1:
			// OUT_Low(rPDAT1,iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT1_H << 16 ) |rPDAT1_L;
			ui32Temp &= ~iomask;		
			WRITE32 ((UINT8 *)&rPDAT1_H, ui32Temp );
			break;
		case 2:
			// OUT_Low(rPDAT2,iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT2_H << 16 ) |rPDAT2_L;
			ui32Temp &= ~iomask;		
			WRITE32 ((UINT8 *)&rPDAT2_H, ui32Temp );
			break;
		case 3:
			// OUT_Low(rPDAT3,iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT3_H << 16 ) |rPDAT3_L;
			ui32Temp &= ~iomask;		
			WRITE32 ((UINT8 *)&rPDAT3_H, ui32Temp );			
			break;
		#if 0
		case 4:
			// OUT_Low(rPDAT4,iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT4_H << 16 ) |rPDAT4_L;
			ui32Temp &= ~iomask;		
			WRITE32 ((UINT8 *)&rPDAT4_H, ui32Temp );			
			break;
		#endif
	}
}

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

	SetInputMode(port,io);

	switch(port){
		case 0:
			// iodata = (rPDAT0&iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT0_H << 16 ) |rPDAT0_L;
			iodata = (ui32Temp&iomask);
			break;
		case 1:
			// iodata = (rPDAT1_H&iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT1_H << 16 ) |rPDAT1_L;
			iodata = (ui32Temp&iomask);			
			break;
		case 2:
			// iodata = (rPDAT2_H&iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT2_H << 16 ) |rPDAT2_L;
			iodata = (ui32Temp&iomask);			
			break;
		case 3:
			// iodata = (rPDAT3_H&iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT3_H << 16 ) |rPDAT3_L;
			iodata = (ui32Temp&iomask);			
			break;
		#if 0
		case 4:
			// iodata = (rPDAT4_H&iomask);
			ui32Temp = (UINT)( (UINT32)rPDAT4_H << 16 ) |rPDAT4_L;
			iodata = (ui32Temp&iomask);			
			break;
		#endif
	}

	return (iodata?1:0);
}

/******************************************************************************
 * Function name  : GPIO_Init 
 * Arguments      : 
 * Return         : 
 * By             : Taejin Kwon
 * Description    : Initialize GPIO
 *	Ref. Developer's Toolkit #08
 *****************************************************************************/
void GPIO_Init( void )
{
#if 0
#if 0
	rPCON0_H = (1<<14)|(1<<12)|(1<<10)|(1<<8)|(2<<6)|(2<<4)|(2<<2)|(2<<0);
	rPDAT0_H = (0<<7) |(0<<6) |(1<<5) |(1<<4)|(0<<3)|(0<<2)|(0<<1)|(0);

	rPCON1_H = (0<<14)|(0<<12)|(1<<10)|(1<<8)|(1<<6)|(1<<4)|(1<<2)|(1<<0);
	rPDAT1_H = (0<<7) |(0<<6) |(0<<5) |(0<<4)|(1<<3)|(0<<2)|(0<<1)|(1);

#if 1
	rPCON2_H = (2<<14)|(2<<12)|(2<<10)|(2<<8)|(2<<6)|(1<<4)|(0<<2)|(1<<0); //macroliu20040327 P2.1 SPD_Sense
#else
	rPCON2_H = (2<<14)|(2<<12)|(2<<10)|(2<<8)|(2<<6)|(1<<4)|(1<<2)|(1<<0);
#endif
	rPDAT2_H = (0<<7) |(0<<6) |(0<<5) |(0<<4)|(0<<3)|(0<<2)|(0<<1)|(1);
	//rP2PUR = 1<<7;

	rPCON3_H = (0<<14)|(0<<12)|(1<<10)|(0<<8)|(1<<6)|(0<<4)|(0<<2)|(1<<0); //macroliu20040327 P3.7 SPD_Sense
	rPDAT3_H = (0<<7) |(0<<6) |(0<<5) |(0<<4)|(0<<3)|(0<<2)|(0<<1)|(1);    

	rCKOCON = 0x145;

	rPCON4_H = (2<<14)|(2<<12)|(2<<10)|(2<<8)|(2<<6)|(2<<4)|(1<<2)|(1<<0);
	rPDAT4_H = (0<<7) |(0<<6) |(0<<5) |(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0);    
#else
	WRITE32 ( (UINT8 *)&rPCON0_H, (UINT32)( (1<<14)|(1<<12)|(1<<10)|(1<<8)|(2<<6)|(2<<4)|(2<<2)|(2<<0) ) );
	WRITE32 ( (UINT8 *)&rPDAT0_H, (UINT32)( (0<<7) |(0<<6) |(1<<5) |(1<<4)|(0<<3)|(0<<2)|(0<<1)|(0) ) );

	WRITE32 ( (UINT8 *)&rPCON1_H, (UINT32)( (0<<14)|(0<<12)|(1<<10)|(1<<8)|(1<<6)|(1<<4)|(1<<2)|(1<<0) ) );
	WRITE32 ( (UINT8 *)&rPDAT1_H, (UINT32)( (0<<7) |(0<<6) |(0<<5) |(0<<4)|(1<<3)|(0<<2)|(0<<1)|(1) ) );

#if 1
	WRITE32 ( (UINT8 *)&rPCON2_H, (UINT32)((2<<14)|(2<<12)|(2<<10)|(2<<8)|(2<<6)|(1<<4)|(0<<2)|(1<<0))); //macroliu20040327 P2.1 SPD_Sense
#else
	WRITE32 ( (UINT8 *)&rPCON2_H, (UINT32)((2<<14)|(2<<12)|(2<<10)|(2<<8)|(2<<6)|(1<<4)|(1<<2)|(1<<0) ));
#endif
	WRITE32 ( (UINT8 *)&rPDAT2_H, (UINT32)((0<<7) |(0<<6) |(0<<5) |(0<<4)|(0<<3)|(0<<2)|(0<<1)|(1) ));
	//rP2PUR = 1<<7;

	WRITE32 ( (UINT8 *)&rPCON3_H, (UINT32)((0<<14)|(0<<12)|(1<<10)|(0<<8)|(1<<6)|(0<<4)|(0<<2)|(1<<0))); //macroliu20040327 P3.7 SPD_Sense
	WRITE32 ( (UINT8 *)&rPDAT3_H, (UINT32)((0<<7) |(0<<6) |(0<<5) |(0<<4)|(0<<3)|(0<<2)|(0<<1)|(1) ));    

	//rCKOCON = 0x145;

	WRITE32 ( (UINT8 *)&rPCON4_H, (UINT32)((2<<14)|(2<<12)|(2<<10)|(2<<8)|(2<<6)|(2<<4)|(1<<2)|(1<<0) ));
	WRITE32 ( (UINT8 *)&rPDAT4_H, (UINT32)((0<<7) |(0<<6) |(0<<5) |(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0) )); 
#endif 
#endif 
}

void	Init_GPIO ( void )
{
	GPIO_Init ();
}

void DeInit_GPIO( void )
{
	/* Nothing */
}
#endif

⌨️ 快捷键说明

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