嵌入式开发者社区

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

作者: daoerb    时间: 2017-6-23 17:05
标题: 关于c674x_irq_events的疑问
本帖最后由 daoerb 于 2017-6-23 17:07 编辑
0 n; y* q. \0 n1 b- t
' {. `( T8 ]# K- t在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
0 G% y, v- j4 }5 _5 K该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用
' o  R3 {$ |* f+ x; K2 U0 r2 [DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号2 |: ?4 V" o! K1 w. m: [5 W8 }1 K
: a+ p" A. t3 ^& c" ?
有如下需求5 {# `7 }& u* R( D' `7 O, Z. V
ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态
$ `1 T5 `5 \' g* x2 n2 x# O7 Z# M& H! t$ [6 d7 _- U
目前实现过程如下:; `! ^& \2 e/ s( J1 a
1.      基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件
7 R4 M9 F$ `# s  _( H此时DSP通道1触发,则原程序就会结束通道2的阻塞
8 |2 M# g3 D2 v6 {然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------# J* V# v8 D' x( B% [
2.   在整个查询的过程中arm一直阻塞,效率很低,9 @1 A4 U0 r9 G6 h) W5 {- m
) M3 g4 ^$ n- R; a6 u% Z. W
能不能有如下方式实现?9 C+ l& |  C# r
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情
. B" `) a7 J, H/ ^* p0 m
( C' x% X" a. s' j
* t0 F1 e- {5 ?( O9 c# f( q) F5 m+ b/ b9 J$ o$ q! s% C; A. d

作者: teddy    时间: 2017-6-26 14:07
你好!由于c674x_irq_events把DSP TO ARM的4个中断都注册了,所以,只要有中断触发,都会上传事件到应用层。
+ N, L( M+ }: y目前,4个事件分别是:KEY_PROG1, KEY_PROG2, KEY_PROG3, KEY_PROG4;
7 B7 v6 K. j# l; D可以在应用层通过对event的过滤进行处理。你提的建议很好,后续我们会增加事件使能开关,可以单独使用某个中断。谢谢你的建议。
作者: daoerb    时间: 2017-6-26 17:06
本帖最后由 daoerb 于 2017-6-29 09:22 编辑
  G: H$ k) y' V! R
teddy 发表于 2017-6-26 14:07% |" m3 i& W* o' ?6 z
你好!由于c674x_irq_events把DSP TO ARM的4个中断都注册了,所以,只要有中断触发,都会上传事件到应用层 ...
谢谢!
& |. w. S! X' ?  Q* `
9 D4 z- {$ A! S' S9 m
作者: daoerb    时间: 2017-6-28 11:08
@teddy 有没办法?




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