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

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

?? usb_main.c

?? cp2102 官方usb開發包
?? C
字號:
// File best viewed using Tab Size of 4 Characters
// Author DM   DATE  4-4-03
// Modified CS DATE  8-25-03
// Modified PKC DATE 1-24-06 (changed 'F320.h to 'F340.h)
// Modified PKC DATE 10-11-06 (changed USBXpress API interrupt to 17)
// This example illustrates usage of the USB_API.lib
// DO NOT locate code segments at 0x1400 to 0x4000
// These are used for non-voltile storage for transmitted data.

// Include files
#include <c8051f340.h>     // Header file for SiLabs c8051f34x
#include <stddef.h>        // Used for NULL pointer definition
#include "USB_API.h"    // Header file for USB_API.lib

// Bit Definitions
sbit  Led1  =  P2^2; // LED='1' means ON
sbit  Led2  =  P2^3; // These blink to indicate data transmission

// Constants Definitions
#define  NUM_STG_PAGES  20 // Total number of flash pages to be used for file storage
#define MAX_BLOCK_SIZE_READ   64 // Use the maximum read block size of 64 bytes

#define MAX_BLOCK_SIZE_WRITE 4096   // Use the maximum write block size of 4096 bytes
#define  FLASH_PAGE_SIZE   512           //  Size of each flash page
#define  BLOCKS_PR_PAGE FLASH_PAGE_SIZE/MAX_BLOCK_SIZE_READ  // 512/64 = 8
#define MAX_NUM_BYTES   FLASH_PAGE_SIZE*NUM_STG_PAGES
#define MAX_NUM_BLOCKS  BLOCKS_PR_PAGE*NUM_STG_PAGES



// Message Types
#define  READ_MSG 0x00  // Message types for communication with host
#define  WRITE_MSG   0x01
#define  SIZE_MSG 0x02
#define DELAYED_READ_MSG   0x05

// Machine States
#define  ST_WAIT_DEV 0x01  // Wait for application to open a device instance
#define  ST_IDLE_DEV 0x02  // Device is open, wait for Setup Message from host
#define  ST_RX_SETUP 0x04  // Received Setup Message, decode and wait for data
#define  ST_RX_FILE  0x08  // Receive file data from host
#define  ST_TX_FILE  0x10  // Transmit file data to host
#define  ST_TX_ACK   0x20  // Transmit ACK 0xFF back to host after every 8 packets
#define  ST_ERROR 0x80  // Error state

// No such thing as a block of data anymore since it is variable between 1 and 1024
// So comment this out
typedef struct {        // Structure definition of a block of data
   BYTE  Piece[MAX_BLOCK_SIZE_READ];
}  BLOCK;

typedef struct {        // Structure definition of a flash memory page
   BYTE  FlashPage[FLASH_PAGE_SIZE];
}  PAGE;

xdata BLOCK TempStorage[BLOCKS_PR_PAGE];  // Temporary storage of between flash writes

//data   BYTE code * PageIndices[20]   =  {0x1400,0x1600,0x1800,0x1A00,0x1C00,0x1E00,0x2000,0x2200,0x2400,0x2600
//                         ,0x2800,0x2A00,0x2C00,0x2E00,0x3000,0x3200,0x3400,0x3600,0x3800,0x3A00};
data  BYTE code * PageIndices[20]   =  {0x2200,0x2400,0x2600,0x2800,0x2A00,0x2C00,0x2E00,0x3000,0x3200,0x3400
                           ,0x3600,0x3800,0x3A00,0x3C00,0x3E00,0x4000,0x4200,0x4400,0x4600};

data  UINT  BytesToRead;   // Total number of bytes to read from host
data  UINT  WriteStageLength; // Current write transfer stage length
data  UINT  ReadStageLength; //  Current read transfer stage length
data  BYTE  Buffer[3];     // Buffer for Setup messages
data  UINT  NumBytes;      // Number of Blocks for this transfer
data  BYTE  NumBlocks;
data  UINT  BytesRead;     // Number of Bytes Read
data  BYTE  M_State;    // Current Machine State
data  UINT  BytesWrote;    // Number of Bytes Written
data  BYTE  BlockIndex;    // Index of Current Block in Page
data  BYTE  PageIndex;     // Index of Current Page in File
data  BYTE  BlocksWrote;   // Total Number of Blocks Written
data  BYTE* ReadIndex;
data  UINT  BytesToWrite;

/*** [BEGIN] USB Descriptor Information [BEGIN] ***/
code const UINT USB_VID = 0x10C4;
code const UINT USB_PID = 0xEA61;
code const BYTE USB_MfrStr[] = {0x1A,0x03,'S',0,'i',0,'l',0,'i',0,'c',0,'o',0,'n',0,' ',0,'L',0,'a',0,'b',0,'s',0};                       // Manufacturer String
code const BYTE USB_ProductStr[] = {0x10,0x03,'U',0,'S',0,'B',0,' ',0,'A',0,'P',0,'I',0}; // Product Desc. String
code const BYTE USB_SerialStr[] = {0x0A,0x03,'1',0,'2',0,'3',0,'4',0};
code const BYTE USB_MaxPower = 15;            // Max current = 30 mA (15 * 2)
code const BYTE USB_PwAttributes = 0x80;      // Bus-powered, remote wakeup not supported
code const UINT USB_bcdDevice = 0x0100;       // Device release number 1.00
/*** [ END ] USB Descriptor Information [ END ] ***/

code    BYTE   LengthFile[3]  _at_  0x2000;
   // {Length(Low Byte), Length(High Byte), Number of Blocks}

void  Port_Init(void);        // Initialize Ports Pins and Enable Crossbar
void  State_Machine(void);    // Determine new state and act on current state
void  Receive_Setup(void);    // Receive and decode setup packet from host
void  Receive_File(void);        // Receive file data from host
//void   Suspend_Device(void);      //  Place the device in suspend mode
void  Page_Erase(BYTE*) small;   // Erase a flash page
void  Page_Write(BYTE*) small;   // Write a flash page



//-----------------------------------------------------------------------------
// Main Routine
//-----------------------------------------------------------------------------
void main(void)
{
   PCA0MD &= ~0x40;              // Disable Watchdog timer

   USB_Clock_Start();                     // Init USB clock *before* calling USB_Init
   USB_Init(USB_VID,USB_PID,USB_MfrStr,USB_ProductStr,USB_SerialStr,USB_MaxPower,USB_PwAttributes,USB_bcdDevice);

   CLKSEL |= 0x02;


   RSTSRC   |= 0x02;

   Port_Init();                  // Initialize crossbar and GPIO

   USB_Int_Enable();             // Enable USB_API Interrupts
      while (1);
}

void  Port_Init(void)
{
   P2MDOUT  |= 0x0C;             // Port 2 pins 0,1 set high impedence
   XBR0  =  0x00;
   XBR1  =  0x40;                // Enable Crossbar
}

void  Page_Erase(BYTE*  Page_Address)  small
{
   BYTE  EA_Save;             // Used to save state of global interrupt enable
   BYTE  xdata *pwrite;       // xdata pointer used to generate movx intruction

   EA_Save  =  EA;                  // Save current EA
   EA =  0;                   // Turn off interrupts
   pwrite   =  (BYTE xdata *)(Page_Address); // Set write pointer to Page_Address
   PSCTL =  0x03;             // Enable flash erase and writes

   FLKEY =  0xA5;             // Write flash key sequence to FLKEY
   FLKEY =  0xF1;
   *pwrite  =  0x00;             // Erase flash page using a write command

   PSCTL =  0x00;             // Disable flash erase and writes
   EA =  EA_Save;             // Restore state of EA
}

void  Page_Write(BYTE*  PageAddress)   small
{
   BYTE  EA_Save;             // Used to save state of global interrupt enable
   BYTE  xdata *pwrite;       // Write Pointer
   BYTE  xdata *pread;           // Read Pointer
   UINT  x;                   // Counter for 0-512 bytes

   pread =  (BYTE xdata *)(TempStorage);
   EA_Save  =  EA;                  // Save EA
   EA =  0;                   // Turn off interrupts
   pwrite   =  (BYTE xdata *)(PageAddress);
   PSCTL =  0x01;             // Enable flash writes
   for(x = 0;  x<FLASH_PAGE_SIZE;   x++)//   Write 512 bytes
   {
      FLKEY =  0xA5;          // Write flash key sequence
      FLKEY =  0xF1;
      *pwrite  =  *pread;           // Write data byte to flash

      pread++;                // Increment pointers
      pwrite++;
   }
   PSCTL =  0x00;             // Disable flash writes
   EA =  EA_Save;             // Restore EA
}

void  State_Machine(void)
{
   switch   (M_State)
   {
      case  ST_RX_SETUP:
         Receive_Setup();        // Receive and decode host Setup Message
         break;
      case  ST_RX_FILE:
         Receive_File();            // Receive File data from host
         break;
      case  ST_TX_ACK:
         M_State =   ST_RX_FILE;    // Ack Transmit complete, continue RX data
         break;
      case  ST_TX_FILE:          // Send file data to host
         WriteStageLength = ((BytesToWrite - BytesWrote) > MAX_BLOCK_SIZE_WRITE)? MAX_BLOCK_SIZE_WRITE:(BytesToWrite - BytesWrote);
         BytesWrote  += Block_Write((BYTE*)(ReadIndex), WriteStageLength);
         ReadIndex += WriteStageLength;

         if ((BlocksWrote%8) == 0)  Led2 = ~Led2;
         if (BytesWrote == NumBytes)   Led2 = 0;
         break;
      default:
         break;
   }
}


   // ISR for USB_API, run when API interrupts are enabled, and an interrupt is received
void  USB_API_TEST_ISR(void)  interrupt   17
{
   BYTE  INTVAL   =  Get_Interrupt_Source(); // Determine type of API interrupts
   if (INTVAL  &  USB_RESET)              // Bus Reset Event, go to Wait State
   {
      M_State  =  ST_WAIT_DEV;
   }

   if (INTVAL  &  DEVICE_OPEN)            // Device opened on host, go to Idle
   {
      M_State  =  ST_IDLE_DEV;
   }

   if (INTVAL  &  TX_COMPLETE)
   {
      if (M_State == ST_RX_FILE)          // Ack Transmit complete, go to RX state
      {
         M_State  =  (ST_TX_ACK);
      }
      if (M_State == ST_TX_FILE)          // File block transmit complete, go to TX state
      {
         M_State  =  (BytesWrote == BytesToWrite) ? ST_IDLE_DEV :ST_TX_FILE;  // Go to Idle when done
      }
   }
   if (INTVAL  &  RX_COMPLETE)            // RX Complete, go to RX Setup or RX file state
   {
      M_State  =  (M_State == ST_IDLE_DEV) ? ST_RX_SETUP : ST_RX_FILE;
   }
   if (INTVAL  &  DEVICE_CLOSE)           // Device closed, wait for re-open
   {
      M_State  =  ST_WAIT_DEV;
   }
   if (INTVAL  &  FIFO_PURGE)             // Fifo purged, go to Idle State
   {
      M_State  =  ST_IDLE_DEV;
   }

   State_Machine();                    // Call state machine routine
}

void  Receive_Setup(void)
{
   BytesRead   =  Block_Read(&Buffer,  3);      // Read Setup Message

   if (Buffer[0]  == READ_MSG)            // Check See if Read File Setup
   {
      PageIndex   =  0;                // Reset Index
      NumBlocks   =  LengthFile[2];       // Read NumBlocks from flash stg
      NumBlocks   = (NumBlocks > MAX_NUM_BLOCKS)?  MAX_NUM_BLOCKS:   NumBlocks; // only write as many bytes
                                    // as we have space available
      Buffer[0]   =  SIZE_MSG;            // Send host size of transfer message
      Buffer[1]   =  LengthFile[1];
      Buffer[2]   =  LengthFile[0];
      BytesToWrite   =  Buffer[1]   +  256*Buffer[2];
      BytesWrote  =  Block_Write((BYTE*)&Buffer,   3);
      M_State  =  ST_TX_FILE;             // Go to TX data state
      BytesWrote  =  0;
      ReadIndex   =  PageIndices[0];
      Led2  =  1;
   }
   else  // Otherwise assume Write Setup Packet
   {
      BytesToRead =  Buffer[1]   +  256*Buffer[2];
      NumBlocks   =  (BYTE)(BytesToRead/MAX_BLOCK_SIZE_READ);  // Find NumBlocks

      if (BytesToRead > MAX_NUM_BYTES)                // State Error if transfer too big
      {
         M_State = ST_ERROR;
      }
      else
      {

         if (BytesToRead%MAX_BLOCK_SIZE_READ)   NumBlocks++;   // Increment NumBlocks for last partial block

         TempStorage->Piece[0]   =  Buffer[2];
         TempStorage->Piece[1]   =  Buffer[1];
         TempStorage->Piece[2]   =  NumBlocks;

         // Write Values to Flash
         Page_Erase(0x2000);                       // Store file data to flash
         Page_Write(0x2000);

         PageIndex   =  0;                         // Reset Index
         BlockIndex  =  0;
         BytesRead   =  0;
         Led1  =  1;
         M_State = ST_RX_FILE;                        // Go to RX data state
      }
   }
}

void  Receive_File(void)
{
   ReadStageLength = ((BytesToRead - BytesRead) > MAX_BLOCK_SIZE_READ)? MAX_BLOCK_SIZE_READ:(BytesToRead - BytesRead);

   BytesRead   += Block_Read((BYTE*)(&TempStorage[BlockIndex]), ReadStageLength);   // Read Block

   BlockIndex++;
   // If device has received as many bytes as fit on one FLASH page, disable interrupts,
   // write page to flash, reset packet index, enable interrupts
   // Send handshake packet 0xFF to host after FLASH write
   if ((BlockIndex   == (BLOCKS_PR_PAGE)) || (BytesRead  == BytesToRead))
   {
      Page_Erase((BYTE*)(PageIndices[PageIndex]));
      Page_Write((BYTE*)(PageIndices[PageIndex]));
      PageIndex++;
      Led1 = ~Led1;
      BlockIndex  =  0;
      Buffer[0]   =  0xFF;
      Block_Write(Buffer,  1);         // Send handshake Acknowledge to host
   }

   // Go to Idle state if last packet has been received
   if (BytesRead  == BytesToRead)   {M_State =  ST_IDLE_DEV;   Led1  =  0;}
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一二三四五| 国产不卡一区视频| 国产精品亚洲第一区在线暖暖韩国 | 亚洲视频中文字幕| 麻豆高清免费国产一区| 在线免费不卡视频| 中文子幕无线码一区tr| 日韩高清在线电影| 欧美午夜在线观看| 亚洲欧洲日韩av| 国产.欧美.日韩| 久久综合九色综合97婷婷女人| 亚洲成人激情av| 欧美中文字幕亚洲一区二区va在线 | 国产不卡视频一区| 欧美成va人片在线观看| 亚洲一卡二卡三卡四卡五卡| 不卡高清视频专区| 久久精品亚洲麻豆av一区二区| 另类综合日韩欧美亚洲| 欧美日韩一区二区三区免费看| 国产精品电影一区二区三区| 国产成人av网站| 久久亚洲欧美国产精品乐播| 久久国产精品99久久人人澡| 91精品久久久久久久99蜜桃 | 欧美日韩一区三区| 一区二区久久久| 欧美在线影院一区二区| 一区二区三区波多野结衣在线观看| 91网站最新网址| 依依成人精品视频| 欧美亚洲高清一区二区三区不卡| 一区二区成人在线观看| 在线这里只有精品| 日韩成人一级片| 精品久久久久久久人人人人传媒 | 亚洲成人免费看| 欧美老女人在线| 青青草97国产精品免费观看| 欧美一卡在线观看| 国产在线播放一区| 日本一区二区三区久久久久久久久不| 国产精品一区2区| 中文字幕在线不卡国产视频| 99久久精品国产一区| 一级日本不卡的影视| 欧美日韩久久一区二区| 蜜桃av一区二区在线观看| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美一区二区三区四区高清| 麻豆视频一区二区| 久久精品日韩一区二区三区| 成人av电影在线网| 亚洲午夜国产一区99re久久| 91精品国产综合久久久蜜臀图片| 精品一区二区三区久久久| 欧美国产一区在线| 色av成人天堂桃色av| 日韩电影在线观看一区| 国产欧美综合在线观看第十页| 日本精品视频一区二区| 日本亚洲欧美天堂免费| 欧美国产日韩一二三区| 欧美日韩亚洲国产综合| 国产麻豆精品一区二区| 亚洲乱码中文字幕| 精品福利一区二区三区免费视频| 成人免费看黄yyy456| 日精品一区二区三区| 国产午夜一区二区三区| 欧美色图一区二区三区| 国产精品亚洲一区二区三区在线| 亚洲成人av免费| 欧美国产一区二区在线观看| 欧美肥胖老妇做爰| 97久久精品人人爽人人爽蜜臀| 日韩高清中文字幕一区| 亚洲人成亚洲人成在线观看图片 | 7777精品伊人久久久大香线蕉超级流畅| 精品一区二区三区蜜桃| 亚洲综合精品久久| 欧美高清在线一区| 精品理论电影在线观看| 欧美日韩国产综合草草| a在线播放不卡| 国产精品一区二区在线播放| 人人精品人人爱| 夜夜揉揉日日人人青青一国产精品| 26uuu亚洲婷婷狠狠天堂| 欧美日韩午夜精品| 99国产精品久| 成人在线一区二区三区| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲成av人片在线| 一区二区三区四区不卡在线 | 欧美日韩不卡一区| 99九九99九九九视频精品| 经典三级在线一区| 丝袜脚交一区二区| 亚洲成av人片| 一区二区三区蜜桃网| 亚洲男女一区二区三区| 国产精品久久久99| 国产精品视频yy9299一区| 久久亚洲一级片| 欧美成人乱码一区二区三区| 91黄色激情网站| 在线一区二区三区| 色婷婷久久久亚洲一区二区三区| 波多野结衣在线一区| 成人性视频免费网站| 国产69精品久久99不卡| 国产精品99久久久久久久女警| 激情偷乱视频一区二区三区| 久久99精品一区二区三区三区| 日韩avvvv在线播放| 美国av一区二区| 国产在线播精品第三| 东方aⅴ免费观看久久av| 国产成人综合视频| 成人app网站| 色老汉av一区二区三区| 欧美日本在线播放| 欧美一区二区二区| 久久综合久久99| 国产免费观看久久| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲美女偷拍久久| 五月婷婷色综合| 韩国毛片一区二区三区| 懂色av噜噜一区二区三区av| gogo大胆日本视频一区| 日本丶国产丶欧美色综合| 欧美夫妻性生活| 欧美国产日韩a欧美在线观看| 亚洲色欲色欲www| 五月综合激情婷婷六月色窝| 黄网站免费久久| 99综合电影在线视频| 欧美日韩一区二区三区在线看| 欧美日韩国产精品自在自线| 日韩视频免费直播| 欧美国产日韩亚洲一区| 一区二区三区在线不卡| 久久99久久久欧美国产| 99国产精品一区| 日韩一区二区精品| 亚洲欧洲精品一区二区三区不卡| 亚洲综合一区在线| 国产在线精品不卡| 欧美日韩卡一卡二| 国产精品午夜免费| 日本网站在线观看一区二区三区| 国产高清不卡一区| 欧美福利视频导航| 日韩久久一区二区| 精一区二区三区| 在线观看91精品国产入口| 精品国产精品一区二区夜夜嗨| 亚洲区小说区图片区qvod| 精品一区二区三区在线观看| 欧美天堂一区二区三区| 国产清纯白嫩初高生在线观看91| 亚洲bdsm女犯bdsm网站| 不卡区在线中文字幕| 精品久久国产老人久久综合| 一区二区久久久久久| 不卡电影一区二区三区| 精品嫩草影院久久| 亚洲一区二区3| 国产又黄又大久久| 国产午夜精品美女毛片视频| 日本不卡在线视频| 91精品在线麻豆| 依依成人综合视频| 日本二三区不卡| 亚洲成人免费看| 日韩欧美三级在线| 国产成人精品三级| 中文字幕一区二区三区不卡在线 | 欧美亚洲国产bt| 亚洲精品欧美在线| 国产91综合一区在线观看| 欧美va亚洲va| 国产一区二区在线影院| 日韩一区二区三区视频在线观看| 亚洲成人www| 国产精品美女www爽爽爽| 成人动漫视频在线| 亚洲精品乱码久久久久久久久| 91福利社在线观看| 亚洲国产cao| 精品av久久707| 91小视频在线观看| 国产一区二区影院| 亚洲狠狠丁香婷婷综合久久久| 欧美性色黄大片| 国产成人在线视频网址| 伊人性伊人情综合网|