This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2540的IO口检测下降沿触发问题?

Other Parts Discussed in Thread: CC2540

大家好:

           我使用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

    再看看效果,有问题反馈