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

📄 a7102.lst

📁 无线模块A7102的C语言测试程序源码,
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -