📄 fm25cl64.c
字号:
/****************************************************
*---------------------------------------------------*
* 功能描述: FM25CL64操作 *
*---------------------------------------------------*/
#include "mpa101.h"
//------------------------------------------
// Function : FM25X_Init
// Description: 初始化
//------------------------------------------
void FM25X_Init(U32 sp)
{
U32 n;
n = Fpclk*2/sp;
if(n<8) n = 8;
S0SPCCR = n; // 时钟>=8 16*2/8 = 4M
// S0SPCR = 0x38; // 主模式、CPOL=1、CPHA=1 SPIMODE=3
S0SPCR = 0x20; // 主模式、CPOL=0、CPHA=0 SPIMODE=0
FIO0SET = SS1;
}
//------------------------------------------
// Function : FM_Wen
// Description: 允许写操作
//------------------------------------------
void FM_Wren(void)
{
FIO0CLR = SS1;
S0SPDR = WREN;
while(0==(S0SPSR&0x80));
FIO0SET = SS1;
}
//------------------------------------------
// Function : FM_Wrdi
// Description: 写操作禁止
//------------------------------------------
void FM_Wrdi(void)
{
FIO0CLR = SS1;
S0SPDR = WRDI;
while(0==(S0SPSR&0x80));
FIO0SET = SS1;
}
//------------------------------------------
// Function : FM_Rdsr
// Description: 读状态值
//------------------------------------------
U8 FM_Rdsr(void)
{
U8 re;
FIO0CLR = SS1;
S0SPDR = (U8)(RDSR);
while(0==(S0SPSR&0x80));
S0SPDR = 0xff; // 送8个SCK
while(0==(S0SPSR&0x80));
re = S0SPDR;
FIO0SET = SS1;
return(re);
}
//------------------------------------------
// Function : FM_Wrsr
// Description: 写状态值
//------------------------------------------
void FM_Wrsr(U8 status)
{
FM_Wren();
FIO0CLR = SS1;
S0SPDR = (U8)(WRSR);
while(0==(S0SPSR&0x80));
S0SPDR = status;
while(0==(S0SPSR&0x80));
FIO0SET = SS1;
}
//************FM25CL04**********************
//------------------------------------------
// Function : FM_WByte
// Description: 写byte数据至FM25CL04
//------------------------------------------
void FM_WByte(U16 add, U8 dat)
{
FM_Wren();
FIO0CLR = SS1;
S0SPDR = WRITE|(U8)((add/256)<<3); // 写指令
while(0==(S0SPSR&0x80));
S0SPDR = (U8)(add%256); // 低位地址
while(0==(S0SPSR&0x80));
S0SPDR = dat; // 送数据
while(0==(S0SPSR&0x80));
FIO0SET = SS1;
}
//------------------------------------------
// Function : FM_WriteSeq
// Description: 写数据串至FM25CL04
//------------------------------------------
void FM_WriteSeq(U16 add, U8 *ptr, U16 num)
{
U16 i;
FM_Wren();
FIO0CLR = SS1;
S0SPDR = WRITE|(U8)((add/256)<<3); // 写指令
while(0==(S0SPSR&0x80));
S0SPDR = (U8)(add%256); // 低位地址
while(0==(S0SPSR&0x80));
for(i=0; i<num; i++){
S0SPDR = *(ptr+i); // 送数据
while(0==(S0SPSR&0x80));
}
FIO0SET = SS1;
}
//------------------------------------------
// Function : FM_RByte
// Description: 从FM25CL04读byte数据
//------------------------------------------
U8 FM_RByte(U16 add)
{
U8 re;
FIO0CLR = SS1;
S0SPDR = READ|(U8)((add/256)<<3); // 读指令
while(0==(S0SPSR&0x80));
S0SPDR = (U8)(add%256); // 低位地址
while(0==(S0SPSR&0x80));
S0SPDR = 0xff; // 送8个SCK
while(0==(S0SPSR&0x80));
re = S0SPDR; // 读取数据
FIO0SET = SS1;
return(re);
}
//------------------------------------------
// Function : FM_ReadSeq
// Description: 从FM25CL04读数据串
//------------------------------------------
void FM_ReadSeq(U16 add, U8 *ptr, U16 num)
{
U16 i;
FIO0CLR = SS1;
S0SPDR = READ|(U8)((add/256)<<3); // 读指令
while(0==(S0SPSR&0x80));
S0SPDR = (U8)(add%256); // 低位地址
while(0==(S0SPSR&0x80));
for(i=0; i<num; i++){
S0SPDR = 0xff; // 送8个SCK
while(0==(S0SPSR&0x80));
*(ptr+i) = S0SPDR; // 读取数据
}
FIO0SET = SS1;
}
//**************FM25CL04********************
//**************FM25CL64********************
//------------------------------------------
// Function : FM_WByte
// Description: 写byte数据至FM25CL64
//------------------------------------------
/*void FM_WByte(U16 add, U8 dat)
{
FM_Wren();
FIO0CLR = SS1;
S0SPDR = WRITE; // 写指令
while(0==(S0SPSR&0x80));
S0SPDR = (U8)(add/256); // 写高位地址
while(0==(S0SPSR&0x80));
S0SPDR = (U8)(add%256); // 低位地址
while(0==(S0SPSR&0x80));
S0SPDR = dat; // 送数据
while(0==(S0SPSR&0x80));
FIO0SET = SS1;
}
//------------------------------------------
// Function : FM_WriteSeq
// Description: 写数据串至FM25CL64
//------------------------------------------
void FM_WriteSeq(U16 add, U8 *ptr, U16 num)
{
U16 i;
FM_Wren();
FIO0CLR = SS1;
S0SPDR = WRITE; // 写指令
while(0==(S0SPSR&0x80));
S0SPDR = (U8)(add/256); // 写高位地址
while(0==(S0SPSR&0x80));
S0SPDR = (U8)(add%256); // 低位地址
while(0==(S0SPSR&0x80));
for(i=0; i<num; i++){
S0SPDR = *(ptr+i); // 送数据
while(0==(S0SPSR&0x80));
}
FIO0SET = SS1;
}
//------------------------------------------
// Function : FM_RByte
// Description: 从FM25CL64读byte数据
//------------------------------------------
U8 FM_RByte(U16 add)
{
U8 re;
FIO0CLR = SS1;
S0SPDR = READ; // 读指令
while(0==(S0SPSR&0x80));
S0SPDR = (U8)(add/256); // 读高位地址
while(0==(S0SPSR&0x80));
S0SPDR = (U8)(add%256); // 低位地址
while(0==(S0SPSR&0x80));
S0SPDR = 0xff; // 送8个SCK
while(0==(S0SPSR&0x80));
re = S0SPDR; // 读取数据
FIO0SET = SS1;
return(re);
}
//------------------------------------------
// Function : FM_ReadSeq
// Description: 从FM25CL64读数据串
//------------------------------------------
void FM_ReadSeq(U16 add, U8 *ptr, U16 num)
{
U16 i;
FIO0CLR = SS1;
S0SPDR = READ; // 读指令
while(0==(S0SPSR&0x80));
S0SPDR = (U8)(add/256); // 读高位地址
while(0==(S0SPSR&0x80));
S0SPDR = (U8)(add%256); // 低位地址
while(0==(S0SPSR&0x80));
for(i=0; i<num; i++){
S0SPDR = 0xff; // 送8个SCK
while(0==(S0SPSR&0x80));
*(ptr+i) = S0SPDR; // 读取数据
}
FIO0SET = SS1;
}*/
//**************FM25CL64********************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -