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

📄 ad9958.lst

📁 AD9958arm控制源程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
ARM COMPILER V2.53,  AD9958                                                                23/07/06  16:59:03  PAGE 1   


ARM COMPILER V2.53, COMPILATION OF MODULE AD9958
OBJECT MODULE PLACED IN AD9958.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe driver\AD9958.C THUMB WARNINGLEVEL(3) OPTIMIZE(8,SPEED) DEBUG PRINT(.\AD9958
                    -.LST) TABS(4) OBJECT(AD9958.obj) 

stmt  level    source

    1          /*------------------------------------------------------
    2          FILE NAME   : AD9958.C
    3          DESCRIPTION : AD9958 driver.
    4          VERSION     : 0.0.0 (C)aureole
    5          AUTHOR      : Aureole
    6          CREATE DATE : 4.1.2006
    7          MODIFY DATE : ---
    8          LOGS        :-\  
    9                    1. First create for hardware test. 4.1.2006
   10                    
   11          
   12          --------------------------------------------------------*/
   13          
   14          //-----------------Include files-------------------------//
   15          #include "..\include\ad9958.h"
   16          #include "..\include\spi.h"
   17          #include "..\include\common.h"
   18          #include "..\include\config.h"
   19          
   20          
   21          
   22          //-----------------Function-------------------------------//
   23          
   24          
   25          /*---------------------------------------------------------------
   26          NAME       : set_ad9958_sync
   27          ENTRY  TYPE: void
   28          RETURN TYPE: void
   29          PURPOSE    : ---
   30          VERSION    : 0.5
   31          DESCRIPTION: 
   32          CREATE DATE: 4.6.2006
   33          LOGS       : 1.first create;
   34          -----------------------------------------------------------------*/
   35          void set_ad9958_synchronization(void)
   36          {
   37   1          //Enable both channel clear phase accumulator
   38   1          AD9958_CS_OFF
   39   1          AD9958_UPDATE_OFF
   40   1          send_data_to_spi(0x02);
   41   1          send_data_to_spi(0x10);
   42   1          send_data_to_spi(0x00);
   43   1          AD9958_UPDATE_ON
   44   1          AD9958_CS_ON
   45   1      
   46   1          //Disable both channel clear phase accumulator
   47   1          AD9958_CS_OFF
   48   1          AD9958_UPDATE_OFF
   49   1          send_data_to_spi(0x02);
   50   1          send_data_to_spi(0x00);
   51   1          send_data_to_spi(0x00);
   52   1          AD9958_UPDATE_ON
   53   1          AD9958_CS_ON        
   54   1      }   
   55          
   56          /*---------------------------------------------------------------
   57          NAME       : set_ad9958_pll
   58          ENTRY  TYPE: int
ARM COMPILER V2.53,  AD9958                                                                23/07/06  16:59:03  PAGE 2   

   59          RETURN TYPE: unsigned int(pll multilpe sucess return 1,otherwise return 0)
   60          PURPOSE    : ---
   61          VERSION    : 0.1
   62          DESCRIPTION: 
   63          CREATE DATE: 4.5.2006
   64          LOGS       : 1.first create;
   65          -----------------------------------------------------------------*/
   66          int set_ad9958_pll(unsigned int mult)
   67          {
   68   1          
   69   1          if(mult<3 || mult>21)return 0;
   70   1          
   71   1          if(mult>(160/AD9958_CLOCK)){ //Set PLL VCO gain;
   72   2              mult<<=2;
   73   2              mult|=0x80;
   74   2          }else {
   75   2              mult<<=2;
   76   2          }
   77   1          
   78   1          
   79   1          AD9958_CS_OFF
   80   1          AD9958_UPDATE_OFF
   81   1          
   82   1          send_data_to_spi(0x01); 
   83   1          send_data_to_spi((unsigned char)mult);
   84   1          send_data_to_spi(0x00);
   85   1          send_data_to_spi(0x00);
   86   1          
   87   1          AD9958_UPDATE_ON
   88   1          AD9958_CS_ON
   89   1          
   90   1          return 1;
   91   1      }
   92              
   93          /*---------------------------------------------------------------
   94          NAME       : initialize_ad9958
   95          ENTRY  TYPE: int
   96          RETURN TYPE: void
   97          PURPOSE    : ---
   98          VERSION    : 0.1
   99          DESCRIPTION: 
  100          CREATE DATE: 4.5.2006
  101          LOGS       : 1.first create;
  102          -----------------------------------------------------------------*/
  103          void initialize_ad9958(void)
  104          {
  105   1          INITIALIZE_AD9958_PORT
  106   1          
  107   1          AD9958_DDSCR_ON
  108   1          AD9958_DDSCR_OFF        
  109   1          set_ad9958_pll(AD9958_PLL_MULTIPLE);
  110   1      }
  111          
  112          /*---------------------------------------------------------------
  113          NAME       : set_frequency
  114          ENTRY  TYPE: int channel,double frequency;
  115          RETURN TYPE: int(set frequency success return 1,else return 0);
  116          PURPOSE    : ---
  117          VERSION    : 0.1
  118          DESCRIPTION: chan=0 channel a ;chan=1 channel b; chan=2 channel a&b;
  119                   
  120          CREATE DATE: 4.5.2006
  121          LOGS       : 1.first create; 
  122          -----------------------------------------------------------------*/
  123           int set_frequency(int chan,double freq)
  124          {
ARM COMPILER V2.53,  AD9958                                                                23/07/06  16:59:03  PAGE 3   

  125   1          unsigned char chan_temp=0;
  126   1          UN_INT freq_temp;
  127   1          int i=0;
  128   1      
  129   1      
  130   1          if(chan<0 || chan>2)return 0;
  131   1          if(freq>MAX_OUTPUT_FREQUENCY || freq<0)return 0;
  132   1          
  133   1          //select channel;
  134   1          if(chan==0)chan_temp=0x40;
  135   1              else if(chan==1)chan_temp=0x80;
  136   1                  else if(chan==2)chan_temp=0xf0;
  137   1                  
  138   1          freq*=(double)17.179869184;
  139   1          
  140   1          freq_temp.int_value=(unsigned int)freq;
  141   1      
  142   1          //Hardware operation
  143   1          AD9958_CS_OFF
  144   1          AD9958_UPDATE_OFF
  145   1          
  146   1          
  147   1          send_data_to_spi(INSTRUCTION_CSR);
  148   1          send_data_to_spi(chan_temp);
  149   1          
  150   1          
  151   1          send_data_to_spi(INSTRUCTION_CTW0); 
  152   1          send_data_to_spi(freq_temp.char_value._4);
  153   1          send_data_to_spi(freq_temp.char_value._3);
  154   1          send_data_to_spi(freq_temp.char_value._2);
  155   1          send_data_to_spi(freq_temp.char_value._1);
  156   1          
  157   1          AD9958_UPDATE_ON
  158   1          AD9958_CS_ON
  159   1              
  160   1          set_ad9958_synchronization();
  161   1          return 1;
  162   1      }
  163          
  164          /*---------------------------------------------------------------
  165          NAME       : set_phase
  166          ENTRY  TYPE: int chan,float pha;
  167          RETURN TYPE: int(set phase success return 1,else return 0);
  168          PURPOSE    : ---
  169          VERSION    : 0.1
  170          DESCRIPTION: chan=0 channel a ;chan=1 channel b; chan=2 channel a&b;
  171                   
  172          CREATE DATE: 4.6.2006
  173          LOGS       : 1.first create;
  174          -----------------------------------------------------------------*/
  175          int set_phase(int chan,double pha)
  176          {
  177   1          unsigned char chan_temp=0;
  178   1          unsigned short pha_temp;
  179   1      
  180   1          if(chan<0 || chan>2)return 0;
  181   1          if(pha>359.9 || pha<0)return 0;
  182   1          
  183   1          //select channel;
  184   1          if(chan==0)chan_temp=0x40;
  185   1              else if(chan==1)chan_temp=0x80;
  186   1                  else if(chan==2)chan_temp=0xf0;
  187   1                  
  188   1          pha*=45.511111111111111111111111111111;
  189   1          
  190   1          pha_temp=(unsigned short)pha;
ARM COMPILER V2.53,  AD9958                                                                23/07/06  16:59:03  PAGE 4   

  191   1          
  192   1          //Hardware operation
  193   1          AD9958_CS_OFF
  194   1          AD9958_UPDATE_OFF
  195   1          
  196   1          
  197   1          send_data_to_spi(INSTRUCTION_CSR);
  198   1          send_data_to_spi(chan_temp);
  199   1          
  200   1          
  201   1          send_data_to_spi(INSTRUCTION_CPW0); 
  202   1          send_data_to_spi((unsigned char)((pha_temp&0xff00)>>8));
  203   1          send_data_to_spi((unsigned char)(pha_temp&0x00ff));
  204   1          
  205   1          
  206   1          AD9958_UPDATE_ON
  207   1          AD9958_CS_ON        
  208   1          set_ad9958_synchronization();
  209   1          return 1;
  210   1      }
  211              
  212              
ARM COMPILER V2.53,  AD9958                                                                23/07/06  16:59:03  PAGE 5   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (send_data_to_spi?T)
 EXTERN CODE16 (?C?FPCMP?T)
 EXTERN CODE16 (?C?FPMUL?T)
 EXTERN CODE16 (?C?CASTF?T)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -