⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbtest.lst

📁 C8051F120与串口、并口、D12、USB、LCD应用
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.01  USBTEST                                                                06/30/2007 11:42:51 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE USBTEST
OBJECT MODULE PLACED IN USBTest.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE USBTest.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*-----------------------------------------------------------------------
   2          
   3              Copyright (C) 2006 Beijing Jiaotong University, Computer Science
   4          
   5              Creator: xiaoqiang
   6          
   7              File: usbtest.c
   8          
   9              Description:
  10                test usb device 
  11          
  12              History:
  13                2006-10-16 xiaoqiang created
  14                
  15          ------------------------------------------------------------------------*/
  16          #include "system.h"
  17          #include "typedef.h"
  18          #include "usbtest.h"
  19          #include "d12interface.h"
  20          #include <string.h>
  21          #include "lcd.h"
  22          #include "usb.h"
  23          #include "mmc.h"
  24          
  25          extern EPPFLAGS bEppflags;
  26          
  27          extern char Found;                      //在目录中找到的文件或目录个数
  28          extern FILESTRUCT  File[];//保存查找到的文件或目录信息
  29          extern FILESTRUCT CurF;                                                 //存放当前目录
  30          extern MMCDataBuf[512];
  31          extern MMCUSBBuf[513];
  32          extern char PATH[40];
  33          extern char DEPTH;
  34          
  35          //定时器3计数值,20ms
  36          #define T3L_VAL 0x00
  37          #define T3H_VAL 0x70
  38          
  39          bool bTruncated = false;        //set it true if command was truncated 
  40          //CMD_HEADER    CmdHeader;
  41          u16     wCount = 0;
  42          
  43          USBTEST1_DATA usbtest1={0, 0, 0, 1, 1, 0, 0, 0, AUTOECHO_OFF, 
  44                  TRANSMODE_CONTROL, 0, 0};
  45          bool bNeedRefresh = false;      //dynamic refresh
  46          bool bTimerRefresh = false;
  47          
  48          extern void SetUSBTest1Data(USBTEST1_DATA *pData);
  49          extern void reserved();
  50          
  51          u8      bTestNo = 0;
  52          
  53          static  CMD_HEADER xdata *g_pCmd = (CMD_HEADER*)Ep2Buf;
  54          static  u8      xdata *g_pData = Ep2Buf+sizeof(CMD_HEADER);
  55          
C51 COMPILER V7.01  USBTEST                                                                06/30/2007 11:42:51 PAGE 2   

  56          
  57          void Timer3_INIT()                      //16位自动重装模式,产成10ms中断
  58          {   
  59   1          SFRPAGE = TMR3_PAGE;
  60   1              
  61   1              TMR3L=T3L_VAL;                  //赋值          
  62   1          TMR3H=T3H_VAL;
  63   1          RCAP3L=T3L_VAL;
  64   1          RCAP3H=T3H_VAL;
  65   1          TMR3CF |=0x01;                      //SYSCLK/12作为T3输入,向上计数
  66   1              TMR3CN =0x04;                   //T3工作模式: 自动重装,计时器,忽略T2EX信号                       
  67   1              EIE2 |=0x1;
  68   1      }
  69          
  70          u8      count = 0;
  71          
  72          //timer2 happen interval 1 second
  73          void Timer3_Handler() interrupt 14      //T3 20ms中断,用于控制时钟
  74          {
  75   1      //      TMR3CN&=0X7F;                                   //清中断标志位
  76   1              TF3=0;
  77   1              count++;
  78   1              if (count < 50)
  79   1                      return;
  80   1      
  81   1              count = 0;
  82   1              usbtest1.bSecond++;
  83   1              bTimerRefresh = true;
  84   1              if(usbtest1.bSecond>59)
  85   1              {
  86   2                      usbtest1.bSecond = 0;
  87   2                      usbtest1.bMinute++;
  88   2                      if (usbtest1.bMinute >59)
  89   2                      {
  90   3                              usbtest1.bMinute = 0;
  91   3                              usbtest1.bHour++;
  92   3                      }
  93   2                      if (usbtest1.bHour > 23)
  94   2                      {
  95   3                              usbtest1.bHour = 0;
  96   3                              usbtest1.bDay++;
  97   3                      }
  98   2                      switch(usbtest1.bMonth)
  99   2                      {
 100   3                      case 1:
 101   3                      case 3:
 102   3                      case 5:
 103   3                      case 7:
 104   3                      case 8:
 105   3                      case 10:
 106   3                      case 12:
 107   3                              if (usbtest1.bDay>31)
 108   3                              {
 109   4                                      usbtest1.bDay=1;
 110   4                                      usbtest1.bMonth++;
 111   4                              }
 112   3                              break;
 113   3                      case 4:
 114   3                      case 6:
 115   3                      case 9:
 116   3                      case 11:
 117   3                              if (usbtest1.bDay > 30)
C51 COMPILER V7.01  USBTEST                                                                06/30/2007 11:42:51 PAGE 3   

 118   3                              {
 119   4                                      usbtest1.bDay = 1;
 120   4                                      usbtest1.bMonth++;
 121   4                              }
 122   3                              break;
 123   3                      case 2:
 124   3                              if (usbtest1.bYear%4==0&&usbtest1.bDay>29)
 125   3                              {
 126   4                                      usbtest1.bDay = 1;
 127   4                                      usbtest1.bMonth++;
 128   4                              }
 129   3                              else if (usbtest1.bDay>28)
 130   3                              {
 131   4                                      usbtest1.bDay = 1;
 132   4                                      usbtest1.bMonth++;
 133   4                              }
 134   3                              break;
 135   3                      }
 136   2                      if (usbtest1.bMonth > 12)
 137   2                      {
 138   3                              usbtest1.bMonth = 1;
 139   3                              usbtest1.bYear++;
 140   3                      }
 141   2                      if (usbtest1.bYear > 99)
 142   2                              usbtest1.bYear = 0;
 143   2              }
 144   1      }
 145          
 146          void display_err(u8     bErr)
 147          {
 148   1              g_pCmd->wTag = USBCMD_BEGIN;
 149   1              g_pCmd->bCmd = USBCMD_ERROR;
 150   1              g_pCmd->bLen = 1;
 151   1      
 152   1              *(g_pData) = bErr;
 153   1              D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
 154   1      }
 155                  
 156          void _set_reg()
 157          {
 158   1              //check the test no
 159   1              if (bTestNo != 1)
 160   1              {
 161   2                      display_err(USBERR_WRONGTEST);
 162   2                      return;
 163   2              }
 164   1      
 165   1              memcpy(&usbtest1, g_pData, 8);
 166   1              usbtest1.wRecvCount += 8;
 167   1      
 168   1              bNeedRefresh = true;
 169   1      }
 170          
 171          void _get_reg()
 172          {
 173   1              g_pCmd->wTag = USBCMD_BEGIN;
 174   1              g_pCmd->bCmd = USBCMD_GETREG;
 175   1              g_pCmd->bLen = 8;
 176   1              memcpy(g_pData, &usbtest1, 8);
 177   1              usbtest1.wSendCount += 8;
 178   1      
 179   1              D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
C51 COMPILER V7.01  USBTEST                                                                06/30/2007 11:42:51 PAGE 4   

 180   1      
 181   1      //      bNeedRefresh = true;
 182   1      }
 183          
 184          void _connect_mmc()
 185          {
 186   1              u8      i;
 187   1      
 188   1              //check the test no
 189   1              if (bTestNo != 2)
 190   1              {
 191   2                      display_err(USBERR_WRONGTEST);
 192   2                      return;
 193   2              }
 194   1      
 195   1              //open root 
 196   1              CurF.firstcluster=0;                                            //首先打开根目录(firstcluster=0判断为根目录)
 197   1              CurF.attribute=0;                                                       //首先打开根目录(firstcluster=0判断为根目录)
 198   1              OpenDir(&CurF);
 199   1      
 200   1              //send file struct to pc
 201   1              g_pCmd->wTag = USBCMD_BEGIN;
 202   1              g_pCmd->bCmd = USBCMD_CONNECTMMC;
 203   1              g_pCmd->bLen = sizeof(FILESTRUCT);
 204   1              for (i=0;i<Found;i++)
 205   1              {
 206   2                      memcpy(g_pData, &File[i], sizeof(FILESTRUCT));
 207   2                      D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
 208   2              }
 209   1      }
 210          
 211          void _change_dir()
 212          {
 213   1              u8      i;
 214   1              //check the test no
 215   1              if (bTestNo != 2)
 216   1              {
 217   2                      display_err(USBERR_WRONGTEST);
 218   2                      return;
 219   2              }
 220   1      
 221   1              if (g_pCmd->bCmd == USBCMD_CHANGEDIR)
 222   1                      OpenDir(&File[*g_pData]);
 223   1              else if (g_pCmd->bCmd == USBCMD_REFRESH)
 224   1                      OpenDir(&CurF);
 225   1      
 226   1              //send file struct to pc
 227   1              g_pCmd->wTag = USBCMD_BEGIN;
 228   1              g_pCmd->bCmd = USBCMD_CHANGEDIR;
 229   1              g_pCmd->bLen = sizeof(FILESTRUCT);
 230   1              for (i=0;i<Found;i++)
 231   1              {
 232   2                      memcpy(g_pData, &File[i], sizeof(FILESTRUCT));
 233   2                      D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
 234   2              }
 235   1      }
 236          
 237          void _read_file()
 238          {
 239   1              u32 u32Offset = 0;
 240   1              u8      u8FileNo = *g_pData;
 241   1              //check the test no
C51 COMPILER V7.01  USBTEST                                                                06/30/2007 11:42:51 PAGE 5   

 242   1              if (bTestNo != 2)
 243   1              {
 244   2                      display_err(USBERR_WRONGTEST);
 245   2                      return;
 246   2              }
 247   1      
 248   1              g_pCmd->wTag = USBCMD_BEGIN;
 249   1              g_pCmd->bCmd = USBCMD_READFILE;
 250   1              ///////////////////////
 251   1              //read file & SEND data to pc
 252   1              while (u32Offset<File[u8FileNo].size)
 253   1              {
 254   2                      if (File[u8FileNo].size-u32Offset > EP2_PACKET_SIZE-sizeof(CMD_HEADER))
 255   2                      {
 256   3                              mmc_fread(g_pData, EP2_PACKET_SIZE-sizeof(CMD_HEADER));
 257   3                              g_pCmd->bLen = EP2_PACKET_SIZE-sizeof(CMD_HEADER);
 258   3                      }
 259   2                      else
 260   2                      {
 261   3                              mmc_fread(g_pData, File[u8FileNo].size-u32Offset);
 262   3                              g_pCmd->bLen = File[u8FileNo].size-u32Offset;
 263   3                      }
 264   2                      u32Offset += g_pCmd->bLen;
 265   2                      D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
 266   2              }
 267   1              //////////////////////////////
 268   1      
 269   1              //file read over
 270   1              g_pCmd->bCmd = USBCMD_READOVER;
 271   1              g_pCmd->bLen = 0;
 272   1              D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
 273   1      }
 274          
 275          void _write_file()
 276          {
 277   1              u8      u8FileNo = *g_pData;
 278   1              //check the test no
 279   1              if (bTestNo != 2)
 280   1              {
 281   2                      display_err(USBERR_WRONGTEST);
 282   2                      return;
 283   2              }
 284   1      
 285   1              mmc_fwrite(g_pData, g_pCmd->bLen);
 286   1      
 287   1              //data write over
 288   1              g_pCmd->wTag = USBCMD_BEGIN;
 289   1              g_pCmd->bCmd = USBCMD_WRITEOVER;
 290   1              g_pCmd->bLen = 0;//64-sizeof(CMD_HEADER);
 291   1      //      memset(pData, 'y', g_pCmd->bLen);
 292   1              D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
 293   1      
 294   1      }
 295          
 296          void _delete_file()
 297          {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -