#include "DSP28_Device.h"
//**********************************字节写*****************************************
#pragma CODE_SECTION(outbyt, "ProgramRamFuncs");
void outbyt( uchar outbyte) //2812写数据到FM25V05
{
uchar BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++)
{
if((outbyte<<BitCnt) & 0x80) //将第(8-BitCnt)位移到最高位,与10000000B相与
{
DIN_1; //最高位为1,通过GPIOA4输出1
asm(" nop");
}
else
{
DIN_0; //最高位为0,通过GPIOA4输出0
asm(" nop");
}
CLK_1;
asm(" nop");
CLK_0;
asm(" nop");
}
}
//********************************字节读******************************************
#pragma CODE_SECTION(inputbyt, "ProgramRamFuncs");
uchar inputbyt(void) //2812从FM25V05读数据
{
Uint16 count;
uchar dat = 0;//存读得的数据
for(count = 0;count < 8;count++)
{
dat<<=1; //读下一位数据前,将上一次的数据左移一位
if(GpioDataRegs.GPADAT.bit.GPIOA7 == 1)//所读数据位为1,则dat末位写1,默认为0
{
dat++;
}
CLK_1;
CLK_0;
asm(" nop");
}
return(dat);//返回读到的数据
}
//=============================================================================================以上为基本的读写函数
//******************************打开写使能************************************
#pragma CODE_SECTION(wren_cmd, "ProgramRamFuncs");
void wren_cmd(void)
{
CLK_0;CSX_0; //拉低时钟,片选使能
outbyt(WREN_INST); //写 写使能操作码 到FM25v05
CLK_0;CSX_1;
}
//*******************************关闭写操作*********************************
#pragma CODE_SECTION(wrdi_cmd, "ProgramRamFuncs");
void wrdi_cmd(void)
{
CLK_0;CSX_0;
outbyt(WRDI_INST);//写 写禁止操作码 到FM25v05
CLK_0;CSX_1;
}
//=============================================================================================以上为写操作使能和禁止函数
//*******************************读状态寄存器*************************************
#pragma CODE_SECTION(rdsr_cmd, "ProgramRamFuncs");
uchar rdsr_cmd (void)
{
uchar aa;
CLK_0;CSX_0;
outbyt(RDSR_INST);// 1) 写 读寄存器操作码 到FM25v05
aa=inputbyt(); // 2) 读 状态寄存器
CLK_0;CSX_1;
return aa;
}
//********************************写状态寄存器***********************************
#pragma CODE_SECTION(wrsr_cmd, "ProgramRamFuncs");
void wrsr_cmd(uchar status)
{
wren_cmd();//打开写使能
CLK_0;CSX_0;
outbyt(WRSR_INST);//写状态寄存器命令
outbyt(status);//写入状态
CLK_0;CSX_1;
}
//=============================================================================================以上对状态寄存器进行读写
//*********************************写一字节数据******************************* 1
#pragma CODE_SECTION(byte_write, "ProgramRamFuncs");
void byte_write(Uint16 Address,uchar aa)
{
wren_cmd(); //开写使能
CLK_0;CSX_0;
outbyt(WRITE_INST);//发出写数据命令
outbyt((uchar)(Address>>8));//发地址高位
outbyt((uchar)(Address));//发地址低位
outbyt(aa);//发数据
CLK_0;CSX_1;
}
//*************************************写多字节数据******************************** 2
#pragma CODE_SECTION(write_seq, "ProgramRamFuncs");
void write_seq(Uint16 Address,uchar *ptr,uchar num)
{
uchar i;
wren_cmd(); //开写使能
CLK_0;CSX_0;
outbyt(WRITE_INST); //发出写命令
outbyt((uchar)(Address>>8)); //发出起始地址高字节
outbyt((uchar)(Address)); //发出起始地址低字节
for(i=0;i<num;i++)
{
outbyt(*(ptr+i)); //发出两个字节数据
}
CLK_0;CSX_1;
}
//********************************读单字节数据************************************* 3
#pragma CODE_SECTION(byte_read, "ProgramRamFuncs");
uchar byte_read(Uint16 Address)
{
uchar temp;
CLK_0;CSX_0;
outbyt(READ_INST); //发读命令
outbyt((uchar)(Address>>8));//发读地址高位
outbyt((uchar)(Address));
temp=inputbyt();//接收数据
CLK_0;CSX_1;
return(temp);
}
//*******************************读多字节数据********************************** 4
#pragma CODE_SECTION(read_seq, "ProgramRamFuncs");
void read_seq(Uint16 Address,uchar *ptr,uchar num)
{
uchar i;
CLK_0;CSX_0;
outbyt(READ_INST);
outbyt((uchar)(Address>>8));
outbyt((uchar)Address);
for(i=0;i<num;i++)
{
*(ptr+i)=inputbyt();
}
CLK_0;CSX_1;
}
//**********************************写Uint16数据*********************************** 5
#pragma CODE_SECTION(Write_Uint, "ProgramRamFuncs");
void Write_Uint(Uint16 Address,Uint16 data)
{
wren_cmd();
CLK_0;CSX_0;
outbyt(WRITE_INST); //发出写命令
outbyt((uchar)(Address>>8)); //发出起始地址高字节
outbyt((uchar)(Address)); //发出起始地址低字节
outbyt((uchar)(data>>8)); //发出Uint16的高字节,即低地址保存高字节
outbyt((uchar)data); //发出Uint16的低字节, 高地址保存低字节
CLK_0;CSX_1;
}
//**********************************读Uint16数据*********************************** 6
#pragma CODE_SECTION(Read_Uint, "ProgramRamFuncs");
Uint16 Read_Uint(Uint16 Address)
{
Uint16 data = 0x00;
Uint16 tempL = 0x00,tempH = 0x00;
CLK_0;CSX_0;
outbyt(READ_INST); //发出写命令
outbyt((uchar)(Address>>8)); //发出起始地址高字节
outbyt((uchar)(Address)); //发出起始地址低字节
tempH = inputbyt(); //读取Uint16的高字节,即低地址保存高字节
tempL = inputbyt(); //读取Uint16的高字节,即低地址保存高字节
data = (tempH<<8) | tempL;
CLK_0;CSX_1;
return data;
}
//**********************************写unsigned long数据*****************************7
#pragma CODE_SECTION(Write_Long, "ProgramRamFuncs");
void Write_Long(Uint16 Address,unsigned long data)
{
uchar temp;
wren_cmd();
CLK_0;CSX_0;
outbyt(WRITE_INST); // 发出写命令
outbyt((uchar)(Address>>8)); // 发出起始地址高字节
outbyt((uchar)(Address)); // 发出起始地址低字节
temp = (uchar)(data>>24);
outbyt(temp); // 发出Uint16的高字节,即低地址保存高字节
temp = (uchar)(data>>16);
outbyt(temp); // 发出Uint16的低字节, 高地址保存低字节
temp = (uchar)(data>>8);
outbyt(temp); // 发出Uint16的高字节,即低地址保存高字节
outbyt((uchar)data); // 发出Uint16的低字节, 高地址保存低字节
CLK_0;CSX_1;
}
//**********************************读unsigned long数据******************************8
#pragma CODE_SECTION(Read_Long, "ProgramRamFuncs");
unsigned long Read_Long(Uint16 Address)
{
unsigned long data = 0x00;
unsigned long tempH = 0x00,tempMid1 = 0x00,tempMid2 = 0x00,tempL = 0x00;
CLK_0;CSX_0;
outbyt(READ_INST); // 发出写命令
outbyt((uchar)(Address>>8)); // 发出起始地址高字节
outbyt((uchar)(Address)); // 发出起始地址低字节
tempH = inputbyt(); // 读取Uint16的高字节,即低地址保存高字节
tempMid1 = inputbyt(); // 读取Uint16的高字节,即低地址保存高字节
tempMid2 = inputbyt(); // 读取Uint16的高字节,即低地址保存高字节
tempL = inputbyt(); // 读取Uint16的高字节,即低地址保存高字节
data = (tempH<<24) | (tempMid1<<16) |(tempMid2<<8) |tempL;
CLK_0;CSX_1;
return data;
}
/***************************************************************************************/
//=============================================================================================以上为各种长度数据的读写函数
EEROM.rar_FM25V05_FM25V05 verilog_FM25V05-_spi eerom
版权申诉
114 浏览量
2022-09-21
17:44:49
上传
评论
收藏 2KB RAR 举报
APei
- 粉丝: 63
- 资源: 1万+
最新资源
- ocr模型ch-ppocr-mobile-v2.0-cls-infer
- 计算两个地点之间的最短路线距离.php
- JavaWeb-学习笔记
- 一键安装docker环境:docker、docker-compose
- 使Unity开发的游戏支持热更新的解决方案
- 信息办公简易java开源订销管理系统-javainfo.zip
- 新闻文章NTsky新闻发布(提供JavaBean)v1.0-ntskynewsv1.0javabean.zip
- 搜索链接java(结合lucene)版的公交搜索系统-javaso.zip
- 毕业设计-基于Hadoop+Spark的大数据金融信贷风险控系统源码.zip
- 其他类别MeyboMail Web(Java)开源简化-meybomailweb.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈