小弟初学cc2530,有些地方搞的不太懂
我用的ISTXONCCA立即选通指令,测出FSMSTAT1寄存器的值是0x0A,查了一下数据手册,CCA为0,SAMPLED_CCA为1,TX_ACTIVE为1,表示CCA通过。但是读取了RSSI寄存器的值是0x80,数据手册上说这是无效值。所以我想问,CCA算通过了吗。
如果去掉ISTXONCCA指令,FSMSTAT1的值是0x15,RSSI是0x1e。请问读取的RSSI寄存器值如何转成dB的形式。
最后,最关键的就是我用了while(!(RFIRQF1 & 0x02) ); 语句来检测发送中断,该语句通过了表示产生了Tx中断。是不是表示成功发送了数据。那么为什么我用A,B节点同时给C发送数据,A,B都产生发送中断,而C只能接收到1个(如果A,B不是同时发,有细微时间差,C就能接收到两个),这是否表示发生了冲突,如果发生冲突,为什么CCA却一直显示信道空闲呢?有没有可能是接收端错误
附上发送数据部分的源代码
void rfsend(UINT8* pData,UINT8 length)
{
UINT8 i;
UINT8 s;
RFIRQF1&=~0x02;
ISRFOFF;
ISFLUSHRX;
ISFLUSHRX;
RFIRQF0 = ~0x02;
RFIRQF1 &= ~0x01;
ISFLUSHTX; // Making sure that the TX FIFO is empty.
CCACTRL0=0xF8;
CCACTRL1=0x0A;
RFD = length + 2;
// Inserting data
for(i=0;i<length;i++){
RFD = *(pData+i);
}
UINT8 ccaRetries=4;
while(1)
{
ISRXON;
while(!(RSSISTAT & 0x01));//等待RSSI稳定
s=EA;
EA=0;
ISTXONCCA;
if(FSMSTAT1 & 0x02)
{
//确认发送完成
break;
}
else
{
if (ccaRetries == 0)
{
break;
}
else
{
ccaRetries--;
//关闭Rx模式
// RFIM &= ~0x20;
ISRFOFF;
ISFLUSHRX;
ISFLUSHRX;
// RFIF = ~0x20;
//退避
}
}
}
while(!(RFIRQF1 & 0x02) ); // 等待发送完成
RFIRQF1&=~0x02;
ISRXON;
}
希望能指出错误,不甚感激