⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cc2420.c

📁 利用zigbee进行定位的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
			{
                	};
             	 	cc2420_rxbuf[cc2420_rxflag] [i] = SPDR;
            	}
        	}
     
      cc2420fifo_bspi = TRUE;
     
      rfpackernum--;
      cc2420_rxflag++;  
      cc2420_rxflag&=0x01;
      
    }
    os_atomic_end(_nesc_atomic); 
}
  OS_SET_CC_CS_PIN();
  OS_post(&demo_handlepacket);
}

//-------------------------------------------------------------------------
inline  uint8_t cc2420_oscon(void)

{
  uint8_t i;
  uint8_t status;
  bool bXoscOn = FALSE;
  i = 0;
  cc2420_sendcmd(cc2420_SXOSCON);
  while (i < 200 && bXoscOn == FALSE) {
      OS_uwait(100);
      status = cc2420_sendcmd(cc2420_SNOP);
      status = status & (1 << 6);
      if (status) {

        bXoscOn = TRUE;
        }

      i++;
    }
  if (!bXoscOn) {
      printf("osc is unsuccess now\n");
    return FAIL;
    }
  printf("osc is success now\n");
  return SUCCESS;
}

inline uint8_t cc2420_oscoff(void) {
    cc2420_sendcmd(cc2420_SXOSCOFF);   //turn-off crystal
    return SUCCESS;
  }

//--------------------------------------------------------
inline  uint8_t cc2420_VREFOn(void){
    OS_SET_CC_VREN_PIN();                    //turn-on  
    OS_uwait(1800);    
    printf("vref is on now\n");
	return SUCCESS;
  }
inline  uint8_t cc2420_VREFOff(void){
    OS_CLR_CC_VREN_PIN();                    //turn-off  
    OS_uwait(1800);  
	return SUCCESS;
  }
//------------------------------------------------------------------
inline  uint8_t cc2420_enableAutoAck() {
    cc2420_currentparameters[CP_MDMCTRL0] |= (1 << cc2420_MDMCTRL0_AUTOACK);
    return cc2420_writereg(cc2420_MDMCTRL0,cc2420_currentparameters[CP_MDMCTRL0]);
  }

inline  uint8_t cc2420_disableAutoAck() {
    cc2420_currentparameters[CP_MDMCTRL0] &= ~(1 << cc2420_MDMCTRL0_AUTOACK);
    return cc2420_writereg(cc2420_MDMCTRL0,cc2420_currentparameters[CP_MDMCTRL0]);
  }

inline  uint8_t cc2420_enableAddrDecode() {
    cc2420_currentparameters[CP_MDMCTRL0] |= (1 << cc2420_MDMCTRL0_ADRDECODE);
    return cc2420_writereg(cc2420_MDMCTRL0,cc2420_currentparameters[CP_MDMCTRL0]);
  }

inline  uint8_t cc2420_disableAddrDecode() {
    cc2420_currentparameters[CP_MDMCTRL0] &= ~(1 << cc2420_MDMCTRL0_ADRDECODE);
    return cc2420_writereg(cc2420_MDMCTRL0,cc2420_currentparameters[CP_MDMCTRL0]);
  }

//---------------------------------------------------------命令cc2420进入rx模式

inline   uint8_t cc2420_setrxmode(void)

{
  cc2420_sendcmd(cc2420_SRXON);
  return SUCCESS;
}

inline   uint8_t cc2420_settxmode(void)

{
  cc2420_sendcmd(cc2420_STXON);
  return SUCCESS;
}

inline   uint8_t cc2420_settxccamode(void)

{
  cc2420_sendcmd(cc2420_STXONCCA);
  return SUCCESS;
}

inline   uint8_t cc2420_setrfoff(void)

{
  cc2420_sendcmd(cc2420_SRFOFF);
  return SUCCESS;
}


//---------------------------------------------------------设置cc2420 的频道
 inline uint8_t cc2420_setchnl(uint8_t chnl)

{
  int fsctrl;

  fsctrl = 357 + 5 * (chnl - 11);
  cc2420_currentparameters[CP_FSCTRL] = (cc2420_currentparameters[CP_FSCTRL] & 0xfc00) | (fsctrl << 0);
  cc2420_writereg(cc2420_FSCTRL, cc2420_currentparameters[CP_FSCTRL]);
  return SUCCESS;
}

//---------------------------------------------------------设置cc2420短地址,同时写入cc2420
inline uint8_t cc2420_setshortaddress(uint16_t addr)

{
   addr = toLSB16(addr);
   cc2420_writelargeram(cc2420_RAM_SHORTADR, 2, (uint8_t *)&addr);
   printf("shortaddress is set\n");
   return SUCCESS;
}

inline uint8_t cc2420_getshortaddress(uint16_t * addr)

{
     cc2420_readlargeram(cc2420_RAM_SHORTADR, 2, (uint8_t *)addr);
     printf("shortaddress is get\n");
	 return SUCCESS;
}

 inline uint8_t cc2420_setpanid(uint16_t id)
 {
 	id = toLSB16(id);
       cc2420_writelargeram(cc2420_RAM_PANID, 2, (uint8_t *)&id);
       printf("PANID is set\n");
       return SUCCESS;
 }

inline uint8_t cc2420_getpanid(uint16_t * id)

{
     cc2420_readlargeram(cc2420_RAM_PANID, 2, (uint8_t *)&id);
     printf("PANID is get\n");
     return SUCCESS;
}



inline void cc2420_init(void)
{
	cc2420_pin_init();
	SPI_init();
	cc2420_VREFOn();
	OS_CLR_CC_RSTN_PIN();
	OS_uwait(1800);  
	OS_uwait(1800);  
	OS_SET_CC_RSTN_PIN();
	cc2420_oscon();
	cc2420_reginit();
	cc2420_setreg();
       cc2420_rxbuf_now=0;
       cc2420_rxlength_now=0;
	cc2420_rxflag=0;
	cc2420_rxbufuse=0;
	rfpackernum=0;
       printf("cc2420 init is success\n");
}

void restoretask()
{
       uint8_t temp=0;
	if (isready)
		{
			//printf("payload is %04x\n",payload);
			//for (int i=0;i<1000;i++)
       		//	{
       		//
			//		printf(" 0x%02x ",rssi[i]);
       		//	}
			{ os_atomic_t _nesc_atomic = os_atomic_start();
  				  {
      
					extflash_ini();
					printf("\nbegin restore,testnum is %02x\n",testnum);
					
					//for (int i=0;i<264;i++)
	       			//{
	       		
					//	printf(" 0x%02x ",rssi[i]);
	       			//}
					
					
					Memory_Pageprogram_throuth_Buffer(Main_Program_through_Buffer1, pagenum++, 0x0000,264,&rssi[0]);
					
					while(!(Status_Register_Get()&0x80));
					//
					Main_Memory_PageRead(pagenum-1, 0x0000, test, 264);
					while(!(Status_Register_Get()&0x80));
					for (int i=0;i<264;i++)
					       	{
					       		printf("\ntestnum%02x-page%04x is -%02x-",testnum,pagenum-1,test[i]);
					        	}    
		                    //
		                     printf("\nbegin restore1\n");
					
					Memory_Pageprogram_throuth_Buffer(Main_Program_through_Buffer1, pagenum++, 0x0000,264,&rssi[264]);
					while(!(Status_Register_Get()&0x80));
					//
					Main_Memory_PageRead(pagenum-1, 0x0000, test, 264);
					while(!(Status_Register_Get()&0x80));
					for (int i=0;i<264;i++)
					       	{
					       		printf("\ntestnum%02x-page%04x is -%02x-",testnum,pagenum-1,test[i]);
					        	}    
					//
					printf("\nbegin restore2\n");
					Memory_Pageprogram_throuth_Buffer(Main_Program_through_Buffer1, pagenum++, 0x0000,264,&rssi[264+264]);
				       while(!(Status_Register_Get()&0x80));
					 //
					Main_Memory_PageRead(pagenum-1, 0x0000, test, 264);
					while(!(Status_Register_Get()&0x80));
					for (int i=0;i<264;i++)
					       	{
					       		printf("\ntestnum%02x-page%04x is -%02x-",testnum,pagenum-1,test[i]);
					        	}    
					//
					   printf("\nbegin restore3\n");
				       Memory_Pageprogram_throuth_Buffer(Main_Program_through_Buffer1, pagenum++, 0x0000,210,&rssi[264+264+264]);
				       while(!(Status_Register_Get()&0x80));
					 //
					Main_Memory_PageRead(pagenum-1, 0x0000, test, 264);
					while(!(Status_Register_Get()&0x80));
					for (int i=0;i<210;i++)
					       	{
					       		printf("\ntestnum%02x-page%04x is -%02x-",testnum,pagenum-1,test[i]);
					        	}    
					//
					
					//while(!(Status_Register_Get()&0x80));
				}
			  os_atomic_end(_nesc_atomic); }
			
                     isready=0;
			payload=0;
			for (int i=0;i<1003;i++)
			       	{
			       		
						rssi[i]=0;
			       	}
			Leds_greenOff();
			Leds_redOff();
		       Leds_yellowOn();
		
			cc2420_setrxmode();
		}
}
void demo_handlepacket(void) //数据包处理程序
{
       uint8_t num,i,flag;
	uint8_t packetlength=0,linkquality=0,linkuntosink=0,linkuntosink1=0,linkuntosink2=0;
	uint16_t tempindex=0;
	
	//printf("\n-b-\n");
	flag=(cc2420_rxflag+cc2420_rxbufuse)&0x01;
	cc2420_rxbuf_now=cc2420_rxbuf[flag];
	packetlength=cc2420_rxbuf_now[0];
//	printf("packetlength=%02d,",packetlength);
/*	linkquality=cc2420_rxbuf_now[packetlength-1];
	linkuntosink=cc2420_rxbuf_now[packetlength-4];
	linkuntosink1=cc2420_rxbuf_now[packetlength-3];  //singnal strenth of the node 3 or 2
	linkuntosink2=cc2420_rxbuf_now[packetlength-2];

	tempindex=(cc2420_rxbuf_now[packetlength-2]<<8)+cc2420_rxbuf_now[packetlength-3];

	linkquality=~linkquality;//change fu shu wei shi jin zhi 
*/	
//	printf("-%02d\n",linkquality);
//	printf("[packetlength-7]=%x,",cc2420_rxbuf_now[packetlength-7]);
//	printf("[packetlength-8]=%x,",cc2420_rxbuf_now[packetlength-8]);
//	printf("[packetlength-5]=%x,",cc2420_rxbuf_now[packetlength-5]);
//	printf("[packetlength-6]=%x,",cc2420_rxbuf_now[packetlength-6]);
	if ((cc2420_rxbuf_now[packetlength-5]==0x01)&&frst) //&&frst
		{
//		linkquality=~linkquality;//change fu shu wei shi jin zhi 
	//	linkquality=linkquality-0x1e;//change dBm to dB
	//	printf("-%02d,",linkquality);
		scd=1;
		frst=0;
		linkquality=cc2420_rxbuf_now[packetlength-1];
		linkquality=~linkquality;//change fu shu wei shi jin zhi 				
		printf("a%d",linkquality);

		}
	else if((cc2420_rxbuf_now[packetlength-5]==0x02)&&scd)
		{
//		linkquality=~linkquality;//change fu shu wei shi jin zhi 
//		linkquality=linkquality-0x1e;//change dBm to dB
		linkuntosink1=cc2420_rxbuf_now[packetlength-3];  //singnal strenth of the node 3 or 2
		printf("b%d",linkuntosink1);
		trd=1;
		scd=0;
		}
	else if ((cc2420_rxbuf_now[packetlength-5]==0x03)&&trd)
		{
//		linkquality=~linkquality;//change fu shu wei shi jin zhi 
//		linkquality=linkquality-0x1e;//change dBm to dB
		linkuntosink2=cc2420_rxbuf_now[packetlength-3];  //singnal strenth of the node 3 or 2
		printf("c%dd",linkuntosink2);
		trd=0;
		frst=1;
		}
		
       /*if (tempindex<1000) //delete on 7.14
       	{
       		payload++;
		//	rssi[paktnum]=linkquality;
			rssi[tempindex+3]=linkquality;
			rssi[1]=payload&0xff;
			rssi[2]=(payload>>8)&0xff;
			free(cc2420_rxbuf[flag]);
			
			Leds_greenToggle();
			Leds_redOff();
		       Leds_yellowOff();
			paktnum=paktnum+1;
			
       	}
	else if (tempindex==1024)
		{
			Leds_greenOff();
			Leds_redToggle();
		       Leds_yellowOff();
			free(cc2420_rxbuf[flag]);
			tend++;
			if ((tend>100)&&(payload>50))
				{
					cc2420_setrfoff();
					printf("transmit is end\n");
				       Leds_greenOn();
					Leds_redOn();
				       Leds_yellowOff();
					//Timer3_intDisable();
					isready=1;
					printf("isready is set to 1");
					
					rssi[0]=testnum;
					testnum++;
//					OS_post(&restoretask);  //restore the receive data
					tend=0;
					Leds_greenOn();
				}
		
		}
	else 
		{
			printf("\n---lajibao!----\n");
			free(cc2420_rxbuf[flag]);
			
		}
*/	
	Leds_greenToggle();
	Leds_redOff();
	Leds_yellowOff();
	free(cc2420_rxbuf[flag]); //add on 7.14
	cc2420_rxbufuse--;
	if  ((cc2420_rxbufuse==0) && (rfpackernum!=0))
		{
		   cc2420_rxbufuse++;
		   OS_post(&cc2420_readrxfifo);
		}
	cc2420_rxbuf[flag]=NULL;
	

	

}
	



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -