?? et_easy_usb_bulk.c
字號:
#include <interrupt.h>
#include "ET_Easy_usb_bulk.h"
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
{
// Set 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
{
M_BC(BulkState,CONFIG);
}
//. 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 + -