?? at45db041b.c
字號(hào):
#include "pedometerv01.h"
const unsigned char CMD_FLASH_CARRYREAD = 0x68; //Continues Array Read
const unsigned char CMD_FLASH_MMPAGEREAD = 0x52; //Main Memory Page Read
const unsigned char CMD_FLASH_BUF1READ = 0x54; // Buffer 1 Read
const unsigned char CMD_FLASH_BUF2READ = 0x56; // Buffer 2 Read
const unsigned char CMD_FLASH_SRREAD = 0x57; // Status Register Read
const unsigned char CMD_FLASH_BUF1WRITE = 0x84; // Buffer1 Write
const unsigned char CMD_FLASH_BUF2WRITE = 0x87; // Buffer2 Write
const unsigned char CMD_FLASH_BUF1TOMAIN_E = 0x83; // Buffer1 to Main Memory Page Program with Built-in Erase
const unsigned char CMD_FLASH_BUF2TOMAIN_E = 0x86; // Buffer2 to Main Memory Page Program with Built-in Erase
const unsigned char CMD_FLASH_BUF1TOMAIN = 0x88; // Buffer1 to Main Memory Page Program without Built-in Erase
const unsigned char CMD_FLASH_BUF2TOMAIN = 0x89; // Buffer2 to Main Memory Page Program without Built-in Erase
const unsigned char CMD_FLASH_PAGEERASE = 0x81; // Page Erase
const unsigned char CMD_FLASH_BLOCKERASE = 0x50; // Block Erase
const unsigned char CMD_FLASH_MAIN_TR_BUF1 = 0x82; // Main Memory Page Program through Buffer 1
const unsigned char CMD_FLASH_MAIN_TR_BUF2 = 0x85; // Main Memory Page Program through Buffer 2
const unsigned char CMD_FLASH_MAIN_TO_BUF1 = 0x53; // Main Memory Page to Buffer 1
const unsigned char CMD_FLASH_MAIN_TO_BUF2 = 0x55; // Main Memory Page to Buffer 2
const unsigned char CMD_FLASH_MAIN_CM_BUF1 = 0x60; // Main Memory Page to Buffer 1 compare
const unsigned char CMD_FLASH_MAIN_CM_BUF2 = 0x61; // Main Memory Page to Buffer 2 compare
const unsigned char CMD_FLASH_REWRITE_TR_BUF1 = 0x58; // Auto Page Rewrite through Buffer 1
const unsigned char CMD_FLASH_REWRITE_TR_BUF2 = 0x59; // Auto Page Rewrite through Buffer 2
void send_Byte(unsigned char data);
unsigned char read_Byte(void);
void Flash_Setup()
{
unsigned short j;
FLASH_PORT_SEL = 0;
FLASH_PORT_DIR |= PIN_FLASH_CS + PIN_FLASH_SCK + PIN_FLASH_SI;
FLASH_PORT_OUT |= PIN_FLASH_SCK + PIN_FLASH_SI;
FLASH_PORT_DIR &= ~PIN_FLASH_SO;
SET_FLASH_CS_LOW();
SET_FLASH_RESET_LOW();
Adr_Page_us=0;
Adr_Buf_us=0;
for (j = 0xFFFF; j > 0; j--); // Time for flag to set
SET_FLASH_CS_HIGH();
for (j = 0xFFFF; j > 0; j--); // Time for flag to set
SET_FLASH_RESET_HIGH();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
void LoadDumyData()
{
unsigned char data1,data2;
data1=0;
data2=25;
for(;;)
{
if(Error_Code!=RESULT_FLASHFULL)
{
//++data1;
//++data2;
while(WriteMemory_through_Buf1((unsigned short *)&Adr_Page_us,(unsigned short *)&Adr_Buf_us,data1) == RESULT_BUSY);
while(WriteMemory_through_Buf1((unsigned short *)&Adr_Page_us,(unsigned short *)&Adr_Buf_us,data2) == RESULT_BUSY);
if(Adr_Buf_us==0)
{
while(MainMemoryPage_Read(Adr_Page_us-1,Flash_data)==RESULT_BUSY);
_NOP();
}
}
else
{
P1OUT|=BIT7;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
void LoadChannelHead()
{
Adr_Buf_us=0;
for(;;)
{
while(WriteMemory_through_Buf1((unsigned short *)&Adr_Page_us,(unsigned short *)&Adr_Buf_us,0xff) == RESULT_BUSY);
#ifdef TWO_CHANAL
while(WriteMemory_through_Buf1((unsigned short *)&Adr_Page_us,(unsigned short *)&Adr_Buf_us,0x0) == RESULT_BUSY);
#endif
if(Adr_Buf_us==0)return;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char MainMemoryPage_Read(unsigned short adr_page,unsigned char *data)
{
unsigned char send_data[4];
unsigned char i;
unsigned short j;
if(Error_Code >RESULT_ERROR)return(RESULT_READY);
if((read_Status()&FLASH_READY)!=FLASH_READY)return(RESULT_BUSY);
SET_FLASH_SCK_LOW();
SET_FLASH_CS_LOW();
send_data[0] = CMD_FLASH_MMPAGEREAD;
send_data[1] = adr_page >> 7;
send_data[2] = adr_page << 1;
send_data[2] &= ~1; //read from the frist byte of this page
send_data[3] = 0;
for(i=0;i<4;i++)
send_Byte(send_data[i]);
for(i=0;i<4;i++)
send_Byte(0xff);
SET_FLASH_SCK_HIGH();
SET_FLASH_SCK_LOW();
for(j=BUF_LEN_FLASH;j>0;j--)
{
* data = read_Byte();
data++;
}
SET_FLASH_CS_HIGH();
return(RESULT_READY);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char MainMemory_to_Buf1(unsigned short adr_page)
{
unsigned char send_data[4];
unsigned char i;
if(Error_Code >RESULT_ERROR)return(RESULT_READY);
if((read_Status()&FLASH_READY)!=FLASH_READY)return(RESULT_BUSY);
send_data[0] = CMD_FLASH_MAIN_TO_BUF1;
send_data[1] = adr_page >> 7;
send_data[2] = adr_page << 1;
SET_FLASH_CS_LOW();
for(i=0;i<4;i++)
send_Byte(send_data[i]);
SET_FLASH_CS_HIGH();
return(RESULT_READY);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char Read_Buf1(unsigned short adr_buff)
{
unsigned char send_data[4];
unsigned char i,data;
if(Error_Code >RESULT_ERROR)return(RESULT_READY);
if((read_Status()&FLASH_READY)!=FLASH_READY)return(RESULT_BUSY);
send_data[0] = CMD_FLASH_BUF1READ;
if((adr_buff & 0x100)==0x100)
send_data[2] |= 1;
else
send_data[2] &= ~1;
send_data[3] = adr_buff;
SET_FLASH_CS_LOW();
for(i=0;i<4;i++)
send_Byte(send_data[i]);
send_Byte(0);
SET_FLASH_SCK_HIGH();
SET_FLASH_SCK_LOW();
data=read_Byte();
SET_FLASH_CS_HIGH();
return(data);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char WriteMemory_through_Buf2(unsigned short * adr_page,unsigned short * adr_buff,unsigned char data)
{
unsigned char send_data[4];
unsigned char i;
if(Error_Code >RESULT_ERROR)return(RESULT_READY);
send_data[0] = CMD_FLASH_MAIN_TR_BUF2;
if(* adr_buff==0)
{
if((read_Status()&FLASH_READY)!=FLASH_READY)return(RESULT_BUSY);
SET_FLASH_CS_LOW();
send_data[1] = * adr_page >> 7;
send_data[2] = * adr_page << 1;
if((* adr_buff & 0x100)==0x100)
send_data[2] |= 1;
else
send_data[2] &= ~1;
send_data[3] = * adr_buff;
for(i=0;i<4;i++)
send_Byte(send_data[i]);
}
send_Byte(data);
if(++ * adr_buff >= BUF_LEN_FLASH)
{
* adr_buff=0;
if(++ * adr_page>=TOTAL_PAGE_FLASH)Error_Code=RESULT_FLASHFULL;
SET_FLASH_CS_HIGH();
return(RESULT_PAGEFINISHED);
}
return(RESULT_READY);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char WriteMemory_through_Buf1(unsigned short * adr_page,unsigned short * adr_buff,unsigned char data)
{
unsigned char send_data[4];
unsigned char i;
if(Error_Code >RESULT_ERROR)return(RESULT_READY);
send_data[0] = CMD_FLASH_MAIN_TR_BUF1;
if(* adr_buff==0)
{
if((read_Status()&FLASH_READY)!=FLASH_READY)return(RESULT_BUSY);
SET_FLASH_CS_LOW();
send_data[1] = * adr_page >> 7;
send_data[2] = * adr_page << 1;
if((* adr_buff & 0x100)==0x100)
send_data[2] |= 1;
else
send_data[2] &= ~1;
send_data[3] = * adr_buff;
for(i=0;i<4;i++)
send_Byte(send_data[i]);
}
send_Byte(data);
if(++ * adr_buff >= BUF_LEN_FLASH)
{
* adr_buff=0;
if(++ * adr_page>=TOTAL_PAGE_FLASH)Error_Code=RESULT_FLASHFULL;
SET_FLASH_CS_HIGH();
return(RESULT_PAGEFINISHED);
}
return(RESULT_READY);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char read_Status()
{
unsigned char data;
SET_FLASH_SCK_LOW();
SET_FLASH_CS_LOW();
send_Byte(CMD_FLASH_SRREAD);
SET_FLASH_SCK_HIGH();
SET_FLASH_SCK_LOW();
data = read_Byte();
SET_FLASH_CS_HIGH();
return(data);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char read_Byte()
{
unsigned char i;
unsigned data = 0;
for (i=0;i<8;i++)
{
data <<=1;
SET_FLASH_SCK_HIGH();
// _NOP();
// _NOP();
if((FLASH_PORT_IN & PIN_FLASH_SO)==PIN_FLASH_SO)++data;
SET_FLASH_SCK_LOW();
// _NOP();
// _NOP();
}
return(data);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
void send_Byte(unsigned char data)
{
unsigned char i;
for (i=0;i<8;i++)
{
if((data & 0x80)==0x80)SET_FLASH_SI_HIGH();
else SET_FLASH_SI_LOW();
SET_FLASH_SCK_HIGH();
data = data<<1;
SET_FLASH_SCK_LOW();
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -