主题:EM9170如何使用GPIO14的脉冲计数输入功能?

  共有37496人关注过本帖    
帅哥哟,离线,有人找我吗?
chang
1楼 信息 | 搜索 | 邮箱


加好友 发短信
EM9170如何使用GPIO14的脉冲计数输入功能?  发帖心情 Post By:2013-4-17 2:34:00   [只看该作者]

请问如何进行脉冲计数,相关的API函数是什么?
脉冲达到预定数量后能否产生中断?

谢谢

  单帖管理 | 引用 | 回复 回到顶部
x10
2楼


  发帖心情 Post By:2013-4-17 9:22:00   [只看该作者]

请问你的脉冲最小间隔是多长?

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
yy
3楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-17 9:28:00   [只看该作者]

你一定要使用GPIO14来进行脉冲计数吗?9170的IRQ1为GPIO10即CN13的11号针脚,光盘里有提供IRQ的例程,可用于脉冲计数。

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
chang
4楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-18 0:38:00   [只看该作者]

脉冲间隔最小5ms.

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
chang
5楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-18 0:41:00   [只看该作者]

以下是引用yy在2013-4-17 9:28:00的发言:
你一定要使用GPIO14来进行脉冲计数吗?9170的IRQ1为GPIO10即CN13的11号针脚,光盘里有提供IRQ的例程,可用于脉冲计数。

不是我一定要用, 你们的数据手册里写了GPIO14是脉冲输入啊,所以我硬件按照GPIO14来设计的。没有相关API支持吗? 
如果用IRQ,可以用IRQ2吗?


  单帖管理 | 引用 | 回复 回到顶部
x10
6楼


  发帖心情 Post By:2013-4-18 9:13:00   [只看该作者]

我们一般把可以支持的功能都写出来,根据客户的需要来完成。EM9170的GPIO14管脚确实可以支持硬件的脉冲宽度测量,当然也可以计数。如果你的脉冲最小间隔是大于5ms(不是<5ms?)的话,采用外部中断方式更简单一些。脉宽测量的驱动程序我们因为还没有客户提出,所以还没做。后续会尽快安排增加这个驱动的。

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
yy
7楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-18 9:45:00   [只看该作者]

我们的数据手册里,IRQ1是GPIO10,对应CN13的11号针脚。IRQ2是GPIO11,对应CN13的12号针脚啊。

IRQ2是可以使用的,见光盘的IRQ例程,里面有段注释的说明,要使用IRQ2需要调用SetIRQ(1);然后重启板子,之后就可以正常调用IRQ2了,不需要再调用SetIRQ(1);了。

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
chang
8楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-19 4:36:00   [只看该作者]

我的应用中需要对脉冲进行计数,脉冲的周期在5-10ms,占空比20%-80%。我不需要测量脉宽,只是要准确计数。

我在评估板上测试了一下,用PWM1输出占空比50%的方波,用IRQ1计数,程序使用光盘中的例程稍加修改。发现PWM频率在10Hz以上(100ms周期)IRQ计数就跟不上了,漏了很多。

IRQ1的驱动程序究竟能有多快的响应?

另外,函数WaitForIRQ( HANDLE hIrq, DWORD dwTimeout )中的dwTimeout,按字面理解,应该是超过此预设时间之后没有接受到中断就退出阻塞,对吧?单位是ms吗?我试着设了一下,没看出效果。

  单帖管理 | 引用 | 回复 回到顶部
x10
9楼


  发帖心情 Post By:2013-4-19 9:00:00   [只看该作者]

我们原来的中断计数判得太严格了。已修改了驱动,更新一下内核,IRQ1是完全可以胜任你要求的脉冲计数功能的。请留一个邮件地址,我们把新的内核发给你。谢谢。

  单帖管理 | 引用 | 回复 回到顶部
cx
10楼


  发帖心情 Post By:2013-4-19 9:58:00   [只看该作者]

chang:新内核文件及相关资料已发您邮箱,请查收。


  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
chang
11楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-20 6:07:00   [只看该作者]

程博士,曹工,yy各位,多谢支持!我把新内核刷到板子上试了一下,似乎没有明显改善。IRQ在5Hz以上的频率就不能很好的计数了。多次测试在100Hz时,500个脉冲只采集到112-120个。我的简易测试程序已发到曹工邮箱,使用PWM1输出100Hz,50%的信号,持续5秒,开单独的线程由IRQ1计脉冲数。我在底板上用10K电阻把PWM1和IRQ1短接。

请帮忙看看究竟是哪里有问题。再次感谢!

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
chang
12楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-21 19:33:00   [只看该作者]

情况更新:

我一直是用remote display显示屏幕数据,昨天尝试了不开remote display,直接将捕获的中断数量写入一个文件再事后检查,发现中断数量基本正常了。

在200Hz以上明显开始有偏差,但由于确切的脉冲数量我手头没有工具测量(完全依赖于板上PWM输出频率和时间计算),所以并不确定是中断响应不上还是脉冲数本来就是那么多。

无论如何,从目前单个线程的情况来看应该可以满足项目的要求了。接下来会继续测试,也请英创的各位帮忙准确测试脉冲的捕获响应实时性。

多谢各位!

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
chang
13楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-21 19:35:00   [只看该作者]

结果列表:

Freq (Hz)Time (s)IRQ Generated
(Assume PWM is accurate)
IRQ captured
500031500014653
500315001485
3003900895
2003600599
1503450451
1003300301
200601200011978

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
yy
14楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-22 9:30:00   [只看该作者]

你的意思是你每收到一个中断就用printf打印到屏幕上,然后通过远程桌面查看结果吗?
这样是一定会有问题的,因为printf打印的命令行每次变动都会重新刷新一次屏幕,正常的屏幕刷新10几次到20几次,当你一秒尝试刷新200来次是一定会导致CPU资源不够用的。你要么降低下屏幕打印的频率,要么用其他手段打印信息。

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
chang
15楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-23 0:50:00   [只看该作者]

我是收到所有中断后一次性打印结果,不是收一个打一个。现在发现只要不开remote display就可以。只是条件所限,我现在还不能精确测试。

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
yy
16楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-23 16:33:00   [只看该作者]

远程桌面大概会占大概50%的CPU资源,当CPU资源被全部消耗光就可能导致线程不能及时获取中断信息。
我们计划添加一个方法读取产生的中断总数,这样即使没有及时处理中断事件,依然可能通过该函数获得期间的中断计数。

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
chang
17楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-24 3:33:00   [只看该作者]

如果能有这样的函数就更好了,最好能提供两个方法:一个读取中断总数,一个将其清零以重新计数。

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
yy
18楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2013-4-24 9:36:00   [只看该作者]

最新内核已经修改了,我测试了下好的,你关注下我们网站,应该会整理下发布信息及最新下载的。

hIRQ为IRQ句柄
DWORD len;
int inum;
ReadFile(hIRQ, &inum, 4, &len, NULL);
就可以读出IRQ的总计数inum,每次调用ReadFile函数,这个计数就会清0重新计数。这样即使没有及时调用WaitForIRQ响应中断事件,也能记录IRQ中断数。
[此贴子已经被作者于2013-4-24 9:36:43编辑过]

  单帖管理 | 引用 | 回复 回到顶部

返回首页

EM9170如何使用GPIO14的脉冲计数输入功能?

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: