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

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

?? norflash.c

?? 這是一個基于硬件平臺s3c44B0和操作系統為ucos的矩陣鍵盤的程序
?? C
字號:
#include "44blib.h"
#include "uart_lib.h"
#include "NorFlash.h"


#define BufLength  4096
volatile unsigned short g_Buf16[BufLength]; 


#define ROM_BASE  	0
#define	CMD_ADDR0	*((volatile unsigned short *)(0x5555*2+ROM_BASE))
#define	CMD_ADDR1	*((volatile unsigned short *)(0x2aaa*2+ROM_BASE))



void DelayCycle(unsigned short n)
{
	while(n--);
}


static void SWPIDEntry(void)
{
	CMD_ADDR0 = 0xaaaa;
	CMD_ADDR1 = 0x5555;
	CMD_ADDR0 = 0x9090;
	DelayCycle(10);
}

static void SWPIDExit(void)
{
	CMD_ADDR0 = 0xf0f0;
}


int GetFlashID(void)
{
	int i;
	
	SWPIDEntry();
	
	i  = *(volatile unsigned short *)(0x0+ROM_BASE);
	i |= (*(volatile unsigned short *)(2+ROM_BASE))<<16;
	
	SWPIDExit();
	return i;	
}




int FlashSectorErase(volatile unsigned short * addr)
{
	int count = 5000000;
	 
	CMD_ADDR0 = 0xaaaa;	
	CMD_ADDR1 = 0x5555;	
	CMD_ADDR0 = 0x8080;	
	CMD_ADDR0 = 0xaaaa;	
	CMD_ADDR1 = 0x5555;	
	*addr = 0x3030;		

    while (--count && ((*addr & 0xff) != 0xff))
    {
    }
 
	return count;
}



int FlashBlockErase(volatile unsigned short * addr)
{
	 int count = 5000000;

	CMD_ADDR0 = 0xaaaa;	
	CMD_ADDR1 = 0x5555;	
	CMD_ADDR0 = 0x8080;	
	CMD_ADDR0 = 0xaaaa;	
	CMD_ADDR1 = 0x5555;	
	*addr = 0x5050;		

    while (--count && ((*addr & 0xff) != 0xff))
    {
    }
 
	return count;
}



int FlashChipErase(void)
{
	int count = 5000000;

	CMD_ADDR0 = 0xaaaa;	
	CMD_ADDR1 = 0x5555;	
	CMD_ADDR0 = 0x8080;	
	CMD_ADDR0 = 0xaaaa;	
	CMD_ADDR1 = 0x5555;	
	CMD_ADDR0 = 0x1010;	

    while (--count && ((CMD_ADDR1 & 0xff) != 0xff))
    {
    }
 
	return count;
}



int FlashProgram(volatile unsigned short * addr, volatile unsigned short * data, unsigned int word_len)
{
     int count;
     unsigned short temp_data,temp1, temp2;

     while(word_len--) 
     {
     	temp_data = *data;
     	CMD_ADDR0 = 0xaaaa;
        CMD_ADDR1 = 0x5555;
        CMD_ADDR0 = 0xa0a0;
        *addr = temp_data;	
        count = 1000;
        
        while (--count)
        {
        	temp1 = *addr;
        	temp2 = *addr;
        	if( (temp1&(1<<6)) == (temp2&(1<<6)) )
        		break; 
        }
        
        if (count == 0)
            break;
            
        addr++;
        data++;
     }

     if ( count == 0  )
          Uart_Printf("Failed @ 0x%06x, req: 0x%04x, act: 0x%04x, now: 0x%04x\r\n", addr, *data, temp2, *addr);
     return count;
}



static void SecurityIdEntry(void)
{
	CMD_ADDR0 = 0xaaaa;
	CMD_ADDR1 = 0x5555;
	CMD_ADDR0 = 0x8888;
	DelayCycle(10);
}

static void SecurityIdExit(void)
{
	CMD_ADDR0 = 0xf0f0;
	DelayCycle(10);
}




void GetSecurityID(unsigned short *SecurityID)
{
	unsigned short i;
	
	SecurityIdEntry();
	
	for(i=0x00;i<0x20;i++)
		*SecurityID++  = *(volatile unsigned short *)(ROM_BASE+i*2);
	
	SecurityIdExit();
}



void ShowSecurityID(void)
{
	int i;
	unsigned short SecurityID[32];
	
	for(i=0;i<32;i++)
		SecurityID[i]=0xffff;
	
	GetSecurityID(SecurityID);
	
	for(i=0;i<32;i++)
	{
    	if(i<8)
    	{
    		Uart_Printf("SID[0x%02x]=0x%04x\n",i,SecurityID[i]);
    	}
    	
    	if(i>=16 && i<24)	
    	{
    		Uart_Printf("SID[0x%02x]=0x%04x\n",i,SecurityID[i]);
    	}	
    }
}



void UserSIDWrite( unsigned short index, unsigned short data)
{
	 volatile unsigned short * addr;
	
	 addr = (volatile unsigned short *)ROM_BASE;
	
     {
     	CMD_ADDR0 = 0xaaaa;
        CMD_ADDR1 = 0x5555;
        CMD_ADDR0 = 0xa5a5;
        *(addr+index) = data;	
        
        DelayCycle(10000);
     }
}




//***************************************//
// Nor Flash 測試函數
//***************************************//

int TestNorFlash()
{
	int i;
	
	volatile unsigned short * addr = (volatile unsigned short * )0x200000;		// 2M
	static int gCount;
	
	char ch;
	
	i=GetFlashID();
    Uart_Printf("FlashID=%xh\r\n",i);
	
	
	do{
    	Uart_Printf("\nkey 'e' to erase\r\n");
    	Uart_Printf("key 'r' to read\r\n");
    	Uart_Printf("key 'w' to write\r\n");
     	Uart_Printf("key 'p' to previous sector\r\n");
     	Uart_Printf("key 'n' to next sector\r\n\r\n");
   	
		ch = SerialGetChar(0);
		    
		switch(ch)
		{
			case 'p': 	// 選擇前一個扇區
				addr -= 1024*2;
				break;
				
			case 'n': 	// 選擇后一個扇區
				addr += 1024*2;
				break;
				
			case 'e': 	// 擦除扇區
				
				// 擦除的最小單位是扇區,39VF3201的扇區大小是4K
			
                Uart_Printf("Erase sector at 0x%06x ", addr);
                if( FlashSectorErase(addr))
                    Uart_Printf("OK!\r\n");
                else 
                    Uart_Printf("Failed!\r\n");

				break;
				
			case 'E': 	// 擦除芯片
				
                Uart_Printf("Erase chip ");
                if( FlashChipErase())
                    Uart_Printf("OK!\r\n");
                else 
                    Uart_Printf("Failed!\r\n");

				break;
				
			case 'r': 	// 讀扇區
				
				// 數據可以按字/字節方式讀
			
                Uart_Printf("Read data from 0x%06x:\r\n------------\r\n ",addr);
				for(i=0;i<4096;i++)
				{
					if(i%16==0)
						Uart_Printf("\r\n[0x%06X]:\t",(volatile unsigned char *)addr+i);
					
					//if(i%16==0)
						Uart_Printf("0x%02X\t",*((volatile unsigned char *)addr+i)) ;
					
				}	
                Uart_Printf("\r\n-----------\nRead data end\r\n ");

				break;
				
			case 'w': 	// 寫部分扇區
				// 數據可以按字(16位短整數)方式寫入,但必須先在所寫位置為空(0xffff)的時候才可以寫入正確的值
				// 不能按字節寫,因為該FLASH是2M*16的FLASH,一次至少要寫16位
			
                Uart_Printf("Burn data to 0x%06x ",addr);
                for(i=0;i<128;i++)
                	g_Buf16[i]=i;
                
                if( FlashProgram(addr, g_Buf16, 128) )
                    Uart_Printf("OK!\r\n");
                else 
                    Uart_Printf("Failed!\r\n");
				
				break;
				
			case 'W': 	// 寫多個扇區
			
                Uart_Printf("Burn data to 0x%06x ",addr);
                for(i=0;i<BufLength;i++)
                {
                	g_Buf16[i]= (int)addr + i*2;
                    //Uart_Printf("Buf32[0x%04x]=0x%04x\r\n",i,Buf32[i]);
                }
                
                if( FlashProgram(addr, g_Buf16, BufLength) )
                    Uart_Printf("OK!\r\n");
                else 
                    Uart_Printf("Failed!\r\n");
				
				break;
				
			case 's': 	// 寫1個扇區
			
				gCount++;
			
                Uart_Printf("Burn data 0x%04x to 0x%06x ",gCount,addr);
                for(i=0;i<2048;i++)
                {
                	g_Buf16[i]= gCount;
                    //Uart_Printf("Buf32[0x%04x]=0x%04x\r\n",i,Buf32[i]);
                }
                
                if( FlashProgram(addr, g_Buf16, 2048) )
                    Uart_Printf("OK!\r\n");
                else 
                    Uart_Printf("Failed!\r\n");
				
                Uart_Printf("g_Buf16[0x%04x]=0x%04x\r\n",16,g_Buf16[16]);
				
				break;
				
			
			
			case 'i':	// Security ID

				ShowSecurityID();

				break;
				
					
				
			default:
				break;
		}		
	} while(ch!=0x1b);  //KEY_ESC
				
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品二三区| 国产精品麻豆一区二区| 国产成都精品91一区二区三 | 日韩欧美一区在线观看| 精品一区二区三区蜜桃| 国产精品视频一二三区| 欧美色图片你懂的| 午夜婷婷国产麻豆精品| 日韩精品一区二区三区视频 | av亚洲精华国产精华精华| 亚洲精品欧美激情| 2023国产精华国产精品| 欧美日韩成人激情| 国产suv精品一区二区6| 亚洲免费色视频| 国产精品久久福利| 久久久精品欧美丰满| 欧美系列亚洲系列| www.av亚洲| av在线不卡网| 99在线精品视频| 成人网页在线观看| zzijzzij亚洲日本少妇熟睡| 国产精品99久久久久久有的能看 | 国产美女一区二区三区| 亚洲五码中文字幕| 亚洲综合999| 黑人巨大精品欧美黑白配亚洲| 一区二区三区成人| 一区二区三区欧美日| 亚洲一二三四区不卡| 亚洲电影欧美电影有声小说| 亚洲愉拍自拍另类高清精品| 一级特黄大欧美久久久| 亚洲成人免费在线观看| 日本不卡视频一二三区| 国模套图日韩精品一区二区| 国产成人精品aa毛片| 99r精品视频| 日韩限制级电影在线观看| 精品对白一区国产伦| 国产精品成人免费| 国产成人亚洲综合a∨猫咪| a在线播放不卡| 日韩视频一区二区在线观看| 国产视频视频一区| 日韩中文欧美在线| 欧美日韩情趣电影| 国产精品久久三| 丝袜美腿亚洲色图| 成人爱爱电影网址| 精品电影一区二区三区| 亚洲电影一区二区三区| 岛国精品一区二区| 精品国产免费人成电影在线观看四季 | 国产精品动漫网站| 国产剧情一区在线| 色婷婷精品大在线视频| 国产无遮挡一区二区三区毛片日本| 一区二区三区精品在线| 成人福利在线看| 久久久99免费| 国产精品一二一区| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩精品国产精品| 欧美日韩高清一区二区不卡| 亚洲成人tv网| 欧美人伦禁忌dvd放荡欲情| 亚洲高清视频在线| 在线综合视频播放| 国产精品自拍网站| 久久精品亚洲国产奇米99| 国产精品一区二区x88av| 2020国产精品自拍| 国产一区二区三区黄视频| 久久久久久久久久久久久夜| www.在线成人| 亚洲一区二区三区精品在线| 91精品黄色片免费大全| 国产乱码字幕精品高清av| 久久久久久久久久电影| 99re在线精品| 久久超碰97人人做人人爱| 国产午夜精品一区二区三区嫩草 | 亚洲免费毛片网站| 欧美一区中文字幕| 欧美调教femdomvk| 国产成人精品亚洲日本在线桃色| 中文字幕中文字幕一区| 欧美日高清视频| 国产大陆a不卡| 天堂va蜜桃一区二区三区 | 欧美三级日韩三级国产三级| 奇米四色…亚洲| 一区二区三区四区高清精品免费观看| 欧美日韩一级视频| 懂色av中文一区二区三区| 蜜臀av一区二区| 夜夜精品视频一区二区| 国产午夜亚洲精品羞羞网站| 日韩欧美久久一区| 7777精品久久久大香线蕉 | 99久久国产综合色|国产精品| 青青草国产精品亚洲专区无| 亚洲一区免费视频| 亚洲精品老司机| 亚洲免费av在线| 亚洲视频综合在线| 国产精品久久久久婷婷| 中文幕一区二区三区久久蜜桃| 欧美电影免费观看高清完整版| 欧美久久久影院| 欧美一级精品在线| 久久你懂得1024| 久久精品夜夜夜夜久久| 久久久精品蜜桃| 国产精品欧美久久久久一区二区 | 国产精品久久久久影院色老大| 久久夜色精品国产噜噜av| 久久精品亚洲国产奇米99| 亚洲成av人片一区二区| 亚洲成人免费视| 国产在线精品一区二区夜色| av影院午夜一区| 正在播放亚洲一区| 中文一区在线播放| 亚洲一区二区三区四区五区中文| 午夜日韩在线观看| 国产寡妇亲子伦一区二区| 色婷婷亚洲精品| 精品sm在线观看| 亚洲一区二区四区蜜桃| 久久99国产精品尤物| 日本福利一区二区| 久久久精品中文字幕麻豆发布| 亚洲韩国一区二区三区| 国产一级精品在线| 91麻豆精品国产91久久久久久久久| 久久精品一区蜜桃臀影院| 天天射综合影视| 在线观看视频一区| 欧美激情在线一区二区三区| 日日夜夜免费精品视频| 91热门视频在线观看| 一本久久a久久精品亚洲| 中文字幕一区二区在线播放| 成人丝袜18视频在线观看| 欧美成人精品3d动漫h| 日韩成人免费电影| 欧美久久一区二区| 日本91福利区| 欧美一级一区二区| 久久66热re国产| 久久久影视传媒| a4yy欧美一区二区三区| 亚洲激情图片一区| 9191精品国产综合久久久久久| 日韩va欧美va亚洲va久久| 久久久久久久久免费| av一二三不卡影片| 石原莉奈一区二区三区在线观看| 欧美天堂一区二区三区| 国产大片一区二区| 日本不卡视频在线| 中文字幕一区三区| 精品视频色一区| 国产精品自在在线| 亚洲精选在线视频| 精品日韩一区二区| 91免费精品国自产拍在线不卡| 亚洲五月六月丁香激情| 26uuu国产电影一区二区| 日本韩国欧美在线| 国产成人精品免费在线| 午夜久久福利影院| 国产精品久久久久久久久免费丝袜 | 韩国一区二区视频| 亚洲图片激情小说| 国产清纯在线一区二区www| 欧美中文字幕不卡| av激情亚洲男人天堂| 国内一区二区视频| 男人的天堂亚洲一区| 亚洲国产综合人成综合网站| 日本一区二区三区久久久久久久久不| 91麻豆产精品久久久久久 | 欧美一区二区观看视频| 精品国产乱码久久久久久影片| 99re这里只有精品首页| 国产一区二区三区四| 久久99九九99精品| 狠狠色综合日日| 国产精品123区| 久久97超碰国产精品超碰| 日本在线播放一区二区三区| 亚洲一区二区av在线| 爽好多水快深点欧美视频| 亚洲bt欧美bt精品777| 亚洲午夜私人影院| 日韩极品在线观看|