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第二次,就进不去中断了,和解?
Johnson Chen1:
中断退出时有下面语句吗,如果没有请加上。如果有,请将timer0和PIE初始化代码贴上来。
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
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第二次,就进不去中断了,和解?
miao young:
回复 Johnson Chen1:
有的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; //cputime0PieCtrlRegs.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;
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第二次,就进不去中断了,和解?
Johnson Chen1:
回复 miao young:
建议楼主用这条语句是一下:PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
是否有开其它中断?
有的话,屏蔽其它中断试一下。