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