This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于CC2530 频繁复位问题

Other Parts Discussed in Thread: CC2530, CC2592

 大家好,很着急的一个项目,用的裸机跑CC2530的RF,CC2530一直处于接收状态,每隔300毫秒左右对CC2530的频率改变一次,

运行可以运行,但是很奇怪的是运行一会儿就自动的复位到main入口了。然后调试了2天之后发现CSP,会不会是因为对CSP

操作引起了PC指针混乱了。跪求各位大侠帮帮忙,告诉小弟  怎样切换频率 流程才正确。下面是小弟的程序。


static void rf_init(void)
{
RFIRQM0 &= ~(1<<6);
IEN2 &= ~(1<<0);

CCACTRL0 = 0xF8;//0xF8
CCACTRL1 = 0x1A; //0x1A

//FRMFILT0 - 帧过滤
FRMFILT0 = 0x0c; //禁止所有的过滤功能,可读全部的接受包
//FRMFILT1 - 帧过滤 0x78
FRMFILT1 = 0x78;

FSCAL0 = 0x24;
FSCAL2 = 0x20;
FSCAL3 = 0x2A;
AGCCTRL2 = 0XFE;//0XFE

//CC2530 Registers for CC2592 Control
TXFILTCFG = 0x09;
AGCCTRL1 = 0X15;//0X15
FSCAL1 = 0x00;
RFC_OBS_CTRL0 = 0x68;
RFC_OBS_CTRL1 = 0x6a;

TXPOWER = 0xD5 ; // 发射功率为0dbm

OBSSEL1 = 0xFB;
OBSSEL0 = 0xfc;

RFIRQM0 |= (1<<6);
IEN2 |= (1<<0);

}

static void rf_set_channel(unsigned char xch)
{
EA=0;

RFST = 0XEF;
RFST = 0xED;
RFST = 0xEE;

RFST = ISRFOFF;

FREQCTRL = xch;

halMcutUs(200);

RFST = ISRXON;

RFIRQM0 |= (1<<6);
IEN2 |= (1<<0);

EA=1;
}

static void rf_receive_isr(void)
{
unsigned char insert=0;
unsigned char becon[7]={0};
int rf_rx_len = 0;
rf_rx_len = RFD; // 长度去除两字节附加结果
rf_rx_len &= 0x7F;
for(int i=0; i< rf_rx_len&& rf_rx_len < 128; i++)
{
becon[i]= RFD; //连续读取接收缓冲区内容
}

RFST = 0xED; // 清除RF接收缓冲区 ISFLUSHRX

}


#pragma vector=RF_VECTOR
__interrupt void rf_isr(void)
{
rx_irq_off();
if (RFIRQF0 & ( 1<<6 ))
{
rf_receive_isr(); // 调用接收中断处理函数
S1CON = 0; // 清除RF中断标志
RFIRQF0 &= ~(1<<6); // 清除RF接收完成数据包中断
}
//RFERRF
rx_irq_on();
}