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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mainloopb.c

?? 用D12實(shí)現(xiàn)U盤的單片機(jī)程序
?? C
?? 第 1 頁(yè) / 共 2 頁(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();

   Hal4Sys_InitD12();
   MLsup_ReconnectUSB();

  //Init IDE Harddisk
   Hal4ATA_FindIDEDevice();

	// 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_xdata += 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
			      }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合一二区| 亚洲mv在线观看| 久久蜜桃av一区二区天堂| 99视频精品全部免费在线| 国产一区二区三区免费在线观看| 日本一区中文字幕| 久久精品国产在热久久| 久久激情五月激情| 国内精品国产三级国产a久久| 国产在线视频精品一区| 国产成人夜色高潮福利影视| 成人自拍视频在线观看| 成人av在线网| 欧美zozozo| 国产精品久久久久久妇女6080| 2019国产精品| 国产目拍亚洲精品99久久精品| 国产女同互慰高潮91漫画| 欧美国产乱子伦| 综合电影一区二区三区 | 国产日韩亚洲欧美综合| 久久精品无码一区二区三区| 国产丝袜欧美中文另类| 亚洲免费三区一区二区| 亚洲成人av一区二区三区| 老司机免费视频一区二区三区| 国产激情一区二区三区| 99热精品一区二区| 欧美精品日韩精品| wwww国产精品欧美| 中文字幕亚洲视频| 亚洲第一av色| 国产精品小仙女| 91国偷自产一区二区三区观看| 4438亚洲最大| 国产精品青草综合久久久久99| 一区二区在线免费观看| 一本到不卡免费一区二区| 欧美亚洲高清一区| 日韩欧美国产成人一区二区| 国产欧美视频一区二区| 亚洲制服丝袜一区| 国产在线麻豆精品观看| 91女厕偷拍女厕偷拍高清| 欧美一区二区三区在线观看视频| 久久精品欧美日韩精品 | 蜜桃免费网站一区二区三区| 国产成人精品在线看| 欧美在线小视频| 久久先锋影音av| 一区二区免费看| 国产大陆a不卡| 欧美日韩国产免费一区二区| 亚洲1区2区3区视频| 国内精品视频666| 日本久久电影网| 久久精品免视看| 日本欧美久久久久免费播放网| 成人av在线资源网站| 日韩女优av电影| 亚洲在线成人精品| 床上的激情91.| 天天影视网天天综合色在线播放| 午夜精彩视频在线观看不卡| 国产一级精品在线| 欧美日韩久久久一区| 国产欧美日本一区二区三区| 午夜私人影院久久久久| 成人av小说网| 久久久久国色av免费看影院| 丝袜亚洲另类欧美综合| 91一区二区在线观看| 国产色爱av资源综合区| 日韩电影一二三区| 色吧成人激情小说| 欧美国产精品v| 激情欧美一区二区三区在线观看| 欧美三级在线视频| 亚洲品质自拍视频| 成人app网站| 欧美大片顶级少妇| 亚洲成人av一区二区| 色综合视频一区二区三区高清| 国产午夜精品久久久久久久| 免费在线观看成人| 欧美精品成人一区二区三区四区| 一区二区三区成人| 91在线视频播放| 国产精品免费观看视频| 国产精品自产自拍| 欧美精品一区二区高清在线观看 | 亚瑟在线精品视频| 91久久精品一区二区| 亚洲欧美日韩综合aⅴ视频| 成人va在线观看| 国产精品三级视频| 波多野结衣欧美| 亚洲欧美在线另类| 97精品久久久久中文字幕| 国产精品初高中害羞小美女文| 成人黄色网址在线观看| 国产精品乱人伦| 91亚洲精品一区二区乱码| 亚洲欧洲性图库| 色综合久久天天| 亚洲免费毛片网站| 欧美三级日韩三级国产三级| 午夜一区二区三区在线观看| 欧美日韩成人一区| 偷窥少妇高潮呻吟av久久免费| 欧美日韩免费一区二区三区视频| 亚洲愉拍自拍另类高清精品| 欧美性猛交一区二区三区精品| 亚洲高清免费一级二级三级| 欧美伦理电影网| 琪琪久久久久日韩精品| 精品少妇一区二区三区在线视频| 国产在线国偷精品免费看| 亚洲国产精品99久久久久久久久 | 91成人在线观看喷潮| 亚洲一区二区三区视频在线| 6080日韩午夜伦伦午夜伦| 日韩国产高清在线| 精品国产乱码久久久久久图片| 国产麻豆一精品一av一免费| 日本一区二区动态图| 91丝袜国产在线播放| 亚洲不卡一区二区三区| 日韩丝袜美女视频| 成人综合婷婷国产精品久久蜜臀| 亚洲男女一区二区三区| 欧美夫妻性生活| 国产精品99久久久久久久vr | 久久精品国产77777蜜臀| 国产清纯白嫩初高生在线观看91| 91在线观看免费视频| 日韩精品电影一区亚洲| 国产日韩成人精品| 在线亚洲一区观看| 久久99久久99| 国产精品久久一级| 欧美精品日韩综合在线| 国产成人精品一区二| 亚洲午夜国产一区99re久久| 精品国产一区二区三区不卡 | av一本久道久久综合久久鬼色| 亚洲高清在线精品| 久久久久国产精品麻豆ai换脸 | 精品奇米国产一区二区三区| voyeur盗摄精品| 蜜桃av噜噜一区| 亚洲欧美欧美一区二区三区| 欧美刺激脚交jootjob| 色综合久久综合中文综合网| 老司机精品视频导航| 亚洲精品大片www| 久久综合九色综合欧美亚洲| 在线亚洲高清视频| 国产91色综合久久免费分享| 亚洲成av人片在www色猫咪| 国产欧美日韩精品一区| 欧美一区二区在线免费观看| 色综合久久综合网97色综合 | 欧美一区二区国产| 91老师国产黑色丝袜在线| 精品亚洲porn| 亚洲成人黄色影院| 国产精品久久精品日日| 2024国产精品| 精品视频999| 99久久婷婷国产综合精品电影| 久久99精品国产.久久久久久| 亚洲午夜免费福利视频| 亚洲国产精华液网站w| 日韩女优电影在线观看| 精品视频在线免费| 91麻豆高清视频| 国产乱子伦视频一区二区三区| 天堂va蜜桃一区二区三区漫画版 | 91浏览器在线视频| 国产精品一区一区| 麻豆传媒一区二区三区| 亚洲成人激情综合网| 亚洲美女免费视频| 国产精品久久久久久户外露出| 久久久不卡影院| 精品国产成人系列| 欧美一级爆毛片| 欧美高清视频不卡网| 欧美视频一区在线| 日本高清不卡aⅴ免费网站| 一本一道久久a久久精品| 一本色道亚洲精品aⅴ| 国产一区二区三区不卡在线观看 | 国产精品女人毛片| 国产亲近乱来精品视频| 久久久久久久久久美女| 久久新电视剧免费观看| 精品日韩欧美在线| 欧美精品一区二区三区蜜臀|