嵌入式开发者社区

标题: 关于c674x_irq_events的疑问 [打印本页]

作者: daoerb    时间: 2017-6-23 17:05
标题: 关于c674x_irq_events的疑问
本帖最后由 daoerb 于 2017-6-23 17:07 编辑 ; O( @0 H2 g: ~: L

  O/ S) F% R% X+ N3 q8 v- V8 b在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
8 h' X$ G! s' t该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用4 b( P' }) W1 M$ `9 ~2 a
DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
  M2 o6 l. R" Z- w$ F: p! `# h5 c# S4 |6 V" a% c8 x: G7 T
有如下需求8 P. u/ K! z' B7 t2 O
ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态
* O7 X- N4 y2 q  T
: O! e. c- w+ Q/ o' \3 u& O目前实现过程如下:( D2 i9 R6 f+ }
1.      基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件
9 {, a  P# V, q4 r5 j% X/ ?此时DSP通道1触发,则原程序就会结束通道2的阻塞0 G' O  ~; g2 j' ~6 t* ~9 ~7 t1 I, F2 _
然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------" F$ z9 ~0 W2 b: o% A- t) v  o5 f6 A
2.   在整个查询的过程中arm一直阻塞,效率很低,
& L( @( m) B5 s* c- m
' O4 R0 E& |# s2 E1 a* z# y能不能有如下方式实现?! A1 R; y! C3 g8 M- \, s* }
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情+ C8 t. D+ O8 Z: W% r2 b
8 a7 c# R+ b% O' O( D  g( C
3 G1 p* E, y/ @: X. R9 f  W
$ ?6 p) _$ S1 X  u0 B8 ?) Z5 q9 H

作者: teddy    时间: 2017-6-26 14:07
你好!由于c674x_irq_events把DSP TO ARM的4个中断都注册了,所以,只要有中断触发,都会上传事件到应用层。" N; I5 ?" t. M: |. {
目前,4个事件分别是:KEY_PROG1, KEY_PROG2, KEY_PROG3, KEY_PROG4;& Q! q" E% F7 o+ o) p  v7 h
可以在应用层通过对event的过滤进行处理。你提的建议很好,后续我们会增加事件使能开关,可以单独使用某个中断。谢谢你的建议。
作者: daoerb    时间: 2017-6-26 17:06
本帖最后由 daoerb 于 2017-6-29 09:22 编辑
2 r* j( k  f- T) _, r, h
teddy 发表于 2017-6-26 14:07
+ k6 d4 K( L6 W  w! @你好!由于c674x_irq_events把DSP TO ARM的4个中断都注册了,所以,只要有中断触发,都会上传事件到应用层 ...
谢谢!9 [7 g; L- k+ u) a7 B
3 n3 X0 _, X# o5 U

作者: daoerb    时间: 2017-6-28 11:08
@teddy 有没办法?




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4