SAB80C166学习笔记_第1页
SAB80C166学习笔记_第2页
SAB80C166学习笔记_第3页
SAB80C166学习笔记_第4页
SAB80C166学习笔记_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、3. 80C166概述存储器组织80C166的存储器空间采用冯诺依曼结构,即:代码存储器、数据存储器、寄存器和I/O口都被组织在同一个地址空间,该地址空间大小为256字节。在以后的C166系列芯片中地址空间将扩大到16M字节。整个存储空间可以被按字节访问或按字访问。片上存储器的特定部分可以直接位寻址。80C166内部有1K字节的双口RAM。这个内部RAM用来存储用户定义的变量、系统堆栈、通用寄存器组,甚至可以存储代码。一个通用寄存器组可以由多达16个字(R0到R15)和/或字节(RL0、RH0、RL7、RH7)组成。512字节的地址空间保留作为特殊功能寄存器(SFR)区域。SFR是16位宽的寄

2、存器,用来控制和监视不同的片上单元的功能。目前有98个特殊功能寄存器。未使用的SFR地址为将来的C166家族芯片保留。为了满足对更多存储器的需求,可以将多达256K字节的RAM和/或ROM连接在片外。外部总线控制器所有对外部存储器的访问都是通过片上的外部总线控制器进行的。它可以通过编程成为单芯片模式(当不需要使用片外存储器时)或者以下三种模式之一:16位/18位地址,16位数据,无复用;16位/18位地址,16位数据,复用;16位/18位地址,8位数据,复用;在非复用总线模式中,端口1被用来输出地址,端口0被用来作为数据输入输出。在复用总线模式,仅有一个16位端口(端口0)被用来作为地址和数据

3、总线。外部总线接口重要时序特性(存储器周期时间、存储器三态时间和读/写延迟)是可编程的,以便用户使用各种不同类型的存储器。通过一个特定的“Ready”函数来支持对非常低速的存储器的访问。对于使用的存储空间小于64K字节的应用,可以选用一种不分段的存储器模型。在这种情况下,所有的存储器位置可以用16位寻址,不需要端口4作为最高2位地址(A17和A16)的输出线(在分段模型中,需要用端口4作为最高2位地址)。CPU核CPU使用一个由多达16个字的通用目的寄存器构成的实际寄存器环境,这些通用目的寄存器物理上分布于片上RAM中。一个环境指针寄存器(CP,Context Pointer)用来确定CPU正

4、在访问的活动的寄存器组的基地址。寄存器组的个数仅受可用的内部RAM的数量的限制。为了便于参数传递,不同的寄存器组可以有重叠。系统堆栈可达512字节,用来存储临时数据。系统堆栈被分配在片上RAM中,CPU通过堆栈指针寄存器(SP,Stack Pointer)访问。在每次访问堆栈时,使用两个独立的SFR,STKOV和STKUN,暗中与堆栈指针的值进行比较,以检测是否发生堆栈上溢出和下溢出。使用SAB80C166的高性能指令集,编程者可以有效的利用CPU实现的高性能。指令集包括以下指令类型:-算数指令-逻辑指令-布尔位操作指令-比较和循环控制指令-移位和循环以为指令-优先化指令-数据移动指令-系统堆

5、栈指令-跳转和调用指令-返回指令-系统控制指令-其他各种指令基础指令长度是2或4字节。可能的操作数类型是位、字节和字。可以使用直接寻址、间接寻址和立即寻址方式获取操作数。中断系统中断响应时间在250ns到500ns之间。80C166的结构支持数种机制,使得可以快速、灵活的响应微控制器内部或外部的各种中断源所产生的中断服务请求。这些中断请求可以通过编程为由中断控制器或外设事件控制器(PEC)响应。标准的中断服务方式中,当前的程序执行将被挂起并执行向中断向量表的分支。PEC服务与标准的中断服务不同,在执行PEC服务时仅占用当前正在执行的程序一个CPU周期。PEC服务意味着在两个存储器位置间的一个字

6、节或字的数据传输以及PEC源和目的指针的加1。每次PEC服务后,一个独立的PEC传输计数器将暗中减1(当执行连续传输模式时例外)。当这个计数器减小到0后,将执行相应的标准中断服务。PEC服务很适合以下情形:支持一个数据块的传输或接收,或者将AD转换的结果传输到一个内存表中。80C166有8个PEC通道。每个可能的中断源都有一个单独的控制寄存器,它包括一个中断请求标志,一个中断允许标志,一个中断优先级位字段。每个中断源都可以通过与其相关的寄存器编程为16个优先级之一。中断一旦被CPU接受,中断服务只能被更高优先级的中断源中断。对于标准的中断处理方式,每个可能的中断源有一个中断向量位置。将“TRA

7、P”指令和一个独立的trap(中断)号结合使用,可以实现软件中断。80C166也提供了完美的识别和处理在运行期间的异常或错误条件的机制,这种机制被称为“硬件陷阱”。硬件陷阱将引起立即的、不可屏蔽的系统反应,这种反应与标准的中断服务(跳转到一个专用的向量表位置)类似。同时,硬件陷阱的发生由陷阱标志寄存器(TFR,Trap flag register)中的一个独立的位指示。硬件陷阱将中断任何程序的执行,除非有另一个更优先的陷阱服务正在运行中。硬件陷阱服务不会被标准中断或PEC中断所中断。捕获/比较单元(CAPCOM)CAPCOM单元支持在多达16个通道上产生和控制定时序列,最大分辨率为400ns。

8、CAPCOM单元通常被用来处理高速I/O任务,例如脉冲和波形产生、脉宽调制、DA转换、软件定时或者相对于外部时间的时间记录。2个带有重装载寄存器的16位定时器(T0/T1)为捕获比较寄存器组提供了2个独立的时间基准。定时器的输入时钟可被编程为内部系统时钟的几个预分频值,或者从模块GPT2中的定时器T6的上溢出或下溢出产生。定时器周期可在大范围内变化使得可以根据应用的特定需求进行精确调整。此外,CAPCOM的定时器T0的外部计数输入允许捕获比较寄存器进行相对于外部事件的事件调度。捕获比较寄存器组包括16个双功能捕获比较寄存器,每个都可以被单独的分配给CAPCOM的T0或T1,并被编程为捕获或比较

9、功能。每个寄存器都有一个与之关联的端口引脚作为触发捕获功能的输入引脚,或者作为指示比较事件发生的输出引脚。当一个捕获/比较寄存器被选为捕获模式,与该寄存器关联的端口引脚上发生外部事件时,分配给该寄存器的定时器的当前内容将会被锁存(捕获)到捕获/比较寄存器中。此外,将产生一个该捕获比较寄存器的特定的中断请求。可以选择引脚上外部信号的正跳变、负跳变或正负跳变作为触发事件。被选择为五种比较模式之一的所有捕获比较寄存器中的内容将连续的与分配的定时器中的内容比较,当定时器的值和捕获比较寄存器的值匹配时,将会根据所选择的比较模式产生指定的动作。通用目的定时器单元GPT是一种灵活的多功能定时器/计数器结构,

10、可以用于不同的与时间相关的任务,例如事件定时和计数、脉宽和占空比测量、脉冲发生或者脉冲倍频。GPT单元由5个16位定时器组成,5个定时器组成2个分离的模块GPT1和GPT2。每个模块中的每个定时器可以独立的工作于多种工作模式,或者与同一个模块中的其他定时器串联。GPT1中的三个定时器T2、T3和T4都可以被配置为以下三种模式中的一种:定时器、门控定时器和计数器模式。在定时器模式,输入时钟来自经分频后的内部系统时钟(分频系数可编程)。定时器模式允许定时器以外部事件为时钟来对外部事件计数。脉宽或占空比测量需要使用门控定时器模式,此时定时器的操作被外部输入引脚上的“门”电平控制。为此,每个定时器有一

11、个关联的端口引脚作为门或时钟输入。GPT1中的定时器的最大分辨率是400ns(当fosc=40MHz)计数方向(向上或下)可以通过编程设定。对T3,计数方向还可以通过在一个端口引脚上的外部信号动态改变,这样便于进行一些诸如位置跟踪之类的任务。定时器T3有一个输出开关锁存器(output toggle latch),每次定时器上溢出或下溢出时它的状态都会改变。这个锁存器的状态可以被输出到端口引脚上,例如用于外部硬件元件的超时监视,或者用于定时器T2和T4的时钟信号从而以高分辨率测量长时间周期。除了它们的基本操作模式之外,定时器T2和T4还可以被配置为定时器T3的重装载寄存器或者捕获寄存器。当用作

12、捕获寄存器或重装载寄存器时,定时器T2和T4都停止工作。T3对应的输入引脚上有信号产生时,T3的值将被捕获存入T2或T4。T3关联引脚上的外部信号或者T3的输出锁存器的指定的状态转换将使T3使用T2或T4中的内容重装载。当T2和T4被配置为交替的重装载T3,以产生一个PWM信号的低和高电平时间定时,这个信号可以被不断的产生,不需要软件的参与。GPT2的最大分辨率为200ns(当fosc=40MHz),可以提供精确的事件控制和时间测量。它包括2个定时器(T5、T6)和一个捕获/重装载寄存器(CAPREL)。两个定时器都可以独立的向上或向下计数,时钟为经可编程的预分频输入时钟。通过T6的输出开关锁

13、存器可以实现定时器的级联,每次定时器上溢出或下溢出时输出开关锁存器的状态都会改变。输出开关锁存器的状态可以用作定时器T5的时钟,也可以输出到一个端口引脚。定时器T6的上溢出或下溢出还可以被用作CAPCOM定时器T0或者T1的时钟,并引起使用CAPREL寄存器中的值重装载。CAPREL寄存器可以根据相关联的端口引脚上的外部信号转变捕获定时器T5中的值,并且定时器T5可以选择在捕获过程之后清空。这使得进行绝对时间差测量或者脉冲倍频不需要软件开销。A/D转换器片上集成有一个10通道10位A/D转换器和采样保持电路用于模拟信号测量。A/D转换器采用逐次逼近的方式进行转换,单通道转换时间在9.75us内

14、完成(当fosc=40MHz)。为转换结果寄存器提供有超运转错误检测能力:当某次转换结束时,若前一次转换结果还没有被从结果寄存器中读取,将产生一个中断请求。对不需要10路模拟输入通道的应用,剩余的模拟输入通道可以被用作数字输入端口引脚。A/D转换器支持四种不同的转换模式。在标准单通道转换模式中,指定通道上的模拟电平被一次采样并转换成数字结果。在单通道连续模式中,模拟电平被重复采样和转换,不需要软件参与。在自动扫描模式,一组指定的通道上的模拟电平被顺序采样和转换,在自动扫描连续模式,指定的一组通道上的电平被重复采样和转换。PEC可以被用来自动的把转换结果存储到一个内存表中以便后继处理,这一数据传

15、输过程没有进入和退出中断子程序的开销。串行通道通过两个具有相同功能的串口(串口ASC0和ASC1)与其他微控制器、处理器、终端或外设进行串行通信。串口支持全双工异步通信,波特率最大625K;半双工同步通信最大波特率2.5M。两个专用波特率发生器允许设置所有的标准波特率,不需要振荡器调谐。每个串行通道有3个独立的中断向量:发送中断、接收中断、接收错误中断。在同步模式中,一个数据字节的发送和接收与一个由80C166产生的移位时钟同步。在异步模式中,采用8位或9位的数据帧发送或接收,1位起始位和1位(或2位)停止位。对于多处理器通信,具有从数据字节中分辨地址的机制(8位数据+唤醒位模式),还有用于测

16、试目的的回送(loop back)选项。为了增强数据传输的可靠性,具有多种硬件错误检测能力选项。在数据发送时可以自动产生一位奇偶校验位并在接收时自动进行检验。帧检测锁舞允许识别丢失了停止位的数据帧。当接收到新的字符时,如果接收缓冲寄存器中尚有未被读取的字符时将产生超运转错误。看门狗定时器在芯片复位后,看门狗定时器总是使能的,并且仅在EINIT(end of initialization)指令被执行之前可以被禁用。这样,芯片的启动过程总是被监测的。当软件被设计成在看门狗定时器溢出之前对其复位时,如果程序由于硬件或软件故障不能正常运行,看门狗将超时。看门狗溢出时将产生一个内部硬件复位并将引脚RST

17、OUT#拉低以允许外部硬件复位。看门狗定时器是一个16位定时器,时钟频率为fosc/4或者fosc/256。为了允许监视时间间隔进一步的变化,看门狗定时器寄存器的高字节可以被设置成预定义的重装载值。每次通过软件对看门狗复位时,看门狗定时器寄存器的高字节被重装载。这样,时间间隔可以在25us到420ms之间(fosc=40MHz)。复位后默认的看门狗时间间隔是6.55ms。并口80C166有76个IO引脚,被组织成4个16位IO口(端口0到3)、1个2位IO口(端口4)和1个10位IO口(端口5)。所有的端口线都是可位寻址的,并且端口0到4的所有引脚都是可以通过方向寄存器按位可编程为输入或输出引

18、脚的。所有的IO端口都是真双向端口,当配置成输入时可以切换成高阻抗状态。在内部复位期间,所有的端口引脚都被配置为输入。每个端口线都有一个与之相关联的可编程的输入或输出第二功能。当访问外部存储器时,端口0和1可以被用作地址和数据线;而在使用分段方式访问超过64k字节存储器时,端口4输出额外的段地址位A16和A17。端口2被关联到捕获比较单元的输出。端口3的第二功能包括定时器、串口、可选的总线控制信号(WR#、BHE#、READY#)以及系统时钟输出(CLKOUT)。端口5被用做到ADC的模拟输入通道。当这些第二功能均未使用时,对应的端口线可以被用作通用IO线。4. 存储器组织80C166内存空间

19、采用冯诺依曼结构,代码和数据在同一个线性地址空间中进行访问。所有的在物理上分开的存储器区域,包括内部ROM(对于83C166)、内部RAM、内部特殊功能寄存器和外部存储器都被映射到一个共同的地址空间。80C166提供的可寻址存储器空间为256K字节。这个空间被划分为4个64k字节的段,每个段又划分为4个16k字节的页。在未来的80C166芯片家族中可寻址空间将扩大到16M字节。图4.1显示了不同的存储器区域如何被映射到256K字节的物理地址空间。基本上,所有的内部存储器区域(ROM、RAM、SFRs)被映射到存储区域的第0段的一部分。外部存储器被映射到第0段的剩余部分和1到3段。只要在复位期间

20、内部ROM访问被禁止,段0的最低8K字节也指定给一个外部存储器区域。字节被存储在奇数或偶数地址。字被存储在连续的存储器位置,低字节放在偶数字节地址,高字节存放在随后的奇数字节地址。双字(仅限于代码)被作为2个字存储在连续的存储器位置。单个的bit总是被存储在一个字地址的指定bit位置。Bit0是一个偶数字节地址位置的字节的最低位。Bit15是紧挨着的奇数字节地址的字节最高位。表4.1 内存地址空间映射地址空间存储器范围大小(字节)00000h - 01FFFh内部ROM或外部存储器8K02000h - 0F9FFh外部存储器54.5K0FA00h - 0FDFFh内部RAM1K0FE00h -

21、 0FFFFh内部SFRs51210000h - 3FFFFh外部存储器192K内部ROM、内部RAM和外部存储器空间被用来存储代码和数据。内部SFRs空间被用来存放控制数据,不用来存放代码。注意,构成一个单独的字或一个双字的所有字节单元必须总是存放在同一个物理存储区域和组织存储区域(页、段)。某些存储区域有其典型应用,如下。0段中的从00000h到000BFh的地址被保留给硬件陷阱和中断向量跳转表。被上下文指针(CP)寄存器选中的活动通用目的寄存器组可以位于内部RAM中的任何位置(从0FA00h到0FDFFh)。内部RAM的字地址0FA00h到0FBFEh基本上被用作系统堆栈。内部RAM的最

22、高32字节(地址0FDE0h到0FDFFh)被用作PEC源和目的指针。三个存储器空间(从内部SFRs区域的0FF00h到0FFDFh、从内部RAM区域的0FD00h到0FDFFh以及被当前选中的通用目的寄存器组占用的寻址空间)基本上用于单bit访问。4.1 内部ROM80C166有8K字节的片上掩膜可编程ROM,其组织形式为2k-32字节。内部ROM通过复位期间外部总线配置引脚EBC1和EBC0的值可以设置为全局可访问或者禁止访问,如表4.2所示。被选中的内部ROM访问状态被存储在SYSCON寄存器的只读位ROMEN中。表4.2 在复位期间选择内部ROM访问状态EBC1脚EBC0脚内部ROM访

23、问状态00允许01禁止10禁止11禁止内部ROM可用于代码和数据(常数、表等)的存储。代码访问总是在偶数字节地址进行。这样,在内部ROM中最高的可能的代码存储位置是01FFEh(对单字指令)或01FFCh(对双字指令)。如果用于代码存储,在对应的位置必须包括一个分支(branch)指令,因为不支持从内部ROM到外部存储器的连续的边界跨越,这样将导致错误的结果。对存储在内部ROM的字或字节数据的访问必须通过间接或者长16位寻址模式,假如选中的DPP(数据页指针)寄存器指向数据页0。对内部ROM的操作不存在短寻址方式。任何字数据访问都是对一个偶字节地址进行的。因此,在内部ROM中存储字数据的最高的

24、可能的地址是01FFEh。对于PEC数据传输,可以通过PEC源和目的指针对内部ROM进行访问,而不使用DPP寄存器中的内容。内部ROM不提供单独的Bit存储,因此是不能进行位寻址的。如果内部ROM的访问是允许的,只要发生了复位、硬件陷阱、中断或者执行了软件陷阱指令,程序执行将转向一个与当前代码段指针(CSP)寄存器内容无关的内部ROM地址(除非在那儿有一个跳转向量)。关于陷阱和中断跳转向量表的详细信息见“中断系统结构”。4.2 外部存储器80C166可以支持多达4-64K字节的外部ROM和/或RAM,它们可以以8位或16位的形式组织。由于第一个64K字节的地址空间的一部分已经被片上存储器区域占

25、用,只有62.5K字节(对83C166来说,只有54.5K字节,因为它有8K字节片内ROM)的外部存储器可以在第0段中使用。用于外部存储器访问的总线模式通过在复位期间外部总线配置引脚EBC1和EBC0的值进行选择。根据服务期间这两个引脚的逻辑电平确定是否允许访问外部存储器,见表4.3。选择的外部总线配置被保存在SYSCON寄存器的BTYP位字段。如果复位期间外部存储器访问被禁用了,可以在稍后通过软件修改BTYP位字段来允许使用外部存储器。如果在复位期间,外部存储器访问被设置为允许访问,BTYP位字段则成为只读状态,因此外部存储器访问模式之后就不再能改变了。关于外部总线配置和控制的更详细信息见“

26、外部总线接口”。表4.3 复位期间选择外部总线访问状态EBC1脚EBC0脚外部ROM访问状态00禁止(可以通过软件设为允许)01允许10允许11允许外部存储器可以用来存储代码和数据。如果不使用80C166的段模式(SYSCON寄存器的SGTDIS位被置1),将只能访问第0段的外部存储器。对代码的访问总是在偶数字节地址。因此,最高的可能存储代码的位置是0段的0F9FEh(对单字指令)或0F9FCh(对双字指令)。如果用于存储代码,对应的位置必须包括一条分支(branch)指令,因为不允许从外部存储器到内部RAM的连续边界跨越,否则将出错。对0段之外的其他段,最高的代码存储地址是xFFFEh(对单

27、字指令)或xFFFCh(对双字指令),其中x为1、2或3。如果用于代码存储,对应的位置必须包括一条分支指令,因为只有通过特定的分支指令JMPS和CALLS改变CSP寄存器的值才能实现跨段存放的程序的执行。外部存放的字或字节数据的访问只能通过间接寻址或长16位寻址模式与DPP寄存器共同作用实现。对外部操作数不存在短寻址方式。任何字地址访问都是对偶数字节地址进行。因此,在外部存储器0段中可能存储字数据的最高地址是0F9FEh,在所有其他段(x=1,2,3)中,可能存储字数据的最高地址是xFFFEh。对PEC数据传输,通过PEC源和目的指针访问0段外部存储器可以独立于DPP寄存器中的内容。外部存储器

28、不支持单独的bit存储,因此也不支持位寻址。如果内部ROM访问被禁用,只要发生复位、硬件陷阱、中断或软件陷阱指令执行,程序将跳转到一个独立于当前CSP寄存器内容的外部存储器地址,除非在该位置存在一个跳转向量。关于陷阱和中断跳转向量表的详细信息见“中断系统结构”。4.3内部RAM80C166包含1K字节(512*16位)的片上双口RAM,内部RAM访问总是允许的。系统堆栈、通用目的寄存器和PEC源和目的指针位于内部RAM中。此外,内部RAM可以用于存储代码和数据。80C166汇编器支持为上述特定用途分配内部RAM区域。代码访问总是对偶数字节地址进行。假定不需要使用PEC源和目的指针,在内部RAM

29、中可以用于存储代码的最高地址是0FDFEh(对单字指令)或0FDFCh(对双字指令)。如果用于代码存储,对应的位置必须包含一条指向除了SFR区域之外的存储位置的分支指令,因为SFR区域不能用于代码运行。如果选中的DPP寄存器指针指向数据页3,内部RAM中的任何字数据和字节数据可以通过间接寻址模式或长16位寻址模式访问。任何字数据的访问都是对偶数字节地址进行的。假如不使用PEC源和目的指针,内部RAM中可以用于存储字数据的最高地址是0FDFEh。对PEC数据传输,通过PEC源和目的指针访问内部RAM可以独立于DPP寄存器中的内容。所有的系统堆栈操作都是通过堆栈指针(SP)寄存器进行的。通用目的寄

30、存器GPRs的访问是通过短的2位、4位或8位寻址模式结合上下文指针(CP)寄存器进行的。将要进行PEC数据传输的通道号决定了将要访问的PEC源和目的指针。上面提到的几种对内部RAM的访问都独立于DPP寄存器中的当前值。内部RAM的靠上部区域(地址从0FD00h到0FDFFh)和当前活动的GPRs提供单独的位存储,因此也是可以位寻址的。4.3.1 系统堆栈内部RAM地址空间的0FBFFh到0FA00h基本上用于实现系统堆栈。默认的最大堆栈大小为256字,可以通过修改SYSCON寄存器中的堆栈大小(STKSZ)位减小堆栈的大小,见表4.4。表4.4 最大系统堆栈大小选定STKSZ堆栈大小(字)内部

31、RAM地址(按降序)00b2560FBFFh - 0FA00h(默认)01b1280FBFFh - 0FB00h10b640FBFFh - 0FB90h11b320FBFFh - 0FBC0h所有的堆栈操作都是通过堆栈指针(SP)寄存器进行的。堆栈从高地址向低地址增长。对系统堆栈只允许按字访问。堆栈上溢出寄存器(STKOV)和堆栈下溢出寄存器(STKUN)可以用来控制何时离开了选定的堆栈区域。它们不仅可以用来防止数据破坏,还可以用来实现带有硬件支持系统堆栈冲洗和填充的循环堆栈。更详细的关于通过SP寄存器进行系统堆栈寻址和使用STKOV和STKUN的信息见“CPU特殊功能寄存器”4.3.2 通用

32、目的寄存器通用目的寄存器可以位于内部RAM空间的任何位置(地址从0FA00h到0FDFFh)。上下文指针(CP)寄存器决定了当前活动的寄存器组的基地址。这个寄存器组可以由多达16个字的通用目的寄存器(R0到R15)和/或者多达16字节的通用目的寄存器(RL0、RH0到RL7、RH7)组成。这16字节的通用目的寄存器分布在GPRs的前八个字,见图4.4。和系统堆栈相反,寄存器组从低地址向高地址增长,并且最多占用32字节。不管DPP寄存器内当前的值是多少,可以结合CP寄存器采用短4位和短8位寻址模式对GPR进行字或字节访问。此外,当前活动的寄存器组的每一位都可以独立的访问。80C166支持寄存器组

33、(上下文)之间的快速切换。因此,在内部RAM中可以同时存在多个寄存器组。然而,只有通过CP寄存器选中的寄存器组是活动的。选择一个新的寄存器组仅需要更新CP寄存器。切换上下文指令(SCXT)执行寄存器组切换并且自动保存之前的上下文。可以同时实现任意多个不同大小的寄存器,仅受可用的内部RAM大小的限制.3.34.3.3 PEC源和目的指针内部RAM中多达16个字的位置(地址0FDE0h到0FDFEh)被用作PEC数据传输的源和目的地址指针。如图4.5所示,一对源地址和目的地址指针被存储在两个连续的字位置,源指针(SRCPx)在较低的字地址位置,目的指针(DSTPx)在较高的字地址位置,其中x=0到

34、7。假如把将要使用某个PEC通道传递给80C166汇编器,80C166的软件工具包PES166将会为该指针对保留内存空间。进行PEC数据传输时,对指定的PEC通道号选中的源和目的指针的访问与DPP的当前值无关。对于未使用的PEC通道,对应的源和目的指针位置可以被用作字或字节或单独的位数据存储。4.4 内部特殊功能寄存器80C166有512字节的片上特殊功能寄存器(SFR)空间。特殊功能寄存器被映射到地址空间0FE00h到0FFFFh。SFR不能用于一般代码或数据的存储,而是用于存储一些特殊用途的数据,只要是控制CPU、外设和I/O功能。详细描述见关于CPU、外设和并行端口的相应章节。附录B中有

35、关于特殊功能寄存器简短描述的表,包括了SFR的符号地址、18位物理地址和短8位地址。一般来说,SFR可以通过一个暗含的基地址加上一个短8位偏移地址按字访问,不管DPP寄存器当前的值是多少。SFR的低字节部分可以通过这些短8位寻址模式访问。假如选中的DPP寄存器指向数据页3,可以通过间接寻址或长16位寻址方式对SFR存储空间的任何高字节、低字节或任何字进行访问。SFR存储器空间的上部(地址0FF00h到0FFDFh)包括一些带有很多信号标志控制功能的SFR。因此,这个存储区是可以直接位寻址的。某些已经存在的SFR中的某些位以及SFR地址空间中的某些字位置是为未来的片上外设保留的。任何对这些区域的

36、写操作都将被忽略,任何对这些区域的读操作都将返回“0”。注意:任何对存在的SFR的字节写操作都将引起不可寻址的互补字节被清除。某些SFR或某些SFR的部分位具有访问类型限制,例如只读或只写。5 中央处理单元CPUCPU的基本任务是取指令并对指令解码、为算术逻辑单元(ALU)提供操作数、在ALU中对操作数执行操作、存储之前的计算结果。SAB80C166中有四级管线,因此可以并行处理4条指令。5.1描述了管线如何处理顺序指令和分支指令,以及采用了什么硬件措施(provision)加速跳转指令的执行。从指令管线的角度而言,大多数80C166指令可以被看作在一个机器周期(采用40MHz晶振时为100n

37、s)内执行。5.2描述了一般指令的执行所需的时间,包括标准时间和异常的时间。内部存储器的访问是有CPU自己完成的,所有的外部存储器访问是通过片上的外部总线控制器(EBC)完成的,CPU在访问属于外部存储空间的代码或数据时自动的调用外部总线控制器。如果可能,当对外部存储器的访问正在进行中时,CPU连续的操作。如果需要外部存储器中的数据,但是该数据还不能获得,或者在之前的访问还没结束之前CPU又需要进行新的外部存储器访问,CPU将被EBC单元约束(hold)。详见第9章。80C166的外设几乎是独立于CPU工作的,它们使用独立的时钟发生器。CPU和外设之间的数据和控制信息的交换是通过特殊功能寄存器

38、实现的。如果外设非确定性的需要CPU动作时,片上的中断控制器将比较所有的即将发生的外设服务请求并给予其中的一个优先权。如果当前CPU操作的优先级比选中的外设请求优先级低,将产生一个中断。基本上,有2种类型的中断处理:第一种是标准中断处理,强迫CPU在堆栈中保存当前的程序状态和返回地址,然后转向中断向量跳转表;第二种是PEC中断处理,仅占用当前的CPU活动一个机器周期以执行一个通过外设事件控制器进行的数据传输。在程序运行期间检测到的系统错误(称为硬件陷阱),或者外部不可屏蔽中断将被作为具有很高优先级的标准中断处理。更多信息见第7章。与其他片上外设不同,看门狗定时器与CPU之间有更紧密的联系。如果

39、允许使用看门狗,看门狗定时器期望CPU以一个可编程的周期为自己复位,否则看门狗将使芯片复位。这样可以避免CPU在执行错误的代码时进入完全错误的状态。复位后,看门狗定时器自动开始计数,但是如果需要,可以通过软件将其禁用。通过任何一种复位,CPU将被强迫进入一个预定义的活动状态。其他的CPU状态包括:IDLE状态,CPU时钟关闭而外设时钟保持运行;POWER DOWN状态,所有的片上时钟关闭。如果CPU处于IDLE状态,在产生中断时CPU将转入活动状态,在POWER DOWN状态的CPU在被复位后将转入活动状态。通过80C166的系统控制指令可以进入IDLE、POWER DOWN和RESET状态。

40、详细信息见第10章。5.3描述了CPU核内的特殊功能寄存器:5.1 指令管线80C166的指令处理被分成4个阶段,每个阶段有其各自的任务:第1阶段,取指(FETCH):根据指令指针寄存器和代码段指针寄存器选择的指令被从内部ROM、内部RAM或外部存储器中取出。第2阶段,解码:对指令解码,如果需要,则对操作数的地址进行计算并取出操作数。对于所有需要隐式的访问系统堆栈的指令,SP寄存器根据指定递增或递减。对于分支指令,指令指针和代码段指针使用期望的分支目标地址更新(假如该分支被执行)。第3阶段,执行:对之前取得的操作数在ALU中进行操作。此外,PSW寄存器中的条件标志根据指令进行更新。所有的对SF

41、R存储器空间的隐式写操作和所有的对用于间接寻址指针的GPRs的自动增加或自动减少的写操作也将在指令的执行阶段执行。第4阶段,回写:所有的外部操作数和内部RAM中的剩余的操作数被写回。80C166有一种被称作“注入指令”的特别指令。这些指令是由机器在内部产生的,目的是为那些无法在一个机器周期内处理的指令提供所需的时间。它们被自动的注入到管线的解码阶段,然后它们将像其他的标准指令一样经历管线的其他阶段。程序中断也是通过注入指令的方法执行的。实际上用户将不会注意到这些内部注入的指令,但是在这里对其介绍将有助于解释管线。5.1.1顺序指令处理每条单独的指令都将经历管线的4个阶段,无论是否每个阶段都真的

42、执行。既然经过一个管线阶段将花费至少1个机器周期,任何一个单独的指令的执行将花费至少4个机器周期。管线允许并行处理4条指令,因此大多数指令的执行等价于只需要1个机器周期,只要管线在复位后立即被填充(见图5.1)。从一段相对长的时间来说,指令管线增大了平均指令吞吐量。后面所提到的任何指令执行时间标准都是指在管线并行处理指令期间的平均执行时间。5.1.2 标准分支指令处理指令管线有助于加速顺序程序处理。在有分支发生的情况下,已经提前进行取指的指令通常不是必须马上解码的下一条指令。这样,通常至少需要一个额外的机器周期来取分支目标处的指令。这种额外的机器周期由一种注入指令实现,见图5.2。如果一个条件

43、分支没有被采用,那么情况和顺序程序没有区别,因此不需要额外的时间。这种情况下,分支指令后面的指令将在条件分支指令解码之后的下一个机器周期进入解码阶段。5.1.3 缓存跳转指令(cache jump instruction)处理80C166使用跳转缓存来优化在循环中被反复处理的条件跳转。缓存中的跳转发生时,取分支目标指令所需的额外时间就被节省了,因此相应的缓存跳转指令的执行在多数情况下只花费一个机器周期。这种性能的实现是通过以下机制实现的,当一条缓存跳转指令第一次经过解码阶段时(并且假设跳转条件满足),取跳转目标指令像通常情况一样引起1个机器周期的时间延迟。与标准分支指令不一样,一个缓存跳转指令

44、(JMPA、JMPR、JB、JBC、JNB、JNBS)的目标指令将在被取指令之后被存在一个缓存中。在随后的每次重复执行相同的缓存跳转指令时,跳转目标指令将不需要取指,而是从缓存中取出并立即注入管线的解码阶段(见图5.3)。在第二次和以后的任何一次执行相同的缓存跳转指令时总是可以节省时间,除非在随后的两个同一缓存跳转指令之间有一条具有改变CSP寄存器内容的基本能力的指令(JMPS、CALL、RETS、TRAP、RETI)或者任何标准中断被处理。5.1.4 特定的管线效果由于支持4条不同的指令同时处理,80C166采用了额外的硬件以在不影响性能的情况下解决存在于管线不同阶段的指令之间的因果关系。这

45、一额外的硬件(例如操作数“前向”读和写)在大多数情况下避免了管线被用户注意到。但是,任然有一些极少数情况下,必须注意80C166是一个有管线的机器。智能化的80C166工具,例如仿真器和模拟器支持用户简化与以下特定的管线效果的关联。l 上下文指针(CP)更新一条使用CP寄存器计算一个物理GPR操作数地址的指令通常不能使用马上就要被前面的指令更新的新的CP值。这样,如果用户确实希望新的CP值被使用,必须在CP-changing和随后的GPR-using指令之间至少放一条指令,如下面例子所示:l 数据页指针更新使用特定的寄存器DPPn(n=0到3)计算操作数物理地址的指令通常不能使用该寄存器的新的

46、值,如果该寄存器的值将被另一个马上就要被执行的指令更新。因此,如果确实希望使用DPPn寄存器的新的值,必须在一个改变DPPn值的指令和后面的通过长寻址或间接寻址模式隐式的使用DPPn的指令之间至少插入一条指令,如下面例子所示:l 显式的堆栈指针更新如果有一条马上就要被执行的指令将会更新SP寄存器的值,那么RET、RETI、RETS、RETP或POP指令都不能正确的使用SP寄存器的新值。因此,如果想使用SP的新值而不发生错误的堆栈访问,必须在一个显式的“SP-写”指令和后面的刚才提到的哪些隐式的使用SP的指令之间至少插入一条指令,如下面的例子所示:l 外部存储器访问顺序这里描述的效果只有在使用诸

47、如逻辑分析仪观察外部总线上的外部存储器访问顺序时才能注意到。不同的管线阶段可能会同时向外部总线控制器(EBC)提出访问请求。预定义的外部存储器访问优先级如下,最高优先级的是写数据,其次是取指令代码,再次是读取数据。CPU处理的指令的顺序可能和EBC执行的外部存储器访问顺序不一致。l 定时指令管线在很大程度上减少了平均指令处理时间(从4个机器周期减少到1个)。但是,在很少的一些情况下,特定的管线情形将导致一个指令处理时间被延长半个或1个机器周期。虽然这种额外的时间在总的程序执行时间中仅仅占很微小的一部分,但是在对时间有严格要求的程序模块中避免这些管线引起的时间延迟是必要的。除了普通的执行时间描述

48、之外,第5.2部分还提供了如何针对这种管线引起的时间延迟优化对时间有严格要求的程序。5.2指令状态时间执行一条指令所需的时间基本上取决于指令从哪里取出,操作数从哪里读取以及操作数写往何处。80C166执行程序最快的方式是从内部ROM取指令。在这种情况下,大部分指令可以在一个机器周期内被执行,这也代表了通常的最小执行时间。所有的外部存储器访问都由80C166上的片上外部总线控制器(EBC)执行,该总线控制器与CPU并行工作。多数情况下,来自外部存储器的指令不能被执行的像内部ROM中的程序那么快,因为某些本可以被并行执行的数据传输不得不通过外部接口顺序执行。与内部ROM程序执行相比,处理一条外部程

49、序指令需要的时间还取决于指令和操作数的长度、所选择的总线模式以及一个外部存储器周期的持续时间(此持续时间部分的可由用户选择)。处理内部RAM中的程序不像执行内部ROM中的程序那么快,但是它提供了很大的灵活性(例如,对于可以通过片上的串口将程序下载到内部RAM的end-of-line-programming)。通过下面的讲述可以对程序的最小和最大执行时间进行评估。这可以满足大多数要求。如果需要确定精确的指令状态时间,推荐使用仿真器SIM166或模拟器ETA166。本部分的内容安排如下,第一部分定义后面要使用的时间单位,第二部分包括80C166指令的最小(标准)状态时间,第三部分描述标准时间的例外

50、情形。5.2.1 时间单位定义用以下时间单位描述指令的处理时间:fosc:振荡器频率(从2MHz到40MHz)。State:一个状态时间是一个振荡器周期的2倍。因此,一个状态被用作基本的时间单位。因为它代表了评估指令执行时间时必须考虑的最短的时间周期。1State=2/fosc s ; 对于fosc=variable =50 ns; 对于fosc=40MHzACT:这个ALE Cycle Time(地址锁存允许周期时间)指定了执行一次外部存储器访问所需要的时间。一个ACT 由2个(对于非复用外部总线模式)或3个(对于复用外部总线模式)状态时间再加上若干个由设定的等待状态的个数决定的状态时间构成

51、,等待状态的个数可以通过SYSCON寄存器的MCTC(Memory Cycle Time Control)和MTTC(Memory Tristate Time Control)位字段指定。在非复用外部总线模式下:1*ACT = (2+(15-MCTC)+(1-MTTC)*States = 100ns900ns; 对于fosc=40MHz在复用外部总线模式下:1*ACT = (3+(15-MCTC)+(1-MTTC)*States = 150ns950ns; 对于fosc=40MHz某一部分程序的执行所需要花费的总时间(Ttot)可以安装以下方式计算,把各指令的单独的指令执行时间(TIn)加起来

52、,再加上6个状态时间(用于管线填充),如下:一条指令的单独执行时间Tin由最小数量(TImin)的状态时间加一个额外数量(TIadd)的状态时间和/或ACT时间组成,例如:5.2.2 最小状态时间表5.1显示了80C166处理一条来自内部ROM的指令所需要的最小状态时间(TImin(ROM)。从内部RAM取指的指令的最小状态时间(TImin(RAM)或从外部存储器取指的指令的ACT时间(TImin(ext)也可以按照表5.1的方法简单的计算出来。表5.1指令的最小状态时间80C166的大多数指令(除了某些分支指令、乘法、除法指令和一些特殊的MOVE指令)只需要最小2个状态时间。在执行内部ROM

53、中的程序时,除了一些特殊的分支情况下,指令执行所需的时间与指令的长度无关。缓存跳转指令的注入的目标指令的执行时间可以按照内部ROM中的指令评估,无论当前程序的剩余部分从哪段内存范围取指。对于某些分支指令,表5.1给出了对应的分支被执行的情况下所需的标准的状态时间的数量,还在括号中给出了分支条件不满足或者缓存跳转发生时的指令执行时间TImin。内部RAM中的指令执行时间等于从内部ROM取指令时的最小时间加上若干个与指令长度有关的状态时间,如下:对2字节指令:对4字节指令:与内部ROM中的程序执行不同,处理外部存储器中的指令所需的最小时间TImin(ext)还和指令长度有关,对大多数2字节指令TI

54、min(ext)是与1个ALE周期时间有关,对大多数4字节指令TImin(ext)是与2个ALE周期时间有关。以下公式用来计算通过16位数据总线从外部存储器取指令的最小执行时间:对2字节指令:对4字节指令:对于通过8位数据总线从外部存储器取指令的情况,需要的ALE周期时间是通过16位总线时的2倍。5.2.3 额外的状态时间5.3 CPU特殊功能寄存器CPU核需要一组特殊功能寄存器(SFRs)用来维持系统状态信息、为ALU提供寄存器可寻址的常数、控制系统配置、ALU乘法和除法操作、代码存储器分段、数据存储器分页、访问通用目的寄存器和系统堆栈。对这些特殊功能寄存器的访问机制和其他特殊功能寄存器的访

55、问机制一样。所有的SFRs都可以被任何可以寻址SFR存储器空间的指令所控制,这种灵活性避免了创建系统专用指令的需求。注意,对用户访问CPU核的SFRs有一些限制,以保证处理器的正确工作。PSW、SP和MDC寄存器不仅可以由程序员显式的修改,还可以由CPU在正常的指令处理过程中进行隐式的修改。注意,程序员的任何的对SFR的显式的写请求将取代同一时间硬件对同一个SFR的的修改。还要注意,对一个SFR的任何字节写操作将清除指定的SFR内的不可寻址互补字节。注意,SFR的保留位不能被修改,读取时总是读到“0”。5.3.1 SYSCON:系统配置寄存器这个可位寻址的寄存器提供通用的系统配置和控制功能。S

56、YSCON有四个不同的复位值,因为BTYP位字段和ROMEN位在复位期间被初始化的值取决于EBC0和EBC1输入引脚。5.3.1.1 选择内部ROM/外部存储器访问模式(通过ROMEN、BTYP)BTYP是一个2位字段,反应了选择的外部总线配置,如表5.2所示。表5.2 外部总线配置(通过BTYP位字段)BTYP外部总线配置00b未配置外部总线01b16/18位地址,8位数据,复用的10b16/18位地址,16位数据,复用的11b16/18位地址,16位数据,非复用的BTYP字段在复位期间被初始化为EBC1和EBC0引脚的状态。当配置的有外部总线,BTYP为只读的访问状态,因此外部总线配置在复

57、位期间选择之后就不能再改变。在这种情况下,对内部ROM的访问将被全局的禁用(以只读的位ROMEN的值为0为标志)。这意味着对地址空间00000h到01FFFh的访问都是对外部存储器的访问。如果在复位期间没有配置外部总线,将允许对内部ROM的访问(以只读的位ROMEN的值为1为标志)。在这种被称作“单片模式”中,BTYP位字段保持可修改状态,以允许之后通过软件重新配置一个外部总线。如果ROMEN包含“1”,所有的对00000h到01FFFh的访问都是对内部存储器的访问。注意,如果选择了复用的外部总线配置,存储器三态时间将自动的被扩展1个状态时间(1个状态时间=2*1/fosc)。更多关于单片模式和外部总线配置模式的信息和例子见第9.1部分。图5.4 系统配置寄存器5.3.1.2 外部总线定时控制(通过MCTC、MTTC、RWDC)SYSCON寄存器中的MCTC位字段、MTTC位字段和RWDC位提供了各种外部总线定时参数。存储器周期时间可以在0到15个状态时间之间(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论