[ZLG-ARM] 用捕获中断功能测试脉冲宽度的问题

[复制链接]
 楼主| mountain25 发表于 2007-1-1 17:39 | 显示全部楼层 |阅读模式
&nbsp;PINSEL1&nbsp;=&nbsp;0x08000000;&nbsp;&nbsp;//设置P0.29&nbsp;为捕获功能&nbsp;<br />&nbsp;T0PR=0;<br />&nbsp;T0CCR=0x06;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置CAP0.0下降沿捕获&nbsp;并启用捕获中断<br />&nbsp;T0TC=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;T0TCR=0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动定时器0<br />请教下大家:&nbsp;想通过捕获中断来测试&nbsp;脉冲周期(两次中断得到相邻两次下降沿对应的TC值,然后求两者之差),请问如何进入捕获中断,程序该如何编写&nbsp;,谢谢!!
 楼主| mountain25 发表于 2007-1-2 10:27 | 显示全部楼层

捕捉功能求教

#include&nbsp;&nbsp;&quot;config.h&quot;<br />fp32&nbsp;&nbsp;t;<br />uint32&nbsp;&nbsp;b[2];<br />uint8&nbsp;&nbsp;&nbsp;i=0;<br />void&nbsp;__irq&nbsp;&nbsp;IRQ_Time0(void)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;i++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;T0IR&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;清除中断标志<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;通知VIC中断处理结束<br />}<br /><br />int&nbsp;main(void)<br />{<br />&nbsp;PINSEL1&nbsp;=&nbsp;0x08000000;&nbsp;&nbsp;//设置P0.29&nbsp;为捕获功能&nbsp;&nbsp;&nbsp;<br />&nbsp;T0PR=0;<br />&nbsp;T0CCR=0x06;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置CAP0.0下降沿捕获&nbsp;并产生中断<br />&nbsp;T0TC=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;T0TCR=0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动定时器0<br />&nbsp;<br />&nbsp;VICIntSelect&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;所有中断通道设置为IRQ中断&nbsp;&nbsp;<br />&nbsp;VICVectCntl0&nbsp;=&nbsp;0x24;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;定时器0中断通道分配最高优先级(向量控制器0)&nbsp;&nbsp;<br />&nbsp;VICVectAddr0&nbsp;=&nbsp;(uint32)IRQ_Time0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置中断服务程序地址向量&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;VICIntEnable&nbsp;=&nbsp;0x00000010;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使能定时器0中断&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;<br />&nbsp;while(i&lt2)<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;T0CR0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读取&nbsp;T0CR0中的&nbsp;TC值&nbsp;&nbsp;得到&nbsp;b[0]、b[1];<br />&nbsp;}<br />&nbsp;<br />&nbsp;VICIntEnClr&nbsp;=&nbsp;0x00000010;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//关闭定时器0中断;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;t=b[1]-b[0];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//算出两次下降沿间的时间间隔,即脉冲周期&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;return(0);<br /><br />}<br />这是我写的一段程序,但调试后发现进不了中断,请教各位大侠这是什么原因?
 楼主| mountain25 发表于 2007-1-3 14:51 | 显示全部楼层

求教

怎么没有人回答呢&nbsp;没有人用过&nbsp;定时器的捕获中断&nbsp;的功能吗?还请大侠们指教啊
aliyang 发表于 2007-1-3 16:23 | 显示全部楼层

re

以前我用查询的方式,检查某一io状态,如果有变化(低到高),则启动定时计数器,如果再有变化(高到低)则停止计数,读出结果。<br />实际操作过程发现,这种方法很不准确,就舍弃了!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

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

1

主题

3

帖子

0

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