CYGNAL 应 用 笔 记AN006 外部SRAM与C8051F000接口_第1页
CYGNAL 应 用 笔 记AN006 外部SRAM与C8051F000接口_第2页
CYGNAL 应 用 笔 记AN006 外部SRAM与C8051F000接口_第3页
CYGNAL 应 用 笔 记AN006 外部SRAM与C8051F000接口_第4页
CYGNAL 应 用 笔 记AN006 外部SRAM与C8051F000接口_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、CYGNAL 应 用 笔 记AN006外部SRAM 与C8051F000接口 IDT71V124Cygnal图1. 外部SRAM 接口框图引言本应用笔记的目的是介绍如何将一个通用SRAM 芯片或一个按存储器寻址的外设部件与C8051器件通过通用I/O 引脚连接本文给出了硬件连接框图电路原理图时序图示例代码和性能评价这种接口方式的应用包括A/D 转换数据的采集数据记录或任何其它涉及大量数据存储的应用关键点该参考设计假定使用10ns 的SRAM 如果所用SRAM 的访问时间大于45ns则需要加入NOP指令以延长地址建立时间及读/写选通时间需要的引脚数取决于所支持的地址空间对于本设计的128K 字节

2、地址空间需要21个引脚CYGNAL Integrated Products, Inc. 沈阳新华龙电子有限公司 4301 Westbank Drive 沈阳市和平区青年大街284号58号信箱Suite B-100 Copyright ©2001Cygnal Integrated Products, Inc. 电话0242393036623940230 Austin, TX 78746 版权所有 电邮longhua 网址 如果设计中使用SRAM一定要向供应商查询产品的供货情况生产厂家正逐步淘汰很多低容量的SRAM器件说明这个外部SRAM接口示例使用一个Integrated Device

3、 Technologies 生产的IDT71V124SA10PH128K X 8位3V SRAM任何一个通用SRAM器件都可以在类似的方式下工作接口部分采用地址和数据总线复用的方式以减少所需要的端口引脚数当传输数据时低位地址保持在一个锁存器中第5页中的图4给出了该实现方案经过验证的配置图双向端口操作Data1用作数据输入总线输出总线和部分地址总线对总线的复用需要对端口的配置进行动态改变使端口按需要设置为输入或输出为了将一个端口引脚配置为输入必须将其相应的端口配置寄存器位PRTnCF.x设置为0 使其输出方式为漏极开路寄存器锁存位Pn.x必须设置为1使其输出状态为高阻态 例如下面的代码将端口0的

4、所有引脚配置为输入 mov PRT0CF, #00h ;漏极开路输出方式mov P0, #0ffh ;高阻抗下面的代码将端口0的所有引脚配置为推挽输出方式 mov PRT0CF, #0ffh ;推挽输出方式SRAM_Read子程序见示例代码部分给出改变端口方向的一个例子在程序执行的前一阶段DATA1口被配置为输出将低字节地址输出到端口锁存器在程序执行的第二阶段DATA1口被配置为输入从外部SRAM读取数据信号和接线图1给出了C8051F000SRAM地址锁存器之间的硬件连接框图整个电路原理图见图4连线标识及信号名说明如下在示例代码中以DATA1为标识的复用地址/数据总线AD7.0支持低8位地址

5、和8位数据这种配置使得在SRAM与C8051之间传输数据时低位地址保持在锁存器573中这样就不需要再为数据传输增加8位端口在示例代码中以ADDR为标识的A15.8提供高8位地址在示例代码中以A16为标识的A16作为两个64KB存储块的选择信号为0时选择1块为1时选择2块RD WR ALE和CS为控制信号在示例代码中使用相同的名字RD是读 选通信号低电平有效WR是写选通信号低电平有效ALE是地址锁存信号用于在 数据传输期间保持低8位地址CS是SRAM的片选信号低电平有效2AN06-1.0 NOV00 ©2001Cygnal Integrated Products, Inc.软件操作SR

6、AM_Init SRAM_Read和SRAM_Write是用于访问外部SRAM的三个子程序SRAM_Init程序初始化SRAM接口逻辑和端口配置该程序只在器件的初始化过程中被调用该程序假定交叉开关已经被允许XBR2.6=1例如允许交叉开关#40h;movXBR,初始化SRAMacall SRAM_Init ;SRAM_Read程序从外部SRAM读一个字节调用该程序之前先将DPTR装入16位的待读地址然后调用SRAM_Read该程序将从DPTR所指向的地址读到的数据返回到ACC 例如装入高字节地址#00h ;movDPH,装入低字节地址#00h ;DPL,mov进行读操作数据返回到ACCacal

7、l SRAM_Read;SRAM_Write程序将ACC中的一个字节写入到外部SRAM地址由DPTR指定调用该程序之前将待写数据装入ACC将DPTR装入16位的待写地址然后调用SRAM_Write例如#00h ;装入高字节地址DPH,mov装入低字节地址#00h ;DPL,mov装入待写数据;a,#55hmov进行写操作;acall SRAM_Write示例代码中的主程序概述了如何对该外部128KB SRAM的每一个字节进行读写该程序向外部SRAM写入一个字节再从写入的地址读回然后比较回读的值与写入的值是否一致程序接着处理下一个地址直到整个64K的存储块写完一旦低存储块写完程序将A16位置1见

8、示例代码中常数和声明一节切换到高存储块程序将接着对高存储块的每个字节进行同样 的读写和校验操作时序说明图2和3分别给出按示例代码实现的读和写时序波形表1给出这些图形中的时间值读时序说明tRDSU表1是指从读选通信号有效到输出数据有效的时间与这一时序相对应的代码为clr RD;使读选通有效;NOP ;加入NOP指令延长tRDSU;读数据mov a,DATA如上所示为了满足SRAM的建立时间需要在clr RD之后加入NOP指令©2001Cygnal Integrated Products, Inc.AN06-1.0 NOV003写时序说明如表1所示tWR是指/WR脉冲的宽度下面的代码段用

9、于产生这一脉冲 clr WR;使写选通有效;NOP ;加入NOP指令延长tWRSU;使写选通无效setb WR如上所示为了满足SRAM的建立时间需要在clr WR之后加入NOP指令性能这一多路复用的并行接口实现方案使用一般的I/O端口却达到了较高的数据传输率从读或写过程的进入到返回一个字节读或字节写占用34个SYSCLK周期对于20MHz的SYSCLK 相当于1.7µs这就是说可以达到的最大传输率为588K字节/秒一个64K的存储块可以在137µs 内读或写完4AN06-1.0 NOV00 ©2001Cygnal Integrated Products, Inc.

10、符号 参数周期SYSCLK=20MHz读周期 t ALE 锁存脉冲宽度 2 100ns t RDSU 数据建立时间2 100ns 写周期 t ALE 锁存脉冲宽度 2 100ns t WASU 地址建立时间3 300ns t WDSU 数据建立时间4 200ns t WR写脉冲宽度2 100ns表1. 读和写周期时序 AD7.0/RDALEA15.8图2. 读周期时序波形 /WRAD7.0ALEA15.8图3. 写周期时序波形©2001Cygnal Integrated Products, Inc.AN06-1.0 NOV00 5 图4. 经过测试的C8051F000128k x 8

11、 SRAM和地址锁存器配置 示例代码;- ; Copyright (C 2000 CYGNAL INTEGRATED PRODUCTS, INC.; 版权所有; 文件名: Sram.ASMC8051F000; 目标MCU :; 说明: 外部SRAM读/写验证程序对IDT 71V124SA ;- ; 等价定义;- $NOLIST$MOD8F000$LIST;-; 常量和声明;-;数据端口引脚(AD7.0DATA1 EQU P3端口配置寄存器对数据;DATACF EQU PRT3CF地址端口引脚(A15.8;ADDR EQUP2;端口配置寄存器对地址ADDRCF EQU PRT2CF最高地址位(地

12、址块选择P1.5 ;A16 EQUP1.4 ;读选通(低电平有效EQURD写选通(低电平有效P1.3 ;EQUWR地址锁存信号(低电平有效ALE EQUP1.2 ;SRAM片选信号(低电平有效P1.1 ;EQUCS;- ; 变量;- ;- ; 复位和中断向量;- ; 复位向量org00hljmp Main;- ; 主程序代码;- 0B3horgMain:; 禁止看门狗定时器中断尚未被允许如果中断被允许我们应明确禁止中断 ; 以保证下面的两条指令能在4个时钟周期内执行完#0DEhmovWDTCN,#0ADhWDTCN,mov; 设置交叉开关弱上拉允许交叉开关#40h ;XBR2,Mov初始化SR

13、AMlcall SRAM_Init;#0ffhR0,mov;初始化16位地址#00hDPH,mov#00h;DPL,mov装写入值R0 ;a,mov将写一个值到SRAM然后读出与写入值比较Loop;loop:写入SRAMlcall SRAM_Write ;clr a ; 清除装入值读同一地址;lcall SRAM_Readerror检查读到的值是否与写入值相同;00h,cjne a,下一地址inc dptr ;DPH检查DPTR判断是否结束dptr=0000h a,mov;DPLa,orl如果DPTR循环回到初始值说明我们已结束;jzb1done; 了对第一个64K块的操作movR0 ;重装写

14、入值a,再次进行写读和验证jmploop ;b1done:orlP1, #00111010b ; 转到对存储块2操作#0ffhR0,mov;初始化16位地址#00hDPH,mov;#00hDPL,mov装写入值R0 ;a,movLoop1将写一个值到SRAM然后读出与写入值比较;loop1:写入SRAMlcall SRAM_Write ;clr a ; 清除装入值lcall SRAM_Read读同一地址;检查读到的值是否与写入值相同;00h,errorcjne a,下一地址inc dptr ;检查DPTR判断是否结束dptr=0000hmov;DPHa,;DPLorla,如果DPTR循环回到初

15、始值说明我们已结束;b2donejz; 了对第一个64K存储块的操作重装写入值R0 ;mova,再次进行写读和验证jmploop1 ;b2done: jmp $ ;error: jmp $ ; 验证时发现错误;-; SRAM_Init;-; 该程序初始化SRAM接口逻辑必须在任何SRAM_Read或SRAM_Write操作之前; 被调用一次可作为复位操作的一部分该程序假定交叉开关已经被允许(XBR2.6 = '1'SRAM_Init:mov;允许端口3(DATA作为输入总线#00hDATACF,#0ffhmovDATA1,ADDRCF,#0ffh ; 允许端口2(ADDR作为输

16、出mov#0ffh ;驱动为高电平 ($ffADDR,mov#00111110b ;允许P1.7.3 作为输出PRT1CF,orlanl P1, #11011011b ; A16 = '0' ALE = '0' 存储块1orl P1, #00011010b ; RD, WR, CS = '1'ret;-; SRAM_Read;-; 该程序读外部SRAM从DPTR指向的地址读取数据存到ACC此处未处理存储块选择(操作A16 ;SRAM_Read:clr CS ; 选择SRAM;输出外部地址A15.A8DPHADDR,mov;允许AD7.0 为输出D

17、ATACF,#0ffhmov输出外部地址A7.A0DPL ;DATA1,movsetb ALE ; 锁存该地址ALEclr允许 AD7.0 为输入;mov#00hDATACF,#0ffhDATA1,movclr RD ; 发出读选通读数据(注对于这片SRAM读操作建立时间DATA1 ;mova,; 为45ns在SYSCLK = 20MHz时该指令需; 两个时钟周期或50ns * 2 = 100ns使读选通无效;Setb RDSRAM片选无效setb CS;ret;一个读操作共需;30字接34个周期;-; SRAM_Write;-; 该程序写一个字接到外部SRAM将ACC中的字节写到DPTR指向的地址; 此处未处理存储块选择(操作A16;SRAM_Write:clr CS ; 选择外部SRA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论