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

📄 usb_bulk.c

📁 ET44 Bulk transfer is a simple USB(bulk mode)device tester package. There are firmware, software and
💻 C
字号:



#include <interrupt.h>

#include "usb_bulk.h"
/*
#ifdef M_NOP
#undef M_NOP
#define M_NOP          _asm  NOP \r\n NOP \r\n NOP \r\n NOP \r\n NOP _endasm
#endif
*/

void main() 		
{
   M_DISI;
   PRIE = 0;
   INTE = 0;
   INTF = 0;
   
   HINTR = 5;
   BulkState = 0;
   // Call library sub function to initial usb
   UsbInitial();
   
   // Set IAP0 & IAP1 auto plus
   IAPADR = 0x0f;

   // enable interrupt
   M_ENI;
  
   // wait for usb config ok!  
   do
   {
     DelayMs(10);   
   }
   while(M_ISBC(BulkState,CONFIG));
   
   while(1)
   {
      // COMMAND_START_BULKIN command is set, put data to endpoint 1
      if(M_ISBS(BulkState,START_BULKIN))
      {
         M_BC(BulkState,START_BULKIN);
         AddUsbEp1WorkSub(); 
         // enable ep1 for bulk in data.
         M_BS(EP1CSR,RXTXEN);   
         M_NOP;          
      } 
      // COMMAND_START_BULKOUT command is set
      if(M_ISBS(BulkState,START_BULKOUT))
      {
         M_BC(BulkState,START_BULKOUT);   
         // enable endpoint2 for bulk out  
         M_BC(EP2CSR,SESTALL);
         M_NOP;
         M_BS(EP2CSR,RXTXEN);   
         M_NOP;   
      }
   } 
}

void DelayMs(unsigned char nMs)
{
   while(nMs)
   {
      DelayNs(250);
      DelayNs(250);
      DelayNs(250);
      DelayNs(250);
      nMs--;   
   }
}

void DelayNs(unsigned char nMs)
{

   while(nMs)
   {
     NOP1;
     nMs--;   
   }
}

// replace macro _ADD_USB_SET_REPORT_SUB
void AddUsbSetReportSub() using USBBANK
{

   
}

// macro _ADD_USB_GET_REPORT_SUB
void AddUsbGetReportSub() using USBBANK
{
 
}

void AddUsbInitialWorkSub() using USBBANK
{

}

void AddUsbRt0x01Request() using USBBANK
{

}

void AddUsbRt0x02Request() using USBBANK
{

}

//. call macro _ADD_USB_RT0X00_Request
void AddUsbRt0x00Request() using USBBANK
{

}
// macro _ADD_USB_RT0X80_Request
void AddUsbRt0x80Request() using USBBANK
{

}

// macro _ADD_USB_RT0X82_Request
void AddUsbRt0x82Request() using USBBANK
{

}

// macro _ADD_USB_RT0X20_Request
void AddUsbRt0x20Request() using USBBANK
{

}

// macro _ADD_USB_RT0X21_Request
void AddUsbRt0x21Request() using USBBANK
{

}

// macro _ADD_USB_RT0X23_Request
void AddUsbRt0x23Request() using USBBANK
{

}

// macro _ADD_USB_RT0XA0_Request
void AddUsbRt0xA0Request() using USBBANK
{

}

// macro  _ADD_USB_RT0XA1_Request
void AddUsbRt0xA1Request() using USBBANK
{

}

// macro _ADD_USB_RT0XA3_Request
void AddUsbRt0xA3Request() using USBBANK
{

}

// macro _ADD_USB_bmRequestType
void AddUsbBmRequestType() using USBBANK
{
   // Get vendor command
   if(TEMP_UREG == REQUEST_SET_VENDER_COMMAND)
   {
      TEMP_UREG = IAC0;
      if(TEMP_UREG == COMMAND_START_BULKOUT)
      {   
         // Get Request Value
         byLengthL = wValueL;
         M_NOP;
         byLengthH = wValueH;
         M_NOP;
         M_BS(BulkState,START_BULKOUT); 
         M_BS(FC_STATUS,2);
         return;
      }      
   }
   else if(TEMP_UREG == REQUEST_GET_VENDER_COMMAND)
   {
      TEMP_UREG = IAC0;
      if(TEMP_UREG == COMMAND_START_BULKIN)
      { 
         // send bulk in size to ep0 TX fifo.
         EP0TXCTR = 2;
         M_NOP;
         EP0TXDAR = byLengthH;
         M_NOP;
         EP0TXDAR = byLengthL;
         M_NOP;
         M_BS(BulkState,START_BULKIN); 
         M_BS(FC_STATUS,2);        
         return;
      }      
   }
}

//. macro  _ADD_USB_GET_REPORT_EXP_SUB
void AddUsbGetReportExpSub() using USBBANK
{

}

//. macro _ADD_USB_EP1_SUB
// endpoint is an in pipe (device ==> host),
// so we must call AddUsbEp1WorkSub() before endpoint1 interrupt is occur,
void AddUsbEp1Sub() using USBBANK
{
   M_BS(BulkState,GETEP1);  
}

void AddUsbEp1WorkSub() using USBBANK
{
   if(M_ISBS(EP1CSR,SESTALL) || M_ISBS(EP1CSR,RXTXEN))
   {
      M_NOP;
      return;
   }    
   // set endpoint fifo count
   TempCount = 0x40;
   EP1CTR = TempCount;
   M_NOP;   
   // set buffer address
   IAP1 = 0x40;   
   // put data from buffer 0x40~0x7F to ep1 fifo
   while(TempCount)
   {
      EP1DAR = IAC1;
      TempCount--;
   }     
}


///////////////////////////////////////////////////////////////////////////
//. macro _ADD_USB_EP2_SUB
// endpoint 2 is an out pipe (host ==> device),
// so when endpoint2 interrupt occur, we call AddUsbEp2WorkSub() to recive data from fifo.
void AddUsbEp2Sub() using USBBANK
{  
   if(M_ISBS(EP2CSR,SESTALL) || M_ISBS(EP2CSR,RXTXEN))
   {
      M_NOP;
      return;
   }
   // bulk out 
   // get fifo count
   TempCount = EP2CTR;
   M_NOP;
   // put data to buffer 0x40~0x7F
   IAP1 = 0x40;
   for(byCount=0;byCount<TempCount;byCount++)
   {
      IAC1=EP2DAR;   
   }
}

void AddUsbEp2WorkSub() using USBBANK
{

}

//. macro _ADD_USB_EP3_SUB
void AddUsbEp3Sub() using USBBANK
{

}

void AddUsbEp3WorkSub() using USBBANK
{

}


//. macro _ADD_USB_BUS_RESET_SUB
void AddUsbBusResetSub() using USBBANK
{

}

//. macro _ADD_USB_IDLE_INT_SUB
void AddUsbIdleIntSub() using USBBANK
{

}

//. macro _ADD_USB_WAKEUP_INT_SUB
void AddUsbWakeup() using USBBANK
{

}

//. macro _ADD_USB_SOF_INT_SUB
void AddUsbSof() using USBBANK
{

}

//. macro _ADD_USB_DEVICE_CONFIG_OK
void AddUsbDeviceConfigOk() using USBBANK
{
   M_BS(BulkState,CONFIG);
}

⌨️ 快捷键说明

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