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
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
在中断初始化函数中注册中断
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); //工作模式设置为中断
}
1
2
3
4
5
6
7
8
9
10
11
12
13
中断响应函数
//中断响应函数
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); //设置中断方式(反向设置中断触发方式)
}
---------------------
作者:半个月儿上来
来源:CSDN
原文:https://blog.csdn.net/qq_17017545/article/details/83026482
版权声明:本文为博主原创文章,转载请附上博文链接!