Skip to content

Commit dac4737

Browse files
authored
Add files via upload
share hopping code
1 parent 3fd8476 commit dac4737

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

跳频算法.c

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/*
2+
* 函数名:
3+
Data_Frequency_Channel_Choose -RADIO
4+
* 参数:
5+
* -无
6+
* 返回值:
7+
* -无
8+
Data_frequency_map.Channel_Map[4] 40 通道 每8个通道一组,总共5组
9+
*/
10+
void Data_Frequency_Channel_Choose(void)
11+
{
12+
Data_frequency_map.Current_unmappedChannel = (Data_frequency_map.Last_UnmappedChannel + Data_frequency_map.Hop_Increment) % 37 ;
13+
//这里得到的是接下来的频率通道号,能不能用?需要和 MAP 进行比较
14+
Data_frequency_map.Last_UnmappedChannel = Data_frequency_map.Current_unmappedChannel ; //上一次的频道等于当前频道
15+
while(1)
16+
{
17+
if (Data_frequency_map.Current_unmappedChannel < 8) //从第 0 个频道字节确定那个能用
18+
{
19+
if( (Data_frequency_map.Channel_Map[0] >> Data_frequency_map.Current_unmappedChannel)& 0x01 ) //如果这个频道是可用的
20+
{
21+
Data_frequency_map.Current_Frequency_value = Data_frequency_map.Current_unmappedChannel ;
22+
//得到真正的频率,可以直接赋值给 NRF_RADIO->FREQUENCY 寄存器
23+
break; // 找到了可用的频道 并计算得到了实际寄存器的频率值后跳出循环
24+
}
25+
else //这个频道不可用需要重新映射
26+
{
27+
Data_frequency_map.Current_unmappedChannel=Data_frequency_map.Used_Channels[Data_frequency_map.Current_unmappedChannel \
28+
% Data_frequency_map.Num_UsedChannels] ;
29+
//这里得到的是接下来的频率通道号,能不能用?需要和 MAP 进行比较
30+
}
31+
}
32+
else if(Data_frequency_map.Current_unmappedChannel < 16)//从第 1 个频道字节确定那个频道能用
33+
{
34+
if((Data_frequency_map.Channel_Map[1] >> (Data_frequency_map.Current_unmappedChannel- 8)) & 0x01 ) //如果这个频道是可用的
35+
{
36+
Data_frequency_map.Current_Frequency_value = Data_frequency_map.Current_unmappedChannel ;
37+
//得到真正的频率,可以直接赋值给 NRF_RADIO->FREQUENCY 寄存器
38+
39+
break; // 找到了可用的频道并计算得到了实际寄存器的频率值后跳出循环
40+
}
41+
else //这个频道不可用需要重新映射
42+
{
43+
Data_frequency_map.Current_unmappedChannel=Data_frequency_map.Used_Channels[Data_frequency_map.Current_unmappedChannel \
44+
% Data_frequency_map.Num_UsedChannels] ;
45+
//这里得到的是接下来的频率通道号,能不能用?需要和 MAP 进行比较
46+
}
47+
}
48+
else if(Data_frequency_map.Current_unmappedChannel < 24) //从第 2 个频道字节确定那个频道能用
49+
{
50+
if((Data_frequency_map.Channel_Map[2] >> (Data_frequency_map.Current_unmappedChannel-16)) & 0x01 ) //如果这个频道是可用的
51+
{
52+
Data_frequency_map.Current_Frequency_value = Data_frequency_map.Current_unmappedChannel ;
53+
//得到真正的频率,可以直接赋值给 NRF_RADIO->FREQUENCY 寄存器
54+
break; // 找到了可用的频道并计算得到了实际寄存器的频率值后跳出循环
55+
}
56+
else //这个频道不可用需要重新映射
57+
{
58+
Data_frequency_map.Current_unmappedChannel=Data_frequency_map.Used_Channels[Data_frequency_map.Current_unmappedChannel \
59+
% Data_frequency_map.Num_UsedChannels] ;
60+
//这里得到的是接下来的频率通道号,能不能用?需要和 MAP 进行比较
61+
}
62+
}
63+
else if(Data_frequency_map.Current_unmappedChannel < 32)//从第 3 个频道字节确定那个频道能用
64+
{
65+
if((Data_frequency_map.Channel_Map[3] >>(Data_frequency_map.Current_unmappedChannel- 24)) & 0x01 ) //如果这个频道是可用的
66+
{
67+
Data_frequency_map.Current_Frequency_value = Data_frequency_map.Current_unmappedChannel ;
68+
//得到真正的频率,可以直接赋值给 NRF_RADIO->FREQUENCY 寄存器
69+
break; // 找到了可用的频道并计算得到了实际寄存器的频率值后跳出循环
70+
}
71+
else //这个频道不可用需要重新映射
72+
{
73+
Data_frequency_map.Current_unmappedChannel=Data_frequency_map.Used_Channels[Data_frequency_map.Current_unmappedChannel \
74+
% Data_frequency_map.Num_UsedChannels] ;
75+
//这里得到的是接下来的频率通道号,能不能用?需要和 MAP 进行比较
76+
}
77+
}
78+
else if(Data_frequency_map.Current_unmappedChannel < 40) //从第 4 个频道字节确定那个频道能用
79+
{
80+
if((Data_frequency_map.Channel_Map[4] >>(Data_frequency_map.Current_unmappedChannel- 32)) & 0x01 ) //如果这个频道是可用的
81+
{
82+
Data_frequency_map.Current_Frequency_value = Data_frequency_map.Current_unmappedChannel ;
83+
//得到真正的频率,可以直接赋值给 NRF_RADIO->FREQUENCY 寄存器
84+
break; // 找到了可用的频道并计算得到了实际寄存器的频率值后跳出循环
85+
}
86+
else //这个频道不可用需要重新映射
87+
{
88+
Data_frequency_map.Current_unmappedChannel=Data_frequency_map.Used_Channels[Data_frequency_map.Current_unmappedChannel \
89+
% Data_frequency_map.Num_UsedChannels] ;
90+
//这里得到的是接下来的频率通道号,能不能用?需要和 MAP 进行比较
91+
}
92+
}
93+
}
94+
NRF_RADIO->FREQUENCY = Data_frequency_map.Current_Frequency_value; //Actual frequency (MHz): 2400 + register value
95+
96+

0 commit comments

Comments
 (0)