📄 gpio_api_5008.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 + -