微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > cc2530带协议栈无法进入T1中断服务程序,裸机可行

cc2530带协议栈无法进入T1中断服务程序,裸机可行

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

协议栈版本: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)

{}              中断函数

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

网站地图

Top