⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 l1_pc.c

📁 台湾凌阳方案300万数码相机源代码
💻 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 + -