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

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

?? mainloop.c

?? 用D12實現U盤的單片機程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
   //*************************************************************************
   //
   //                  P H I L I P S   P R O P R I E T A R Y
   //
   //           COPYRIGHT (c)   1999 BY PHILIPS SINGAPORE.
   //                     --  ALL RIGHTS RESERVED  --
   //
   // File Name:	MainLoop.C
   // Author:       Hilbert Zhang ZhenYu
   // Created:      Nov. 19 99
   // Modified:
   // Revision: 	0.0.
   //
   //*************************************************************************
   // Implementation Notes:
   //
   //   4. Bulk-Only Transport FSM
   //      IDLE Stage ->  CBW -> CBW Proc -> DATA OUT Stage -> CSW Proc -> CSW Stage -> IDLE
   //      IDLE Stage ->  CBW -> CBW Proc -> DATA IN Stage -> CSW Proc -> CSW Stage -> IDLE
   //      STALL Stage ->  IDLE -> ...
   //
   //
   //   3. Default Control Pipe Finite State Machine
   //      SETUP Stage -> SETUP Proc -> DATA OUT Stage -> CONTROL OUT Handshake -> STATUS Stage -> IDLE
   //      SETUP Stage -> SETUP Proc -> CONTROL OUT Handshake -> STATUS Stage -> IDLE
   //      SETUP Stage -> SETUP Proc -> DATA IN Stage-> CONTROL IN Handshake ->STATUS Stage -> IDLE
   //      STALL -> SETUP Stage -> ...
   //
   //   2. Stack Overflow Avoidance.
   //      Setup TK overwritten allowance.
   //
   //   1. System Modeling
   //       A. D12
   //       B. 8051
   //       C. ATA controller emulation by 8051
   //
   //   0. 8051 Modeling
   //       A. Target 8051 , 128B RAM, 16KB ROM
   //       B. Choose 2 IRQL levels, Interrupt Priority 0 as IRQL_1, Mainloop as IRQL_0
   //       C. Bit Address Space, Byte Ram Addess Space, Code Address Space, IO port Space
   //
   //*************************************************************************
   // Development Environment
   //
   //   1. Use VC++ IDE instead of DOS enviroment
   //   0. Keil C Ver4
   //
   //*************************************************************************
*/

#include <reg51.h>                /* special function register declarations */

#define GLOBAL_EXT

#include "SysCnfg.h"
#include "BasicTyp.H"

#include "usb100.h"

#include "Common.h"
#include "Hal4Sys.h"
#include "Hal4d12.h"
#include "Hal4ata.h"

//#include "ATA.h"
#include "RBCCmd.h"
#include "RBC.h"

#include "mainloop.h"
#include "chap_9.h"
#include "TPBulk.h"

/*
//*************************************************************************
//  Public data
//*************************************************************************
*/

// bit Flags
STRUC_EXT BITFLAGS BDATA_SEG    bFlags;

// MCU Timer bit flags
BIT_EXT             MCUBF_Timer = bFlags.value^0;
INT8_EXT            Hal4Sys_ClockTicks = 0;

// D12 bit flags
BIT_EXT             D12BF_SetupOverwritten = bFlags.value^1;
BIT_EXT             D12BF_Configuration	 = bFlags.value^2;

//USB
// DefaultControlPipe Finite State Machine [One-Hot]
INT8_EXT BDATA_SEG  DCPFSMstate;
BIT_EXT             DCPFSM_SetupProc = DCPFSMstate^0;
BIT_EXT             DCPFSM_DataIn = DCPFSMstate^1;
BIT_EXT             DCPFSM_DataOut = DCPFSMstate^2;
BIT_EXT             DCPFSM_COhandshake = DCPFSMstate^3;
BIT_EXT             DCPFSM_CIhandshake = DCPFSMstate^4;
BIT_EXT             DCPFSM_Stall = DCPFSMstate^7;
//      DCP FSM
//      SETUP Stage -> SETUP Proc -> DATA OUT Stage -> CONTROL OUT Handshake -> STATUS Stage -> IDLE
//      SETUP Stage -> SETUP Proc -> CONTROL OUT Handshake -> STATUS Stage -> IDLE
//      SETUP Stage -> SETUP Proc -> DATA IN Stage-> CONTROL IN Handshake ->STATUS Stage -> IDLE
//

// USB Device Request
STRUC_EXT DEVICE_REQUEST DATA_SEG DCPDeviceRequest;
INT8_EXT            UsbReq_Recipient;
INT8_EXT            UsbReq_Type;
INT8_EXT            UsbReq_Request;
BIT_EXT             REQBF_DCPRequest_dir = bFlags.value^3;
BIT_EXT             REQBF_DCPRequest_EPdir = bFlags.value^4;
BIT_EXT             REQBF_StallDCPRequest = bFlags.value^5;

INT16_EXT           DCPXfer_wResidue;
INT8_EXT            * DCPXfer_pdata;

// Bulk-Only TP Finite State Machine [One-Hot]
INT8_EXT BDATA_SEG BOTFSMstate;
BIT_EXT             BOTFSM_IDLE = BOTFSMstate^0;
BIT_EXT             BOTFSM_CBWProc = BOTFSMstate^1;
BIT_EXT             BOTFSM_DataIn = BOTFSMstate^2;
BIT_EXT             BOTFSM_DataOut = BOTFSMstate^3;
BIT_EXT             BOTFSM_CSWProc = BOTFSMstate^4;
BIT_EXT             BOTFSM_CSW = BOTFSMstate^5;
BIT_EXT             BOTFSM_Stall = BOTFSMstate^7;
//      BOT FSM
//      IDLE Stage ->  CBW -> CBW Proc -> DATA OUT Stage -> CSW Proc -> CSW Stage -> IDLE
//      IDLE Stage ->  CBW -> CBW Proc -> DATA IN Stage -> CSW Proc -> CSW Stage -> IDLE
//      STALL Stage ->  IDLE
//
INT16_EXT   BOTXfer_wResidue;
INT8_EXT    * BOTXfer_pdata;
STRUC_EXT	TPBLK_STRUC	DATA_SEG	TPBulk_Block;
#define     TPBulk_CBW				TPBulk_Block.TPBulk_CommandBlock
#define	    RBC_CDB					TPBulk_CBW.cdbRBC
#define     RBC_LUN					TPBulk_CBW.bCBW_LUN
#define     Hal4ATA_Atapi			RBC_CDB
#define     TPBulk_CSW				TPBulk_Block.TPBulk_CommandStatus
BIT_EXT             BOTXfer_Abort = bFlags.value^8;
BIT_EXT             BOTBF_StallAtBulkOut = bFlags.value^6;
BIT_EXT             BOTBF_StallAtBulkIn = bFlags.value^7;

// Xfer_Space
INT8_EXT BDATA_SEG  Xfer_Space;
BIT_EXT             DCPXfer_atMCUCODE = Xfer_Space^0;
BIT_EXT             DCPXfer_atMCURAM = Xfer_Space^1;
BIT_EXT             DCPXfer_atEEROM = Xfer_Space^2;
BIT_EXT             DCPXfer_atATA = Xfer_Space^3;
BIT_EXT             BOTXfer_atRAM = Xfer_Space^4;
BIT_EXT             BOTXfer_atATA = Xfer_Space^5;
BIT_EXT             BOTXfer_atROM = Xfer_Space^6;


STRUC_EXT HW_ATA_DEVICES_EXTENSION	Hal4ATA_DevExt;
#define     ATADevExt_IDData		Hal4ATA_DevExt.IdentifyData

BIT_EXT             ATABF_IsAttached = bFlags.value^9;
BIT_EXT             ATABF_IsSupportMultiSector = bFlags.value^10;
BIT_EXT             ATABF_IDEXfer_dir = bFlags.value^11;
BIT_EXT             ATABF_IsSkipSetParameters = bFlags.value^12;

INT8_EXT            Hal4ATA_SectCntInBlk;
/*
//*************************************************************************
//  Public temp var
//*************************************************************************
*/

STRUC_EXT FLEXI_INT32 tempvars4UsbReq;

INT8_EXT BDATA_SEG  FlexByte;
BIT_EXT             FlexByte_b0 = FlexByte^0;
BIT_EXT             FlexByte_b1 = FlexByte^1;
BIT_EXT             FlexByte_b2 = FlexByte^2;
BIT_EXT             FlexByte_b3 = FlexByte^3;
BIT_EXT             FlexByte_b4 = FlexByte^4;
BIT_EXT             FlexByte_b5 = FlexByte^5;
BIT_EXT             FlexByte_b6 = FlexByte^6;
BIT_EXT             FlexByte_b7 = FlexByte^7;

//INT8_EXT            TempByte;


/*
//*************************************************************************
// USB protocol function pointer arrays
//*************************************************************************
*/

code void (*StandardDeviceRequest[MAX_STD_REQUEST])(void) =
{
	Chap9_GetStatus,
	Chap9_ClearFeature,
	MLsup_StallEP0,
	Chap9_SetFeature,
	MLsup_StallEP0,
	Chap9_SetAddress,
	Chap9_GetDescriptor,
	MLsup_StallEP0,
	Chap9_GetConfiguration,
	Chap9_SetConfiguration,
	Chap9_GetInterface,
	Chap9_SetInterface,
};

code void (*ClassDeviceRequest[MAX_CLASS_REQUEST])(void) =
{
	TPBulk_ResetATA,
    TPBulk_GetMaxLUN
};

/*
code void (*VendorDeviceRequest[MAX_VENDOR_REQUEST])(void) =
{
	MLsup_StallEP0
};
*/

/*
//*************************************************************************
//  Functions
//*************************************************************************
*/

void main(void)
{

    // Disable all Interrupts
    RaiseIRQL();

    // Init BitFlags
//    bFlags.value = 0;

    //Init 8051 ports;
	Hal4Sys_InitMCU();

    //Init Timer
	Hal4Sys_InitTimer0();

	D12SUSPD	= 0;

 Hal4ATA_FindIDEDevice();
   Hal4Sys_InitD12();


   MLsup_ReconnectUSB();

  //Init IDE Harddisk


	// Power-On Reset D12

    // Init FSM
	DCPFSMstate = USBFSM4DCP_IDLE;
    BOTFSMstate = USBFSM4BOT_IDLE;// USBFSM4BOT_IDLE=0x01
//BOTFSMstate =0;

	// Connect to USB Host


    /* Main program loop */
    while(TRUE)
    {
		// Enable Interrupt for Interrupt Type Event Stimulie
        LowerIRQL();  //LowerIRQL() == EA=1 , (no IRQ when EA=0!)

        // USB Control Pipe
        if (DCPFSM_SetupProc)	// DCPFSM_SetupProc=DCPFSMstate^0
        {
        	RaiseIRQL();
            MLsup_USBSetupTokenHandler();
            LowerIRQL();
		} // if SetupProc

		// USB Bulk Pipe
        RaiseIRQL();
        {
		//	 MCU_P1 = D12REG_ONLY;  // for read busy status
            if(BOTFSM_IDLE)   //BOTFSM_IDLE = BOTFSMstate^0
            {
			    Hal4Sys_D12CmdPortOutB( 0x04);// SelectEP BulkOut
			    FlexByte = Hal4Sys_D12DataPortInB();
                if(FlexByte_b0 == 1) // BulkOut Full
                    TPBulk_CBWHandler(); // Goto BOTFSMstate_CBWProc
            } // if BOT in IDLE

            while(BOTFSM_DataOut) //BOTFSM_DataOut = BOTFSMstate^3
            {

//                MCU_P1 = D12REG_ONLY;
                Hal4Sys_D12CmdPortOutB( 0x04);// SelectEP BulkOut
			    FlexByte = Hal4Sys_D12DataPortInB();
                if(FlexByte_b0 == 0) // if fifo is empty
                    break;

				Hal4Sys_D12CmdPortOutB( 0xF0);// ReadBuffer
				Hal4Sys_D12DataPortInB();// HI BYTE of Buffer Len
				FlexByte = Hal4Sys_D12DataPortInB();// LO BYTE of Buffer Len

				if(BOTXfer_atATA)   //BOTXfer_atATA = Xfer_Space^5
					MLsup_XferPktFrUSB2IDE();
				else if(BOTXfer_atRAM || BOTXfer_atROM)
					MLsup_XferPktFrUSB2MEM(FlexByte);

				BOTXfer_pdata += FlexByte;
				BOTXfer_wResidue -= FlexByte;
                if(BOTXfer_wResidue == 0)
                    { // MCU_P1 = D12REG_ONLY;
                      TPBulk_CSWHandler(); // Goto BOTFSMstate_CSWProc
					 }
					//MCU_P1 = D12REG_ONLY;
            }//BOTFSM_DATAOUT


            while(BOTFSM_DataIn)//BOTFSM_DataIn = BOTFSMstate^2
            {
   //            MCU_P1 = D12REG_ONLY;
                Hal4Sys_D12CmdPortOutB( 0x05);// SelectEP BulkIn
	    		FlexByte = Hal4Sys_D12DataPortInB();
                if(FlexByte_b0 == 1) // BulkIn is full
                    break;


                if(BOTXfer_atATA)
				{
					MLsup_XferPktFrIDE2USB();
					FlexByte = EP2_PACKET_SIZE;
				}
				else if(BOTXfer_atRAM || BOTXfer_atROM)
					FlexByte = MLsup_XferPktFrMEM2USB();

				BOTXfer_pdata += FlexByte;
				BOTXfer_wResidue -= FlexByte;
                if(BOTXfer_wResidue == 0)
                 {// MCU_P1 = D12REG_ONLY;
                    TPBulk_CSWHandler();// Goto BOTFSMstate_CSWProc
			      }
    		} // BOTFSM_DataIn

		    if(BOTFSM_CSW)	//BOTFSM_CSW = BOTFSMstate^5
		    {
		//			MCU_P1 = D12REG_ONLY;

			    Hal4Sys_D12CmdPortOutB( 0x05);// SelectEP  BulkIn
			    FlexByte = Hal4Sys_D12DataPortInB();
			    if(FlexByte_b0 == 0) // BulkIn is empty
			    {

				    FlexByte = MLsup_XferPktFrMEM2USB();

				    BOTXfer_pdata += FlexByte;
				    BOTXfer_wResidue -= FlexByte;
				    if(BOTXfer_wResidue == 0)
					    BOTFSMstate = USBFSM4BOT_IDLE; // Goto BOTFSMstate_IDLE

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色狠狠色综合系列| 欧美日本在线播放| 成人av网站在线| 欧美日韩一区不卡| 中文字幕人成不卡一区| 日韩国产成人精品| 色婷婷精品久久二区二区蜜臀av | 亚洲天堂免费在线观看视频| 午夜亚洲国产au精品一区二区| 成人激情小说网站| 日韩一级免费观看| 丝袜亚洲另类丝袜在线| 波多野结衣欧美| 久久久久久久久久久久久久久99| 视频一区视频二区在线观看| 一本久久a久久精品亚洲| 国产女同性恋一区二区| 久久国产人妖系列| 91精品国产综合久久香蕉麻豆| 亚洲欧美日韩一区二区三区在线观看| 国产一区二区精品久久| 日韩免费高清av| 免费亚洲电影在线| 911精品国产一区二区在线| 一区二区三区精密机械公司| 972aa.com艺术欧美| 中文无字幕一区二区三区| 九九在线精品视频| 日韩一区二区精品葵司在线| 亚洲成va人在线观看| 欧美午夜一区二区| 亚洲国产精品久久不卡毛片| 精品视频免费在线| 亚洲bt欧美bt精品777| 精品婷婷伊人一区三区三| 一区二区三区在线视频播放| 在线一区二区三区做爰视频网站| 亚洲欧洲日产国码二区| 91麻豆精品在线观看| 日韩一区有码在线| 色综合久久久久| 亚洲综合激情网| 欧美日韩视频一区二区| 日韩国产精品91| 日韩午夜电影av| 国产在线精品一区二区| 国产日产亚洲精品系列| av中文字幕在线不卡| 亚洲免费在线视频一区 二区| 91精品91久久久中77777| 亚洲第一福利视频在线| 日韩欧美在线不卡| 国产91精品免费| 一区二区三区成人在线视频| 91麻豆精品国产91久久久久久| 蜜桃av一区二区在线观看| 精品国产污污免费网站入口 | 风间由美一区二区三区在线观看 | 91视频免费观看| 亚洲一区二区三区四区五区黄| 在线成人午夜影院| 高清不卡一区二区在线| 亚洲欧美另类图片小说| 日韩写真欧美这视频| www.成人网.com| 五月天婷婷综合| 欧美极品aⅴ影院| 欧美日本一道本在线视频| 亚洲视频一区在线| 欧美日韩国产影片| 国产精品一区二区黑丝| 亚洲尤物在线视频观看| 欧美不卡一区二区三区| 91九色02白丝porn| 国产揄拍国内精品对白| 亚洲欧美日韩国产另类专区| 欧美xxxxxxxx| 欧美性受xxxx黑人xyx性爽| 韩国成人在线视频| 亚洲综合成人网| 国产欧美日韩综合| 欧美猛男男办公室激情| 成人激情开心网| 青青青爽久久午夜综合久久午夜| 国产精品久久久久久久蜜臀 | 悠悠色在线精品| 久久蜜桃一区二区| 欧美精品在线一区二区三区| 成人夜色视频网站在线观看| 蜜臀av一区二区三区| 一区二区三区小说| 日本一区二区三级电影在线观看 | 亚州成人在线电影| 国产精品国产三级国产三级人妇 | 国产中文字幕一区| 午夜亚洲福利老司机| 国产精品第四页| 久久综合999| 日韩欧美激情在线| 欧美一区二区视频在线观看 | 久久一留热品黄| 91精品国产综合久久久久| 日本乱人伦一区| 91视视频在线直接观看在线看网页在线看 | 亚洲二区视频在线| 亚洲丝袜精品丝袜在线| 国产精品嫩草影院com| 久久久久国产精品麻豆 | 欧洲av一区二区嗯嗯嗯啊| 国内不卡的二区三区中文字幕| 视频一区在线视频| 首页亚洲欧美制服丝腿| 亚洲国产色一区| 亚洲成av人**亚洲成av**| 亚洲高清视频的网址| 亚洲香肠在线观看| 亚洲电影一级黄| 午夜欧美一区二区三区在线播放| 亚洲国产精品一区二区久久| 亚洲一区二区三区四区在线观看 | 成人av电影观看| 99国产精品视频免费观看| 国产91在线看| 99精品一区二区| 欧洲在线/亚洲| 欧美日韩一区视频| 欧美第一区第二区| 久久综合九色综合欧美就去吻| 亚洲精品一区二区三区蜜桃下载| 久久品道一品道久久精品| 国产香蕉久久精品综合网| 中文字幕不卡的av| 亚洲精品v日韩精品| 天堂精品中文字幕在线| 青青草成人在线观看| 国产一区美女在线| 波多野结衣亚洲| 欧美在线啊v一区| 欧美一区二区三区公司| 久久人人超碰精品| 最新热久久免费视频| 亚洲成人自拍网| 激情成人综合网| 97成人超碰视| 欧美日韩高清一区二区不卡| 欧美本精品男人aⅴ天堂| 欧美激情资源网| 午夜欧美视频在线观看| 国产一区二区三区四区五区入口 | 91精品在线观看入口| www亚洲一区| 一区二区三区四区中文字幕| 青青草伊人久久| 97精品电影院| 精品国产第一区二区三区观看体验| 国产日韩欧美综合在线| 婷婷夜色潮精品综合在线| 国产老女人精品毛片久久| 色哟哟一区二区三区| 日韩欧美电影在线| 亚洲乱码国产乱码精品精98午夜 | 一区二区三区四区不卡在线| 九色|91porny| 欧美日韩一区在线观看| 国产精品天天摸av网| 美女爽到高潮91| 欧美专区日韩专区| 欧美极品aⅴ影院| 久久aⅴ国产欧美74aaa| 91行情网站电视在线观看高清版| 久久婷婷综合激情| 日日嗨av一区二区三区四区| 成人99免费视频| 欧美哺乳videos| 日日夜夜精品免费视频| 在线视频国内一区二区| 国产三级三级三级精品8ⅰ区| 天天色天天爱天天射综合| 91麻豆精品在线观看| 日本一区二区成人| 精品无码三级在线观看视频 | 久久久久成人黄色影片| 日本亚洲免费观看| 欧美日韩中文字幕精品| 亚洲色图一区二区三区| 成人97人人超碰人人99| 欧美国产乱子伦 | 97精品久久久久中文字幕| 久久久国际精品| 国产在线观看免费一区| 精品成人一区二区三区四区| 青青草97国产精品免费观看 | 亚洲成人av免费| 欧洲一区二区av| 亚洲精品乱码久久久久久| 日本伦理一区二区| 一区二区三区四区在线免费观看 | 成人激情视频网站| 日本一区二区视频在线| 成人午夜视频福利|