yingfu_758 发表于 2008-8-2 22:44:52

用ATMEGA128并行总线外扩32kSRAM+其它外设时遇到一些问题,请马老师指点指点,谢谢!!

马老师,您好,以前就接触51,对AVR还是很陌生,现需要用M128在其并行总线上外扩三个外设,其中连有32K SRAM,高位部分地址电路和读写外扩SRAM程序如下。用ICCAVR编译器,把外设当成是存储器看待,那么对外部SRAM读写跟其它外设应该是一样的吧?编译器设置时我选ATMEGA128(Please see NOTES)的Extenal 64k SRAM,这样做的结果是对32kSRAM读写正常,但对0X8000-0X8FFF地址的外设访问时读回的数据不对,用示波器观察的结果是:ALE脉冲来时,低8位地址已经准备好,并且已被锁存器锁存,外部片选已经有效,但是此低8位地址一直保持在PA口,所以读回的结果总是低8位地址,怀疑是外设芯片没有动作引起的,但是如果没有动作的话低8位地址锁存之后应该是高阻态。请马老师指点指点,谢谢!!

http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_366914.JPG
(原文件名:aa.JPG)
读写程序如下:
void ex_write(unsigned char addr,unsigned char data)
{
unsigned char *p =(unsigned char*)(addr);
PORTF&=~(1<<PF2);//使能CPLD
XMCRA=0X00;
XMCRB=0X00;
MCUCR=0X80; //MCU使能外部RAM存储器
*p=data;
MCUCR=0X00;
PORTF|=1<<PF2; //关闭CPLD
}

unsigned char ex_read(unsigned char addr)
{
unsigned char read_data;
unsigned char *p =(unsigned char*)(addr);
XMCRA=0X00;
XMCRB=0x00;
PORTF&=~(1<<PF2);
MCUCR=0X80;
read_data=*p;
MCUCR=0X00;
PORTF|=1<<PF2;
return(read_data);
}

34480016 发表于 2008-8-2 23:45:38


http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=986603&bbs_page_no=1&search_mode=3&search_text=34480016&bbs_id=9999

参考这里试一试

yingfu_758 发表于 2008-8-3 00:29:40

先谢谢了!看看去...

yingfu_758 发表于 2008-8-3 23:25:28

终于把问题解决了,观察示波器波形,再结合芯片手册,发现M128在读外部芯片时,送出地址后外部芯片返回数据的时间太慢!单片机读周期已经完了数据还没返回,所以读回的还是刚送出去的地址了,应把MCUCR=0X80值改成MCUCR=0XC0,延长2周期读写时间就满足要求了...

maskchen 发表于 2008-8-18 22:19:58

做个记号先,马上就用到了

zxq6 发表于 2008-8-18 22:41:51

谢谢。

bbi3014 发表于 2009-4-2 11:11:35

MARK

zhanghao 发表于 2009-8-29 21:32:57

mark

xml2028 发表于 2010-1-13 10:24:09

mark、

xingkong911 发表于 2010-1-25 14:30:48

用的SRAM速度是多少的?应该要用到35ns的最好,公司用的55ns的SRAM也没发现问题。
页: [1]
查看完整版本: 用ATMEGA128并行总线外扩32kSRAM+其它外设时遇到一些问题,请马老师指点指点,谢谢!!