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

📄 bulkloop.lst

📁 该模块基于USB FX2开发板
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  BULKLOOP                                                               08/03/2007 15:03:55 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE BULKLOOP
OBJECT MODULE PLACED IN .\bulkloop.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\bulkloop.c DEBUG OBJECTEXTEND

stmt level    source

   1          #pragma NOIV               // Do not generate interrupt vectors
   2          //-----------------------------------------------------------------------------
   3          //   File:      bulkloop.c
   4          //   Contents:   Hooks required to implement USB peripheral function.
   5          //
   6          //   Copyright (c) 2000 Cypress Semiconductor All rights reserved
   7          //-----------------------------------------------------------------------------
   8          #include "fx2.h"
   9          #include "fx2regs.h"
  10          #include "fx2sdly.h"            // SYNCDELAY macro
  11          
  12          extern BOOL GotSUD;             // Received setup data flag
  13          extern BOOL Sleep;
  14          extern BOOL Rwuen;
  15          extern BOOL Selfpwr;
  16          
  17          BYTE Configuration;             // Current configuration
  18          BYTE AlternateSetting;          // Alternate settings
  19          
  20          #define VR_NAKALL_ON    0xD0
  21          #define VR_NAKALL_OFF   0xD1
  22          //sbit PD_0 = IOD^0;
  23          //sbit PD_1 = 0xB0^1;
  24          //sbit PD_2 = 0xB0^2;
  25          //sbit OED_0 = 0xB5 + 0;
  26          
  27          //-----------------------------------------------------------------------------
  28          // Task Dispatcher hooks
  29          //   The following hooks are called by the task dispatcher.
  30          //-----------------------------------------------------------------------------
  31          
  32          void TD_Init(void)             // Called once at startup
  33          {
  34   1         // set the CPU clock to 48MHz
  35   1         CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1) ;
  36   1      
  37   1         // set the slave FIFO interface to 48MHz
  38   1         IFCONFIG |= 0x40;
  39   1      	IFCONFIG &= 0xfc;
  40   1      
  41   1        // Registers which require a synchronization delay, see section 15.14
  42   1        // FIFORESET        FIFOPINPOLAR
  43   1        // INPKTEND         OUTPKTEND
  44   1        // EPxBCH:L         REVCTL
  45   1        // GPIFTCB3         GPIFTCB2
  46   1        // GPIFTCB1         GPIFTCB0
  47   1        // EPxFIFOPFH:L     EPxAUTOINLENH:L
  48   1        // EPxFIFOCFG       EPxGPIFFLGSEL
  49   1        // PINFLAGSxx       EPxFIFOIRQ
  50   1        // EPxFIFOIE        GPIFIRQ
  51   1        // GPIFIE           GPIFADRH:L
  52   1        // UDMACRCH:L       EPxGPIFTRIG
  53   1        // GPIFTRIG
  54   1        
  55   1        // Note: The pre-REVE EPxGPIFTCH/L register are affected, as well...
C51 COMPILER V6.12  BULKLOOP                                                               08/03/2007 15:03:55 PAGE 2   

  56   1        //      ...these have been replaced by GPIFTC[B3:B0] registers
  57   1      
  58   1        // default: all endpoints have their VALID bit set
  59   1        // default: TYPE1 = 1 and TYPE0 = 0 --> BULK  
  60   1        // default: EP2 and EP4 DIR bits are 0 (OUT direction)
  61   1        // default: EP6 and EP8 DIR bits are 1 (IN direction)
  62   1        // default: EP2, EP4, EP6, and EP8 are double buffered
  63   1      
  64   1        // we are just using the default values, yes this is not necessary...
  65   1        EP1OUTCFG = 0xA0;
  66   1        EP1INCFG = 0xA0;
  67   1        SYNCDELAY;                    // see TRM section 15.14
  68   1        EP2CFG = 0x22; //0xA2;
  69   1        SYNCDELAY;                    
  70   1        EP4CFG = 0xA0;
  71   1        SYNCDELAY;                    
  72   1        EP6CFG = 0x22; //0xE2;
  73   1        SYNCDELAY;                    
  74   1        EP8CFG = 0xE0;
  75   1      
  76   1        // out endpoints do not come up armed
  77   1        
  78   1        // since the defaults are double buffered we must write dummy byte counts twice
  79   1        //SYNCDELAY;                    
  80   1        //EP2BCL = 0x80;                // arm EP2OUT by writing byte count w/skip.
  81   1        //SYNCDELAY;                    
  82   1        //EP2BCL = 0x80;
  83   1        SYNCDELAY;                    
  84   1        EP4BCL = 0x80;                // arm EP4OUT by writing byte count w/skip.
  85   1        SYNCDELAY;                    
  86   1        EP4BCL = 0x80;    
  87   1      
  88   1        // enable dual autopointer feature
  89   1        AUTOPTRSETUP |= 0x01;
  90   1      
  91   1        Rwuen = TRUE;                 // Enable remote-wakeup
  92   1      
  93   1        //EZUSB_InitI2C();    // Initialize EZ-USB I2C controller
  94   1      
  95   1        //PA0~7 and PB7 used as Input GPIO , while PD0~7 and PB0~6 are used as Output GPIO
  96   1        OED = 0xff;
  97   1        OEB = 0x7f;
  98   1        OEA = 0x00;
  99   1      
 100   1      }
 101          
 102          
 103          void TD_Poll(void)              // Called repeatedly while the device is idle
 104          {
 105   1      	BYTE GPIOPinSet = 0x00;
 106   1      	int i;
 107   1      /*
 108   1        if(!(EP2468STAT & bmEP2EMPTY))
 109   1        { // check EP2 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
 110   1           if(!(EP2468STAT & bmEP6FULL))
 111   1           {  // check EP6 FULL(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is full
 112   1              APTR1H = MSB( &EP2FIFOBUF );
 113   1              APTR1L = LSB( &EP2FIFOBUF );
 114   1      
 115   1              AUTOPTRH2 = MSB( &EP6FIFOBUF );
 116   1              AUTOPTRL2 = LSB( &EP6FIFOBUF );
 117   1      
C51 COMPILER V6.12  BULKLOOP                                                               08/03/2007 15:03:55 PAGE 3   

 118   1              count = (EP2BCH << 8) + EP2BCL;
 119   1      
 120   1              // loop EP2OUT buffer data to EP6IN
 121   1              for( i = 0x0000; i < count; i++ )
 122   1              {
 123   1                 // setup to transfer EP2OUT buffer to EP6IN buffer using AUTOPOINTER(s)
 124   1                 EXTAUTODAT2 = EXTAUTODAT1;
 125   1              }
 126   1              EP6BCH = EP2BCH;  
 127   1              SYNCDELAY;  
 128   1              EP6BCL = EP2BCL;        // arm EP6IN
 129   1              SYNCDELAY;                    
 130   1              EP2BCL = 0x80;          // re(arm) EP2OUT
 131   1           }
 132   1        }
 133   1      */
 134   1        if(!(EP2468STAT & bmEP4EMPTY))
 135   1        { // check EP4 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
 136   2      
 137   2        	//if(!(EP2468STAT & bmEP8FULL))
 138   2           {  // check EP8 FULL(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is full
 139   3      		if (EP4FIFOBUF[0x10] < 0x80) //output pins setting 
 140   3      		{
 141   4      			GPIOPinSet = EP4FIFOBUF[0x10];
 142   4      			switch (GPIOPinSet) 
 143   4      			{
 144   5      			case 0x00:		//all clear 0
 145   5      				IOD = 0x00;
 146   5      				IOB = IOB & 0x80;
 147   5      				break;
 148   5      			case 0x01:		//begin setting 1
 149   5      				IOD = IOD | 0x01;
 150   5      				break;
 151   5      			case 0x02:
 152   5      				IOD = IOD | 0x02;
 153   5      				break;
 154   5      			case 0x03:
 155   5      				IOD = IOD | 0x04;
 156   5      				break;
 157   5      			case 0x04:
 158   5      				IOD = IOD | 0x08;
 159   5      				break;
 160   5      			case 0x05:
 161   5      				IOD = IOD | 0x10;
 162   5      				break;
 163   5      			case 0x06:
 164   5      				IOD = IOD | 0x20;
 165   5      				break;
 166   5      			case 0x07:
 167   5      				IOD = IOD | 0x40;
 168   5      				break;
 169   5      			case 0x08:
 170   5      				IOD = IOD | 0x80;
 171   5      				break;
 172   5      			case 0x09:
 173   5      				IOB = IOB | 0x01;
 174   5      				break;
 175   5      			case 0x0a:
 176   5      				IOB = IOB | 0x02;
 177   5      				break;
 178   5      			case 0x0b:
 179   5      				IOB = IOB | 0x04;
C51 COMPILER V6.12  BULKLOOP                                                               08/03/2007 15:03:55 PAGE 4   

 180   5      				break;
 181   5      			case 0x0c:
 182   5      				IOB = IOB | 0x08;
 183   5      				break;
 184   5      			case 0x0d:
 185   5      				IOB = IOB | 0x10;
 186   5      				break;
 187   5      			case 0x0e:
 188   5      				IOB = IOB | 0x20;
 189   5      				break;
 190   5      			case 0x0f:		//set 1 end;
 191   5      				IOB = IOB | 0x40;
 192   5      				break;
 193   5      			case 0x40:		//all set 1, means all output
 194   5      				IOB = IOB | 0x7f;
 195   5      				IOD = 0xff;
 196   5      				break;
 197   5      			case 0x41:		//begin clear 0;
 198   5      				IOD = IOD & 0xfe;
 199   5      				break;
 200   5      			case 0x42:
 201   5      				IOD = IOD & 0xfd;
 202   5      				break;
 203   5      			case 0x43:
 204   5      				IOD = IOD & 0xfb;
 205   5      				break;
 206   5      			case 0x44:
 207   5      				IOD = IOD & 0xf7;
 208   5      				break;
 209   5      			case 0x45:
 210   5      				IOD = IOD & 0xef;
 211   5      				break;
 212   5      			case 0x46:
 213   5      				IOD = IOD & 0xdf;
 214   5      				break;
 215   5      			case 0x47:
 216   5      				IOD = IOD & 0xbf;
 217   5      				break;
 218   5      			case 0x48:
 219   5      				IOD = IOD & 0x7f;
 220   5      				break;
 221   5      			case 0x49:
 222   5      				IOB = IOB & 0x7e;
 223   5      				break;
 224   5      			case 0x4a:
 225   5      				IOB = IOB & 0x7d;
 226   5      				break;
 227   5      			case 0x4b:
 228   5      				IOB = IOB & 0x7b;
 229   5      				break;
 230   5      			case 0x4c:
 231   5      				IOB = IOB & 0x77;
 232   5      				break;
 233   5      			case 0x4d:
 234   5      				IOB = IOB & 0x6f;
 235   5      				break;
 236   5      			case 0x4e:
 237   5      				IOB = IOB & 0x5f;
 238   5      				break;
 239   5      			case 0x4f:
 240   5      				IOB = IOB & 0x3f;
 241   5      				break;
C51 COMPILER V6.12  BULKLOOP                                                               08/03/2007 15:03:55 PAGE 5   

 242   5      			default:
 243   5      				break;				
 244   5      			}
 245   4      			for (i=0;i<64;i+=2)
 246   4      			{
 247   5      				EP8FIFOBUF[i] = IOD;
 248   5      				EP8FIFOBUF[i+1] = IOB;
 249   5      			}
 250   4              	EP8BCH = 0x0;  
 251   4              	SYNCDELAY;  
 252   4              	EP8BCL = 64;        // arm EP8IN
 253   4              	SYNCDELAY;
 254   4      		}
 255   3      		else		//input pins setting
 256   3      		{
 257   4      			GPIOPinSet = EP4FIFOBUF[0x10];
 258   4      			switch (GPIOPinSet) 
 259   4      			{
 260   5      			case 0x80:		//all clear 0
 261   5      				IOA = 0x00;
 262   5      				IOB = IOB & 0x7f;
 263   5      				break;
 264   5      			case 0x81:		//begin to set 1 (input pins)
 265   5      				IOA = IOA | 0x01;
 266   5      				break;
 267   5      			case 0x82:
 268   5      				IOA = IOA | 0x02;
 269   5      				break;
 270   5      			case 0x83:
 271   5      				IOA = IOA | 0x04;
 272   5      				break;
 273   5      			case 0x84:
 274   5      				IOA = IOA | 0x08;
 275   5      				break;
 276   5      			case 0x85:
 277   5      				IOA = IOA | 0x10;
 278   5      				break;
 279   5      			case 0x86:
 280   5      				IOA = IOA | 0x20;
 281   5      				break;
 282   5      			case 0x87:
 283   5      				IOA = IOA | 0x40;
 284   5      				break;
 285   5      			case 0x88:
 286   5      				IOA = IOA | 0x80;
 287   5      				break;
 288   5      			case 0x89:		//set 1 end;
 289   5      				IOB = IOB | 0x80;
 290   5      				break;
 291   5      			case 0xc0:		//all set 1
 292   5      				IOA = 0xff;
 293   5      				IOB = IOB | 0x80;
 294   5      				break;
 295   5      			case 0xc1:		//begin clear 0
 296   5      				IOA = IOA & 0xfe;
 297   5      				break;
 298   5      			case 0xc2:
 299   5      				IOA = IOA & 0xfd;
 300   5      				break;
 301   5      			case 0xc3:
 302   5      				IOA = IOA & 0xfb;

⌨️ 快捷键说明

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