首页- 新闻中心- 正文

DSPIC30F系列芯片内部指令停止技术

来源:芯片解密-龙芯世纪   时间:2010-04-13   阅读:1231

  一、指令停止周期
  指令停止本质上是附加在指令读阶段前的一个指令周期的等待时间,以便让前面的写操作先完成再发生下一个读操作。 为了达到中断延迟的目的,应该注意停止周期与检测到它的指令后的那个指令是相关的(即停止周期总是在指令执行周期之前)。
  如果检测到了RAW 数据相依性, dsPIC30F 将开始指令停止周期。 在指令停止期间,会发生下列事件:
  1. 正在进行的(上一条指令的)写操作可以正常完成。
  2. 在指令停止周期结束前不会寻址数据空间。
  3. 在指令停止周期结束前禁止PC 递增。
  4. 指令停止周期结束前禁止再次取指。
  二、指令停止周期和中断
  当会造成指令停止的两个相邻指令与中断事件同时发生时,可能会产生以下两个结果之一:
  1. 中断可能会在第一个指令执行时发生。 这种情况下,允许第一条指令完成,而第二个指令则将在ISR 完成后执行。 这样,因为异常过程为第一条指令提供了完成写阶段的时间,停止周期将在第二条指令中被消除。
  2. 中断可能会在第二条指令执行时发生。 在这种情况下,允许第二条指令和附加的停止周期在ISR 前执行。 这样,与第二条指令关联的停止周期会正常执行。 但是,停止周期实际上会被嵌入到异常过程时序内。 如果一个正常的双周期指令被中断,异常过程将会继续。
  三、指令停止周期和流程更改指令
  CALL和RCALL指令使用W15写入堆栈,并且如果下一条指令读取的源使用W15,可能会因此在下一条指令前强制执行指令停止。RETFIE和RETURN指令永远不能在下一条指令前强制执行指令停止,因为这些指令都只能执行读操作。 但是,用户应该注意RETLW 指令能强制执行停止,因为它会在最后一个周期写入W 寄存器。因为GOTO 和转移指令不执行写操作,所以永远不能强制执行指令停止。
  四、指令停止以及DO 和REPEAT 循环
  除了增加指令停止周期外, RAW 数据相依性不会影响DO 或REPEAT 循环的工作。REPEAT循环中预取的指令在循环完成或发生异常前不会改变。 虽然寄存器相关性检查会跨指令边界进行,在REPEAT 循环中dsPIC30F 实际上会比较同一个指令的源和目标地址。DO 循环的最后一条指令会预取循环起始地址处的指令或下一条指令(循环外)。 指令停止的决定是由循环的最后一条指令和预取指令的内容做出的。
  五、指令停止和程序空间可视性(PSV)
  当通过使能PSV (CORCON<2>)位将程序空间(PS)映射到数据空间,并且X 空间EA 处于可见程序空间范围时,读或写周期会被重新定向到程序空间中的地址。 从程序空间访问数据最多需要花费3 个指令周期。PSV地址空间的指令操作与任何其他指令一样,会受到RAW数据相关性和后续指令停止的影响。