




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AVR104: 缓存和中断方式EEPROM写入 翻译:邵子扬AVR104: 缓存和中断方式EEPROM写入翻译:邵子扬 2006年8月18日1 特点l 多字节 EEPROM 缓存l 高效 EEPROM 访问l 缓存访问控制l EEPROM 缓存重写2 介绍许多应用中使用了 AVR 单片机内置的 EEPROM 来保存和恢复参数。存放单个字节到 EEPROM 的编程时间在 3 到 8.5 ms 左右,在这个写入时间里写入访问被禁止。传统上是使用查询法来判断 EEPROM 写入是否完成的,这篇应用笔记介绍一种使用缓存和中断方法,明显的提高了程序的性能,和查询法相比还减少了电源的功耗(在等待期间可以进入休眠模式)。提高性能和降低功耗直接关系到系统。当执行 EEPROM 写访问查询时,所有资源(除了中断)都被查询所占用,而中断法在“等待” EEPROM 写入完成中断时,可以将单片机释放出来去执行其它代码。与查询法相比,中断驱动写每字节的 EEPROM 最多可以释放 8.5 ms 时间 依赖于芯片编程时间和系统时钟频率。3 理论AVR 单片机既可以通过中断方式也可以通过查询方式写内部的 EEPROM,两种方法有各自的优点,但是从执行性能看要选择中断方式。3.1 轮询法轮询就是在读写时,查询 EEWE 状态标志位来保证写周期已经完成。如果写周期还在进行中,单片机将等待并不停检查标志位,直到标志位被清楚后才继续进行。检查自编程是否被激活也是必要的,在需要时,要等待 SPM 操作完成。如果不使用自编程,可以忽略这个步骤。一旦标志位被清除,就可以启动下一个 EEPROM 操作了。轮询法的优点是代码紧凑,主要缺点是单片机在等待 EEPROM 写入时浪费了很多时间。一个典型的单字节写子程序如下:EEPROM_WR: ;EEPROM Write Sub-Routinesbic EECR, EEWE ;If EEWE Not Clearrjmp EEPROM_WR ;Wait LongerSPM_BUSY: ;(Omit if Self-Programming is Not Used)sbic SPMCR, SPMEN ;If SPMEN Not Clearrjmp SPM_BUSY ;Wait Longerout EEARH, r16;Output Address Byte (High)out EEARL, r17;Output Address Byte (Low)out EEDR, r18 ;Output Data Bytecli ;Disable Global Interruptssbi EECR, EEMWE ;Set Master Write Enablesbi EECR, EEWE;Set EEPROM Write Strobe;This instruction takes four clock;cycles.sei ;Enable Global Interruptsret ;Return From Sub-Routine3.2 中断法在中断驱动法,不需要查询 EEWE 状态位确定 EEPROM 写入完成,EEPROM 就绪中断是 EEWE 状态位被清除时触发的。如果使用了自编程,还是需要查询 SPMEN 状态位的,保证当前没有处于自编程状态。中断驱动法的主要优点是减少了处理器的负荷。如果使用了缓存中断驱动 EEPROM 访问的效率更高:缓存保存需要写入 EEPROM 的参数,中断程序从缓存中获取数据。中断复位程序 (ISR) 的复杂度和写入 EEPROM 的字节数有关。这个程序对单字节缓存是相对简单的,但是当需要写入多字节时就变得复杂了。为了写入多字节,缓存区需要一个计数变量,用来跟踪当前使用的缓冲区位置。计数器就是缓存索引指针。3.3 缓存结构在一个努力简化和增强的多字节写入中断驱动法,在片内 SRAM 中构造了两个缓冲区。两个缓冲区分别负责缓存地址和数据。Atmega 系列最小 EEPROM 是 512 字节,这需要 2 字节标识地址,这样1 字节的 EEPROM 缓存就是 3 个字节。图1. EEPROM 访问的 数据和地址 LIFO 缓存3.3.1 缓存大小缓存 EEPROM 写入主要考虑的因素之一是缓冲区的大小。缓冲区大小影响性能,因为需要搜索缓冲区查找 EEPROM 地址是否已经在缓存中了;如果在就需要在写入时更新,或者在读取时返回其内容。EEPROM 也扮演了决定合适缓冲区大小的角色,必须考虑包括 EEPROM 和 EEPROM 使用和/或更新的字节数。如果有许多字节在短时间内要写入 EEPROM,缓存需要足够大来容纳这些数据。提供一个方法来决定合适的缓存大小超出了这篇文档的范围,缓存大小需要由具体程序来评估,上面介绍过的指导方针可以提供足够帮助来决定合适的缓存大小。3.4 缓存结果当缓存内容写入片内 EEPROM 时,一对特殊条件必须考虑。首先,需要决定一个更新的参数包含在缓存还没有写入 EEPROM 时在读或写 EEPROM时需要什么。读和写程序需要分别创建,先搜索缓存检查期望的位置是否包含在缓冲区中。如果期望的位置在缓冲区中,执行读或写命令时数据被返回或更新。如果期望位置不在缓冲区中,使用读指令访问 EEPROM 并返回数据。同样,如果是写命令,数据将放入缓存中没有使用的位置并排队写 EEPROM。3.4.1 使用 EEPROM缓存中断写 EEPROM 的主要威胁来自电源掉电。如果系统使用了缓存中断驱动写 EEPROM,而又同时发生了电源掉电,整个缓冲区将会丢失,包括 EEPROM 数据和地址的缓存。因此,必须仔细仔细考虑和分析怎样避免这种情况。AVR 休眠模式将不影响缓冲区的内容,因为从休眠中唤醒时寄存器和 SRAM 不会改变。但是 EE_RDY ISR 在休眠模式下必须考虑额外的因素:无论在 Idle 或 ADC 降噪模式下 EE_RDY 中断复位程序可以唤醒单片机,但是在其它休眠模式不行。为了能使用其它休眠模式,如果数据放入缓存中休眠模式将被修改,当缓存是空时休眠模式返回到它之前的状态。这自然意味着当 EEPROM 缓冲区包含数据时休眠模式不被修改。这允许程序其余部分调用 SLEEP 指令而不考虑是否要修改模式以适合 EEPROM 写入。必须小心决定什么时候执行真正的 EEPROM 写操作。当正在自编程时是不能写 EEPROM 的!EEPROM 写入只有在自编程结束后才能进行。此外,推荐在 Vcc 低时不要进行写入操作以避免 EEPROM 写错误(详细的查看数据手册)。4 执行缓存中断控制 EEPROM 写的例子是基于 IAR EWAVR v2.28A 编译器的。但是只需很少的修改就可以用于 ImageCraft、CodeVisionAVR 或其它任何 C 编译器下。例子的代码由两个函数和中断复位程序组成。EEPROM_PutChar() 将缓存的内容写入 EEPROM, EEPROM_GetChar() 获取并返回指定位置 EEPROM 的数据。最后,EE_RDY 中断复位程序处理EEPROM 写入过程。下面的流程图说明了 EEPROM_PutChar() 和 EEPROM_GetChar() 函数,以及 EE_RDY ISR。图2. EEPROM_PutChar(uint, uchar) 流程图当进入 EEPROM_PutChar() 程序,首先搜索缓冲区查找期望的地址。如果地址在缓冲区中,就用新数据更新缓冲区并返回主程序;否则地址和数据都需要放入缓冲区。两种情况下,都禁止中断,以防止 EEPROM ISR 在缓冲区更新时访问缓冲区。在放入新的地址和数据时,需要检查缓冲区空间。如果缓冲区有可以空间,添加数据到缓冲区并返回;否则,如果缓冲区满,则执行中断方式 EEPROM 写入。一旦写入完成并清理出缓冲区,数据就可以添加到缓冲区了。另外,EEPROM_PutChar() 函数还允许 EEPROM Ready 中断并设置休眠模式为 Idle。图3. EEPROM_GetChar(uint) 流程图一旦进入 EEPROM_GetChar() 程序,首先分析缓冲区以查找指定地址。如果地址找到,取出对应的数据并返回;如果在缓冲区中没有找到,程序从 EEPROM 中取出数据再返回。先分析缓冲区是因为缓冲区包含了更新过而尚未写入 EEPROM 的数据。图4. EE_RDY 中断服务程序流程在执行 EE_RDY ISR 前,必需检测是否处于自编程状态。如果是,需要等待自编程结束 (如果你的设计不使用自编程,可以忽略这一步骤)。在判断 EEPROM 可以写入之后,执行下面简单的 EEPROM 写入算法(也可以在数据手册中找到) 。1. 写入地址到 EEAR 寄存器。2. 写入数据到 EEDR 寄存器。3. EECR 寄存器的 EEMWE 位置 1,EEWE 位置 0。4. 在设置 EEMWE 位后的 4 个时钟周期内将 EEMWE 位置 1。当 EEWE 置位后,单片机在执行下一个指令前停止两个周期。当写入后,EEWE 位由硬件自动清除。在此之后,ISR 写入 $FFFF 到地址位以及写入 $FF 到数据位清空 EEPROM 缓冲区内容。如果缓冲区是空的,EEPROM Ready 中断被禁止,重新设置调用 EEPROM_PutChar 之前的休眠模式。5 代码脚注代码的脚注如下表所示。表1. 内存的使用内存不优化大小优化速度优化代码440388418数据50(1)50(1)50(1)注意: 1. Buffersize = 166 增强功能这里使用的缓冲区是后进先出(Last In First Out:LIFO)的,通常也被称为堆栈。在堆栈缓冲区,数据因为 LIFO 可能保持没有写入 EEPROM。缓冲区可以被修改为先进先
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电子设备行业可穿戴设备市场前景分析报告
- 2025年区块链金融行业技术应用与市场前景研究报告
- 2025年科技行业区块链应用前景研究报告
- 2025年医疗美容行业美容器械市场前景展望报告
- 2025年电子科技行业发展前景与趋势预测报告
- 2025年金融科技在区块链应用中的前景分析报告
- 北京市2025北京怀柔区事业单位招聘95人笔试历年参考题库附带答案详解
- 临汾市2025山西临汾市浮山县招聘事业单位人员90人笔试历年参考题库附带答案详解
- 2025辽宁鞍山市台安绿洁创能生态科技有限公司招聘6人笔试参考题库附带答案详解
- 2025航天六院内蒙古航天红峡化工有限公司招聘30人笔试参考题库附带答案详解
- 云南学法减分题库及答案
- 幼儿园大班数学活动《4的分解与组合》课件
- 江苏省制造业领域人工智能技术应用场景参考指引2025年版
- 三级医师查房制度考试题(含答案)
- 文旅公司考试试题及答案
- 2025至2030年中国公立医院行业发展监测及市场发展潜力预测报告
- 2025年全国翻译专业资格(水平)考试土耳其语三级笔译试卷
- 人工智能技术在网络安全威胁检测中的应用
- 2025内蒙古民族大学招聘管理助理、教学助理50人笔试模拟试题及答案解析
- 2025年麻醉、第一类精神药品管理培训考核试题及答案(护士卷)
- 胃肠镜报告的解读
评论
0/150
提交评论