CC2530 数据收发,中断只能实现一次。

ninesuns02 2013-06-05 09:27:42
各位仁兄,我想通过最低层的寄存器操作,在节点1上发送数据,在节点2上通过中断读取数据。可是,现在的问题是,节点2只能发生一次中断,通过调试,可知这次中断中读到的数据是正确的,但之后再没有中断发生。请大侠帮我看看是什么地方的问题。节点1和节点2的程序如下,节点1发送,2接收。

#include "ioCC2530.h"
#define led1 P1_0
#define led2 P1_4

#define uint8 unsigned char
#define uint16 unsigned int

#define RF_FCF_NOACK 0x8841 //不要求应答
#define RF_FCF_ACK 0x8861 //要求接收方发送应答帧
#define RF_NOACK_FLAGE 1 //不要求应答标志
#define dest_PanID 0x0001
#define dest_Addr 0x0001
#define src_PanID 0x0001
#define src_Addr 0x0002

static uint8 RfPktHdr_Length=12;
static uint8 buf[128];
uint8 len=0; //帧长度
static uint8 Len_Frame=0; //帧长度
static uint8 rxMpdu[128]; //帧数据

typedef struct {
uint8 packetLength; //包的长度
uint8 fcf0; // Frame control field LSB帧控制域低字节
uint8 fcf1; // Frame control field MSB帧控制域高字节
uint8 seqNumber; //序列号
uint16 destPanId; //目的PANID
uint16 destAddr; //目的地址
uint16 srcPanId; //源PANID
uint16 srcAddr; //源地址

} RfPktHdr_t;

void tx();
void delay(uint16 time)
{
uint16 i,j;
for(i=0;i<=time;i++)
{
for(j=0;j<=200;j++)
{}
}

}

void rf_init()//初始化
{
FRMCTRL0 |= (0x20 | 0x40); /* AUTO_ACK | AUTO_CRC */

TXFILTCFG = 0x09;
AGCCTRL1 = 0x15;
FSCAL1 = 0x00;

/* enable RXPKTDONE interrupt */
RFIRQM0 |= (1<<6);
/* enable general RF interrupts */
IEN2 |= (1<<0);

FREQCTRL = 0x0b; /* channel 11 */

SHORT_ADDR0 = 0x05;
SHORT_ADDR1 = 0x00;
PAN_ID0 = 0x22; /* MUST set, or even can't receive broadcast message */
PAN_ID1 = 0x00;

RFST = 0xed; /* ISFLUSHRX */ //
RFST=0xEC;
RFST = 0xe3; /* ISRXON */
delay(120);
FRMFILT0&=~(1<<0);//禁止帧过滤
RFST = 0xEC;//ISFLUSHRX()
RFST = 0xE3;//ISRXON()

}

#pragma vector=RF_VECTOR
__interrupt void rf_isr(void) //节点2中的主要功能函数
{
unsigned char e, i;

e = EA;
EA = 0; /* disable global interrupt */

if (RFIRQF0 & (1<<6)) {
len = RFD;
len &= 0x7f;
for (i = 0; i < len; i++) {
buf[i] = RFD;
}
buf[i]='\0';
led1 =!led1;

}
RFIRQF0 &= ~0x40; /* clear RXPKTDONE interrupt */
S1CON &=~0x03; /* clear general RF interrupt flag */
// IEN2 &=~(1<<0);
RFST=0xEC;
EA = e; /* restore global interrupt state */
// tx();
}

uint8 MakeFrame(uint8 *data,uint8 length,uint8 seqNumber)//节点1发送前组帧
{
RfPktHdr_t *RfHead;//帧头
uint16 fcf;
uint8 i;
RfHead=(RfPktHdr_t*)rxMpdu;
Len_Frame=RfPktHdr_Length+length;//帧的长度
RfHead->packetLength=Len_Frame;
fcf=(RF_NOACK_FLAGE) ? RF_FCF_NOACK : RF_FCF_ACK;
RfHead->fcf0= fcf & 0xff;
RfHead->fcf1= (fcf>>8) & 0xff;
RfHead->seqNumber=seqNumber;
RfHead->destPanId=dest_PanID;
RfHead->destAddr=dest_Addr;
RfHead->srcPanId=src_PanID;
RfHead->srcAddr=src_Addr;
for(i=0;i<length;i++)
{
rxMpdu[RfPktHdr_Length+i]=data[i];//帧数据中接入实际数据
}
return Len_Frame;


}

void tx()//发送函数
{
unsigned char i;

RFST = 0xe3; /* ISRXON */
/* wait for SFD not active and TX_Active not active */
while (FSMSTAT1 & ((1<<1) | (1<<5))); /* TX_ACTIVE | SFD */
RFIRQM0 &= ~(1<<6); /* disable RXPKTDONE interrupt */
IEN2 &= ~(1<<0); /* disable general RF interrupts */

RFST = 0xee; /* ISFLUSHTX */
RFIRQF1 = ~(1<<1); /* clear TXDONE interrupt */
//RFD = 0xA7; /* the first byte to TX is the length of the frame */
for (i = 0; i < len; i++) {
RFD = rxMpdu[i];
}

/* trun on RX interrupt */
RFIRQM0 |= (1<<6);
IEN2 |= (1<<0);

RFST = 0xe9; /* ISTXON */
while (!(RFIRQF1 & (1<<1))); /* waiting for transmission to finish */
RFIRQF1 = ~(1<<1); /* clear TXDONE interrupt */

}

void main(void)
{
uint16 i=0;
uint16 j=0;
P1SEL &= ~(1<<0); //P1为普通 I/O 口
P2SEL &= ~(1<<0);
P1DIR |= 0x01; //P1.0 输出
led1=0;
EA = 0;
/* set main clock source to 32MHz */
SLEEPCMD &= ~0x04;
while(!(SLEEPSTA & 0x40));
CLKCONCMD &= ~0x47;
SLEEPCMD |= 0x04;
buf="123421321414141244";
rf_init();


len=MakeFrame(buf,18,0);
EA = 1; /* enable global interrupt */

while(1) {
/******************下面这些程序是发送节点1中的**************/
//led1=!led1;
tx();
for(i=0;i<10000;i++){
for(j=0;j<=100;j++)
{}
}
/******************上面这些程序是发送节点1中的**************/
}
}
...全文
2553 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloudreaching 2015-09-15
  • 打赏
  • 举报
回复
我特意登录上来谢谢你!同样的问题得以解决,真心谢谢!
gaze205 2015-03-13
  • 打赏
  • 举报
回复
我也是可以说一下吗,谢谢了。QQ506772258
aadyx2010 2013-07-04
  • 打赏
  • 举报
回复
楼主您好,我也遇到了相同的问题,但是没有解决,您能帮忙指导一下吗?不胜感激,我QQ814955458
aadyx2010 2013-07-04
  • 打赏
  • 举报
回复
您好楼主,我碰到了相同的问题,但是没有解决,您能帮忙知道一下吗?我QQ814955458
ninesuns02 2013-06-08
  • 打赏
  • 举报
回复
快来领分呀,先来先得,
ninesuns02 2013-06-07
  • 打赏
  • 举报
回复
问题解决,快来领分哪。 解决方法:EC改为ED即可 谢谢大神:麦田守望者
lbing7 2013-06-07
  • 打赏
  • 举报
回复
LZ靠谱哈,问题解决了还会回过头来说清楚 不像有些人,问的时候就急,解决了就跑
目录 第1章 ZigBee技术概述 1.1 ZigBee技术的演变与进展1 1.1.1 ZigBee技术的由来2 1.1.2 ZigBee技术的发展历程2 1.2 ZigBee技术特点5 1.3 ZigBee2007/PRO特性6 1.3.1 ZigBee与ZigBee PRO比较6 1.3.2 不同ZigBee版本的兼容分析8 1.4 ZigBee无线网络使用频谱和ISM开放频带16 1.5 ZigBee技术的广阔应用前景17 第2章 低功耗微控制器MSP430与ZigBee芯片CC2520 2.1 低功耗微控制器MSP43022 2.1.1 关键特性22 2.1.2 MSP430模块化架构23 2.1.3 16位RISC先进CPU24 2.1.4 超低功耗性能25 2.1.5 灵活的时钟系统26 2.1.6 智能外设27 2.1.7 MSP430应用29 2.2 MSP430F2618简介29 2.2.1 MSP430F2xxx介绍30 2.2.2 MSP430F2618特性30 2.3 ZigBee芯片CC252031 2.3.1 CC2520的特性32 2.3.2 CC2520引脚描述34 2.3.3 CC2520与CC2420的区别35 2.3.4 CC2520典型设计36 第3章 ZigBee无线网络多功能开发系统 3.1 无线网络ZigBee开发系统平台选择39 3.1.1 如何选择嵌入式无线开发工具和平台40 3.1.2 需要的设备和必要条件42 总结43 3.2 多功能可视化ZigBee无线网络开发系统C51RF3PK44 3.2.1 C51RF3PK仿真器44 3.2.2 网络液晶扩展板45 3.2.3 C51RF3PK电池板51 3.2.4 ZigBee模块53 3.3 图形化ZigBee2007开发系统56 3.3.1 ZigBee模块CC252057 3.3.2 网络液晶扩展板58 3.4 ZigBee软件集成开发平台63 3.4.1 IAR集成开发环境的安装65 3.4.2 添加文件或新建程序文件72 3.4.3 设置工程选项参数74 3.4.4 编译、链接、下载78 3.4.5 仿真调试79 第4章 ZigBee开发入门 4.1 认识ZigBee协议栈88 4.2 ZigBee网络数据传输90 4.2.1 实验目的90 4.2.2 ZigBee数据传输原理解析90 4.2.3 实验设备准备110 4.3 ZigBee协议栈编译/下载111 4.3.1 设备选择及设置111 4.3.2 编译/下载程序112 4.4 ZigBee源代码剖析113 4.4.1 发送一个信息包113 4.4.2 收发数据过程113 4.4.3 接收一个信息包116 4.5 实验流程117 4.5.1 流程图117 4.5.2 路由器代码118 4.5.3 协调器代码120 4.6 ZigBee分析仪分析ZigBee数据包121 4.6.1 协议分析仪121 4.6.2 ZigBee数据格式122 4.6.3 加入网络数据分析125 4.6.4 收发数据分析126 4.7 实验效果128 第5章 ZigBee无线网络开发进阶 5.1 ZigBee协议栈结构129 5.2 ZigBee协议栈实时操作系统132 5.2.1 OS术语介绍132 5.2.2 OSAL API介绍133 5.2.3 OSAL任务142 5.3 ZigBee2006应用接口144 5.3.1 实验目的144 5.3.2 原理介绍144 5.3.3 软件准备SAPI介绍145 5.4 网络形成145 5.4.1 协调器格式化网络146 5.4.2 路由器和终端设备加入网络146 5.4.3 ZDO_StartDevice147 5.5 绑定148 5.5.1 绑定表格149 5.5.2 绑定建立151 5.5.3 绑定解除156 5.6 命令156 5.6.1 命令定义及使用156 5.6.2 串159 5.6.3 ZCL介绍159 5.6.4 Profile介绍160 5.7 灯光控制实验165 5.7.1 APP函数分析165 5.7.2 灯光控制实验过程176 5.7.3 实验总结178 5.8 无线温度传感器实验179 5.8.1 设备179 5.8.2 命令180 5.8.3 发现和绑定180 5.8.4 数据包发送和接收181 第6章 ZigBee2007/PRO入门 6.1 ZigBee2007/PRO入门实验185 6.2 实验设备185 6.2.1 硬件介绍185 6.2.2 硬件组成186 6.3 实验基础知识186 6.3.1 ZigBee2007简介186 6.3.2 ZigBee2007/PRO协议栈简介187 6.3.3 ZigBee设备在Zstack中的体现189 6.4 实验内容191 6.4.1 建立任务192   6.4.2 按键处理函数197   6.4.3 发送函数198   6.4.4 接收处理函数200  6.5 实验步骤和结果200   6.5.1 建立网络200   6.5.2 路由设备加入网络202   6.5.3 发送数据203   6.5.4 退出小组203   6.5.5 加入小组203  6.6 实验拓展204   6.6.1 项目分析204   6.6.2 协调器函数的设计204   6.6.3 路由器设备函数设计205  6.7 实验总结206 第7章 ZigBee2007/PRO进阶  7.1 实验目的207  7.2 实验设备207   7.2.1 硬件介绍207   7.2.2 硬件组成208   7.2.3 ZigBee2007协议栈208  7.3 实验基础知识209   7.3.1 ZigBee PRO简介209   7.3.2 ZigBee PRO中的路由210   7.3.3 ZigBee PRO新功能211   7.3.4 信息包格式211  7.4 实验内容212   7.4.1 初始化任务213   7.4.2 任务处理215   7.4.3 UART_RX_CB_EVT事件219   7.4.4 串口发送函数222   7.4.5 串口接收中断函数223   7.4.6 串口读取函数224   7.4.7 ZigBee发送函数225   7.4.8 ZigBee接收处理函数226  7.5 实验步骤和现象228   7.5.1 建立网络228   7.5.2 路由设备加入网络229   7.5.3 查看网络中节点230   7.5.4 配置地址231   7.5.5 收发数据231  7.6 实验总结233 第8章 ZigBee2007/PRO高级应用——家庭自动化  8.1 家庭自动化概念234  8.2 ZigBee2007/PRO的家庭自动化236  8.3 家庭自动化实验目的236  8.4 家庭自动化体系236  8.5 实验设备237  8.6 家庭自动化实验工程238  8.7 家庭自动化工程剖析239   8.7.1 实验操作流程图240   8.7.2 灯和控制器主函数程序流程图240   8.7.3 其他初始化关键函数242   8.7.4 网络状态变化函数243   8.7.5 绑定相关函数246  8.8 操作系统250   8.8.1 操作系统关键参数251   8.8.2 操作系统关键函数252  8.9 灯设备关键任务256  8.10 控制器关键任务260  8.11 实验操作步骤265  8.12 家庭自动化例程总结268 第9章 ZigBee2007无线传感器网络  9.1 无线传感器网络概述269   9.1.1 什么是无线传感器网络269   9.1.2 无线传感器网络现状270   9.1.3 ZigBee在无线传感器网络上的应用272   9.1.4 ZigBee无线传感器网络系统特点272  9.2 ZigBee2007无线传感器网络实验概述273  9.3 ZigBee2007无线传感器网络硬件设计274   9.3.1 网关底板设计275   9.3.2 传感器底板设计276  9.4 网关与PC机的数据连接281  9.5 ZigBee2007无线传感器网络建立与网络管理287   9.5.1 网络通信过程介绍287   9.5.2 网关网络节点的地址管理288  9.6 网关与节点间的无线采集过程293  9.7 程序编译、下载303  9.8 实验效果304 附录A 网络层所定义的特性常量311 附录B 网络层信息库属性312 参考文献315
软件编程规范培训实例与练习 软件编程规范培训实例与练习  问题分类 1 逻辑类问题(A类)-指设计、编码中出现的计算正确性和一致性、程序逻辑控制等方面出现的问题,在系统中起关键作用,将导致软件死机、功能正常实现等严重问题; 接口类问题(B类)-指设计、编码中出现的函数和环境、其他函数、全局/局部变量或数据变量之间的数据/控制传输不匹配的问题,在系统中起重要作用,将导致模块间配合失效等严重问题; 维护类问题(C类)-指设计、编码中出现的对软件系统的维护方便程度造成影响的问题,在系统中不起关键作用,但对系统后期维护造成不便或导致维护费用上升; 可测试性问题(D类)-指设计、编码中因考虑不周而导致后期系统可测试性差的问题。  处罚办法 问题发生率: P=D/S D=DA+0.5DB+0.25DC 其中: P -问题发生率 D -1个季度内错误总数 DA -1个季度内A类错误总数 DB -1个季度内B类错误总数 DC -1个季度内C类错误总数 S -1个季度内收到问题报告单总数 1)当D≥3时,如果P≥3%,将进行警告处理,并予以公告; 2)当D≥5时,如果P≥5%,将进行罚款处理,并予以公告。 目 录 一、逻辑类代码问题 第5页 1、变量/指针在使用前就必须初始化 第5页 【案例1.1.1】 第5页 2、防止指针/数组操作越界 第5页 【案例1.2.1】 第5页 【案例1.2.2】 第6页 【案例1.2.3】 第7页 【案例1.2.4】 第8页 3、避免指针的非法引用 第9页 【案例1.3.1】 第9页 4、变量类型定义错误 第10页 【案例1.4.1】 第10页 5、正确使用逻辑与&&、屏蔽&操作符 第17页 【案例1.5.1】 第17页 6、注意数据类型的匹配 第18页 【案例1.6.1】 第18页 【案例1.6.2】 第18页 7、用于控制条件转移的表达式及取值范围是否书写正确 第20页 【案例1.7.1】 第20页 【案例1.7.2】 第21页 【案例1.7.3】 第22页 8、条件分支处理是否有遗漏 第24页 【案例1.8.1】 第24页 9、引用已释放的资源 第26页 【案例1.9.1】 第26页 10、分配资源是否已正确释放 第28页 【案例1.10.1】 第28页 【案例1.10.2】 第29页 【案例1.10.3】 第30页 【案例1.10.4】 第32页 【案例1.10.5】 第33页 【案例1.10.6】 第35页 【案例1.10.7】 第38页 11、防止资源的重复释放 第39页 【案例1.11.1】 第39页 12、公共资源的互斥性和竞用性 第40页 【案例1.12.1】 第40页 【案例1.12.2】 第40页 二、接口类代码问题 第43页 1、对函数参数进行有效性检查 第43页 【案例2.1.1】 第43页 【案例2.1.2】 第43页 【案例2.1.3】 第44页 【案例2.1.4】 第46页 【案例2.1.5】 第47页 【案例2.1.6】 第48页 2、注意多出口函数的处理 第49页 【案例2.2.1】 第49页 三、维护类代码问题 第51页 1、 统一枚举类型的使用 第51页 【案例3.1.1】 第51页 2、 注释量至少占代码总量的20% 第51页 【案例3.2.1】对XXX产品BAM某版本部分代码注释量的统计 第51页 四、产品兼容性问题 第52页 1、系统配置、命令方式 第52页 【案例4.1.1】 第52页 【案例4.1.2】 第53页 2、设备对接 第54页 【案例4.2.1】 第54页 3、其他 第55页 【案例4.3.1】 第55页 五、版本控制问题 第58页 1、新老代码中同一全局变量不一致 第58页 【案例5.1.1】 第58页 六、可测试性代码问题 第59页 1、调试信息/打印信息的正确性 第59页 【案例6.1.1】 第59页 一、逻辑类代码问题 1、变量/指针在使用前就必须初始化 【案例1.1.1】 C语言中最大的特色就是指针。指针的使用具有很强的技巧性和灵活性,但同时也带来了很大的危险性。在XXX的代码中有如下一端对指针的灵活使用: ... ... _UC *puc_card_config_tab; ... ... Get_Config_Table(

3,846

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 无线
社区管理员
  • 无线
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧