|
大家好,我在使用CC2500的过程中出现了一个问题,至今没有办法解决,请各位帮我看看
我的要求是这样的.我使用了4个cc2500的模块分别在 CHANNR=1,3,5,7 (其余配置一样)这几个频点连续发送数据
SIDLE; //进入空闲模式
SFTX; //冲洗发送缓冲
cc2500WriteTxPayload(p); //写入要发送的数据
while(1) //因为要使用最快和紧凑的发送速度,因此在这里使用死循环,不知道这样是不是最快的方法,如果有更快的方法,请大家告诉我
{
STX; //发送数据
while(cc2500_SO_PIN==1); //检测引脚状态
while(cc2500_SO_PIN==0);
SIDLE; //进入空闲模式
SFTX; //冲洗发送缓冲
cc2500WriteTxPayload(p); //写入要发送的数据
}
其中,第一个模块发送的数据为 07 11 22 33 44 55 11
第二个模块发送的数据为 07 11 22 33 44 55 22
第三个模块发送的数据为 07 11 22 33 44 55 33
第四个模块发送的数据为 07 11 22 33 44 55 44
然后使用一个cc2500在CHANNR=1,3,5,7 (其余配置一样)这几个频点上接受,每个频点上接受一定时间,大概示例如下
channr_No=1;
start_scan:
for(i=0;i<2000;i++) //2000次尝试
{
if(cc2500Scanf) //rx是否接收到数据
{ //接受到数据
将接收到的数据放入rx_buff //这里有个断点
if(channr_No==7){ channr_No=1; } //如果频点为7,则将频点跳回到1
esle{channr_No+=2;} //否则,跳到下一个频点接收数据
set_channl_to(channr_No); //切换频点
goto start_scan; //接收到数据了,不需要才循环了,立即开始下个频点的扫描
}
}
//能够执行到这里,说明2000次循环已经完毕,仍然没有接收到数据,超时了,则自动跳转到下一个频点开始扫描
if(channr_No==7){ channr_No=1; } //如果频点为7,则将频点跳回到1
esle{channr_No+=2;} //否则,跳到下一个频点接收数据
set_channl_to(channr_No); //切换频点
goto start_scan; //开始扫描
下面是切换频点的函数
void set_channr_to_x(unsigned char channl_num)
{
//直接使用CHANNR寄存器的地址进行更改
cc2500ConfigRegister(ADDR_CHANNR,channl_num);
}
下面是数据接收检测的函数
unsigned char cc2500Scanf(unsigned char* p)
{
if(cc2500_GDO2_PIN==1){ //为1的时候表示没有数据接收到
return(0);} //返回通知调用函数没有接收到数据
cc2500ReadRxPayload(p,PKTLEN+3); //读出数据以及RSSI,LQI等
cc2500Strobecommand(cc2500_STROBE_SIDLE(0)); //进入空闲模式
cc2500Strobecommand(cc2500_STROBE_SFRX(0)); //冲洗接收缓冲
cc2500Strobecommand(cc2500_STROBE_SRX(0)); //进入接收状态
return(1); //返回通知调用函数已经接收到数据
}
目前有两个问题:
1.有什么方法可以让那4个发射的函数发射数据速度更快些(目前使用的是MSK 500byte),能不能不进入空闲模式和清空发送FIFO,因为我发送的一直是同样的数据
2.我发现我在频点1接收到了数据(07 11 22 33 44 55 11),可以知道这个是1好发射机的,然后我在频点3依然接收到了数据(07 11 22 33 44 55 11),实际数据应该是(07 11 22 33 44 55 22 啊???这里是怎么回事),但是RSSI和频点1的RSSI不一样, 在频点5接收到了数据(07 11 22 33 44 55 22),这里应该是(07 11 22 33 44 55 33),在频点7接收到数据(07 11 22 33 44 55 33) 应该是(07 11 22 33 44 55 44) ,经过观察的结果是,在切换频点后,他总是会接收到上一个频点接收到的数据,不管调用多少次SFRX指令,并且如果将切换的频点设置为一个没有数据的频点(例如频点20),它仍然会接收到上一个频点接收到的同样的数据,请问这是怎么回事,用没有什么解决方法?
|