第4章.外部总线 第5章.中断处理

来源:互联网 发布:游戏程序员工资待遇 编辑:程序博客网 时间:2024/05/21 06:22

第4章.外部总线
外部总线提供外部设备寻址并且可以对51MX设备进行代码读取,数据读写操作。外部总线使用相同的经典的80C51多路外部总线 ,并允许增加输出地址为23位。
4.1 多路外部总线
51MX外部总线支持8位数据传输并且支持23位地址口线。需要通过设置MXCON寄存器的EAM位来配置相应口线的有效数量。默认是16位地址总线,可以先后兼容现有的80C51的socket。
软件改变总线配置信息通过设置 MXCON寄存器中EAM位 = 1来达到。典型的不推荐在程序执行中改变口线地址配置。(如: 在程序执行把EAM =1 改为 0将改变总线接口,芯片将不能访问外部空间);
当P2口复用地址位23位(EAM =1 )时,高地址(Address16~Address23)和低地址(Address0~address7) 将通过锁存器ALE锁定到固定外部空间中,当中间地址(Address8~Address15)到来后 ALE降低不进行锁存工作,3个字节地址合成总地址。如果MXCON寄存器的EAM位不为1,则和80C51一样工作。
这里有两种特殊的P2口复用对外部空间寻址方法(EAM=1, MXCON), MOVX @Ri和 MOVX  @DPTR 这两个指令并不提供23位地址所有资源,当使用程序存储地址MOVC时,任何缺少的地址位是由PC填补的,对于MOVX所有缺失的地址位都强制填补0来达到23位,所以这些指令是获取XDATA的低部存储空间,因此MOVX @Ri地址由高8位全零,中间8位填补为零+低8位为Ri内容组成一个23位地址值。MOVX  @DPTR: 地址则由全零的高8位+低16位的DPTR的内容组成23位地址值。这个段落中叙述的MOVX的状态都是在EAM = 1的设置下有效。只有在这种方式下才会P2口复用地址23位为23位,反之则依然为80C51的16位寻址方式。
如果用户有特殊需要使用23位地址接口和片外代码可以使用软件设置 ,如果这种方式:执行部分代码再进行配置修改EAM = 1那么指令必须是固定设置或者地址<00FBH的。因为在 配置向23位地址转变的时候,需要防止外部总线提供一个16位地址。如果此时PC计数器跳转地址为0100当EAM = 0时(外部硬件期望还是一个23位地址)那么提供给出的地址将会变成01:0100会出错。所以标志位设置要在中间地址为0的情况设置,这样的话无论16位还是23位地址都是一样的。
现在打算利用51MX的23位宽地址和80C51的接口一样对同样的空间内存映射的应用已经得到发展,我们必须遵守一些编程规则,51MX的外部内存访问接口需要将EAM标志置1,
如果使用P2口和RW,RD控制线进行内存映射,那么相比于51不需要任何改变,只使用当前23位地址总线上的低16位地址。
内存映射设备使用下降沿触发ALE控制器来锁存16位地址,MOVX @Ri/DPTR指令不能使用除了 EMOV @Pri;ALE下降沿时锁存P0的低8位地址和P2口高8位地址,正确的期望内存映射设备地址有效,当P2的address8~address15地址有效时在是下降沿执行WR/RD. MOVX @Ri/DPTR指令将导致高位变0,这样会导致设备访问的问题,为了避免这个问题EMOV @Pri被使用,用PR0: R3 = R2, PR1: R7 =R5 这样的话 P2口输出既是 ALE下降沿又是在RD/WR下降沿。最终内存映射设备将会找到正确的地址。

ALE: 锁存地址功能,这个信号量直接锁存地址端口。可能是数据或者代码地址。
PSEN: 程序存储输出信号端,能够读出EPROM/ROM中的指令码范围在 00:0000-7F:FFFF,如果是通用内存映射中范围相应地址范围 80:0000-FF:FFFF.
RD:外部数据读信号,连接 RD外设设备
WR:写外部数据信号,连接WR外设设备
外部数据总线地址范围在 00:0000 ~7F:FFFF匹配通用映射内存地址。如果片内地址被激活,那么外部地址将不能使用,所有DATA/IDATA都在片内。
第5章.中断处理:
P87C551提供四种不同优先及中断处理类型,这将有效对各种中断资源进行源。P87C551提供11个中断源。
每个对立的中断源通过设置 INT或者INT1寄存器的某一位来开启或者关闭,INT0包含一个全局中断控制位 EA:能够控制所有的中断是否有效。
每个中断源可以通过IP0, IP0H, IP1, IP1H位来设置4个优先级中的一个。一个高优先级的中断可以抢占当前低优先及的中断,而同优先级或低优先级中断不能抢占高优先级中断。其他优先级的中断不能强占最好优先级的中断,如果不同优先级中断同时请求,则优先执行高优先级中断服务。
00是最低优先级中断属性,11是最高优先级属性,例如: Time0中断优先属性是由IN0 和IN0H位来控制, 如果IN0H = 1, IN0 = 0 则 Time0优先属性为10, 既为2。
如果2个相同优先级的中断同时请求,那么依次选举决定执行哪个服务,这成为优先仲裁,注意优先仲裁只发生在同优先级中断同时请求的情况下。