微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > P1口设为外部中断的问题

P1口设为外部中断的问题

时间:10-02 整理:3721RD 点击:

怎么将P1口设为外部中断呢?就像P0口的按键一样使用,试了几天了还是不行。

求TI的工程师和路过的各位大神能指点一下

把程序贴出来看看

好的,下面就是我改动的程序:

/* CPU port interrupt */
#define HAL_KEY_CPU_PORT_0_IF P0IF
#define HAL_KEY_CPU_PORT_1_IF P2IF
#define HAL_KEY_CPU_PORT_2_IF P2IF

#if defined ( CC2540_MINIDK )||( WEBEE_BOARD )
/* SW_1 is at P0.0 */
#define HAL_KEY_SW_1_PORT   P0
#define HAL_KEY_SW_1_BIT    BV(0)
#define HAL_KEY_SW_1_SEL    P0SEL
#define HAL_KEY_SW_1_DIR    P0DIR

/* SW_2 is at P1.6 */
#define HAL_KEY_SW_2_PORT   P1
#define HAL_KEY_SW_2_BIT    BV(6)
#define HAL_KEY_SW_2_SEL    P1SEL
#define HAL_KEY_SW_2_DIR    P1DIR

#define HAL_KEY_SW_1_IEN      IEN1  /* CPU interrupt mask register */
#define HAL_KEY_SW_1_ICTL     P0IEN /* Port Interrupt Control register */
#define HAL_KEY_SW_1_ICTLBIT  BV(0) /* P0IEN - P0.0 enable/disable bit */
#define HAL_KEY_SW_1_IENBIT   BV(5) /* Mask bit for all of Port_0 */

#define HAL_KEY_SW_1_PXIFG    P0IFG /* Interrupt flag at source */
#define HAL_KEY_SW_2_IEN      IEN2  /* CPU interrupt mask register */
#define HAL_KEY_SW_2_ICTL     P1IEN /* Port Interrupt Control register */
#define HAL_KEY_SW_2_ICTLBIT  BV(6) /* P0IEN - P0.1 enable/disable bit */
#define HAL_KEY_SW_2_IENBIT   BV(4) /* Mask bit for all of Port_0 */
#define HAL_KEY_SW_2_PXIFG    P1IFG /* Interrupt flag at source */

#define HAL_KEY_SW_1_EDGEBIT  BV(0)

#else

//P0口中断程序

HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )
{
  HAL_ENTER_ISR();
#if defined ( CC2540_MINIDK )||( WEBEE_BOARD )
  if ((HAL_KEY_SW_1_PXIFG & HAL_KEY_SW_1_BIT))
#else
  if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT)
#endif
  {
    halProcessKeyInterrupt();
  }
#if defined ( CC2540_MINIDK )||( WEBEE_BOARD )
  HAL_KEY_SW_1_PXIFG = 0;
  HAL_KEY_SW_2_PXIFG = 0;
#else
  HAL_KEY_SW_6_PXIFG = 0;
#endif
  HAL_KEY_CPU_PORT_0_IF = 0;
  CLEAR_SLEEP_MODE();
  HAL_EXIT_ISR();
  return;
}

//P1口中断程序
HAL_ISR_FUNCTION( halKeyPort1Isr, P1INT_VECTOR )
{
  HAL_ENTER_ISR();
#if defined ( CC2540_MINIDK )||( WEBEE_BOARD )
  if ((HAL_KEY_SW_2_PXIFG & HAL_KEY_SW_2_BIT))
#else
  if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT)
#endif
  {
    halProcessKeyInterrupt();
  }
#if defined ( CC2540_MINIDK )||( WEBEE_BOARD )
  HAL_KEY_SW_1_PXIFG = 0;
  HAL_KEY_SW_2_PXIFG = 0;
#else
  HAL_KEY_SW_6_PXIFG = 0;
#endif
  HAL_KEY_CPU_PORT_1_IF = 0;
  CLEAR_SLEEP_MODE();
  HAL_EXIT_ISR();
  return;
}

//下面的是初始化部分

 P0SEL = 0; // Configure Port 0 as GPIO
  P1SEL = 0; // Configure Port 1 as GPIO
  P2SEL = 0; // Configure Port 2 as GPIO

  P0DIR = 0xFC;
  P1DIR = 0xBF;
  P2DIR = 0x1F;

  P0 = 0x03;
  P1 = 0x40;  
  P2 = 0; 

// 这里是按键的函数

#if defined( CC2540_MINIDK )||( WEBEE_BOARD )
int num;
static void simpleBLEPeripheral_HandleKeys( uint8 shift, uint8 keys )
{
  VOID shift;  // Intentionally unreferenced parameter

  if (keys & HAL_KEY_SW_1)
  {
   num--;  
  }
  if(keys & HAL_KEY_SW_2)
   {
       num++;     
   }   
}
#endif

所有改动的部分都在这里了,麻烦您帮忙看看问题究竟在哪?我看了好多次了还是不行,谢谢了

  在cc2540 usb dongle 测试通过!

中断功能:按键闪灯!

#include "ioCC2540.h"
 void delay(void)
       {unsigned long i;
         for(i=0;i<100000;i++)
         asm(" nop ");
       }
#pragma vector   = P1INT_VECTOR 

__interrupt void P1INT_ISR(void)
{P1IFG=0;
P1IF=0;
 
 P0=0;
           
             delay();
             delay();
             delay();
             P0=0xff;
            
             delay();
             delay();
             delay();
 
}
    
  void  main()
    {
             P0SEL =0;
           P1SEL =0x0;
           P0DIR=0xff;
           P1DIR=0x02;
           PICTL = 0x02;
P1IEN=0x0c;
           IEN2=0x10;
           EA=1;
  
            while(1)
             {
             }
    }

谢谢了,大秦正声,在单片机上运行的程序我也做过,并且可以使用,但是在协议栈上就不行了,不知道是怎么回事,可以在帮忙看看吗?

估计老外的库函数有问题!

http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/p/68255/161765.aspx#161765 请看我原来回答的帖子,帖子是将P0的按键换成P1的。

另外老外的函数看起来拐弯很多,但是读懂之后,修改就很通用,只需改挤出宏定义即可。逻辑性很强

谢谢各位了,问题已经解决了,谢谢

请问一下你是怎么解决的?我也遇到了相同的问题,是在centrl中无法正常工作,p1.7根本没办法拉高,设置上升沿中断,其他口,一次向下按键会触发两次中断,但松开时没有中断,谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top