从定时器中断开始到进入中断、之间竟消耗了17us

2020-02-09 11:24发布

定时器初始化
void init_TMR0()
{
    T0CS=0; //Fosc/4
    TMR0=0;

    GIE=1;
    T0IE=1;
    T0IF=0;
}
中断
void interrupt ISR()
{
    if(T0IF)
    {
        PWM0=!PWM0;
        T0IF=0;
    }
}
主函数里面什么都没做,while(1) ;

在仿真的时候发现、从定时器中断开始到进入中断、之间竟消耗了17us:

(原文件名:进入中断.jpg)


(原文件名:进入中断时TMR0已经跑了17us.jpg)

在这17us的时间内、程序都去做什么了呢?

使用TMR1时、情况也一样
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
piccode
1楼-- · 2020-02-09 12:25
MCU做现场保护了
cc3000c
2楼-- · 2020-02-09 17:12
回复【1楼】piccode
-----------------------------------------------------------------------

怎样在仿真里面看到现场保护的过程呢、现场保护也不需要15us吧?
headwolf_83
3楼-- · 2020-02-09 20:53
 精彩回答 2  元偷偷看……
headwolf_83
4楼-- · 2020-02-10 01:23
如果程序中有进行一些数学_运算,中断中也用了,进中断的时候PICC肯定要进行对一些数学库变量的保护,这个就很耗体了。PICC18的就是如此。
millwood0
5楼-- · 2020-02-10 05:18
the interrupt latency is about 3 - 4 tcy.

at a minimum, you will save the W and STATUS registers (4 tcy minimum), and your C compiler likely will save more (8 - 10 instructions are normal).

plus a jump into the interrupt (1 - 2 Tcy).

so that brings you to about 14 - 16 tcy.
slash1986
6楼-- · 2020-02-10 10:25
回复【5楼】millwood0
-----------------------------------------------------------------------

millwood0是外国友人吗

一周热门 更多>