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