嵌入式开发者社区

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

作者: daoerb    时间: 2017-6-23 17:05
标题: 关于c674x_irq_events的疑问
本帖最后由 daoerb 于 2017-6-23 17:07 编辑 4 a' K2 D" c5 A$ t1 T3 B

1 e: D! v& ~6 j6 Q0 Y3 a在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
( C) G7 ?  `+ ~4 l0 R该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用
2 P+ L9 c3 [2 \0 q9 R! c6 }0 B# wDSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
/ c9 {) H2 M- l1 v# Z& y' n. v5 t+ c+ n5 A/ @
有如下需求
/ @5 d+ U8 W7 B* WARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态
, H  e4 n' R& B
  M5 }' |4 E+ i. g" o- f目前实现过程如下:. ?; P& V. c1 W: L" T# a! H
1.      基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件
* D9 o( i2 e' A6 V5 F此时DSP通道1触发,则原程序就会结束通道2的阻塞  A1 G( O1 k* d& \
然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------
7 d4 ?! N6 j  X" k0 V# l2 A, f2.   在整个查询的过程中arm一直阻塞,效率很低,$ P1 U5 r, M, R& {% l* f% i
% p4 M3 d  f3 N3 [" \
能不能有如下方式实现?
8 x9 b" a/ J. W; }! e0 O1 E1 ]  l/ O初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情
2 C- p1 ^4 H5 z0 C! O
& b: R& c/ P/ @' _3 u# d
5 f7 o) w  f; j' }0 X
& D$ {$ F$ p7 S2 U7 s
作者: teddy    时间: 2017-6-26 14:07
你好!由于c674x_irq_events把DSP TO ARM的4个中断都注册了,所以,只要有中断触发,都会上传事件到应用层。* k( r" _4 k' A3 |* W' n$ A
目前,4个事件分别是:KEY_PROG1, KEY_PROG2, KEY_PROG3, KEY_PROG4;
0 b  w0 K1 C+ Z- Q! {/ i' D可以在应用层通过对event的过滤进行处理。你提的建议很好,后续我们会增加事件使能开关,可以单独使用某个中断。谢谢你的建议。
作者: daoerb    时间: 2017-6-26 17:06
本帖最后由 daoerb 于 2017-6-29 09:22 编辑
+ Y7 k% J! K7 I" f5 x# e; ]' A
teddy 发表于 2017-6-26 14:079 {5 F/ F' M/ k* t; |5 @
你好!由于c674x_irq_events把DSP TO ARM的4个中断都注册了,所以,只要有中断触发,都会上传事件到应用层 ...
谢谢!. t2 l7 s, Q; y4 i  P

0 N. M% X" W. p. q6 F# i
作者: daoerb    时间: 2017-6-28 11:08
@teddy 有没办法?




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