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

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

?? mainloopb.c

?? 基于8051+D12優盤程序代碼,實現了usb 的通信
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
   //*************************************************************************
   //
   //                  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
			      }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产入口| 91麻豆免费在线观看| 亚洲精品国久久99热| 国产精品色在线观看| 欧美精品一区二区三区蜜臀| 欧美精品视频www在线观看| 在线免费精品视频| 色婷婷一区二区| 91偷拍与自偷拍精品| 99精品久久只有精品| eeuss鲁片一区二区三区| 国产成人精品一区二| 国产91对白在线观看九色| 国产一区二区三区国产| 国产乱子伦视频一区二区三区| 日韩电影免费在线| 精品伊人久久久久7777人| 精品亚洲porn| 成人av免费在线| 91啪在线观看| 欧美美女一区二区在线观看| 91麻豆精品国产91久久久| 欧美电视剧在线看免费| 欧美极品aⅴ影院| 亚洲私人黄色宅男| 日韩专区一卡二卡| 黄网站免费久久| 成人激情av网| 91精品国产手机| 久久久噜噜噜久久中文字幕色伊伊| 国产欧美日韩麻豆91| 亚洲黄网站在线观看| 日韩精品一级中文字幕精品视频免费观看 | 日韩欧美二区三区| 国产女同性恋一区二区| 亚洲尤物视频在线| 国产最新精品精品你懂的| 91视频在线观看| 日韩一区和二区| 国产精品对白交换视频| 日韩在线一区二区| 成人av资源网站| 精品久久99ma| 亚洲一线二线三线久久久| 精品一区二区久久久| 91精品91久久久中77777| 26uuu亚洲婷婷狠狠天堂| 亚洲精品免费一二三区| 久久99久久久欧美国产| 色伊人久久综合中文字幕| 亚洲精品一区二区三区香蕉| 一片黄亚洲嫩模| 岛国一区二区三区| 日韩欧美亚洲一区二区| 亚洲人123区| 国产永久精品大片wwwapp| 欧美一级夜夜爽| 亚洲sss视频在线视频| 99热在这里有精品免费| 久久久精品综合| 国产美女一区二区三区| 91精品国产综合久久久久 | 91福利视频在线| 中文幕一区二区三区久久蜜桃| 精品一区二区免费在线观看| 欧美性受xxxx| 亚洲一二三四久久| 一本一本久久a久久精品综合麻豆| 精品99999| 精品亚洲免费视频| 精品国产伦一区二区三区观看方式 | 国产不卡一区视频| 欧美电影精品一区二区| 日韩福利视频导航| 色爱区综合激月婷婷| 日本一区二区三区四区| 美女视频黄频大全不卡视频在线播放| 97se亚洲国产综合自在线不卡 | 国产尤物一区二区| 欧美一区二区美女| 中文字幕日韩精品一区| 91一区二区在线| 中文字幕一区不卡| 国产高清在线精品| 国产情人综合久久777777| 捆绑变态av一区二区三区| 欧美肥妇free| 日韩成人dvd| 欧美电影精品一区二区| 麻豆精品久久精品色综合| 欧美日韩中文字幕一区二区| 亚洲男人的天堂在线aⅴ视频| 成人在线一区二区三区| 久久精品日产第一区二区三区高清版 | 69精品人人人人| 日韩国产精品久久| 欧美一区二区三区精品| 捆绑紧缚一区二区三区视频| 欧美tk—视频vk| 国产美女在线观看一区| 国产日产亚洲精品系列| av激情综合网| 午夜精品久久久久久不卡8050| 欧美日韩精品一区视频| 水蜜桃久久夜色精品一区的特点| 欧美酷刑日本凌虐凌虐| 亚洲成av人片一区二区三区| 欧美高清dvd| 国产精品综合一区二区三区| 国产亚洲一区二区三区四区 | 欧美一区二区三区视频| 激情综合网激情| 国产精品久久三区| 欧美三电影在线| 韩国成人在线视频| 中文成人综合网| 精品美女一区二区三区| 99精品久久只有精品| 日本中文字幕一区二区有限公司| 精品国产一区二区三区av性色| 国产精品1区2区| 亚洲成人激情社区| 久久美女高清视频| 4438成人网| 成人免费看视频| 日韩国产一区二| 中文字幕一区二区三中文字幕| 欧美日韩国产一区| 福利91精品一区二区三区| 亚洲免费观看视频| 国产日韩精品一区二区三区| 欧美系列亚洲系列| 成人午夜伦理影院| 日本特黄久久久高潮| 国产欧美日韩精品a在线观看| 欧美日韩一区小说| 久久99精品久久久久婷婷| 夜夜爽夜夜爽精品视频| 国产午夜久久久久| 69av一区二区三区| 在线日韩av片| 94-欧美-setu| 9人人澡人人爽人人精品| 久久黄色级2电影| 亚洲成a人v欧美综合天堂| 一区二区中文视频| 久久影院午夜片一区| 欧美一级在线视频| 懂色av一区二区三区蜜臀| 国产一级精品在线| 久久99精品久久久久久国产越南| 亚洲自拍欧美精品| 亚洲视频你懂的| 中文字幕不卡在线播放| 国产精品水嫩水嫩| 久久综合九色综合久久久精品综合| 欧美系列亚洲系列| 欧美视频在线观看一区二区| 色综合一区二区| 成人国产亚洲欧美成人综合网| 国产精品高潮久久久久无| 专区另类欧美日韩| 国产精品久久久久永久免费观看| 欧美一卡2卡3卡4卡| 欧美一区二区三区白人| 欧美日韩视频在线观看一区二区三区 | 久久日一线二线三线suv| 欧美一区二区精品久久911| 91福利视频久久久久| 欧美日本一区二区| 欧美一区二区三区日韩视频| 欧美二区乱c少妇| 日韩一区二区电影在线| 欧美一级电影网站| 日韩精品综合一本久道在线视频| 久久综合九色综合欧美就去吻| 久久久午夜电影| 国产精品九色蝌蚪自拍| 亚洲免费高清视频在线| 亚洲自拍偷拍欧美| 日本网站在线观看一区二区三区| 国产精品888| 日本久久一区二区三区| 欧美美女一区二区在线观看| 欧美一级一区二区| 久久久久国色av免费看影院| 精品日韩av一区二区| 综合av第一页| 午夜精品福利视频网站| 经典三级一区二区| eeuss鲁一区二区三区| 精品视频在线免费观看| 日韩亚洲欧美中文三级| 国产精品女主播av| 亚洲不卡一区二区三区| 国产精品一区二区视频| 99久久99久久久精品齐齐| 欧美日韩中文字幕一区| 精品久久一区二区三区| 一区二区三区免费|