全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include FM25L256.h/FM25L256数据读取子程序/参数: *pDestination要读入数据的主机内存地址指针; uiSourceAddress要读取的数据在FM25L256中的地址(整形); uiNum数据个数(整形)/参数条件: uiSourceAddress+(uiNum-1)不能大于器件的最高地址; uiNum必须0;void ReadFM25L256(unsigned char *pDestination, unsigned int uiSourceAddress, unsigned int uiNum) unsigned char ucHighAddress = uiSourceAddress 8; /高位地址 SPCR = (1SPE)|(1MSTR)|(0CPOL)|(0SPR0); EnableFM25256; /CS变低 SPDR = 0x03; /写入读命令字 while(SPSR&(1SPIF)=0); /等待SPI发送完毕 SPDR = ucHighAddress; /写入高位地址 while(SPSR&(1SPIF)=0); /等待SPI发送完毕 SPDR = (unsigned char) (uiSourceAddress & 0x00FF); /写入低位地址 while(SPSR&(1 0;uiNum-) SPDR = 0; /为了读取数据,需要写入数据,发送SCK,故写入0 while(SPSR&(10;/返回值:所发送数据的检验和unsigned char ReadFM25L256SendToUsart(unsigned int uiSourceAddress, unsigned int uiNum) unsigned char ucHighAddress = uiSourceAddress 8; /高位地址 unsigned char ucTemp; EnableFM25256; /CS变低 SPCR = (1SPE)|(1MSTR)|(0CPOL)|(0SPR0); SPDR = 0x03; /写入读命令字 while(SPSR&(1SPIF)=0); /等待SPI发送完毕 SPDR = ucHighAddress; /写入高位地址 while(SPSR&(1SPIF)=0); /等待SPI发送完毕 SPDR = (unsigned char) (uiSourceAddress & 0x00FF); /写入低位地址 while(SPSR&(1 0;uiNum-) SPDR = 0; /为了读取数据,需要写入数据,发送SCK,故写入0 while(SPSR&(1 8; /高位地址 EnableFM25256; /CS变低 SPCR = (1SPE)|(1MSTR)|(0CPOL)|(0SPR0); SPDR = 0x06; /写入写使能WREN命令 while(SPSR&(1SPIF)=0); /等待SPI发送完毕 DisableFM25256; /CS变高 _delay_us(50); EnableFM25256; /CS变低 SPDR = 0x02; /写入写命令字 while(SPSR&(1SPIF)=0); /等待SPI发送完毕 SPDR = ucHighAddress; /写入高位地址CI-FM25H20-DG while(SPSR&(1SPIF)=0); /等待SPI发送完毕 SPDR = (unsigned char) (uiDestinationAddress & 0x00FF); /写入低位地址 while(SPSR&(1 0;uiNum-) SPDR = *pSource; /发送要写入的数据 while(SPSR&(1SPIF)=0); /等待SPI发送完毕 pSource+; DisableFM25256; /CS变高/FM25L256自检子程序/返回值:0:自检成功,1:自检失败unsigned char FM25L256SelfTest(void) unsigned int uiTemp; uiTemp = ReadInt(FM25L256_CHECK_ADDRESS); if (uiTemp = 0xA55A) /判断是否存储器是否能读 return (0); else /存储器不能读或未进行出厂设置 SetDefault(); /出厂设置,函数定义在System.c WriteInt (0xA55A,FM25L256_CHECK_ADDRESS); /设置已出厂设置标志 uiTemp = ReadInt(FM25L256_CHECK_ADDRESS); if (uiTemp = 0xA55A) /若读取正确返回0 return (0); else return (1); /若仍读取错误则返回1 /*/测试FM25L256子程序void VerifyFM25L256(void) unsigned int uiCheckAddress = 0; unsigned int uiMemoryNum = ReadInt(MEMORY_ADDRESS); unsigned int uiOldData; unsigned char ucError = 0; unsigned char ucSendChkSum; unsigned char i; union tagSTOREINT siUsartDataInt; /整型共用体,将整形分解为字节型存取,在DataStore.h中定义 for (;uiCheckAddress uiMemoryNum;uiCheckAddress += 2) uiOldData = ReadInt(uiCheckAddress); /保存原有数据 WriteInt (0xA55A,uiCheckAddress); /写入测试字/ _delay_cycles(10); if (ReadInt(uiCheckAddress) != 0xA55A) WriteInt (uiOldData,uiCheckAddress); /写回原有数据 SendChar(COMM_FRAME_START); /发送反馈帧头 ucSendChkSum = COMM_FRAME_START; /计算反馈帧的校验和 SendChar(VERIFY_FRAM_COMMAND); /发送命令字 ucSendChkSum += VERIFY_FRAM_COMMAND; /计算反馈帧的校验和 siUsartDataInt.uiStoreInt = uiMemoryNum; /发送地址总长 for (i = 0;i = 1;i+) SendChar(siUsartDataInt.ucStoreBuffi); ucSendChkSum += siUsartDataInt.ucStoreBuffi; siUsartDataInt.uiStoreInt = uiCheckAddress; /发送测试地址 for (i = 0;i = 1;i+) SendChar(siUsartDataInt.ucStoreBuffi); ucSendChkSum += siUsartDataInt.ucStoreBuffi; SendChar(FINISHED_SEND); ucSendChkSum += FINISHED_SEND; /发送结束上传标志 SendChar(ucSendChkSum); /发送检验和 SendChar(COMM_FRAME_END); /发送帧尾 ucError = 1; /置错误标志 break; /退出循环 else if (uiCheckAddress + 2) % 1024) = 0) & (uiCheckAddress + 2) uiMemoryNum) WriteInt (uiOldData,uiCheckAddress); /写回原有数据 SendChar(COMM_FRAME_START); /发送反馈帧头 ucSendChkSum = COMM_FRAME_START; /计算反馈帧的校验和 SendChar(VERIFY_FRAM_COMMAND); /发送命令字 ucSendChkSum += VERIFY_FRAM_COMMAND; /计算反馈帧的校验和 siUsartDataInt.uiStoreInt = uiMemoryNum; /发送地址总长 for (i = 0;i = 1;i+) SendChar(siUsartDataInt.ucStoreBuffi); ucSendChkSum += siUsartDataInt.ucStoreBuffi; siUsartDataInt.uiStoreInt = uiCheckAddress + 2; /发送测试完成地址 for (i = 0;i = 1;i+) SendChar(siUsartDataInt.ucStoreBuffi); ucSendChkSum += siUsartDataInt.ucStoreBuffi; SendChar(GO_ON_SEND); ucSendChkSum += GO_ON_SEND; /发送结束上传标志 SendChar(ucSendChkSum); /发送检验和 SendChar(COMM_FRAME_END); /发送帧尾/ _watchdog_reset(); /复位看门狗 WriteInt (uiOldData,uiCheckAddress); /写回原有数据 if (ucError = 0) SendChar(COMM_FRAME_START); /发送反馈帧头 ucSendChkSum = COMM_FRAME_START; /计算反馈帧的校验和 SendChar(VERIFY_FRAM_COMMAND); /发送命令字 ucSendChkSum += VERIFY_FRAM_COMMAND; /计算反馈帧的校验和 siUsartDataInt.uiStoreInt = uiMemoryNum; /发送地址总长 for (i = 0;i = 1;i+) SendChar(siUsartDataInt.ucStoreBuffi); ucSendChkSum += siUsartDataInt.ucStoreBuffi; siUsartDataInt.uiStoreInt = uiCheckAddress; /发送测试完成地址 for (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- -一级建造师之一建矿业工程实务模考模拟试题(全优)
- 针刺配合手法治疗心肾不交型失眠的临床疗效观察
- 针刺联合腰痛宁胶囊治疗腰椎间盘突出症的10例体会
- 教育评估与督导方法课程试题及答案
- 做账实操-拉面馆的成本核算
- 生物下册食品安全课件
- 教育行业教育培训师岗位入职能力测试题库及解析
- 开学焦虑测试题及答案
- 家庭育儿难题应对方案测试题答案集针对幼儿阶段
- 健康饮食知识测试卷及参考答案版
- 2025年秋人教 PEP 版小学英语四年级上册期中检测试卷及答案(共3套)
- 2025后勤考试试卷及答案
- 粉尘清扫安全管理制度完整版
- 体育单招数学知识点系统串讲讲义
- 第15课+货币的使用与世界货币体系的形成+课件-2025-2026学年高二上学期历史统编版选择性必修1国家制度与社会治理
- 2025 小学尊重他人隐私保健课件
- 团校结业考试试题及答案
- 2025南京市劳动合同解除协议样本
- 《中国高血压防治指南(2025年修订版)》全文
- 科室护理质控人员的培训
- 全面从严治团课件
评论
0/150
提交评论