FM25L256操作子程序.doc_第1页
FM25L256操作子程序.doc_第2页
FM25L256操作子程序.doc_第3页
FM25L256操作子程序.doc_第4页
FM25L256操作子程序.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论