00001
00002
00003
00004
00005
00006
00007
00018
00019
00020 #include "../SYSTEM/sys_hardware.h"
00021 #include "../SYSTEM/sys_main.h"
00022 #include "../SYSTEM/sys_clock.h"
00023 #include "../MESSAGE/message.h"
00024 #include "../GENERIC/generic.h"
00025 #include "usb.h"
00026 #include "usb_assert.h"
00027
00028
00029
00030 #define STK_USB 1024
00031 #define STK_USBCTL 2048
00032 #define STK_USBEP2 4096
00033 #define STK_USBTRAFFIC 512
00034
00035
00036
00037
00038
00039
00040
00041
00042 st_LU_GLOBALS LogicUnit;
00043
00044 USB_EpHandle hEpObjArray[] = { &usb_EpObjOut0,
00045 &usb_EpObjIn0,
00046 &usb_EpObjOut2,
00047 &usb_EpObjIn2, NULL};
00048
00049
00050
00051 #pragma DATA_SECTION(SEM_usb, ".idata_resident")
00052 TSK_Handle TSK_usb;
00053 TSK_Handle TSK_usbCtl;
00054 TSK_Handle TSK_usbEp2;
00055 TSK_Handle TSK_usbTraffic;
00056 SEM_Handle SEM_usb;
00057 SEM_Handle SEM_usbCtl;
00058 SEM_Handle SEM_usbEp2;
00059
00060 int STK_usb[STK_USB];
00061 int STK_usbCtl[STK_USBCTL];
00062 int STK_usbEp2[STK_USBEP2];
00063 int STK_usbTraffic[STK_USBTRAFFIC];
00064
00065 extern void USB_task(void);
00066
00067
00068 #pragma CODE_SECTION(USB_main, ".usb_code")
00072 void USB_main( void )
00073 {
00074 IFR |= 0x0002;
00075 IMR |= 0x0002;
00076
00077
00078 SYS_clockSetup((CLOCK_MODE)0x90CF);
00079
00080 D12_initClock();
00081
00082 LogicUnit.NumOfActiveLU = 1;
00083 LogicUnit.luStatus[0].bMedia_installed = TRUE;
00084 LogicUnit.luStatus[0].bMedia_ready = TRUE;
00085 LogicUnit.luStatus[0].bMedia_write_enable = TRUE;
00086 if(SYS_isHDDpresent())
00087 {
00088
00089
00090
00091 LogicUnit.readSec[0] = HDD__rdSec;
00092 LogicUnit.writeSec[0] = HDD__wrSec;
00093 LogicUnit.totalSec[0] = DiskC.totalSec16_32;
00094 }
00095 else
00096 {
00097
00098
00099
00100 LogicUnit.readSec[0] = NAND__rdSec;
00101 LogicUnit.writeSec[0] = NAND__wrSec;
00102 LogicUnit.totalSec[0] = DiskD.totalSec16_32;
00103 }
00104
00105
00106
00107
00108 USB_maxLUN[1] = LogicUnit.NumOfActiveLU - 1;
00109
00110
00111 if ( USB_init() == USB_FALSE )
00112 {
00113 SYS_die(USB_MAIN);
00114 }
00115
00116 USB_ctl_config();
00117 USB_msc_config();
00118
00119
00120
00121 USB_connectDev(USB0);
00122 }
00123
00124 #pragma CODE_SECTION(USB_connect, ".usb_code")
00128 void USB_connect(void)
00129 {
00130 USB_connectDev(USB0);
00131 }
00132
00133 #pragma CODE_SECTION(USB_disconnect, ".usb_code")
00137 void USB_disconnect(void)
00138 {
00139 USB_disconnectDev(USB0);
00140
00141
00142
00143 IMR &= 0xFFFD;
00144 }
00145
00146 #pragma CODE_SECTION(USB_createTask, ".usb_code")
00150 void USB_createTask( void )
00151 {
00152 TSK_Attrs tskAttr = TSK_ATTRS;
00153
00154 SEM_usb = SEM_create(0, &SEM_ATTRS);
00155 SEM_usbCtl = SEM_create(0, &SEM_ATTRS);
00156 SEM_usbEp2 = SEM_create(0, &SEM_ATTRS);
00157
00158 tskAttr.environ = &ENV_idata;
00159
00160 tskAttr.priority = 7;
00161 tskAttr.stack = STK_usb;
00162 tskAttr.stacksize = STK_USB;
00163 TSK_usb = TSK_create((Fxn)USB_isr_handler, &tskAttr);
00164 USB_assert((UINT)TSK_usb, USB_CREATETASK);
00165
00166 tskAttr.priority = 8;
00167 tskAttr.stack = STK_usbCtl;
00168 tskAttr.stacksize = STK_USBCTL;
00169 TSK_usbCtl = TSK_create((Fxn)USB_ctl_handler, &tskAttr);
00170 USB_assert((UINT)TSK_usbCtl, USB_CREATETASK1);
00171
00172 tskAttr.priority = 9;
00173 tskAttr.stack = STK_usbEp2;
00174 tskAttr.stacksize = STK_USBEP2;
00175 TSK_usbEp2 = TSK_create((Fxn)USB_msc_handler, &tskAttr);
00176 USB_assert((UINT)TSK_usbEp2, USB_CREATETASK2);
00177
00178 tskAttr.priority = 6;
00179 tskAttr.stack = STK_usbTraffic;
00180 tskAttr.stacksize = STK_USBTRAFFIC;
00181 TSK_usbTraffic = TSK_create((Fxn)USB_traffic_handler, &tskAttr);
00182 USB_assert((UINT)TSK_usbTraffic, USB_CREATETASK3);
00183
00184 USB_main();
00185 }
00186
00187 #pragma CODE_SECTION(USB_deleteTask, ".usb_code")
00191 void USB_deleteTask( void )
00192 {
00193 USB_disconnect();
00194 TSK_delete(TSK_usb);
00195 TSK_delete(TSK_usbCtl);
00196 TSK_delete(TSK_usbEp2);
00197 TSK_delete(TSK_usbTraffic);
00198 SEM_delete(SEM_usb);
00199 SEM_delete(SEM_usbCtl);
00200 SEM_delete(SEM_usbEp2);
00201 }
00202
00203
00204
00205