cc2530带协议栈无法进入T1中断服务程序,裸机可行
协议栈版本:zstack-cc2530-2.2.0-1.3.0
问题描述:裸机测试,完全正常,T1中断,P0外部触发中断都正常。带上协议栈后,将中断入口程序修改为
_PRAGMA(vector=P0INT_VECTOR) __near_func __interrupt void P0ISR(void);
HAL_ISR_FUNCTION(P0_IRQ,P0INT_VECTOR)
并根据此贴:http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/68446.aspx
将#define HAL_KEY FALSE,P0外部触发中断正常工作。
但T1定时器中断依旧无法进入,查看寄存器,T1CNTH和T1CNTL都有变化,就是无法进入T1的服务中断程序,T1的中断入口函数:
_PRAGMA(vector=T1_VECTOR) __near_func __interrupt void halTimer1Isr(void);
HAL_ISR_FUNCTION( halTimerT1Isr, T1_VECTOR)
T1的初始化和配置:(和裸机测试一样)
/*定时器1初始化*/
//32分频 modulo模式 一次32M/32=1M 一次计数就是1us
#define TIMER1_INIT() do{ T1CTL = 0x0A; TIMIF = ~0x40;} while (0)
/*定时器1允许溢出中断*/
#define TIMER1_ENABLE_OVERFLOW_INT(val) (TIMIF = (val)?(TIMIF|0x40):(TIMIF&~0x40))
/*定时器1启动或关闭*/ //需要开启定时器1中的通道0
#define TIMER1_RUN(value) (T1STAT = (value)?T1STAT|0x21:T1STAT&~0x21)
void initP0()
{
P0SEL &= ~0xBD; //将P0_2 P0_3 P0_4 P0_5 P0_7置为GPIO
P0DIR |= 0xBC; //将P0_2、P0_3 P0_4 P0_5 P0_7置为输出
//P0SEL &= ~0x01; //将P0_0设置为GPIO
P0SEL |= 0x01; //将P0_0设置为中断的外设 datasheet中如此写的
P0DIR &= ~0x01; //将P0_0设置为输入
P0INP &= ~0x01; //将P0_0设置为上拉/下拉
P2INP &= ~0x20; //端口0为上拉
P0IEN = 0x01; //P0_0设置为中断方式,其他为禁止方式
PICTL |= 0x01; //P0均为下降沿触发
IEN1 |= 0x20; //打开端口0中断使能
P0IFG = 0; //复位端口0的标志位
P0IF = 0;
TIMER1_INIT(); //初始化定时器1 使能定时器1的溢出中断
T1CCTL0 |= 0x44; //允许定时器1的通道0中断请求,并且设置为输出比较模式
RedLed_State = 0; //初始化绿灯状态为关闭
EA = 1; //开总使能
}
/*********************************************************************
* 函数名称:startRecWork
* 功 能:启动接收函数入口
* 入口参数:无
* 出口参数:无
* 返 回 值:无
********************************************************************/
void startRecWork(void)
{
ucGainNo = 0;
halSetTimer1Period(uiGainTime[ucGainNo]);
setGain(ucGainNo);
TIMER1_ENABLE_OVERFLOW_INT(TRUE);
IEN1 |=(0x01<<1); //使能Timer1的中断
TIMER1_RUN(TRUE);
HAL_ENABLE_INTERRUPTS(); //使能全局中断
Inhi = 0;
}
另,编译时一直有个warning:(之前P0外部中断时也会有个warning,只是module "hal_key",根据帖子修改完后,就变成了如下)
Warning[w52]: More than one definition for the byte at address 0x4b in common
segment INTVEC. It is defined in module "hal_timer" as well as in module "UltraRec"
求大侠指点!
补充:换过zstack-cc2530-2.5.1a协议栈,问题依旧。
求大侠给点思路,是不是在无线数据收发的时候会使用到T1还是其他方面我考虑漏了?
已经解决。。自己mark 需要屏蔽掉协议栈内的ISR
我也在做 协议栈的T3计时器 裸机中断正常 16次 放入协议栈中断上万次 是哪里需要配置什么吗? 按键中断使能
#ifndef HAL_KEY
#define HAL_KEY FALSE
求解
heng ma1
我也在做 协议栈的T3计时器 裸机中断正常 16次 放入协议栈中断上万次 是哪里需要配??什么吗? 按键中断使能
#ifndef HAL_KEY
#define HAL_KEY FALSE求解
heng ma1
我也在做 协议栈的T3计时器 裸机中断正常 16次 放入协议栈中断上万次 是哪里需要配??什么吗? 按键中断使能
#ifndef HAL_KEY
#define HAL_KEY FALSE求解
没记错的话,需要注释掉hal_timer.c中的
HAL_ISR_FUNCTION( halTimer3Isr, T3_VECTOR )
{
halProcessTimer3 ();
}
函数,重新自己写个ISR函数就可以了。
我的hal_timer.c 啥也没有实现啊 没代码
_PRAGMA(vector = T3_VECTOR) __near_func __interrupt void halTimer3ISR(void); 这是中断声明
HAL_ISR_FUNCTION( halTimer3ISR, T3_VECTOR)
{} 中断函数