我现在使用DM642开发板做实验<br />在bios中单独的网络通信程序,以及单独的定时器程序都运行正常,但是如果把这两个程序合在一块,定时器运行一瞬间就不运行了,不知怎么回事?<br />即前面我用LOG_printf来检验定时器的计数值cnt发现不行后,现在<br />我又用串口来检验定时器计数的cnt值(串口芯片为TL16C752B),发现电脑上的串口调试助手只能接收到<br />前面三个cnt的值,后面的就收不到了,与LOG_printf的情况一样,还请各位高手给指点一下!<br />#include <std.h><br />#include <log.h><br />#include <tsk.h> <br />#include <sem.h> <br />#include <gio.h><br />#include <csl.h><br />#include <csl_emifa.h><br />#include <csl_timer.h><br />#include <csl_irq.h><br /><br />#include "appData.h"<br />#include "scom.h"<br />#include "seeddm642.h"<br />#include "Tcpip_loopbackcfg.h" <br />static TIMER_Handle hTimer1;<br /><br />static Uint32 TimerEventId;<br /><br />static int cnt = 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 />SEEDDM642_UART_Config UartConfig ={<br /> 0x01,/*寄存器IER*/<br /> 0x5f,/*寄存器FCR*/<br /> 0x03,/*寄存器LCR*/<br /> 0x08,/*寄存器MCR*/<br />};<br /><br />main()<br />{<br /> TIMER_Config myTimConfig;<br /> CSL_init();<br />/*.................网络通信部分.......................*/<br /> CACHE_enableCaching(CACHE_EMIFA_CE00);<br /> CACHE_enableCaching(CACHE_EMIFA_CE01);<br /> DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D);<br /> <br /> SCOM_init();<br /> <br /> CACHE_setL2Queue(0x3, 0x7);<br /> CACHE_setL2Queue(0x1, 0x7);<br /> CACHE_setPriL2Req(CACHE_L2PRIHIGH);<br /> // create all SCOM and message objects <br /> SCOM_create("NETOK", NULL); <br /> /*..............................定时器部分............*/<br /><br /> hTimer1 = TIMER_open(TIMER_DEV1, 0);<br /> TimerEventId = TIMER_getEventId(hTimer1);<br /> IRQ_globalDisable();<br /> IRQ_nmiDisable();<br /> IRQ_globalEnable();<br /> IRQ_nmiEnable();<br /> IRQ_map(TimerEventId, 15);<br /> IRQ_reset(TimerEventId);<br /> IRQ_reset(IRQ_EVT_EXTINT5);<br /> <br /> <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 /> myTimConfig.cnt = 0x0;<br /> myTimConfig.ctl = TimerControl;<br /> myTimConfig.prd = 0x00124f8;//1ms定时,即每1ms,cnt计数增1<br /> TIMER_config(hTimer1, &myTimConfig);<br /> IRQ_enable(TimerEventId);<br /> IRQ_enable(IRQ_EVT_EXTINT5);<br /> TIMER_start(hTimer1);<br />}<br />void CLK_cnt()<br />{<br /> cnt++;<br /> SEEDDM642_UART_putChar(0,cnt);//在串口调试助手中只能接收到前三个cnt的值,不知为什么?<br />}<br /><br />void Uart_isr(void)<br />{<br /> <br /> Uint16 Data_Temp; //Int16 status;<br /> Data_Temp = SEEDDM642_UART_rget(SEEDuartHandleA,0);<br /> SEEDDM642_UART_putChar(0, Data_Temp);<br /> <br />}<br /> |
|