关于内核中断的问题

习惯就好zz
嵌入式领域新星创作者
2018-09-11 11:06:31
我目前在学习linux的外部中断:
注册中断
int request_irq(unsigned int irq, irq_handler_t handler,unsigned long irqflags, const char *devname, void *dev_id)
然后释放
free_irq

我想问的是,request_irq中的参数irqflags有类似IRQ_TYPE_EDGE_RISING、IRQ_TYPE_EDGE_FALLING、IRQ_TYPE_EDGE_BOTH、IRQ_TYPE_LEVEL_HIGH
这些触发条件都触发handler函数,它们有什么不同?
比如:IRQ_TYPE_EDGE_RISING、IRQ_TYPE_EDGE_FALLING是上升下降沿触发,但是如果IRQ_TYPE_EDGE_BOTH的话是上升下降都触发同一个函数吗?
像IRQ_TYPE_LEVEL_HIGH这种又是如何触发处理函数的呢?实际试了一下,会产生很多次中断。

最后,我想用外部中断计算高电平时间,不知道怎么操作比较好
...全文
226 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigPillow 2018-09-14
  • 打赏
  • 举报
回复
>IRQ_TYPE_EDGE_RISING、IRQ_TYPE_EDGE_FALLING是上升下降沿触发,但是如果IRQ_TYPE_EDGE_BOTH的话是上升下降都触发同一个函数吗?
yes.
>像IRQ_TYPE_LEVEL_HIGH、LOW这种又是如何触发处理函数的呢?
只要你不把该中断屏蔽掉,会不断的触发。

》我想用外部中断计算高电平时间,不知道怎么操作比较好
不会太准确,设置EDGE_BOTH,在中断函数判断是上升沿还是下降沿(注意抖动问题),然后计算时间差。
也可以设置成高平的触发,在中断函数中修改为低电平触发,计算两个时间差(注意抖动问题)
不过都不会太准确。

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧