MTK中断控制器简单记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_17017545/article/details/83026482

在模块开启过程中初始化中断

void ModulePwronCheck(void)
{
#ifdef TELIT
	GPIO_WriteIO(0, MODULE_PWR_GPIO_ID);
	ModuleRingInit();           //电话短信中断初始化
#if defined(__TELIT_LE910_SUPPORT__)    
    ModulePowerOnDetInit();     //用于诊断模块是否掉电的中断初始化
#endif    
	//ModuleCTSInit();
	L1SM_SleepDisable(mc_sleep_handle);

	if(IsModulePwron())
    {   
		tr_debug("ModulePwron OK!");
#if defined(__TRACKER_PTCRB__) && defined(__PA30_SUPPORT__)
        Module_VbusSwitch(KAL_TRUE);
#endif
   }
	else
		tr_debug("ModulePwron FAIL!");
#endif
}

在中断初始化函数中注册中断

void ModuleRingInit(void)
{
      GPIO_ModeSetup(EXT_MODULE_RING_GPIO_ID, 0);   //工作模式设置为GPIO
      GPIO_InitIO(0, EXT_MODULE_RING_GPIO_ID);      //初始化GPIO的工作方向 0 输入
      module_ring_state = GPIO_ReadIO(EXT_MODULE_RING_GPIO_ID); //读取GPIO脚状态

      EINT_SW_Debounce_Modify(EXT_MODULE_RING_EINT_ID, 10);  //软件去抖(防止电平变化过程中有抖动)
      tr_debug("module_ring_init %d\r\n",module_ring_state);
      EINT_Set_HW_Debounce(EXT_MODULE_RING_EINT_ID, 10);     //硬件去抖   
      EINT_Registration(EXT_MODULE_RING_EINT_ID,KAL_TRUE, !module_ring_state, ModuleRingHisr, KAL_TRUE);    //注册中断 

      GPIO_ModeSetup(EXT_MODULE_RING_GPIO_ID, EXT_MODULE_RING_GPIO_MODE);   //工作模式设置为中断
}

中断响应函数

//中断响应函数
void ModuleRingHisr(void)
{
    ilm_struct *  ring_ilm;
        
	module_ring_state = GPIO_ReadIO(EXT_MODULE_RING_GPIO_ID);		
	tr_debug(" module ring_HISR %d\r\n",module_ring_state);

    if(!module_ring_state)
    {
        #if defined(__L200_SUPPORT__)
            if(GetTelitCallStatus() != TELIT_CALL_STATUS_CONNECTED)
            {
                ModuleCodecOn(2);    
                AW8736SettingModeOneOrClose(KAL_FALSE);
            }
        #endif
        
        tr_debug(" module ring_HISR -SleepDisable");
    	L1SM_SleepDisable(mc_sleep_handle); 		//
            
        ModuleSlpModeSetting(KAL_FALSE);
        ModuleStartEnterSleepTimer(20);
	}
    else
    {
        tr_debug(" module ring_HISR -SleepEnable");
    	//L1SM_SleepEnable(mc_sleep_handle);		//睡眠使能
    }
    EINT_Set_Polarity(EXT_MODULE_RING_EINT_ID, !module_ring_state);			//设置中断方式(反向设置中断触发方式)

}

猜你喜欢

转载自blog.csdn.net/qq_17017545/article/details/83026482
今日推荐