📄 a7102.lst
字号:
324 1 Byte_Write(addr);
325 1
326 1 /* 写A7102-参数配置数据 */
327 1 Word_Write(parameter);
328 1
329 1 iSPI_Scs = positive;
330 1 }
331 /***********************************************
332 函 数: A7102_Register_Read()
333 功 能: 读控制数据从A7102内部寄存器
334 输 入: addr
335 输 出: parameter
336 描 述: /
337 ***********************************************/
338 unsigned int A7102_Register_Read(unsigned char addr)
339 {
340 1 unsigned int parameter;
341 1
342 1 iSPI_Sck = negative;
343 1 delay_A7102_us();
344 1 iSPI_Scs = negative;
345 1
346 1 addr &= 0x0f;
347 1 addr |= 0x80;
348 1
349 1 /* 读A7102-参数配置命令 */
350 1 Byte_Write(addr);
351 1
352 1 declare_sdo_input();
353 1
354 1 /* 读A7102-参数配置数据 */
355 1 parameter = Word_Read();
356 1
357 1 declare_sdo_output();
358 1
359 1 iSPI_Scs = positive;
360 1
361 1 /* 返回读取数值 */
362 1 return (parameter);
363 1 }
364 /***********************************************
C51 COMPILER V7.50 A7102 07/14/2008 10:33:18 PAGE 7
365 函 数: A7102_Status_Transmit()
366 功 能: A7102设置为发射状态
367 输 入: /
368 输 出: /
369 描 述: A7102使用12.8M晶体为基准源
370 ***********************************************/
371 void A7102_Status_Transmit(void)
372 {
373 1 #if mode_switch
iSPI_Tre = negative;
iSPI_Trs = positive;
iSPI_Tre = positive;
#else
378 1 #if mode_fifo
379 1 /* standby mode */
380 1 A7102_Register_Write(Reg_ModeControl,0x00d0);
381 1 /* TX frequency */
382 1 A7102_Register_Write(Reg_PLL_II,C_Tx_Frequency);
383 1 /* 校准值 */
384 1 A7102_Register_Write(Reg_Calibration,TX_Freq_Calibration);
385 1 /* transimit mode */
386 1 A7102_Register_Write(Reg_ModeControl,0x00d8);
387 1 #else
/* standby mode */
A7102_Register_Write(Reg_ModeControl,0x0050);
/* TX frequency */
A7102_Register_Write(Reg_PLL_II,C_Tx_Frequency);
/* 校准值 */
A7102_Register_Write(Reg_Calibration,TX_Freq_Calibration);
/* transimit mode */
A7102_Register_Write(Reg_ModeControl,0x0058);
#endif
397 1 #endif
398 1 }
399 /***********************************************
400 函 数: A7102_Receiver_Enable()
401 功 能: A7102接收使能
402 输 入: /
403 输 出: /
404 描 述: A7102使用12.8M晶体为基准源
405 ***********************************************/
406 void A7102_Receiver_Enable(void)
407 {
408 1 #if mode_fifo
409 1 A7102_Register_Write(Reg_ModeControl,0x00c8);
410 1 #else
A7102_Register_Write(Reg_ModeControl,0x0048);
#endif
413 1 }
414 /***********************************************
415 函 数: A7102_Status_Receiver()
416 功 能: A7102设置为接收状态
417 输 入: /
418 输 出: /
419 描 述: A7102使用12.8M晶体为基准源
420 ***********************************************/
421 void A7102_Status_Receiver(void)
422 {
423 1 #if mode_switch
iSPI_Tre = negative;
iSPI_Trs = negative;
iSPI_Tre = positive;
C51 COMPILER V7.50 A7102 07/14/2008 10:33:18 PAGE 8
#else
428 1 #if mode_fifo
429 1 /* standby mode */
430 1 A7102_Register_Write(Reg_ModeControl,0x00c0);
431 1 /* RX frequency */
432 1 A7102_Register_Write(Reg_PLL_II,C_Rx_Frequency);
433 1 /* 校准值 */
434 1 A7102_Register_Write(Reg_Calibration,RX_Freq_Calibration);
435 1 /* enable receive mode */
436 1 A7102_Receiver_Enable();
437 1 #else
/* standby mode */
A7102_Register_Write(Reg_ModeControl,0x0040);
/* RX frequency */
A7102_Register_Write(Reg_PLL_II,C_Rx_Frequency);
/* 校准值 */
A7102_Register_Write(Reg_Calibration,RX_Freq_Calibration);
/* enable receive mode */
A7102_Receiver_Enable();
#endif
447 1 #endif
448 1 }
449 /***********************************************
450 函 数: A7102_Calibration_Frequency()
451 功 能: 频率校准IF和VCO
452 输 入: frequency(PLL II寄存器)
453 输 出: /
454 描 述: A7102使用12.8M晶体为基准源
455 ***********************************************/
456 unsigned int A7102_Calibration_Frequency(unsigned int frequency)
457 {
458 1 unsigned int temp;
459 1
460 1 /* 设置频率 */
461 1 A7102_Register_Write(Reg_PLL_II,frequency);
462 1
463 1 /* 读出校准寄存器内值 */
464 1 temp = A7102_Register_Read(Reg_ModeControl);
465 1
466 1 /* 打开校准功能 */
467 1 temp |= 0x0006;
468 1 A7102_Register_Write(Reg_ModeControl,temp);
469 1
470 1 /* 等待校准完成 */
471 1 do
472 1 {
473 2 temp = A7102_Register_Read(Reg_ModeControl);
474 2 }while(temp&0x0006);
475 1
476 1 /* 获取校准的IF和VCO的补偿值 */
477 1 temp = A7102_Register_Read(Reg_Calibration);
478 1 /* MVBS =1,MIFS = 1,在状态切换时使用手动校准 */
479 1 temp &= 0x00ef;
480 1 temp |= 0x4910;
481 1
482 1 /* 返回校准的IF和VCO的补偿值 */
483 1 return temp;
484 1 }
485 /***********************************************
486 函 数: A7102_Config_Chip()
487 功 能: 配置A7102参数寄存器
488 输 入: /
C51 COMPILER V7.50 A7102 07/14/2008 10:33:18 PAGE 9
489 输 出: /
490 描 述: A7102使用12.8M晶体为基准源
491 ***********************************************/
492 void A7102_Config_Chip(void)
493 {
494 1 uint temp = 0x0000;
495 1
496 1 iSPI_Tre = negative;
497 1 iSPI_Trs = negative;
498 1
499 1 /* rate = 50kbps,IF = 100k,CSC[2:0] = 001,System clock = 64*IF = 6.4M */
500 1 A7102_Register_Write(Reg_SystemClock,0x0079);
501 1
502 1 /* TX = 434MHZ * 2 = (12.8mhz/(RRC[3:0]+1)) * (IP[7:0]+(FP[15:0]/65535)),RRC[3:0] = 0000,IP[7:0] =
- 0100 0011 */
503 1 /* MDIV = 0,IP选择范围32 - 127 */
504 1 A7102_Register_Write(Reg_PLL_I,0x0043);
505 1 /* FP[15:0],默认434Mhz */
506 1 A7102_Register_Write(Reg_PLL_II,0xcfff);
507 1 /* default 0x0000,无调校 */
508 1 A7102_Register_Write(Reg_PLL_III,0x0000);
509 1 /* PDL[2:0] =011,HFB =0(<500mhz),VCS[1:0] =00,CPS =0(normal),CPC[1:0] =01(charge pump 1mA) */
510 1 /* VCS[1:0] = 01,VCO电流控制为1,SDPW = 1 */
511 1 A7102_Register_Write(Reg_PLL_IV,0x066c);
512 1
513 1
514 1 #if mode_modulation
515 1 /* TME =1,发射带调制,GS =0,高斯滤波器关闭,FX = 12.8M,FDP = 101,FD = 0010 0000,
516 1 频偏 fdev = FX/(RRC[3:0]+1)*(FD[7:0]*(2^(FDP[2:0]))/8/65536),
517 1 = 12800khz * 32 * (2^5) /(2^19)
518 1 = 25khz */
519 1 A7102_Register_Write(Reg_TXI,0x1520);
520 1
521 1 #else
/* TME =0,发射未带调制,GS =0,高斯滤波器关闭,FX = 12.8M,
频偏 fdev = FX/(RRC[3:0]+1)*(FD[7:0]*(2^(FDP[2:0]))/8/65536),
= 12800khz * 128 * (2^5) /(2^19)
= 100khz */
A7102_Register_Write(Reg_TXI,0x0580);
#endif
528 1
529 1 /* 发射功率设置为最大功率 */
530 1 A7102_Register_Write(Reg_TXII,0x0337);
531 1
532 1 /* MPL[1:0] = 01,SLF[2:0] = 100,ETH[1:0] = 00,无位错误选择,DMOS = 0,DMG[1:0] = 01,增益X3 */
533 1 /* BW[1:0] = 00,50Khz,ULS= 1,下旁波带,HGM =1,高增益 */
534 1 A7102_Register_Write(Reg_RXI,0x1813);
535 1
536 1 /* Amic推荐值 */
537 1 A7102_Register_Write(Reg_RXII,0x500b);
538 1
539 1 /* CDM =1,carrier 打开 */
540 1 A7102_Register_Write(Reg_ADC,0x0000);
541 1
542 1 /* TX fifo <8字节,RX fifo > 56字节时报警, */
543 1 A7102_Register_Write(Reg_FIFO,0x4000|(C_FIFO_Byte-1));
544 1
545 1 /* MCS = 0,Manchester打开,FECS = 0,FEC打开,CRCS =0,CRC打开,IDL =1,id code =4字节,PML[1:0] = 11,前
-导4字节 */
546 1 A7102_Register_Write(Reg_Code,0x150f);
547 1
548 1 #if mode_switch
C51 COMPILER V7.50 A7102 07/14/2008 10:33:18 PAGE 10
/* 打开位时钟,管脚控制收发,无载波侦测 */
A7102_Register_Write(Reg_PinControl,0x0222);
#else
552 1 // 打开位时钟,寄存器控制收发,无载波侦测 */
553 1 A7102_Register_Write(Reg_PinControl,0x0022);
554 1 #endif
555 1
556 1 /* VTL[2:0] = 100,VTH = VDD-0.5V, VTH[2:0] = 100,VTL =0.5V */
557 1 A7102_Register_Write(Reg_Calibration,0x4886);
558 1
559 1 A7102_Register_Write(Reg_ModeControl,0x00e0); //STB2==>syn mode
560 1 //delay 80us
561 1 for(temp = 0;temp < 0xffff;temp++)
562 1 {
563 2 _nop_();
564 2 _nop_();
565 2 }
566 1 }
567 /***********************************************
568 函 数: Initialisation_RF()
569 功 能: 上电初始化A7102
570 输 入: /
571 输 出: /
572 描 述: /
573 ***********************************************/
574 void Initialisation_RF(void)
575 {
576 1 uint i;
577 1
578 1 iSPI_PowerOn = negative;
579 1 /* A7102稳定时间延迟配置 */
580 1 for(i = 0;i < 0xffff;i++)
581 1 {
582 2 _nop_();
583 2 _nop_();
584 2 _nop_();
585 2 _nop_();
586 2 }
587 1 iSPI_PowerOn = positive;
588 1 /* A7102稳定时间延迟配置 */
589 1 for(i = 0;i < 0xffff;i++)
590 1 {
591 2 _nop_();
592 2 _nop_();
593 2 _nop_();
594 2 _nop_();
595 2 }
596 1
597 1 A7102_Reset_Chip();
598 1
599 1 for(i = 0;i < 0xffff;i++)
600 1 {
601 2 _nop_();
602 2 _nop_();
603 2 _nop_();
604 2 _nop_();
605 2 }
606 1
607 1 /* XCC =1(crystal high current),XS =1(crystal on) */
608 1 /* CGS = 0,因为使用标准12.8mhz晶体 */
609 1 A7102_Register_Write(Reg_Crystal,0x0015);
610 1 for(i = 0;i < 0xffff;i++)
C51 COMPILER V7.50 A7102 07/14/2008 10:33:18 PAGE 11
611 1 {
612 2 _nop_();
613 2 _nop_();
614 2 }
615 1 /* FMT =0,normal mode,FMS =1,FIFO mode,CER = 1,RF chip 使能,PLLE = 0,使用12.8Mhz标准晶体,PLL关闭 *
-/
616 1 A7102_Register_Write(Reg_ModeControl,0x00c0); //STB1==>standby mode
617 1 //delay 0.5ms
618 1 for(i = 0;i < 0xffff;i++)
619 1 {
620 2 _nop_();
621 2 _nop_();
622 2 }
623 1 A7102_Id_Write(&id_buff);
624 1 A7102_Id_Read(&rece_buff);
625 1
626 1 A7102_Config_Chip();
627 1
628 1 TX_Freq_Calibration = A7102_Calibration_Frequency(C_Tx_Frequency);
629 1 RX_Freq_Calibration = A7102_Calibration_Frequency(C_Rx_Frequency);
630 1
631 1 /* reset fifo */
632 1 A7102_Reset_FifoRX();
633 1 A7102_Reset_FifoTX();
634 1
635 1 /* 默认接收状态 */
636 1 A7102_Status_Receiver();
637 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 830 ----
CONSTANT SIZE = 4 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -