数据总线兼顾32位16位8位1位:
来张特写:
要想理解上次姚总讲的,先看看:
STC32G系列芯片内部则是采样32位宽度的数据总线,从而确保32位的edata数据可以一个CPU时钟就可完成数据读写。而Intel的80251,由于制造工艺和成本的原因,芯片内部的数据总线采样的8位宽度的设计,同样32位的edata数据的读写,Intel的80251则需要读写4次,再进行数据合并。
看40年前的8051框图:
实际操作一下:
传统8051:
这4组32个8位寄存器,在程序状态字寄存器PSW中的RS1RS0的2个位的控制下,来选择使用那一组寄存器。注意传统的8051这32个寄存器不能同时使用。
CUP在寄存器PSW中的RS1RS0的2个位的控制下,1次只能看到8个寄存器。
这样首先要解决24位地址的寻址空间扩展问题(注意还要兼容旧8051)
就是说姚总要在兼容8位数据操作的情况下,对16位和32位数据如何处理?
(上次课件姚总补充是每次都拿32位出来,看情景决定是否丢弃部分数据)
外设是通过地址总线和数据总线来交换数据,从而得到控制使用的
8位机基本存储只有256个字节,而STC32系列是4K,翻了4*4=16倍。这个是32位机的基本存储器
还有XDATA ,是8K。相当于8051的扩展RAM :现在STC把它放在片内:
这样STC32系列,片内的RAM就有12K
不过我平时用C51驱动个LCD12864,也还没搞清楚如何合理分配存储器,那些关键字是放在EDATA,哪些放在XDATA
很多数据指针也有严格要求,一不注意就一堆错误,还有待提高............
在MCS-251 ISA中,对于24位地址总线进行了定义,高8位表示访问的段空间,低16位表示当前访问段空间的具体存储单元位置,使用xxxx xxxx:yyyy yyyy yyyy yyyy表示
前8位表示段的空间:
这里的段表示我们访问的是EEPROM还是
EDATA 或者是XDATA,以前8位机通过指令区分访问的是基本存储区还是扩展存储器,是通过mov的后缀:C指Flash或者EEPROM,X就是指访问扩展区域XDATA,mov就是访问基本存储区域。现在不但通过指令,还要通过地址的物理区别来进行:地址的高8位表示是程序区、 或者基本的片内区(称为E)、或者外部扩展区域X
有点回到8086的感觉
现在STC32G:
使用16位二进制数"yyyy yyyy yyyy yyyy"表示所访问当前段的具体存储单元位置。
高8位决定我访问的是程序区简称C?还是基本片内RAM区简称E?还是外部扩展区域 XDATA。简称X
几乎是8086段基址,和偏移地址的翻版,不过还是现在STC这样爽,直接放这里!
我们看看片内总的存储空间:
其实DMA控制单元也很重要
它会在片内基本存储区和片内扩展区有物理连线
它和外部设备也是直接有线连在一起
这意味着在存储器和外设之间可以直接搬运数据
不必一定要通过CPU!
STC32集成了很多旧8051没有的东西:
与STC15/STC8系列增强型8051单片机相比,STC32G系列单片机内处理器核的寄存器数量有了显著增加