?? et_easy_usb_bulk_usb_lib.c
字號:
#include <usb_reg.h>
//Use lib generator to create ET_Easy_usb_bulk_c_setting.h
#include "ET_Easy_usb_bulk_c_setting.h"
#include <interrupt.h>
#include <c_macro.h>
#include "ET_Easy_usb_bulk_usb_lib.h"
void UsbIntPre() using USBBANK
{
if(_USB_AUTO_SET_BANK)
M_BANK(USB_BANK);
if(_USB_AUTO_STORE_IAP0)
{
STACK_IAP0 = IAP0;
}
}
// UsbInital() revised by USB_INITAL
void UsbInitial() using USBBANK
{
// set iap0 auto inc 1 when iac0 is use
IAPADR = 0x05;
// enable usb function
M_BS6(PRIE);
// M_BANK(USB_BANK);
//hub endpoint transmit: 0: not transmit yet 1:transmit ok,
M_BC3(HUB_STATUS);
USB_STATUS = 0;
STATUS_BUF = 0;
A_INTERFACE = 0;
// enable embedd function interrupt
EPINTE = 0x3f;
M_NOP;
//_ENABLE USB Bus Reset Event
STAINTE = 0x01;
M_NOP;
//Hub initilize: interrupt _ENABLE
HINTE = 0xCF;
M_NOP;
//Address clear
ADDRESS_BUFh = 0;
ADDRESS_BUFf = 0;
FAR = 0xFF;
M_NOP;
HAR = 0xFF;
M_NOP;
//USB SPEED setting
if(_USB_FULL_SPEED)
M_BS7(GCNTR);
else
M_BC7(GCNTR);
M_NOP;
//Start transmition: plug-in
M_BS1(GCNTR);
M_NOP;
//. call macro _ADD_USB_INITIAL_WORK_SUB
AddUsbInitialWorkSub();
return;
}
//. RST_ISR
void Int_RstInte() interrupt INT_RSTINTE using USBBANK
{
if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
UsbIntPre();
// software reset usb device
M_BS0(GCNTR);
M_NOP;
// clear usb bus reset event detect
//**Remote-wakeup disable,power switch disable
//HGSR = 0;
_asm
MOV A,#0x00
MOV _HGSR,A
_endasm;
// set Hub address
// HAR = 0x00;
M_NOP;
// usb device address
HAR = 0;
M_NOP;
FAR = 0;
M_NOP;
STAINTR = 0xFE;//#0b11111110
M_NOP;
nAddrBuf = 0;
HEP1_CNT = 0;
USB_STATUS = 0;
STATUS_BUF = 0;
if(!_USB_HUB)
{
HAR = 127;
M_NOP;
M_BS5(HGSR);
M_NOP;
HPCONR = 145;//#0b10010001
M_NOP;
M_BC0(HPSCR1);
M_NOP;
M_BS5(GCNTR);
M_NOP;
HPCONR = 137; //#0b10001001
M_NOP;
M_BC4(HPSCR1);
M_NOP;
}
//. call macro _ADD_USB_BUS_RESET_SUB
//AddUsbBusResetSub();
Back_To_Mloop:
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
//RX0_ISR 2004/01/27 Create by Brooklin
void Int_Int0Rxe(void) interrupt INT_INT0RXE using USBBANK
{
if(_USB_AUTO_SET_BANK || _USB_AUTO_STORE_IAP0)
UsbIntPre();
if(M_ISBS0(EP0RXTR)) // JBS EP0RXTR,OUT,f_out_package
{//. f_out_package
EP0RXTR = 0xFE; //#0b11111110
M_NOP;
//. JBC FC_STATUS,DATA_OUT,next_f_inout
if(M_ISBC2(FC_STATUS))
goto Next_F_Inout;
else
{
M_BC2(FC_STATUS);
//macro _ADD_USB_SET_REPORT_SUB
AddUsbSetReportSub();
nwLength = 0;
//wLengthL = 0;
//wLengthH = 0;
//. next_f_inout
}
}
//. f_setup_package
else
{
if(M_ISBS1(EP0RXTR))
{
EP0RXTR = 0xFD; //#0b11111101
}
else
{
EP0RXTR = 0xFB; //#0b11111011
}
_asm
NOP
MOV A,#_bmRequestType
MOV _IAP0,A
NOP
_endasm;
while(M_ISBC3(IAP0))
{
IAC0 = EP0RXDAR;
}
// replace wLengthH and wLengthL by nwLength
// if(!wLengthH && !wLengthL)
if(!nwLength)
{
EP0TXCTR = 0;
M_NOP;
}
M_BC1(USB_STATUS);
M_BC0(USB_STATUS);
M_BC2(USB_STATUS);
M_BC5(USB_STATUS);
// _asm
// MOV A,#_bmRequestType
// _endasm;
StageOne();
if(M_ISBS0(USB_STATUS))
{//.f_stall
M_BS1(EP0RXCSR);
M_NOP;
M_BS1(EP0TXCSR);
M_NOP;
goto Back_To_Mloop;
}
}
Next_F_Inout:
M_BC1(EP0RXCSR);
M_NOP;
M_BC1(EP0TXCSR);
M_NOP;
M_BS0(EP0RXCSR);
M_NOP;
M_BS0(EP0TXCSR);
// BACK_TO_MLOOP
Back_To_Mloop:
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
//. IN0_ISR
void Int_Int0Ine(void) interrupt INT_INT0INE using USBBANK
{
if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
UsbIntPre();
//Clear interrupt INT_flag
EPINTR = 251;//#0b11111011
M_NOP;
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
//. TX0_ISR
void Int_Int0Txe(void) interrupt INT_INT0TXE using USBBANK
{
if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
UsbIntPre();
//Clear interrupt INT_flag
EPINTR = 253;//#0b11111101
M_NOP;
FAR = ADDRESS_BUFf;
M_NOP;
if(!TBLL)
{//. exit_tx01
EP0TXCTR=0;
M_NOP;
}
else if(wLengthH)
{//. TX0_ISR1
if(M_ISBS5(FC_STATUS))
{//. USB_GET_REPORT_SUB
//. call macro _ADD_USB_GET_REPORT_EXP_SUB
AddUsbGetReportExpSub();
}
else
{
nTable = nRomAdr;
//HTBL = ROMADRH;
//LTBL = ROMADRL;
M_NOP;
fTransmitTable();
}
}
Next_F_Inout:
M_BC1(EP0RXCSR);
M_NOP;
M_BC1(EP0TXCSR);
M_NOP;
M_BS0(EP0RXCSR);
M_NOP;
M_BS0(EP0TXCSR);
}
//. EP1_ISR
void Int_Int1e() interrupt INT_INT1E using USBBANK
{
//UsbIntPre();
//M_BC1(PORTB);
EPINTR = 247; // #0b11110111
M_NOP;
//. call macro _ADD_USB_EP1_SUB
AddUsbEp1Sub();
Back_To_Mloop:
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
//. EP2_ISR
void Int_Int2e() interrupt INT_INT2E using USBBANK
{
UsbIntPre();
EPINTR = 239; // #0b11101111
M_NOP;
//. call macro _ADD_USB_EP2_SUB
AddUsbEp2Sub();
Back_To_Mloop:
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
//. EP3_ISR
void Int_Int3e() interrupt INT_INT3E using USBBANK
{
UsbIntPre();
EPINTR = 223; // #0b11011111
M_NOP;
//. call macro _ADD_USB_EP3_SUB
AddUsbEp3Sub();
Back_To_Mloop:
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
//. IDLE_ISR
void Int_IdleInte() interrupt INT_IDLEINTE using USBBANK
{
if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
UsbIntPre();
STAINTE = 0x0F;
M_NOP;
STAINTR = 253; //#0b11111101
M_NOP;
M_BS2(GCNTR);
M_NOP;
//. call macro _ADD_USB_IDLE_INT_SUB
AddUsbIdleIntSub();
Back_To_Mloop:
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
//. RESUME_WAKEUP_ISR
void Int_FrwpInte() interrupt INT_FRWPINTE using USBBANK
{
if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
UsbIntPre();
if(M_ISBC2(STAINTR))
{
STAINTE = 7;
M_NOP;
//. call macro _ADD_USB_WAKEUP_INT_SUB
AddUsbWakeup();
}
else
{
STAINTE = 0x0B;
M_NOP;
//. call macro _ADD_USB_WAKEUP_INT_SUB
AddUsbWakeup();
}
Back_To_Mloop:
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
//. HRX0_ISR
void Int_Hint0Rxe() interrupt INT_HINT0RXE using USBBANK
{
if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
UsbIntPre();
if(M_ISBC0(HEP0RXTR))
{//. h_setup_package
if(M_ISBS1(HEP0RXTR))
HEP0RXTR = 253;// #0b11111101
else
HEP0RXTR = 251;// #0b11111011
M_NOP;
_asm
MOV A,#_HbmRequestType
MOV _IAP0,A
NOP
_endasm;
while(M_ISBC3(IAP0))
{//. hReceiveCommand
IAC0 = HEP0RXDAR;
}
if(!nHwLength)
{
HEP0TXCTR = 0;
M_NOP;
}
//. 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);
M_NOP;
M_BS1(HEP0TXCSR);
M_NOP;
}
else
{//. next_h_inout
goto Next_H_Inout;
}
}
else
{//. h_out_package
HEP0RXTR = 254; //#0b11111110
M_NOP;
}
Next_H_Inout:
M_BC1(HEP0RXCSR);
M_NOP;
M_BC1(HEP0TXCSR);
M_NOP;
M_BC0(HEP0RXCSR);
M_NOP;
M_BC0(HEP0TXCSR);
M_NOP;
Back_To_Mloop:
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
//. HIN0_ISR
void Int_Hint0Ine() interrupt INT_HINT0INE using USBBANK
{
if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
UsbIntPre();
HINTR = 251;// #0b11111011
M_NOP;
Back_To_Mloop:
if(_USB_AUTO_STORE_IAP0)
{
IAP0=STACK_IAP0;
M_NOP;
}
if(_USB_DIS_ANO_INT)
M_ENI;
return;
}
//. HTX0_ISR
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -