登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

有哪位高手使用m162外扩ram成功的啊?

作者:shs1981 栏目:单片机
有哪位高手使用m162外扩ram成功的啊?
分享一下经验吧,最近被这个问题郁闷了好久了。万分感谢!
qq:172476603

2楼: >>参与讨论
zsmbj
有什么问题吗?很好扩呀!
M162+74HC573+62256即可!

3楼: >>参与讨论
shs1981
硬件都知道啊。
现在改用CVAVR,自动生成程序框架,数组分配正常了,内置ram读写没问题的,但外扩ram读写有问题,只有部分空间读写正常,有些空间始终写不进去。
以下是全部程序:

/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.4a STANDARD
Automatic Program Generator
?COPYRIGHT 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:office@hpinfotech.com



Chip type           : ATmega162L
Program type        : Application
Clock frequency     : 8.000000 MHz
MEMORY MODEL        : Small
External SRAM size  : 32768
Ext. SRAM wait state: 0
Data Stack size     : 256
*****************************************************/

#include <mega162.h>   
#include <Delay.h>

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART0 RECEIVER buffer
#define RX_BUFFER_SIZE0 8
CHAR rx_buffer0[RX_BUFFER_SIZE0];

#if RX_BUFFER_SIZE0<256
unsigned CHAR rx_wr_index0,rx_rd_index0,rx_counter0;
#else
unsigned int rx_wr_index0,rx_rd_index0,rx_counter0;
#endif

// This flag is set on USART0 RECEIVER buffer overflow
bit rx_buffer_overflow0;

// USART0 RECEIVER interrupt service routine
interrupt [USART0_RXC] void usart0_rx_isr(void)
{
CHAR status,data;
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer0[rx_wr_index0]=data;
   if (++rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0;
   if (++rx_counter0 == RX_BUFFER_SIZE0)
      {
      rx_counter0=0;
      rx_buffer_overflow0=1;
      };
   };
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a CHARacter from the USART0 RECEIVER buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
CHAR getCHAR(void)
{
CHAR data;
while (rx_counter0==0);
data=rx_buffer0[rx_rd_index0];
if (++rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0;
#asm("cli")
--rx_counter0;
#asm("sei")
return data;
}
#pragma used-
#endif

// USART1 RECEIVER buffer
#define RX_BUFFER_SIZE1 8
CHAR rx_buffer1[RX_BUFFER_SIZE1];

#if RX_BUFFER_SIZE1<256
unsigned CHAR rx_wr_index1,rx_rd_index1,rx_counter1;
#else
unsigned int rx_wr_index1,rx_rd_index1,rx_counter1;
#endif

// This flag is set on USART1 RECEIVER buffer overflow
bit rx_buffer_overflow1;

// USART1 RECEIVER interrupt service routine
interrupt [USART1_RXC] void usart1_rx_isr(void)
{
CHAR status,data;
status=UCSR1A;
data=UDR1;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer1[rx_wr_index1]=data;
   if (++rx_wr_index1 == RX_BUFFER_SIZE1) rx_wr_index1=0;
   if (++rx_counter1 == RX_BUFFER_SIZE1)
      {
      rx_counter1=0;
      rx_buffer_overflow1=1;
      };
   };
}

// Get a CHARacter from the USART1 RECEIVER buffer
#pragma used+
CHAR getCHAR1(void)
{
CHAR data;
while (rx_counter1==0);
data=rx_buffer1[rx_rd_index1];
if (++rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0;
#asm("cli")
--rx_counter1;
#asm("sei")
return data;
}
#pragma used-
// Write a CHARacter to the USART1 Transmitter
#pragma used+
void putCHAR1(CHAR c)
{
while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
UDR1=c;
}
#pragma used-

// STANDARD Input/Output functions
#include <stdio.h>

// Declare your GLOBAL variables here
unsigned CHAR m[4000],n[4000],q[4000];
unsigned CHAR *p;
void main(void)
{
// Declare your local variables here
unsigned int i,k;  
// CRYSTAL Oscillator division factor: 1
CLKPR=0x80;
CLKPR=0x00;

// Input/Output PORTs initialization
// PORT A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// PORT B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// PORT C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// PORT D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// PORT E initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;

// Timer/Counter 0 initialization
// Clock source: SYSTEM Clock
// Clock VALUE: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 OUTPUT: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: SYSTEM Clock
// Clock VALUE: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A OUTPUT: Discon.
// OC1B OUTPUT: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: SYSTEM Clock
// Clock VALUE: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 OUTPUT: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock VALUE: Timer 3 Stopped
// Mode: Normal top=FFFFh
// Noise Canceler: Off
// Input Capture on Falling Edge
// OC3A OUTPUT: Discon.
// OC3B OUTPUT: Discon.
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// Interrupt on any change on pins PCINT0-7: Off
// Interrupt on any change on pins PCINT8-15: Off
// External SRAM page configuration:
//              -              / 0000h - 7FFFh
// Lower page wait state(s): None
// Upper page wait state(s): 2r/w+1addr
MCUCR=0xC0;
EMCUCR=0x4e;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;

// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 RECEIVER: On
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud rate: 9600
UCSR0A=0x00;
UCSR0B=0x98;
UCSR0C=0x86;
UBRR0H=0x00;
UBRR0L=0x33;

// USART1 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART1 RECEIVER: On<
4楼: >>参与讨论
makesoft
哪些空间写不进去啊。是不是地址冲突了?
哪些空间写不进去啊。是不是地址冲突了?

5楼: >>参与讨论
ylong
用了JTAG吧?》
 
参与讨论
昵称:
讨论内容:
 
 
相关帖子
请问AD输出是16进制的数吗?
Atmega16多机通讯,调了好久都不通,求助各位!!!!
下载到avr板上的是elf还是hex还是bin?
at系列串口发送问题
哪位有应用mega128的原理图
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号