#include <P24FJ128GA006.H>
#include <stdio.h>
#include <string.h>
#include "commuse.h"
#include "lcd.h"
#include "timer.h"
#include "ecg.h"
#include "bmp.h"
#include "clock.h"
#include "system.h"
#include "key.h"
#include "menu.h"
#include "hr.h"
#include "FlashScreen.h"
#include "uart.h"
#include "flash.h"
#include "ecganal.h"
#define WAIT_TBF while(SPI2STAT&0x02)
#define WAIT_RBF SPI2STATbits.SPIROV = 0; while(!(SPI2STAT&0x01))
#define CE_LOW LATCbits.LATC14 = 0
#define CE_HIG LATCbits.LATC14 = 1
#define CLK_LOW LATGbits.LATG6 = 0
#define CLK_HIG LATGbits.LATG6 = 1
#define SO_LOW LATGbits.LATG8 = 0
#define SO_HIG LATGbits.LATG8 = 1
//#define HOLD_LOW LATGbits.LATG9 = 0
//#define HOLD_HIG LATGbits.LATG9 = 1
#define WEL_ON 0x02
#define BUSY_ON 0x01
#define JEDEC_ID 0x9F
#define SST_FLASH_ID 0x90
#define SST_RDSR 0x05
#define SST_WREN 0x06
#define SST_EWSR 0x50
#define SST_WRSR 0x01
#define SST_ERASE 0x20
#define SST_WBYTE 0x02
#define SST_RBYTE 0x03
#define SST_HI_RBYTE 0x0B
#define WRITE_NULL 0xff
unsigned char Index_count[2];
unsigned char DataChange;
volatile MSGData gDataMsg;
unsigned char SPI_in_buf;
unsigned char Record_index_old ;
volatile unsigned char Record_Info_Buf[16];
unsigned char Index_Info_Buf[MAX_Records+1];
volatile unsigned char useIndex[MAX_Records];
volatile unsigned char Record_count;
volatile unsigned char Record_index;
unsigned char Setup_Info_Buf[32];
unsigned long addr_point;
void SPI_WREN(void);
void SPI_EWSR(void);
void SPI_JEDEC_ID(unsigned char *);
unsigned char SPI_READ_ID (unsigned char);
unsigned char SPI_READ_STATUS(void);
unsigned char SPI_WRITE_BYTE(unsigned long,unsigned char);
void SPI_HISPEED_READ(unsigned long,unsigned int,unsigned char *);
void SPI_WRITE_STATUS(unsigned char);
void init_spi2()
{
TRISG = 0xffff;
TRISCbits.TRISC14 = 0; //CE
TRISGbits.TRISG6 = 0; //SCK
TRISGbits.TRISG8 = 0;//MOSI
// TRISGbits.TRISG9 = 0;//HOLD
CE_HIG;
CLK_LOW;
SO_HIG;
// HOLD_HIG;
SPI2CON1 = 0x0023;//1M
SPI2CON2 = 0x0000;
SPI2STAT = 0x8000;
SPI_WREN();
delay_ms(10);
SPI_EWSR();
delay_ms(10);
SPI_WRITE_STATUS(0x02);
delay_ms(10);
}
void SPI_JEDEC_ID(unsigned char *buf)
{
unsigned char cTemp;
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = JEDEC_ID;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = WRITE_NULL;
WAIT_TBF;
WAIT_RBF;
buf[0] = SPI2BUF;
SPI2BUF = WRITE_NULL;
WAIT_TBF;
WAIT_RBF;
buf[1] = SPI2BUF;
SPI2BUF = WRITE_NULL;
WAIT_TBF;
WAIT_RBF;
buf[2] = SPI2BUF;
CLK_HIG;
CE_HIG;
return ;
}
unsigned char SPI_READ_ID(unsigned char FLASHID)
{
unsigned char cTemp;
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = JEDEC_ID;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = 0x00;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = 0x00;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = FLASHID;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
CLK_HIG;
CE_HIG;
return cTemp;
}
unsigned char SPI_READ_STATUS(void)
{
unsigned char cTemp;
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = SST_RDSR;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = WRITE_NULL;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
CLK_HIG;
CE_HIG;
return cTemp;
}
void SPI_WREN(void)
{
unsigned char cTemp;
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = SST_WREN;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
CLK_HIG;
CE_HIG;
return ;
}
void SPI_EWSR(void)
{
unsigned char cTemp;
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = SST_EWSR;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
CLK_HIG;
CE_HIG;
return ;
}
void SPI_WRITE_STATUS(unsigned char inch)
{
unsigned char cTemp;
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = SST_WRSR;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = inch;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
CLK_HIG;
CE_HIG;
return ;
}
void Sector_Erase(unsigned long in)
{
unsigned long iAddr;
unsigned char cTemp;
if(in>255)
{
return;
}
iAddr = (unsigned long) in<<12;
SPI_WREN();
cTemp = SPI_READ_STATUS();
if(!(cTemp&WEL_ON))
{
return;
}
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = SST_ERASE;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (iAddr&0xffffff) >> 16;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (iAddr&0xffff) >> 8;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = iAddr&0xff;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
CLK_HIG;
CE_HIG;
return ;
}
unsigned char SPI_WRITE_BYTE(unsigned long lAddr,unsigned char inch)
{
unsigned char cTemp;
unsigned char NACK;
SPI_WREN();
cTemp = SPI_READ_STATUS();
if(!(cTemp&WEL_ON))
{
return 0;
}
NACK = 0xff;
while(NACK--)
{
SPI_WREN();
cTemp =SPI_READ_STATUS();
if(!(cTemp&BUSY_ON))
{
break;
}
else
{
delay_ms(1);
}
}
if(!NACK)
{
return 0;
}
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = SST_WBYTE;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (lAddr&0xffffff) >> 16;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (lAddr&0xffff) >> 8;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = lAddr&0xff;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = inch;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
CLK_HIG;
CE_HIG;
return 1;
}
unsigned char SPI_READ_BYTE(unsigned long lAddr)
{
unsigned char cTemp;
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = SST_RBYTE;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (lAddr&0xffffff) >> 16;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (lAddr&0xffff) >> 8;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = lAddr&0xff;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = WRITE_NULL;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
CLK_HIG;
CE_HIG;
return cTemp;
}
void SPI_HISPEED_READ(unsigned long lAddr,unsigned int leng,unsigned char *buf)
{
unsigned char cTemp;
unsigned int loop;
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = SST_RBYTE;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (lAddr&0xffffff) >> 16;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (lAddr&0xffff) >> 8;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = lAddr&0xff;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
for(loop = 0; loop <leng;loop++)
{
SPI2BUF = WRITE_NULL;
WAIT_TBF;
WAIT_RBF;
buf[loop] = SPI2BUF;
}
CLK_HIG;
CE_HIG;
return ;
}
SST_SST25VF016B.rar_SST25VF016B_pic flash_pic单片机flash_sst25vf pi
版权申诉
5星 · 超过95%的资源 128 浏览量
2022-09-14
16:11:04
上传
评论
收藏 8KB RAR 举报
寒泊
- 粉丝: 75
- 资源: 1万+
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈