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