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

📄 main.c

📁 台湾凌阳方案300万数码相机源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
		XBYTE[0x2000] = 0x00;
		//Joe@2003.3.12 9:22 add end
		//patch4.5@richie@isp upload mode
		XBYTE[0x2000] =	0x06;
		//richie@0125
		XBYTE[0x25a1] =	K_USB_AP_OUT_OPEN;//0x10;
		//patch5.0@richie@usbisp begin
		UI_PrintOSDString("Dnld.0000/",	0, 1, UI_MENU_BG_COLOR_ON |	UI_MENU_TITLE_TEXT_COLOR);
		UI_PrintOSDNumber(G_ISPSecCnt, 10, 1, 4);
		//patch5.0@richie@usbisp end
		while (G_BulkSize >	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

			G_BulkSize -= 1024;
			dSize += 1024;

			//patch5.0@richie@usbisp begin
			UI_PrintOSDNumber((G_ISPSecCnt - (G_BulkSize / 256)), 5, 1,	4);
			//patch5.0@richie@usbisp end
		}

		if (G_BulkSize > 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,G_BulkSize,1,0);

			for	(bi	= 0;bi < (G_BulkSize/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
		}

		//patch5.0@richie@usbisp begin
		UI_PrintOSDNumber(G_ISPSecCnt, 5, 1, 4);
		//UI_PrintOSDString("				", 0, 1, UI_MENU_BG_COLOR_ON | UI_MENU_TITLE_TEXT_COLOR);
		//patch5.0@richie@usbisp end

		//patch4.3@richie@je0531 begin check SUNP flag in DRAM
				//patch4.4@richie@isp for osdfont offset
		L2_DRAMSetStartAddr(G_ISPDRAMAddr +	(0xF0 >> 1),1);
			L2_DRAMReadWord(&tmp1,&tmp2);
		L2_DRAMReadWord(&tmp3,&tmp4);

		if ( (tmp1 == 'S') && (tmp2	== 'u')	&& (tmp3 ==	'N') &&	(tmp4 == 'p')
			&& (G_ISP == 1)	&& (G_ucISPCheck1 == 0x55) && (G_ucISPCheck2 ==	0xAA) )
		{
			//DbgPrint("MAIN_PreDpc: ISP begin\n");
			G_ucISPCheck2 =	0xBB;


			//patch4.5@richie@checksum isp begin
#if	(ISPCHECKSUM_OPTION)
			{
				ULONG len,i;
				WORD checksum;
				ULONG binLen;

				checksum = 0;
				L2_DRAMSetStartAddr(G_ISPDRAMAddr,1);
				printf("checksum begin\n");
				binLen = (ULONG)G_ISPSecCnt	<< 7;
				for	(i = 0;i < binLen;i++)
				{
						L2_DRAMReadWord(&tmp1,&tmp2);
					checksum +=	tmp1;
					checksum +=	tmp2;
				}
				printf("i =	%ld,checksum (word)	= %x,G_usISPCheckSum = %x\n",i,checksum,G_usISPCheckSum);
				if (G_usISPCheckSum	!= checksum)
				{
					UI_PrintOSDString("	 Dram CheckSum	 ",	0, 1, UI_MENU_BG_COLOR_ON |	UI_MENU_TITLE_TEXT_COLOR);
					UI_PrintOSDString("                               ",	0, 2, UI_MENU_BG_COLOR_ON |	UI_MENU_TITLE_TEXT_COLOR);
					UI_PrintOSDULong ((ULONG)checksum	  ,	0, 2, UI_MENU_BG_COLOR_ON |	UI_MENU_TITLE_TEXT_COLOR);
					UI_PrintOSDString("	   0x"			  ,	0, 2, UI_MENU_BG_COLOR_ON |	UI_MENU_TITLE_TEXT_COLOR);
					UI_PrintOSDString("                              ",	0, 3, UI_MENU_BG_COLOR_ON |	UI_MENU_TITLE_TEXT_COLOR);
					UI_PrintOSDString("	 CheckSum Err	 ",	0, 4, UI_MENU_BG_COLOR_ON |	UI_MENU_TITLE_TEXT_COLOR);
					while (1) ;
				}
			}
#endif
			//patch4.5@richie@checksum isp end

					L1_ISP(G_ISPDRAMAddr, G_ISPROMAddr,	G_ISPSecAddr, G_ISPSecCnt);
		}
		else
		{
			//DbgPrint("MAIN_PreDpc: ISP Download to DRAM fail\n");
			//patch4.4@richie@isp for download fail
			UI_PrintOSDString("	   FAIL	   ", 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

	}



	//richie@isp0426 mark
	/*
		if ((G_ISP == 1) &&	(G_LastBulk	== 1))
		{
				G_LastBulk = 0;
				G_ISP =	1;
				DbgPrint("MAIN_PreDpc: ISP has begun\n");
		//richie@isp 0326
		EA = 0;
				L1_ISP(G_ISPDRAMAddr, G_ISPROMAddr,	G_ISPSecAddr, G_ISPSecCnt);
		}
	*/
}
//richie@si0418
//if (G_ui_status == K_UI_mass_storage)
if ( ((G_UIStatus &	0xff00)	== K_UISTATUS_USBMODE_MASS)	 //yichang@replace
  && (G_CameraOptions.Storage == K_UIOPTION_STORAGE_MSDC) )
	//richie@mi	0409
	USBMSDC_ReadWriteData();


//richie@si0418
#if	(USBSIDC_OPTION	== 1)
//if (G_ui_status == K_UI_still_image_class)
if ( ((G_UIStatus &	0xff00)	== K_UISTATUS_USBMODE_MASS)	 //yichang@replace
  && (G_CameraOptions.Storage == K_UIOPTION_STORAGE_SIDC) )
	SIDC_ReadWriteData();
#endif
}

//-----------------------------------------------------------------------------
//MAIN_PostDpc
//-----------------------------------------------------------------------------
void MAIN_PostDpc(void)	USING_0
/*++

Routine	Description:

		post-processing	after deferred procedure call

Arguments:

		none

Return Value:

		none

--*/
{
#if	AAA_OPTION
#ifdef ICM107B
	//richie@ae0304
	//STROBE_Charge();
#endif
#endif

}

//-----------------------------------------------------------------------------
//MAIN_EventPreDpc		  cch@10/15
//-----------------------------------------------------------------------------
void MAIN_EventPreDpc(void)	USING_0
/*++

Routine	Description:

		pre-processing before deferred procedure call

Arguments:

		none

Return Value:

		none

--*/
{
		  /*
		  UCHAR	temp_key;

		  L2_ConfigGPIOBit(1,0);
		  L2_GetGPIOBit(1,&temp_key);

		  //XBYTE[2038]	&= 0xfd;
		  //temp_key = XBYTE[0x2040] & 0x02;

		  if(temp_key >	0)
		  {
			  G_UI_USBConnect =	K_UI_USB_DISCONNECT; //yichang
			   ////printf("USB connect=%bx\n",temp_key);
		  }
		 else
		  {
			   G_UI_USBConnect = K_UI_USB_CONNECT; //yichang
			   ////printf("USB connect=%bx\n",temp_key);

		  }
		  */

		G_ucState &= 0xf0;		//set FW idle
		G_ucState2 |= 0x01;		//set FW Event Ready
		G_ucState |= 0x01;		//set FW ready

		//ada@0415 test	ui
		TIMER0_Stop();
//		  EA = 0;

/////!!!		DbgPrint("MAIN_EventPreDpc:	Start operation\n");

		P1 = 0x00;
}

//-----------------------------------------------------------------------------
//MAIN_EventPostDpc
//-----------------------------------------------------------------------------
void MAIN_EventPostDpc(void) USING_0
/*++

Routine	Description:

		post-processing	after deferred procedure call

Arguments:

		none

Return Value:

		none

--*/
{
//		  EA = 1;

		G_bRequestLock = 0;		//clear	G_bRequestLock
		G_ucState &= 0xf0 ;		//set FW idle

		//ada@0415 test	ui
	//patch4.2@richie@0528
	if (G_UI_USBConnect	== K_UI_USB_DISCONNECT)
			TIMER0_Start();
/////!!!		DbgPrint("MAIN_EventPostDpc: Stop operation\n");

		P1 = 0xff;
}

#if	AAA_OPTION
//richie@ae0304
//-----------------------------------------------------------------------------
//STROBE_Charge
//-----------------------------------------------------------------------------
#if 0  //liliuhai
void STROBE_Charge(void) USING_0
/*++

Routine	Description:

		check charge of	strobe

Arguments:

		none

Return Value:

		none

--*/
{
	//charge output	enable
	//XBYTE[0x2038]	|= 0x08;
	//ready	output	disable
	//XBYTE[0x2038]	&= 0xef;
	//strobe tri	enable
	//XBYTE[0x2039]	|= 0x10;
	//led output	enable
	//XBYTE[0x203a]	|= 0x08;
	//led off
	//XBYTE[0x2032]	&= 0xf7;

////	G_ucStrobeCnt++;
////	if (G_ucStrobeCnt <	0x03) return;
////	G_ucStrobeCnt =	0;

	if ((XBYTE[0x2040] & 0x10) == 0)  //charge complete
	{
		//led on
//		XBYTE[0x2032] |= 0x08;

		G_ucStrobeRdy++;
		if (G_ucStrobeRdy >	20)
		{
			//don't	charge
			XBYTE[0x2030] &= 0xf7;
			G_ucStrobeRdy =	0;
		}
	}
	else
	{
		//led off
//		XBYTE[0x2032] &= 0xf7;

		G_ucStrobeRdy =	0;
		  //yichang@replace
		  /*
		if ((G_pvconfig[K_UI_Preview_Strobe] ==	K_UI_Preview_Strobe_Auto)
		|| (G_pvconfig[K_UI_Preview_Strobe]	== K_UI_Preview_Strobe_Fill)
		|| (G_pvconfig[K_UI_Preview_Strobe]	== K_UI_Preview_Strobe_Redeye))
			//charge
			XBYTE[0x2030] |= 0x08;
		else
		*/
			//don't	charge
			XBYTE[0x2030] &= 0xf7;

	}


}

#endif
#endif

//richie@mi	0409
UCHAR USBMSDC_ReadWriteData(void) USING_0
{
	if (G_ucBulkPhase == K_InDataPhaseRead)
	{
	//patch4.5@richie@mlun begin
	#if	(MLUN_OPTION)
//##
	MLUN_CheckCard();
	#endif
	//patch4.5@richie@mlun end

		//patch4.2@richie@0528 marked
		//TIMER0_Stop();
		//richie@mi	0409
		XBYTE[0x25d2] &= K_USB_CLASS_IN_ACK_RESET;	//Bulk in 1	acked interrupt	disable

P1 = 0xf5;
		DOS_ReadMoreSector(K_DOS_DstUsb,G_USBMSDC_ulLogicalBlockAddress,G_USBMSDC_ulSdramBufferAddress,G_ulStorDataLength);
P1 = 0xff;
				G_USBMSDC_ucSenseCodeIdx = 0x00;
				G_USBMSDC_ucCSWStatus =	K_USBMSDC_CommandPassed;
		USBMSDC_SendStatus();
		G_ucBulkPhase =	K_InCompletionPhase;
		XBYTE[0x25a1] |= K_USB_CLASS_IN_OPEN;//0x01;  //open bulk in to	send status
		XBYTE[0x25d2] |= K_USB_CLASS_IN_ACK_MASK;  //Bulk in 1 acked interrupt enable
		//patch4.2@richie@0528 marked
		//TIMER0_Start();
	}
	else if	(G_ucBulkPhase == K_OutDataPhaseWrite)
	{
	//patch4.5@richie@mlun begin
	#if	(MLUN_OPTION)
//##
	MLUN_CheckCard();
	#endif
	//patch4.5@richie@mlun end

		//patch4.2@richie@0528 marked
		//TIMER0_Stop();
		//richie@mi	0409
		XBYTE[0x25d2] &= K_USB_CLASS_OUT_ACK_RESET;	 //Bulk	out	1 acked	interrupt disable

P1 = 0x5f;
		DOS_WriteMoreSector(K_DOS_DstUsb,G_USBMSDC_ulLogicalBlockAddress,G_USBMSDC_ulSdramBufferAddress,G_ulStorDataLength);
P1 = 0xff;
				G_USBMSDC_ucSenseCodeIdx = 0x00;
				G_USBMSDC_ucCSWStatus =	K_USBMSDC_CommandPassed;
		USBMSDC_SendStatus();
		G_ucBulkPhase =	K_InCompletionPhase;
		XBYTE[0x25a1] |= K_USB_CLASS_IN_OPEN;//0x01;  //open bulk in to	send status
		XBYTE[0x25d2] |= K_USB_CLASS_OUT_ACK_MASK;	//Bulk out 1 acked interrupt enable
		//patch4.2@richie@0528 marked
		//TIMER0_Start();
	}

	return TRUE;
}

UCHAR USBMSDC_SendStatus(void) USING_0
{
		PUSBMSDC_CSW pCSW;
	UCHAR i;

		pCSW = (PUSBMSDC_CSW) G_ucStorData;

		//richie@1129
		pCSW->dCSWSignature	= 0x55534253;
		pCSW->dCSWTag =	G_USBMSDC_pCBW->dCBWTag;
	//???
		pCSW->dCSWDataResidue =	0;//M_ByteSwapOfDword(G_USBMSDC_ulAllocateLength - G_ulStorDataIndex);
		pCSW->bCSWStatus = G_USBMSDC_ucCSWStatus;


		for	(i = 0;	i <	K_USBMSDC_CSW_SIZE;	i++)
				XBYTE[K_USB_CLASS_IN_DATA] = G_ucStorData[i];

		return TRUE;
}

// wyeo@0521, patch	4.2
#if	(NANDF_OPTION == 1 && CARD_OPTION == 1)

#include "asicreg.h"

#if	K_TEST_RESERVE_BLOCK
xdata	UCHAR	G_Match;
void SDRAM_CardSetStartAddress(ULONG address, BYTE prefetch);

//-----------------------------------------------------------------------------
// TestReserveBlock
//-----------------------------------------------------------------------------
// Eample for nand reserve block testing

BYTE TestReserveBlock(void)	USING_0
{
	BYTE sts;
	WORD k;
	BYTE ent0, ent1;
	BYTE match;
	ULONG ramAddr;
	BYTE blkNumber;
	BYTE pageNumber;
	BYTE pageCount;

	G_Match	=0;
	match =	FALSE;


	// use dram	address	at 0 for temporary buffer
	ramAddr	= 0x0;

	// Don't turn this part	on,	unless you have	reformat the nand using
	// this	4.2	version	code. Older	version	just reserve 0th block.
	// This	part of	code write block 7.
	#if	0

	blkNumber =	7;
	pageNumber = 8;
	pageCount =	1;
	SDRAM_CardSetStartAddress(ramAddr, FALSE);
	// set dram	to 0, 255
	for	(k=0; k	< 256; k+=2)
	{
		M_DRAM_WriteWord(k,	k+1);
	}
	// write block 7, page 8
	sts	= TRUE;
	sts	= NANDF_AccessReserveBlock(K_NANDF_Reserve_DramToFlash,	blkNumber, pageNumber, pageCount, ramAddr);
	if (sts)
	{
		// clear dram
		SDRAM_CardSetStartAddress(ramAddr, FALSE);
		for	(k=0; k	< 256; k+=2)
		{
			M_DRAM_WriteWord(0,	0);
		}
		// read	block 7, page 8
		sts	= NANDF_AccessReserveBlock(K_NANDF_Reserve_FlashToDram,	blkNumber, pageNumber, pageCount, ramAddr);
		if (sts)
		{
			// compare if read back	page is	0 to 255
			SDRAM_CardSetStartAddress(ramAddr, TRUE);
			match =	TRUE;
			for	(k=0; k	< 256; k+=2)
			{
				M_DRAM_ReadWord(ent0, ent1);
				if (ent0 !=	k)
					match =	FALSE;
				if (ent1 !=	k+1)
					match =	FALSE;
				DbgPrint("7th block	%bx\n",	ent0);
				DbgPrint("7th block	%bx\n",	ent1);
			}
			if (match)
				G_Match	= 1;
		}
	}
	#endif


	// use sram	address	G_ucDataBuffer as temporary	buffer
	// write 0th block
	#if	1
	match =	FALSE;
	blkNumber =	0;
	pageNumber = 8;
	pageCount =	1;
	// set sram	to 0, 255
	for	(k=0; k	< 256; k++)
		G_ucStorData[k]=k;
	// write block 0, page 8
	sts	= TRUE;
	sts	= NANDF_AccessReserveBlock(K_NANDF_Reserve_SramToFlash,	blkNumber, pageNumber, pageCount, 0x0);
	if (sts)
	{
		// clear sram
		for	(k=0; k	< 256; k++)
			G_ucStorData[k]=0;
		// read	block 0, page 8
		sts	= NANDF_AccessReserveBlock(K_NANDF_Reserve_FlashToSram,	blkNumber, pageNumber, pageCount, 0x0);
		if (sts)
		{
			// compare if read back	page is	0 to 255
			match =	TRUE;
			for	(k=0; k	< 256; k++)
			{
				DbgPrint("0th block	%bx\n",	G_ucStorData[k]);
				if (G_ucStorData[k]	!= k)
					match =	FALSE;
			}
			if (match)
				G_Match++;
		}
	}
	#endif

	DbgPrint("TestReserveBlock:	%bd\n",	G_Match);

	return sts;
}
#endif
#endif



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -