AVR单片机外部RAM访问

发布者:TechGuru123最新更新时间:2017-01-05 来源: eefocus关键字:AVR单片机  外部RAM 手机看文章 扫描二维码
随时随地手机看文章

最近的一个项目中,体会了一下AVR单片机的外部RAM扩展,发文记录于此。

本文以ATMEGA64单片机为测试平台,外扩74HC573(资料上讲用AHC系列,但是我用HC系列在16M晶振下配置成最快速度访问并没有发现什么不妥,当然这是个不严谨的设计)以及62256芯片。

我采用的是GCC编译器,并且在项目中采用C++来编写程序,根据理论上来讲,只要外部存储器使能了并且配置完成,那么变量的地址分配完全可以交给编译器来做,但是前提是存储器使能及配置代码要在上电复位后最先得到执行,而采用C或者C++来编写程序,上电复位之后最先得到执行的代码是由编译器自动增加的启动代码以及构造函数代码。我不清楚如何让存储器使能及配置代码在上电复位后最先得到执行,所以就写了下面一段宏来控制外部存储器的访问。

代码如下:

//extern_ram.h

#ifndef _H_EXTERN_RAM_H_ 
#define _H_EXTERN_RAM_H_

#include "type.h" 
#define DEF_EX_VAR(name) EX_VAR name;

#define INIT_EX_VAR(name,ele_size,ele_n) do{\ 
name.size_ele=ele_size;\ 
name.n_ele=ele_n;\ 
name.addr=p;\ 
p+=((ele_size)*(ele_n));\ 
}while(0)

#define WR_EX_VAR(name,pos,pdat) do {\ 
for(UINT8 iiiii="0";iiiii(name.addr+(pos)*name.size_ele)[iiiii]=*((INT8 *)pdat+iiiii);\ 
} while(0)

#define RD_EX_VAR(name,pos,pdat) do {\ 
for(UINT8 iiiii="0";iiiii*((INT8 *)pdat+iiiii)=((INT8 *)(name.addr+(pos)*name.size_ele))[iiiii];\ 
} while(0);

#define GET_P_EX_VAR(name,pos) (name.addr+(pos)*name.size_ele)

typedef struct _tag_ex_var 

UINT8 size_ele; 
UINT16 n_ele; 
INT8 *addr; 
} EX_VAR;

#endif

应用示例

//main.cpp

#include "includes.h"

INT8 *p=(INT8*)0x3100;//外部RAM的地址从0X3100开始

DEF_EX_VAR(test);//定义一个外部变量

INT16 main(void)

{

UINT8 i;

INT16 tmp;

    INT16 *p_ele;

    MCUCR|=0X80;//使能XRAM,并配制成最快速度访问

    INIT_EX_VAR(test,sizeof(INT16),100);//外部变量初始化,该变量有100个元素,元素大小为sizeof(INT16)

    tmp="0xaaaa";

    for(i=0;i<100;i++)

    {  

        WR_EX_VAR(test,i,&tmp);//写示例,对变量test的所有元素都赋值为0Xaaaa

    }

    for(i=0;i<100;i++)

    {  

        RD_EX_VAR(test,i,&tmp);//读示例

    }

    p_ele=( INT16 *)GET_P_EX_VAR(test,32);//获取变量test的第32个元素的指针

    while(1);

    return 0x00;

}

后记:

1、头文件请自行修改。

2、若要用于其它编译器,请注意变量的内存布局,本文所述采用大端模式。

3、局部变量的命名请不要使用iiiii,否则在宏展开的时候会被覆盖。

4、文章比较粗糙,但是为了表示对作者劳动的尊重,转帖请注明出处并保留版权信息


关键字:AVR单片机  外部RAM 引用地址:AVR单片机外部RAM访问

上一篇:AVR汇编初探之二《AVR的指令与汇编系统》
下一篇:CVAVR生成的典型USART收发的接口程序

推荐阅读最新更新时间:2024-03-16 15:28

AVR单片机的天然气发动机系统设计
1 燃料供给系统 对原机的改造主要是燃料供应及喷射系统的改造,用一套完整的天然气供给系统和电控系统来实现改造目的。所使用的天然气是由高压气瓶(CNG)提供的压缩天然气, 出口压力达到20 MPa。图1所示为供气系统示意图。该设计实现了高压天然气的可靠存储和压力转换,并可对供气压力进行实时监测 。 图1 CNG供气系统示意图 2 电控单元 电控单元选用Atmel公司的AVR单片机,利用单片机C语言进行程序开发,并且采用了多片式ECU设计。 (1) 多片式ECU 图2 多片式ECU结构简图 多片式ECU是指在一个电控单元ECU中使用多个单片机(MCU)。各个MCU分别承担不同的工作内容。
[单片机]
<font color='red'>AVR单片机</font>的天然气发动机系统设计
AVR单片机直接控制其步进电机
用mege8L的PB0-PB3连接步进电机的四个接线端!该步进电机的转矩很小,强烈建议不要将其从底座上拆下!!!否则没有轴承支撑,摩擦力太大,转不起来! #include iom8v.h #define uchar unsigned char #define uint unsigned int uchar np; const uchar motortb ={0x11,0x99,0x88,0xcc,0x44,0x66,0x22,0x33};//步进电机运行数据表 void delay(uchar t)// 每步延时的子程序 { uchar i; uint j; for (i=0;i t;i++) for (j=0;j 900
[单片机]
通过采用AVR单片机ATXmega128A1进行便携式仪表的设计
1.引言 工业化仪表,因其集信息的获取.转换.存储.传输.分析.处理及显示于一体而成为工业控制领域的基础和核心之一.随着计算机技术.微电子技术的发展,工业化仪表已逐渐发展成为具有微处理器系统的智能化仪表.便携式智能仪表因其携带方便.操作方便.界面友好.人机接口丰富.功耗低等特性,使得其在当今生活中越来越普及. AVR XMEGA是8/16位AVR微处理器的升级版本.其采用Atmel picoPower技术,所有器件均可使用1.6V工作电压.MCU具有5霺唤醒时间和100nA的业界极低耗电量,其内部增加集成了全速USB?高速高精度模拟系统.DMA控制器和创新的事件系统,最大限度的提升了数据吞吐量和实时性能,并有效减轻了处理器负载
[单片机]
通过采用<font color='red'>AVR单片机</font>ATXmega128A1进行便携式仪表的设计
AVR单片机教程——PWM调光
PWM 两位数码管的驱动方式是动态扫描,每一位都只有50%的时间是亮的,我们称这个数值为其占空比。让引脚输出高电平点亮LED,占空比就是100%。 在驱动数码管时,我们迫不得已使占空比为50%,因为不能让两位真正同时地显示不同的数字。但是,我们也可以有意地让LED的占空比不到100%,以降低其亮度。 占空比是可以用程序来调节的。下面的程序允许用户用按键调整蓝色LED的占空比,并通过数码管来显示。 #include ee1/ee.h #define DUTY_MAX 9 int main() { led_init(); button_init(PIN_NULL, PIN_NULL); segment_
[单片机]
基于AVR单片机的电冰箱控制系统的设计
多年来电冰箱在国内市场上一直作为储物、保鲜的空间,人们对于电冰箱的需求也是最基本的冷冻、冻藏等功能。近年来,随着家用电冰箱的普及以及80后主流消费群体的迅速崛起,人们对电冰箱的性能要求越来越高,加速了对电冰箱功能和需求的转型和升级,相应地对电冰箱的控制功能要求也越来越高。 单片机自问世以来,性能不断提高,功能不断增多和完善,加之具有集成度高、功能强、速度快、体积小、功耗低、使用方便、性能可靠、价格低廉等特点,因此,广泛应用在工业控制、智能仪器仪表、数据采集和处理、通信系统、高级计算器、家用电器等领域,基于AVR单片机的电冰箱控制系统的设计把单片机技术充分利用在电冰箱的控制系统上,为现代电冰箱的发展提供技术支撑。 1 系统总体设
[单片机]
基于<font color='red'>AVR单片机</font>的电冰箱控制系统的设计
单键开关电路在AVR单片机中的应用
 1 引 言   单键开关电路已经广泛应用于PDA、手机和电子词典等数码产品中,其实现方式多种多样。一般可采用RS触发器、计数器以及采用555集成电路等等。在单片机的一些实际应用中,以上的实现方式会增加整个电路的复杂度,不能达到简洁、实用的效果。本文将介绍一种可以在单片机应用中实现的,简易、稳定的轻触式单键开关电路。    2 电路原理   如图1所示,DC-DC为一个带有关断控制端的直流稳压电源芯片,MCU是一个单片机。当按下S1时,Q1和D1导通,稳压芯片工作,为单片机供电。单片机马上将相应的I/O引脚置为输出高,这时Q1和Q2导通,整个电路进入工作状态。而后单片机再将这个I/O引脚设置为输入,由于上拉电阻R4的存在,Q
[单片机]
单键开关电路在<font color='red'>AVR单片机</font>中的应用
基于AVR单片机的ISP1362OTG设计
   0 引言   随着PDA、移动电话、数码相机、打印机等消费类产品的普及,用于这些设备与电脑、或设备与设备之间的高速数据传输技术越来越受到人们的关注。以往以计算机为核心的数据传输结构,非常不利于USB,总线在嵌入式行业的应用,也不适用于野外作业,而OTG技术的推出则可实现在没有PC的情况下,设备与设备之间的数据传输,它拓展了USB技术的应用范围。本文采用的设计方案是基于Philips公司的ISP1362 OTG控制芯片,参照最新的USB OTG技术规范,设计了一种遵循USB协议的主/从机系统。    1 ISP1362芯片的内部结构   Philips公司的ISP1362是一款符合USB 2.0总线协议的接口芯片,内部有
[单片机]
基于AVR单片机和组态王的陶瓷检测系统设计
摘要:针对国内的陶瓷性能检测仪自动化程度不高、检测精度低、检测范围比较窄,可视化差等情况,设计开发了一种基于AVR ATmega128单片机和北京亚控公司的组态软件的陶瓷检测实时控制系统。该系统运用虚拟仪器组态王作为上位机,辅以ATmega128单片机为核心的变参数的模糊神经网络PID控制器,对陶瓷性能进行检测。经现场使用表明,该系统检测精度高、范围广、可视化程度高,使用方便。 0 引言 在城市的建设进程中,越来越注重绿色环保理念,然而使用实心砖会造成资源的巨大浪费,因此空心砖的使用量急剧增长。生产空心砖需要大量的生态陶瓷材料,但相应的陶瓷材料的性能检测工具还很不完善。研制高性能生态陶瓷性能检测仪具有重要的现实意义。本文以陶
[单片机]
基于<font color='red'>AVR单片机</font>和组态王的陶瓷检测系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved