嵌入式开发者社区

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

作者: daoerb    时间: 2017-6-23 17:05
标题: 关于c674x_irq_events的疑问
本帖最后由 daoerb 于 2017-6-23 17:07 编辑 1 g# |  r5 h1 f) v" K

6 q" l2 B- o( F在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
+ a4 |5 N! A; h该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用
+ }9 J! z( [& w2 `4 X7 gDSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号7 a/ {. s" `* U' T- c1 {8 C

2 i' _; h9 ]1 Z$ u) B. ~有如下需求. N0 m' \: p. ^0 }9 v* m
ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态' d  Q: |  B) u! h& u5 ^

9 {6 E8 Q% r8 r: w* K+ g目前实现过程如下:3 O- ^: z  X/ e+ ?/ D9 U' j
1.      基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件+ q9 c/ ]* f( ^2 r/ Q9 ]1 f
此时DSP通道1触发,则原程序就会结束通道2的阻塞9 N9 c; L1 E6 v, C% }& B  S: Z! U; Z
然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------
' J  z% n( L7 }. C2.   在整个查询的过程中arm一直阻塞,效率很低,5 ~3 I* e% i# I" R  P

0 D& A- n, ]$ W4 r, O! S; ]# ]9 b能不能有如下方式实现?0 [2 w  G4 w1 C! R/ p. d7 V
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情9 N% ?3 l" p9 X& y  [& a
6 K1 y  B5 C& \. S9 p# W0 @
. E6 u0 c0 h* L* y, k3 }6 J

1 i8 N8 O  C0 ^6 U
作者: teddy    时间: 2017-6-26 14:07
你好!由于c674x_irq_events把DSP TO ARM的4个中断都注册了,所以,只要有中断触发,都会上传事件到应用层。
4 E* A+ G; U5 b% _6 [% D0 i( k目前,4个事件分别是:KEY_PROG1, KEY_PROG2, KEY_PROG3, KEY_PROG4;4 i( L! U# e& n- j3 k$ E3 e
可以在应用层通过对event的过滤进行处理。你提的建议很好,后续我们会增加事件使能开关,可以单独使用某个中断。谢谢你的建议。
作者: daoerb    时间: 2017-6-26 17:06
本帖最后由 daoerb 于 2017-6-29 09:22 编辑
5 y1 O/ z7 @, v3 {
teddy 发表于 2017-6-26 14:076 V4 S' k* |0 s0 E: g0 A- h
你好!由于c674x_irq_events把DSP TO ARM的4个中断都注册了,所以,只要有中断触发,都会上传事件到应用层 ...
谢谢!" _) n' R# S7 j/ I0 H! D6 `3 T$ j* R
9 Y7 r2 o! ^3 l9 z; t* M0 }

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




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