avraihaozhe 发表于 2008-12-28 10:02:52

向马老师和高手求救:关于MEGA64完全访问外部64K存储器【恢复】

mega64访问外部存储器的原理图ourdev_562105.doc(文件大小:40K) (原文件名:原理图.doc) 

我外扩flash 想把外部flash的0x0000--0X10ff空间也使用,在Atmeg64的 datasheet 上面说过,要想使用外部的低4K空间,要做一些处理,把PORTC=0X00,将PC5~PC7释放了,这样子就可以访问外部存储器的0X0000~0X1FFFF空间了。 

下面是初始化程序:

        MCUCR=0xC0;//enable access extern memory

        XMCRA=0x02;

        XMCRB=0x03;//可以访问外部64K(屏蔽PC7~PC5)

           DDRC=0XFF; 

           PORTC=0X00;

读写FLASH存储器程序:

void flash_byte_program (uchar flash_byte,uint flash_addr)

{

          uchar *f;

        cs_flash();//选中flash存储器

        

        f=0x5555;

        *f=0xaa;

        

        f=0x2aaa;

        *f=0x55;

        

        f=0x5555;

        *f=0xa0;

        

        f=flash_addr;

        *f=flash_byte;//写数据到flash存储器



  Check_Toggle_Ready(f);//数据检验函数

  cs_no();//撤销选中        

}

uchar read_flash(uint flash_addr)

{

 uchar temp,*f;

 cs_flash();//选中flash存储器

 f=flash_addr;

 temp=*f;//读flash中指定地址的数据

 cs_no();//撤销选中

 return(temp);

}



问题1:但运行程序时发现MEGA64不能对flash的0x10fa到0x10ff的存储单元进行读写,其它存储单元可以正常读写。

问题2:按照mega64数据手册提供的完全访问外部64K存储器的方法会出现很多地址重复的问题,请教是否有别的方法避免此问题。

avraihaozhe 发表于 2008-12-31 20:06:04

非常感谢马潮老师的指点

machao 发表于 2008-12-29 11:53:18

M64外部扩展最大为64KRAM,寻址空间为64K,但0X0000-OX10FF实际是操作内部的RAM,因此你如果扩展到64K(如使用一片64KRAM),尽管外部RAM的0X0000-OX10FF是空闲的,可是已经不能使用了。只有在你并没有扩展到64K,如32KRAM,才可以考虑使用外部0X0000-OX10FF的空间。





这个帖子的你可以参考:http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=268122&bbs_page_no=2&search_mode=3&search_text=machao&bbs_id=1003

avraihaozhe 发表于 2008-12-29 10:31:36

怎么没有高手指点啊!!!!!
页: [1]
查看完整版本: 向马老师和高手求救:关于MEGA64完全访问外部64K存储器【恢复】