亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mmcdrv.c

?? WINDOWSCE4.2 ARM PXA255 SDMMC驅動程序源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*****************************************************************************
* FileName: MMCDRV.C
*
* SanDisk Host Developer's Toolkit
*
* Copyright (c) 1997 - 2000 SanDisk Corporation
* All rights reserved.
* This code may not be redistributed in source or linkable object form
* without the consent of its author.
*
* Description:
*       MMC driver
*
******************************************************************************/

#include "sdconfig.h"

#if (USE_MMC || USE_MMC_EMULATION)
#include "sdmmc.h"


/***********************************************************************************
*                                  Public Functions
*                                  ----------------
************************************************************************************/

/***********************************************************************************
* Name: mmcBusStart
*
* Description:
*       Starts the MMC bus by sending 80 clock cycles.
*       Reset the MMC devices. Put them in IDLE mode and configure all
*       devices with proper OCR and wait for ready.
*
* Input:
*       INT16   controller_no           Controller Number
*
* Output:
*       None.
*
* Returns:
*       None.
*
************************************************************************************/
SDBOOL mmcBusStart( INT16 ctrlNo )
{
    /* Reset the MMC host controller */
//    resetMMCController(ctrlNo);

    /* IDENTIFICATION STATE process in OPEN-DRAIN mode. */
    /* This process is operated at low clock rate 250KHz */
        if ( !setMMCClockRate(6) )
		{
			RETAILMSG(1, (TEXT("fail to set setMMCClockRate()\r\n")));
			return NO;
		}

    /* Enable MMC interface in open drain mode and turn on the clock. */
    startMMC80Clocks(ctrlNo);

    return YES;
}

/*****************************************************************************
* Name: mmc_init_setup
*
* Description:
*       Initialize MMC devices. The MMC controller is operated in
*       OPEN-DRAIN mode.
*               - 80 clocks
*               - IDLE STATE
*               - OPERATIING VOLTAGE CONDITION
*
* Input:
*       None
*
* Output:
*       All devices should be ready
*
* Returns:
*       YES if successful
*       NO if failure
*       
*****************************************************************************/
SDBOOL mmc_init_setup(SDVOID) /*__fn__*/
{
    PDEVICE_CONTROLLER pc;
    INT16   ctrlNo;
    INT16   nFailures;

    nFailures = 0;
//    RETAILMSG(1, (TEXT("mmc_init_setup() \r\n")));
    /* This is a starting point in the IDENTIFICATION STATE process. */
    /* Apply to all MMC controllers */

    for (ctrlNo = 0; ctrlNo < N_INTERFACES; ctrlNo++)
    {
//		RETAILMSG(1, (TEXT("mmc_init_setup() enter loop %d\r\n"), ctrlNo));
        pc = &controller_s[ctrlNo];
        pc->controller_number = ctrlNo;

       //  Send 80 clocks to start the bus 
        if ( mmcBusStart(ctrlNo) )   // Put all device in idle mode 
        {
//			RETAILMSG(1, (TEXT("mmcBusStart successful\r\n")));
            // Reset all devices on the bus and wait for ready. 
            
            //Make sure all devices are READY.
            //- IDLE STATE
            //- OPERATIING VOLTAGE CONDITION
            
            if ( MMC_NO_ERROR == mmcReset ( pc, 0x00020000 ) )  //made change here by Yi, actually, originally value is 0xFFC000
            {
                // Set max. clock rate 
//				RETAILMSG(1, (TEXT("mmcReset() no error \r\n")));
                setMMCClockRate(0);
            }
            else
            {
                nFailures++;
            }
        }
        pc->controller_number = -1;
    }

    if ( nFailures >= N_INTERFACES )
        return NO;
//    RETAILMSG(1, (TEXT("mmc_init_setup() end, return value is YES \r\n")));
    return (YES);
}

/****************************************************************************
* Name: mmcConfigDevice
*
* Description:
*       Configure MMC devices and assign device ID.
*
* Input:
*       pc              Device Controller structure
*       driveno         Drive Number
*
* Output:
*       None.
*
* Returns:
*       Complete code.
*
****************************************************************************/
MMC_CC mmcConfigDevice( INT16 driveno )
{
    PDEVICE_CONTROLLER pc;
    INT16   phys_drive;

    /* THIS IS A INDENTIFICATION STATE phase */

#if (N_INTERFACES > 1)
    pc = drno_to_controller(driveno);
    phys_drive = drno_to_phys(driveno);
#else
    pc = &controller_s[0];
    phys_drive = driveno;
#endif

        /* Allow all card to identify itself and Assign ID to the device. */
        return (mmcIdentify( pc, pc->drive[phys_drive].drv_type, phys_drive ));
}


/****************************************************************************
* Name: receive_data
*
* Description:
*       While monitoring the MMC bus for data start bit condition, waits for
*       certain time before issue CARD NOT RESPONSE condition.
*       The data is read and stored after the start bit is detected. MMC timeouts
*       are observed and the received CRC number is validated.
*
* Input:
*       buffDATA   -   pointer to the data buffer.
*       length     -   Expected length of data block.
*
* Output:
*       buffData[] -   Received data.
*
* Returns:
*       Completion code
*
****************************************************************************/
MMC_CC receive_data( PDEVICE_CONTROLLER pc, UINT16 dLength, UINT16 noBlocks, UINT16 xferMode )
{
    /* Data is ready.  Get it from the MMC BUFFER */
        return (MMCReceive((UCHAR *)pc->user_address, dLength, noBlocks, xferMode));
}


/****************************************************************************
* Name: send_data
*
* Description:
*       Writes data block to the card.
*
* Input:
*       pc              Controller structure pointer.
*       dataLength      Length of data block.
*
* Output:
*       Data are sent to the device.
*
* Returns:
*       Completion code
*
****************************************************************************/
MMC_CC send_data( PDEVICE_CONTROLLER pc, UINT16 dLength, UINT16 noBlocks, UINT16 xferMode )
{
    /* Write data to the device */
        return (MMCTransmit((UCHAR *)pc->user_address, dLength, noBlocks, xferMode));
}


/*****************************************************************************
* Name: MMCReceivedResponse - Get the response from MMC card
*
* Description:
*       Get the response from MMC card
*
* Input:
*       pc      Device information structure
*       Resp    Response Type
*
* Output:
*
* Return:
*
*****************************************************************************/
MMC_CC MMCReceivedResponse(PDEVICE_CONTROLLER pc, RESP_TYPE Resp)
{
    UINT08  *respBuff;
    UINT16  respLength;


    if ( Resp == R0 )
        return (MMC_NO_ERROR);

        respLength = BYTE_LENGTH;               /* 6 bytes R1, R3 or R6 response */
    if ( Resp == R2 )
        respLength = CID_BYTE_LENGTH -1;/* (17-1) bytes R2 response */

    respBuff = (UINT08 *)pc->LastResponse;

    /* Read status and wait for response. */
    return (getMMCResponseInfo(respBuff, respLength, (UINT16)Resp));
}


/***************************************************************************
* Name: MMCAnalysisResponse - Analyze the MMC response
*
* Description:
*       Analyze the response from MMC card and convert the RAW
*       information to the known status
*
* Input:
*       pc      Device information structure
*
* Output:
*       None
*
* Return:
*       MMC completion code
*
***************************************************************************/
MMC_CC MMCAnalysisResponse( PDEVICE_CONTROLLER pc, RESP_TYPE respType )
{
    UINT32  statusInfo;
    UINT08  *respBuff;
    UINT16  ij, tt;

    respBuff = (UINT08 *)pc->LastResponse;
    if (respType == R6)
    {
                ij = (UINT16)respBuff[1];
                ij <<= 8;
                ij |= (UINT16)respBuff[2];
                pc->LastResponse[4] = ij;
#if (LITTLE_ENDIAN)
                /* Clear bits 31-24 of Status register */
                pc->LastResponse[0] &= 0x00FF;

                 /* Extract bits 23, 22 and clear bits 23-16 */
                ij = (pc->LastResponse[1] & 0xC000);
                 /* Extract bit 19 */
                tt = (pc->LastResponse[1] & 0x0800) << 2;
                ij |= tt;
                /* Pack bits 23,22 and 19 to bits 15-13 of Status register */
                pc->LastResponse[1] = ij;

                ij = pc->LastResponse[2] & 0x001F;
                 /* Extract bits 12-8 then pack to bits 12-8 */
                pc->LastResponse[1] |= (ij << 8);

                ij = pc->LastResponse[2] >> 8;
                 /* Extract bit 7-0 then pack to bit 7-0 */
                pc->LastResponse[2] = ij;
#else
                /* Clear bits 31-24 of Status register */
                pc->LastResponse[0] &= 0xFF00;

                 /* Extract bits 23, 22 */
                ij = pc->LastResponse[1] & 0x00C0;
                 /* Extract bit 19  */
                tt = (pc->LastResponse[1] & 0x0008) << 2;
                ij |= tt;
                /* Pack bits 23,22 and 19 to bits 15-13 */
                pc->LastResponse[1] = ij;

                 /* Extract bits 12-8 */
                ij = (pc->LastResponse[2] >> 8) & 0x1F;
                 /* Pack to bits 12-8 of Status register */
                pc->LastResponse[1] |= ij;

                ij = pc->LastResponse[2] & 0x00FF;
                 /* Extract bit 7-0 then pack to bit 7-0 */
                pc->LastResponse[2] = (ij << 8);
#endif
        }

    /* Get the RAW MMC status */
    statusInfo = (UINT32)(respBuff[1] & 0xFF);
    statusInfo <<= 8;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级片网站| 国产一区二区三区免费观看| 91捆绑美女网站| 亚洲欧美一区二区三区极速播放| 成人一区二区三区在线观看| 国产精品久久久久aaaa樱花| 色综合一区二区| 亚洲国产欧美在线| 精品国内二区三区| 成人激情免费电影网址| 日韩一区在线播放| 欧美挠脚心视频网站| 韩国女主播成人在线| 国产精品九色蝌蚪自拍| 91久久免费观看| 美女尤物国产一区| 中文字幕乱码日本亚洲一区二区| 一本色道a无线码一区v| 亚洲成av人片一区二区梦乃| 欧美精品一区二区在线播放| 91亚洲精品乱码久久久久久蜜桃| 亚洲欧美日韩国产综合在线| 欧美一区二区在线视频| 国产福利一区二区三区在线视频| 樱桃视频在线观看一区| 日韩欧美国产一区在线观看| 99精品视频免费在线观看| 天堂在线亚洲视频| 国产精品久久久久久久久动漫| 欧美日韩一区小说| 韩国av一区二区三区四区| 亚洲欧美日韩一区二区| 精品国产伦理网| 日本乱码高清不卡字幕| 精品一区二区三区免费毛片爱| 亚洲欧美色图小说| 久久综合九色综合欧美98| 在线亚洲+欧美+日本专区| 国产真实乱偷精品视频免| 一区二区三区在线播| 久久视频一区二区| 欧美精品vⅰdeose4hd| av一区二区三区黑人| 久久国产精品无码网站| 亚洲一区二区四区蜜桃| 欧美国产禁国产网站cc| 日韩久久久精品| 777a∨成人精品桃花网| aaa欧美色吧激情视频| 国产在线国偷精品免费看| 亚洲图片欧美色图| 1024成人网| 国产精品国产三级国产普通话99| 欧美成va人片在线观看| 91精品国产色综合久久不卡蜜臀 | 亚洲欧美另类久久久精品2019| 精品久久久久久久久久久久包黑料 | 国产欧美日韩视频一区二区| 欧美日韩不卡视频| 色综合久久九月婷婷色综合| 国产凹凸在线观看一区二区| 久久99国产精品久久99果冻传媒| 亚洲影院久久精品| 亚洲色图.com| 国产精品日日摸夜夜摸av| 久久久久亚洲蜜桃| 久久综合九色综合久久久精品综合| 日韩欧美久久久| 91精品国产一区二区三区| 69堂国产成人免费视频| 欧美高清视频一二三区| 欧美日韩国产影片| 欧美人伦禁忌dvd放荡欲情| 欧美性xxxxx极品少妇| 欧美色图天堂网| 欧美精品视频www在线观看| 欧美视频在线观看一区二区| 欧美四级电影网| 欧美日韩国产精品成人| 51午夜精品国产| 日韩欧美久久一区| 久久先锋影音av| 亚洲国产高清不卡| 中文字幕一区视频| 亚洲精品乱码久久久久| 一二三区精品福利视频| 亚洲电影一级黄| 青青青伊人色综合久久| 奇米精品一区二区三区在线观看| 秋霞国产午夜精品免费视频| 毛片av中文字幕一区二区| 九九久久精品视频| 国产激情精品久久久第一区二区| 国产91精品久久久久久久网曝门 | 久久99国产精品久久| 国产精品白丝av| 99久久免费精品高清特色大片| 波多野结衣亚洲一区| 91黄色免费看| 欧美一级视频精品观看| 精品国产网站在线观看| 国产精品久久久久久亚洲伦| 亚洲国产日韩a在线播放性色| 日本色综合中文字幕| 国产精品一区专区| 色一情一乱一乱一91av| 欧美电视剧免费观看| 欧美韩日一区二区三区| 亚洲一区二区三区在线| 狠狠色综合色综合网络| 色综合天天天天做夜夜夜夜做| 精品视频在线免费看| www一区二区| 亚洲精品菠萝久久久久久久| 免费在线视频一区| 色综合久久久久综合体| 精品国产髙清在线看国产毛片| 中文成人av在线| 日日夜夜精品免费视频| 欧美日韩一区二区三区在线看| 日韩美女一区二区三区| 日韩伦理av电影| 精品一区二区在线免费观看| 一本色道久久综合狠狠躁的推荐 | 中文字幕日韩av资源站| 爽好多水快深点欧美视频| 成人黄色小视频在线观看| 777a∨成人精品桃花网| 日韩一区有码在线| 国产一区二区美女| 欧美日韩夫妻久久| 亚洲三级小视频| 国产一区二区三区精品视频| 欧美亚洲综合久久| 中文字幕制服丝袜成人av| 免费在线观看视频一区| 91成人免费网站| 成人欧美一区二区三区| 精品亚洲免费视频| 91精品国产欧美一区二区18| 亚洲精品视频一区二区| 国产二区国产一区在线观看| 日韩三级免费观看| 亚洲二区视频在线| 在线观看一区不卡| 中文字幕欧美一| 丁香另类激情小说| 国产午夜亚洲精品羞羞网站| 美女脱光内衣内裤视频久久网站| 欧美日韩中文国产| 一区二区三区在线观看网站| 99re亚洲国产精品| 亚洲欧洲美洲综合色网| 成人夜色视频网站在线观看| 欧美不卡视频一区| 蜜乳av一区二区| 欧美高清性hdvideosex| 天堂影院一区二区| 884aa四虎影成人精品一区| 亚洲成人你懂的| 欧美高清你懂得| 日韩精品一二三区| 91精品午夜视频| 日韩综合小视频| 69堂亚洲精品首页| 老司机免费视频一区二区三区| 日韩一区二区三区免费看| 日本一区中文字幕| 日韩三级免费观看| 精品一区二区日韩| 久久久99精品久久| 国产成人小视频| 国产精品福利一区二区| av亚洲产国偷v产偷v自拍| 日韩理论片在线| 欧美日韩在线亚洲一区蜜芽| 亚洲成av人片一区二区梦乃| 欧美老肥妇做.爰bbww视频| 日本午夜一本久久久综合| 日韩精品在线网站| 国产成人免费网站| 一区二区三区在线视频免费 | 水野朝阳av一区二区三区| 51久久夜色精品国产麻豆| 久久国产精品第一页| 久久久五月婷婷| 成人av网站免费观看| 一区二区三区中文在线观看| 欧美日本不卡视频| 精品中文字幕一区二区| 欧美激情一区二区三区四区 | 欧美日韩成人在线一区| 美女网站一区二区| 亚洲国产成人一区二区三区| 97久久超碰国产精品| 亚洲电影中文字幕在线观看| 日韩视频免费直播| www.亚洲色图| 日韩有码一区二区三区| 国产欧美一区二区三区在线看蜜臀 |