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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? smi_flash.c

?? str75x的軟件庫(kù)源代碼
?? C
字號(hào):
/******************** (C) COPYRIGHT 2006 STMicroelectronics ********************
* File Name          : smi_flash.c
* Author             : MCD Application Team
* Date First Issued  : 03/10/2006
* Description        : This file provides a set of function used to communicate
*                      with an SPI compatible FLASH(M25P64), connected to SMI
*                      peripheral, mounted on STR75x-EVAL.
********************************************************************************
* History:
* 07/17/2006 : V1.0
* 03/10/2006 : V0.1
********************************************************************************
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*******************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include "smi_flash.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define FLASH_CMD_WEN     0x06
#define FLASH_CMD_SE      0xD8
#define FLASH_CMD_BE      0xC7
#define FLASH_CMD_RDID    0x9F

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/  
/* Private functions ---------------------------------------------------------*/

/*******************************************************************************
* Function Name  : SMI_FLASH_Init
* Description    : Configures SMI and GPIOs. This function must be called before
*                  any write/read operation on the FLASH.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void SMI_FLASH_Init(void)
{
  SMI_InitTypeDef  SMI_InitStructure;

  SMI_InitStructure.SMI_ClockHold = 0;
  SMI_InitStructure.SMI_Prescaler = 2;  
  SMI_InitStructure.SMI_DeselectTime = 1;
  SMI_Init(&SMI_InitStructure);

  /* Enable SMI Alternate Functions */
  GPIO_PinRemapConfig(GPIO_Remap_SMI_EN, ENABLE);

  /* Enable Bank 0 */
  SMI_BankCmd(SMI_Bank_0, ENABLE);

  /* Select Bank 0 */
  SMI_SelectBank(SMI_Bank_0);

  /* Enable SMI Flash Fast Read mode */
  SMI_FastReadConfig(SMI_FastRead_Enable);
}
  
/*******************************************************************************
* Function Name  : SMI_FLASH_SectorErase
* Description    : Erases the specified FLASH sector.
* Input          : - SectorAddr: FLASH's sector address to erase.
* Output         : None
* Return         : None
*******************************************************************************/
void SMI_FLASH_SectorErase(u32 SectorAddr)
{
  u32 Temp = 0, Cmd = 0;
 
  /* Clear ERF1 and ERF2 flags */
  SMI_ClearFlag(SMI_FLAG_ERF2 | SMI_FLAG_ERF1);

/* SMI in SW mode ------------------------------------------------------------*/
  SMI_ModeConfig(SMI_Mode_SW);

  /* Transmit one byte to external memory */
  SMI_TxRxLengthConfig(SMI_TxLength_1Byte, SMI_RxLength_0Bytes);

  /* Send Write Enable command */ 
  SMI_SendCmd(FLASH_CMD_WEN); 
  while(SMI_GetFlagStatus(SMI_FLAG_TF) == RESET);
  SMI_ClearFlag(SMI_FLAG_TF);

  /* Send Read Status Register command */
  SMI_SendRSRCmd();
  while(SMI_GetFlagStatus(SMI_FLAG_TF) == RESET);
  SMI_ClearFlag(SMI_FLAG_TF);

  /* Transmit four bytes to external memory */
  SMI_TxRxLengthConfig(SMI_TxLength_4Bytes, SMI_RxLength_0Bytes);
  
  /* Send Sector Erase command followed by three address bytes */
  Temp = SectorAddr >> 16;
  Cmd = (Temp << 8) | FLASH_CMD_SE;
  SMI_SendCmd(Cmd);
  while(SMI_GetFlagStatus(SMI_FLAG_TF) == RESET);
  SMI_ClearFlag(SMI_FLAG_TF);
  
  /* Wait while the FLASH is busy with Erase cycle */  
  do
  {
    SMI_SendRSRCmd();
    while(SMI_GetFlagStatus(SMI_FLAG_TF) == RESET);
    SMI_ClearFlag(SMI_FLAG_TF);
  } while((SMI_ReadMemoryStatusRegister() & 0x01) != RESET);

/* SMI in HW mode ------------------------------------------------------------*/
  SMI_ModeConfig(SMI_Mode_HW);
}

/*******************************************************************************
* Function Name  : SMI_FLASH_BulkErase
* Description    : Performs a bulk erase (erase the entire FLASH).
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void SMI_FLASH_BulkErase(void)
{
  /* Clear ERF1 and ERF2 flags */
  SMI_ClearFlag(SMI_FLAG_ERF2 | SMI_FLAG_ERF1);

  /* Send Write Enable command */
  SMI_SendWENCmd();
  while(SMI_GetFlagStatus(SMI_FLAG_TF) == RESET);
  SMI_ClearFlag(SMI_FLAG_TF);

  /* Send Read Status Register command */
  SMI_SendRSRCmd();
  while(SMI_GetFlagStatus(SMI_FLAG_TF) == RESET);
  SMI_ClearFlag(SMI_FLAG_TF);
  
/* SMI in SW mode ------------------------------------------------------------*/
  SMI_ModeConfig(SMI_Mode_SW);
  
  /* Transmit one byte to external memory */
  SMI_TxRxLengthConfig(SMI_TxLength_1Byte, SMI_RxLength_0Bytes);

  /* Send Bulk Erase command */ 
  SMI_SendCmd(FLASH_CMD_BE); 
  while(SMI_GetFlagStatus(SMI_FLAG_TF) == RESET);
  SMI_ClearFlag(SMI_FLAG_TF);
  
  /* Wait while the FLASH is busy with Erase cycle */   
  do
  {
    SMI_SendRSRCmd();
    while(SMI_GetFlagStatus(SMI_FLAG_TF) == RESET);
    SMI_ClearFlag(SMI_FLAG_TF);
  }while((SMI_ReadMemoryStatusRegister() & 0x01) != RESET);

/* SMI in HW mode ------------------------------------------------------------*/
  SMI_ModeConfig(SMI_Mode_HW);
}

/*******************************************************************************
* Function Name  : SMI_FLASH_WritebBuffer
* Description    : Writes a byte buffer to the selected memory Bank. The size of
*                  the buffer must not exceed the FLASH page size.
* Input          : - bBuffer : pointer to buffer. 
*                  - WriteAddr : external memory address from which the data will
*                    be written.
*                  - NumByteToWrite : number of bytes to write. 
*                    
* Output         : None
* Return         : None
*******************************************************************************/
void SMI_FLASH_WritebBuffer(u8* bBuffer, u32 WriteAddr, u16 NumByteToWrite)
{   	 
  /* Clear ERF1 and ERF2 flags */
  SMI_ClearFlag(SMI_FLAG_ERF2 | SMI_FLAG_ERF1);

  /* Send Write Enable command*/
  SMI_SendWENCmd();
  while(SMI_GetFlagStatus(SMI_FLAG_TF) == RESET);
  SMI_ClearFlag(SMI_FLAG_TF);

  /* Enable Burst Mode */
  SMI_WriteBurstConfig(SMI_WriteBurst_Enable);

  for(; NumByteToWrite != 0; NumByteToWrite--) /* while there is data to write */
  {
    /* Transfer data to the memory */
    *(u8 *) WriteAddr = *bBuffer++; 
    
    /* Increment the address*/  
    WriteAddr += 1;
  }	  

  /* Disable Burst Mode */
  SMI_WriteBurstConfig(SMI_WriteBurst_Disable);

  /* Wait while the FLASH is busy with Write cycle */
  while((SMI_GetFlagStatus(SMI_FLAG_WC)) == RESET);
  SMI_ClearFlag(SMI_FLAG_WC);
}

/*******************************************************************************
* Function Name  : SMI_FLASH_WritehBuffer
* Description    : Writes a half-word buffer to the selected memory Bank. 
*                  The size of the buffer must not exceed the FLASH page size. 
* Input          : - bBuffer : pointer to buffer. 
*                  - WriteAddr : external memory address from which the data will
*                    be written.
*                  - NumHalfWordToWrite : number of half-word to write.
* Output         : None
* Return         : None
*******************************************************************************/
void SMI_FLASH_WritehBuffer(u16* hBuffer, u32 WriteAddr, u16 NumHalfWordToWrite)
{   	 
  /* Clear ERF1 and ERF2 flags */
  SMI_ClearFlag(SMI_FLAG_ERF2 | SMI_FLAG_ERF1);

  /* Send Write Enable command*/
  SMI_SendWENCmd();
  SMI_ClearFlag(SMI_FLAG_TF);

  /* Enable Burst Mode */
  SMI_WriteBurstConfig(SMI_WriteBurst_Enable);

  for(; NumHalfWordToWrite != 0; NumHalfWordToWrite--) /* while there is data to write */
  {
    /* Transfer data to the memory */
    *(u16 *) WriteAddr = *hBuffer++; 
    
    /* Increment the address*/  
    WriteAddr += 2;
  }	  

  /* Disable Burst Mode */
  SMI_WriteBurstConfig(SMI_WriteBurst_Disable);

  /* Wait while the FLASH is busy with Write cycle */
  while((SMI_GetFlagStatus(SMI_FLAG_WC)) == RESET);
  SMI_ClearFlag(SMI_FLAG_WC);  
}

/*******************************************************************************
* Function Name  : SMI_FLASH_WritewBuffer
* Description    : Writes a word buffer to the selected memory Bank. The size of
*                  the buffer must not exceed the FLASH page size.
* Input          : - bBuffer : pointer to buffer. 
*                  - WriteAddr : external memory address from which the data will
*                    be written.
*                  - NumByteToWrite : number of word to write.
* Output         : None
* Return         : None
*******************************************************************************/
void SMI_FLASH_WritewBuffer(u32* wBuffer, u32 WriteAddr, u16 NumWordToWrite)
{   	
  /* Clear ERF1 and ERF2 flags */
  SMI_ClearFlag(SMI_FLAG_ERF2 | SMI_FLAG_ERF1);

  /* Send Write Enable command*/
  SMI_SendWENCmd();
  SMI_ClearFlag(SMI_FLAG_TF);
  
  /* Enable Burst Mode */
  SMI_WriteBurstConfig(SMI_WriteBurst_Enable);

  for(; NumWordToWrite != 0; NumWordToWrite--) /* while there is data to write */
  {
    /* Transfer data to the memory */
    *(u32 *) WriteAddr = *wBuffer++; 
    
    /* Increment the address*/  
    WriteAddr += 4;
  }	  
  
  /* Disable Burst Mode */
  SMI_WriteBurstConfig(SMI_WriteBurst_Disable);

  /* Wait while the FLASH is busy with Write cycle */
  while((SMI_GetFlagStatus(SMI_FLAG_WC)) == RESET);
  SMI_ClearFlag(SMI_FLAG_WC);    
}

/*******************************************************************************
* Function Name  : SMI_FLASH_ReadbBuffer
* Description    : Reads a block of data from the external memory.
* Input          : - pBuffer : pointer to the buffer that receives the data read 
*                    from the external memory.
*                  - ReadAddr : external memory address to read from.
*                  - NumByteToRead : number of bytes to read.
* Output         : None
* Return         : None
*******************************************************************************/
void SMI_FLASH_ReadbBuffer(u8* bBuffer, u32 ReadAddr, u16 NumByteToRead)
{   	
  for(; NumByteToRead != 0; NumByteToRead--) /* while there is data to read */
  {
    /* Read a byte from the FLASH */			
    *bBuffer++ = *(u8*) ReadAddr++;
  }	  
}

/*******************************************************************************
* Function Name  : SMI_FLASH_ReadhBuffer
* Description    : Reads a block of data from the external memory.
* Input          : - pBuffer : pointer to the buffer that receives the data read 
*                    from the external memory.
*                  - ReadAddr : external memory address to read from.
*                  - NumHalfWordToRead : number of half words to read.
* Output         : None
* Return         : None
*******************************************************************************/
void SMI_FLASH_ReadhBuffer(u16* hBuffer, u32 ReadAddr, u16 NumHalfWordToRead)
{   	
  for(; NumHalfWordToRead != 0; NumHalfWordToRead--) /* while there is data to read */
  {
    /* Read a half word from the FLASH */			
    *hBuffer++ = *(u16*) ReadAddr;

    /* Increment the address*/ 
    ReadAddr += 2;
  }	  
}

/*******************************************************************************
* Function Name  : SMI_FLASH_ReadwBuffer
* Description    : Reads a block of data from the external memory.
* Input          : - pBuffer : pointer to the buffer that receives the data read 
*                    from the external memory.
*                  - ReadAddr : external memory address to read from.
*                  - NumWordToRead : number of words to read.
* Output         : None
* Return         : None
*******************************************************************************/
void SMI_FLASH_ReadwBuffer(u32* wBuffer, u32 ReadAddr, u16 NumWordToRead)
{   	
  for(; NumWordToRead != 0; NumWordToRead--) /* while there is data to read */
  {
    /* Read a word from the FLASH */			
    *wBuffer++ = *(u32*) ReadAddr;

    /* Increment the address*/ 
    ReadAddr += 4;
  }	  
}

/*******************************************************************************
* Function Name  : SMI_FLASH_ReadID
* Description    : Reads FLASH identification ID.
* Input          : None
* Output         : None
* Return         : FLASH identification ID
*******************************************************************************/
u32 SMI_FLASH_ReadID(void)
{   	 
  u32 Temp = 0, Temp0 = 0, Temp1 =0, Temp2 = 0;

  /* SMI in SW mode */
  SMI_ModeConfig(SMI_Mode_SW);

  /* Transmit one byte and receive three bytes to/from external memory */
  SMI_TxRxLengthConfig(SMI_TxLength_1Byte, SMI_RxLength_3Bytes);

  /* Clear ERF1 and ERF2 flags */
  SMI_ClearFlag(SMI_FLAG_ERF2 | SMI_FLAG_ERF1);
  
  /* Send Read Identification  command */ 
  SMI_SendCmd(FLASH_CMD_RDID);
  while(SMI_GetFlagStatus(SMI_FLAG_TF) == RESET);
  SMI_ClearFlag(SMI_FLAG_TF);
    
  /* Compute the FLASH ID*/
  Temp = SMI->RR; 
  Temp0 = Temp & 0xFF;  /* Manufacturer Identification */
  Temp1 = (Temp >> 8) & 0xFF;  /* Memory Type */
  Temp2 = (Temp >> 16) & 0xFF; /* Memory Capacity */
  
  Temp = (Temp0 << 16) | (Temp1 << 8) | Temp2;

  /* SMI in HW mode */	  
  SMI_ModeConfig(SMI_Mode_HW);

  return Temp;
}

/******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
老汉av免费一区二区三区| 老司机精品视频导航| 欧美一区二区女人| 波多野结衣亚洲| 理论片日本一区| 一二三区精品福利视频| 国产午夜精品一区二区| 8x8x8国产精品| 菠萝蜜视频在线观看一区| 久久av资源网| 亚洲chinese男男1069| 国产精品伦一区| 精品区一区二区| 欧美日韩一区二区电影| 99久久综合色| 国产精品99久久久久久有的能看| 日韩影视精彩在线| 亚洲精品免费电影| 亚洲国产成人私人影院tom| 欧美一级片在线看| 欧美久久久久久蜜桃| 91黄色激情网站| 色妹子一区二区| 99久久久久久| av网站免费线看精品| 国产成人精品一区二区三区四区| 极品少妇xxxx精品少妇偷拍 | 亚洲激情成人在线| 国产欧美一区二区三区沐欲| 精品1区2区在线观看| 欧美成人精品3d动漫h| 欧美一区二区三区视频在线| 欧美日韩精品系列| 色婷婷综合久久久久中文一区二区 | 久久久久99精品国产片| 精品国产第一区二区三区观看体验| 91精品麻豆日日躁夜夜躁| 精品视频在线看| 欧美日韩成人在线一区| 欧美美女黄视频| 91麻豆精品久久久久蜜臀| 欧美一区永久视频免费观看| 欧美疯狂性受xxxxx喷水图片| 欧美日韩第一区日日骚| 911精品国产一区二区在线| 91精品国产欧美一区二区18| 日韩欧美一区二区不卡| 精品久久久三级丝袜| 国产亚洲一区字幕| 国产精品久久久一区麻豆最新章节| 日本一区二区三区国色天香| 自拍偷拍国产亚洲| 伊人婷婷欧美激情| 视频在线在亚洲| 秋霞午夜av一区二区三区| 麻豆视频观看网址久久| 狠狠色丁香婷婷综合久久片| 国产精品99久久久久久有的能看| 成人免费看片app下载| 99r精品视频| 日本高清不卡在线观看| 欧美一级电影网站| 久久久久久久久久久久久女国产乱 | 91成人看片片| 67194成人在线观看| 久久综合色之久久综合| 日韩毛片一二三区| 亚洲3atv精品一区二区三区| 麻豆精品视频在线观看视频| 国产suv精品一区二区6| 在线观看一区日韩| 欧美日韩视频在线观看一区二区三区| 欧美日韩国产高清一区| 国产亚洲自拍一区| 亚洲第一二三四区| 国产自产视频一区二区三区| 色呦呦国产精品| 欧美一级黄色录像| 中文一区在线播放 | 国产精品亚洲а∨天堂免在线| 国产suv一区二区三区88区| 欧美日韩综合不卡| 久久综合九色综合欧美98| 一区二区三区四区av| 国产一区日韩二区欧美三区| 欧美综合久久久| 久久影院视频免费| 一区二区国产盗摄色噜噜| 黄页网站大全一区二区| 日本韩国一区二区三区| 久久久久国产精品人| 婷婷久久综合九色综合绿巨人| 国产成人夜色高潮福利影视| 欧美日韩午夜在线视频| 欧美国产精品一区二区三区| 日韩1区2区日韩1区2区| 99热精品一区二区| 久久尤物电影视频在线观看| 视频一区欧美精品| 91在线播放网址| 国产日韩欧美麻豆| 麻豆91在线播放| 欧美撒尿777hd撒尿| 18欧美亚洲精品| 国产精品一品二品| 日韩一区二区三区视频在线 | 91精品国产麻豆| 亚洲久草在线视频| 国产成人8x视频一区二区| 欧美美女一区二区在线观看| 亚洲视频中文字幕| 成人午夜看片网址| 久久九九国产精品| 久久99精品久久久久久国产越南 | 日本美女一区二区三区视频| 色婷婷国产精品综合在线观看| 欧美激情综合五月色丁香小说| 精品一区二区av| 7777精品伊人久久久大香线蕉经典版下载 | 国产成人h网站| 久久久久免费观看| 国产自产v一区二区三区c| 91麻豆精品国产91久久久久久久久| 亚洲区小说区图片区qvod| 成人激情小说乱人伦| 日本一区二区视频在线| 国产精品99久久久久久似苏梦涵| 日韩欧美激情四射| 日本不卡中文字幕| 91精品在线免费| 日韩高清欧美激情| 日韩一区二区三区精品视频| 青青草精品视频| 欧美mv日韩mv| 国产一本一道久久香蕉| 国产日韩欧美不卡| www.欧美色图| 亚洲婷婷综合色高清在线| 91在线小视频| 一区二区三区日韩精品视频| 色婷婷一区二区| 亚洲综合激情网| 欧美日韩mp4| 青青草国产精品亚洲专区无| 欧美白人最猛性xxxxx69交| 韩国精品主播一区二区在线观看| 久久久久久久综合色一本| 成人午夜激情影院| 亚洲欧美视频一区| 欧美视频一二三区| 乱中年女人伦av一区二区| 久久新电视剧免费观看| 成人久久久精品乱码一区二区三区| 亚洲欧美在线视频观看| 在线欧美一区二区| 视频一区视频二区中文字幕| 欧美成人精精品一区二区频| 国产精品66部| 亚洲精品久久久久久国产精华液| 欧美网站一区二区| 国内精品视频666| 欧美日韩一二区| 精品一区二区三区免费毛片爱| 欧美国产一区视频在线观看| 在线视频中文字幕一区二区| 日韩国产在线观看一区| 久久久久久久综合日本| 色8久久人人97超碰香蕉987| 免费成人美女在线观看.| 国产午夜精品久久| 精品视频1区2区3区| 极品少妇一区二区| 亚洲啪啪综合av一区二区三区| 欧美精选一区二区| 成人中文字幕电影| 午夜精品久久久久久| 国产午夜精品一区二区三区视频 | 日韩欧美在线网站| 成人午夜电影久久影院| 亚洲va天堂va国产va久| 久久久久9999亚洲精品| 欧美视频在线一区二区三区| 国产在线视频一区二区三区| 亚洲另类一区二区| www精品美女久久久tv| 在线观看视频一区二区欧美日韩| 免费的国产精品| 亚洲免费观看视频| 亚洲精品一区在线观看| 欧美午夜精品一区二区三区| 国产一区二区三区| 视频一区视频二区中文字幕| 国产精品久久久久久久岛一牛影视| 欧美一区二区三区四区视频| 99久久伊人久久99| 九色|91porny| 亚洲成av人片在www色猫咪| 中文字幕一区二区不卡| 亚洲精品一线二线三线无人区| 欧美亚一区二区|