您需要 登录 才可以下载或查看,没有账号?注册
收藏0 举报
//打开VREG 使能复位 关闭全局中断 配置寄存器 等待晶振起震 void CC2420Init() { unsigned char cc2420Mes[]="cc2420 init is success\n\0"; unsigned char i; // Make sure that the voltage regulator is on, and that the reset pin is inactive SET_VREG_ACTIVE(); //open cc2420 power Delay5ms(2); SET_RESET_ACTIVE(); //enable reset Delay5ms(10); SET_RESET_INACTIVE(); //disable reset Delay5ms(2); // Turn off all interrupts while we're accessing the CC2420 registers DISABLE_GLOBAL_INT();// close all int // Register modifications WriteStrobeReg_spi(CC2420_SXOSCON); //turn on xtal WriteConfigReg_spi(CC2420_MDMCTRL0, 0x0AE2); // Turn off automatic packet acknowledgment WriteConfigReg_spi(CC2420_MDMCTRL1, 0x0500); // Set the correlation threshold = 20 WriteConfigReg_spi(CC2420_IOCFG0, 0x007F); // Set the FIFOP threshold to maximum WriteConfigReg_spi(CC2420_SECCTRL0, 0x01C4); // Turn off "Security enable" // Wait for the crystal oscillator to become stable do { i = WriteStrobeReg_spi(CC2420_SXOSCON); // 开启晶体振荡 DelayXms(100); } while((i&0x40)==0); Printf(cc2420Mes,23); }
/****************************************************************************** * @fn cc2420Send * * @brief * 设置Address函数 * * Parameters: * * @param uint ShortAddress * * @return void * ******************************************************************************/ void SetAddress(unsigned char Number,unsigned int PanID,unsigned int DestAddress,unsigned int MyAddress) { rfSettings.txSeqNumber=Number; rfSettings.panId=PanID; rfSettings.destAddr=DestAddress; rfSettings.myAddr=MyAddress; } /****************************************************************************** * @fn cc2420Send * * @brief * 发送数据 * * Parameters: * * @param uint ShortAddress * * @return void * ******************************************************************************/ void cc2420SendData(unsigned char ModeType) { unsigned char PackLenght,i; unsigned int frameControlField; // Wait until the transceiver is idle while (FIFOP_IN|| SFD_IN); // Turn off global interrupts to avoid interference on the SPI interface DISABLE_GLOBAL_INT(); WriteStrobeReg_spi(CC2420_SFLUSHTX); WriteStrobeReg_spi(CC2420_SFLUSHTX); PackLenght=0; switch(ModeType) { case 0x01: { DataTxFIFO[PackLenght++]=PackLenght; //第一字节为帧长度,不包括长度域本身的字节,但包含帧校验序列2字节 //帧控制域,无安全,确认要求,数据帧,包含16位的目标地址,源地址,目标PAN标识符,源PAN标识符 frameControlField = CC2420_FCF_FRAMETYPE_DATA; frameControlField |= 0 ? CC2420_FCF_ACK_REQUEST : CC2420_FCF_NO_ACK_REQUEST; frameControlField |= CC2420_FCF_INTRAPAN; frameControlField |= CC2420_FCF_DESTADDR_16BIT; frameControlField |= CC2420_FCF_SOURCEADDR_16BIT; DataTxFIFO[PackLenght++]=frameControlField >> 8; ; //高字节 DataTxFIFO[PackLenght++]=frameControlField & 0x00FF; //低字节 DataTxFIFO[PackLenght++]=rfSettings.txSeqNumber;; //Sequence number DataTxFIFO[PackLenght++]=rfSettings.panId >> 8; DataTxFIFO[PackLenght++]=rfSettings.panId & 0x00FF; //目的PAN标识符 DataTxFIFO[PackLenght++]=rfSettings.destAddr >> 8; DataTxFIFO[PackLenght++]=rfSettings.destAddr & 0x00FF; //目的地址 DataTxFIFO[PackLenght++]=rfSettings.myAddr >> 8; DataTxFIFO[PackLenght++]=rfSettings.myAddr & 0x00FF; //源PAN标识符 for (; PackLenght < 20 ;PackLenght++) //有效负载 { DataTxFIFO[PackLenght]=20; } PackLenght++; //CRC DataTxFIFO[0]=PackLenght; break; } case 0x02: { DataTxFIFO[PackLenght++]=PackLenght; //第一字节为帧长度,不包括长度域本身的字节,但包含帧校验序列2字节 //帧控制域,无安全,确认要求,数据帧,包含16位的目标地址,源地址,目标PAN标识符,源PAN标识符 frameControlField = CC2420_FCF_FRAMETYPE_DATA; frameControlField |= 0 ? CC2420_FCF_ACK_REQUEST : CC2420_FCF_NO_ACK_REQUEST; frameControlField |= CC2420_FCF_INTRAPAN; frameControlField |= CC2420_FCF_DESTADDR_16BIT; frameControlField |= CC2420_FCF_SOURCEADDR_64BIT; DataTxFIFO[PackLenght++]=frameControlField >> 8; ; //高字节 DataTxFIFO[PackLenght++]=frameControlField & 0x00FF; //低字节 DataTxFIFO[PackLenght++]=rfSettings.txSeqNumber;; //Sequence number DataTxFIFO[PackLenght++]=rfSettings.panId >> 8; DataTxFIFO[PackLenght++]=rfSettings.panId & 0x00FF; //目的PAN标识符 DataTxFIFO[PackLenght++]=rfSettings.destAddr >> 8; DataTxFIFO[PackLenght++]=rfSettings.destAddr & 0x00FF; //目的地址 for( ; PackLenght < PackLenght + 8 ;PackLenght++) // Source address { DataTxFIFO[PackLenght] = rfSettings.myIEEE[PackLenght-8]; } for (; PackLenght < 20 ;PackLenght++) //有效负载 { DataTxFIFO[PackLenght]=20; } PackLenght++; //CRC DataTxFIFO[0]=PackLenght; break; } case 0x03: { DataTxFIFO[PackLenght++]=PackLenght; //第一字节为帧长度,不包括长度域本身的字节,但包含帧校验序列2字节 //帧控制域,无安全,确认要求,数据帧,包含16位的目标地址,源地址,目标PAN标识符,源PAN标识符 frameControlField = CC2420_FCF_FRAMETYPE_DATA; frameControlField |= 1 ? CC2420_FCF_ACK_REQUEST : CC2420_FCF_NO_ACK_REQUEST; frameControlField |= CC2420_FCF_INTRAPAN; frameControlField |= CC2420_FCF_DESTADDR_64BIT; frameControlField |= CC2420_FCF_SOURCEADDR_16BIT; DataTxFIFO[PackLenght++]=frameControlField >> 8; ; //高字节 DataTxFIFO[PackLenght++]=frameControlField & 0x00FF; //低字节 DataTxFIFO[PackLenght++]=rfSettings.txSeqNumber;; //Sequence number DataTxFIFO[PackLenght++]=rfSettings.panId >> 8; DataTxFIFO[PackLenght++]=rfSettings.panId & 0x00FF; //目的PAN标识符 for( ; PackLenght < PackLenght + 8 ;PackLenght++) //目的地址 { DataTxFIFO[PackLenght] = rfSettings.destIEEE[PackLenght-8]; } DataTxFIFO[PackLenght++]=rfSettings.myAddr >> 8; DataTxFIFO[PackLenght++]=rfSettings.myAddr & 0x00FF; //源PAN标识符 for (; PackLenght < 20 ;PackLenght++) //有效负载 { DataTxFIFO[PackLenght]=20; } PackLenght++; //CRC DataTxFIFO[0]=PackLenght; break; } } Write_TXFIFO(DataTxFIFO,PackLenght); WriteStrobeReg_spi(CC2420_STXON); while (!SFD_IN); while (SFD_IN); // Turn interrupts back on ENABLE_GLOBAL_INT(); }
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
等级类勋章
发帖类勋章
时间类勋章
人才类勋章
15
624
1
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号