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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? mainloop.c

?? 用D12實(shí)現(xiàn)U盤(pán)的單片機(jī)程序
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/*
   //*************************************************************************
   //
   //                  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

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久图文区| 欧美r级在线观看| 欧美va日韩va| 亚洲卡通动漫在线| 国产自产高清不卡| 欧美日韩亚洲高清一区二区| 国产精品日韩成人| 精品一区二区三区在线播放| 欧美日韩视频专区在线播放| 中文字幕在线免费不卡| 国产露脸91国语对白| 日韩一级大片在线| 亚洲一区二区三区在线看| 成人av在线网| 国产调教视频一区| 美日韩一级片在线观看| 欧美日韩国产精选| 亚洲精品国产一区二区精华液| 成人短视频下载| 久久久久久麻豆| 精品在线一区二区三区| 欧美乱妇一区二区三区不卡视频| 亚洲三级免费电影| 99久久久国产精品| 国产精品美女久久久久久| 国产精品主播直播| 久久午夜羞羞影院免费观看| 精品一区在线看| 日韩欧美一二三区| 狂野欧美性猛交blacked| 51精品国自产在线| 亚洲电影欧美电影有声小说| 欧美性三三影院| 亚洲在线免费播放| 欧美午夜精品一区二区三区| 亚洲最大成人网4388xx| 一本一道波多野结衣一区二区| 亚洲三级电影全部在线观看高清| 成人污视频在线观看| 国产蜜臀97一区二区三区| 国产不卡视频在线播放| 国产午夜精品久久久久久免费视 | 亚洲国产aⅴ成人精品无吗| 色悠悠久久综合| 亚洲综合激情网| 欧美四级电影网| 亚洲mv大片欧洲mv大片精品| 欧美日韩第一区日日骚| 麻豆中文一区二区| www成人在线观看| 国产黄人亚洲片| 国产精品久久久久久久久免费丝袜| caoporn国产一区二区| 中文字幕亚洲一区二区av在线| 97久久人人超碰| 亚洲国产美女搞黄色| 91久久精品一区二区二区| 午夜精品久久久久久久99樱桃| 欧美日韩国产bt| 另类调教123区 | 欧美区视频在线观看| 日本最新不卡在线| 久久久久久久久久久久电影| 国产成人免费9x9x人网站视频| 国产精品久久久久一区| 欧美午夜不卡视频| 秋霞成人午夜伦在线观看| 26uuu国产电影一区二区| 成人自拍视频在线| 亚洲欧美日韩国产成人精品影院| 欧美亚洲国产一区二区三区| 日韩成人免费在线| 久久视频一区二区| 91欧美一区二区| 午夜精品久久久久久久久| 久久综合九色综合久久久精品综合| 国产成人亚洲综合色影视| 亚洲精品综合在线| 制服丝袜成人动漫| 国产精品自在欧美一区| 亚洲精品videosex极品| 日韩欧美一卡二卡| 成人黄动漫网站免费app| 亚洲sss视频在线视频| 国产亚洲成年网址在线观看| 欧美怡红院视频| 国产一区二区三区香蕉| 亚洲乱码国产乱码精品精可以看 | 在线免费一区三区| 久久精品国产精品青草| 亚洲乱码中文字幕| 精品美女在线播放| 在线观看亚洲精品| 极品尤物av久久免费看| 亚洲久草在线视频| 久久天堂av综合合色蜜桃网| 欧美视频三区在线播放| 国产福利91精品一区二区三区| 一区二区欧美视频| 久久久久久久久久久久久久久99 | 成人黄色一级视频| 日本中文字幕一区二区有限公司| 国产精品久久久久婷婷二区次| 欧美一区二区三区在| 成人国产精品免费观看| 麻豆一区二区99久久久久| 亚洲另类春色国产| 国产日产欧美一区二区视频| 欧美高清www午色夜在线视频| www.成人在线| 国产一区亚洲一区| 天堂成人国产精品一区| 亚洲天堂av一区| 久久久综合九色合综国产精品| 欧美午夜不卡在线观看免费| 成人国产精品免费网站| 国模娜娜一区二区三区| 午夜精品成人在线视频| 亚洲另类在线视频| 亚洲国产高清在线| 精品国产乱码久久久久久闺蜜| 欧美在线高清视频| av男人天堂一区| 国产精品夜夜嗨| 免费成人性网站| 亚洲高清视频在线| 亚洲视频 欧洲视频| 欧美激情一区二区三区蜜桃视频| 日韩一卡二卡三卡四卡| 欧美调教femdomvk| 91免费在线看| 99re视频这里只有精品| 国产精品99久久久| 精久久久久久久久久久| 日韩电影在线观看电影| 亚洲一区二区视频在线观看| 亚洲猫色日本管| 国产精品进线69影院| 国产欧美日韩综合精品一区二区| 欧美成人精品二区三区99精品| 欧美三级蜜桃2在线观看| 91激情五月电影| 色噜噜偷拍精品综合在线| 91小视频在线免费看| av一区二区三区在线| 国产成人一区在线| 国产成人在线免费观看| 粉嫩欧美一区二区三区高清影视 | 美腿丝袜亚洲色图| 日韩电影免费在线| 青青草国产精品97视觉盛宴| 午夜欧美在线一二页| 亚洲va欧美va人人爽| 丝袜美腿一区二区三区| 日韩二区在线观看| 奇米精品一区二区三区四区| 日本系列欧美系列| 久久99精品国产| 国产一区二区三区在线观看免费| 极品少妇xxxx偷拍精品少妇| 精品一区二区三区免费| 国内成人免费视频| 国产成人夜色高潮福利影视| 成人h动漫精品一区二区| youjizz国产精品| 91一区二区三区在线播放| 91在线观看视频| 日本韩国一区二区三区| 欧美日韩色一区| 欧美一区二区三区免费观看视频 | 91蜜桃视频在线| 91搞黄在线观看| 欧美肥胖老妇做爰| 日韩你懂的在线播放| 久久午夜羞羞影院免费观看| 国产精品免费视频观看| 亚洲视频1区2区| 亚洲福利一区二区三区| 蜜臀va亚洲va欧美va天堂| 国产一区二区福利视频| 成人动漫一区二区在线| 在线看国产日韩| 欧美岛国在线观看| 国产精品视频一区二区三区不卡| 亚洲视频电影在线| 三级久久三级久久久| 国产一区二区三区美女| 9人人澡人人爽人人精品| 欧美视频一区二区在线观看| 日韩一级高清毛片| 国产精品亲子伦对白| 亚洲一区二区视频在线| 韩国av一区二区三区在线观看| 成人免费看的视频| 91久久国产综合久久| 精品福利一区二区三区免费视频| 国产精品久久午夜| 天天综合天天做天天综合| 国产麻豆9l精品三级站| 91福利在线导航|