CC2540的IO口检测下降沿触发问题?
大家好:
我使用CC2540的P0.0和P0.2作为IO口电平检测,只要有下降沿触发就会报警。程序是在simpleBLEperipheral里直接配置寄存器修改的。
现在的问题是开机一分钟我的一个AD检测定时器一启动或者蓝牙间建立连接后收到蓝牙数据就会触发P0.0的电平变化,个人百思不得齐解,在哪里配置会出现这个问题? 配置函数如下:
void AntiIO_Init(void)
{
P0SEL &= 0xFA; //通用IO
P0DIR &= 0xFA; //P0_0和P0_2输入
ANT1 = 0;
ANT2 = 0;
P0IEN &= 0x00; //为排除干扰除P0.0和P0.2外其余引脚全部禁止中断使能
P0IEN |= 0x05; // P0.0和P0.2 设置为中断方式 1:中断使能
P0INP &= 0xFA;
PICTL |= 0x01; //下降沿触发 0x0上升沿触发
IEN1 |= 0x20; //允许P0口中断;
P0IFG = 0x00; //初始化中断标志位
HAL_ENABLE_INTERRUPTS();
//EA = 1; //打开总中断
}
我AD检测的是 adc = HalAdcRead( HAL_ADC_CHN_VDD3, HAL_ADC_RESOLUTION_12 ); 而且我发现只有开机时第一启动这个AD检测定时器会触发电平变化,之后没有影响?请问该怎么办!
另外想问这种检测是直接配置寄存器好还是修改osal里的hal_key.c比较好
我的中断处理函数如下:/****************************************************************************
* 名 称: P0_ISR(void) 中断处理函数
* 描 述: #pragma vector = 中断向量,紧接着是中断处理程序
****************************************************************************/
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
warninfo.illegal_remove = 1;
osal_snv_write(0x83, sizeof(warninfo.illegal_remove), &warninfo.illegal_remove);
Active_Alarm(0); //强拆报警
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT2, SBP_PERIODIC_EVT_PERIOD2 );//启动断开计时
P0IFG = 0; //清中断标志
P0IF = 0; //清中断标志
}
1)先禁用所有的KEY和LED,BEEP宏
2)禁用POWER_SAVING
再看看效果,有问题反馈