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

📄 sf.c

📁 本程序为ST公司开发的源代码
💻 C
字号:
/************************************************** * * sf.c * * CVS ID:   $Id: sf.c,v 1.7 2006/11/24 16:31:38 sedmik Exp $ * Author:   Sangwon Bae [swbae] - Optomech * Date:     $Date: 2006/11/24 16:31:38 $ * Revision: $Revision: 1.7 $ *  * Description: *  serial flash access via bspi *  based on bspi.c * *************************************************** *  * COPYRIGHT (C) ST Microelectronics  2005 *            All Rights Reserved * *************************************************** * * STM CVS Log: * * $Log: sf.c,v $ * Revision 1.7  2006/11/24 16:31:38  sedmik * fix related to HAVE_TEMP_SENSOR define * * Revision 1.6  2006/10/31 11:15:16  marcucci * Modified to make HAVE_UPDATE working * * Revision 1.5  2006/09/18 09:55:23  belardi * Corrected CVS keyword usage * * Revision 1.4  2006/09/18 09:24:43  belardi * Added Log CVS keyword into file header * * ***************************************************/#include "gendef.h"#include "hwreg.h"#include "blgendef.h"#include "bspi_util.h"/****************************************************************** * *  BSPI * *****************************************************************///JS disabled due to compilation errors !//#if (0 != HAVE_POSITION) || (0 != HAVE_UPDATE)void bspi_init(void){  GCR1.field.sdram_sel = 0;      // BSPI is selected on the shared pad  PDB |= 0x1;   BSPI_CSR1.field.bspe = 0;      // BSPI Disable  BSPI_CLK = 32;  BSPI_CSR1.field.mstr = 1;      // BSPI is a master  BSPI_CSR2.field.dfifo = 1;     // Clear FIFO  BSPI_CSR3.field.mask_ss = 1;   // Mask SS  BSPI_CSR1.field.cpol = 0;  BSPI_CSR1.field.cpha = 0;    BSPI_CSR1.field.rfs = 0;  BSPI_CSR1.field.rie = 0;  BSPI_CSR2.field.tfs = 0;  BSPI_CSR1.field.bspe = 1;      // BSPI Enable}void bspi_send(uint32 data){  while(1)  {    if(BSPI_CSR2.field.tfe)    {      BSPI_TXR = (data << 8);      break;    }  }}uint8 bspi_read(uint32 data){  bspi_send(data);  while(1)  {    if(BSPI_CSR2.field.rfne)    {      return (BSPI_RXR & 0xFF);    }  }}uint32 bspi_rdid(void){ uint32 i; PDB &= 0xFFFFFFFE; for(i=0; i<100;i++); bspi_read(0xAB); bspi_read(0x00); bspi_read(0x00); bspi_read(0x00); i = bspi_read(0x00); PDB |= 1; return i;}#if (0 != HAVE_POSITION) || (0 != HAVE_UPDATE)uint32 bspi_rdsr(void){  uint32 i;  PDB &= 0xFFFFFFFE;  for(i=0; i<100;i++);  bspi_read(0x05);  i = bspi_read(0x00); // 1st Dummy  PDB |= 1;  return i;}uint32 bspi_wren(void){  uint32 i;  PDB &= 0xFFFFFFFE;  for(i=0; i<100;i++);  i = bspi_read(0x06);  PDB |= 1;  return i;}uint32 bspi_bulk_erase(void){  uint32 i;  PDB &= 0xFFFFFFFE;  for(i=0; i<100;i++);  i = bspi_read(0xC7);  PDB |= 1;  return i;}uint32 bspi_sector_erase(uint32 addr){  uint32 i;  uint32 byte_0;  uint32 byte_1;  uint32 byte_2;  byte_0 = (addr & 0xFF);  byte_1 = (addr & 0xFF00) >> 8;  byte_2 = (addr & 0xFF0000) >> 16;  PDB &= 0xFFFFFFFE;  for(i=0; i<100;i++);  bspi_read(0xD8);  bspi_read(byte_2);  bspi_read(byte_1);  i = bspi_read(byte_0);  PDB |= 1;  return i;}void bspi_pp(uint32 page_addr, uint8* buf, uint32 byte_no){  volatile uint32 i;  uint32 byte_0;  uint32 byte_1;  uint32 byte_2;  byte_0 = (page_addr & 0xFF);  byte_1 = (page_addr & 0xFF00) >> 8;  byte_2 = (page_addr & 0xFF0000) >> 16;  PDB &= 0xFFFFFFFE;  for(i=0; i<100;i++);  bspi_read(0x02);  bspi_read(byte_2);  bspi_read(byte_1);  bspi_read(byte_0);  for(i=0; i<10;i++);  while(byte_no)  {    bspi_read((*buf) & 0xFF);    buf ++;    byte_no --;  }  PDB |= 1;}uint32 sf_erase(void){  uint32 sf_sr;    bspi_wren();  sf_sr = bspi_rdsr();  if(sf_sr & 0x02)  {    bspi_bulk_erase();    return 1;  }  return 0;}#if (0 != HAVE_POSITION)uint32 sf_erase_sector(uint32 addr){  uint32 sf_sr;    bspi_wren();  sf_sr = bspi_rdsr();  if(sf_sr & 0x02)  {    bspi_sector_erase(addr);    return 1;  }  return 0;}#endif /* HAVE_POSITION */uint32 sf_busy(void){  uint32 sf_sr = bspi_rdsr();  return (sf_sr & 0x01) ? 1 : 0;}uint32 sf_pp(uint32 page_addr, uint8* buf, uint32 byte_no){  uint32 sf_sr;    bspi_wren();  sf_sr = bspi_rdsr();  if(sf_sr & 0x02)  {    bspi_pp(page_addr, buf, byte_no);    return 1;  }  return 0;}#endif /* HAVE_POSITION || HAVE_UPDATE */void sf_read(uint32 page_addr, uint8* buf, uint32 byte_no){  uint32 i;  uint32 byte_0;  uint32 byte_1;  uint32 byte_2;  byte_0 = (page_addr & 0xFF);  byte_1 = (page_addr & 0xFF00) >> 8;  byte_2 = (page_addr & 0xFF0000) >> 16;  PDB &= 0xFFFFFFFE;  for(i=0; i<100;i++);  bspi_read(0x03);  bspi_read(byte_2);  bspi_read(byte_1);  bspi_read(byte_0);  for(i=0; i<10;i++);  while(byte_no)  {    *buf ++ = bspi_read(0x00);    byte_no --;  }  PDB |= 1;}//JS moved up by func above, due to compilation error!//#endif /* HAVE_POSITION || HAVE_UPDATE */

⌨️ 快捷键说明

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