[STC单片机]

关于扩展寄存器XSFRs的访问

[复制链接]
1608|7
手机看帖
扫描二维码
随时随地手机跟帖
lulipro|  楼主 | 2020-6-18 06:07 | 显示全部楼层 |阅读模式
随着STC单片机功能的增增强,外设的增加,寄存器的个数也随之增加,这导致8051内核定义的SFRs地址空间(0x80~0xFF)已经逐渐不够用了。所以STC选择将新增的寄存器映射在XDATA地址空间,这些寄存器又叫做XSFRs。

XDATA区域使用的16位地址线寻址的,因此地址空间为0x0000~0xFFFF,地址空间大小为65536Byte(64KByte)。

就目前STC发布的单片机开看,其片内XDATA最大也只做到了8KB,普遍在1~2KB左右,也就是说XDATA地址空间还有很大的余量可以用于去映射寄存器。

通过查看STC芯片的头文件,可以发现,映射在XDATA空间的寄存器(XSFRs),使用的都是高地址,而从0开始的低地址分配给了片内扩展XDATA的SRAM存储器。如图所示。






clipboard.png

使用特权

评论回复

相关帖子

lulipro|  楼主 | 2020-6-18 06:08 | 显示全部楼层
//文件:STC15.H
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define PWMC        (*(unsigned int  volatile xdata *)0xfff0)
#define PWMCH       (*(unsigned char volatile xdata *)0xfff0)
#define PWMCL       (*(unsigned char volatile xdata *)0xfff1)
#define PWMCKS      (*(unsigned char volatile xdata *)0xfff2)
//...

使用特权

评论回复
lulipro|  楼主 | 2020-6-18 06:13 | 显示全部楼层
本帖最后由 lulipro 于 2020-6-19 02:38 编辑

STC手册中说:如果要访问(读写)XSRFs,必须先将P_SW2.EAXSFR(bit7)置1才行。
经过测试发现:在EAXSFR=0的情况下,无法正常访问XSFR。
在EAXSFR=1的情况下,可以正常访问XSFR,同时,访问XDATA空间中的片内扩展的SRAM也是没有问题的,所以我想问:是不是可以一直让EAXSFR=1呢???如果可以,那STC在设计芯片的时候,为什么不把EAXSFR固定置1,而依然留出寄存器位提供用户设置的权限呢?这有什么用意呢?

使用特权

评论回复
oufuqiang| | 2020-6-18 10:10 | 显示全部楼层
既然是同一个地址空间,应该是考虑程序越界访问数组这种情况下的误操作防护。
楼主不妨验证一下,只开 X - SRAM 的允许能不能访问这些SFR

使用特权

评论回复
ayb_ice| | 2020-6-18 16:05 | 显示全部楼层
lulipro 发表于 2020-6-18 06:13
STC手册中说:如果要访问(读写)XSRFs,必须先将P_SW2.EAXSFR(bit7)置1才行。
经过测试发现:在EAXSFR=0的 ...

有些已经存在的设计可能已经使用了那部分XRAM空间(比如用于扩展了),如果换MCU可以更方便(恰好他的代码又不用那些SFR)

使用特权

评论回复
airwill| | 2020-6-18 22:27 | 显示全部楼层
内核可能会优先  XSFR 的访问吧

使用特权

评论回复
coody| | 2020-6-18 23:05 | 显示全部楼层
禁止访问XSFR,可以避免意外改写扩展在XSFR中的寄存器,比如PWM,意外改写会有大事故的。
当然,如果保证程序不会意外改写,压你不设置0也无所谓。

使用特权

评论回复
lulipro|  楼主 | 2020-6-19 02:40 | 显示全部楼层
coody 发表于 2020-6-18 23:05
禁止访问XSFR,可以避免意外改写扩展在XSFR中的寄存器,比如PWM,意外改写会有大事故的。
当然,如果保证程 ...

嗯嗯,这个说的通。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

19

帖子

0

粉丝