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();
}