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

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

?? usb_utils.c

?? c8051f340 usb開發(fā)程序指南
?? C
字號:
/*
   Copyright 2003 Cygnal Integrated Products, Inc.
   File:     usb_utils.c
   Author:   JS
   Created:  JAN 03
   Modified: SEP 03 -- FB (FIFORead() - disabled auto read before last byte.)

   Target Device: C8051F320

   Source file for USB firmware. Includes the following support routines:
   - HaltEndpoint()
   - EnableEndpoint()
   - GetEpStatus()
   - SetConfiguration()
   - SetInterface()
   - FIFOWrite()
   - FIFORead()

******************************************/


#include "c8051F320.h"
#include "usb_regs.h"
#include "usb_structs.h"
#include "usb_main.h"
#include "usb_desc.h"#include "usb_config.h"
#include "usb_request.h"

extern DEVICE_STATUS gDeviceStatus;
extern code DESCRIPTORS gDescriptorMap;
extern DEVICE_STATUS gDeviceStatus;
extern EP_STATUS gEp0Status;
extern EP_STATUS gEp2OutStatus;
extern EP_STATUS gEp1InStatus;

//---------------------------
// HaltEndpoint()
//---------------------------
//
BYTE HaltEndpoint (UINT uEp)
{
   BYTE bReturnState, bIndex;

   // Save current INDEX value and target selected endpoint
   UREAD_BYTE (INDEX, bIndex);
   UWRITE_BYTE (INDEX, (BYTE)uEp & 0x00EF);

   // Halt selected endpoint and update its status flag
   switch (uEp)
   {
      case EP1_IN:
         UWRITE_BYTE (EINCSRL, rbInSDSTL);
         gEp1InStatus.bEpState = EP_HALTED;
         bReturnState = EP_IDLE;          // Return success flag
         break;
      case EP2_OUT:
         UWRITE_BYTE (EOUTCSRL, rbOutSDSTL);
         gEp2OutStatus.bEpState = EP_HALTED;
         bReturnState = EP_IDLE;          // Return success flag
         break;
      default:
         bReturnState = EP_ERROR;         // Return error flag
                                          // if endpoint not found
         break;
   }

   UWRITE_BYTE (INDEX, bIndex);           // Restore saved INDEX
   return bReturnState;
}

//---------------------------
// EnableEndpoint()
//---------------------------
//
BYTE EnableEndpoint (UINT uEp)
{
   BYTE bReturnState, bIndex;

   // Save current INDEX value and target selected endpoint
   UREAD_BYTE (INDEX, bIndex);
   UWRITE_BYTE (INDEX, (BYTE)uEp & 0x00EF);

   // Flag selected endpoint has HALTED
   switch (uEp)
   {
      case EP1_IN:
         // Disable STALL condition and clear the data toggle
         UWRITE_BYTE (EINCSRL, rbInCLRDT);
         gEp1InStatus.bEpState = EP_IDLE; // Return success
         bReturnState = EP_IDLE;
         break;
      case EP2_OUT:
         // Disable STALL condition and clear the data toggle
         UWRITE_BYTE (EOUTCSRL, rbOutCLRDT);
         gEp2OutStatus.bEpState = EP_IDLE;// Return success
         bReturnState = EP_IDLE;
         break;
      default:
         bReturnState = EP_ERROR;         // Return error
                                          // if no endpoint found
         break;
   }

   UWRITE_BYTE (INDEX, bIndex);           // Restore INDEX

   return bReturnState;
}

//---------------------------
// GetEpStatus()
//---------------------------
//
BYTE GetEpStatus (UINT uEp)
{
   BYTE bReturnState;

   // Get selected endpoint status
   switch (uEp)
   {
      case EP1_IN:
         bReturnState = gEp1InStatus.bEpState;
         break;
      case EP2_OUT:
         bReturnState = gEp2OutStatus.bEpState;
         break;
      default:
         bReturnState = EP_ERROR;
         break;
   }

   return bReturnState;
}

//---------------------------
// SetConfiguration()
//---------------------------
//
//
BYTE SetConfiguration(BYTE SelectConfig)
{
   BYTE bReturnState = EP_IDLE;           // Endpoint state return value

   PIF_STATUS pIfStatus;                  // Pointer to interface status
                                          // structure

   // Store address of selected config desc
   gDeviceStatus.pConfig = &gDescriptorMap.bCfg1;

   // Confirm that this configuration descriptor matches the requested
   // configuration value
   if (gDeviceStatus.pConfig[cfg_bConfigurationValue] != SelectConfig)
   {
      bReturnState = EP_ERROR;
   }

   else
   {
      // Store number of interfaces for this configuration
      gDeviceStatus.bNumInterf = gDeviceStatus.pConfig[cfg_bNumInterfaces];

      // Store total number of interface descriptors for this configuration
      gDeviceStatus.bTotalInterfDsc = MAX_IF;

      // Get pointer to the interface status structure
      pIfStatus = (PIF_STATUS)&gDeviceStatus.IfStatus[0];

      // Build Interface status structure for Interface0
      pIfStatus->bIfNumber = 0;           // Set interface number
      pIfStatus->bCurrentAlt = 0;         // Select alternate number zero
      pIfStatus->bNumAlts = 0;            // No other alternates

      SetInterface(pIfStatus);            // Configure Interface0, Alternate0

      gDeviceStatus.bDevState = DEV_CONFIG;// Set device state to configured
      gDeviceStatus.bCurrentConfig = SelectConfig;// Store current config
   }

   return bReturnState;
}

//---------------------------
// SetInterface()
//---------------------------
// Configure endpoints for the selected interface
//BYTE SetInterface(PIF_STATUS pIfStatus)
{
   BYTE bReturnState = EP_IDLE;
   BYTE bIndex;

   // Save current INDEX value
   UREAD_BYTE (INDEX, bIndex);

   // Add actions for each possible interface alternate selections
   switch(pIfStatus->bIfNumber)
   {
      // Configure endpoints for interface0
      case 0:
         // Configure Endpoint1 IN
         UWRITE_BYTE(INDEX, 1);           // Index to Endpoint1 registers
         UWRITE_BYTE(EINCSRH, 0x20);      // FIFO split disabled,
                                          // direction = OUT
         UWRITE_BYTE(EOUTCSRH, 0);        // Double-buffering disabled
         gEp1InStatus.uNumBytes = 0;      // Reset byte counter
         gEp1InStatus.uMaxP = EP1_IN_MAXP;// Set maximum packet size
         gEp1InStatus.bEp = EP1_IN;       // Set endpoint address
         gEp1InStatus.bEpState = EP_IDLE; // Set endpoint state

         // Endpoint2 OUT
         UWRITE_BYTE(INDEX, 2);           // Index to Endpoint2 registers
         UWRITE_BYTE(EINCSRH, 0x04);      // FIFO split enabled,
                                          // direction = OUT
         gEp2OutStatus.uNumBytes = 0;     // Reset byte counter
         gEp2OutStatus.uMaxP = EP2_OUT_MAXP;// Set maximum packet size
         gEp2OutStatus.bEp = EP2_OUT;     // Set endpoint number
         gEp2OutStatus.bEpState = EP_IDLE;// Set endpoint state

         // Load first outgoing (IN) packet into FIFO
         BulkOrInterruptIn(&gEp1InStatus);

         UWRITE_BYTE(INDEX, 0);           // Return to index 0

         break;

      // Configure endpoints for interface1
      case 1:

      // Configure endpoints for interface2
      case 2:

      // Default (error)
      default:
         bReturnState = EP_ERROR;
   }
   UWRITE_BYTE (INDEX, bIndex);           // Restore INDEX

   return bReturnState;
}

//---------------------------//  FIFO Read//---------------------------//// Read from the selected endpoint FIFO
//
// Inputs:
// bEp: target endpoint
// uNumBytes: number of bytes to unload
// pData: read data destination
//
void FIFORead (BYTE bEp, UINT uNumBytes, BYTE * pData){   BYTE TargetReg;
   UINT i;   // If >0 bytes requested,
   if (uNumBytes)
   {
      TargetReg = FIFO_EP0 + bEp;         // Find address for target
                                          // endpoint FIFO

      USB0ADR = (TargetReg & 0x3F);       // Set address (mask out bits7-6)
      USB0ADR |= 0xC0;                    // Set auto-read and initiate
                                          // first read

      // Unload <NumBytes - 1> from the selected FIFO
      for(i=0; i<(uNumBytes-1); i++)
      {
         while(USB0ADR & 0x80);           // Wait for BUSY->'0' (data ready)
         pData[i] = USB0DAT;              // Copy data byte
      }
      
      // Disable auto read and copy last byte
      USB0ADR = (TargetReg & 0x3F);       // Set address (mask out bits7-6)
      while(USB0ADR & 0x80);              // Wait for BUSY->'0' (data ready)
      pData[i] = USB0DAT;                 // Copy final data byte
   }}//---------------------------//  FIFO Write//---------------------------//// Write to the selected endpoint FIFO
//
// Inputs:
// bEp: target endpoint
// uNumBytes: number of bytes to write
// pData: location of source data
//void FIFOWrite (BYTE bEp, UINT uNumBytes, BYTE * pData)
{
   BYTE TargetReg;
   UINT i;

   // If >0 bytes requested,
   if (uNumBytes)
   {
      TargetReg = FIFO_EP0 + bEp;         // Find address for target
                                          // endpoint FIFO

      while(USB0ADR & 0x80);              // Wait for BUSY->'0'
                                          // (register available)
      USB0ADR = (TargetReg & 0x3F);       // Set address (mask out bits7-6)

      // Write <NumBytes> to the selected FIFO
      for(i=0;i<uNumBytes;i++)
      {
         USB0DAT = pData[i];
         while(USB0ADR & 0x80);           // Wait for BUSY->'0' (data ready)
      }
   }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品一区二区三区影院| 欧美一区二区三级| 理论片日本一区| 久久久久久99久久久精品网站| 丁香啪啪综合成人亚洲小说| 亚洲成人一区二区| 2022国产精品视频| 欧美日韩aaa| 成人蜜臀av电影| 国产精品第一页第二页第三页| 欧美日韩国产小视频| 国内精品不卡在线| 日韩电影在线免费观看| 国产精品网站在线播放| 日韩视频在线永久播放| 99re8在线精品视频免费播放| 椎名由奈av一区二区三区| 欧美岛国在线观看| 在线观看日韩精品| 99久久伊人精品| 免费久久99精品国产| 成人综合在线视频| 青青草97国产精品免费观看无弹窗版| www久久精品| 日韩色视频在线观看| 色八戒一区二区三区| www.av亚洲| 国产一区二区成人久久免费影院| 日韩国产在线一| 一区二区三区精密机械公司| 日韩一区二区三区四区 | 夜夜精品浪潮av一区二区三区| 欧美变态凌虐bdsm| 欧美一卡二卡在线| 91行情网站电视在线观看高清版| 国产精品一区二区在线播放| 午夜精品免费在线| 亚洲精品久久7777| 欧美国产视频在线| 精品日韩在线一区| 8x福利精品第一导航| 欧美伦理电影网| 在线看不卡av| 欧美性猛交xxxxxxxx| 99久久久国产精品| 久久精品国产久精国产| 免费成人美女在线观看.| 首页综合国产亚洲丝袜| 亚洲一区在线视频观看| 午夜欧美电影在线观看| 一区二区三区欧美日| 国产精品热久久久久夜色精品三区 | 91在线观看地址| 91免费观看在线| 99精品国产91久久久久久| 91美女片黄在线| 91一区二区三区在线观看| 在线一区二区三区做爰视频网站| 91片黄在线观看| 欧美日韩视频专区在线播放| 欧美一a一片一级一片| 国产网站一区二区三区| 亚洲视频一二区| 国产精品成人一区二区艾草| 亚洲在线成人精品| 亚洲激情六月丁香| 日韩高清在线观看| 免费成人小视频| www.av精品| 色8久久精品久久久久久蜜| 99久久国产综合精品色伊| 91在线观看美女| 在线视频你懂得一区| 欧美二区乱c少妇| 欧美高清性hdvideosex| 久久亚洲欧美国产精品乐播| 久久久99精品免费观看不卡| 精品成人a区在线观看| 国产欧美一区二区三区鸳鸯浴| 国产日产欧产精品推荐色| 国产精品久久99| 一卡二卡欧美日韩| 国产在线一区观看| 91香蕉视频污| 欧美精品一区二区三区久久久 | 欧美电影免费观看高清完整版| 国产欧美日韩三区| 日韩一区欧美小说| 麻豆国产欧美日韩综合精品二区| 国产高清视频一区| 欧美日韩精品电影| 精品处破学生在线二十三| 亚洲自拍偷拍av| 九色综合国产一区二区三区| 色综合色综合色综合色综合色综合| 欧美三级三级三级爽爽爽| 欧美日韩三级视频| 国产精品日产欧美久久久久| 一区二区三区在线观看视频| 国产美女在线精品| 色哟哟国产精品| 国产偷v国产偷v亚洲高清| 一区二区三区**美女毛片| 懂色av中文一区二区三区| 欧美日韩亚洲综合在线 | 国产精品不卡在线| 午夜电影网一区| 99久久精品国产精品久久| 91精品国产色综合久久不卡蜜臀| 自拍偷拍亚洲综合| 黄页网站大全一区二区| 欧美日本在线观看| 国产精品女同一区二区三区| 国模冰冰炮一区二区| 国产v综合v亚洲欧| 在线精品视频免费观看| 中文字幕一区二区三区视频| 丝袜美腿一区二区三区| 在线亚洲+欧美+日本专区| 婷婷成人综合网| 在线看不卡av| 国产精品久久久久aaaa樱花| 国产一区二区免费在线| 在线播放国产精品二区一二区四区 | 久久久久久久综合色一本| 日韩二区在线观看| 在线观看免费一区| 久久久久久**毛片大全| 蜜乳av一区二区| 99久久99久久综合| 国产精品传媒在线| 国产一区二区在线观看视频| 日韩欧美一级特黄在线播放| 亚洲永久精品国产| 欧美丝袜自拍制服另类| 中文在线一区二区| 成人动漫一区二区| 久久久久成人黄色影片| 国产91综合网| 精品粉嫩超白一线天av| 国产一区二区三区在线观看免费 | 91丨porny丨国产| 国产欧美久久久精品影院| 岛国精品一区二区| 久久综合狠狠综合| 国产精品影视在线观看| 欧美sm美女调教| 久久www免费人成看片高清| 777欧美精品| 国产精品三级av| 色婷婷综合激情| 国产精品视频第一区| 97精品视频在线观看自产线路二| 日韩欧美中文字幕精品| 国产一区二区福利| 美女视频网站久久| 久久久久久9999| 国产成人免费在线视频| 中文字幕一区二区三区色视频| 国产成人精品一区二区三区四区| 国产精品久久久久三级| a级精品国产片在线观看| 一区二区三国产精华液| 欧美三级一区二区| 韩国女主播成人在线观看| 精品成人一区二区三区四区| 不卡一区二区在线| 亚洲三级免费电影| 欧美一区二视频| 国产一二精品视频| 亚洲天堂网中文字| 99久久婷婷国产综合精品| 亚洲sss视频在线视频| 欧美午夜精品免费| 国产自产高清不卡| 欧美电影影音先锋| 成人永久aaa| 亚洲国产精品成人久久综合一区| 99久久精品国产导航| 自拍偷拍亚洲综合| 日韩欧美一级二级三级| 韩国女主播成人在线| 亚洲制服丝袜在线| 欧美美女网站色| 高清shemale亚洲人妖| 中文字幕一区在线观看视频| 91精品国产色综合久久久蜜香臀| 免费人成精品欧美精品| 成人免费在线播放视频| 欧美视频自拍偷拍| 大胆欧美人体老妇| 国产精品国产三级国产普通话蜜臀| 欧美电影在线免费观看| 久久精品国产亚洲aⅴ| 一区二区三区在线播| 欧美一区二区三区四区视频| 欧美草草影院在线视频| aaa欧美色吧激情视频| 日韩成人一级片| 国产精品国产三级国产三级人妇|