现在,流行的51单片机大多把on-chip expanded RAM(以下简称XRAM)作为基本配置,容量有些差别。
厂商在给出芯片特性时,往往把XRAM和标准52芯片的256字节内部RAM加在一起统称为on-chip RAM容量,有的是512(256+256),有的是1024(256+768),有的是1280(256+1024)。
最关键的是对这些XRAM的Enable/Disable上,不同厂商的控制有些差别:所涉及的SFR地址、在SFR中和XRAM相关的位所在位置和上电复位后XRAM的状态。
----------------------------------------------------------------
SyncMOS Technologies Inc.
SM5964

System Control Register (SCONF, $BF)

The bit 1 (OME) of special function register $BF (SCONF) can enable or disable this expanded 768 byte RAM. The default setting of OME bit is 1 (enable).

sfr        SCONF = 0xBF;
        SCONF = 0x02;        //允许访问SM5964的片上XRAM

----------------------------------------------------------------
Silicon Storage Technology, Inc.
SST89E564RD

Auxiliary Register (AUXR)
EXTRAM(AUXR.1):
0 - Internal Expanded RAM access.
1 - External data memory access.

sfr        AUXR = 0x8E;
        AUXR = 0x00;        //允许访问SST89E564RD的片上XRAM

----------------------------------------------------------------
Philips Semiconductors
P89C51RD2

AUXR Address = 8EH
EXTRAM(AUXR.1) Internal/External RAM access using MOVX @Ri/@DPTR
EXTRAM Operating Mode:
0 - Internal ERAM access using MOVX @Ri/@DPTR
1 - External data memory access.

sfr        AUXR = 0x8E;
        AUXR = 0x00;        //允许访问P89C51RD2的片上XRAM

----------------------------------------------------------------
Winbond Electronics Corp.
W78E516

The AUX-RAM is disable after a reset. Setting the bit 4 in CHPCON register will enable the access to AUX-RAM. When AUX-RAM is enabled the
instructions of "MOVX @Ri" will always access to on-chip AUX-RAM. When executing from internal program memory, an access to AUX-RAM will not affect the Ports P0, P2, WR and RD.

sfr        CHPENR = 0xF6
sfr        CHPCON = 0xBF

CHPENR = 0x87;
        CHPENR = 0x59;
        CHPCON |= 0x10;        //允许访问W78E516的片上XRAM
        CHPENR = 0x00;

----------------------------------------------------------------
由此看来,要使用片上XRAM,必须仔细阅读芯片datasheet中XRAM的相关内容,并小心控制。

个人习惯:1、不使用芯片本身的默认状态,不管是允许或者禁止,都显式地用指令控制相关的特殊功能寄存器。
2、为了更好地使用这些XRAM,在给外设进行编址时,避开0x0000~0x02FF空间(比如从0x1000开始)。

使用片上XRAM需要进行的初始化的更多相关文章

  1. 在Fedora 20 上安装Mysql并初始化root密码

    [root@localhost ~]# yum -y install community-mysql-server #安装数据库 已加载插件:langpacks, refresh-packagekit ...

  2. 单个 LINQ to Entities 查询中的两个结构上不兼容的初始化过程中出现类型“XXXX”

    最近在做一个报表的时候,用EF使用了Contact方法,但是程式运行一直出错.最近终于找到原因了,写下来提醒下自己.好了,进入正题: 现在我举个栗子,目前数据库中有ParentStudent表和Sub ...

  3. 浅析 Linux 初始化 init 系统,第 1 部分: sysvinit 第 2 部分: UpStart 第 3 部分: Systemd

    浅析 Linux 初始化 init 系统,第 1 部分: sysvinit  第 2 部分: UpStart 第 3 部分: Systemd http://www.ibm.com/developerw ...

  4. PS初始化配置

    前端工程师在使用photoshop之前需要进行一些初始化设置,主要包括以下3个 [1]首选项设置 <ctrl+k> 编辑 > 首选项 > 单位与标尺 > 把标尺和文字的单 ...

  5. Java虚拟机类加载初始化解析

    Classloader的作用,概括来说就是将编译后的class装载.加载到机器内存中,为了以后的程序的执行提供前提条件. 一段程序引发的思考: 风中叶老师在他的视频中给了我们一段程序,号称是世界上所有 ...

  6. 【小梅哥FPGA进阶教程】MC8051软核在FPGA上的使用

    十.MC8051软核在FPGA上的使用 本教程内容力求以详细的步骤和讲解让读者以最快的方式学会 MC8051 IP core 的应用以及相关设计软件的使用,并激起读者对 SOPC 技术的兴趣.本实验重 ...

  7. 温故之--Linux 初始化 init 系统

    参选URL: http://www.ibm.com/developerworks/cn/linux/1407_liuming_init1/index.html 本系列一共三篇,看完记住,那水平就不一样 ...

  8. 深入理解java虚拟机JVM(上)

    深入理解java虚拟机JVM(上) 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App,操作更 ...

  9. 使用Git上传项目到GitHub仓库

    GitHub账号注册很长时间了,但是没怎么上传过东西.今天学习如何利用Git工具将代码上传到GitHub,了解了一些常用命令 $ git config --global user.name " ...

随机推荐

  1. Qt编译慢吗?

    1. “用Qt写的程序编译比MFC慢”的说法是错误的绝对错误,单位代码行数编译Qt远比MFC快得多,因为Qt库的头文件设计非常好,尽量都使用了前置声明,避免了头文件嵌套,几乎所有类都使用了公有类和私有 ...

  2. ImageMagick提取图像原始数据(ImageData/RawData)

    我用的是ImageMagickWand的接口,因为这接口比Core接口更上层,所以官方文档推荐用. 抽取整个图像文件字节数据: http://www.imagemagick.org/discourse ...

  3. 前端模拟发送数据-Chrome下的REST Client

    1)确定需要POST的数据 2)拼接数据,POST给服务器 3)查看服务器响应及结果

  4. cf493B Vasya and Wrestling

    B. Vasya and Wrestling time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  5. cf492C Vanya and Exams

    C. Vanya and Exams time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  6. AllocConsole

    #include<iostream> using namespace std; AllocConsole(); freopen("CONIN$", "r+t& ...

  7. java遍历Hashmap/Hashtable的几种方法

    一>java遍历Hashtabe: import java.util.Hashtable; import java.util.Set; public class HashTableTest { ...

  8. crtmpserver通常使用基本类演示

    以前我们做了分析过程,这一次,我们都参与了类做梳子,两个可以一起关注一下一起合并,整个方案的实施是有帮助. BaseClientApplication APP基类,一切APP都基于这个类 Stream ...

  9. asp net 编程问题 实现下一篇 和上一篇效果

    首先是access数据库,有一个名为news的表,里面有三个字段,分别为id,classid 和name 其中id为主键,classid可以重复 现在有以下数据: id classid name 1 ...

  10. EClipse开发NDK流程

    EClipse开发NDK流程(现在studio也在2.2之后支持了非常简单,只要创建项目的时候勾选c++支持就可以了)   什么情况下使用ndk,1.保护代码,java很容易反编译,c/c++反汇编比 ...