找回密码
 注册
搜索
查看: 1090|回复: 5

中断处理流程

[复制链接]
发表于 2008-10-9 12:46:48 | 显示全部楼层 |阅读模式
请教一个问题,MTK平台的中断处理流程是怎么样,我看了一下,分析不出什么来,是不是MTK封装好了一些东西,高手们能否给小妹指点一下处理流程呢!
谢谢了
发表于 2008-10-9 14:23:51 | 显示全部楼层
交流一下,不知道说的对不对
首先 InitEvents() 初始化所有 清零
然后 注册各事件的处理方法 Set Event Handler
这时 当事件发生时 就会 Execute Protocol Handler
当然 清除全部也是有必要的 Clear All  Event Handler
[此贴子已经被作者于2008-10-10 10:31:48编辑过]
点评回复

使用道具 举报

 楼主| 发表于 2008-10-10 08:52:07 | 显示全部楼层
谢谢大哥的热心解答,你分析的应该是MMI层对中断的处理流程,驱动层的不知道是怎么去响应中断的,我看了一下触摸屏的中断口处理:
   EINT_Set_HW_Debounce(TP.eint_chan, 5);
   EINT_Registration(TP.eint_chan,KAL_TRUE,touch_panel_state,touch_panel_HISR, KAL_TRUE);   
   EINT_Mask(TP.eint_chan);
EINT_Registration这个是注册一个中断号;注册了一个响应执行函数touch_panel_HISR;

/*touch event HISR, wake up touch panel task*/
void touch_panel_HISR(void)
{   
   kal_set_eg_events(TP.event,1,KAL_OR);
   if (touch_panel_state==touch_down_level)/*low*/
   {
      #ifdef TOUCH_PANEL_DEBUG
      dbg_printWithTime("touch down\r\n");            
      #endif
      TP.state=DOWN;
   }
   else/*high*/
   {      
      #ifdef TOUCH_PANEL_DEBUG
      dbg_printWithTime("touch up\r\n");            
      #endif
      TP.state=UP;
   }
   touch_panel_state = !touch_panel_state;
   EINT_Set_Polarity(TP.eint_chan,touch_panel_state);
   EINT_UnMask(TP.eint_chan);
}
分析到这里就不知道怎么处理了,还望高手们能指点一下,中断驱动的处理流程,谢谢了!
点评回复

使用道具 举报

发表于 2008-10-10 09:04:21 | 显示全部楼层
俺对驱动那段不是很熟了。呵呵。
EINT_Set_Polarity()设置极性,
EINT_UnMask()Unmask;
我猜测 内核 会有进程处理这个事件,然后返回给人机接口,不过底层处理我们见不到。 大家探讨一下。
[此贴子已经被作者于2008-10-10 10:30:10编辑过]
点评回复

使用道具 举报

发表于 2008-10-18 11:11:43 | 显示全部楼层
void touch_panel_HISR(void)
{
。。。。
  
   kal_set_eg_events(TP.event,1,KAL_OR);  //这里设置触摸屏消息
。。。。
}

然后在
void tp_task_main( task_entry_struct * task_entry_ptr )
{       

。。。。


        while (1)
        {
       kal_retrieve_eg_events(TP.event,1,KAL_OR_CONSUME
         ,&event_group,KAL_SUSPEND);           //这里获得触摸屏消息
      if(TP.state==DOWN)
      {
         touch_panel_down_hdr();
         }
      else/*TP.state==UP*/
      {
         touch_panel_up_hdr();
      }      

        }

        /* Do component task's processing here */
}

应该就是这样了
本文来自:我爱研发网(52RD.com) 详细出处:http://www.52rd.com/bbs/post.asp?action=re&BoardID=67&ID=139512&star=1&page=1
点评回复

使用道具 举报

发表于 2010-12-18 15:51:40 | 显示全部楼层
kal_set_eg_events(TP.event,1,KAL_OR);

kal_retrieve_eg_events(TP.event,1,KAL_OR_CONSUME
         ,&event_group,KAL_SUSPEND);
这里的KAL_OR,KAL_SUSPEND,KAL_ON_CONSUME是什么意思?

感觉这就像MTK的信号量机制,进中断设置task的信号,退出中断后
相应的TASK检测到该信号,就可以运行了,不知是吗?
TKS
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-8 01:26 , Processed in 0.044620 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表