📄 xspccardsocket.c
字号:
ReturnValue = XS_PCCARD_FAILURE;
}
break;
default:
//TBD. Should not be here at all!!
ReturnValue = XS_PCCARD_FAILURE;
break;
} //end switch
//Wait for the READY signal to be asserted again, which indicates that the
//socket is ready for normal operation
if(ReturnValue != XS_PCCARD_FAILURE)
{
//If the READY signal is not asserted within the specified time interval,
//then the PC Card has timed out!
if(t >= XS_PCCARD_MAX_READY_WAIT_TIME)
{
//(??)Insert message here. Also, does any other action need to occur here?
ReturnValue = XS_PCCARD_FAILURE;
}
}
} //end if
return ReturnValue;
#else
XLLP_UINT16_T t;
XS_STATUS_T ReturnValue = XS_PCCARD_SUCCESS;
volatile XLLP_GPIO_T *vpstrBvdGPIORegs = (volatile XLLP_GPIO_T *)pstrSocketHandle->pstrGpioRegsHandle;
if(ushSocketNumber || (pstrSocketHandle == XS_NULL_PTR))
{
ReturnValue = XS_PCCARD_FAILURE;
}
else if(vpstrBvdGPIORegs->GPLR2 & (1<<19))
{
ReturnValue = XS_PCCARD_FAILURE;
}
else
{
vpstrBvdGPIORegs->GPSR1 = 1<<20;
XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle,
50);
vpstrBvdGPIORegs->GPCR1 = 1<<20;
XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle,
50);
for(t = 0; t < XS_PCCARD_MAX_READY_WAIT_TIME; t += XS_PCCARD_READY_POLL_INTERVAL)
{
if (!(vpstrBvdGPIORegs->GPLR2 & (1<<17)))
{
XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle,
XS_PCCARD_READY_POLL_INTERVAL);
}
else
{
break;
}
}
if(t >= XS_PCCARD_MAX_READY_WAIT_TIME)
{
ReturnValue = XS_PCCARD_FAILURE;
}
}
// printf("Reset PCMCIA socket %d %s.\r\n", ushSocketNumber,
// (ReturnValue==XS_PCCARD_SUCCESS) ? "success" : "fail");
return ReturnValue;
#endif
} //end XsPcCardResetSocket()
/******************************************************************************
Function Name: XsPcCardEnableSocket
Description:
Global Registers Modified:
Input Arguments:
Output Arguments:
Return Value:
*******************************************************************************/
XS_STATUS_T XsPcCardEnableSocket(XS_PCCARD_SOCKET_T *pstrSocketHandle,
XLLP_VUINT16_T ushSocketNumber)
{
#if 0 //hzh
XS_STATUS_T ReturnValue = XS_PCCARD_SUCCESS;
XLLP_UINT32_T power; //voltage setting
//Check the validity of the input arguments to the function
if((ushSocketNumber > XS_MAINSTONE_MAX_PCCARD_SOCKETS) ||
(pstrSocketHandle == XS_NULL_PTR))
{
ReturnValue = XS_PCCARD_FAILURE;
}
else
{
switch(ushSocketNumber)
{
case XS_PCCARD_SOCKET0:
// Check if card inserted.
if (pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR &
XLLP_BCR_PCMCIA_SCR_S0_nCD)
{
ReturnValue = XS_PCCARD_FAILURE;
}
else
{
if ((pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR &
XLLP_BCR_PCMCIA_SCR_S0_nVS1) &&
(pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR &
XLLP_BCR_PCMCIA_SCR_S0_nVS2))
{
// 5 volt card inserted.
power = XLLP_BCR_PCMCIA_SCR_S0_5V;
}
else
{
// 3.3 volt card inserted.
power = XLLP_BCR_PCMCIA_SCR_S0_3_3V;
}
// Start by powering off the card with reset deasserted.
pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR &=
~(XLLP_BCR_PCMCIA_SCR_S0_PWR | XLLP_BCR_PCMCIA_SCR_S0_RESET);
// Wait 50 ms.
XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle, 50);
// Power up the card with the appropriate voltage settings.
pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR |= power;
// Wait 50 ms.
XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle, 50);
// Assert card reset.
pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR |=
XLLP_BCR_PCMCIA_SCR_S0_RESET;
// Wait 50 ms.
XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle, 50);
// Deassert card reset.
pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR &=
~XLLP_BCR_PCMCIA_SCR_S0_RESET;
}
break;
case XS_PCCARD_SOCKET1:
// Check if card inserted.
if (pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR &
XLLP_BCR_PCMCIA_SCR_S1_nCD)
{
ReturnValue = XS_PCCARD_FAILURE;
}
else
{
if ((pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR &
XLLP_BCR_PCMCIA_SCR_S1_nVS1) &&
(pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR &
XLLP_BCR_PCMCIA_SCR_S1_nVS2))
{
// 5 volt card inserted.
power = XLLP_BCR_PCMCIA_SCR_S1_5V;
}
else
{
// 3.3 volt card inserted.
power = XLLP_BCR_PCMCIA_SCR_S1_3_3V;
}
// Start by powering off the card with reset deasserted.
pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR &=
~(XLLP_BCR_PCMCIA_SCR_S1_PWR | XLLP_BCR_PCMCIA_SCR_S1_RESET);
// Wait 50 ms.
XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle, 50);
// Power up the card with the appropriate voltage settings.
pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR |= power;
// Wait 50 ms.
XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle, 50);
// Assert card reset.
pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR |=
XLLP_BCR_PCMCIA_SCR_S1_RESET;
// Wait 50 ms.
XllpOstDelayMilliSeconds(pstrSocketHandle->pstrOstRegsHandle, 50);
// Deassert card reset.
pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR &=
~XLLP_BCR_PCMCIA_SCR_S1_RESET;
}
break;
default:
//TBD. Should not be here at all!!
ReturnValue = XS_PCCARD_FAILURE;
break;
} //end switch
}
return ReturnValue;
#else
return XsPcCardResetSocket(pstrSocketHandle, ushSocketNumber);
#endif
} //end XsPcCardEnableSocket()
/******************************************************************************
Function Name: XsPcCardDisableSocket
Description:
Global Registers Modified:
Input Arguments:
Output Arguments:
Return Value:
*******************************************************************************/
XS_STATUS_T XsPcCardDisableSocket(XS_PCCARD_SOCKET_T *pstrSocketHandle,
XLLP_VUINT16_T ushSocketNumber)
{
#if 0 //hzh
XS_STATUS_T ReturnValue = XS_PCCARD_SUCCESS;
//Check the validity of the input arguments to the function
if((ushSocketNumber > XS_MAINSTONE_MAX_PCCARD_SOCKETS) ||
(pstrSocketHandle == XS_NULL_PTR))
{
ReturnValue = XS_PCCARD_FAILURE;
}
else
{
switch(ushSocketNumber)
{
case XS_PCCARD_SOCKET0:
// Power off the card with reset deasserted.
pstrSocketHandle->pstrBcrHandle->PCMCIAS0SCR &=
~(XLLP_BCR_PCMCIA_SCR_S0_PWR | XLLP_BCR_PCMCIA_SCR_S0_RESET);
break;
case XS_PCCARD_SOCKET1:
// Power off the card with reset deasserted.
pstrSocketHandle->pstrBcrHandle->PCMCIAS1SCR &=
~(XLLP_BCR_PCMCIA_SCR_S1_PWR | XLLP_BCR_PCMCIA_SCR_S1_RESET);
break;
default:
//TBD. Should not be here at all!!
ReturnValue = XS_PCCARD_FAILURE;
break;
} //end switch
} //end if
return ReturnValue;
#else
return XS_PCCARD_SUCCESS;
#endif
} //end XsPcCardResetSocket()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -