|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
有哪位高手使用m162外扩ram成功的啊? |
作者:shs1981 栏目:单片机 |
分享一下经验吧,最近被这个问题郁闷了好久了。万分感谢! qq:172476603 |
2楼: | >>参与讨论 |
作者: zsmbj 于 2005/4/12 8:26:00 发布:
有什么问题吗?很好扩呀! M162+74HC573+62256即可! |
3楼: | >>参与讨论 |
作者: shs1981 于 2005/4/12 11:27:00 发布:
硬件都知道啊。 现在改用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 于 2005/4/12 17:35:00 发布:
哪些空间写不进去啊。是不是地址冲突了? 哪些空间写不进去啊。是不是地址冲突了? |
5楼: | >>参与讨论 |
作者: ylong 于 2005/4/14 12:46:00 发布:
用了JTAG吧?》 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |