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

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

?? f330_w25p16_flashmemory.ver.1.01.c

?? 利用SPI讀取Flash Memory W25P16的過程
?? C
字號:
//
// File Name:F330_W25P16_FlashMemory.ver.1.01.c
//----------------------------------------------------------------------------
// Project Name: W25P16
// Module Name: 16MBytes Flash Memory
//----------------------------------------------------------------------------
//
// Company:Semiconductor Device Solution, Inc 
//         http://www.sdsi.com.tw/
//
// Engineer: Owen Chen
// Create Date: 13:30:00 10/03/2007 
// Revision: 1.01
//
// Description:
//             . Winbond W25P16 16MBytes Flash Memory
//             . Read / Write Status Register
//             . Read / Write Page Program
//             . Erase
//              
//                                           
// 
// Target Devcies: C8051F330
//
// Tool Chain: Tool chain: KEIL Eval 'c'
// Copyright Semiconductor Device Solution, Inc .All Rights Reserved
//
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------

#include <c8051f330.h>                 // SFR declarations
#define High    1
#define Low     0

typedef union {                        
      unsigned int i;
      unsigned char b[2];
              } UINT;

//-----------------------------------------------------------------------------
// Initialation PROTOTYPES
//-----------------------------------------------------------------------------

void Port_IO_Init();
void SPI_Init();

//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------

void Read_Manu();      // Read Manufacturer & Device ID
void Write_Instruction(unsigned char COMMAND, unsigned long DATA);
void W25P16_Check_BUSY();   // Check Busy

//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------

sbit CS  = P0^6;
sbit LED = P1^3; 

//-----------------------------------------------------------------------------
// Global VARIABLES
//-----------------------------------------------------------------------------

unsigned char counter;
idata UINT ManID;        // Manufacturer & Device ID 2 Bytes
idata unsigned char Status_REG;   // Status Register
xdata unsigned char FlashDATA[10];
unsigned char temp[3];

//=============================================================================
// MAIN Routine
//=============================================================================
//start main

void main()
{    

     PCA0MD &= ~0x40;    // disable WDT temporarily 
     OSCICN    = 0x83;   // SYSCLK = 24.5MHz  
	 
	 Port_IO_Init();	
	 SPI_Init();
	 
	 Read_Manu();        // Read Manufacturer & Device ID

     Write_Instruction(0x06, 0xFF);       // Write Enable
	 Write_Instruction(0x01, 0x00);       // Write Status Register

	 W25P16_Check_BUSY();	              // Check Busy

     //Write_Instruction(0x06, 0xFF);     // Write Enable
	 //Write_Instruction(0x02, 0x123456); // Page Program 

	 //W25P16_Check_BUSY();	              // Check Busy

     Write_Instruction(0x03, 0x123454);   // Read Data

	 W25P16_Check_BUSY();	              // Check Busy
     
	 while(1)
	 {
        
			 
	 }
	 
}


//=============================================================================
// Initialization Subroutines
//=============================================================================
//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------

void Port_IO_Init()
{
    // P0.0  -  CLK  (SPI0), Push-Pull,  Digital
    // P0.1  -  DO (SPI0), Open-Drain, Digital
    // P0.2  -  DI (SPI0), Push-Pull,  Digital
    // P0.3  -  NSS  (SPI0), Open-Drain, Digital
    // P0.4  -  TX0 (UART0), Push-Pull,  Digital
    // P0.5  -  RX0 (UART0), Open-Drain, Digital
    // P0.6  -  CS,  Push-Pull,  Digital
    // P0.7  -  Unassigned,  Open-Drain, Digital

    // P1.3  -  LED,  Push-Pull,  Digital

    P0MDOUT   = 0x55;
    P1MDOUT   = 0x08;
    XBR0      = 0x03;
    XBR1      = 0x40;

}

//-----------------------------------------------------------------------------
// SYSCLK_Init
//-----------------------------------------------------------------------------

void SPI_Init()
{
    SPI0CFG   = 0x60;
    SPI0CN    = 0x05;
}

//=============================================================================
// Function Service Routines
//=============================================================================
//-----------------------------------------------------------------------------
// Read_Manu()
//-----------------------------------------------------------------------------
// Read Manufacturer & Device ID (90h)
//-----------------------------------------------------------------------------

void Read_Manu()
{
     unsigned char i;

	 CS = Low;
	 
	 SPI0DAT = 0x90;                // Instruction(90h)
     while(!SPIF){}                 // Wait for ready
     SPIF = 0;

	 for(counter= 0; counter<3; counter++) 
     {                              // followed by 24-bit address(A23-A0)
      SPI0DAT = 0x00;               // of 000000h
      while(!SPIF){}                // Wait for ready
      SPIF = 0;
     }  

     for(i=0;i<2;i++)             
     {                               
         SPI0DAT = 0xFF;               
         while(!SPIF){}            // Wait for ready
         SPIF = 0;
         ManID.b[i] = SPI0DAT;     // Manufacturer ID : NexFlash(EFh)
		                           // Device ID : W25P80(13h) W25P16(14h)
     } 

	 CS = High;

}

//-----------------------------------------------------------------------------
// Write_Instruction(unsigned char COMMAND, unsigned char ADDR)
//-----------------------------------------------------------------------------
// Write Instruction:
//          . Write Enable          (06h)
//          . Write Disable         (04h)
//          . Read Status Register  (05h)
//          . Write Status Register (01h) 
//          . Read Data             (03h)
//          . Page Program          (02h)
//          . Sector Erase          (D8h)
//          . Bulk Erase            (C7h)
//          . Read Parameter Page   (53h)
//          . Erase Parameter Page  (D5h)
//          
//-----------------------------------------------------------------------------

void Write_Instruction(unsigned char COMMAND, unsigned long DATA)
{
     unsigned char i;	 

	 for(i= 0; i<2; i++) 
     {                              // followed by 24-bit address(A23-A0)
        SPI0DAT = 0xFF;             // of 000000h
        while(!SPIF){}              // Wait for ready
        SPIF = 0;
     }  

	 CS = Low;
	 
	 SPI0DAT = COMMAND;             // Instruction
     while(!SPIF){}                 // Wait for ready
     SPIF = 0;

	 if(COMMAND==0x05)              // Read Status Register
	 {                       
         SPI0DAT = 0xFF;               
         while(!SPIF){}             // Wait for ready
         SPIF = 0;
         Status_REG = SPI0DAT;      // Status Register Out
	 }
	 else if(COMMAND==0x01)         // Write Status Register
	 {
         SPI0DAT = DATA;               
         while(!SPIF){}             // Wait for ready
         SPIF = 0; 
	 }
	 else if(COMMAND==0x03)         // Read Data
	 {
         
		 for(i=0;i<3;i++)               // 24-Bits Address
	     {
             temp[i] = DATA>>(8*(2-i));
			 SPI0DAT = temp[i];               
             while(!SPIF){}             // Wait for ready
             SPIF = 0;			  
		 }

		 for(i=0;i<10;i++)              // Data Byte
		 {  
             SPI0DAT = 0xFF;               
             while(!SPIF){}             // Wait for ready
             SPIF = 0;
             FlashDATA[i]= SPI0DAT;     // Status Register Out
		 }
	 
	 }
	 else if(COMMAND==0x02)             // Page Program
	 {
         
		 for(i=0;i<3;i++)               // 24-Bits Address
	     {
             temp[i] = DATA>>(8*(2-i));
			 SPI0DAT = temp[i];               
             while(!SPIF){}             // Wait for ready
             SPIF = 0;			  
		 }

		 for(i=0;i<10;i++)              // Data Byte
		 {  
             SPI0DAT = FlashDATA[i];               
             while(!SPIF){}             // Wait for ready
             SPIF = 0;
		 }
	 
	 }

	 CS = High;

	 for(i= 0; i<2; i++) 
     {                              
        SPI0DAT = 0xFF;               
        while(!SPIF){}            // Wait for ready
        SPIF = 0;
     }  

}

//-----------------------------------------------------------------------------
// W25P16_Check_BUSY()
//-----------------------------------------------------------------------------
// Check Status Register S0(Busy):
//       Symbol   Description            Typ   Max   Unit
//         tw     Write Status            17    30    ms
//                Register Cycle Time   
//         tpp    Page Program Cycle      
//                3.0V~3.6V              3.5    7      s
//                2.7V~3.6V               4     8      s
//         tse    Sector Erase           0.6   1.5     s
//                Cycle Time         
//         tbe    Bulk Erase Cycle Time   12    40     s
//         tpe    Parameter Page         100   200    ms
//                Erase Cycle Time       
//-----------------------------------------------------------------------------

void W25P16_Check_BUSY()
{
     Write_Instruction(0x05, 0xFF);      // Read Status Register(05h)
	 
	 while((Status_REG &= 0x01))
     {
         LED = 0;
         Write_Instruction(0x05, 0xFF);  // Read Status Register(05h)
     }

	 Write_Instruction(0x05, 0xFF);      // Read Status Register(05h)

	 LED = 1;

}

//=============================================================================
// Interrupt Service Routines
//=============================================================================
//-----------------------------------------------------------------------------
// SYSCLK_Init
//-----------------------------------------------------------------------------


//-----------------------------------------------------------------------------
// smaRTClock interrupt ISR
//-----------------------------------------------------------------------------
//
//This routine changes the state of the LED whenever Timer2 overflows.
//
//-----------------------------------------------------------------------------





//-----------------------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品天干天干在观线| 在线观看日韩高清av| 国产原创一区二区三区| 狠狠色丁香婷婷综合久久片| 免费在线视频一区| 国内一区二区视频| 成人久久视频在线观看| 99精品欧美一区二区三区综合在线| 成人午夜视频在线| 91美女片黄在线观看91美女| 欧美在线观看视频一区二区| 日韩欧美一区在线| 中文成人综合网| 丝瓜av网站精品一区二区| 国产一区二区视频在线| 色综合久久久久综合99| 日韩欧美视频一区| 亚洲精品日日夜夜| 久久99国产精品免费| 色综合久久久网| 欧美高清在线一区二区| 日韩高清在线不卡| 99久久精品免费精品国产| 日韩亚洲欧美综合| 一区二区三区资源| 国产精品小仙女| 日韩一级黄色大片| 亚洲一区二区四区蜜桃| av成人免费在线观看| 久久综合久久99| 麻豆一区二区三| 制服丝袜av成人在线看| 亚洲一区二区在线观看视频 | jiyouzz国产精品久久| 精品日韩欧美在线| 美女爽到高潮91| 国产精品每日更新| 国产精品一区二区不卡| 欧美性色黄大片手机版| 亚洲国产精品99久久久久久久久| 亚洲va中文字幕| 色女孩综合影院| 国产精品久久久久婷婷| 免费人成黄页网站在线一区二区| 成人三级在线视频| 国产蜜臀97一区二区三区| 久久国产剧场电影| 欧美日本精品一区二区三区| 国产精品久久久久9999吃药| 成人国产在线观看| 久久91精品久久久久久秒播| 在线观看视频91| 6080yy午夜一二三区久久| 久久精品在线观看| 午夜成人免费电影| 色偷偷一区二区三区| 色av一区二区| 国产福利一区二区三区在线视频| 欧美日韩极品在线观看一区| 日韩中文字幕不卡| 国产拍揄自揄精品视频麻豆| 国产激情视频一区二区三区欧美| 国产欧美日韩视频在线观看| jlzzjlzz亚洲女人18| 国产精品亲子乱子伦xxxx裸| 97精品超碰一区二区三区| 亚洲成人三级小说| 久久影院午夜片一区| 中文字幕日本不卡| 国产伦精品一区二区三区免费迷 | 色婷婷久久久亚洲一区二区三区| 一区二区三区四区激情| 日韩一区二区三区三四区视频在线观看 | 91精品国产色综合久久不卡蜜臀| 美腿丝袜亚洲色图| 国产精品天天摸av网| 欧美日韩一区二区三区高清| 国产成人亚洲综合a∨婷婷| 亚洲综合色视频| 欧美v日韩v国产v| 在线成人av影院| 色噜噜久久综合| 99热精品国产| 久久国产麻豆精品| 日韩毛片精品高清免费| 337p日本欧洲亚洲大胆精品| 欧美精品自拍偷拍| 国产一区二区三区四区五区美女| 精品国产成人在线影院| 日韩欧美区一区二| 69堂成人精品免费视频| 欧美性猛片aaaaaaa做受| 91丨国产丨九色丨pron| 99国产麻豆精品| 成人av在线播放网站| 久久国产综合精品| 日韩精品一级二级 | 亚洲伊人伊色伊影伊综合网| 亚洲免费观看高清完整版在线| 久久久精品国产免大香伊| 国产亚洲精品资源在线26u| 91精品国产入口| 欧美v日韩v国产v| 中文一区在线播放| 最新欧美精品一区二区三区| 亚洲人成精品久久久久久| 一区二区三区成人| 麻豆成人91精品二区三区| 国产精品一区在线观看你懂的| 久久99精品久久久久久| 成人一区二区三区视频| 在线精品视频一区二区三四| 欧美精品1区2区| 欧美激情一区二区三区蜜桃视频| 成人免费在线视频观看| 亚洲永久精品大片| 国产一区视频网站| 精品视频在线免费观看| 久久嫩草精品久久久精品一| 久久久www成人免费无遮挡大片| 久久先锋影音av鲁色资源| 亚洲伊人色欲综合网| 国产成人免费视| 久久噜噜亚洲综合| 亚洲另类一区二区| 成人美女在线观看| 国产偷国产偷精品高清尤物| 婷婷丁香激情综合| 欧洲精品一区二区三区在线观看| 久久久精品免费观看| 蜜臀久久99精品久久久画质超高清| 色综合久久六月婷婷中文字幕| 精品国产一区二区三区四区四 | 麻豆成人91精品二区三区| 色婷婷av一区二区三区软件| 欧美精品123区| 亚洲国产一区在线观看| 色老头久久综合| 亚洲在线成人精品| 在线不卡的av| 亚洲国产欧美另类丝袜| 欧美在线免费观看亚洲| 一区二区三区中文在线观看| 色婷婷精品大视频在线蜜桃视频| 国产精品麻豆一区二区| 免费观看成人av| 久久夜色精品一区| 成人国产视频在线观看| 亚洲黄网站在线观看| 色8久久精品久久久久久蜜 | 久久精品国产久精国产爱| 日韩写真欧美这视频| 92国产精品观看| 精品在线免费视频| 亚洲综合999| 国产精品久久毛片| 精品av久久707| 欧美日本不卡视频| av不卡在线观看| 国产1区2区3区精品美女| 日韩专区中文字幕一区二区| 亚洲乱码国产乱码精品精小说| 国产亚洲午夜高清国产拍精品| 在线不卡中文字幕| 欧美丝袜丝交足nylons图片| 成人免费看的视频| 成人涩涩免费视频| 成人白浆超碰人人人人| 大胆亚洲人体视频| 国产一区二区久久| 国产999精品久久久久久绿帽| 精品一区二区免费视频| 精品一二三四区| 久久www免费人成看片高清| 日韩电影免费一区| 美腿丝袜一区二区三区| 激情文学综合丁香| 国产精品18久久久久久vr| 国产高清不卡一区| 色综合亚洲欧洲| 在线综合+亚洲+欧美中文字幕| 欧美高清www午色夜在线视频| 在线不卡一区二区| 久久综合久久综合九色| 成人免费在线视频观看| 一区二区在线电影| 精品亚洲欧美一区| jizzjizzjizz欧美| 日韩欧美一区电影| 久久久精品天堂| 亚洲一区二区三区中文字幕| 蜜桃一区二区三区在线| 成人免费av资源| 欧美一区二区三区免费大片| 精品久久国产字幕高潮| 亚洲精品视频免费观看| 国精产品一区一区三区mba桃花| 成人午夜伦理影院| 日韩一级成人av| 亚洲大片在线观看|