外部两个中断不同时发生,用定时器1来对这两个中断发生的时间进行计时,不知为什么每次计时两个中断发生的时间竟然是一样的,请各位前辈给指点一下!<br />下面是我的程序:<br />#include <csl.h><br />#include <csl_emifa.h><br />#include <csl_irq.h><br />#include <csl_chip.h><br />#include <csl_timer.h><br />#include <csl_gpio.h><br />#include <stdio.h><br />#include "seeddm642.h"<br />#include "seeddm642_uart.h"<br /><br /><br />static TIMER_Handle hTimer1;<br /><br />static Uint32 TimerEventId;<br /><br />static unsigned int cnt = 0;<br />static unsigned int t1 = 0;<br />static unsigned int t2 = 0;<br />static unsigned int v = 0;<br />static Uint32 TimerControl = <br /><br /> <br /><br /> TIMER_CTL_RMK<br /><br /> (<br /><br /> TIMER_CTL_SPND_EMUSTOP,<br /><br /> TIMER_CTL_INVINP_NO, // TINP inverter control(INVINP)<br /><br /> TIMER_CTL_CLKSRC_CPUOVR8, // Timer input clock source (CLKSRC)<br /><br /> TIMER_CTL_CP_PULSE, // Clock/pulse mode(CP)<br /><br /> TIMER_CTL_HLD_YES, // Hold(HLD)<br /><br /> TIMER_CTL_GO_NO, // Go bit(GO)-<br /><br /> // resets & starts timer counter<br /><br /> TIMER_CTL_PWID_ONE, // Pulse width(PWID)-<br /><br /> // used only in pulse mode<br /><br /> TIMER_CTL_DATOUT_0, // Data output (DATOUT)<br /><br /> TIMER_CTL_INVOUT_NO, // TOUT inverter control (INVOUT) <br /><br /> TIMER_CTL_FUNC_GPIO // Function of TOUT pin(FUNC)<br /><br /> ); <br /><br /><br />extern far void vectors();<br />static unsigned char flag ;<br />/*此程序可将四个采集口的数据经过Video Port0送出*/<br />void main()<br />{<br /> TIMER_Config myTimConfig;<br /> CSL_init(); <br /> IRQ_setVecs(vectors); <br /> hTimer1 = TIMER_open(TIMER_DEV1, 0);<br /> TimerEventId = TIMER_getEventId(hTimer1);<br /> GPIO_RSET(GPEN,0x1E0);//<br /> GPIO_RSET(GPDIR,0x100);/*将GPIO做为输出*/<br /> GPIO_RSET(GPVAL,0x000);<br /> IRQ_globalDisable();<br /> IRQ_nmiDisable();<br /> IRQ_nmiEnable();<br /> IRQ_globalEnable();<br /> IRQ_map(TimerEventId, 15);<br /> IRQ_map(IRQ_EVT_EXTINT6,6);<br /> IRQ_map(IRQ_EVT_EXTINT7,7); <br /> IRQ_reset(TimerEventId);<br /> IRQ_reset(IRQ_EVT_EXTINT6);<br /> IRQ_reset(IRQ_EVT_EXTINT7);<br /> IRQ_RSET(EXTPOL,0x0E);//下降沿中断<br /> myTimConfig.cnt = 0x0;<br /> myTimConfig.ctl = TimerControl;<br /> myTimConfig.prd = 0x00124f8; //定时1ms<br /> IRQ_enable(TimerEventId); <br /> IRQ_enable(IRQ_EVT_EXTINT6);<br /> IRQ_enable(IRQ_EVT_EXTINT7);<br /> TIMER_config(hTimer1, &myTimConfig);<br /> <br /> TIMER_start(hTimer1); <br /> <br /> while(1); <br />}<br /><br />interrupt void ext_isr6()<br />{<br /> <br /> t1 = 0.5+cnt*75000*8/600000;//75000对应myTimConfig.prd = 0x00124f8<br /> printf("t1 : %d
",t1); <br />} <br /><br />interrupt void ext_isr7()<br />{<br /> t2 =0.5+ cnt*75000*8/600000;<br /> printf("t2 : %d
",t2);<br />}<br /><br />interrupt void CLK_cnt()<br />{<br /> cnt++;<br />}<br /><br />以下是仿真结果:<br />t1 : 68//中断不同时发生t1,t2应该是不一样的啊,<br />t2 : 68//不知仿真结果为什么是一样的?<br />t1 : 165<br />t2 : 165<br />t1 : 348<br />t2 : 348<br />t1 : 531<br />t2 : 531<br />t1 : 713<br />t2 : 713<br />t1 : 893<br />t2 : 893<br />t1 : 1076<br />t2 : 1076<br />t1 : 1219<br />t2 : 1219 |
|