www.pudn.com > OS.rar > SystemIntoUSB.c, change:2006-12-11,size:4427b
#define CREATEUSBVAR
#include ".\System\GPL162002_Far\include\system_head.h"
#include ".\Driver\GPL162002_Far\include\Driver_Head.h"
#include ".\Component\GPL162002_Far\include\Component_Head.h"
#include ".\Component\GPL162002_Far\include\FileSystem\nand.h"
#include ".\Component\\GPL162002_Far\include\USB\USB_Constant.h"
#include ".\Component\\GPL162002_Far\include\USB\USBD_MSDC.h"
#include ".\Component\\GPL162002_Far\include\USB\USB_CV.h"
extern unsigned int _Nand_ErasePhysicalBlock(unsigned long BlockAddr);
extern void USB_Reset(void);
extern void System_Initial(void);
extern unsigned int USB_ServiceLoop(void);
void USB_TimeOut_Disable(void);
extern unsigned int R_Write_protect;
extern unsigned int CurDrv;
char cAddr_PassWord[16];
unsigned int R_USB_DisplayTime;
//extern unsigned long USB_RW_Buffer;
//extern BSPTR ucBSMalloc(BSINTU size);
extern void USBISR(void);
extern void USB_Insert_TimeOut(void);
int SystemIntoUDisk()
{
int ret;
int i;
#ifdef OS_vension
DrvSDCCreatSem();
USB_RW_Buffer= (unsigned long )ucBSMalloc(512); //256 //by zhangxh for two Buffer 2006/01/23
// USB_RW_Buffer= (unsigned long )&usbbuffer;
SysDisableWaitMode(INT_USB);
SysIntoHighSpeed();
#endif
unOSRegisterISR(INT_USB,(INT32U)(USBISR));
unOSRegisterISR(INT_TIMERA, (INT32U)(USB_Insert_TimeOut));
// CurDrv = 1;
CurDrvA = 1;
CurDrvB = 2;
// for(;;)
// {
R_NANDA_Present=0;
R_NANDB_Present=0;
R_SDC_Present=0;
USB_DiskTotalNum = 1;
USB_DiskNandNum = 2;
// USB_DiskNandNum = 1;
i = 0;
if (i)
{
_Nand_Initial();
for(i=0;i<2048;i++)
{
ret = _Nand_ErasePhysicalBlock(i);
if(ret&0x01)
{
// SetBadBlock(i);
}
}
}
ret = _Nand_Initial();
ret = InitMapTable();
if(ret!=0)
{
_Nand_Reset();
_Nand_Initial();
ret = BuildMapTable();
}
ret = 0;
if(ret==0)
{
R_NANDA_Present=1;
R_NANDB_Present=1;
}
if (CurDrvA == 1)
NandTotalSectorA= Nand_Part0_Size;// FileSysDrv[CurDrv].Drv_GetMemSize();
if (CurDrvA == 2)
NandTotalSectorA= Nand_Part1_Size;// FileSysDrv[CurDrv].Drv_GetMemSize();
if (CurDrvA == 3)
NandTotalSectorA= Nand_Part2_Size;// FileSysDrv[CurDrv].Drv_GetMemSize();
USB_DiskTotalNum = 0;
if (USB_DiskNandNum==2)
{
if (CurDrvB == 1&&CurDrvA!=1)
NandTotalSectorB= Nand_Part0_Size;// FileSysDrv[CurDrv].Drv_GetMemSize();
if (CurDrvB == 2&&CurDrvA!=2)
NandTotalSectorB= Nand_Part1_Size;// FileSysDrv[CurDrv].Drv_GetMemSize();
if (CurDrvB == 3&&CurDrvA!=3)
NandTotalSectorB= Nand_Part2_Size;// FileSysDrv[CurDrv].Drv_GetMemSize();
USB_DiskTotalNum = 1;
}
//NandTotalSector = _NAND_GetSize();
for(i=0 ; i<5 ; i++)
{
ret = DrvSDCInitial();
if(ret==0)
{
R_SDC_Present=1; // SD Card Initial Success
USB_DiskTotalNum++;
break;
}
}
*P_TimerA_Preload=0x10000-(4096*10);
*P_TimerA_Ctrl=0xe064;
R_USB_NandWriterData = 0x00;
USB_Reset();
ret=USB_ServiceLoop();
USB_TimeOut_Disable();
*P_USBD_Config=0x00;
*P_USBD_INTEN=0x00;
// }
//while(1);
return 0;
}
void Check_SDC_Present(void)
{
int ret;
if(0)
{
ret = *((volatile unsigned int*)(0x7060));
ret &= 0x0001;
//ret表示这一次循环,SD卡状态 1:insert, 0:pull out
//R_SDC_Present表示上一循环SD卡状态
if (R_SDC_Present == 0 && ret ==1)//insert
{
ret = DrvSDCInitial();
if(ret == 0)
{
R_SDC_Present = 1;
R_Media_Change = 1;
R_Write_protect = 0x80;
}
}
else if (R_SDC_Present == 1 && ret ==0)//pull out
{
R_SDC_Present = 0;
R_Media_Change = 0;
}
}
// User have to implement this API.
// If SDC is inserted, please initialize the SDC and set R_SDC_Present to 1.
// If SDC is removed, please clear R_SDC_Present to 0.
}
void USB_TimeOut_Disable(void)
{
*P_TimerA_Ctrl=0x8000;
}
void USB_Insert_TimeOut(void)
{
int temp;
temp=*P_TimerA_Ctrl;
*P_TimerA_Ctrl=temp; //clear timerA int flag
R_USB_Suspend=1;
}
int* Request_GetPassWord(void)
{
//int Addr[16];
int i;
for(i= 0x00;i<16;i++)
{
cAddr_PassWord[i] = 1;
}
return (int*)cAddr_PassWord;
}
int Responsion_PassWord(int *p)
{
int i;
for (i=0x0;i<16;i++)
{
if (*(p+i)!=0x0001)
return 0;
}
return 1;
}