📄 l1_pc.c
字号:
/*++
Copyright (c) 2001 Sunplus Technology Co., Ltd.
Module Name:
L1_PC.c
Abstract:
PC related upload/download function
Environment:
Keil C51 Compiler
Revision History:
11/30/2001 cclin created
--*/
//=============================================================================
//Header file
//=============================================================================
#include "general.h"
#include "main.h"
//patch4.4@richie@cisp begin
#include "initio.h"
#include "doslink.h"
#include "dosvar.h"
#include "cardlink.h"
#include "uiflow.h"
//patch4.4@richie@cisp end
//=============================================================================
//Symbol
//=============================================================================
//-----------------------------------------------------------------------------
//Constant
//-----------------------------------------------------------------------------
//patch4.4@richie@cisp
//dram start address of storage isp function
//patch5.0@richie@sdram mapping
#define K_ISP_CARD_ISP_DRAM_ADDR K_SDRAM_ImagePlaybackDisplayBufAddr
//-----------------------------------------------------------------------------
//Variable
//-----------------------------------------------------------------------------
//patch4.4@richie@cisp
extern data UCHAR G_ucISPCheck1;
extern data UCHAR G_ucISPCheck2;
//=============================================================================
//Program
//=============================================================================
//-----------------------------------------------------------------------------
//L1_DownloadISP
//-----------------------------------------------------------------------------
/*
routine description:
BulkOut setting for ISP function
arguments:
return value:
0x00 - success
others - error
*/
UCHAR L1_DownloadISP(ULONG ISPDRAMAddr, ULONG ISPROMAddr, ULONG ISPSecAddr, USHORT ISPSecCnt) USING_0
{
//patch4.4@richie@isp begin
//add for using fix button
//if (ISPDRAMAddr
//add for dram offset for OSD font
ISPDRAMAddr = ISPDRAMAddr + 0x10000;
//patch4.4@richie@isp end
G_ISPDRAMAddr = ISPDRAMAddr;
G_ISPROMAddr = ISPROMAddr;
G_ISPSecAddr = ISPSecAddr;
G_ISPSecCnt = ISPSecCnt;
G_BulkDRAMAddr = G_ISPDRAMAddr;
G_BulkSize = ((ULONG)G_ISPSecCnt) << 8;
G_BulkOutSize = 0x00;
G_LastBulk = 0x00;
//richie@0125
//richie@isp0426 marked
//XBYTE[0x25a1] = K_USB_AP_OUT_OPEN;//0x10;
G_ISP = 1;
//richie@isp0426
EA = 0;
//PRINT_L1("G_ISPDRAMAddr = %lx\n", G_ISPDRAMAddr);
//PRINT_L1("G_ISPROMAddr = %lx\n", G_ISPROMAddr);
//PRINT_L1("G_ISPSecAddr = %lx\n", G_ISPSecAddr);
//PRINT_L1("G_ISPSecCnt = %x\n", G_ISPSecCnt);
return L2K_SUCCESS;
}
//-----------------------------------------------------------------------------
//L1_DownloadToDRAM
//-----------------------------------------------------------------------------
/*
routine description:
Download File to DRAM
arguments:
return value:
0x00 - success
others - error
*/
UCHAR L1_DownloadToDRAM(ULONG BulkDRAMAddr, ULONG BulkSize) USING_0
{
G_BulkDRAMAddr = BulkDRAMAddr;
G_BulkSize = BulkSize;
G_BulkOutSize = 0x00;
G_BulkFlash = 0x00;
//richie@0125
XBYTE[0x25a1] = K_USB_AP_OUT_OPEN;//0x10;
return L2K_SUCCESS;
}
//-----------------------------------------------------------------------------
//L1_UploadFromDRAM
//-----------------------------------------------------------------------------
/*
routine description:
Upload File From DRAM
arguments:
return value:
0x00 - success
others - error
*/
UCHAR L1_UploadFromDRAM(ULONG BulkDRAMAddr, ULONG BulkSize) USING_0
{
G_BulkDRAMAddr = BulkDRAMAddr;
G_BulkSize = BulkSize;
G_BulkFlash = 0x00;
if(G_BulkSize<0x41)
{
//DbgPrint("L2_BulkInFromDRAM\n");
L2_BulkInFromDRAM(G_BulkDRAMAddr,(USHORT)G_BulkSize);
}
else
{
//DbgPrint("L2_BulkInFromDRAM\n");
L2_BulkInFromDRAM(G_BulkDRAMAddr,0x40);
}
//richie@0125
XBYTE[0x25a1] = K_USB_AP_IN_OPEN;//0x08;
return L2K_SUCCESS;
}
//-----------------------------------------------------------------------------
//L1_UploadFAT
//-----------------------------------------------------------------------------
UCHAR L1_UploadFAT(UCHAR Para0) USING_0
{
UCHAR Temp0 = Para0;
//PRINT_L1(" L1_UploadFAT: Enter.\n");
//PRINT_L1(" L1_UploadFAT: Exit.\n");
return L2K_SUCCESS;
}
//-----------------------------------------------------------------------------
//L1_UploadFile
//-----------------------------------------------------------------------------
UCHAR L1_UploadFile(UCHAR Para0) USING_0
{
UCHAR Temp0 = Para0;
//PRINT_L1(" L1_UploadFile: Enter.\n");
//PRINT_L1(" L1_UploadFile: Exit.\n");
return L1K_SUCCESS;
}
//-----------------------------------------------------------------------------
//L1_UploadAll
//-----------------------------------------------------------------------------
UCHAR L1_UploadAll(UCHAR Para0) USING_0
{
UCHAR Temp0 = Para0;
//PRINT_L1(" L1_UploadAll: Enter.\n");
//PRINT_L1(" L1_UploadAll: Exit.\n");
return L1K_SUCCESS;
}
//-----------------------------------------------------------------------------
//L1_DownloadToFlash
//-----------------------------------------------------------------------------
/*
routine description:
Download File to Flash
arguments:
return value:
0x00 - success
others - error
*/
UCHAR L1_DownloadToFlash(ULONG BulkFlashAddr, ULONG BulkSize) USING_0
{
//PRINT_L1(" L1_DownloadToFlash: Enter.\n");
G_BulkFlashAddr = BulkFlashAddr;
G_BulkSize = BulkSize;
G_BulkOutSize = 0x00;
G_BulkFlash = 0x01;
G_BulkSRAMAddr = 0x00;
//richie@0125
XBYTE[0x25a1] = K_USB_AP_OUT_OPEN;//0x10;
//PRINT_L1(" L1_DownloadToFlash: Exit.\n");
return L2K_SUCCESS;
}
//-----------------------------------------------------------------------------
//L1_UploadFromFlash
//-----------------------------------------------------------------------------
/*
routine description:
Upload File From Flash
arguments:
return value:
0x00 - success
others - error
*/
UCHAR L1_UploadFromFlash(ULONG BulkFlashAddr, ULONG BulkSize) USING_0
{
//PRINT_L1(" L1_UploadFromFlash: Enter.\n");
G_BulkFlashAddr = BulkFlashAddr;
G_BulkSize = BulkSize;
G_BulkFlash = 0x01;
G_BulkSRAMAddr = 0x00;
L2_SetSRAMDMA(0x0c00);
#if (CFAIDE)
L1_DMARdCFIDE(1, (UCHAR)(G_BulkFlashAddr>>24), (UCHAR)(G_BulkFlashAddr>>16), (UCHAR)(G_BulkFlashAddr>>8), (UCHAR)G_BulkFlashAddr, 1, 0x200);
#endif
#if (SD)
L1_DMARdSD(1, G_BulkFlashAddr, 1, 0x200);
#endif
L2_SetSRAMDMA((USHORT)G_BulkSRAMAddr+0x0c00);
//richie@0125
L2_SetUSBDMA(K_DMA_UsbDontCare, K_USB_AP_DMA_IN);//for ap
L2_DoDMA(K_DMA_SRAM, K_DMA_USB, 0x40, 0, 0);
//richie@0125
XBYTE[0x25a1] = K_USB_AP_IN_OPEN;//0x08;
//PRINT_L1(" L1_UploadFromFlash: Exit.\n");
return L2K_SUCCESS;
}
//patch4.4@richie@cisp begin
// add for isp from storage
//-----------------------------------------------------------------------------
//CARD_ISP
//-----------------------------------------------------------------------------
UCHAR CARD_ISP(void) USING_0
{
//patch5.0@richie@usbisp begin
BYTE fName[12] = {'S', 'U', 'N', 'P', 'L', 'U', 'S', ' ', 'B', 'I', 'N'};
WORD fHandle;
BYTE fispName[12] = {'U', 'S', 'B', 'I', 'S', 'P', ' ', ' ', 'B', 'I', 'N'};
WORD fispHandle;
UCHAR tmp1,tmp2,tmp3,tmp4,sts;
//BYTE msg[7] = {' ', 'F', 'a', 'i', 'l', ' ', 0};
//BYTE msg1[15] = {'F', 'i', 'l', 'e', ' ', 'N', 'o', 't', ' ', 'F', 'o', 'u', 'n', 'd', 0};
//patch5.0@richie@usbisp begin
EA = 0;
//patch5.0@richie@usbisp end
//Joe@2003.3.12 9:21 add begin
XBYTE[0x2000] = 0x00;
//Joe@2003.3.12 9:22 add end
//patch4.5@richie@isp upload mode
XBYTE[0x2000] = 0x06;
DOS_SetCurrDir(G_USR_Dir1Cluster);
fispHandle = File_Open(fispName, K_DOS_ReadFile, 0);
if (fispHandle != 0)
{
sts = M_Card_File_Read(fispHandle, K_DOS_DstDram, 0x1000, 0x00000000, 0);
if(!sts)
{
// DbgPrint("Cannot read BIN file\n");
return L1K_ERROR_GENERAL;
}
File_Close(fispHandle, fispName, K_DOS_ReadFile, 0);
}
else
{
UI_PrintOSDString("ISPF not Found"/*msg1*/, 0, 4, UI_MENU_BG_COLOR_ON | UI_MENU_TITLE_TEXT_COLOR);
L2_Wait(5000);
File_CloseErr(fispHandle, K_DOS_ReadFile);
//DbgPrint("File Not Found!!\n");
}
DOS_SetCurrDir(G_USR_Dir1Cluster);
fHandle = File_Open(fName, K_DOS_ReadFile, 0);
if (fHandle != 0)
{
sts = M_Card_File_Read(fHandle, K_DOS_DstDram, G_DOS_FileSizeKeep, K_ISP_CARD_ISP_DRAM_ADDR, 0);
if(!sts)
{
// DbgPrint("Cannot read BIN file\n");
return L1K_ERROR_GENERAL;
}
UI_PrintOSDULong((ULONG)G_DOS_FileSizeKeep, 5, 3, UI_MENU_BG_COLOR_ON | UI_MENU_TITLE_TEXT_COLOR);
//patch4.3@richie@je0531 begin check SUNP flag in DRAM
L2_DRAMSetStartAddr(K_ISP_CARD_ISP_DRAM_ADDR + (0xF0 >> 1),1);
L2_DRAMReadWord(&tmp1,&tmp2);
L2_DRAMReadWord(&tmp3,&tmp4);
if ( (tmp1 == 'S') && (tmp2 == 'u') && (tmp3 == 'N') && (tmp4 == 'p')
&& (G_ucISPCheck1 == 0x55) && (G_ucISPCheck2 == 0xAA) )
{
P1 = 0x33;
// DbgPrint("CARD_ISP: ISP begin\n");
G_ucISPCheck2 = 0xBB;
L1_ISP(K_ISP_CARD_ISP_DRAM_ADDR, 0, 0, G_DOS_FileSizeKeep >> 8);
}
else
{
P1 = 0x34;
//DbgPrint("CARD_ISP: ISP Download to DRAM fail\n");
UI_PrintOSDString(" Fail "/*msg*/, 0, 4, UI_MENU_BG_COLOR_ON | UI_MENU_TITLE_TEXT_COLOR);
while (1) ;
G_ISP = 0;
EA = 1;
}
//patch4.3@richie@je0531 end check SUNP flag in DRAM
}
else
{
P1 = 0x35;
UI_PrintOSDString("File not Found"/*msg1*/, 0, 4, UI_MENU_BG_COLOR_ON | UI_MENU_TITLE_TEXT_COLOR);
L2_Wait(5000);
File_CloseErr(fHandle, K_DOS_ReadFile);
//DbgPrint("File Not Found!!\n");
}
//patch5.0@richie@usbisp end
}
//patch4.4@richie@cisp end
//patch4.5@yichang@badpixel begin
#if (NANDF_OPTION == 1 && CARD_OPTION == 1)
UCHAR L1_BadPixelDRAMToNAND(void) USING_0
{
UCHAR i, blockNum, startBlock, pageNum, pageCnt;
ULONG addr;
USHORT bi;
// UCHAR tmp2, tmp3;
USHORT RawWidth, RawHeight, tmp;
ULONG backAddr;
ULONG dSize = 0;
ULONG fileSize;
printf("Enter to badpixel new\n");
printf("G_wValueLock=%x\n",G_wValueLock);
RawWidth = XBYTE[0x276b];
tmp = (USHORT)(XBYTE[0x276c] << 8);
RawWidth = tmp + RawWidth;
RawHeight = XBYTE[0x276d];
tmp = (USHORT)(XBYTE[0x276e] << 8);
RawHeight = tmp + RawHeight;
G_BulkDRAMAddr = 0x40000; //reserver 512k bytes for ISP
EA = 0;
XBYTE[0x25a1] = K_USB_AP_OUT_OPEN;//0x10;
//yichang@08702@variable file length
fileSize = (ULONG)((ULONG)G_wValueLock * (ULONG)256);
backAddr = G_BulkDRAMAddr + (ULONG)(fileSize/2);
printf("fileSize=%lx\n",fileSize);
while (fileSize > 1024)
{
L2_SetUSBDMA(K_USB_AP_DMA_OUT, K_DMA_UsbDontCare);//for ap
L2_SetDRAMDMA(G_BulkDRAMAddr + (dSize / 2));
//async
L2_DoDMA(K_DMA_USB,K_DMA_DRAM,1024,1,0);
for (bi = 0;bi < 16;bi++)
{
while (XBYTE[K_USB_AP_OUT_BUF_SIZE] > 0) ; //wait for 0 in bulk buffer
XBYTE[0x25a1] = K_USB_AP_OUT_OPEN;//0x10;//open bulk out
while ((XBYTE[0x25c2] & K_USB_AP_OUT_ACK_MASK) == 0) ; //wait pc ack
XBYTE[0x25c2] = XBYTE[0x25c2] & K_USB_AP_OUT_ACK_RESET;//reset 0x25c2
}
while (XBYTE[K_USB_AP_OUT_BUF_SIZE] > 0) ; //wait for 0 in bulk buffer
fileSize -= 1024;
dSize += 1024;
}
if (fileSize > 0)
{
L2_SetUSBDMA(K_USB_AP_DMA_OUT, K_DMA_UsbDontCare);//for ap
L2_SetDRAMDMA(G_BulkDRAMAddr + (dSize / 2));
//async
L2_DoDMA(K_DMA_USB,K_DMA_DRAM,fileSize,1,0);
for (bi = 0;bi < (fileSize/64);bi++)
{
while (XBYTE[K_USB_AP_OUT_BUF_SIZE] > 0) ; //wait for 0 in bulk buffer
XBYTE[0x25a1] = K_USB_AP_OUT_OPEN;//0x10;//open bulk out
while ((XBYTE[0x25c2] & K_USB_AP_OUT_ACK_MASK) == 0) ; //wait pc ack
XBYTE[0x25c2] = XBYTE[0x25c2] & K_USB_AP_OUT_ACK_RESET;//reset 0x25c2
}
while (XBYTE[K_USB_AP_OUT_BUF_SIZE] > 0) ; //wait for 0 in bulk buffer
}
/*
L2_DRAMSetStartAddr(G_BulkDRAMAddr+512, K_SDRAM_Prefetch);
L2_DRAMReadWord(&tmp2,&tmp3);
printf("A:tmp2=%bx,tmp3=%bx\n",tmp2,tmp3);
L2_DRAMSetStartAddr(G_BulkDRAMAddr+513, K_SDRAM_Prefetch);
L2_DRAMReadWord(&tmp2,&tmp3);
printf("B:tmp2=%bx,tmp3=%bx\n",tmp2,tmp3);
*/
//return 0;
startBlock = 0;
blockNum = 1;
if((RawWidth == K_SENSOR_CaptureWidth) && (RawHeight == K_SENSOR_CaptureHeight))
{
printf("full frame mode\n");
pageNum = 14;
pageCnt = 2; //2*512=1K
for(i=startBlock;i<(blockNum + startBlock);i++)
{
addr = backAddr + (ULONG)3584;
NANDF_AccessReserveBlock(K_NANDF_Reserve_FlashToDram, i, pageNum, pageCnt,addr );
}
L2_DoDRAMDMA(G_BulkDRAMAddr*2, backAddr*2, 7168);
}
else
{
printf("sub sample mode\n");
//printf("RawWidth=%d,RawHeight=%d",RawWidth,RawHeight);
//startBlock = 1;
pageNum = 0;
//pageCnt = 14; //14*512=7K
pageCnt = (UCHAR)((ULONG)K_SDRAM_BadPixelCoordBufSize/(ULONG)256);
for(i=startBlock;i<(blockNum + startBlock);i++)
{
addr = backAddr;
NANDF_AccessReserveBlock(K_NANDF_Reserve_FlashToDram, i, pageNum, pageCnt,addr );
}
L2_DoDRAMDMA(G_BulkDRAMAddr*2, backAddr*2+7168, 1024);
}
//write 8K (16 pages) to NAND
//G_BulkDRAMAddr = 0x40000;
pageCnt = 16;
for(i=startBlock;i<(blockNum+startBlock);i++)
{
addr = backAddr + ((ULONG)i-startBlock)*(G_Card_BlockSize/2);
NANDF_AccessReserveBlock(K_NANDF_Reserve_DramToFlash, i, 0, pageCnt, addr);
}
return L2K_SUCCESS;
}
#endif
//patch4.5@yichang@badpixel end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -