向马老师和高手求救:关于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存储器的方法会出现很多地址重复的问题,请教是否有别的方法避免此问题。 非常感谢马潮老师的指点 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 怎么没有高手指点啊!!!!!
页:
[1]