丁丁

coldfireV2 学习笔记之一

0
阅读(3284)

Coldfire V2 core

  • Coldfire是m68k的改进型,1994年开始
  • Coldfire内核基于变长精简指令集(RISC)体系结构,整合和CISC和RISC的优点
  • 变长RISC的优点:更高的编码效率与更低的内存占用率
  • Coldfire V2具有两个独立的流水线,两者之间由指令缓存器去耦
  • 取指令流水线(IFP)负责预取指令,是两级的流水线
  • 操作数执行流水线(OEP)负责执行指令,也是两级流水线
  • 指令缓存器(instruction buffer)是一个FIFO,起联系上述两个流水线的作用
  • Up to 159Dhrystone2.1 MIPS@166MHZ

Coldfire V2流水线

  • 指令地址生成器:计算下一个预取指令地址,并送到地址总线准备访问指令存储器
  • 取指令:通过数据总线将存储器中的预取指指令写入本级FIFO指令缓存器的空闲区。
  • 指令缓存器:是两级FIFO,存放预取指令,并将其发送给OEP
  • 译码级:对指令进行译码,并取操作数
  • 地址生成执行级:执行实际指令的操作。当执行执行完成后,译码级将从指令缓存器中取下条指令,如果指令缓存器空,则直接从IFP取下条指令

Coldfire V2执行模式

  • 两个模式:用户模式和管理员模式(内核模式)
  • 用户模式:提供大多数应用程序的执行环境,但某些特权指令和资源不能访问
  • 内核模式:为操作系统等系统软件提供执行环境,可以执行和访问所有的指令和资源

Coldfire V2的寄存器

用户模式

  • 16个32bits通用寄存器(D0~D7,A0~A7)
  • 1个32bits程序计数器(PC)
  • 1个8bits条件码寄存器(CCR)
  • 4个48bits的EMAC寄存器(不是所有的型号都有)

内核模式

  • 所有用户模式的寄存器(除去CCR)
  • 16bits的状态寄存器(SR),其低8bits就是CCR
  • 32bits的管理员堆栈寄存器(SSP)
  • 32bits的向量基地址寄存器(VBR)

 

  • D0~D7数据寄存器:存放数据或用作index寄存器,可以1bits,8bits,16bits,32bits操作
  • A0~A6地址寄存器:用于对存储器选址,也可用作index寄存器,software stack寄存器,base address寄存器;可以16bits,32bits操作
  • A7和OTHER_A7:通常用作堆栈寄存器(SP).coldfire实现了两个SP,一个是用户模式USP,一个是内核模式SSP.A7代表当前模式下的SP,OTHER_A7则代表另一个模式下的SP
  • CCR是SR的低8位,可以在用户模式下访问;而SR高8位只能在内核模式下访问
  • PC寄存器存放当前正在执行的指令地址,当一条指令执行完时,PC自动增加,指向下条指令
  • 向量基地址寄存器(VBR):存储coldfire异常向量表的基地址,复位时VBR=0指向0x0处的异常向量表

Coldfire的寻址模式

  • 寄存器直接寻址模式
  • 地址寄存器间接寻址
  • 后增地址寄存器间接寻址
  • 预减地址寄存器间接寻址
  • 16位偏移量地址寄存器间接寻址
  • 变址和8位偏移量地址寄存器间接寻址
  • 16位偏移量的程序计数器间接寻址
  • 变址和8位偏移量的程序计数器间接寻址
  • 绝对短数据寻址模式
  • 绝对长数据寻址模式
  • 立即数寻址模式

Coldfire异常处理

  • 系统异常包括系统错误,设备中断请求和陷阱指令引起的异常
  • Coldfire处理异常的流程是先挂起正在执行的程序,将机器状态信息保存到系统堆栈,然后跳转到预定义的异常处理例程入口,执行异常处理例程。一旦完成,处理器将恢复机器状态,重新执行被打断的程序

Coldfire中断架构

  • 与M68K相同,处理器支持7level中断,其中level7优先级最高;发生中断时,中断控制器会把该中断的level发送给coldfire
  • Coldfire核收到中断level后,会与SR寄存器的10:8位interrupt mask对比,如果大于interrupt mask,则响应该中断
  • 一旦进入中断响应处理,处理器自动切换到内核模式,禁止Trace mode,同时设置SR的interrupt mask等于该中断的level,然后获取中断向量号,并在内存中创建一个异常堆栈帧,保存PC和SR,接着跳转到中断服务程序
  • 中断服务程序的第一个指令通常是重新装载SR,这样可以实现对中断嵌套的任意控制
  • Isr执行完成后,处理器会恢复SR和PC,继续被打断的程序流程

Coldfire中断控制器

  • Coldfire处理器集成了1个至3个中断控制器,MCF5223X和MCF5225x集成了2个控制器
  • 每个中断控制器最多管理63个中断源,每一个中断源分配一个唯一的中断向量号
  • Coldfire中断控制器支持两级优先级控制:interrupt level和interrupt priority
  • 中断控制器支持7级中断嵌套,高优先级中断可以中断低优先级中断
  • 每个中断控制器支持7级中断level,1级优先级最低,7级最高;可以将多个中断源分配到同一级level上
  • 如果处于同一level的多个中断同时发生,则通过各中断的interrupt priority来区分优先级

中断向量号的确定

  • 在coldfire MCU的参考手册上,每个中断控制器用中断源号标识各个中断
  • 但coldfire处理器本身在响应中断时采用的是中断向量号,具体编写isr时也是根据中断向量号来确定isr在异常向量表中的位置的
  • 转换公式:

   INTC0:中断向量号=64+中断源号

   INTC1:中断向量号=128+中断源号

中断控制器寄存器

  • Interrupt pending Register(IPRHx/IPRLx)
  • Interrupt Mask Register(IMRHx/IMRLx)
  • Interrupt Force Register(INTFRCHx/INTFRCLx)
  • Interrupt Request Level register(IRLRx)
  • Interrupt Acknowledge Level and Priority Register(IACKLPRx)
  • Interrupt Control Register(ICRxn)
  • Software Interrupt Acknowledge(SWIACKx)
  • Level m Interrupt Acknowledge Register(LmIACKx)

    x代表第几个中断控制器(x=0,1,2)

    n代表该中断控制器管理的中断源号(n=1~63)

    m代表Interrupt Level的数值(m=1~7)