原创 MTK之外部中断篇

2010-8-20 14:29 6255 4 4 分类: 软件与OS

注:为个人收集和理解所书,如有误请指出,转载请注明出处


例子:添加一个按键,按下时响应中断函数,这里的功能为按下后系统进入睡眠。


1)在interface\hwdrv\Eint.h的eint_channel_type中添加


sleep_eint_chann


2)在custom\drv\misc_drv\CUSTOMER_BB\Eint_def.c中添加


extern const kal_uint8 SLEEP_EINT_NO;


kal_uint8    eint_sleep_handler = 0xFF;


注:一般都会有__CUST_NEW__这个宏定义,所以应在该宏条件下添加,最好先确认编译条件中是否有这个宏。


在函数custom_eint_get_channel的switch语句中添加


       case sleep_eint_chann:


              return ((kal_uint8)SLEEP_EINT_NO);


3)在custom\drv\misc_drv\CUSTOMER_BB\Eint_var.c中设定中断号,这里设置为EINT2


const unsigned char SLEEP_EINT_NO = 2;


4)在custom\drv\misc_drv\CUSTOMER_BB\auxmain.c的aux_task_main函数中注册中断


      eint_sleep_handler = L1SM_GetHandle(); //获取睡眠控制句柄


      L1SM_SleepDisable(eint_sleep_handler); //Disable睡眠


      //注册睡眠模式处理外部中断


      EINT_Registration(SLEEP_EINT_NO,


                                    KAL_TRUE,


                                    sleep_state,


                                    SLEEP_EINT_HISR,


                                    KAL_FALSE);


在该文件中实现中断函数:


 


kal_bool                 sleep_state = LEVEL_LOW;


extern const kal_uint8  SLEEP_EINT_NO;//外部中断号


void SLEEP_EINT_HISR(void);//中断函数


 


void SLEEP_EINT_HISR(void)


{


              if(sleep_state == LEVEL_HIGH)


              {


          L1SM_SleepDisable(eint_sleep_handler);


              }


              else


              {


                     L1SM_SleepEnable(eint_sleep_handler); //睡眠使能


              }


              sleep_state = !sleep_state;


              EINT_Set_Polarity(SLEEP_EINT_NO, sleep_state);//设置中断方式


              EINT_UnMask(SLEEP_EINT_NO);


}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条