eZ80 CPU:第一个支持16MB线性寻址的8位CPU
发布日期:2025-03-13
eZ80 CPU核心
eZ80 CPU是第一个支持16MB线性寻址的8位CPU。实时执行或操作系统下的每个软件模块或任务都在Z80兼容(64KB)模式或全24位(16MB)地址模式下运行。CPU指令集是Z80和Z180 CPU的指令集的超集。Z80和Z180程序可以在eZ80 CPU上执行,几乎不需要修改。
特征
eZ80 CPU的特点包括:
•代码与Z80和Z180产品兼容
•24位线性地址空间
•单周期指令提取
•流水线提取、解码和执行
•ADL(24位)和Z80(16位)内存模式的双堆栈指针
•24位CPU寄存器和算术逻辑单元(ALU)
•调试支持
•不可屏蔽中断(NMI),加上对128个可屏蔽矢量中断的支持
新指令
两条新的eZ80 CPU指令以16位值加载/卸载I寄存器。这些新说明是:
•LD I,HL(ED-C7)
•LD HL,I(ED-D7)
有关eZ80 CPU、其指令集和eZ80编程的更多信息,请参阅eZ80CPU用户手册(UM0077),该手册可从Zilog网站免费下载。
重置
eZ80F91设备内的重置控制器具有一致的重置功能,适用于影响系统的所有类型的重置。本文档中称为reset的系统重置将eZ80F91返回到定义的状态。所有受RESET影响的内部寄存器都将恢复到默认状态。RESET将GPIO端口引脚配置为输入,并将CPU的程序计数器清零至000000h。重置期间程序代码执行停止。
导致重置的事件有:
•上电复位(POR)
•低压断电(VBO)
•外部RESET引脚断言
•配置为生成重置时,看门狗定时器(WDT)超时
•CPU处于低功耗睡眠模式时的实时时钟报警
•执行调试重置命令
在RESET期间,内部RESET模式定时器将系统保持在RESET状态1025个系统时钟(SCLK)周期,以使主晶体振荡器有足够的时间稳定。对于内部RESET源,在启动RESET事件的信号停用后,RESET模式定时器在SCLK的下一个上升沿开始递增。对于外部RESET引脚断言,RESET模式定时器在连续三个SCLK周期断言RESET引脚后的SCLK下一个上升沿开始。
注:重置时SCLK的默认时钟源是晶体输入(XIN)。
外部复位输入和指示器
eZ80F91 RESET引脚既可作为漏极开路(低电平有效)RESET模式指示器,也可作为低电平有效RESET输入。当发生RESET事件时,内部电路开始将RESET引脚驱动为低电平。内部电路将RESET引脚保持为低电平,直到内部RESET模式定时器超时。如果在1025计数超时结束之前释放了外部复位信号,则程序将在reset模式超时后开始执行。如果在1025计数超时结束后释放外部复位信号,则程序执行将在释放reset输入后开始(reset引脚在连续四个SCLK周期内为高)。
上电复位
每次部件的电源电压从低于VoltageBrown Out阈值(VVBO)上升到高于POR电压阈值(VPOR)时,都会发生POR。带间间隙参考电压检测器向复位控制器发送连续的复位信号,直到电源电压(VCC)超过POR电压阈值。VCC上升到VPOR以上后,片上模拟延迟元件会短暂地向复位控制器发送复位信号。在该模拟延迟元件超时后,重置控制器将theeZ80F91保持在重置状态,直到重置模式定时器到期。
电压断电复位
如果程序执行开始后电源电压(VCC)降至VVBO以下,则theeZ80F91设备重置。VBO保护电路检测到低电源电压,并通过重置控制器启动重置。eZ80F91保持复位状态,直到电源电压再次恢复到POR电压阈值(VPOR)以上,复位控制器释放内部复位信号。VBO电路拒绝短的负棕色输出脉冲,以防止虚假的RESET事件。
低功耗模式
eZ80F91设备提供了一系列节能功能。在禁用所有外围设备(包括VBO)的情况下,SLEEP模式提供了最高级别的功率降低。HALT指令提供了下一级的功率降低。时钟外围掉电寄存器提供了最基本的功率降低水平。
休眠模式
执行CPU的SLP指令会使eZ80F91设备进入SLEEP模式。InSLEEP模式下,操作特性为:
•主晶体振荡器已禁用。
•系统时钟已禁用。
CPU处于空闲状态。
•程序计数器(PC)停止递增。
•32kHz晶体振荡器继续运行并驱动实时时钟和WDT(如果WDT配置为从32kHz振荡器运行)。
CPU通过以下任何操作退出睡眠模式:
•通过外部复位引脚驱动的低电平复位。
•通过实时时钟报警进行重置。
•通过WDT超时进行重置(如果32 kHz振荡器耗尽,并配置为在超时时生成重置)。
•通过执行调试重置命令进行重置。
•如果启用,通过低压断电(VBO)检测电路进行重置。
退出SLEEP模式后,发生标准RESET延迟,以使主晶体振荡器稳定。
HALT模式
执行CPU的HALT指令会使eZ80F91设备进入HALT模式。在HALT模式下,操作特性如下:
•主晶体振荡器已启用并继续运行。
•系统时钟已启用并继续运行。
CPU处于空闲状态。
•电脑停止递增。
CPU通过以下任何操作退出HALT模式:
•不可请求的中断(NMI)。
•可屏蔽的中断。
•通过外部复位引脚驱动的低电平复位。
•看门狗定时器超时(如果配置为在超时时生成NMI或RESET)。
•通过执行调试重置命令进行重置。
•如果启用,通过低压断电检测电路进行重置。
为了在HALT模式下最大限度地减少电流,必须通过时钟外设掉电寄存器关闭所有未使用的芯片上外设的系统时钟。
HALT模式和EMAC功能
当CPU处于HALT模式时,eZ80F91设备的EMAC块不能像其他外围设备那样被禁用。在接收到以太网数据包后,EMAC块会生成一个可屏蔽的接收中断,就像它在非暂停模式下一样。因此,处理器被唤醒并继续使用用户定义的应用程序。
时钟外设掉电寄存器
为了降低功耗,时钟外设掉电寄存器允许系统时钟被阻止到未使用的片上外设。重置时,所有外围设备均已启用。通过将时钟外设掉电寄存器中的相应位设置为1,可以关闭未使用外设的时钟。断电时,外围设备完全禁用。要重新启用,时钟外围掉电寄存器中的位必须清除为0。
此外,CLK_PPD2的VBO_OFF位用于禁用VBO检测电路,从而在不需要此功能时显著降低直流电流消耗。
许多外围设备具有单独的启用/禁用控制位,这些控制位必须适合操作。这些特定于外围设备的启用/禁用位不能提供与时钟外围设备掉电寄存器相同的功率降低水平。断电时,单个外围控制寄存器无法进行读写访问。
通用输入/输出
eZ80F91设备具有32个通用输入/输出(GPIO)引脚。GPIO引脚被组装为四个8位端口:端口A、端口B、端口C和端口D。所有端口信号都被配置为输入或输出。此外,所有端口引脚都用作CPU的矢量中断源。
eZ80F91 ASSP GPIO端口与其前代eZ80略有不同。具体来说,端口A引脚的源电流为8mA,汇电流为10mA。此外,端口B和C输入现在具有施密特触发器输入缓冲器。
gpio操作
GPIO操作对于所有四个GPIO端口(端口A、B、C和D)都是相同的。每个端口具有八个GPIO端口引脚。每个引脚的操作模式由四个位控制,这些位分布在四个8位寄存器之间。GPIO模式控制寄存器包括:
•端口x数据寄存器(Px_DR)
•端口x数据方向寄存器(Px_DDR)
•端口x备用寄存器1(Px_ALT1)
•端口x备用寄存器2(Px_ALT2)
在上面的列表中,x可以是A、B、C或D,表示四个GPIO端口中的任何一个。通过设置与要配置的引脚相关的每个寄存器位来控制每个引脚的模式。例如,端口B引脚7(PB7)的操作模式由PB_DR[7]、PB_DDR[7]、PBC_ALT1[7]和PB_ALT2[7]中包含的值设置。
GPIO控制寄存器位的组合允许对九种模式的每个端口引脚进行单独配置。在所有模式下,读取端口x数据寄存器会返回相应引脚上信号的采样状态或电平。表6显示了基于这四个寄存器位的每个端口信号的功能。RESET事件后,所有GPIO端口引脚都配置为标准数字输入,中断被禁用。
除了四个模式控制寄存器外,每个端口还有一个8位寄存器,用于清除边缘触发的中断。该寄存器是端口x备用寄存器0(Px_ALT0),其中x可以是代表四个GPIO端口的A、B、C或D。当aGPIO引脚配置为边缘触发中断时,向Px_ALT0寄存器的相应位写入1会清除中断。
GPIO模式1:输出
端口引脚配置为标准数字输出引脚。写入端口xData寄存器(Px_DR)的值在引脚上被驱动。
GPIO模式2:输入
端口引脚配置为标准数字输入引脚。输出为高阻抗。存储在端口x数据寄存器中的值不会产生任何影响。与所有模式一样,从端口x数据寄存器读取会返回引脚的值。GPIO模式2是重置后的默认操作模式。
GPIO模式3:漏极开路
端口引脚配置为开漏极输入/输出。GPIO引脚不具有对电源电压的内部上拉功能。要在OPEN-DRAIN模式下使用GPIO引脚,必须使用外部上拉电阻器将引脚连接到电源电压。将0写入端口x数据寄存器会在引脚处输出低电平。将1写入端口x数据寄存器会导致高阻抗输出。
GPIO模式4:开源
端口引脚配置为开源I/O。GPIO引脚不具有内部下拉到电源地的功能。要在OPEN-SURCE模式下使用GPIO引脚,必须将外部下拉电阻器连接到电源地。将1写入端口x数据寄存器,在引脚处输出高电平。将0写入端口x数据寄存器会导致高阻抗输出。
GPIO模式5:保留
此模式专为Zilog测试目的而保留,可产生高阻抗输出。
GPIO模式6:双边缘触发
端口引脚配置为双边缘触发中断模式。此引脚上的上升沿和下降沿都会导致向CPU发送中断请求。要从默认模式(模式2)中选择此模式,请遵守以下简短程序。
1.设置Px_DR=1
2.设置Px_ALT2=1
3.设置Px_ALT1=0
4.设置Px_DDR=0
将1写入与中断请求对应的端口x ALT0寄存器位位置会清除中断。
GPIO模式7:备用功能
端口引脚被配置为将控制权传递给分配给引脚的备用(辅助)功能。例如,PC5的备用模式功能是发往UART1的DSR1输入信号,而PB4的备用模式函数是定时器3的输入捕获。当GPIO模式7启用时,引脚输出数据和引脚高阻抗控制分别从备用功能的数据输出和高阻抗控制中获得。端口x数据寄存器中的值对操作没有影响。输入信号在传递给备用输入功能之前由系统时钟采样。
如果引脚的替代功能是输入,并且该引脚的替代函数模式未启用,则输入将被驱动为默认的非断言值。例如,在交替模式功能中,PC5将DSR1信号驱动到UART1。由于此信号为低电平真,当PC5不处于备用模式功能时,发送到UART1的DSR1信号被驱动为1。
GPIO模式8:电平敏感中断
端口引脚配置为电平敏感中断模式。Port x DataRegister中的值确定是低电平还是高电平导致中断请求。当引脚处的电平与端口x数据寄存器中存储的电平相同时,会生成中断请求。端口引脚值由系统时钟采样。输入引脚必须保持在所选的中断级别至少两个系统时钟周期,以启动中断。只要外部源保持这种状态,中断请求就会保持活动状态。例如,如果端口引脚被配置为低电平敏感中断,则当引脚在两个系统时钟内处于低电平时,中断请求将被断言,并持续有效,直到引脚变高。
为模式8配置引脚需要转换到模式9(边缘触发模式)。为避免在转换到模式9时出现不必要的中断,从默认模式(模式2)启动时,请遵循以下简短程序选择模式8:
1.禁用中断。
2.设置Px_DR=0(低电平中断)或1(高电平中断)。
3.设置Px_ALT2=1。
4.设置Px_ALT1=1(模式9)。
5.设置Px_DDR=0(模式8)。
6.设置Px_ALT0=1(清除可能的模式9中断)。
7.启用中断。
GPIO模式9:边缘触发中断
端口引脚配置为单边触发中断模式。端口xData寄存器中的值决定了是正沿还是负沿导致中断请求。将0写入端口x数据寄存器位会设置所选引脚,以生成下降沿的中断请求。向端口x数据寄存器位写入1会设置所选引脚,从而产生上升沿的中断请求。中断请求保持活动状态,直到1被写入端口x备用寄存器0的相应位。要从默认模式(模式2)中选择模式9,请遵守以下简短程序。
1.设置端口x数据寄存器。
2.设置Px_ALT2=1。
3.设置Px_ALT1=1。
4.设置Px_DDR=1。
GPIO中断
每个端口引脚都用作中断源。中断要么是电平触发的,要么是边缘触发的。
电平触发中断
当端口配置为电平触发中断(模式8)时,相应的端口引脚为漏极开路。当引脚处的电平与端口x数据寄存器中存储的电平相同时,会生成中断请求。端口引脚值由系统时钟采样。输入引脚必须保持在所选中断电平至少两个时钟周期,以启动中断。只要外部源保持这种状态,中断请求就会保持活动状态。
例如,如果PA3被编程为低电平中断,并且该引脚在两个时钟周期内被强制为低电平,则该端口引脚会生成一个中断请求信号并发送到CPU。中断请求信号保持有效,直到驱动PA3的外部设备将引脚强制设置为高电平。CPU必须能够响应中断,以便对中断请求信号采取行动。
边缘触发中断
当端口配置为用于边缘触发中断时,相应的端口引脚会等电位漏极。如果引脚从外部设备接收到正确的边缘,端口引脚会向CPU发出中断请求信号。
当配置为双边缘触发中断模式(GPIO模式6)时,引脚上的上升沿和下降沿都会向CPU发送中断请求。要从默认模式(模式2)中选择模式6,请遵守以下简短程序。
1.设置Px_DR=1。
2.设置Px_ALT2=1。
3.设置Px_ALT1=0。
4.设置Px_DDR=0。
当配置为单边触发中断模式(GPIO模式9)时,端口x数据寄存器中的值决定了是正边还是负边导致中断请求。端口x数据寄存器位中的0设置所选引脚,以生成下降沿的中断请求。端口x数据寄存器位中的1设置所选引脚,以生成上升沿的中断请求。要从默认模式(模式2)中选择模式9,请遵守以下简短程序。
1.设置Px_DR=1
2.设置Px_ALT2=1
3.设置Px_ALT=1。
4.设置Px_DDR=1。
通过向Px_ALT0寄存器的相应位写入1来清除边缘触发的中断。例如,如果PD4已设置为生成边缘触发中断,则通过向Px_ALT0[4]写入1来清除中断。
GPIO控制寄存器
每个GPIO端口都有四个寄存器来控制其操作,通过写入这四个寄存器的相应位来选择端口内每个位的操作模式。这四个寄存器是端口数据寄存器(Px_DR)、端口数据方向寄存器(Px-DDR)、端口备用寄存器1(Px_ALT1)和端口备用寄存器2(Px_ALT2)。除了这四个控制寄存器外,每个端口还有一个端口备用寄存器0(Px_ALT0),用于清除边缘触发的中断。
端口x数据寄存器
当端口引脚配置为其中一种输出模式时,写入Portx数据寄存器的数据在相应的引脚上被驱动。在所有模式下,从端口x数据寄存器读取总是返回相应引脚的采样电流值。当端口引脚配置用于边缘触发中断或电平敏感中断时,写入端口x数据寄存器位的值会选择中断边缘或中断电平。
中断控制器
eZ80F91设备上的中断控制器将来自内部外围设备、外部设备(通过内部端口I/O)和不可请求中断(NMI)引脚的中断请求信号路由到CPU。
可屏蔽中断
在eZ80F91设备上,所有可屏蔽的中断都使用CPU的矢量中断功能。与之前版本的eZ80 CPU不同,eZ80F91 ASSP设备中的I寄存器大小被修改为16位,以允许16MB范围的中断矢量放置。此外,IVECT寄存器的大小从8位增加到9位,以提供一个扩展的中断向量表,更容易与其他中断集成。
这些向量相隔4个字节(32位),尽管只需要3个字节(24位)。第四个字节是为了可编程性和扩展性而实现的。在40h开始中断向量允许使用RST向量容易地实现中断控制器向量。可屏蔽的中断源按优先级排列,向量40h是最高优先级的中断。在ADL模式下,完整的24位中断向量位于起始地址{I[15:1],IVECT[8:0]},其中I[15:0]是CPU的中断页地址寄存器。