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

📄 sst39vf320.txt

📁 SST 系列Nor flash 的读写源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
        Temp  = (WORD far *)0xC0005555; /* set up address to be C000:5555h  */        *Temp = 0xAAAA;                 /* write data 0xAAAA to the address */        Temp  = (WORD far *)0xC0002AAA; /* set up address to be C000:2AAAh  */        *Temp = 0x5555;                 /* write data 0x5555 to the address */        Temp  = (WORD far *)0xC0005555; /* set up address to be C000:5555h  */        *Temp = 0x8080;                 /* write data 0x8080 to the address */        Temp  = (WORD far *)0xC0005555; /* set up address to be C000:5555h  */        *Temp = 0xAAAA;                 /* write data 0xAAAA to the address */        Temp  = (WORD far *)0xC0002AAA; /* set up address to be C000:2AAAh  */        *Temp = 0x5555;                 /* write data 0x5555 to the address */        Temp  = Dst;                  /* set up starting address to be erased */        *Temp = 0x5050;                 /* write data 0x5050 to the address */        Delay_25_Milli_Seconds();       /* Delay time = Tbe                 */}/************************************************************************//* PROCEDURE:   Erase_Entire_Chip                                       *//*                                                                      *//* This procedure can be used to erase the entire chip.                 *//*                                                                      *//* Input:                                                               *//*      NONE                                                            *//*                                                                      *//* Output:                                                              *//*      NONE                                                            *//************************************************************************/void Erase_Entire_Chip(){        WORD far *Temp;        /*  Issue the Chip Erase command to 39VF320  */        Temp  = (WORD far *)0xC0005555; /* set up address to be C000:5555h  */        *Temp = 0xAAAA;                 /* write data 0xAAAA to the address */        Temp  = (WORD far *)0xC0002AAA; /* set up address to be C000:2AAAh  */        *Temp = 0x5555;                 /* write data 0x5555 to the address */        Temp  = (WORD far *)0xC0005555; /* set up address to be C000:5555h  */        *Temp = 0x8080;                 /* write data 0x8080 to the address */        Temp  = (WORD far *)0xC0005555; /* set up address to be C000:5555h  */        *Temp = 0xAAAA;                 /* write data 0xAAAA to the address */        Temp  = (WORD far *)0xC0002AAA; /* set up address to be C000:2AAAh  */        *Temp = 0x5555;                 /* write data 0x5555 to the address */        Temp  = (WORD far *)0xC0005555; /* set up address to be C000:5555h  */        *Temp = 0x1010;                 /* write data 0x1010 to the address */        Delay_50_Milli_Seconds();       /* Delay Tsce time                  */}/************************************************************************//* PROCEDURE:   Program_One_Word                                        *//*                                                                      *//* This procedure can be used to program ONE word of data to the        *//* 39VF320.                                                             *//*                                                                      *//* NOTE:  It is necessary to first erase the sector containing the      *//*        word to be programmed.                                	*//*                                                                      *//* Input:                                                               *//*           SrcWord The WORD which will be written to the 39VF320      *//*           Dst     DESTINATION address which will be written with the *//*                   data passed in from Src                            *//*                                                                      *//* Output:                                                              *//*           None                                                       *//************************************************************************/void Program_One_Word (WORD SrcWord, WORD far *Dst){	WORD far *Temp;        WORD far *DestBuf;        DestBuf = Dst;        Temp =  (WORD far *)0xC0005555; /* set up address to be C000:555h   */        *Temp = 0xAAAA;                 /* write data 0xAAAA to the address */        Temp =  (WORD far *)0xC0002AAA; /* set up address to be C000:2AAAh  */        *Temp = 0x5555;                 /* write data 0x5555 to the address */        Temp =  (WORD far *)0xC0005555; /* set up address to be C000:5555h  */        *Temp = 0xA0A0;                 /* write data 0xA0A0 to the address */        *DestBuf = SrcWord;             /* transfer the byte to destination */        Check_Toggle_Ready(DestBuf);    /* wait for TOGGLE bit to get ready */}/************************************************************************//* PROCEDURE:   Program_One_Sector                                      *//*                                                                      *//* This procedure can be used to program a total of 2048 words of data  *//* to the SST39VF320.                                                   *//*                                                                      *//* NOTES: 1. It is necessary to first erase the sector before the	*//*        programming.                                			*//*        2. This sample code assumes the destination address passed	*//*        from the calling function is the starting address of the	*//*        sector.							*//*                                                                      *//* Input:                                                               *//*           Src     SOURCE address containing the data which will be   *//*                   written to the 39VF320                             *//*           Dst     DESTINATION address which will be written with the *//*                   data passed in from Src                            *//*                                                                      *//* Output:                                                              *//*           None                                                       *//************************************************************************/void Program_One_Sector (WORD far *Src,    WORD far *Dst){        WORD far *SourceBuf;        WORD far *DestBuf;        int Index;        SourceBuf = Src;        DestBuf = Dst;        Erase_One_Sector(Dst);          /* erase the sector first */        for (Index = 0; Index < SECTOR_SIZE; Index++)        {	/* transfer data from source to destination */	Program_One_Word( *SourceBuf, DestBuf);	++DestBuf;	++SourceBuf;        }}/************************************************************************//* PROCEDURE:   Program_One_Block                                       *//*                                                                      *//* This procedure can be used to program a total of 32k words of data   *//* to the SST39VF320.                                                   *//*                                                                      *//* NOTES: 1. It is necessary to first erase the block before the	*//*        programming.                                			*//*        2. This sample code assumes the destination address passed	*//*        from the calling function is the starting address of the	*//*        block.							*//*									*//* Input:                                                               *//*           Src     SOURCE address containing the data which will be   *//*                   written to the 39VF320                             *//*           Dst     DESTINATION address which will be written with the *//*                   data passed in from Src                            *//*                                                                      *//* Output:                                                              *//*           None                                                       *//************************************************************************/void Program_One_Block (WORD far *Src,  WORD far *Dst){        WORD far *SourceBuf;        WORD far *DestBuf;        int Index;        SourceBuf = Src;        DestBuf = Dst;        Erase_One_Block(Dst);          /* erase the sector first */        for (Index = 0; Index < BLOCK_SIZE; Index++)        {	/* transfer data from source to destination */	Program_One_Word( *SourceBuf, DestBuf);	++DestBuf;	++SourceBuf;        }}/************************************************************************//* PROCEDURE:    Check_Toggle_Ready                                     *//*                                                                      *//* During the internal program cycle, any consecutive read operation    *//* on DQ6 will produce alternating 0's and 1's (i.e. toggling between   *//* 0 and 1). When the program cycle is completed, DQ6 of the data will  *//* stop toggling. After the DQ6 data bit stops toggling, the device is  *//* ready for next operation.                                            *//*                                                                      *//* Input:                                                               *//*           Dst        Must already be set-up by the caller            *//*                                                                      *//* Output:                                                              *//*           None                                                       *//************************************************************************/void Check_Toggle_Ready (WORD far  *Dst){        BYTE Loop = TRUE;        WORD PreData;        WORD CurrData;        unsigned long TimeOut = 0;        PreData = *Dst;        PreData = PreData & 0x0040;        while ((TimeOut< 0x07FFFFFF) && (Loop))        {            CurrData = *Dst;            CurrData = CurrData & 0x0040;            if (PreData == CurrData)                    Loop = FALSE;   /* ready to exit the while loop */            PreData = CurrData;            TimeOut++;        }}/************************************************************************//* PROCEDURE:   Check_Data_Polling                                      *//*                                                                      *//* During the internal program cycle, any attempt to read DQ7 of the    *//* last byte loaded during the page/byte-load cycle will receive the    *//* complement of the true data.  Once the program cycle is completed,   *//* DQ7 will show true data.                                             *//*                                                                      *//* Input:                                                               *//*           Dst        Must already be set-up by the caller            *//*           True       Data is the original (true) data                *//*                                                                      *//* Output:                                                              *//*           None                                                       *//************************************************************************/void Check_Data_Polling (WORD far  *Dst,  WORD TrueData){        BYTE Loop = TRUE;        WORD CurrData;        unsigned long TimeOut = 0;        TrueData = TrueData &  0x0080;        while ((TimeOut< 0x07FFFFFF) && (Loop))        {                CurrData = *Dst;                CurrData = CurrData & 0x0080;                if (TrueData == CurrData)                        Loop = FALSE;   /* ready to exit the while loop  */                TimeOut++;        }}

⌨️ 快捷键说明

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