求助:DM642定时器

[复制链接]
3651|5
 楼主| 展翅飞 发表于 2009-6-26 10:07 | 显示全部楼层 |阅读模式
DM642定时器能定时1us么,赋好初值后&nbsp;实际试验中发现定时器中断内没任何指认&nbsp;定时时间约为1.16us,内部指认愈多中断时间变的越长,我想问下这定时器中断是怎么工作的?<br />是中断结束后&nbsp;定时器计数才开始重新计数么?为何中断内指认越多,进入中断时间周期越长,?定时周期不变<br /><br />
 楼主| 展翅飞 发表于 2009-6-26 10:18 | 显示全部楼层

求助:DM642定时器

代码:<br /><br /><br />/*&nbsp;Header&nbsp;file&nbsp;created&nbsp;by&nbsp;DSP/BIOS&nbsp;tool&nbsp;*/<br />#include&nbsp;&quot;spicfgcfg.h&quot;<br /><br />#include&nbsp;&ltstd.h&gt<br /><br />#include&nbsp;&ltlog.h&gt<br />#include&nbsp;&ltsys.h&gt<br />#include&nbsp;&ltmem.h&gt<br />#include&nbsp;&ltsio.h&gt<br />#include&nbsp;&ltcsl.h&gt<br />#include&nbsp;&ltcsl_cache.h&gt<br />#include&nbsp;&ltcsl_irq.h&gt<br />#include&nbsp;&ltgio.h&gt<br /><br />#define&nbsp;DRR0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;char&nbsp;*)(0x018C0000))<br />#define&nbsp;DXR0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;char&nbsp;*)(0x018C0004))<br />#define&nbsp;DRR1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;char&nbsp;*)(0x01900000))<br />#define&nbsp;DXR1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;char&nbsp;*)(0x01900004))<br /><br />#define&nbsp;GPIO_EN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((unsigned&nbsp;int*)(0x01b00000)))<br />#define&nbsp;GPIO_DIR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((unsigned&nbsp;int*)(0x01b00004)))<br />#define&nbsp;GPIO_VAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((unsigned&nbsp;int*)(0x01b00008)))<br />#define&nbsp;GPIO_DH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((unsigned&nbsp;int*)(0x01b00010)))<br />#define&nbsp;GPIO_HM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((unsigned&nbsp;int*)(0x01b00014)))<br />#define&nbsp;GPIO_DL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((unsigned&nbsp;int*)(0x01b00018)))<br />#define&nbsp;GPIO_LM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((unsigned&nbsp;int*)(0x01b0001c)))<br />#define&nbsp;GPIO_GC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((unsigned&nbsp;int*)(0x01b00020)))<br />#define&nbsp;GPIO_POL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*((unsigned&nbsp;int*)(0x01b00024)))<br /><br />void&nbsp;InitGPIO();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化GPIO接口<br /><br />void&nbsp;SpiRcv0();<br />void&nbsp;SpiRcv1();<br />void&nbsp;MCBSP_init();<br />#define&nbsp;PRDValue0&nbsp;0x0000004b&nbsp;&nbsp;//&nbsp;1US&nbsp;<br />Uint32&nbsp;x[100],y[100];<br />Uint32&nbsp;i,j;<br />#pragma&nbsp;CODE_SECTION(timer1,&quot;.jpgtbls&nbsp;&quot;);<br />#pragma&nbsp;CODE_SECTION(writed,&quot;.jpgtbls&nbsp;&quot;);<br />#pragma&nbsp;CODE_SECTION(SpiRcv0,&quot;.jpgtbls&nbsp;&quot;);<br />#pragma&nbsp;CODE_SECTION(SpiRcv1,&quot;.jpgtbls&nbsp;&quot;);//定义到内部ISRAM<br /><br />void&nbsp;writed();<br />Uint32&nbsp;KK=0,l=0;<br />Uint32&nbsp;x[100],y[100];<br />Uint32&nbsp;i,j;<br />TIMER_Handle&nbsp;hTimer1;<br />Uint32&nbsp;TimerEventid;<br />//定时器配置系数结构体<br />TIMER_Config&nbsp;MyConfig1=<br />{<br />&nbsp;0x00000305,//CTL<br />&nbsp;PRDValue0,//PRD<br />&nbsp;0x00000000,//CNT<br />};<br />void&nbsp;writed()<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_VAL&nbsp;|=&nbsp;0x00002002;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_VAL&nbsp;&=&nbsp;0xffffdffd;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_VAL&nbsp;|=&nbsp;0x00002002;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_VAL&nbsp;&=&nbsp;0xffffdffd;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_VAL&nbsp;|=&nbsp;0x00002002;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_VAL&nbsp;&=&nbsp;0xffffdffd;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_VAL&nbsp;|=&nbsp;0x00002002;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_VAL&nbsp;&=&nbsp;0xffffdffd;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_VAL&nbsp;|=&nbsp;0x00002002;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_VAL&nbsp;&=&nbsp;0xffffdffd;//加上这几句后&nbsp;通过示波器观察&nbsp;发现进入此函数时间间隔变成2.2us&nbsp;&nbsp;但定时时间初值为1us<br /><br />}<br />//定时器1硬件中断&nbsp;定时1us检测高速AD值&nbsp;<br />&nbsp;void&nbsp;timer1(void)<br />{<br /><br /><br />&nbsp;&nbsp;<br />&nbsp;writed();//屏蔽这句通过仿真进入时间为1.16us<br /><br />//SWI_post(&TIME_swi);<br />}<br />/*----------------------------------------------------------------------------*/<br />void&nbsp;main()&nbsp;{<br /><br />&nbsp;&nbsp;volatile&nbsp;Uint32&nbsp;y;<br />&nbsp;&nbsp;int&nbsp;success&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;CSL_init();<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;IRQ_globalEnable();&nbsp;//IRQ&nbsp;global&nbsp;enable<br />&nbsp;&nbsp;IRQ_nmiEnable();&nbsp;//NMIE<br />&nbsp;&nbsp;IRQ_enable(IRQ_EVT_RINT0);&nbsp;//McBSP0&nbsp;interrupt&nbsp;enable<br />&nbsp;&nbsp;IRQ_enable(IRQ_EVT_RINT1);&nbsp;//McBSP1&nbsp;interrupt&nbsp;enable<br /><br />&nbsp;&nbsp;MCBSP_init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitGPIO();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;//打开定时器0及GPIO口<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hTimer1&nbsp;=&nbsp;TIMER_open(TIMER_DEV1,&nbsp;0);<br /><br />&nbsp;<br />&nbsp;//获取定时器0的事件号<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TimerEventid&nbsp;=&nbsp;TIMER_getEventId(hTimer1);<br />&nbsp;<br />&nbsp;//中断向量表的初始化<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IRQ_globalEnable();<br />&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;IRQ_nmiEnable();&nbsp;//NMIE<br />&nbsp;&nbsp;&nbsp;IRQ_enable(TimerEventid);<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQ_enable(IRQ_EVT_RINT0);&nbsp;//McBSP0&nbsp;interrupt&nbsp;enable<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQ_enable(IRQ_EVT_RINT1);&nbsp;//McBSP1&nbsp;interrupt&nbsp;enable<br />&nbsp;//对定时器0及GPIO口进行配置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TIMER_config(hTimer1,&nbsp;&MyConfig1);<br /><br />&nbsp;<br />&nbsp;//开始运行<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TIMER_start(hTimer1);<br />&nbsp;&nbsp;<br /><br />}<br /><br />//AD0&nbsp;interrupt<br />void&nbsp;SpiRcv0()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;x[i++]&nbsp;=&nbsp;DRR0;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(i&gt99)&nbsp;i=0;<br />}<br /><br />//AD1&nbsp;interrupt<br />void&nbsp;SpiRcv1()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;y[j++]&nbsp;=&nbsp;DRR1;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(j&gt99)&nbsp;j=0;<br />}<br /><br />void&nbsp;MCBSP_init()<br />{<br />&nbsp;&nbsp;MCBSP_enableSrgr(hMcbsp0);<br />&nbsp;&nbsp;MCBSP_enableRcv(hMcbsp0);<br />&nbsp;&nbsp;MCBSP_enableXmt(hMcbsp0);<br />&nbsp;&nbsp;MCBSP_enableFsync(hMcbsp0);&nbsp;&nbsp;<br />&nbsp;&nbsp;MCBSP_start(hMcbsp0,MCBSP_RCV_START&nbsp;|&nbsp;MCBSP_XMIT_START&nbsp;|&nbsp;MCBSP_SRGR_START|&nbsp;MCBSP_SRGR_FRAMESYNC,&nbsp;0);<br /><br />&nbsp;&nbsp;MCBSP_enableSrgr(hMcbsp1);<br />&nbsp;&nbsp;MCBSP_enableRcv(hMcbsp1);<br />&nbsp;&nbsp;MCBSP_enableXmt(hMcbsp1);<br />&nbsp;&nbsp;MCBSP_enableFsync(hMcbsp1);&nbsp;&nbsp;<br />&nbsp;&nbsp;MCBSP_start(hMcbsp1,MCBSP_RCV_START&nbsp;|&nbsp;MCBSP_XMIT_START&nbsp;|&nbsp;MCBSP_SRGR_START|&nbsp;MCBSP_SRGR_FRAMESYNC,&nbsp;0);<br />}<br /><br />void&nbsp;InitGPIO()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;GPIO&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIO_EN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x0000ffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIO_DIR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x00002222;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />/*----------------------------------------------------------------------------*/<br /><br />/******************************************************************************<br />*&nbsp;End&nbsp;of&nbsp;main.c<br />******************************************************************************/<br /><br /><br />
fanyinfu 发表于 2009-7-2 18:38 | 显示全部楼层

sfddfsfds

dfsdffdsf
yxwsz 发表于 2009-7-3 23:25 | 显示全部楼层

RE

真怀疑你的水平啊;<br />需要1us的定时,需要硬件去实现;&nbsp;600mhz的dm642外设时钟是150Mhz,也就是每执行600条指令就需要中断一次,有你这样设计的吗?
hebu007 发表于 2009-7-9 14:54 | 显示全部楼层

...

1US&nbsp;好苛刻呀&nbsp;
 楼主| 展翅飞 发表于 2009-7-10 09:32 | 显示全部楼层

回4楼

是的&nbsp;定时1us的设计是比较不行<br />关键是我们要求对AD的采样率为1M&nbsp;&nbsp;&nbsp;节约成本DSP直接和AD芯片连接&nbsp;采用SPI总线连接&nbsp;并对AD值进行判断&nbsp;&nbsp;大于阈值时&nbsp;侧把之后的10ms的数据记录下来&nbsp;只有定时1us了<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部