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

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

?? spidrv_p1.c

?? 大容量Flash存儲器W25X16,W25X32,W25X64讀寫擦除程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************************/
/*     深圳恒森微電子有限公司  (華邦單片機香港及中國區代理商)		        */
/*     香港恒森科技有限公司    (華邦單片機香港及中國區代理商)		        */
/*     陳文    email:chenwen@hengsen.cn (有 bug 請提交)                   */
/****************************************************************************/
/*  文件名:	spidrv.c														*/
/*	版本					1.0												*/
/*  創建日期:				2007-10-29 10:58								*/
/*  概述:	本文件為 w79e823   讀寫 SPI flash程序							*/
/*--------------------------------------------------------------------------*/
/*  歷史修改記錄:															*/
/*  名字                   日期                   注釋						*/
/*  陳文                   2007.10.28           ver 1.0						*/
/****************************************************************************/
#include <SST89x5xxRD2.H>
#include <intrins.h>
#define uint8 unsigned char
#define uint16 unsigned int
#define uchar unsigned char
#define uint unsigned int
#define uint32 unsigned long

sbit	W25X_WP	= P1^3;
sbit	W25X_CS	= P1^4;
sbit	W25X_DO	= P1^5;
sbit	W25X_DI	= P1^6;
sbit	W25X_CLK= P1^7;


#define W25X_WriteEnable		0x06
#define W25X_WriteDisable		0x04
#define W25X_ReadStatusReg		0x05
#define W25X_WriteStatusReg		0x01
#define W25X_ReadData			0x03
#define W25X_FastReadData		0x0B
#define W25X_FastReadDual		0x3B
#define W25X_PageProgram		0x02
#define W25X_BlockErase			0xD8
#define W25X_SectorErase		0x20
#define W25X_ChipErase			0xC7
#define W25X_PowerDown			0xB9
#define W25X_ReleasePowerDown	0xAB
#define W25X_DeviceID			0xAB
#define W25X_ManufactDeviceID	0x90
#define W25X_JedecDeviceID		0x9F

	
void	init_cpu(void);
void	delay(uchar tt);
void	trace(uchar *str,uchar len);
void	test_page(uchar addr);
void	read_page(uchar addr);
void	Verify(uchar byte, uchar cor_byte);

void	SPI_init();

void	SPI_Send_Byte(uchar out);
uchar	SPI_Get_Byte();
void	SPI_Wait_Busy();

uchar	SPI_Read_StatusReg();
void	SPI_Write_StatusReg(byte);
void	SPI_Write_Enable();
void	SPI_PowerDown();
void	SPI_ReleasePowerDown();

uchar	SPI_Read_Byte(uint32 Dst_Addr);
void	SPI_Read_nBytes(uint32 Dst_Addr, uchar nBytes_128);
uchar	SPI_FastRead_Byte(uint32 Dst_Addr);
void	SPI_FastRead_nBytes(uint32 Dst_Addr, uchar nBytes_128);

void	SPI_Write_Byte(uint32 Dst_Addr, uchar byte);
void	SPI_Write_nBytes(uint32 Dst_Addr, uchar nBytes_128);
void	SPI_WriteW25X_Disable();

void	SPI_Erase_Chip();
void	SPI_Erase_Sector(uint32 Dst_Addr);

uchar	SPI_Read_ID1();
uint	SPI_Read_ID2(uchar ID_Addr);
uint	SPI_Read_ID3();



uint8 Rxtemp;
bit MYTI;
uint8 tx_buff[16];
uint8 upper_128[16];
bit rx_ok;
#define nop() _nop_()

void delay_nms(uchar i)
{	uchar  j;
	i=i*2;
	for(;i>0;i--)	{   j = 246;	while(--j);	}
}

void main(void)
{	uint i;
	
	init_cpu();	
	SPI_init();

	tx_buff[0]='O';
	tx_buff[1]='K';
	trace(tx_buff,2);

	for(;;)
	{	if(rx_ok == 1)
		{	rx_ok = 0;
			switch(Rxtemp)
			{	case 0x01:
					Rxtemp = 0;
					tx_buff[0] = SPI_Read_ID1();
					trace(tx_buff,1);
					break;
				case 0x02:
					i = SPI_Read_ID2(0x00);
					tx_buff[1] = (uchar)i;
					tx_buff[0] = (uchar)(i>>8);
					trace(tx_buff,2);
					break;
				case 0x03:
					i = SPI_Read_ID3();
					tx_buff[1] = (uchar)i;
					tx_buff[0] = (uchar)(i>>8);
					trace(tx_buff,3);
					break;
				case 0x04:
					tx_buff[0] = SPI_Read_Byte(0x00000000);
					trace(tx_buff,1);
					break;
				case 0x05:
					tx_buff[0] = 0x55;
					SPI_Write_Byte(0x00000000,0xa5);
					trace(tx_buff,1);
					break;
				case 0x06:
					tx_buff[0] = SPI_Read_StatusReg();
					trace(tx_buff,1);
					break;
				case 0x07:
					SPI_Write_Enable();	
					break;
				case 0x08:
					upper_128[0]=0x01;upper_128[1]=0x02;upper_128[2]=0x03;upper_128[3]=0x04;
					SPI_Write_nBytes(0x00000000,4);
					break;
				case 0x09:
					SPI_Erase_Chip();
					break;
				case 0x0a:
					SPI_Erase_Sector(0x000ff000);
					while(1)
					{	tx_buff[0] = SPI_Read_StatusReg();
						if(tx_buff[0] == 0)
						{	trace(tx_buff,1);
							break;
						}
					}
					break;
				case 0x0b:
					test_page(0x00);
					break;
				case 0x0c:
					read_page(0x00);
					break;
				default:
					break;
			}			
		}			
	}
}

void init_cpu(void)
{	TMOD = 0x21;			
	PCON = PCON | 0x80;		//波特率加倍
	SCON  = 0x50;			//異步、10位、波特率可變,無校驗位
	TH1   = 0xfd;            //在11.0592M晶振下,波特率是9600,
    TL1   = 0xfd;			
    TR1   = 1;  			//T1 timer run
    ES    = 1;				//uart interrupt enable	
	EA = 1;					//all interrupt enable
}
//串口中斷程序
void UART_isr(void) interrupt 4
{ 
	if(RI)
    {
        RI = 0;
        Rxtemp = SBUF;   //接收
        //SBUF = Rxtemp; 	 //發送
        rx_ok = 1;
		return;
	}
	if(TI)
	{
		TI = 0;
		MYTI = 1;		
 	}
}

void SPI_Send_Byte(uchar out)
{
	uchar i = 0;	
	W25X_CS = 0;
	for (i = 0; i < 8; i++)
	{
		if ((out & 0x80) == 0x80)	/* check if MSB is high */
			W25X_DI = 1;
		else
			W25X_DI = 0;		/* if not, set to low */
		W25X_CLK = 1;			/* toggle clock high */
		out = (out << 1);		/* shift 1 place for next bit */
		nop();nop();nop();nop();
		W25X_CLK = 0;			/* toggle clock low */
	}
}
//=================================================================================================
uchar SPI_Get_Byte()
{	uchar i = 0, in = 0, temp = 0;	
	W25X_CS = 0;
	for (i = 0; i < 8; i++)
	{	in = (in << 1);						//	shift 1 place to the left or shift in 0
		temp = W25X_DO;						//	save input
		W25X_CLK = 1;						//	toggle clock high
		if (temp == 1)						//	check to see if bit is high
			in |= 0x01;						//	if high, make bit high
		W25X_CLK = 0;						//	toggle clock low
	}	
	return in;
}
//=================================================================================================
void delay(uchar tt)
{
	while(tt--);
}
//=================================================================================================
void SPI_Wait_Busy()
{
/* 	waste time until not busy WEL & Busy bit all be 1 (0x03).	*/
	while (SPI_Read_StatusReg() == 0x03)
		SPI_Read_StatusReg();
}
//=================================================================================================
void SPI_init()
{
	W25X_CLK = 0;							//	set clock to low initial state for SPI operation mode 0
//	W25X_CLK = 1;							//	set clock to High initial state for SPI operation mode 3
//	_hold = 1;
	W25X_WP = 1;
	W25X_CS = 1;	
	SPI_WriteW25X_Disable();	
}
//=================================================================================================
uchar SPI_Read_StatusReg()
{	uchar byte = 0;
	W25X_CS = 0;							//	enable device
	SPI_Send_Byte(W25X_ReadStatusReg);		//	send Read Status Register command
	byte = SPI_Get_Byte();					//	receive byte
	W25X_CS = 1;							//	disable device	
	return byte;
}
//=================================================================================================
void SPI_Write_StatusReg(byte)
{	W25X_CS = 0;							//	enable device
	SPI_Send_Byte(W25X_WriteStatusReg);		//	select write to status register
	SPI_Send_Byte(byte);					//	data that will change the status(only bits 2,3,7 can be written)
	W25X_CS = 1;							//	disable the device
}
//=================================================================================================
void SPI_Write_Enable()
{	W25X_CS = 0;							//	enable device
	SPI_Send_Byte(W25X_WriteEnable);		//	send W25X_Write_Enable command
	W25X_CS = 1;							//	disable device
}
//=================================================================================================
void SPI_PowerDown()
{	W25X_CS = 0;							//	enable device
	SPI_Send_Byte(W25X_PowerDown);			//	send W25X_PowerDown command 0xB9

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品理论在线观看| 丁香啪啪综合成人亚洲小说| 精品一区二区免费在线观看| 99精品视频一区二区| 日韩欧美国产精品一区| 亚洲摸摸操操av| 成人免费看视频| 精品精品国产高清a毛片牛牛 | 欧美一级在线视频| 一区二区三区资源| 成人sese在线| 中文字幕免费不卡| 国产精品一二三四五| 欧美大白屁股肥臀xxxxxx| 午夜国产不卡在线观看视频| 99久久777色| 国产精品高潮久久久久无| 国产精品综合二区| 久久伊99综合婷婷久久伊| 久久精品国产亚洲一区二区三区| 日本韩国精品在线| 国产精品不卡视频| av在线一区二区三区| 欧美午夜一区二区三区| 国产亚洲综合色| 激情丁香综合五月| 91麻豆精品91久久久久久清纯 | 欧美日韩另类一区| 亚洲成年人影院| 欧美综合亚洲图片综合区| 一区二区免费在线| 欧美日韩在线三级| 日日夜夜免费精品视频| 日韩一区二区三区四区五区六区| 日韩中文字幕麻豆| 欧美一级二级在线观看| 美女视频免费一区| 久久免费国产精品| 9i在线看片成人免费| 亚洲精品视频免费观看| 在线观看日韩国产| 秋霞午夜av一区二区三区| 日韩精品在线一区| 成人性色生活片免费看爆迷你毛片| 久久久久久久久一| 99九九99九九九视频精品| 一区二区三区色| 欧美日韩国产高清一区二区 | 91麻豆精品在线观看| 亚洲免费资源在线播放| 欧美午夜电影网| 日本v片在线高清不卡在线观看| 在线不卡中文字幕播放| 国产乱码精品一区二区三区av| 国产欧美精品一区二区色综合| 色综合天天综合网天天狠天天| 亚洲综合精品久久| 精品va天堂亚洲国产| 99re8在线精品视频免费播放| 亚洲影视在线观看| 久久精品免费在线观看| 91国偷自产一区二区三区成为亚洲经典| 亚洲午夜久久久久久久久电影网| 日韩一级片网址| 99久久er热在这里只有精品15| 日日噜噜夜夜狠狠视频欧美人 | 丝袜美腿成人在线| 国产日韩av一区二区| 欧美日韩在线不卡| 国产成人啪免费观看软件| 亚洲综合区在线| 久久精品一区二区| 538prom精品视频线放| 成人午夜视频在线观看| 五月天欧美精品| 亚洲欧洲无码一区二区三区| 欧美一区二区三区免费视频| 91蝌蚪国产九色| 狠狠色丁香九九婷婷综合五月| 亚洲精品国产品国语在线app| 日韩免费在线观看| 欧美色老头old∨ideo| 风流少妇一区二区| 激情偷乱视频一区二区三区| 一级特黄大欧美久久久| 国产精品二区一区二区aⅴ污介绍| 337p亚洲精品色噜噜| 91麻豆国产自产在线观看| 国产一区日韩二区欧美三区| 日韩电影在线观看一区| 亚洲精品国产a久久久久久| 国产无一区二区| 亚洲精品一区二区三区福利| 欧美性三三影院| 91一区二区三区在线观看| 国产成人夜色高潮福利影视| 另类欧美日韩国产在线| 秋霞午夜av一区二区三区| 午夜精品久久久久久久蜜桃app| 综合激情成人伊人| 日本一区二区成人| 国产免费久久精品| 国产亚洲欧美日韩俺去了| 精品精品欲导航| 欧美一区在线视频| 欧美一卡二卡在线观看| 欧美人妖巨大在线| 欧美人体做爰大胆视频| 3d成人h动漫网站入口| 91精品欧美久久久久久动漫| 欧美日韩免费电影| 欧美精品电影在线播放| 91精品欧美久久久久久动漫| 777xxx欧美| 精品国产乱码久久久久久图片 | 99精品欧美一区| a美女胸又www黄视频久久| 97se狠狠狠综合亚洲狠狠| 99国产精品久久久久| 一本大道久久精品懂色aⅴ | 首页国产欧美日韩丝袜| 日本不卡123| 国产麻豆午夜三级精品| 成人av网址在线观看| 色综合激情五月| 精品视频资源站| 精品少妇一区二区三区在线视频 | 亚洲国产精品久久久久秋霞影院| 亚洲高清免费在线| 日本va欧美va精品| 国产精品一区二区久激情瑜伽| 成人18视频在线播放| 91久久线看在观草草青青| 欧美美女直播网站| 久久久蜜桃精品| 自拍偷自拍亚洲精品播放| 亚洲午夜久久久久| 国产一区二区在线影院| 国产在线播放一区二区三区| 久久99久久99| 欧美视频在线一区二区三区 | 丝袜美腿一区二区三区| 91精品欧美综合在线观看最新| 欧美一卡二卡在线观看| 粉嫩av一区二区三区| 51精品国自产在线| 久久精品视频在线看| 亚洲免费电影在线| 麻豆视频观看网址久久| 成人丝袜视频网| 51久久夜色精品国产麻豆| 国产视频一区二区在线| 亚洲最新视频在线观看| 韩国一区二区在线观看| 色狠狠综合天天综合综合| 日韩免费高清视频| 精品久久99ma| 色婷婷av一区二区三区软件 | 青青草97国产精品免费观看无弹窗版 | 日本系列欧美系列| 成人黄色av网站在线| 日韩一区二区三区四区| 亚洲欧美视频在线观看视频| 久久疯狂做爰流白浆xx| 在线观看亚洲一区| 中文字幕不卡的av| 国产资源在线一区| 欧美电影一区二区| 一区二区三区久久| 波多野结衣欧美| 26uuu国产电影一区二区| 亚洲国产cao| 91精品1区2区| 亚洲色图一区二区三区| 国产毛片精品一区| 日韩情涩欧美日韩视频| 亚洲国产美国国产综合一区二区| 成人av在线网站| 欧美激情在线一区二区| 国产精品自拍毛片| 在线不卡免费欧美| 午夜一区二区三区视频| 色国产综合视频| 亚洲日本韩国一区| 94色蜜桃网一区二区三区| 国产精品传媒视频| 岛国精品在线播放| 国产精品视频看| 懂色av一区二区在线播放| 国产三级精品视频| 成人一区二区三区视频| 国产欧美一区二区精品性色 | 麻豆精品视频在线| 91精品在线麻豆| 蜜桃av噜噜一区| 精品免费视频一区二区| 国内精品久久久久影院薰衣草 | 亚洲成人黄色影院| 欧美探花视频资源| 亚洲va欧美va天堂v国产综合|