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

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

?? hal4ata.c

?? 用D12實現U盤的單片機程序
?? C
?? 第 1 頁 / 共 2 頁
字號:

} /* end IssueIdentify()*/

BOOLEAN
Hal4ATA_InitDevExt(void)
{
    INT8 c;
    if(Hal4ATA_WaitOnBusyNDrq())
    {
        ATADevExt_IDData.GeneralConfiguration = Hal4Sys_ATADataPortInW();//INT16  00
        ATADevExt_IDData.NumberOfCylinders = Hal4Sys_ATADataPortInW();//INT16  01
        Hal4Sys_ATADataPortInW();
        ATADevExt_IDData.NumberOfHeads = Hal4Sys_ATADataPortInW();//INT16  03

        for(c = 2 ; c != 0; c--)
            Hal4Sys_ATADataPortInW();
        ATADevExt_IDData.SectorsPerTrack = Hal4Sys_ATADataPortInW();//INT16  06

        for(c = 40 ; c != 0; c--) // 7 -47
            Hal4Sys_ATADataPortInW();
        ATADevExt_IDData.MaximumBlockTransfer = Hal4Sys_ATADataPortInW();//INT8 47

        Hal4Sys_ATADataPortInW(); // 48
        ATADevExt_IDData.Capabilities = Hal4Sys_ATADataPortInW();//INT16  49

        for(c = 4; c != 0; c--)
            Hal4Sys_ATADataPortInW();
        ATADevExt_IDData.NumberOfCurrentCylinders = Hal4Sys_ATADataPortInW();//INT16  54
        ATADevExt_IDData.NumberOfCurrentHeads = Hal4Sys_ATADataPortInW();//INT16  55
        ATADevExt_IDData.CurrentSectorsPerTrack = Hal4Sys_ATADataPortInW();//INT16  56
        ATADevExt_IDData.CurrentSectorCapacity.ints.i0 = Hal4Sys_ATADataPortInW();//INT32  57
        ATADevExt_IDData.CurrentSectorCapacity.ints.i1 = Hal4Sys_ATADataPortInW();//

        if(ATADevExt_IDData.CurrentSectorCapacity.u0 == 0)
        {
            ATADevExt_IDData.NumberOfCurrentCylinders = ATADevExt_IDData.NumberOfCylinders;
            ATADevExt_IDData.NumberOfCurrentHeads = ATADevExt_IDData.NumberOfHeads ;//INT16  55
            ATADevExt_IDData.CurrentSectorsPerTrack = ATADevExt_IDData.SectorsPerTrack;//INT16  56
            ATADevExt_IDData.CurrentSectorCapacity.u0 = (INT32)ATADevExt_IDData.NumberOfCurrentCylinders * ATADevExt_IDData.NumberOfCurrentHeads * ATADevExt_IDData.CurrentSectorsPerTrack;
        }
        return(TRUE);
    }
    else
        return(FALSE);

}

BOOLEAN
Hal4ATA_IsLBAmode(void)
{
//	if( ATADevExt_IDData.CurrentSectorCapacity.u0 >= ((INT32) 63<<14) ) /*63* 1024 * 16*/
//	{
        Hal4ATA_DevReg_LBA = 1;
//	}
//    else
//    {
//        Hal4ATA_DevReg_LBA = 0;
//    }
    return(Hal4ATA_DevReg_LBA);
}

BOOLEAN
Hal4ATA_IsModeOK(void)
{
	/*
	// This hideous hack is to deal with ESDI devices that return
	// garbage geometry in the IDENTIFY data.
	// This is ONLY for the crashdump environment as
	// these are ESDI devices.
	*/
    ATABF_IsSkipSetParameters = FALSE;


	if (Hal4ATA_DevExt.IdentifyData.SectorsPerTrack == 0x35 &&
		ATADevExt_IDData.NumberOfHeads == 0x07)
	{
		/*
		// Change these values to something reasonable.
		*/
		ATADevExt_IDData.SectorsPerTrack = 0x34;
		ATADevExt_IDData.NumberOfHeads = 0x0E;
	}

	if (ATADevExt_IDData.SectorsPerTrack == 0x35 &&
		ATADevExt_IDData.NumberOfHeads == 0x0F)
	{

		/*
		// Change these values to something reasonable.
		*/

		ATADevExt_IDData.SectorsPerTrack = 0x34;
		ATADevExt_IDData.NumberOfHeads = 0x0F;
	}

	if (ATADevExt_IDData.SectorsPerTrack == 0x36 &&
		ATADevExt_IDData.NumberOfHeads == 0x07)
	{

		/*
		// Change these values to something reasonable.
		*/
		ATADevExt_IDData.SectorsPerTrack = 0x3F;
		ATADevExt_IDData.NumberOfHeads = 0x10;
		ATABF_IsSkipSetParameters = TRUE;
	}

    return ATABF_IsSkipSetParameters;
}

BOOLEAN
Hal4ATA_SetFeature(void)
{
   Hal4Sys_ATAPortOutB(ATAREG4OUT_FEATURE,0x03);
   Hal4Sys_ATAPortOutB(ATAREG4OUT_SECTOR_COUNT, 0x08);

   Hal4Sys_ATAPortOutB(ATAREG4OUT_SECTOR_NUMBER,0);
   Hal4Sys_ATAPortOutB(ATAREG4OUT_CYLINDER_LOW,0);
   Hal4Sys_ATAPortOutB(ATAREG4OUT_CYLINDER_HIGH,0);

   Hal4Sys_ATAPortOutB(ATAREG4OUT_COMMAND, 0xEF);
}

BOOLEAN
Hal4ATA_SetDriveParameters(void)
{
    BOOLEAN retStatus = FALSE;

    if(Hal4ATA_WaitOnBusy())
    {
        /*
	    // Set up registers for SET PARAMETER command.
	    */
   	    //Hal4Sys_ATAPortOutB(ATAREG4OUT_DEVICE_HEAD,Hal4ATA_DevReg|(ATADevExt_IDData.NumberOfHeads-1) );
        Hal4Sys_ATAPortOutB(ATAREG4OUT_DEVICE_HEAD,0xef );
        //Hal4Sys_ATAPortOutB(ATAREG4OUT_SECTOR_COUNT,ATADevExt_IDData.SectorsPerTrack);
        Hal4Sys_ATAPortOutB(ATAREG4OUT_SECTOR_COUNT,0x20);

        if(Hal4ATA_WaitOnBusyNDrdy())
        {

	        /*
	        // Send SET PARAMETER command.
	        // IDE_COMMAND_SET_DRIVE_PARAMETERS 0x91 (Init Device Parameter)
	        */
	        Hal4Sys_ATAPortOutB(ATAREG4OUT_COMMAND,IDE_COMMAND_SET_DRIVE_PARAMETERS);

            retStatus = Hal4ATA_WaitOnBusy();
        }
    }
    return retStatus;
} /* end Hal4ATA_SetDriveParameters()*/


BOOLEAN
Hal4ATA_SetMultipleMode(void)  //IDE_COMMAND_SET_MULTIPLE=0xC6
{
    BOOLEAN retStatus = FALSE;
	if ( ATABF_IsAttached && Hal4ATA_SelDevice() )
	{
        if(ATADevExt_IDData.MaximumBlockTransfer > MULTI_BLOCK_1 )
        {
	//	    Hal4Sys_ATAPortOutB(ATAREG4OUT_SECTOR_COUNT, ATADevExt_IDData.MaximumBlockTransfer);
	//	    Hal4Sys_ATAPortOutB(ATAREG4OUT_COMMAND, IDE_COMMAND_SET_MULTIPLE);
            if( Hal4ATA_WaitOnBusy())
            {
                ATABF_IsSupportMultiSector = TRUE;
                retStatus = TRUE;
            }
            else
			{
                ATABF_IsSupportMultiSector = FALSE;
			}
		}
        else
        {
            ATABF_IsSupportMultiSector = FALSE;
        }

        if(ATABF_IsSupportMultiSector == FALSE)
        {
            retStatus = Hal4ATA_IdeSoftReset();
        }
	}

    return retStatus;
}

/*
//*************************************************************************
//  Subroutines -- level 5 ATA transaction
//*************************************************************************
*/
BOOLEAN
Hal4ATA_IdeHardReset(void)
{
    INT8 c,a,b,d,e;
    BOOLEAN retStatus = FALSE;


    ATA_RST_N = 0;
    Hal4Sys_WaitInUS(320); // >25 US
    ATA_RST_N = 1;
/*
	while (TRUE)
	{	a= Hal4Sys_ATAPortInB(ATAREG4IN_SECTOR_COUNT);
		b = Hal4Sys_ATAPortInB(ATAREG4IN_SECTOR_NUMBER);
		d = Hal4Sys_ATAPortInB(ATAREG4IN_CYLINDER_LOW);
		e = Hal4Sys_ATAPortInB(ATAREG4IN_CYLINDER_HIGH);

		if ( (d+e >0) && (a+b >2))
		{ATA_RST_N = 0;
	     Hal4Sys_WaitInUS(320); // >25 US
	     ATA_RST_N = 1;
	 	}
	 else
	 break;
	}
*/
    for(c = 20; c != 0; c--)
    	Hal4Sys_WaitInUS(50000); // 50MS

    if(Hal4ATA_SelDevice())
	{

    Hal4ATA_DevReg_DEV = FALSE;
    Hal4Sys_ATAPortOutB(ATAREG4OUT_DEVICE_HEAD,Hal4ATA_DevReg);
	}

#ifndef DEBUG
    for(c = 31; c!=0; c--)  // 31 Seconds time out
#else
    while(TRUE)
#endif
    {
        if(Hal4ATA_WaitOnBusyNDrdy())
        {
            retStatus = TRUE;
            break;
        }
    }

 //   MCU_P1 = D12REG_ONLY;
    return retStatus;
}

BOOLEAN
Hal4ATA_FindIDEDevice(void)
{

    INT8    c;

    ATABF_IsAttached = FALSE;
    Hal4ATA_DevReg_DEV = FALSE;

	if(Hal4ATA_IdeHardReset())
    {
	//	Hal4Sys_ATAPortOutB(ATAREG4OUT_CONTROL,0xFA);
		Hal4ATA_SetFeature();
	    for ( c = 2; c != 0; c--, Hal4ATA_DevReg_DEV^=1 )
	    {

            if(Hal4ATA_SelDevice())
            {
		        if ( Hal4ATA_IssueIDEIdentify() )
		        {
                    ATABF_IsAttached = TRUE;
                    break;
		        }
            }
	    }

        if(ATABF_IsAttached)
        {
            Hal4ATA_IsLBAmode();

            if(!Hal4ATA_DevReg_LBA)
            {
			    //  Being cautious,
                //  CHS Harddisk set block=1
    		    ATADevExt_IDData.MaximumBlockTransfer = 1;

            }


            if( Hal4ATA_IsModeOK() == FALSE)
            {
		        ATABF_IsAttached = Hal4ATA_SetDriveParameters();
            }

            if(ATABF_IsAttached)
            {
                ATABF_IsAttached = Hal4ATA_SetMultipleMode();
		    }

        } // IDE HD is found

//Hal4Sys_ATAPortOutB(ATAREG4OUT_CONTROL,0xFA);
    } // IDE Reset OK

//    MCU_P1 = D12REG_ONLY;   //D12REG_ONLY =0xB8

    return ATABF_IsAttached;


} /*end Hal4ATA_FindIDEDevice()*/


BOOLEAN
Hal4ATA_ReadWriteSetting(void)
{

    BOOLEAN retStatus = FALSE;
    /*
	// Select device  .
	*/
	if(Hal4ATA_SelDevice())
	//if(TRUE)
    {
        //Assume Sector Counter <256
        Hal4Sys_ATAPortOutB(ATAREG4OUT_SECTOR_COUNT, RBC_CDB.RbcCdb_Read.XferLength_0);


	    if(Hal4ATA_DevReg_LBA )
	    /* IN LBA mode */
	    {
		    /*
		    // Set up sector number register.
		    */
		    /* From Read Card Capacity()
cdbReadCap.tmpVar.CapData.LBA_3 =cdbReadCap.tmpVar.l0[1].chars0.c3;
cdbReadCap.tmpVar.CapData.LBA_2 =cdbReadCap.tmpVar.l0[1].chars0.c2;
cdbReadCap.tmpVar.CapData.LBA_1 =cdbReadCap.tmpVar.l0[1].chars0.c1;
cdbReadCap.tmpVar.CapData.LBA_0 =cdbReadCap.tmpVar.l0[1].chars0.c0;
			*/

//-----------------------------------------
		if( ATABF_IDEXfer_dir )    // ATABF_Xfer_dir==1 Read(from Dev to Host)
  		    {


		    Hal4Sys_ATAPortOutB(ATAREG4OUT_SECTOR_NUMBER,RBC_CDB.RbcCdb_Read.LBA.LBA_W8.LBA_0);
		    Hal4Sys_ATAPortOutB(ATAREG4OUT_CYLINDER_LOW,RBC_CDB.RbcCdb_Read.LBA.LBA_W8.LBA_1);
		    Hal4Sys_ATAPortOutB(ATAREG4OUT_CYLINDER_HIGH,RBC_CDB.RbcCdb_Read.LBA.LBA_W8.LBA_2);
            Hal4Sys_ATAPortOutB(ATAREG4OUT_DEVICE_HEAD, (RBC_CDB.RbcCdb_Read.LBA.LBA_W8.LBA_3&0x0f) | Hal4ATA_DevReg );


	    }
	    else
	    {
		    // write command.
		    Hal4Sys_ATAPortOutB(ATAREG4OUT_SECTOR_NUMBER,RBC_CDB.RbcCdb_Write.LBA.LBA_W8.LBA_0);
		    Hal4Sys_ATAPortOutB(ATAREG4OUT_CYLINDER_LOW,RBC_CDB.RbcCdb_Write.LBA.LBA_W8.LBA_1);
		    Hal4Sys_ATAPortOutB(ATAREG4OUT_CYLINDER_HIGH,RBC_CDB.RbcCdb_Write.LBA.LBA_W8.LBA_2);
            Hal4Sys_ATAPortOutB(ATAREG4OUT_DEVICE_HEAD, (RBC_CDB.RbcCdb_Write.LBA.LBA_W8.LBA_3&0x0f) | Hal4ATA_DevReg );
		    }

 //----------------------------------------
	    }
	    else
	    /* CHS mode */
	    {
		    /*
		    // Set up sector number register.
		    */
		    Hal4Sys_ATAPortOutB(ATAREG4OUT_SECTOR_NUMBER,(INT8) ((RBC_CDB.RbcCdb_Read.LBA.LBA_W32 % ATADevExt_IDData.SectorsPerTrack) + 1));

		    /*
		    // Caculate Hal4ATA_Track & Hal4ATA_drvSelect
		    */
		    Hal4ATA_Track.u0 = RBC_CDB.RbcCdb_Read.LBA.LBA_W32/((INT32)(ATADevExt_IDData.SectorsPerTrack));
		    Hal4ATA_drvSelect = (INT8)(Hal4ATA_Track.u0%ATADevExt_IDData.NumberOfHeads);
		    Hal4ATA_Track.u0 /= ((INT32)(ATADevExt_IDData.NumberOfHeads));

		    /*
		    // Set up cylinder low register.
		    */
		    Hal4Sys_ATAPortOutB(ATAREG4OUT_CYLINDER_LOW,Hal4ATA_Track.chars0.c0);
		    Hal4Sys_ATAPortOutB(ATAREG4OUT_CYLINDER_HIGH,Hal4ATA_Track.chars0.c1);

		    /*
		    // Set up head and drive select register.
		    */
            Hal4Sys_ATAPortOutB(ATAREG4OUT_DEVICE_HEAD, Hal4ATA_DevReg|Hal4ATA_drvSelect);
	    }

	    if( ATABF_IDEXfer_dir )    // ATABF_Xfer_dir==1 Read(from Dev to Host)
	    {
		    /*
		    // Send read command.
		    */
		 //   if (ATABF_IsSupportMultiSector)
		//	    Hal4Sys_ATAPortOutB(ATAREG4OUT_COMMAND, IDE_COMMAND_READ_MULTIPLE);
		//    else
			    Hal4Sys_ATAPortOutB(ATAREG4OUT_COMMAND, IDE_COMMAND_READ);
	    }
	    else
	    {
		    /*
		    // Send write command.
		    */
		  //  if (ATABF_IsSupportMultiSector)
		//	    Hal4Sys_ATAPortOutB(ATAREG4OUT_COMMAND,IDE_COMMAND_WRITE_MULTIPLE);
		//    else
			    Hal4Sys_ATAPortOutB(ATAREG4OUT_COMMAND,IDE_COMMAND_WRITE);
	    }

	    retStatus = Hal4ATA_WaitOnBusyNDrq();
    }

  //  MCU_P1 = D12REG_ONLY;
    return retStatus;

} /* end Hal4ATA_ReadWriteSetting()*/


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av资源下载| 日韩亚洲国产中文字幕欧美| 欧美午夜免费电影| 国产日韩欧美不卡| 亚洲第一成人在线| 国产成人精品亚洲777人妖| 欧美三级一区二区| 亚洲乱码国产乱码精品精98午夜 | 另类的小说在线视频另类成人小视频在线| 国产在线精品国自产拍免费| 欧美少妇xxx| 亚洲欧美色综合| 成人午夜伦理影院| 精品国产免费视频| 日韩精品一区第一页| 欧美亚洲一区二区在线观看| 国产精品福利一区| 国产成人精品免费在线| 日韩精品综合一本久道在线视频| 亚洲一区二区成人在线观看| 高清视频一区二区| 国产亚洲1区2区3区| 久久国产精品一区二区| 7777女厕盗摄久久久| 亚洲成a人在线观看| 在线视频国产一区| 亚洲精品欧美二区三区中文字幕| 成人av网址在线观看| 久久久精品免费免费| 国产精品一级黄| 久久毛片高清国产| 国产激情一区二区三区| 久久久久久麻豆| 国产精品18久久久| 欧美经典三级视频一区二区三区| 国产在线一区二区综合免费视频| 日韩一区二区在线观看视频| 日本vs亚洲vs韩国一区三区| 91精品国产综合久久久蜜臀粉嫩 | 中文字幕中文在线不卡住| 国产高清一区日本| 国产精品网友自拍| 91美女在线视频| 亚洲一区二区五区| 6080日韩午夜伦伦午夜伦| 日韩不卡一二三区| 精品久久一区二区三区| 国产精品一区在线| 国产精品日日摸夜夜摸av| 丰满少妇久久久久久久| 亚洲欧洲日韩综合一区二区| 色综合久久综合网97色综合| 一区二区欧美精品| 7777女厕盗摄久久久| 国产伦精品一区二区三区免费迷| 日本一区二区免费在线 | 国产福利一区二区三区视频在线| 久久久噜噜噜久久人人看 | 日韩三级在线免费观看| 激情另类小说区图片区视频区| 久久久精品国产免大香伊| 91偷拍与自偷拍精品| 亚洲大片精品永久免费| 精品卡一卡二卡三卡四在线| 成人听书哪个软件好| 亚洲国产综合在线| 欧美精品一区男女天堂| 99久久精品国产网站| 三级影片在线观看欧美日韩一区二区 | 色av一区二区| 久久99国产精品成人| 国产精品色眯眯| 欧美剧在线免费观看网站 | 亚洲自拍偷拍欧美| xf在线a精品一区二区视频网站| 成人免费毛片嘿嘿连载视频| 午夜国产不卡在线观看视频| 久久久久久一二三区| 在线视频综合导航| 国产一区二区三区美女| 亚洲一区在线电影| 亚洲国产精华液网站w | 欧美视频在线观看一区二区| 美腿丝袜亚洲一区| 亚洲精品久久嫩草网站秘色| 精品蜜桃在线看| 欧美日韩精品是欧美日韩精品| 国产aⅴ精品一区二区三区色成熟| 亚洲午夜视频在线观看| 欧美国产成人精品| 精品国产乱码久久久久久久| 色国产精品一区在线观看| 岛国精品在线播放| 免费在线一区观看| 亚洲午夜电影网| 国产精品不卡在线| 久久久久久**毛片大全| 日韩一级免费观看| 精品视频色一区| 在线观看免费亚洲| av不卡在线播放| 成人精品一区二区三区中文字幕| 国产综合色精品一区二区三区| 亚洲一区中文日韩| 亚洲精品免费在线观看| 国产精品午夜在线观看| 国产日韩一级二级三级| 精品国产在天天线2019| 91精品免费在线观看| 欧美日本在线一区| 欧美性videosxxxxx| 欧洲一区二区av| 日本精品一区二区三区四区的功能| 风流少妇一区二区| 国产福利一区在线| 国产·精品毛片| 99在线精品免费| av午夜一区麻豆| 99久久久久免费精品国产| 9l国产精品久久久久麻豆| www.亚洲精品| 99re这里都是精品| 日本乱人伦一区| 欧美精选一区二区| 91精品国产麻豆| 久久综合国产精品| 欧美激情一区在线观看| 日本一区二区免费在线| 亚洲欧美一区二区三区孕妇| 一区二区三区鲁丝不卡| 亚洲成人在线观看视频| 日韩av中文字幕一区二区三区| 日韩电影一区二区三区| 激情五月婷婷综合网| av中文字幕不卡| 欧美伊人久久久久久午夜久久久久| 欧洲色大大久久| 欧美一区二区福利在线| 久久综合色8888| 日韩伦理免费电影| 水蜜桃久久夜色精品一区的特点| 美女国产一区二区三区| 成人午夜视频在线观看| 欧美日韩一二三区| 精品国产一二三| 亚洲人123区| 免费观看在线综合色| 成人午夜视频网站| 666欧美在线视频| 亚洲综合在线电影| 美女视频黄 久久| 成人av资源下载| 91精品福利在线一区二区三区| 久久久久亚洲综合| 亚洲成人免费在线| 丁香网亚洲国际| 欧美人妇做爰xxxⅹ性高电影| 久久久久国产精品麻豆ai换脸| 亚洲日本va在线观看| 久久精品久久99精品久久| va亚洲va日韩不卡在线观看| 欧美一级搡bbbb搡bbbb| 综合av第一页| 国产精品自拍av| 88在线观看91蜜桃国自产| 国产精品久久久久四虎| 日本欧美韩国一区三区| 99re成人在线| 亚洲精品在线免费播放| 亚洲自拍偷拍九九九| 成人夜色视频网站在线观看| 欧美日韩高清一区二区三区| 国产精品久久精品日日| 国产一区二区三区在线看麻豆| 欧美亚洲综合色| 亚洲毛片av在线| 成人做爰69片免费看网站| 日韩欧美电影在线| 亚洲国产精品精华液网站| jlzzjlzz欧美大全| 国产日韩精品一区二区三区在线| 久久精品国产色蜜蜜麻豆| 精品视频一区 二区 三区| 亚洲人成人一区二区在线观看| 国产麻豆视频一区二区| 精品国产网站在线观看| 奇米一区二区三区| 欧美三级中文字幕| 亚洲国产精品综合小说图片区| 91尤物视频在线观看| 国产精品久久久久影院亚瑟| 国产精品18久久久久久久网站| 日韩女同互慰一区二区| 日本vs亚洲vs韩国一区三区二区| 欧美日免费三级在线| 亚洲最新在线观看| 欧美视频一区在线观看| 亚洲成av人片一区二区三区| 在线观看精品一区| 亚洲国产精品一区二区尤物区|