久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7612|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

ADF4351單片機程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:227452 發(fā)表于 2017-8-13 21:25 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
需要的拿去吧

ADF4351單片機驅(qū)動源程序如下(c語言代碼,請自行移植到各個嵌入式平臺.):
  1. #include "ADF4351.h"
  2. #include "delay.h"

  3. //#define
  4. #define ADF4351_R0            ((u32)0X2C8018)
  5. #define ADF4351_R1            ((u32)0X8029)
  6. #define ADF4351_R2            ((u32)0X10E42)
  7. #define ADF4351_R3            ((u32)0X4B3)
  8. #define ADF4351_R4            ((u32)0XEC803C)
  9. #define ADF4351_R5            ((u32)0X580005)

  10. #define ADF4351_R1_Base    ((u32)0X8001)
  11. #define ADF4351_R4_Base    ((u32)0X8C803C)
  12. #define ADF4351_R4_ON      ((u32)0X8C803C)
  13. #define ADF4351_R4_OFF    ((u32)0X8C883C)

  14. #define ADF4351_RF_OFF    ((u32)0XEC801C)

  15. #define ADF4351_PD_ON        ((u32)0X10E42)
  16. #define ADF4351_PD_OFF    ((u32)0X10E02)


  17. void ADF_Output_GPIOInit(void)
  18. {
  19.     GPIO_InitTypeDef GPIO_InitStruct;
  20.    
  21.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  22.     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  23.     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  24.     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  25.     GPIO_Init(GPIOA, &GPIO_InitStruct);
  26.    
  27. }

  28. void ADF_Input_GPIOInit(void)
  29. {
  30.     GPIO_InitTypeDef GPIO_InitStruct;
  31.    
  32.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  33.     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
  34.     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  35.     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  36.     GPIO_Init(GPIOA, &GPIO_InitStruct);
  37.    
  38.     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
  39.     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
  40.     GPIO_Init(GPIOA, &GPIO_InitStruct);   
  41. }

  42. void delay (int length)
  43. {
  44.     while (length >0)
  45.         length--;
  46. }

  47. void WriteToADF4351(u8 count, u8 *buf)
  48. {
  49.     u8 ValueToWrite = 0;
  50.     u8 i = 0;
  51.     u8 j = 0;
  52.    
  53. //    ADF_Output_GPIOInit();
  54.    
  55.     ADF4351_CE = 1;
  56.     delay_us(1);
  57.     ADF4351_CLK = 0;
  58.     ADF4351_LE = 0;
  59.     delay_us(1);
  60.    
  61.     for(i = count; i>0; i--)
  62.     {
  63.         ValueToWrite = *(buf+i-1);
  64.         for(j=0; j<8; j++)
  65.         {
  66.             if(0x80 == (ValueToWrite & 0x80))
  67.             {
  68.                 ADF4351_OUTPUT_DATA = 1;
  69.             }
  70.             else
  71.             {
  72.                 ADF4351_OUTPUT_DATA = 0;
  73.             }
  74.             delay_us(1);
  75.             ADF4351_CLK = 1;
  76.             delay_us(1);
  77.             ValueToWrite <<= 1;
  78.             ADF4351_CLK = 0;   
  79.         }
  80.     }
  81.     ADF4351_OUTPUT_DATA = 0;
  82.     delay_us(1);
  83.     ADF4351_LE = 1;
  84.     delay_us(1);
  85.     ADF4351_LE = 0;
  86. }


  87. void ReadToADF4351(u8 count, u8 *buf)
  88. {
  89.     u8 i = 0;
  90.     u8 j = 0;
  91.     u8 iTemp = 0;
  92.     u8 RotateData = 0;
  93.    
  94.     ADF_Input_GPIOInit();
  95.     ADF4351_CE = 1;
  96.     delay_us(1);
  97.     ADF4351_CLK = 0;
  98.     ADF4351_LE = 0;
  99.     delay_us(1);
  100.    
  101.     for(i = count; i>0; i--)
  102.     {
  103.         for(j = 0; j<8; j++)
  104.         {
  105.             RotateData <<=1;
  106.             delay_us(1);
  107.             iTemp = ADF4351_INPUT_DATA;
  108.             ADF4351_CLK = 1;
  109.             if(0x01 == (iTemp&0x01))
  110.             {
  111.                 RotateData |= 1;
  112.             }
  113.             delay_us(1);
  114.             ADF4351_CLK = 0;
  115.         }
  116.         *(buf+i-1) = RotateData;
  117.     }
  118.     delay_us(1);
  119.     ADF4351_LE = 1;
  120.     delay_us(1);
  121.     ADF4351_LE = 0;
  122. }


  123. void ADF4351Init(void)
  124. {
  125.     u8 buf[4] = {0,0,0,0};
  126.    
  127.     ADF_Output_GPIOInit();
  128.    
  129.     buf[3] = 0x00;
  130.     buf[2] = 0x58;                //R5
  131.     buf[1] = 0x00;                //write communication register 0x00580005 to control the progress
  132.      buf[0] = 0x05;                //to write Register 5 to set digital lock detector
  133.     WriteToADF4351(4,buf);        

  134.     buf[3] = 0x00;                //R4
  135.     buf[2] = 0xec;                //(DB23=1)The signal is taken from the VCO directly;(DB22-20:4H)the RF divider is 16;(DB19-12:C8H)R is 200
  136.     buf[1] = 0x80;                //(DB11=0)VCO powerd up;
  137.      buf[0] = 0x3C;                //(DB5=1)RF output is enabled;(DB4-3=3H)Output power level is 5
  138.     WriteToADF4351(4,buf);        

  139.     buf[3] = 0x00;
  140.     buf[2] = 0x00;                //R3
  141.     buf[1] = 0x04;                //(DB14-3:96H)clock divider value is 150.
  142.      buf[0] = 0xB3;
  143.     WriteToADF4351(4,buf);   
  144.    
  145.     buf[3] = 0x00;                //R2
  146. //    buf[2] = 0x01;                //(DB6=1)set PD polarity is positive;(DB7=1)LDP is 6nS;
  147. //    buf[1] = 0x0E;                //(DB8=0)enable fractional-N digital lock detect;
  148.     buf[2] = 0x00;
  149.     buf[1] = 0x4E;
  150.      buf[0] = 0x42;                //(DB12-9:7H)set Icp 2.50 mA;
  151.     WriteToADF4351(4,buf);        //(DB23-14:1H)R counter is 1

  152.     buf[3] = 0x00;
  153.     buf[2] = 0x00;                //R1
  154.     buf[1] = 0x80;               //(DB14-3:6H)MOD counter is 6;
  155.      buf[0] = 0x29;               //(DB26-15:6H)PHASE word is 1,neither the phase resync
  156.     WriteToADF4351(4,buf);       //nor the spurious optimization functions are being used
  157.                                //(DB27=1)prescaler value is 8/9

  158.     buf[3] = 0x00;
  159.     buf[2] = 0x2c;
  160.     buf[1] = 0x80;                //R0
  161.      buf[0] = 0x18;                //(DB14-3:0H)FRAC value is 0;
  162.     WriteToADF4351(4,buf);        //(DB30-15:140H)INT value is 320;
  163.    
  164.    
  165. //    WriteOneRegToADF4351(ADF4351_R0);
  166. //    WriteOneRegToADF4351(ADF4351_R1);
  167. //    WriteOneRegToADF4351(ADF4351_R2);
  168. //    WriteOneRegToADF4351(ADF4351_R3);
  169. //    WriteOneRegToADF4351(ADF4351_R4);
  170. //    WriteOneRegToADF4351(ADF4351_R5);
  171.    
  172. }
  173. void WriteOneRegToADF4351(u32 Regster)
  174. {
  175.     u8 buf[4] = {0,0,0,0};
  176.     buf[3] = (u8)((Regster>>24)&(0X000000FF));
  177.     buf[2] = (u8)((Regster>>16)&(0X000000FF));
  178.     buf[1] = (u8)((Regster>>8) &(0X000000FF));
  179.     buf[0] = (u8)((Regster)&(0X000000FF));
  180.     WriteToADF4351(4,buf);   
  181. }
  182. void ADF4351_Init_some(void)
  183. {
  184.     WriteOneRegToADF4351(ADF4351_R2);
  185.     WriteOneRegToADF4351(ADF4351_R3);
  186.     WriteOneRegToADF4351(ADF4351_R5);
  187. }

  188. void ADF4351WriteFreq(float Fre)        //    (xx.x) M Hz
  189. {
  190.     u16 Fre_temp, N_Mul = 1, Mul_Core = 0;
  191.     u16 INT_Fre, Frac_temp, Mod_temp, i;
  192.     u32 W_ADF4351_R0 = 0, W_ADF4351_R1 = 0, W_ADF4351_R4 = 0;
  193.     float multiple;
  194.    
  195.     if(Fre < 35.0)
  196.         Fre = 35.0;
  197.     if(Fre > 4400.0)
  198.         Fre = 4400.0;
  199.     Mod_temp = 250;
  200.     Fre = ((float)((u32)(Fre*10)))/10;
  201.    
  202.     Fre_temp = Fre;
  203.     for(i = 0; i < 10; i++)
  204.     {
  205.         if(((Fre_temp*N_Mul) >= 2199.9) && ((Fre_temp*N_Mul) <= 4400.1))
  206.             break;
  207.         Mul_Core++;
  208.         N_Mul = N_Mul*2;
  209.     }
  210.    
  211.     multiple = (Fre*N_Mul)/25;        //帶寬出已固定為參考25M,若改參考頻率,則應(yīng)修改R4低字節(jié)
  212.     INT_Fre = (u16)multiple;
  213. //    if(((u32)(multiple*10000)%10)> 5)
  214. //        multiple += 0.001;
  215.     Frac_temp = ((u32)(multiple*250))%250;
  216.     while(((Frac_temp%5) == 0) && ((Mod_temp%5) == 0))
  217.     {
  218.         Frac_temp = Frac_temp/5;
  219.         Mod_temp = Mod_temp/5;
  220.     }
  221.     while(((Frac_temp%2) == 0)&&((Mod_temp%2) == 0))
  222.     {
  223.         Frac_temp = Frac_temp/2;
  224.         Mod_temp = Mod_temp/2;
  225.     }
  226.    
  227.     Mul_Core %= 7;
  228.     W_ADF4351_R0 = (INT_Fre<<15)+(Frac_temp<<3);
  229.     W_ADF4351_R1 = ADF4351_R1_Base + (Mod_temp<<3);
  230.     W_ADF4351_R4 = ADF4351_R4_ON + (Mul_Core<<20);
  231.    
  232.    
  233. //    WriteOneRegToADF4351(ADF4351_PD_OFF); //ADF4351_RF_OFF
  234. //    WriteOneRegToADF4351((u32)(ADF4351_R4_OFF + (6<<20)));
  235.     WriteOneRegToADF4351(ADF4351_RF_OFF);
  236.     WriteOneRegToADF4351(W_ADF4351_R1);
  237.     WriteOneRegToADF4351(W_ADF4351_R0);
  238.     WriteOneRegToADF4351(W_ADF4351_R4);
  239. //    WriteOneRegToADF4351(ADF4351_PD_ON);
  240.    
  241. //    WriteOneRegToADF4351((u32)(ADF4351_R4_ON + (Mul_Core<<20)));
  242. }

復(fù)制代碼
  1. #ifndef _ADF4351_H_
  2. #define _ADF4351_H_

  3. #include "sys.h"

  4. #define ADF4351_CLK PAout(7)
  5. #define ADF4351_OUTPUT_DATA PAout(6)
  6. #define ADF4351_LE PAout(5)
  7. #define ADF4351_CE PAout(4)

  8. #define ADF4351_INPUT_DATA PAin(1)


  9. void ADF4351Init(void);
  10. void ReadToADF4351(u8 count, u8 *buf);
  11. void WriteToADF4351(u8 count, u8 *buf);
  12. void WriteOneRegToADF4351(u32 Regster);
  13. void ADF4351_Init_some(void);
  14. void ADF4351WriteFreq(float Fre);                //        (xx.x) M Hz
  15. void ADF_Output_GPIOInit(void);
  16. #endif

復(fù)制代碼



c語言代碼,請自行移植到各個嵌入式平臺

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:248916 發(fā)表于 2017-11-15 15:16 來自手機 | 只看該作者
有詳細的么。
回復(fù)

使用道具 舉報

板凳
ID:499266 發(fā)表于 2019-7-16 09:39 | 只看該作者
感覺很不錯誒,最近剛開始學(xué)習(xí)ADF4351模塊,還有很多地方不懂,作者大大的這個挺有參考價值的
回復(fù)

使用道具 舉報

地板
ID:970087 發(fā)表于 2021-10-6 15:50 | 只看該作者
下載了 怎么沒有余下代碼
回復(fù)

使用道具 舉報

5#
ID:262 發(fā)表于 2021-10-7 03:29 | 只看該作者
NL950806 發(fā)表于 2021-10-6 15:50
下載了 怎么沒有余下代碼

在那個.c文件里面,234行的后面就是
回復(fù)

使用道具 舉報

6#
ID:970087 發(fā)表于 2021-10-8 16:47 | 只看該作者
heicad 發(fā)表于 2021-10-7 03:29
在那個.c文件里面,234行的后面就是

程序怎么有錯誤呢
回復(fù)

使用道具 舉報

7#
ID:970087 發(fā)表于 2021-10-8 16:52 | 只看該作者
heicad 發(fā)表于 2021-10-7 03:29
在那個.c文件里面,234行的后面就是

是C文件里面 數(shù)4行下面 的程序嗎  把程序加進去就行了嗎
回復(fù)

使用道具 舉報

8#
ID:970087 發(fā)表于 2021-10-8 17:11 | 只看該作者
heicad 發(fā)表于 2021-10-7 03:29
在那個.c文件里面,234行的后面就是

是加在程序的后面 還是哪里
回復(fù)

使用道具 舉報

9#
ID:262 發(fā)表于 2021-10-9 01:35 | 只看該作者
NL950806 發(fā)表于 2021-10-8 17:11
是加在程序的后面 還是哪里

樓主的這個diam估計是從他自己的工程項目中提取取出來,又沒有說是什么MCU芯片的,你得移植進你的項目,你用的是什么單片機?得改一下delay,把ADF4351.c里面該去掉的全都去掉,然后加入你自己的main()才行,樓主的文件只是一些函數(shù)而已,你得自己在main里面調(diào)用這些函數(shù),實現(xiàn)你自己的功能,說白了就是復(fù)制粘貼然,然后用你自己的思路來組合,以便實現(xiàn)你需要的功能.你可能需要一個完整的實例來參考學(xué)習(xí),論壇里面有人上傳這個芯片的430MCU的工程,你可以參考一下:http://www.zg4o1577.cn/bbs/dpj-99871-1.html
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级毛片观看 | wwwsihu| 久久久免费观看视频 | 国产日韩久久 | 99精品国自产在线观看 | 久久一级| 国产精品日韩欧美一区二区三区 | 亚洲三级在线 | 天天曰天天曰 | 欧美综合一区 | 亚洲最大成人综合 | 午夜精品久久久久久久星辰影院 | 欧美日韩在线综合 | 久久久免费观看视频 | 欧美成人一区二免费视频软件 | 欧美一二三四成人免费视频 | 久久国产一区 | 国产成视频在线观看 | 91高清视频在线观看 | 亚洲区在线 | 黄色av观看| 成人免费视频网 | 欧美区在线 | 中文字幕国产 | 91精品国产综合久久久久 | 久久国产精品视频观看 | 国产成人精品一区二区三区四区 | 亚洲一区av | 日韩一区二区在线视频 | 国产永久免费 | 久久精品中文字幕 | 亚洲美乳中文字幕 | 91在线观看视频 | 国产视频在线观看一区二区三区 | 久久综合狠狠综合久久综合88 | 中文字幕国产视频 | 亚洲精选久久 | 久草热视频 | 日日夜精品视频 | 青青久草 | 日韩一级精品视频在线观看 |