ST意法半导体
直播中

张瑞娟

7年用户 181经验值
私信 关注
[问答]

nop指令最多需要多长时间恒指(16MHz)?

nop指令最多需要多长时间恒指(16MHz)?

以上来自于谷歌翻译


以下为原文



How long does a nop instruction take at max. HSI (16MHz) ?

回帖(5)

王明

2019-4-1 10:42:58
螺栓螺母,
 
 空ISR不需要像nop那样多的时钟周期。
 STM8 CPU编程手册显示了服务ISR时会发生什么:
 在获取ISR中断向量之前,STM8内核将PCL,PCH,PCE,Y,X,A和CC寄存器压入堆栈。这需要9个时钟周期。
 如果您的ISR为空,即它仅包含在IRET中,则需要另外9个时钟周期来恢复这些寄存器。
 
 EtaPhi

以上来自于谷歌翻译


以下为原文





Boltnut,

an empty ISR doesn't takes as much clock cycles as a nop.
The STM8 CPU Programming Manual shows what happens when an ISR is serviced:
the STM8 core pushes PCL, PCH, PCE, Y, X, A and CC registers onto the stack before fetching the ISR interrupt vector. This takes 9 clock cycles.
If your ISR is empty, i.e. it consists only in an IRET, another 9 clock cycles are needed to restore those registers.

EtaPhi
举报

张瑞娟

2019-4-1 11:02:21
EtaPhi,
 
 
 你的意思是NOP指令需要1 / 16MHz = 62.5 ns
 如果fMASTER = 16MHz?

以上来自于谷歌翻译


以下为原文





EtaPhi,


Do you mean that a NOP instruction takes 1/16MHz = 62.5 ns  
if fMASTER = 16MHz ?
举报

王明

2019-4-1 11:17:41
螺栓螺母,
 
 STM8核心有一个三级管道。
 如果指令流不包含跳转指令,则每个NOP指令需要一个时钟周期,即1 / 16MHz = 62.5ns。
 您的结论是正确的,但前提是指令管道已满。
 
 问候

以上来自于谷歌翻译


以下为原文





Boltnut,

the STM8 core has got a three stage pipeline.
If an instruction stream contains no jump instructions, each NOP instruction takes one clock cycle, i.e. 1/16MHz = 62.5 ns.
Your conclusion is true, but only if the instruction pipeline is full.

Regards
举报

王明

2019-4-1 11:37:39
你好Boltnut。
 
 如果您的意思是''较小的延迟粒度'',您可以使用:
 
而( - bTime)
 ;
 
 你的编译器应该翻译成:
 
 ld a,(OFST + 1,sp)
 L13:
 dec a
 jrne L13
 
 此代码应执行3 x bTime + 1个时钟周期(如果不允许中断)
 有一种简单的方法可以测量延迟程序需要多长时间:添加一条指令,在延迟程序之前和之后切换输出引脚。
 然后使用示波器查看和测量波形。
 
 问候
 
 EtaPhi

以上来自于谷歌翻译


以下为原文





Hello Boltnut.

If you mean ''smaller delay granularity'' in your request, you can use:

while ( --bTime )
    ;
  
which your compiler should translate in:

      ld  a,(OFST+1,sp)
L13:
       dec a
       jrne L13
  
This code should take 3 x bTime + 1 clock cycles to execute (if interrupts aren't allowed)
There is a simple way to measure how long a delay routine takes: add an instruction which toggles an output pin before and after the delay routine.
Then use an oscilloscope to see and measure the waveform.

Regards

EtaPhi
举报

更多回帖

发帖
×
20
完善资料,
赚取积分