ATMEGA128 AVR内存错误

问题描述 投票:0回答:1

我有ATMEGA128的代码。它应该是一个从0到9的计数器程序。

#include "iom128v.h"
#include "macros.h"

void delay(int ms)
{
 int c1, c2;
 for(c1=0;c1<ms;c1++)
  for(c2=0;c2<970;c2++) NOP();
}

void main()
{
 char seg[10]={0b01110111, 0b01100000, 0b00111110, 0b01111010, 0b01101001,
  0b01011011, 0b01011111, 0b01110000,0b01111111, 0b01111011};
 char i;
 DDRC=0b10000111;
 DDRA=0xFF; 
 DDRG=0x01; 
 PORTG=0;   
 PORTA=0;   
 PORTC=0;   
 PORTC=5;   
 PORTC=7;   
 PORTA=0xFF; 
 PORTC=1;        
 PORTC=2;        
 PORTC=6;        
 while(1)
 {
  for(i=0;i<10;i++)
  {
   PORTA=~seg[i];  
   delay(300);  
  }
 }
}

我在proteus中运行此代码,并循环发生以下错误

PC = 0x00FC。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21E1] = AA。 [U1]

PC = 0x0132。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21FF] = 99。 [U1]

PC = 0x0132。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21FE] = 00。 [U1]

PC = 0x0168。 [AVR MEMORY]未启用接口时(SRE = 0)外部存储器写入:[0x21D6] = 21。 [U1]

PC = 0x016A。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21D5] = D7。 [U1]

PC = 0x016C。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21D4] = 02。 [U1]

PC = 0x016E。 [AVR MEMORY]未启用接口时(SRE = 0)外部存储器写入:[0x21D3] = 00。 [U1]

PC = 0x0174。 [AVR MEMORY]未启用接口时(SRE = 0)外部存储器写入:[0x21FD] = BA。 [U1]

PC = 0x0174。 [AVR MEMORY]未启用接口时(SRE = 0)外部存储器写入:[0x21FC] = 00。 [U1]

PC = 0x01E0。 [AVR MEMORY]未启用接口时(SRE = 0)外部存储器写入:[0x21D2] = 0A。 [U1]

PC = 0x01E2。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21D1] = 02。 [U1]

PC = 0x01E4。 [AVR MEMORY]未启用接口时(SRE = 0)的外部存储器写入:[0x21D0] = D7。 [U1]

PC = 0x01E6。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21CF] = 21。 [U1]

PC = 0x01E8。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21CE] = 7B。 [U1]

PC = 0x01EA。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D5]。 [U1]

PC = 0x01EC。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D6]。 [U1]

PC = 0x01EE。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D3]。 [U1]

PC = 0x01F0。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D4]。 [U1]

PC = 0x0202。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21CE]。 [U1]

PC = 0x0204。 [AVR MEMORY]未启用接口(SRE = 0)时读取外部存储器:[0x21CF]。 [U1]

PC = 0x0206。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D0]。 [U1]

PC = 0x0208。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D1]。 [U1]

PC = 0x020A。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D2]。 [U1]

PC = 0x000E。 [AVR MEMORY]未启用接口(SRE = 0)时读取外部存储器:[0x21FC]。 [U1]

PC = 0x0174。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21FD]。 [U1]

PC = 0x0000。 [AVR CPU] RET地址= 0x0000 [U1]

我有ATMEGA128的代码。它应该是一个从0到9的计数器程序。 for(c1 = 0; c1 ] >>]

c memory avr atmega
1个回答
0
投票

您的代码似乎没有使用外部存储器。此访问必须是堆栈访问。检查堆栈地址。当然,Proteus在模拟中有很多奇怪的行为。

[对于外部内存访问:您必须将MCUCR寄存器上的SRE位置1以使能外部存储器接口。还要检查MCUCR.SRW10,XMCRA和XMCRB的配置。在ATmega103兼容模式(已编程M103C熔断器)下,无法访问XMCRA和XMCRB。当SRE位置1时,A,C和G [2:0]将专用于XMEM接口(而不是普通的GPIO端口)。(另请参见在F_CPU宏的基础上自动获得更好的繁忙等待延迟。)

© www.soinside.com 2019 - 2024. All rights reserved.