• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > CC2530数据收发,中断只能实现一次。

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

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了cc2530中文数据手册,cc2530数据手册,cc2530英文数据手册,cc2530中文数据,cc2530无线收发程序等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: CC2530 数据收发,中断只能实现一次。
描述:

CC2530RF中断 CC2530RF中断射频c

各位仁兄,我想通过最低层的寄存器操作,在节点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];
}
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • CC2530程序烧写,显示ErrorinHEXfileverification
  • CC2530数据收发,中断只能实现一次。
  • cc2530终端节能的一些问题
  • 点亮cc2530上led灯的问题,很简单很简单

相关文章

  • 2017-06-05 高分问:linux对于符合vesa标准的显卡,是如何驱动的呢?如何让驱动通用呢?
  • 2017-06-05 FPGA设计中如何减小clockskew
  • 2017-06-17ARM和嵌入式裸机编程入门建议
  • 2017-06-05 非root用户修改给自己用的DNS
  • 2017-06-17中断控制器
  • 2017-06-05 usb接口如何发送数据
  • 2017-06-05 触控屏触控的点可以是无限个吗?
  • 2017-06-05 请教:NORFlash(intel)驱动问题,谢谢~
  • 2017-06-05 iTOP4412能在WIN10上用吗
  • 2017-06-05 请帮我看一下这个程序,是哪里出错了?新手什么都不懂

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 请前辈们给介绍几本windows下驱动开发的经典书籍,谢谢!
    • 如何将HC6800EM3上LCD显示出来的数据通过R232传输到电脑上
    • wince数据库读写对CAN读写的影响
    • ZigBee中的各种key的用途?
    • 请问游戏摇杆的油门踏板什么原理呢?
    • stm32f303调试模式下程序正常跑,下载后再跑就出错
    • 我想调别人驱动sys里的callback函数;请问有那位达人知道这种方法行的统不;
    • 不使用windows专有的api函数有没有可能访问硬盘指定扇区数据
    • 嵌入开发该掌握哪些基础呢
    • 安装MiniGUI安装成功,执行官方mg-samples-3012targz中的例子,出现libminigui_ths-30so12

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有