亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? k9k2g16.c

?? 2440 cpu test
?? C
?? 第 1 頁 / 共 2 頁
字號:
#define NF_RSTECC()			{rNFCONT|=(1<<4);}
#define NF_RDDATA() 		(rNFDATA)
#define NF_RDDATA16() 		((*(volatile unsigned short*)0x4E000010) )

#define NF_WRDATA(data) 	{rNFDATA=data;}

// RnB Signal
#define NF_CLEAR_RB()    		{rNFSTAT |= (1<<2);}	// Have write '1' to clear this bit.
#define NF_DETECT_RB()    		{while(!(rNFSTAT&(1<<2)));}	// edge detect.


#define ID_K9S1208V0M	0xec76
#define ID_K9K2G16U0M	0xecca

#define BAD_MARK	(0x44444444)

#if 1
// HCLK=100Mhz
#define TACLS		0	// 1-clk(0ns) 
#define TWRPH0		6	// 3-clk(25ns)
#define TWRPH1		0	// 1-clk(10ns)  //TACLS+TWRPH0+TWRPH1>=50ns
#else
// HCLK=50Mhz
#define TACLS		0  //1clk(0ns)
#define TWRPH0		1  //2clk(25ns)
#define TWRPH1		0  //1clk(10ns)
#endif


static U32 se16Buf[32/2]={
	0xffffffff,0xffffffff,0xffffffff,0xffffffff,
	0xffffffff,0xffffffff,0xffffffff,0xffffffff,
	0xffffffff,0xffffffff,0xffffffff,0xffffffff,
	0xffffffff,0xffffffff,0xffffffff,0xffffffff
};


void InputTargetBlock16(void)
{
	U32 no_block, no_page, no_byte;
	
	Uart_Printf("\nSource size:0h~%xh\n",downloadProgramSize);
	Uart_Printf("\nAvailable target block number: 0~2048\n");
	Uart_Printf("Input target block number:");
    targetBlock=Uart_GetIntNum();	// Block number(0~4095)
    if(targetSize==0)
    {
    	#if 0
    	Uart_Printf("Input target size(0x4000*n):");
    	targetSize=Uart_GetIntNum();	// Total byte size
	#else
   	Uart_Printf("Input program file size(bytes): ");
    	targetSize=Uart_GetIntNum();	// Total byte size
    	#endif
    }
	
	no_block = (U32)((targetSize/2048)/64);
	no_page = (U32)((targetSize/2048)%64);
	no_byte = (U32)(targetSize%2048);
	Uart_Printf("File:%d[%d-block,%d-page,%d-bytes].\n", targetSize, no_block, no_page, no_byte);
}


static int NF16_EraseBlock(U32 block)
{
    U32 blockPage=(block<<6);
    int i;

    NFConDone16=0;
    rNFCONT|=(1<<9); //Enable RnB Interrupt
    rNFCONT|=(1<<10); //Enable Illegal Access Interrupt
    pISR_NFCON= (unsigned)NFCon_Int16;
    rSRCPND=BIT_NFCON;
    rINTMSK=~(BIT_NFCON);

#if BAD_CHECK
    if(NF16_IsBadBlock(block))
	return FAIL;
#endif

	NF_nFCE_L();
    
	NF_CMD(0x60);   // Erase one block 1st command, Block Addr:A11-A27
	// Address 3-cycle
	NF_ADDR(blockPage&0xff);	    // A[18:11]
	NF_ADDR((blockPage>>8)&0xff);   // A[26:19]
	NF_ADDR((blockPage>>16)&0xff);	// A27


	NF_CLEAR_RB();
	NF_CMD(0xd0);	// Erase one blcok 2nd command

	 while(NFConDone16==0);
	 rNFCONT&=~(1<<9);   // Disable RnB Interrupt
	 rNFCONT&=~(1<<10); // Disable Illegal Access Interrupt
	 if(rNFSTAT&0x8) return FAIL;
 
	NF_CMD(0x70);   // Read status command

    if (NF_RDDATA()&0x1) // Erase error
    {	
    	NF_nFCE_H();
	Uart_Printf("[ERASE_ERROR:block#=%d]\n",block);
//	NF16_MarkBadBlock(block);
	return FAIL;
    }
    else 
    {
    	NF_nFCE_H();
        return OK;
    }
}

void __irq NFCon_Int16(void)
{
       NFConDone16=1;
	rINTMSK|=BIT_NFCON;
	ClearPending(BIT_NFCON);
	if(rNFSTAT&0x8)	Uart_Printf("Illegal Access is detected!!!\n");

  }



static int NF16_IsBadBlock(U32 block)
{
    int i;
    unsigned int blockPage;
    U32 bad_block_data;
    
    
    blockPage=(block<<6);	// For 2'nd cycle I/O[7:5] 
    
	NF_nFCE_L();

	NF_CLEAR_RB();

	NF_CMD(0x00);		 // read command
	NF_ADDR((1024+0)&0xff);			// 2060 = 0x080c
	NF_ADDR(((1024+0)>>8)&0xff);		// A[10:8]
	NF_ADDR((blockPage)&0xff);		// A[11;18]
	NF_ADDR((blockPage>>8)&0xff);	// A[26:19]
	NF_ADDR((blockPage>>16)&0xff);	// A27
	NF_CMD(0x30);	// 2'nd command
	NF_DETECT_RB();	 // Wait tR(max 12us)

    bad_block_data=NF_RDDATA();  // mark bad block at first word of spare area

	NF_nFCE_H();    

       if(bad_block_data!=0xffffffff)
    {
    	Uart_Printf("[ block %d has been marked as a bad block(%x)]\n",block,bad_block_data);
    	return FAIL;
    }
    else
    {
     	return OK;
    }
}


static int NF16_MarkBadBlock(U32 block)
{
    	int i;
    	U32 blockPage=(block<<6);

	se16Buf[0]=BAD_MARK;   // Bad blcok mark=0x4444
   
    
	NF_nFCE_L(); 
	NF_CMD(0x80);   // Write 1st command
	
	NF_ADDR((1024+0)&0xff);			// 2060 = 0x080c
	NF_ADDR(((1024+0)>>8)&0xff);	// A[10:8]
	NF_ADDR((blockPage)&0xff);	// A[11;18]
	NF_ADDR((blockPage>>8)&0xff);	// A[26:19]
	NF_ADDR((blockPage>>16)&0xff);	// A[27]
	
	NF_WRDATA(se16Buf[0]);	// Write Bad block information

	NF_CLEAR_RB();
	NF_CMD(0x10);   // Write 2nd command
	NF_DETECT_RB();

	NF_CMD(0x70);
    
	for(i=0;i<3;i++);  //twhr=60ns////??????
    
    if (NF_RDDATA()&0x1) // Spare arrray write error
    {	
    	NF_nFCE_H();
    	Uart_Printf("[Program error is occurred but ignored]\n");
    }
    else 
    {
    	NF_nFCE_H();
    }

    Uart_Printf("[block #%d is marked as a bad block]\n",block);
    return OK;
}


static int NF16_ReadPage(U32 block,U32 page,U32 *buffer)
{
    int i;
    unsigned int blockPage;
    U32 ecc_low,ecc_high;
    U32 Mecc0, Mecc1, Secc;
    U16 ecc0, ecc1, ecc2, ecc3;
    U32 *bufPt=buffer;
    U32 se[16];	   
    
    blockPage=(block<<6)+page;
	
    NF_RSTECC();    // Initialize ECC
    NF_MECC_UnLock();
    
    NF_nFCE_L();    

    NF_CLEAR_RB();
    NF_CMD(0x00);	// Read command
    NF_ADDR(0); 	// Column (A[7:0]) = 0
    NF_ADDR(0);		// A[10:8]
    NF_ADDR((blockPage)&0xff);	// A[18:11]
    NF_ADDR((blockPage>>8)&0xff);	// A[26:19]
    NF_ADDR((blockPage>>16)&0xff);  // A27
    NF_CMD(0x30);	// 2'nd command
    NF_DETECT_RB();

#if TRANS_MODE16==C_LANG
    for(i=0;i<512;i++) {
    	*bufPt++=NF_RDDATA();	// Read one page
    }
#elif TRANS_MODE16==DMA
	// Nand to memory dma setting
    rSRCPND=BIT_DMA0;	// Init DMA src pending.
    rDISRC0=NFDATA; 	// Nand flash data register
    rDISRCC0=(0<<0) | (1<<0); //arc=AHB,src_addr=fix
    rDIDST0=(unsigned)bufPt;
    rDIDSTC0=(0<<1) | (0<<0); //dst=AHB,dst_addr=inc;
    rDCON0=(1<<31)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(0<<23)|(1<<22)|(2<<20)|(2048/4/4);
	//Handshake,AHB,interrupt,(4-burst),whole,S/W,no_autoreload,word,count=128;

	// DMA on and start.
    rDMASKTRIG0=(1<<1)|(1<<0);

	while(!(rSRCPND & BIT_DMA0));	// Wait until Dma transfer is done.
    rSRCPND=BIT_DMA0;
#endif

    NF_MECC_Lock();


 // ECC check by hardware
   
   NF16_Spare_Data[0]=NF_RDDATA();  // Bad block Information
   NF_SECC_UnLock();
   Mecc0=NF_RDDATA();
   Mecc1=NF_RDDATA();
   NF_SECC_Lock();
   
   rNFMECCD0=((Mecc1&0xff00)<<16)|((Mecc0&0xff00)<<8)|((Mecc1&0xff)<<8)|((Mecc0&0xff));
   rNFMECCD1=(Mecc1&0xff000000)|((Mecc0&0xff000000)>>8)|((Mecc1&0xff0000)>>8)|((Mecc0&0xff0000)>>16);
  
   NF16_Spare_Data[1]=Mecc0;
   NF16_Spare_Data[2]=Mecc1;
   NF16_Spare_Data[3]=NF_RDDATA();

   Secc=NF_RDDATA();
   rNFSECCD=(Secc&0xff000000)|((Secc&0xff0000)>>8)|((Secc&0xff00)<<8)|(Secc&0xff);
  
   NF16_Spare_Data[4]=Secc;

   for(i=5;i<16;i++) {
    	NF16_Spare_Data[i]=NF_RDDATA();	// Read spare array with 4byte width
       }
  
    NF_nFCE_H();    

   if (((rNFESTAT0&0xf) == 0x0) &&((rNFESTAT1&0xf) == 0x0)){
       Uart_Printf("ECC OK !!!\n");
       return OK;
       }
    else {
	Uart_Printf("ECC FAIL !!!\n");
	return FAIL;
    	}

 
}



static int NF16_WritePage(U32 block,U32 page,U32 *buffer)
{
    int i;
    U32 blockPage,Mecc0, Mecc1, Secc;
    U32 *bufPt=buffer;
	
	blockPage=(block<<6)+page;
	
	NF_RSTECC();	// Initialize ECC
       NF_MECC_UnLock();
	   
	NF_nFCE_L(); 
	NF_CMD(0x80);   // Write 1st command
	NF_ADDR(0); 	// Column (A[7:0]) = 0
	NF_ADDR(0);		// A[10:8]
	NF_ADDR((blockPage)&0xff);	// A[18:11]
	NF_ADDR((blockPage>>8)&0xff);	// A[26:19]
	NF_ADDR((blockPage>>16)&0xff);  // A7

	// Write page data.
	
#if TRANS_MODE16==C_LANG
	for(i=0;i<512;i++) {
		NF_WRDATA(*bufPt++);	// Write one page to NFM from buffer
	}
#elif TRANS_MODE16==DMA
	// Memory to Nand dma setting
	rSRCPND=BIT_DMA0;	// Init DMA src pending.
	rDISRC0=(unsigned)bufPt;	// Nand flash data register
	rDISRCC0=(0<<1) | (0<<0); //arc=AHB,src_addr=inc
	rDIDST0=NFDATA;
	rDIDSTC0=(0<<1) | (1<<0); //dst=AHB,dst_addr=fix;
	rDCON0=(1<<31)|(1<<30)|(1<<29)|(0<<28)|(1<<27)|(0<<23)|(1<<22)|(2<<20)|(2048/4);
	//Handshake,AHB,interrupt,unit,whole,S/W,no_autoreload,word,count=128;

	// DMA on and start.
	rDMASKTRIG0=(1<<1)|(1<<0);

	while(!(rSRCPND & BIT_DMA0));	// Wait until Dma transfer is done.
	rSRCPND=BIT_DMA0;	
#endif

   NF_MECC_Lock();

   se16Buf[0]=0xffffffff;	// Marking good block(lower 16-bit is valid)
   NF_WRDATA(se16Buf[0]);	// Write spare array(ECC and Mark)
   NF16_Spare_Data[0]=se16Buf[0];
		
   se16Buf[1]=rNFMECC0;
   se16Buf[2]=rNFMECC1;
  

    
  // check spare ecc
    NF_SECC_UnLock();
    for(i=1;i<3;i++) {
		NF_WRDATA(se16Buf[i]);	// Write spare array(ECC and Mark)
		NF16_Spare_Data[i]=se16Buf[i];
      }  
    NF_SECC_Lock();
 
    Secc=rNFSECC;
    se16Buf[4]=Secc;
   
    for(i=3;i<16;i++) {
		NF_WRDATA(se16Buf[i]);	// Write spare array(ECC and Mark)
		NF16_Spare_Data[i]=se16Buf[i];
      }    
    NF_CLEAR_RB();
    NF_CMD(0x10);	 // Write 2nd command
#if 1
       NF_DETECT_RB();
#else
       while(!((rNFSTAT&0x4)||(rNFSTAT&0x8)));
	
	if(rNFSTAT&0x8){
		Uart_Printf("Illegal Access is detected!!!\n");
              return FAIL;
	}
#endif
	NF_CMD(0x70);   // Read status command   
    
	for(i=0;i<3;i++);  //twhr=60ns
    
    if (NF_RDDATA()&0x1) {// Page write error
    	NF_nFCE_H();
		Uart_Printf("[PROGRAM_ERROR:block#=%d]\n",block);
		NF16_MarkBadBlock(block);
		return FAIL;
    } else {
    	NF_nFCE_H();
		return OK;
	}


}



static U32 NF16_CheckId(void)
{
    int i;
    U32 id;
    U16 id1, id2, id3, id4;
    
	NF_nFCE_L();

	NF_CLEAR_RB();
	NF_CMD(0x90);
	NF_ADDR(0x0);
	for (i=0; i<10; i++);

//read by halfword !!!
	id1 = NF_RDDATA16();	// read 4byte.
	id2 = NF_RDDATA16();
	id3 = NF_RDDATA16();
	id4 = NF_RDDATA16();

	id=((id4<<24)|(id3<<16)|(id2<<8)|id1);
	
 	NF_nFCE_H();

    return id;
}



static void NF16_Init(void)
{
	// for S3C2440

	rNFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4)|(1<<0);	
	// TACLS		[14:12]	CLE&ALE duration = HCLK*TACLS.
	// TWRPH0		[10:8]	TWRPH0 duration = HCLK*(TWRPH0+1)
	// TWRPH1		[6:4]	TWRPH1 duration = HCLK*(TWRPH1+1)
	// AdvFlash(R)	[3]		Advanced NAND, 0:256/512, 1:1024/2048
	// PageSize(R)	[2]		NAND memory page size
	//						when [3]==0, 0:256, 1:512 bytes/page.
	//						when [3]==1, 0:1024, 1:2048 bytes/page.
	// AddrCycle(R)	[1]		NAND flash addr size
	//						when [3]==0, 0:3-addr, 1:4-addr.
	//						when [3]==1, 0:4-addr, 1:5-addr.
	// BusWidth(R/W) [0]	NAND bus width. 0:8-bit, 1:16-bit.
	
	rNFCONT = (0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0);
	// Lock-tight	[13]	0:Disable lock, 1:Enable lock.
	// Soft Lock	[12]	0:Disable lock, 1:Enable lock.
	// EnablillegalAcINT[10]	Illegal access interupt control. 0:Disable, 1:Enable
	// EnbRnBINT	[9]		RnB interrupt. 0:Disable, 1:Enable
	// RnB_TrandMode[8]		RnB transition detection config. 0:Low to High, 1:High to Low
	// SpareECCLock	[6]		0:Unlock, 1:Lock
	// MainECCLock	[5]		0:Unlock, 1:Lock
	// InitECC(W)	[4]		1:Init ECC decoder/encoder.
	// Reg_nCE		[1]		0:nFCE=0, 1:nFCE=1.
	// NANDC Enable	[0]		operating mode. 0:Disable, 1:Enable.

//	rNFSTAT = 0;
    
//    Nand_Reset();
}




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一二三精品| 99免费精品在线观看| 国产精品乱人伦| 337p亚洲精品色噜噜噜| 成人免费黄色大片| 捆绑调教美女网站视频一区| 综合色天天鬼久久鬼色| 精品福利一二区| 欧美日韩国产另类一区| 99国产精品久久久久久久久久久| 麻豆成人av在线| 午夜欧美大尺度福利影院在线看| 亚洲欧洲av另类| 国产欧美日韩三区| 欧美大黄免费观看| 欧美高清视频一二三区| 欧美最猛性xxxxx直播| 成年人午夜久久久| 懂色av一区二区在线播放| 久久99国产精品成人| 午夜一区二区三区在线观看| 亚洲视频在线一区观看| 欧美高清在线精品一区| 久久影院午夜论| www欧美成人18+| 日韩免费看的电影| 91精品国产aⅴ一区二区| 欧美午夜精品一区二区蜜桃| 色婷婷综合久久久久中文| 成人h动漫精品| 成人va在线观看| 成人18视频在线播放| 成人aa视频在线观看| 成人美女视频在线观看18| 国产盗摄女厕一区二区三区| 国产一区二区三区观看| 国产精品一线二线三线精华| 精品制服美女久久| 美女网站色91| 国模一区二区三区白浆| 国产精品亚洲第一区在线暖暖韩国| 蜜臀av在线播放一区二区三区| 日韩黄色一级片| 毛片基地黄久久久久久天堂| 美女视频免费一区| 国产一区二区三区蝌蚪| 成人高清在线视频| 色婷婷av久久久久久久| 91黄色免费观看| 欧美精选在线播放| 日韩欧美国产精品| 国产亚洲人成网站| 日韩毛片在线免费观看| 亚洲综合成人在线视频| 日本亚洲电影天堂| 韩国视频一区二区| 粗大黑人巨茎大战欧美成人| 色综合久久九月婷婷色综合| 欧美三级乱人伦电影| 欧美电影免费观看高清完整版在 | 国产麻豆精品久久一二三| 激情综合网av| 成人综合婷婷国产精品久久免费| 高清不卡一区二区在线| 色嗨嗨av一区二区三区| 欧美一区二区播放| 精品国产91洋老外米糕| 国产精品盗摄一区二区三区| 一级日本不卡的影视| 青青草91视频| 国产 日韩 欧美大片| 在线精品观看国产| 欧美一级视频精品观看| 国产日本欧美一区二区| 一区二区三区中文字幕| 久久精品免费看| 99在线热播精品免费| 欧美一区二区大片| 中文字幕一区在线观看视频| 日韩精品一二三四| 成人app软件下载大全免费| 欧美日韩的一区二区| 国产欧美一区二区精品性色| 一区二区三区四区视频精品免费| 麻豆91免费看| 色琪琪一区二区三区亚洲区| 久久亚洲捆绑美女| 亚洲国产视频直播| 成人精品在线视频观看| 欧美一区二区美女| 亚洲精品中文在线影院| 久久99精品一区二区三区| 欧美性感一类影片在线播放| 26uuu色噜噜精品一区二区| 亚洲午夜影视影院在线观看| 国产91在线观看| 欧美一级欧美三级在线观看| 最新国产成人在线观看| 国产一区二区三区高清播放| 在线成人免费视频| 中文字幕在线一区免费| 韩国毛片一区二区三区| 欧美日韩一区二区欧美激情 | 18涩涩午夜精品.www| 六月丁香婷婷色狠狠久久| 色欧美88888久久久久久影院| 欧美精品一区二区三区在线播放| 亚洲妇女屁股眼交7| 91在线免费看| 国产亚洲精品7777| 毛片av一区二区| 欧美久久久久久久久中文字幕| 亚洲人亚洲人成电影网站色| 丁香婷婷综合网| 久久一夜天堂av一区二区三区| 蜜桃在线一区二区三区| 欧美色男人天堂| 亚洲综合免费观看高清完整版 | 一区二区不卡在线播放| 成人教育av在线| 亚洲国产精品ⅴa在线观看| 久久国产精品无码网站| 欧美剧在线免费观看网站 | 国产精品香蕉一区二区三区| 日韩一区二区不卡| 免费在线观看视频一区| 欧美一区二区三区免费在线看| 视频一区欧美精品| 欧美久久久久久久久久| 天堂久久久久va久久久久| 欧美日韩精品三区| 亚洲国产视频一区二区| 欧美色视频在线| 水蜜桃久久夜色精品一区的特点| 欧美性大战久久久久久久蜜臀 | 蜜臀国产一区二区三区在线播放 | 丰满少妇在线播放bd日韩电影| 久久久久久久综合色一本| 国产一区二区导航在线播放| 久久色中文字幕| 国产一区不卡在线| 国产欧美日韩视频在线观看| 成人h动漫精品| 一区二区三区欧美亚洲| 欧美日韩国产a| 奇米影视在线99精品| 日韩一级免费一区| 精品一二三四在线| 国产欧美一区二区精品久导航 | 国产视频亚洲色图| 国产精品一区二区三区四区| 国产亚洲精品免费| bt7086福利一区国产| 亚洲日本韩国一区| 欧美日韩久久不卡| 久久精品国产999大香线蕉| 精品国产乱码久久久久久久久| 九一九一国产精品| 国产日韩欧美亚洲| 91美女在线观看| 日韩一区精品视频| 久久美女艺术照精彩视频福利播放| 成人听书哪个软件好| 依依成人精品视频| 日韩欧美一区在线观看| 国产成人夜色高潮福利影视| 亚洲人成网站影音先锋播放| 欧美日韩高清影院| 国产成人精品一区二区三区四区| 亚洲婷婷综合色高清在线| 欧美日韩国产在线播放网站| 久久成人av少妇免费| 中文一区在线播放| 欧美日韩你懂得| 国产精品99久久久| 亚洲一区精品在线| 久久久久久综合| 欧美在线视频不卡| 国产在线国偷精品产拍免费yy| 亚洲天堂免费在线观看视频| 日韩亚洲欧美一区二区三区| jiyouzz国产精品久久| 天天爽夜夜爽夜夜爽精品视频| 久久久国产综合精品女国产盗摄| 91福利视频久久久久| 国产精品456| 午夜伦理一区二区| 中文字幕色av一区二区三区| 欧美精品色综合| 成人高清视频免费观看| 免费在线观看不卡| 亚洲黄色在线视频| 国产欧美一区二区在线| 欧美一级在线观看| 色av成人天堂桃色av| 国产成人综合亚洲网站| 日韩国产在线观看| 亚洲一区二区三区四区中文字幕| 久久久www成人免费无遮挡大片 | 欧美国产国产综合|