📄 cc2420.c
字号:
{
};
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 + -