📄 hal_nrf_l01.lst
字号:
C51 COMPILER V7.50 HAL_NRF_L01 04/09/2009 10:12:51 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE HAL_NRF_L01
OBJECT MODULE PLACED IN .\build\hal_nrf_l01.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\..\..\arch\hal\nrf24l01\hal_nrf_l01.c LARGE OMF2 OPTIMIZE(9,SPEED) BR
-OWSE INCDIR(..\common;..\..\..\..\comp\protocol\wdp\common\;..\..\..\..\comp\protocol\wdp\host\;..\..\..\..\arch\hal\inc
-lude;..\..\..\..\arch\hal\nrf24lu1;..\..\..\..\arch\nrf24lu1;..\common;..\..\..\..\comp\protocol\fap) DEBUG PRINT(.\lst\
-hal_nrf_l01.lst) OBJECT(.\build\hal_nrf_l01.obj)
line level source
1 /* Copyright (c) 2007 Nordic Semiconductor. All Rights Reserved.
2 *
3 * The information contained herein is property of Nordic Semiconductor ASA.
4 * Terms and conditions of usage are described in detail in NORDIC
5 * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
6 *
7 * Licensees are granted free, non-transferable use of the information. NO
8 * WARRENTY of ANY KIND is provided. This heading must NOT be removed from
9 * the file.
10 *
11 * $LastChangedRevision: 2290 $
12 */
13
14 /** @file
15 * Hardware abstraction layer for the nRF24L01 radio.
16 *
17 * @author Runar Kjellhaug
18 *
19 */
20
21 #include <stdint.h>
22 #include <stdbool.h>
23
24 #include "nordic_common.h"
25 #include "hal_nrf.h"
26
27 #define SET_BIT(pos) ((uint8_t) (1<<( (uint8_t) (pos) )))
28 #define UINT8(t) ((uint8_t) (t))
29
30 void hal_nrf_set_irq_mode(hal_nrf_irq_source_t int_source, bool irq_state)
31 {
32 1 if(irq_state)
33 1 {
34 2 hal_nrf_write_reg(CONFIG, hal_nrf_read_reg(CONFIG) & ~SET_BIT(int_source));
35 2 }
36 1 else
37 1 {
38 2 hal_nrf_write_reg(CONFIG, hal_nrf_read_reg(CONFIG) | SET_BIT(int_source));
39 2 }
40 1 }
41
42 uint8_t hal_nrf_get_clear_irq_flags(void)
43 {
44 1 return hal_nrf_write_reg(STATUS, (BIT_6|BIT_5|BIT_4)) & (BIT_6|BIT_5|BIT_4);
45 1 }
46
47 void hal_nrf_clear_irq_flag(hal_nrf_irq_source_t int_source)
48 {
49 1 hal_nrf_write_reg(STATUS, SET_BIT(int_source));
50 1 }
51
52 bool hal_nrf_get_irq_mode(uint8_t int_type)
C51 COMPILER V7.50 HAL_NRF_L01 04/09/2009 10:12:51 PAGE 2
53 {
54 1 if(hal_nrf_read_reg(CONFIG) & SET_BIT(int_type))
55 1 return false;
56 1 else
57 1 return true;
58 1 }
59
60 uint8_t hal_nrf_get_irq_flags(void)
61 {
62 1 return hal_nrf_nop() & (BIT_6|BIT_5|BIT_4);
63 1 }
64
65 void hal_nrf_set_crc_mode(hal_nrf_crc_mode_t crc_mode)
66 {
67 1 hal_nrf_write_reg(CONFIG, (hal_nrf_read_reg(CONFIG) & ~(BIT_3|BIT_2)) | (UINT8(crc_mode)<<2));
68 1 }
69
70 void hal_nrf_open_pipe(hal_nrf_address_t pipe_num, bool auto_ack)
71 {
72 1 switch(pipe_num)
73 1 {
74 2 case HAL_NRF_PIPE0:
75 2 case HAL_NRF_PIPE1:
76 2 case HAL_NRF_PIPE2:
77 2 case HAL_NRF_PIPE3:
78 2 case HAL_NRF_PIPE4:
79 2 case HAL_NRF_PIPE5:
80 2 hal_nrf_write_reg(EN_RXADDR, hal_nrf_read_reg(EN_RXADDR) | SET_BIT(pipe_num));
81 2
82 2 if(auto_ack)
83 2 hal_nrf_write_reg(EN_AA, hal_nrf_read_reg(EN_AA) | SET_BIT(pipe_num));
84 2 else
85 2 hal_nrf_write_reg(EN_AA, hal_nrf_read_reg(EN_AA) & ~SET_BIT(pipe_num));
86 2 break;
87 2
88 2 case HAL_NRF_ALL:
89 2 hal_nrf_write_reg(EN_RXADDR, ~(BIT_7|BIT_6));
90 2
91 2 if(auto_ack)
92 2 hal_nrf_write_reg(EN_AA, ~(BIT_7|BIT_6));
93 2 else
94 2 hal_nrf_write_reg(EN_AA, 0);
95 2 break;
96 2
97 2 default:
98 2 break;
99 2 }
100 1 }
101
102 void hal_nrf_close_pipe(hal_nrf_address_t pipe_num)
103 {
104 1 switch(pipe_num)
105 1 {
106 2 case HAL_NRF_PIPE0:
107 2 case HAL_NRF_PIPE1:
108 2 case HAL_NRF_PIPE2:
109 2 case HAL_NRF_PIPE3:
110 2 case HAL_NRF_PIPE4:
111 2 case HAL_NRF_PIPE5:
112 2 hal_nrf_write_reg(EN_RXADDR, hal_nrf_read_reg(EN_RXADDR) & ~SET_BIT(pipe_num));
113 2 hal_nrf_write_reg(EN_AA, hal_nrf_read_reg(EN_AA) & ~SET_BIT(pipe_num));
114 2 break;
C51 COMPILER V7.50 HAL_NRF_L01 04/09/2009 10:12:51 PAGE 3
115 2
116 2 case HAL_NRF_ALL:
117 2 hal_nrf_write_reg(EN_RXADDR, 0);
118 2 hal_nrf_write_reg(EN_AA, 0);
119 2 break;
120 2
121 2 default:
122 2 break;
123 2 }
124 1 }
125
126 void hal_nrf_set_address(hal_nrf_address_t address, uint8_t *addr)
127 {
128 1 switch(address)
129 1 {
130 2 case HAL_NRF_TX:
131 2 case HAL_NRF_PIPE0:
132 2 case HAL_NRF_PIPE1:
133 2 hal_nrf_write_multibyte_reg((uint8_t) address, addr, 0);
134 2 break;
135 2
136 2 case HAL_NRF_PIPE2:
137 2 case HAL_NRF_PIPE3:
138 2 case HAL_NRF_PIPE4:
139 2 case HAL_NRF_PIPE5:
140 2 hal_nrf_write_reg(RX_ADDR_P0 + (uint8_t) address, *addr);
141 2 break;
142 2
143 2 default:
144 2 break;
145 2 }
146 1 }
147
148 void hal_nrf_set_auto_retr(uint8_t retr, uint16_t delay)
149 {
150 1 hal_nrf_write_reg(SETUP_RETR, (((delay/250)-1)<<4) | retr);
151 1 }
152
153 void hal_nrf_set_address_width(hal_nrf_address_width_t address_width)
154 {
155 1 hal_nrf_write_reg(SETUP_AW, (UINT8(address_width) - 2));
156 1 }
157
158 void hal_nrf_set_rx_pload_width(uint8_t pipe_num, uint8_t pload_width)
159 {
160 1 hal_nrf_write_reg(RX_PW_P0 + pipe_num, pload_width);
161 1 }
162
163 uint8_t hal_nrf_get_crc_mode(void)
164 {
165 1 return (hal_nrf_read_reg(CONFIG) & (BIT_3|BIT_2)) >> CRCO;
166 1 }
167
168 uint8_t hal_nrf_get_pipe_status(uint8_t pipe_num)
169 {
170 1 uint8_t en_rx, en_aa;
171 1
172 1 en_rx = hal_nrf_read_reg(EN_RXADDR) & (1<<pipe_num);
173 1 en_aa = hal_nrf_read_reg(EN_AA) & (1<<pipe_num);
174 1
175 1 en_rx >>= pipe_num;
176 1 en_aa >>= pipe_num;
C51 COMPILER V7.50 HAL_NRF_L01 04/09/2009 10:12:51 PAGE 4
177 1
178 1 return (en_aa << 1) + en_rx;
179 1 }
180
181 uint8_t hal_nrf_get_address(uint8_t address, uint8_t *addr)
182 {
183 1 switch(address)
184 1 {
185 2 case HAL_NRF_PIPE0:
186 2 case HAL_NRF_PIPE1:
187 2 case HAL_NRF_TX:
188 2 return hal_nrf_read_multibyte_reg(address, addr);
189 2
190 2 default:
191 2 *addr = hal_nrf_read_reg(RX_ADDR_P0 + address);
192 2 return hal_nrf_get_address_width();
193 2 }
194 1 }
195
196 uint8_t hal_nrf_get_auto_retr_status(void)
197 {
198 1 return hal_nrf_read_reg(OBSERVE_TX);
199 1 }
200
201 uint8_t hal_nrf_get_packet_lost_ctr(void)
202 {
203 1 return (hal_nrf_read_reg(OBSERVE_TX) & (BIT_7|BIT_6|BIT_5|BIT_4)) >> 4;
204 1 }
205
206 uint8_t hal_nrf_get_address_width(void)
207 {
208 1 return (hal_nrf_read_reg(SETUP_AW) + 2);
209 1 }
210
211 uint8_t hal_nrf_get_rx_pload_width(uint8_t pipe_num)
212 {
213 1 return hal_nrf_read_reg(RX_PW_P0 + pipe_num);
214 1 }
215
216 void hal_nrf_set_operation_mode(hal_nrf_operation_mode_t op_mode)
217 {
218 1 if(op_mode == HAL_NRF_PRX)
219 1 {
220 2 hal_nrf_write_reg(CONFIG, (hal_nrf_read_reg(CONFIG) | (1<<PRIM_RX)));
221 2 }
222 1 else
223 1 {
224 2 hal_nrf_write_reg(CONFIG, (hal_nrf_read_reg(CONFIG) & ~(1<<PRIM_RX)));
225 2 }
226 1 }
227
228 void hal_nrf_set_power_mode(hal_nrf_pwr_mode_t pwr_mode)
229 {
230 1 if(pwr_mode == HAL_NRF_PWR_UP)
231 1 {
232 2 hal_nrf_write_reg(CONFIG, (hal_nrf_read_reg(CONFIG) | (1<<PWR_UP)));
233 2 }
234 1 else
235 1 {
236 2 hal_nrf_write_reg(CONFIG, (hal_nrf_read_reg(CONFIG) & ~(1<<PWR_UP)));
237 2 }
238 1 }
C51 COMPILER V7.50 HAL_NRF_L01 04/09/2009 10:12:51 PAGE 5
239
240 void hal_nrf_set_rf_channel(uint8_t channel)
241 {
242 1 hal_nrf_write_reg(RF_CH, channel);
243 1 }
244
245 void hal_nrf_set_output_power(hal_nrf_output_power_t power)
246 {
247 1 hal_nrf_write_reg(RF_SETUP, (hal_nrf_read_reg(RF_SETUP) & ~((1<<RF_PWR1)|(1<<RF_PWR0))) | (UINT8(power)<
-<1));
248 1 }
249
250 void hal_nrf_set_datarate(hal_nrf_datarate_t datarate)
251 {
252 1 if(datarate == HAL_NRF_1MBPS)
253 1 {
254 2 hal_nrf_write_reg(RF_SETUP, (hal_nrf_read_reg(RF_SETUP) & ~(1<<RF_DR)));
255 2 }
256 1 else
257 1 {
258 2 hal_nrf_write_reg(RF_SETUP, (hal_nrf_read_reg(RF_SETUP) | (1<<RF_DR)));
259 2 }
260 1 }
261
262 uint8_t hal_nrf_get_operation_mode(void)
263 {
264 1 return (hal_nrf_read_reg(CONFIG) & (1<<PRIM_RX)) >> PRIM_RX;
265 1 }
266
267 uint8_t hal_nrf_get_power_mode(void)
268 {
269 1 return (hal_nrf_read_reg(CONFIG) & (1<<PWR_UP)) >> PWR_UP;
270 1 }
271
272 uint8_t hal_nrf_get_rf_channel(void)
273 {
274 1 return hal_nrf_read_reg(RF_CH);
275 1 }
276
277 uint8_t hal_nrf_get_output_power(void)
278 {
279 1 return (hal_nrf_read_reg(RF_SETUP) & ((1<<RF_PWR1)|(1<<RF_PWR0))) >> RF_PWR0;
280 1 }
281
282 uint8_t hal_nrf_get_datarate(void)
283 {
284 1 return (hal_nrf_read_reg(RF_SETUP) & (1<<RF_DR)) >> RF_DR;
285 1 }
286
287 bool hal_nrf_rx_fifo_empty(void)
288 {
289 1 if(hal_nrf_get_rx_data_source()==7)
290 1 {
291 2 return true;
292 2 }
293 1 else
294 1 {
295 2 return false;
296 2 }
297 1 }
298
299 bool hal_nrf_rx_fifo_full(void)
C51 COMPILER V7.50 HAL_NRF_L01 04/09/2009 10:12:51 PAGE 6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -