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.

CC2541 不响应IO中断的问题

Other Parts Discussed in Thread: CC2541

应用场景:

CC2541 使用 P00 与P01 外接 触摸芯片,把 P00、P01配置成外部的IO中断 (下降沿触发)。

Interrupt group 5 的中断优先级,已配置成最高的优先级。如下:

IP0 |= BV(5); 

IP1 |= BV(5); //Interrupt group 5, 最高优先级

问题:

在极短的时间内,短按触摸 IC (使用示波器观察,已发出下降沿的信号)。但 CC2541 并没有接收到中断的标志。

如果较长时间内,短按触摸 IC, CC2541 才有中断的标志。

 请问 CC2541 边沿触发的中断条件是:需要多长的持续时间? 电平? 

能否提高 IO 的速度?或者配置中断的响应时间?

谢谢~!

  • 你说的较长时间大概是多长时间,关于中断看下手册7.4节:www.ti.com.cn/.../swru191f.pdf
    CC2541 不能配置IO的速度
  • 中午好,较长的时间大概是 50ms ~ 150ms。

  • 时间是是有点长,估计是外部触摸IC的原因,先单独测下中断的响应

    外部中断的一个完整例子
    
    #include <ioCC2540.h>
    
    #define RLED P1_0
    
    #define led2 P1_1
    
    #define uchar unsigned char
    
    #define uint unsigned int
    
    /*****************************************
    
    //函数声明
    
    *****************************************/
    
    void Delay(uint n);
    
    /*****************************************
    
    //io及LED初始化
    
    *****************************************/
    
    void Init_IO_AND_LED(void)
    
    {
    
       P1DIR = 0X03; //0为输入(默认),1为输入
    
       RLED = 1;
    
       led2 = 1;
    
       P0INP &= ~0X0c;//有上拉、下拉
    
       P1INP &= ~0X40; //选择上拉
    
       P0IEN |= 0X30;   //P04 P05
    
       PICTL |= 0X02;   //下降沿
    
       EA = 1;
    
       IEN1 |= 0X20;   // P0IE = 1;
    
       P0IFG |= 0x00;   //P12 P13
    
    };
    
    /*****************************************
    
    //主函数
    
    *****************************************/
    
    void main(void)
    
    {
    
       Init_IO_AND_LED();
    
       while(1)
    
       {
    
       };
    
    }
    
    /*****************************************
    
    //延时
    
    *****************************************/
    
    void Delay(uint n)
    
    {
    
     uint ii;
    
     for(ii=0;ii<n;ii++);
    
     for(ii=0;ii<n;ii++);
    
     for(ii=0;ii<n;ii++);
    
     for(ii=0;ii<n;ii++);
    
     for(ii=0;ii<n;ii++);
    
    }
    
    #pragma vector = P1INT_VECTOR
    
    __interrupt void P1_ISR(void)
    
    {
    
           if(P0IFG>0)         //按键中断
    
           {
    
             P0IFG = 0;
    
             RLED = !RLED;
    
           }
    
           P0IF = 0;          //清中断标志
    
    }