我现在使用的是DM642,ext_int5,ext_int6分别用作两个外部中断信号<br />相信大家也遇到过这样的问题,比如一个车轮压在前后两个磁钢上,这两个磁钢分别产生中断信号送给CPU。这里有两个问题请教一下各位高手:<br />一、下面是我的一个简单程序用来不断计算两次中断之间的时间差值, 我觉得定时器既然在不断计数,那么我得到的差值 t=t2-t1也应该不断地输出来呀,但是无论我用LOG_printf还是watch windows却只能得到一个差值t,后面的差值就观察不到了,请各位给指点一下应该怎么观察t值呢?<br />二、还有一个就是希望大家帮看看我下面这个程序有问题吗?定时器计数是这样记吗?<br />#include <std.h><br />#include <csl.h><br />#include <log.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 "seeddm642.h"<br />#include "seeddm642_uart.h"<br /><br />/*SEEDDM642的emifa的设置结构*/<br />EMIFA_Config Seeddm642ConfigA ={<br /> 0x00052078,/*gblctl EMIFA(B)global control register value */<br /> /*将CLK6、4、1使能;将MRMODE置1;使能EK2EN,EK2RATE*/<br /> 0xffffffd3,/*cectl0 CE0 space control register value*/<br /> /*将CE0空间设为SDRAM*/<br /> 0x73a28e01,/*cectl1 CE1 space control register value*/<br /> /*Read hold: 1 clock;<br /> MTYPE : 0000,选择8位的异步接口<br /> Read strobe :001110;14个clock宽度<br /> TA:2 clock; Read setup 2 clock;<br /> Write hold :2 clock; Write strobe: 14 clock<br /> Write setup :7 clock<br /> -- ---------------<br /> 14c /1c<br /> ----------------/ */<br /> 0x22a28a22, /*cectl2 CE2 space control register value*/<br /> 0x22a28a42, /*cectl3 CE3 space control register value*/<br /> 0x57115000, /*sdctl SDRAM control register value*/<br /> 0x0000081b, /*sdtim SDRAM timing register value*/<br /> 0x001faf4d, /*sdext SDRAM extension register value*/<br /> 0x00000002, /*cesec0 CE0 space secondary control register value*/<br /> 0x00000002, /*cesec1 CE1 space secondary control register value*/<br /> 0x00000002, /*cesec2 CE2 space secondary control register value*/<br /> 0x00000073 /*cesec3 CE3 space secondary control register value*/ <br />};<br /><br />SEEDDM642_UART_Config UartConfig ={<br /> 0x01,/*寄存器IER*/<br /> 0x5f,/*寄存器FCR*/<br /> 0x03,/*寄存器LCR*/<br /> 0x08,/*寄存器MCR*/<br />};<br />extern far LOG_Obj trace;<br />static unsigned int t1 = 0;<br />static unsigned int t2 = 0;<br />static unsigned int t = 0;<br />static int cnt = 0;<br />static TIMER_Handle hTimer1;<br />static Uint32 TimerEventId;<br /><br />Uint8 IOreadback;<br />Uint16 buffer;<br />SEEDDM642_UART_Handle SEEDuartHandleA;<br />SEEDDM642_UART_Handle SEEDuartHandleB;<br /><br />void ExtInt_init();//外部中断初始化<br /><br />/*此程序可将四个采集口的数据经过Video Port0送出*/<br />void main()<br />{<br />/* perform all initializations */<br />/*-------------------------------------------------------*/<br /> /*Initialise CSL,初始化CSL库*/<br /> TIMER_Config myTimConfig;<br /> CSL_init(); <br /> GPIO_RSET(GPEN,0x1E0);//<br /> GPIO_RSET(GPDIR,0x100);<br /> GPIO_RSET(GPVAL,0x000);<br />/*----------------------------------------------------------*/<br /> /*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间<br /> 注,DM642支持的是EMIFA,而非EMIF*/<br /> EMIFA_config(&Seeddm642ConfigA);<br />/*----------------------------------------------------------*/<br /> hTimer1 = TIMER_open(TIMER_DEV1, 0);<br /><br /> TimerEventId = TIMER_getEventId(hTimer1);<br /> IRQ_globalDisable();<br /> IRQ_reset(IRQ_EVT_EXTINT5);<br /> IRQ_nmiDisable();<br /> IRQ_nmiEnable();<br /> IRQ_map(TimerEventId, 15);<br /> IRQ_reset(TimerEventId);<br /> myTimConfig.cnt = 0x0;<br /> <br /> myTimConfig.ctl = 0x305;<br /><br /> myTimConfig.prd = 0x00124f8;<br /> TIMER_config(hTimer1, &myTimConfig);<br /> IRQ_enable(TimerEventId);<br /><br /><br /> IRQ_enable(IRQ_EVT_EXTINT5);<br /> IRQ_globalEnable(); <br /> ExtInt_init();<br /> TIMER_start(hTimer1);<br /> <br />/*测试串口A*/<br /> /* Open UART */<br /> SEEDuartHandleA = SEEDDM642_UART_open(SEEDDM642_UARTA, <br /> SEEDDM642_UART_BAUD9600, <br /> &UartConfig);<br /> /*Open UARTB*/<br /> SEEDuartHandleB = SEEDDM642_UART_open(SEEDDM642_UARTB, <br /> SEEDDM642_UART_BAUD9600, <br /> &UartConfig);<br /> <br /> <br />}<br /><br />void ExtInt_init()<br />{<br /> IRQ_nmiEnable(); <br /> IRQ_globalEnable();<br /> IRQ_map(IRQ_EVT_EXTINT6,6);<br /> IRQ_map(IRQ_EVT_EXTINT7,7); <br /> IRQ_reset(IRQ_EVT_EXTINT6);<br /> IRQ_reset(IRQ_EVT_EXTINT7);<br /> IRQ_RSET(EXTPOL,0x0E);//下降沿中断<br /> IRQ_enable(IRQ_EVT_EXTINT6);<br /> IRQ_enable(IRQ_EVT_EXTINT7);<br />}<br /><br />void Extint6_isr()<br />{<br /> t1 = cnt;<br />}<br /><br />void Extint7_isr()<br />{<br /> t2 = cnt;//75000对应myTimConfig.prd = 0x00124f8<br /><br /> t = t2 -t1 ;<br /> LOG_printf(&trace,"t VAL is %d
", t);<br />}<br /><br />void CLK_cnt()<br />{<br /> cnt++;<br />} |
|