fap.lst
来自「非常全的nrf2401设计资料」· LST 代码 · 共 812 行 · 第 1/3 页
LST
812 行
252 2 if(fap_mode == FAP_RECEIVING)
253 2 {
254 3 fap_goto_idle_mode();
255 3 }
256 2
257 2 // If TX setup modified
258 2 if(fap_curr_tx_setup != (datainput -> pipe))
259 2 {
260 3 hal_nrf_set_operation_mode(HAL_NRF_PTX);
261 3 hal_nrf_open_pipe(HAL_NRF_PIPE0, EN_AA);
262 3
263 3 if(datainput -> pipe == FAP_DEVICE0)
264 3 {
265 4 hal_nrf_set_address(HAL_NRF_TX, fap_p0_adr);
266 4 hal_nrf_set_address(HAL_NRF_PIPE0, fap_p0_adr);
267 4 }
268 3 else
269 3 {
270 4 hal_nrf_get_address(HAL_NRF_PIPE1, &fap_general_buffer.pl[0]);
271 4
272 4 if(datainput -> pipe != FAP_DEVICE1)
273 4 {
274 5 switch(datainput -> pipe)
275 5 {
276 6 default:
277 6 case FAP_DEVICE2:
278 6 hal_nrf_get_address(HAL_NRF_PIPE2, &fap_general_buffer.pl[0]);
279 6 break;
280 6 case FAP_DEVICE3:
281 6 hal_nrf_get_address(HAL_NRF_PIPE3, &fap_general_buffer.pl[0]);
282 6 break;
283 6 case FAP_DEVICE4:
284 6 hal_nrf_get_address(HAL_NRF_PIPE4, &fap_general_buffer.pl[0]);
285 6 break;
286 6 case FAP_DEVICE5:
287 6 hal_nrf_get_address(HAL_NRF_PIPE5, &fap_general_buffer.pl[0]);
288 6 break;
289 6 }
290 5 }
291 4 hal_nrf_set_address(HAL_NRF_PIPE0, &fap_general_buffer.pl[0]);
292 4 hal_nrf_set_address(HAL_NRF_TX, &fap_general_buffer.pl[0]);
293 4 }
294 3 fap_curr_tx_setup = datainput -> pipe;
295 3 }
296 2 fap_ch_switch_counter=0;
297 2 fap_retry_extend_counter=0;
298 2 fap_try_counter=0;
299 2
300 2 fap_latency_setup = tx_timeout;
C51 COMPILER V7.50 FAP 04/09/2009 10:12:50 PAGE 6
301 2
302 2 if(tx_timeout==0)
303 2 {
304 3 FAP_SET_BIT(fap_status, FAP_TX_RX_INFINITE_TIMEOUT_EN);
305 3 }
306 2 else
307 2 {
308 3 fap_latency_counter = tx_timeout;
309 3 FAP_CLEAR_BIT(fap_status, FAP_TX_RX_INFINITE_TIMEOUT_EN);
310 3 }
311 2
312 2 hal_nrf_flush_tx();
313 2 hal_nrf_write_tx_pload(&(datainput -> pl[0]), datainput -> pl_length);
314 2
315 2 FAP_SET_BIT(fap_status, FAP_TX_SUCCESS); // Transmission by default "success"
316 2
317 2 if(FAP_GET_BIT(fap_status, FAP_RADIO_PWR_UP) && !FAP_GET_BIT(fap_status, FAP_CH_SYNC_EN) )
318 2 {
319 3 CE_HIGH();
320 3 }
321 2 else
322 2 {
323 3 if(!FAP_GET_BIT(fap_status, FAP_RADIO_PWR_UP))
324 3 {
325 4 hal_nrf_set_power_mode(HAL_NRF_PWR_UP);
326 4 FAP_SET_BIT(fap_status, FAP_RADIO_PWR_UP);
327 4 fap_radio_startup_counter = FAP_RADIO_PWR_UP_DELAY;
328 4 }
329 3
330 3 FAP_SET_BIT(fap_status, FAP_START_NEW_TX);
331 3 }
332 2
333 2 fap_mode=FAP_TRANSMITTING;
334 2
335 2 FAP_INTERRUPTS_ENABLE();
336 2 return true;
337 2 }
338 1 else // Check if criteria for starting new TX when in TX mode is fulfilled
339 1 if(!FAP_GET_BIT(fap_status, FAP_CH_SYNC_EN) && \
340 1 fap_curr_tx_setup == (datainput -> pipe) && \
341 1 !hal_nrf_tx_fifo_full() && \
342 1 tx_timeout == fap_latency_setup \
343 1 )
344 1 {
345 2 hal_nrf_write_tx_pload(&(datainput -> pl[0]), datainput -> pl_length);
346 2
347 2 FAP_INTERRUPTS_ENABLE();
348 2 return true;
349 2 }
350 1 else
351 1 {
352 2 FAP_INTERRUPTS_ENABLE();
353 2 return false;
354 2 }
355 1 }
356
357 void fap_flush_tx_fifo(void)
358 {
359 1 FAP_INTERRUPTS_DISABLE();
360 1
361 1 hal_nrf_flush_tx();
362 1
C51 COMPILER V7.50 FAP 04/09/2009 10:12:50 PAGE 7
363 1 FAP_INTERRUPTS_ENABLE();
364 1 }
365
366 bool fap_write_ack_pload(fap_tx_rx_struct_t* ackdata)
367 {
368 1 FAP_INTERRUPTS_DISABLE();
369 1
370 1 if(!hal_nrf_tx_fifo_full() && !(ackdata -> pl_length > FAP_MAX_ACK_PL_LENGTH))
371 1 {
372 2 hal_nrf_write_ack_pload(ackdata -> pipe, &(ackdata -> pl[0]), ackdata -> pl_length);
373 2 FAP_INTERRUPTS_ENABLE();
374 2 return true;
375 2 }
376 1 else
377 1 {
378 2 FAP_INTERRUPTS_ENABLE();
379 2 return false;
380 2 }
381 1 }
382
383 fap_modes_t fap_get_mode(void)
384 {
385 1 return fap_mode;
386 1 }
387
388 bool fap_read_rx_fifo(fap_tx_rx_struct_t* return_struct)
389 {
390 1 uint16_t tempvalue;
391 1
392 1 FAP_INTERRUPTS_DISABLE();
393 1
394 1 if(fap_rx_dr_flag)
395 1 {
396 2 tempvalue = hal_nrf_read_rx_pload(&(return_struct -> pl[0]));
397 2 FAP_INTERRUPTS_ENABLE();
398 2
399 2 return_struct -> pipe=(uint8_t)(tempvalue>>8); // MSByte, pipe
400 2 return_struct -> pl_length=(uint8_t)(tempvalue); // LSByte=length
401 2
402 2 if(hal_nrf_rx_fifo_empty())
403 2 {
404 3 fap_rx_dr_flag = false;
405 3 }
406 2
407 2 return true;
408 2 }
409 1 else
410 1 {
411 2 FAP_INTERRUPTS_ENABLE();
412 2 return false;
413 2 }
414 1 }
415
416 bool fap_tx_success(void)
417 {
418 1 return FAP_GET_BIT(fap_status, FAP_TX_SUCCESS);
419 1 }
420
421 bool fap_select_radio_idle_mode(fap_radio_idle_modes_t mode)
422 {
423 1 if(fap_mode==FAP_IDLE)
424 1 {
C51 COMPILER V7.50 FAP 04/09/2009 10:12:50 PAGE 8
425 2 FAP_INTERRUPTS_DISABLE();
426 2
427 2 if(mode == FAP_PDOWN_IDLE)
428 2 {
429 3 FAP_SET_BIT(fap_status, FAP_PDOWN_IDLE_EN);
430 3
431 3 if(fap_mode==FAP_IDLE)
432 3 {
433 4 hal_nrf_set_power_mode(HAL_NRF_PWR_DOWN);
434 4 FAP_CLEAR_BIT(fap_status, FAP_RADIO_PWR_UP);
435 4 }
436 3 }
437 2 else
438 2 {
439 3 FAP_CLEAR_BIT(fap_status, FAP_PDOWN_IDLE_EN);
440 3
441 3 // Update radio power mode if FAP is in idle mode
442 3 hal_nrf_set_power_mode(HAL_NRF_PWR_UP);
443 3 FAP_SET_BIT(fap_status, FAP_RADIO_PWR_UP);
444 3 }
445 2
446 2 FAP_INTERRUPTS_ENABLE();
447 2
448 2 return true;
449 2 }
450 1 else
451 1 {
452 2 return false;
453 2 }
454 1 }
455
456 uint16_t fap_get_tries(void)
457 {
458 1 return fap_try_counter;
459 1 }
460
461 uint16_t fap_get_ch_switches(void)
462 {
463 1 return fap_ch_switch_counter;
464 1 }
465
466 void fap_ch_sync_enable()
467 {
468 1 FAP_INTERRUPTS_DISABLE();
469 1
470 1 FAP_SET_BIT(fap_status, FAP_CH_SYNC_EN);
471 1
472 1 FAP_INTERRUPTS_ENABLE();
473 1 }
474
475 void fap_ch_sync_disable()
476 {
477 1 FAP_INTERRUPTS_DISABLE();
478 1
479 1 FAP_CLEAR_BIT(fap_status, FAP_CH_SYNC_EN);
480 1
481 1 FAP_INTERRUPTS_ENABLE();
482 1 }
483
484 uint8_t fap_get_ch_offset()
485 {
486 1 int8_t sync_var;
C51 COMPILER V7.50 FAP 04/09/2009 10:12:50 PAGE 9
487 1
488 1 FAP_INTERRUPTS_DISABLE();
489 1
490 1 sync_var = (fap_ch_tab_idx_tx - fap_rx_channel_guess);
491 1
492 1 if(FAP_GET_BIT(fap_status, FAP_PDOWN_IDLE_EN))
493 1 {
494 2 sync_var -= FAP_RADIO_PWR_UP_DELAY;
495 2 }
496 1
497 1 if(sync_var < 0)
498 1 {
499 2 sync_var += FAP_CH_TAB_SIZE;
500 2 }
501 1
502 1 FAP_INTERRUPTS_ENABLE();
503 1
504 1 return sync_var;
505 1 }
506
507 void fap_nrf_isr_function(void)
508 {
509 1 static uint8_t random_seed;
510 1
511 1 FAP_TIMER_IRQ_DISABLE();
512 1
513 1 fap_general_byte=hal_nrf_get_irq_flags(); // Get/clear IRQ flags
514 1
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?