This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28335 TIMER0中断进不去 IFR=0

    28335 TIMER0中断进不去 
    配置应该没错 ,同样的程序, 以前是偶尔进不去  现在是经常进不去  
    程序里相应的DINT之后都EINT了,每次都能读到 CpuTimer0Regs.TCR.bit.TIF = 1;(即发生timer0定时器外设级中断);PIE的相应位的使能和标志位都是1;CPU的IER也是1,但是IFR却是0,IFR应该是1才对吧。而且ram调试,手动让IFR=1之后,就能产生TIMER0中断了。
   同样的程序偶尔能进,偶尔又不能进TIMER0,而且ram调试进去中断之后,不断电,LOAD第二次,就进不去中断了,和解?

  • 中断退出时有下面语句吗,如果没有请加上。如果有,请将timer0和PIE初始化代码贴上来。

    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

  • 有的
    cpu0初始化:
    void InitCpuTimers(void)
    {
    // CPU Timer 0
    // Initialize address pointers to respective timer registers:
    CpuTimer0.RegsAddr = &CpuTimer0Regs;
    // Initialize timer period to maximum:
    CpuTimer0Regs.PRD.all = 15000;
    // Initialize pre-scale counter to divide by 1 (SYSCLKOUT):
    CpuTimer0Regs.TPR.all = 0;
    CpuTimer0Regs.TPRH.all = 0;
    // Make sure timer is stopped:
    CpuTimer0Regs.TCR.bit.TSS = 1;
    CpuTimer0Regs.TCR.bit.TIF = 0;
    CpuTimer0Regs.TCR.bit.TIE = 1;
    CpuTimer0Regs.TCR.bit.FREE= 0;
    CpuTimer0Regs.TCR.bit.SOFT= 0;
    // Reload all counter register with period value:
    CpuTimer0Regs.TCR.bit.TRB = 1;
    // Reset interrupt counters:
    CpuTimer0.InterruptCount = 0;
    }
    主程序中main()中
    PieVectTable.TINT0 = &Timer0_isr;
    PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //cputime0
    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
    IER = 0x0000;
    IFR = 0x0000;
    IER |= M_INT1 | M_INT3 | M_INT4 | M_INT5 | M_INT9 | M_INT10 | M_INT11;
    EINT;
    ERTM;


    TIMER0中断程序中有PieCtrlRegs.PIEACK.bit.ACK1 = 1;

  • 建议楼主用这条语句是一下:PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

    是否有开其它中断?

    有的话,屏蔽其它中断试一下。