搜索
bottom↓
回复: 18

ATmega128L外扩SRAM关于低4K的应用问题。老马老师帮忙看下!!

[复制链接]

出0入0汤圆

发表于 2007-11-12 14:35:14 | 显示全部楼层 |阅读模式
我外扩SRAM 想要低4K的地址也使用,也就是外不SRAM的低于0X1100的空间也使用,在Atmeg128的 datasheet 上面说过,要想使用外部SRAM的低4K空间的,要做一些处理,把PORTC=0X00,将PC5~PC7释放了,这样子就可以访问外部SRAM的的0X0000~0X1FFFF的空间了。
我下面写了一段程序,做了个测试:(为了函数编于阅读,有些功能函数我注释一下功能,就不写源程序了
uchar AA;
uchar *p=0x1001;//0x1001是低于4K的地址空间,无论是内部还是SRAM地址

AA=0x00

clr_Bit(MCUCR,SRE);//将SRE位置零,屏蔽了外部SRAM功能

*p=AA; //此时作了赋值,应该是内部SRAM的0X1100的地址的内容应该是0X00吧?

ExtSRAM_initialization();//这个函数功能是将SRE位置1,就是使能外扩SRAM,并且将读写的时候 加入的等待周期做个定义 设置SRW10,SRW11,SRW00.SRW01

DDRC=0xFF;//PC口输出
PORTC=0x00;//PC口位“1"

Set_Bit(XMCRB,XMM1);
Set_Bit(XMCRB,XMM0);//释放PC5~PC7 以便可以访问外部SRAM0X0000~0X1FFF位

select_segment(0);//此函数选择SRAM的第0页,由于我外扩的是64K×8(512K)SRAM,因此除了PA PC的16位外,还需要3个位作为页选择位,000~111 (8页)

AA=*p;

程序如上,我单步执行,按照道理,执行到最后一步的时候,读取的应该是外部SRAM的0X1001地址的内容到AA才对吧? 这个时候的AA应该不再是0X00,也就是
不是内部SRAM的地址0X1001的地址才是,可是我在memory窗口观察”DATA“项的时候与 'watch" 窗口的AA变量做对比,却是一样的,也就是说,对外部SRAM的地址0X1001的读取没有成功,请问这个是什么原因!非常感谢~

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2007-11-12 14:39:11 | 显示全部楼层
自己顶下,路过的高人,侠客也帮忙分析一下!~~~PS说明一下,我memeory窗口下,执行select_segment(0)~select_segment(7)函数的时候,看的“ extended sram"内容是有变化的,也就是说0x1100到0xFFFF的 八页地址 是可以读取访问的,但是低于4K的怎么搞都没有反映,难道是因为看外部SRAM的数据,不是在"DATA"栏里面看的?我用的是AVRSUDIO4+GCC

出0入0汤圆

发表于 2007-11-12 17:40:56 | 显示全部楼层
我不认为这样处理好,因为这样RAM空间不是线性的,处理起来也比较麻烦。

如果你外扩的RAM为32K,可以采用更方便的方法使用外扩RAM的第4K,构成线形的36KRAM,而且对其操作同对普通的RAM操作相同,具体请参考我的《M128》书的第五章,或最新出的书的第17章的介绍。

出0入0汤圆

 楼主| 发表于 2007-11-13 09:46:16 | 显示全部楼层
老马老师,你书哪里可以买阿,,,,我买本去 正在学AVR。顺便问一下,这样处理起来是麻烦,但是如果抛弃低4K不用,那么大体上来说,除了要做个页面处理的操作,其他的貌似也不是很麻烦把。。。

出0入0汤圆

发表于 2007-11-13 12:03:48 | 显示全部楼层
《AVR单片机嵌入式系统原理与应用实践》刚出来,你可到书店看看,或在本站的邮购部购买。17章中有扩展RAM的介绍和电路。另外,这本书相信对你学AVR会有很大帮助的。

下面是根据M128数据手册中介绍的方法请参考:

2.3.4  外部扩展存储器全部空间的利用
   由于在芯片内部占用了4352个RAM地址(32+64+160+4096),外部扩展存储器的寻址空间地址是从0X1100开始的(见图2.7)。在对0X0000-0X10FF范围的RAM地址空间操作时,实际是对芯片内部的SRAM或寄存器操作,而对相应的处在这段地址范围的外部扩展存储器没有影响。因此在实际应用中,可以把这段地址范围的外部扩展存储器“移”到RAM地址空间的高端,或通过程序简单的调整,而将外部扩展存储器全部空间充分利用。下面给出两个典型应用实例。

1.外部扩展32K SRAM
    在外部扩展一片32K容量的SRAM芯片,此时不需要连接使用最高位地址线A15,可以将Portc口的PC7释放,作为通用I/O使用。尽管15根地址线的寻址范围为32K(0X0000-0X7FFF),但用户程序可以对0X8000-0X90FF寻址操作,此时实际是对外部存储器RAM芯片的0X0000-0X10FF操作(见图2.15)。即将外部RAM芯片的前4352个单元“移”到32K地址空间后面了,因此系统总的有效RAM地址为线形连续的36.25KB(32K+4352)。

2.外部扩展64K SRAM
   外部扩展64K容量的SRAM芯片时,由于AVR寻址能力为64K,而且内部又占用4352个,因此外部的RAM只使用了高端的61184字节(0X1100-0XFFFF),低端的4352字节(0X0000-0X10FF)没有使用。但在必要时,可以通过在程序中做相应的处理,把外部存储器低4352个字节(0X0000-0X10FF)利用起来。
    具体方法是通过设置寄存器XMCRB中的XMM1和XMM0,释放Portc的PC7:PC5三根高位地址线,将其作为I/O并输出为“0”,此时可以使用低13位的地址线(AD0:AD12),将外部存储器0X0000-0X10FF一段映射到RAM空间的0X2000-0X30FF使用(由于PC7:PC5已作为I/O使用,并输出为“0”,因此实际是对0X0000-0X10FF 进行读写操作)。这样,系统共有69887字节的RAM,其中0X0000-0XFFFF为常规64KB的连续线性空间,加上映射到0X2000-0X30FF空间的外部存储器低4352字节的RAM。以下是使用映射RAM的程序实例。

汇编代码:
;OFFSET 定义为影射空间起始地址0X2000
; 释放Port C高三位地址线
ldi r16, 0xFF
out DDRC, r16                                        ;Porc C 为输出
ldi r16, 0x00
out PORTC, r16                                        ;Port C输出为“0”
ldi r16, (1<<XMM1)|(1<<XMM0)        ; 释放Port C高三位地址线
sts XMCRB, r16
; 将0xAA写入外部RAM的0x0000单元中,映射地址为0x2000
ldi r16, 0xAA
sts 0x0000+offset, r16

ldi r16, (0<<XMM1)|(0<<XMM0)        ; 重新恢复Port C的高三位地址线
sts XMCRB, r16
; 将0x55写入外部RAM的0x2000单元中
ldi r16, 0x55
sts 0x0000+offset, r16

C语言代码:
#difine offset 0x2000
void XRAM_example(void)
{
  unsigned char *p = (unsigned char *)(offset);
  DDRC = 0xFF;
  PORTC = 0x00;
  XMCBR = (1<<XMM1)|(1<<XMM0);
  *p = 0xAA;
  XMCRB = 0x00;
  *p = 0x55;
}

===================================================
另外,关于外扩大于64KRAM的讨论,我在专栏中有专门的介绍,只能采用分页方式,使用不方便。最好选择使用ARM。

出0入0汤圆

发表于 2007-11-13 18:47:13 | 显示全部楼层
学习一下,楼主回头能不能把结果发上来,以后可能用得着

出0入0汤圆

 楼主| 发表于 2007-11-13 19:22:02 | 显示全部楼层
将外部存储器0X0000-0X10FF一段映射到RAM空间的0X2000-0X30FF使用(由于PC7:PC5已作为I/O使用,并输出为“0”,因此实际是对0X0000-0X10FF 进行读写操作)。
这句当时看datasheet的时候没有仔细理解,以为外部SRAM直接映射位内部的SRAM的同一地址,现在仔细一想,惭愧惭愧阿,老马老师的书对DATASHEET还是做了很详细的解释的。PS,我问一下 要查看 外部SRAM的0000~10FF的数据 是在 AVRSUDIO 4的 MEMORY窗口下的“data"栏里面查看码,就是那个看内部SRAM一样的地址里面查看的吧?
还有书直接找阿莫买就行了吧?
还有,楼上的,要啥结果!我不明白,你说一下,我看到以后帖出来。

出0入0汤圆

发表于 2007-11-13 21:26:13 | 显示全部楼层
在AVR STUDIO中是无法软件模拟和看到这个空间RAM的数据的,任何带类似分页方式的扩展RAM都不行,AVR STUDIO不支持这种扩展。

出0入0汤圆

 楼主| 发表于 2007-11-14 16:06:25 | 显示全部楼层
收到!3Q!

出0入0汤圆

发表于 2008-4-10 23:16:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-5-25 21:13:26 | 显示全部楼层
标记

出0入22汤圆

发表于 2008-5-25 21:24:24 | 显示全部楼层
标记,谢谢

出0入0汤圆

发表于 2008-6-16 10:51:34 | 显示全部楼层
学习,谢谢

出0入0汤圆

发表于 2008-7-14 18:22:18 | 显示全部楼层
长经验了

出0入0汤圆

发表于 2008-8-1 11:22:06 | 显示全部楼层
外扩RAM   mark

出0入0汤圆

发表于 2008-8-2 09:17:28 | 显示全部楼层
void PORT_Init(void)
{
        MCUCR = 0x80;
        XMCRA = 0x00;
        XMCRB = 0x83;
        DDRA  = 0xFF;
        PORTA = 0xFF;
        DDRB  = 0xE7; //1110 0111   // B3,B4(MAX1142使用)
        PORTB = 0xE7;

        DDRC  = 0x3F;        //        PC7电源故障1(输入)
        PORTC = 0x3F;
        DDRD  = 0xEF;//11101111  Eb(1110 1011)
        PORTD = 0xEF;

        DDRE  = 0x7C;                                                       
        PORTE = 0x7C;
       
        WDTCR = (1<<WDCE)|(1<<WDE);                                //        看门狗定时器关闭
        WDTCR = (0<<WDE);
        ADCSRA = (0<<ADEN);                                //        关闭数/模转换器
        ACSR = (1<<ACD);                                        //        关闭模拟比较器
        EECR = 0;                                                //        EEWE复位值不定
}


void RAM(void)
{
        unsigned char *p;

        p = (unsigned char *)0x1108;
        *p = 100;
        p = (unsigned char *)0x110A;
        *p = 110;
        p = (unsigned char *)0x1100;
        *p = 120;
        p = (unsigned char *)0x1100;
        *p = 130;
        p = (unsigned char *)0x110A;
        *p = 140;       
        p = (unsigned char *)0x1100;               
        *p = 150;                                                       
}

出0入0汤圆

发表于 2008-8-2 10:38:45 | 显示全部楼层
记号

出0入0汤圆

发表于 2011-9-29 20:45:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-4 11:36:20 | 显示全部楼层
长见识了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 08:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表