📄 flash.c.bak
字号:
#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 ;
}
*/
void mov_setup_to_buf( )
{
Setup_Info_Buf[0] =g_setup.measure_mode ;
Setup_Info_Buf[1] =g_setup.lanuage_mode;
Setup_Info_Buf[2] =g_setup.filter_mode;
Setup_Info_Buf[3] =g_setup. beep_mode;
Setup_Info_Buf[4] =g_setup. gain_mode;
Setup_Info_Buf[5] =g_setup. bandwidth_mode ;
Setup_Info_Buf[6] =g_setup. light_mode;
Setup_Info_Buf[7] =g_setup.power_mode;
Setup_Info_Buf[8] =g_setup.translate_mode ;
Setup_Info_Buf[9] =g_setup.nouse;
Setup_Info_Buf[10] =g_setup.limit_low;
Setup_Info_Buf[11] =g_setup.limit_high;
Setup_Info_Buf[12] =g_setup.user_id ;
Setup_Info_Buf[13] =g_setup.sw_alarm ;
Setup_Info_Buf[14] =g_setup.initflag;
Setup_Info_Buf[15] =g_setup.toleration;
Setup_Info_Buf[16] =g_setup.regist_flag;
Setup_Info_Buf[17] =g_setup.regist_id;
Setup_Info_Buf[18] =g_setup.regist_id>>8;
Setup_Info_Buf[19] =g_setup.regist_id>>16;
Setup_Info_Buf[20] =g_setup.regist_id>>24;
Setup_Info_Buf[21] =g_setup.regist_sign;
Setup_Info_Buf[22] =g_setup.sys_ini;
Setup_Info_Buf[23] =g_setup.contrast_mode;
Setup_Info_Buf[24] =g_setup.adjust_baseline;
Setup_Info_Buf[25] =g_setup.password;
Setup_Info_Buf[26] =g_setup.datNO;
}
void mov_buf_to_setup( )
{
g_setup.measure_mode= Setup_Info_Buf[0];
g_setup.lanuage_mode=Setup_Info_Buf[1];
g_setup.filter_mode=Setup_Info_Buf[2];
g_setup. beep_mode=Setup_Info_Buf[3];
g_setup. gain_mode=Setup_Info_Buf[4];
g_setup. bandwidth_mode=Setup_Info_Buf[5] ;
g_setup. light_mode=Setup_Info_Buf[6];
g_setup.power_mode=Setup_Info_Buf[7];
g_setup.translate_mode=Setup_Info_Buf[8] ;
g_setup.nouse=Setup_Info_Buf[9];
g_setup.limit_low=Setup_Info_Buf[10];
g_setup.limit_high=Setup_Info_Buf[11];
g_setup.user_id =Setup_Info_Buf[12];
g_setup.sw_alarm=Setup_Info_Buf[13];
g_setup.initflag=Setup_Info_Buf[14];
g_setup.toleration=Setup_Info_Buf[15];
g_setup.regist_flag=Setup_Info_Buf[16] ;
g_setup.regist_id=Setup_Info_Buf[20];
g_setup.regist_id=g_setup.regist_id<<8 | Setup_Info_Buf[19];
g_setup.regist_id=g_setup.regist_id<<8 | Setup_Info_Buf[18];
g_setup.regist_id=g_setup.regist_id<<8 | Setup_Info_Buf[17];
g_setup.regist_sign=Setup_Info_Buf[21];
g_setup.sys_ini=Setup_Info_Buf[22];
g_setup.contrast_mode=Setup_Info_Buf[23];
g_setup.adjust_baseline=Setup_Info_Buf[24];
g_setup.password = Setup_Info_Buf[25];
g_setup.datNO = Setup_Info_Buf[26];
}
void mov_record_to_buf(void)
{
Record_Info_Buf[0] =gDataMsg.DataFlag;
Record_Info_Buf[1] =gDataMsg.userID;
Record_Info_Buf[2] =gDataMsg.nc;
Record_Info_Buf[3] =gDataMsg.nc1;
Record_Info_Buf[4] =gDataMsg.date_year;
Record_Info_Buf[5] =gDataMsg.date_mon;
Record_Info_Buf[6] =gDataMsg.date_day;
Record_Info_Buf[7] =gDataMsg.time_hour;
Record_Info_Buf[8] =gDataMsg.time_min;
Record_Info_Buf[9] =gDataMsg.Anly;
Record_Info_Buf[10] =gDataMsg.Lock;
Record_Info_Buf[11] =gDataMsg.None;
Record_Info_Buf[12] =gDataMsg.Hp;
Record_Info_Buf[13] =gDataMsg.Hp>>8;
Record_Info_Buf[14] =gDataMsg.kind;
}
void mov_buf_to_record(void)
{
gDataMsg.DataFlag =Record_Info_Buf[0];
gDataMsg.userID =Record_Info_Buf[1];
gDataMsg.nc =Record_Info_Buf[2];
gDataMsg.nc1 =Record_Info_Buf[3];
gDataMsg.date_year =Record_Info_Buf[4];
gDataMsg.date_mon =Record_Info_Buf[5];
gDataMsg.date_day =Record_Info_Buf[6];
gDataMsg.time_hour =Record_Info_Buf[7];
gDataMsg.time_min =Record_Info_Buf[8];
gDataMsg.Anly =Record_Info_Buf[9];
gDataMsg.Lock =Record_Info_Buf[10];
gDataMsg.None =Record_Info_Buf[11];
gDataMsg.Hp =Record_Info_Buf[13];
gDataMsg.Hp =gDataMsg.Hp<<8 | Record_Info_Buf[12];
gDataMsg.kind =Record_Info_Buf[14] ;
}
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 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -