📄 l2_usb.c
字号:
/*++
Copyright (c) 2001 Sunplus Technology Co., Ltd.
Module Name:
L2_usb.c
Abstract:
USB L2 function
Environment:
Keil C51 Compiler
Revision History:
11/12/2001 cclin created
--*/
//=============================================================================
//Header file
//=============================================================================
#include "general.h"
#include "bulkout.h"
#include "main.h"
//#include "App.h"
#include "initio.h"
//=============================================================================
//Symbol
//=============================================================================
//-----------------------------------------------------------------------------
//Constant
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//Variable
//-----------------------------------------------------------------------------
//=============================================================================
//Program
//=============================================================================
#ifdef TestModeEn
//-----------------------------------------------------------------------------
//L2_TestUSB
//-----------------------------------------------------------------------------
/*
routine description:
USB module test.
arguments:
TestLevel - 0: all
1: register read/write test
2: SRAM test
3: others
return value:
0x00 - success
others - error
*/
UCHAR L2_TestUSB(UCHAR TestLevel) USING_0
{
UCHAR status = L2K_SUCCESS;
UCHAR Temp0 = TestLevel;
return(status);
}
#endif
#if 0 // 102302@wyeo
UCHAR L2_BulkInOut(void) USING_0
{
UCHAR BulkOutBufCnt;
UCHAR status = 0;
////DbgPrint("bf = %x\n",G_BulkFlash);
// Loop for BulkInToDRAM
//richie@0124 bulk 2
if(XBYTE[0x25C2]==K_USB_AP_IN_ACK_MASK)
{
if(G_BulkFlash==0x00)
{
XBYTE[0x25C2] = 0x00;
if(G_BulkSize<(ULONG)0x41)
{
//PRINT_L2("Last BulkIn");
XBYTE[0x25a1] = 0x00;
} //BulkIn has completed
else
{
G_BulkSize = G_BulkSize - 0x40;
G_BulkDRAMAddr = G_BulkDRAMAddr + 0x20;
if(G_BulkSize<0x41)
{
//richie@0124 bulk 2
XBYTE[0x25a1] = K_USB_AP_IN_OPEN;//0x08;
}
else
{
//richie@0124 bulk 2
XBYTE[0x25a1] = K_USB_AP_IN_OPEN;//0x08;
}
}
} // G_BulkFlash == 0
else if(G_BulkFlash == 0x01)
{
XBYTE[0x25C2] = 0x00;
//PRINT_L2("upload flash function\n");
if(G_BulkSize<(ULONG)0x41)
{
XBYTE[0x25a1] = 0x00;
G_BulkFlash = 0x00;
} // BulkIn has completed
else
{
G_BulkSize = G_BulkSize - 0x40;
G_BulkSRAMAddr = G_BulkSRAMAddr + 0x40;
if (G_BulkSRAMAddr == 512)
{
G_BulkSRAMAddr = 0x00;
L2_SetSRAMDMA(0x0400); //Chamber PA8591
#if (CFAIDE)
G_BulkFlashAddr = G_BulkFlashAddr + 1;
L1_DMARdCFIDE(1, (UCHAR)(G_BulkFlashAddr>>24), (UCHAR)(G_BulkFlashAddr>>16), (UCHAR)(G_BulkFlashAddr>>8), (UCHAR)G_BulkFlashAddr, 1, 0x200);
#endif
#if (SD)
G_BulkFlashAddr = G_BulkFlashAddr + 512;
L1_DMARdSD(1, G_BulkFlashAddr , 1, 0x200);
#endif
}
if(G_BulkSize<0x41)
{
L2_SetSRAMDMA((USHORT)G_BulkSRAMAddr+0x0400); //Chamber PA8591
//richie@0124 bulk 2
L2_SetUSBDMA(K_DMA_UsbDontCare, K_USB_AP_DMA_IN);//for ap
L2_DoDMA(K_DMA_SRAM, K_DMA_USB, G_BulkSize, 0, 0);
//richie@0124 bulk 2
XBYTE[0x25a1] = K_USB_AP_IN_OPEN;//0x08;
G_BulkFlashAddr = 0x00;
G_BulkSize = 0x00;
G_BulkFlash = 0x00;
G_BulkSRAMAddr = 0x00;
}
else
{
L2_SetSRAMDMA((USHORT)G_BulkSRAMAddr+ 0x0400); //Chamber PA8591
//richie@0124 bulk 2
L2_SetUSBDMA(K_DMA_UsbDontCare, K_USB_AP_DMA_IN);//for ap
L2_DoDMA(K_DMA_SRAM, K_DMA_USB, 0x40, 0, 0);
//richie@0124 bulk 2
XBYTE[0x25a1] = K_USB_AP_IN_OPEN;//0x08;
}
}
}
} // if 0x25c2 == 0x01
// Loop for BulkOutToDRAM
//richie@0124 bulk 2
if(XBYTE[0x25C2]==K_USB_AP_OUT_ACK_MASK)
{
if (G_BulkFlash==0x00) // Bulkout to DRAM
{
XBYTE[0x25C2] = 0x00;
//richie@0124 bulk 2
BulkOutBufCnt = XBYTE[K_USB_AP_OUT_BUF_SIZE];
G_BulkDRAMAddr = G_BulkDRAMAddr + ((ULONG)BulkOutBufCnt/2);
G_BulkOutSize = G_BulkOutSize + (ULONG)BulkOutBufCnt;
if(G_BulkOutSize == G_BulkSize)
{
G_LastBulk = 1;
XBYTE[0x25a1] = 0x00;
G_BulkOutSize = 0x00;
G_BulkFlash = 0x00;
//PRINT_L2("Last Bulk\n");
}
//richie@0124 bulk 2
else XBYTE[0x25a1] = K_USB_AP_OUT_OPEN;//0x10;
} // Bulkout to DRAM
else // Bulkout to Flash
{
//PRINT_L2("Download to Flash\n");
XBYTE[0x25C2] = 0x00;
//richie@0124 bulk 2
BulkOutBufCnt = XBYTE[K_USB_AP_OUT_BUF_SIZE];
// DMA to CPU SRAM
L2_SetSRAMDMA((USHORT)G_BulkSRAMAddr+0x0400); //Chamber PA8591
//richie@0124 bulk 2
L2_SetUSBDMA(K_USB_AP_DMA_OUT, K_DMA_UsbDontCare);//for ap
L2_DoDMA(K_DMA_USB, K_DMA_SRAM, (USHORT)BulkOutBufCnt, 0, 0);
G_BulkSRAMAddr = G_BulkSRAMAddr + ((ULONG)BulkOutBufCnt);
G_BulkOutSize = G_BulkOutSize + (ULONG)BulkOutBufCnt;
if (G_BulkSRAMAddr == 512)
{
L2_SetSRAMDMA(0x0400); //Chamber PA8591
#if (CFAIDE)
L1_DMAWrCFIDE(1, (UCHAR)(G_BulkFlashAddr>>24), (UCHAR)(G_BulkFlashAddr>>16), (UCHAR)(G_BulkFlashAddr>>8), (UCHAR)G_BulkFlashAddr, 1, 0x200);
G_BulkFlashAddr = G_BulkFlashAddr + 1;
#endif
#if (SD)
L1_DMAWrSD(1, G_BulkFlashAddr , 1, 0x200);
G_BulkFlashAddr = G_BulkFlashAddr + 512;
#endif
G_BulkSRAMAddr = 0x00;
}
if (G_BulkOutSize == G_BulkSize)
{
G_BulkSRAMAddr = 0x00;
G_BulkOutSize = 0x00;
G_BulkFlashAddr = 0x00;
G_BulkSize = 0x00;
G_BulkFlash = 0x00;
// Bulkout done
}
else
XBYTE[0x25a1] = K_USB_AP_OUT_OPEN;//0x10; //richie@0124 bulk 2
} // Bulkout to Flash
} // if 0x25c2 == 0x02
return status;
}
#endif
//-----------------------------------------------------------------------------
//L2_BulkInFromDRAM
//-----------------------------------------------------------------------------
/*
routine description:
BulkInFromDRAM to PC
arguments:
return value:
0x00 - success
others - error
*/
/*
UCHAR L2_BulkInFromDRAM(ULONG DRAMAddr, USHORT nByte)
{
UCHAR status;
status = L2_SetDRAMDMA(DRAMAddr);
//richie@0124 bulk 2
status = L2_SetUSBDMA(K_DMA_UsbDontCare, K_USB_AP_DMA_IN);//for ap // USBDMADst: endpoint 7
status = L2_DoDMA(K_DMA_DRAM, K_DMA_USB, nByte, 0, 0); // DMA source DRAM, destination USB
//status = L2_SetSRAMDMA(0x0);
//status = L2_DoDMA(1, 3, nByte, 0, 0);
return(status);
}
*/
//-----------------------------------------------------------------------------
//L2_BulkOutToDRAM
//-----------------------------------------------------------------------------
/*
routine description:
BulkOutToDRAM from PC
arguments:
return value:
0x00 - success
others - error
*/
/*
UCHAR L2_BulkOutToDRAM(ULONG DRAMAddr, USHORT nByte)
{
UCHAR status;
status = L2_SetDRAMDMA(DRAMAddr);
status = L2_SetUSBDMA(K_USB_AP_DMA_OUT, K_DMA_UsbDontCare);//for ap // USBDMASrc: endpoint 8
status = L2_DoDMA(K_DMA_USB, K_DMA_DRAM, nByte, 0, 0); // DMA source DRAM, destination USB
//status = L2_SetSRAMDMA(0x0);
//status = L2_DoDMA(3, 1, nByte, 0, 0);
return(status);
}
*/
//-----------------------------------------------------------------------------
//L2_InitUSB
//-----------------------------------------------------------------------------
// SGJM DEL UCHAR L2_InitUSB (UCHAR CamMode) USING_0
/*++
Routine Description:
initialize USB function
Arguments:
none
Return Value:
none
--*/
/*{
// UCHAR temp = CamMode;
//richie@isp 0326
G_BulkFlash = 0;
return(1); //cytsai@0131
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -