嵌入式开发者社区

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

作者: daoerb    时间: 2017-6-23 17:05
标题: 关于c674x_irq_events的疑问
本帖最后由 daoerb 于 2017-6-23 17:07 编辑
* {: i2 Y, G: U% G; ^$ `& y4 N
% j  Z3 P* S4 m在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
9 a: B  Y/ o, T. z& \9 A) Q该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用. [9 d. V$ V7 D# K
DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
) P7 T9 Z* _! v  O, |0 _# Z7 u* D0 I+ X+ `, T$ Y* m
有如下需求
1 f- w# r# q+ }9 R5 bARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态$ ?2 h" |0 W% y/ F9 A$ }1 r
& E$ X7 x* N6 v2 `- `% d- l5 n
目前实现过程如下:
" C: @2 V( w, Q2 K7 }1.      基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件6 L5 R8 C; Z' b+ k6 W+ @
此时DSP通道1触发,则原程序就会结束通道2的阻塞4 k$ Q) g( d# R/ U1 R" A: d# Q
然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------' E6 f: c, L/ ^: |8 R: M6 E! X0 O5 q9 E
2.   在整个查询的过程中arm一直阻塞,效率很低,: _  D- s9 Q; M6 ^1 r4 v! w# F+ [

  Z, {4 E: ~% H$ X% {' O$ v能不能有如下方式实现?8 w+ O& |+ X0 k7 X3 Z5 p5 D) A; G
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情3 D* n' E- w8 ]# }# O
; ]+ _1 e% K, W6 \; c2 W

" P, w% ]: w4 }+ e2 T
) P, b9 i0 E) \! w- A" m  M
作者: teddy    时间: 2017-6-26 14:07
你好!由于c674x_irq_events把DSP TO ARM的4个中断都注册了,所以,只要有中断触发,都会上传事件到应用层。; p5 Z$ ~) n- Z5 ?* W4 \
目前,4个事件分别是:KEY_PROG1, KEY_PROG2, KEY_PROG3, KEY_PROG4;3 y: k9 n( h) Z8 u1 D' g! M
可以在应用层通过对event的过滤进行处理。你提的建议很好,后续我们会增加事件使能开关,可以单独使用某个中断。谢谢你的建议。
作者: daoerb    时间: 2017-6-26 17:06
本帖最后由 daoerb 于 2017-6-29 09:22 编辑 : s! @2 p1 I  J$ F
teddy 发表于 2017-6-26 14:07
' ^/ w( z# g4 V& ]8 X你好!由于c674x_irq_events把DSP TO ARM的4个中断都注册了,所以,只要有中断触发,都会上传事件到应用层 ...
谢谢!
) t$ j. k2 V- u% A% }7 x# H3 E
; @) J( p6 }4 E8 o3 U8 l
作者: daoerb    时间: 2017-6-28 11:08
@teddy 有没办法?




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