⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a7102.lst

📁 A7102-433.rar
💻 LST
📖 第 1 页 / 共 2 页
字号:
 323   1              Byte_Write(addr);
 324   1              
 325   1              /* 写A7102-参数配置数据 */
 326   1              Word_Write(parameter);
 327   1              
 328   1              iSPI_Scs        = positive;
 329   1      }
 330          /***********************************************
 331          函 数:  A7102_Register_Read()
 332          功 能:  读控制数据从A7102内部寄存器 
 333          输 入:  addr
 334          输 出:  parameter
 335          描 述:  /
 336          ***********************************************/
 337          unsigned int    A7102_Register_Read(unsigned char addr)
 338          {
 339   1              unsigned int    parameter;
 340   1              
 341   1              iSPI_Sck        = negative;
 342   1              delay_A7102_us();
 343   1              iSPI_Scs        = negative;
 344   1              
 345   1              addr           &= 0x0f;
 346   1              addr           |= 0x80;
 347   1              
 348   1              /* 读A7102-参数配置命令 */
 349   1              Byte_Write(addr);
 350   1              
 351   1              declare_sdo_input();
 352   1              
 353   1              /* 读A7102-参数配置数据 */
 354   1              parameter       = Word_Read();
 355   1              
 356   1              declare_sdo_output();
 357   1              
 358   1              iSPI_Scs        = positive;
 359   1              
 360   1              /* 返回读取数值 */
 361   1              return    (parameter);
 362   1      }
 363          /***********************************************
 364          函 数:  A7102_Status_Transmit()
C51 COMPILER V8.18   A7102                                                                 03/20/2010 16:53:38 PAGE 7   

 365          功 能:  A7102设置为发射状态 
 366          输 入:  /
 367          输 出:  /
 368          描 述:  A7102使用12.8M晶体为基准源 
 369          ***********************************************/
 370          void    A7102_Status_Transmit(void)
 371          {
 372   1      #if  mode_switch
                      iSPI_Tre        = negative;
                      iSPI_Trs        = positive;
                      iSPI_Tre        = positive;
              #else
 377   1              #if mode_fifo
 378   1                  /* standby mode */
 379   1                  A7102_Register_Write(Reg_ModeControl,0x00d0);
 380   1                  /* TX frequency */
 381   1                  A7102_Register_Write(Reg_PLL_II,C_Tx_Frequency);
 382   1                  /* 校准值 */
 383   1                  A7102_Register_Write(Reg_Calibration,TX_Freq_Calibration);
 384   1                  /* transimit mode */
 385   1                  A7102_Register_Write(Reg_ModeControl,0x00d8); 
 386   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
 396   1      #endif
 397   1      }
 398          /***********************************************
 399          函 数:  A7102_Receiver_Enable()
 400          功 能:  A7102接收使能 
 401          输 入:  /
 402          输 出:  /
 403          描 述:  A7102使用12.8M晶体为基准源 
 404          ***********************************************/
 405          void    A7102_Receiver_Enable(void)
 406          {
 407   1      #if mode_fifo
 408   1              A7102_Register_Write(Reg_ModeControl,0x00c8);
 409   1      #else
                      A7102_Register_Write(Reg_ModeControl,0x0048);
              #endif
 412   1      }
 413          /***********************************************
 414          函 数:  A7102_Status_Receiver()
 415          功 能:  A7102设置为接收状态 
 416          输 入:  /
 417          输 出:  /
 418          描 述:  A7102使用12.8M晶体为基准源 
 419          ***********************************************/
 420          void    A7102_Status_Receiver(void)
 421          {
 422   1      #if  mode_switch
                      iSPI_Tre        = negative;
                      iSPI_Trs        = negative;
                      iSPI_Tre        = positive;
              #else
C51 COMPILER V8.18   A7102                                                                 03/20/2010 16:53:38 PAGE 8   

 427   1              #if mode_fifo
 428   1                  /* standby mode */
 429   1                  A7102_Register_Write(Reg_ModeControl,0x00c0); 
 430   1                  /* RX frequency */
 431   1                  A7102_Register_Write(Reg_PLL_II,C_Rx_Frequency);
 432   1                  /* 校准值 */
 433   1                  A7102_Register_Write(Reg_Calibration,RX_Freq_Calibration);
 434   1                  /* enable receive mode */
 435   1                  A7102_Receiver_Enable();
 436   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
 446   1      #endif
 447   1      }
 448          /***********************************************
 449          函 数:  A7102_Calibration_Frequency()
 450          功 能:  频率校准IF和VCO
 451          输 入:  frequency(PLL II寄存器)
 452          输 出:  /
 453          描 述:  A7102使用12.8M晶体为基准源 
 454          ***********************************************/
 455          unsigned int    A7102_Calibration_Frequency(unsigned int frequency)
 456          {
 457   1              unsigned int temp;
 458   1              
 459   1              /* 设置频率 */
 460   1              A7102_Register_Write(Reg_PLL_II,frequency);
 461   1      
 462   1              /* 读出校准寄存器内值 */
 463   1              temp    = A7102_Register_Read(Reg_ModeControl);
 464   1              
 465   1              /* 打开校准功能 */
 466   1              temp   |= 0x0006;
 467   1              A7102_Register_Write(Reg_ModeControl,temp);
 468   1              
 469   1              /* 等待校准完成 */
 470   1              do
 471   1              {
 472   2                  temp    = A7102_Register_Read(Reg_ModeControl);
 473   2              }while(temp&0x0006);
 474   1              
 475   1              /* 获取校准的IF和VCO的补偿值 */
 476   1              temp    = A7102_Register_Read(Reg_Calibration);
 477   1              /* MVBS =1,MIFS = 1,在状态切换时使用手动校准 */
 478   1              temp   &= 0x00ef;
 479   1              temp   |= 0x4910;
 480   1      
 481   1              /* 返回校准的IF和VCO的补偿值 */
 482   1              return    temp;
 483   1      }
 484          /***********************************************
 485          函 数:  A7102_Config_Chip()
 486          功 能:  配置A7102参数寄存器 
 487          输 入:  /
 488          输 出:  /
C51 COMPILER V8.18   A7102                                                                 03/20/2010 16:53:38 PAGE 9   

 489          描 述:  A7102使用12.8M晶体为基准源 
 490          ***********************************************/
 491          void    A7102_Config_Chip(void)
 492          {
 493   1              uint    temp = 0x0000;
 494   1      
 495   1              iSPI_Tre        = negative;
 496   1              iSPI_Trs        = negative;
 497   1      
 498   1              /* rate = 50kbps,IF = 100k,CSC[2:0] = 001,System clock = 64*IF = 6.4M */
 499   1              A7102_Register_Write(Reg_SystemClock,0x0079);
 500   1              
 501   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 */
 502   1              /* MDIV = 0,IP选择范围32 - 127 */
 503   1              A7102_Register_Write(Reg_PLL_I,0x0043);
 504   1              /* FP[15:0],默认434Mhz */
 505   1              A7102_Register_Write(Reg_PLL_II,0xcfff);
 506   1              /* default 0x0000,无调校 */
 507   1              A7102_Register_Write(Reg_PLL_III,0x0000);
 508   1              /* PDL[2:0] =011,HFB =0(<500mhz),VCS[1:0] =00,CPS =0(normal),CPC[1:0] =01(charge pump 1mA) */
 509   1              /* VCS[1:0] = 01,VCO电流控制为1,SDPW = 1 */
 510   1              A7102_Register_Write(Reg_PLL_IV,0x066c);        
 511   1              
 512   1              
 513   1      #if     mode_modulation  
 514   1              /* TME =1,发射带调制,GS =0,高斯滤波器关闭,FX = 12.8M,FDP = 101,FD = 0010 0000,
 515   1                 频偏 fdev = FX/(RRC[3:0]+1)*(FD[7:0]*(2^(FDP[2:0]))/8/65536),
 516   1                           = 12800khz * 32 * (2^5) /(2^19) 
 517   1                           = 25khz */
 518   1              A7102_Register_Write(Reg_TXI,0x1520);
 519   1                 
 520   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
 527   1      
 528   1              /* 发射功率设置为最大功率 */
 529   1              A7102_Register_Write(Reg_TXII,0x0337);
 530   1      
 531   1              /* MPL[1:0] = 01,SLF[2:0] = 100,ETH[1:0] = 00,无位错误选择,DMOS = 0,DMG[1:0] = 01,增益X3 */
 532   1              /* BW[1:0] = 00,50Khz,ULS= 1,下旁波带,HGM =1,高增益 */
 533   1              A7102_Register_Write(Reg_RXI,0x1813);
 534   1      
 535   1              /* Amic推荐值 */
 536   1              A7102_Register_Write(Reg_RXII,0x500b);
 537   1      
 538   1              /* CDM =1,carrier 打开 */
 539   1              A7102_Register_Write(Reg_ADC,0x0000);
 540   1              
 541   1              /* TX fifo <8字节,RX fifo > 56字节时报警, */
 542   1              A7102_Register_Write(Reg_FIFO,0x4000|(C_FIFO_Byte-1));
 543   1              
 544   1              /* MCS = 0,Manchester打开,FECS = 0,FEC打开,CRCS =0,CRC打开,IDL =1,id code =4字节,PML[1:0] = 11,前
             -导4字节 */
 545   1              A7102_Register_Write(Reg_Code,0x150f);
 546   1      
 547   1      #if     mode_switch
                      /* 打开位时钟,管脚控制收发,无载波侦测 */
C51 COMPILER V8.18   A7102                                                                 03/20/2010 16:53:38 PAGE 10  

                      A7102_Register_Write(Reg_PinControl,0x0222);
              #else
 551   1              // 打开位时钟,寄存器控制收发,无载波侦测 */
 552   1              A7102_Register_Write(Reg_PinControl,0x0022);
 553   1      #endif
 554   1      
 555   1              /* VTL[2:0] = 100,VTH = VDD-0.5V, VTH[2:0] = 100,VTL =0.5V */
 556   1              A7102_Register_Write(Reg_Calibration,0x4886);
 557   1              
 558   1              A7102_Register_Write(Reg_ModeControl,0x00e0); //STB2==>syn mode
 559   1              //delay 80us    
 560   1              for(temp = 0;temp < 0xffff;temp++)
 561   1              {
 562   2                  _nop_();
 563   2                  _nop_();
 564   2              }
 565   1      }
 566          /***********************************************
 567          函 数:  Initialisation_RF()
 568          功 能:  上电初始化A7102
 569          输 入:  /
 570          输 出:  /
 571          描 述:  /
 572          ***********************************************/
 573          void    Initialisation_RF(void)
 574          {
 575   1              uint i;
 576   1      
 577   1              iSPI_PowerOn           = negative;
 578   1              /* A7102稳定时间延迟配置 */
 579   1              for(i = 0;i < 0xffff;i++)
 580   1              {
 581   2                  _nop_();
 582   2                  _nop_();
 583   2                  _nop_();
 584   2                  _nop_();
 585   2              }
 586   1              iSPI_PowerOn        = positive;
 587   1              /* A7102稳定时间延迟配置 */
 588   1              for(i = 0;i < 0xffff;i++)
 589   1              {
 590   2                  _nop_();
 591   2                  _nop_();
 592   2                  _nop_();
 593   2                  _nop_();
 594   2              }       
 595   1              
 596   1              A7102_Reset_Chip();
 597   1              
 598   1              for(i = 0;i < 0xffff;i++)
 599   1              {
 600   2                  _nop_();
 601   2                  _nop_();
 602   2                  _nop_();
 603   2                  _nop_();
 604   2              }
 605   1              
 606   1              /* XCC =1(crystal high current),XS =1(crystal on) */
 607   1              /* CGS = 0,因为使用标准12.8mhz晶体 */
 608   1              A7102_Register_Write(Reg_Crystal,0x0015);
 609   1              for(i = 0;i < 0xffff;i++)
 610   1              {
C51 COMPILER V8.18   A7102                                                                 03/20/2010 16:53:38 PAGE 11  

 611   2                  _nop_();
 612   2                  _nop_();
 613   2              }
 614   1              /* FMT =0,normal mode,FMS =1,FIFO mode,CER = 1,RF chip 使能,PLLE = 0,使用12.8Mhz标准晶体,PLL关闭 *
             -/
 615   1              A7102_Register_Write(Reg_ModeControl,0x00c0); //STB1==>standby mode
 616   1              //delay 0.5ms
 617   1              for(i = 0;i < 0xffff;i++)
 618   1              {
 619   2                  _nop_();
 620   2                  _nop_();
 621   2              }
 622   1              A7102_Id_Write(&id_buff);
 623   1              A7102_Id_Read(&rece_buff);
 624   1              
 625   1              A7102_Config_Chip();        
 626   1              
 627   1              TX_Freq_Calibration    = A7102_Calibration_Frequency(C_Tx_Frequency); 
 628   1              RX_Freq_Calibration    = A7102_Calibration_Frequency(C_Rx_Frequency);
 629   1           
 630   1              /* reset fifo */
 631   1              A7102_Reset_FifoRX();
 632   1              A7102_Reset_FifoTX();
 633   1      
 634   1              /* 默认接收状态 */
 635   1              A7102_Status_Receiver();     
 636   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 + -