USB_main.c

Go to the documentation of this file.
00001 /*****************************************************************************
00002                            C   M O D U L E   F I L E
00003 
00004     Copyright (c) 2003 Neuros Audio LLC, All rights reserved.
00005 
00006 ******************************************************************************/
00007 
00018 
00019 /*-- HEADER FILE INCLUDES ---------------------------------------------------*/
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 /*-- LOCAL DEFINITIONS ------------------------------------------------------*/
00030 #define STK_USB         1024
00031 #define STK_USBCTL      2048    
00032 #define STK_USBEP2      4096    
00033 #define STK_USBTRAFFIC  512
00034 //#define STK_USB           512
00035 //#define STK_USBCTL        1024    
00036 //#define STK_USBEP2        2048    
00037 //#define STK_USBTRAFFIC    512
00038     
00039 /*-- STATIC DATA ------------------------------------------------------------*/
00040 
00041 /*-- GLOBAL DATA ------------------------------------------------------------*/
00042 st_LU_GLOBALS LogicUnit;
00043  
00044 USB_EpHandle  hEpObjArray[] = { &usb_EpObjOut0, 
00045                                 &usb_EpObjIn0, 
00046                                 &usb_EpObjOut2, 
00047                                 &usb_EpObjIn2, NULL};
00048 
00049 // This semaphore will be used by interrupt, it has to be 
00050 // resident all the time.
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 /*-- FUNCTIONS --------------------------------------------------------------*/
00067 
00068 #pragma CODE_SECTION(USB_main, ".usb_code")
00072 void USB_main( void )
00073 {
00074     IFR |= 0x0002;
00075     IMR |= 0x0002;
00076     
00077     //SYS_clockSetup(CLOCK_USB);
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         // This has to be 1.0 HDD backpack.     
00089         //LogicUnit.readSec[0] = DiskC.readSec;
00090         //LogicUnit.writeSec[0] = DiskC.writeSec;
00091         LogicUnit.readSec[0]  = HDD__rdSec;
00092         LogicUnit.writeSec[0] = HDD__wrSec;
00093         LogicUnit.totalSec[0] = DiskC.totalSec16_32;
00094     }
00095     else
00096     {
00097         // This has to be NAND backpack.
00098         //LogicUnit.readSec[0] = DiskD.readSec;
00099         //LogicUnit.writeSec[0] = DiskD.writeSec;
00100         LogicUnit.readSec[0]  = NAND__rdSec;
00101         LogicUnit.writeSec[0] = NAND__wrSec;
00102         LogicUnit.totalSec[0] = DiskD.totalSec16_32;
00103     }
00104     
00105     // USB_maxLUN[1] = 0, meaning device has one logical unit
00106     // USB_maxLUN[1] = 1, meaning device has two logical units
00107     // and so on
00108     USB_maxLUN[1] = LogicUnit.NumOfActiveLU - 1;
00109 
00110     // initializes the USB module
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     // Connect USB device.  
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     // Disable USB interrupt.   
00142     //IMR |= 0x0002;
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                 Neuros Audio LLC. Confidential Proprietary
00205  *****************************************************************************/

Generated on Wed Jan 19 01:12:46 2005 for neuros-firmware by  doxygen 1.3.9.1