微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > CC2530在协议栈中编程无法进入I/O口外部中断HAL_ISR_FUNCTION(ZMDPort01ISR, P0INT_VECTOR )

CC2530在协议栈中编程无法进入I/O口外部中断HAL_ISR_FUNCTION(ZMDPort01ISR, P0INT_VECTOR )

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

   

/****************************
//T1初始化与P0.1配置程序程序
***************************/
void InitialT1_P01(void)
{
//HalUARTWrite(0,uartbuf,16);

P0SEL |= 0x00; //配置成GPIO功能
P0DIR &= ~0x02; //配置成输入

P0IFG |= 0x00; //清除中断标志
PICTL = 0x00; //设置为上升沿触发中断 PICTL[1] = 0上升沿触发;PICTL[1] = 1下降沿触发

//初始化定时器1
T1CNTH = 0x00;
T1CNTL = 0x00;
T1CTL |= 0x09; //32分频;自动重装模式(0x0000->0xffff)

P0IEN |= 0x02; //使能P0_1引脚中断
IEN0 |= 0x80; //打开总中断
//EA = 1;
IEN1 |= 1<<5;
}


/******************************************************************************
P0.1端口中断服务函数
******************************************************************************/

HAL_ISR_FUNCTION(ZMDPort01ISR, P0INT_VECTOR )
{
if(P0IFG>0)
{
Port01ISR();
}
P0IFG = 0;
P0IF = 0;
osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);
}
//HAL_ISR_FUNC_PROTOTYPE(f,v);
//HAL_ISR_FUNC_PROTOTYPE(f,v);
void Port01ISR(void)
{
//uartbuf[30] = "Get in HaL_ISR !";
HalUARTWrite(0,uartbuf,16);

T1L = T1CNTL;
T1H = T1CNTH;
if(float_flag == 0)
{
t1 = T1H*256+T1L;
PICTL = 1; //设置为下降沿触发
}
else
{
t2 = T1H*256+T1L;
PICTL = 0; //设置为上升沿触发

HighTime[index] = t2 -t1;
index++;

if((t2 - t1) > 10000 && (t2 - t1 < 30000))index = 0;

if(index == 29)
{
index = 0;
flag = 1;
EA = 0;
}

}
float_flag = !float_flag;

}

您好,我写了一个单机版的I/O中断,可以实现检测外部中断信号,但是移植到协议栈中之后,就一直无法进入中断,请高手帮我看一下我的代码,哪里不对?

您移植到了哪个工程?在TI的示例程序内,P0_1已经用作了按键操作

 #define PUSH1_SBIT        P0_1 

您可以取消协议栈内的按键操作试试,将hal_board_cfg.h内的

/* Set to TRUE enable KEY usage, FALSE disable it */
#ifndef HAL_KEY
#define HAL_KEY TRUE
#endif

改为 #define HAL_KEY  FALSE

 您好,我是移植到了GenericApp这个工程里面的EndDevice.c这个文件中。我按照您的提示已经修改了代码,并且已经可以进入中断,功能已经实现了,真是太感谢了。

裸机  T3 中断16次      放到协议栈中断上万次    求解   QQ772011129  方便联系  大神

谢谢你,我也解决了一样的问题

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

网站地图

Top