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

📄 et21x130c_usb_lib.c

📁 在台湾义统公司
💻 C
📖 第 1 页 / 共 5 页
字号:
      IAP0=STACK_IAP0;
      USB_Lib_Delay();        
   }
#endif
   
#if(_USB_DIS_ANO_INT)
      M_ENI;
#endif

   return; 
}



////////////////////////////////////////////////////////////////////////////////////////
//. IDLE_ISR interrupt function,interrupt vector 0x98
//  run when USB Bus Suspend Event Detect
//  If you want to add code when USB Bus Suspend Event Detect
//  ,revise AddUsbIdleIntSub().
//  Call Function:AddUsbIdleIntSub();
////////////////////////////////////////////////////////////////////////////////////////
void Int_IdleInte() interrupt INT_IDLEINTE using USBBANK
{
#if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
   UsbIntPre();
#endif

   STAINTE = 0x0F;
   USB_Lib_Delay();

   STAINTR = 253; //#0b11111101
   USB_Lib_Delay();
  
   M_BS2(GCNTR);
   USB_Lib_Delay();
   
   //. call macro _ADD_USB_IDLE_INT_SUB
   AddUsbIdleIntSub();
   
 Back_To_Mloop: 
#if(_USB_AUTO_STORE_IAP0)
   {
      IAP0=STACK_IAP0;
      USB_Lib_Delay();        
   }
#endif
   
#if(_USB_DIS_ANO_INT)
      M_ENI;
#endif

   return;    

}


////////////////////////////////////////////////////////////////////////////////////////
//. RESUME_WAKEUP_ISR interrupt function,interrupt vector 0x98
//  call when Function Remote Wake-Up Interrupt
//  Call Function:AddUsbWakeup();
////////////////////////////////////////////////////////////////////////////////////////
void Int_FrwpInte() interrupt INT_FRWPINTE using USBBANK
{
#if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
   UsbIntPre();
#endif

   if(M_ISBC2(STAINTR))
   {
      STAINTE = 7;
      USB_Lib_Delay();
   }
   else
   {
      STAINTE = 0x0B;
      USB_Lib_Delay();   
   }
   //. call macro _ADD_USB_WAKEUP_INT_SUB   
   AddUsbWakeup();   
 Back_To_Mloop: 
#if(_USB_AUTO_STORE_IAP0)
   {
      IAP0=STACK_IAP0;
      USB_Lib_Delay();        
   }
#endif
   
#if(_USB_DIS_ANO_INT)
      M_ENI;
#endif

   return;    

}


////////////////////////////////////////////////////////////////////////////////////////
//. RESUME_WAKEUP_ISR interrupt function,interrupt vector 0x98
//  call when Hub EP0 USB RX Event Detect
//  Call Function:
////////////////////////////////////////////////////////////////////////////////////////
#if _USB_HUB
void Int_Hint0Rxe() interrupt INT_HINT0RXE using USBBANK
{
  #if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
   UsbIntPre();
  #endif

   if(M_ISBC0(HEP0RXTR))
   {//. h_setup_package
      if(M_ISBS1(HEP0RXTR))
         HEP0RXTR = 253;// #0b11111101
      else
         HEP0RXTR = 251;// #0b11111011
      USB_Lib_Delay();
      
      _asm
        MOV A,#_HbmRequestType
        MOV _IAP0,A
        NOP
      _endasm;
      
      while(M_ISBC3(IAP0))
      {//. hReceiveCommand
         IAC0 = HEP0RXDAR;      
      }
      
      if(!nHwLength)
      {
         HEP0TXCTR = 0;
         USB_Lib_Delay();
      }   
         
      
      //. skip_hub_nodata_set
      M_BC1(USB_STATUS);
      M_BC0(USB_STATUS);
      
      //_asm 
      //  MOV A,#_HbmRequestType
      //_endasm;
      StageOne();
      if(M_ISBS0(USB_STATUS))  
      {//. h_stall
         M_BS1(HEP0RXCSR);
         USB_Lib_Delay();
         M_BS1(HEP0TXCSR);
         USB_Lib_Delay();
      }
      else
      {//. next_h_inout
         goto Next_H_Inout;
      }
   }
   else
   {//. h_out_package
      HEP0RXTR = 254; //#0b11111110
      USB_Lib_Delay();      
   }
   
 Next_H_Inout:   
   M_BC1(HEP0RXCSR);
   USB_Lib_Delay();
   M_BC1(HEP0TXCSR);
   USB_Lib_Delay();
   M_BC0(HEP0RXCSR);
   USB_Lib_Delay();
   M_BC0(HEP0TXCSR);
   USB_Lib_Delay();      

 Back_To_Mloop: 
  #if(_USB_AUTO_STORE_IAP0)
   {
      IAP0=STACK_IAP0;
      USB_Lib_Delay();        
   }
  #endif
   
  #if(_USB_DIS_ANO_INT)
      M_ENI;
  #endif

   return;
}
#endif


//////////////////////////////////////////////////////////
#if _USB_HUB
//. HIN0_ISR
void Int_Hint0Ine() interrupt INT_HINT0INE using USBBANK
{
  #if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
   UsbIntPre();
  #endif
   
   HINTR = 251;// #0b11111011
   USB_Lib_Delay();
   

 Back_To_Mloop: 
  #if(_USB_AUTO_STORE_IAP0)
   {
      IAP0=STACK_IAP0;
      USB_Lib_Delay();        
   }
  #endif
   
  #if(_USB_DIS_ANO_INT)
      M_ENI;
  #endif

  return;       

}
#endif


#if _USB_HUB
//. HTX0_ISR
void Int_Hint0Txe() interrupt INT_HINT0TXE using USBBANK
{
  #if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
   UsbIntPre();
  #endif
   
   if(M_ISBS1(HINTR))
   {//. HTX0_ISR1
      HINTR = 253;
      USB_Lib_Delay();
      HAR = ADDRESS_BUFh;
      USB_Lib_Delay();  
      //. skip_hub_address_set
      if(!HTBLL)
      {//. exit_htx0
         HEP0TXCTR = 0;
         USB_Lib_Delay();
      }
      else if(HwLengthL)
      {//. skip_hub_address_set1
         nTable = nRomAdr;     
         USB_Lib_Delay();
         HubTransmitTable();
      }
      else if(!HwLengthH)
      {//. exit_htx0
         HEP0TXCTR = 0;
         USB_Lib_Delay();
      }
   }
   else
   {//. HTX1_ISR
      M_BC1(HEP1TXCSR);
      USB_Lib_Delay();
      if(M_ISBS3(HUB_STATUS))
      {
         M_BC0(HEP1TXCSR);
      }
      else
      {//. not_cleared_yet
         M_BS0(HEP1TXCSR);
      }
      
      USB_Lib_Delay();
      HINTR = 247;//#0b11110111
      USB_Lib_Delay();      
      goto Back_To_Mloop;
   }

 Next_H_Inout:   
   M_BC1(HEP0RXCSR);
   USB_Lib_Delay();
   M_BC1(HEP0TXCSR);
   USB_Lib_Delay();
   M_BC0(HEP0RXCSR);
   USB_Lib_Delay();
   M_BC0(HEP0TXCSR);
   USB_Lib_Delay();  

 Back_To_Mloop: 
  #if(_USB_AUTO_STORE_IAP0)
   {
      IAP0=STACK_IAP0;
      USB_Lib_Delay();        
   }
  #endif
   
  #if(_USB_DIS_ANO_INT)
      M_ENI;
  #endif

   return;
}
#endif

#if _USB_HUB
//. HPSTSC_ISR
void Int_HpstscInte() interrupt INT_HPSTSCINTE using USBBANK
{
  #if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
   UsbIntPre();
  #endif
   
   M_BC3(HUB_STATUS);
   HINTR = 127; //#0b01111111
   USB_Lib_Delay();
   

   if(12 & HSR) //#0b00001100
      M_BS0(STATUS_BUF);

   if(31 & HPSCR1)//#0b00011111
      M_BS1(STATUS_BUF);

   if(31 & HPSCR2)//#0b00011111
      M_BS2(STATUS_BUF);

   if(31 & HPSCR3)//#0b00011111
      M_BS3(STATUS_BUF);
      
   if(31 & HPSCR4)//#0b00011111
      M_BS4(STATUS_BUF);
      
   if(!(30 & STATUS_BUF) && M_ISBC0(STATUS_BUF))//#0b00011110
   {//. response_nak
//      if(M_ISBC0(STATUS_BUF))
      {
         M_BC1(HEP1TXCSR);
         USB_Lib_Delay();
         M_BC0(HEP1TXCSR);
         USB_Lib_Delay();
         goto Back_To_Mloop;
      }   
   }

   _asm
     MOV _HEP1TXDAR,A
   _endasm;
   USB_Lib_Delay();
   //. CHECK_PORT1_STATUS
   if(M_ISBS1(STATUS_BUF))
   {
      _asm
        MOV A,#_HSR+1
        MOV _IAP0,A
        NOP
      _endasm;
      
      if(M_ISBS4(IAC0))
         goto NOT_ENABLE_HEP1;
   }
   
   if(M_ISBS1(STATUS_BUF))
   {
      _asm
        MOV A,#_HSR+2
        MOV _IAP0,A
        NOP
      _endasm;
      
      if(M_ISBS4(IAC0))
         goto NOT_ENABLE_HEP1;
   }   
   
   if(M_ISBS1(STATUS_BUF))
   {
      _asm
        MOV A,#_HSR+3
        MOV _IAP0,A
        NOP
      _endasm;
      
      if(M_ISBS4(IAC0))
         goto NOT_ENABLE_HEP1;
   }    
   
   if(M_ISBS1(STATUS_BUF))
   {
      _asm
        MOV A,#_HSR+4
        MOV _IAP0,A
        NOP
      _endasm;
      
      if(M_ISBS4(IAC0))
         goto NOT_ENABLE_HEP1;
   }    
   
   M_BC1(HEP1TXCSR);
   USB_Lib_Delay();
   M_BC0(HEP1TXCSR);
   USB_Lib_Delay();
   goto Back_To_Mloop;
   
//. NOT_ENABLE_HEP1  
 NOT_ENABLE_HEP1:
   HEP1_CNT = 16;
   
 Back_To_Mloop: 
  #if(_USB_AUTO_STORE_IAP0)
   {
      IAP0=STACK_IAP0;
      USB_Lib_Delay();        
   }
  #endif
   
  #if(_USB_DIS_ANO_INT)
      M_ENI;
  #endif

   return;   
 
}
#endif


//. SOF_ISR
void Int_SofInte() interrupt INT_SOFINTE using USBBANK
{
#if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
   UsbIntPre();
#endif
   
   HINTR = 191;//#0b10111111
   USB_Lib_Delay();
   //. call macro _ADD_USB_SOF_INT_SUB
   

   AddUsbSof();
   
   if(HEP1_CNT)
   {   
      if(--HEP1_CNT)
      {//. ENABLE_HEP1
         M_BC1(HEP1TXCSR);
         USB_Lib_Delay();
         M_BS0(HEP1TXCSR);
         USB_Lib_Delay();         
      }
   }
   
 Back_To_Mloop: 
#if(_USB_AUTO_STORE_IAP0)
   {
      IAP0=STACK_IAP0;
      USB_Lib_Delay();        
   }
#endif
   
#if(_USB_DIS_ANO_INT)
      M_ENI;
#endif

   return;  
}



void HubTransmitTable() using USBBANK
{
   CTR_BUF = 0;

   do
   {
     _asm
      TBRDP _HEP0TXDAR
      INC _CTR_BUF
     _endasm;  
     nHwLength--;
     HTBLL--;

⌨️ 快捷键说明

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