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

📄 xspccardsocket.c

📁 优龙pxa270平台试验程序
💻 C
📖 第 1 页 / 共 3 页
字号:
                    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 + -