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