ad9851.c

来自「单片机控制FPGA的程序,包括AD转换,频率输出,测试程序」· C语言 代码 · 共 69 行

C
69
字号
#include "includes.h"

void delay(unsigned int t_i)
{
  unsigned int i;
  for(i = t_i; i > 0; i--);

}
void ad9851_init(void)
{
  RESET = 0;
  W_CLK = 0;
  FQ_UD = 0;
  RESET = 1;     //9851复位
  delay(delay_con);
  RESET = 0;   
  delay(delay_con);

  W_CLK = 0;     //改变为串行数据传输模式
  delay(delay_con);
  W_CLK = 1;
  delay(delay_con);
  W_CLK = 0;
  delay(delay_con);
  FQ_UD = 1;
  delay(delay_con);
  FQ_UD = 0;

}

void ad9851_send(unsigned char* ptr_data)
{
  unsigned char i,j;
  unsigned char temp;
  FQ_UD = 0;
  for(i = 0; i < 5; i++)
  {
    temp = *(ptr_data + i);
    for(j = 0; j < 8; j++)
	{ 
	  D7 = (temp>>j) & 0x01;
      W_CLK = 1;
	  delay(delay_con);
	  W_CLK = 0;
	  delay(delay_con);
	}
  }
  FQ_UD = 1;
  delay(delay_con);
  FQ_UD = 0;
}
void ad9851_calfreq(double freq/*单位是MHz*/,float phase_data/*单位是度,应为11。25度的整数倍*/, unsigned char* ptr_data)
{
  unsigned char i;
  unsigned char temp_phase;
  unsigned long temp_fdata;
  temp_fdata =  (freq / STEP_OSC) * 1000000;
  for(i = 0; i <4; i++)
    *(ptr_data + i) = (temp_fdata >> (8 * i)) & 0xff;


  temp_phase = (unsigned char)(phase_data /11.25);
  *(ptr_data + 4) = ((temp_phase << 3) & 0xf8);  //如果采用掉电模式,再或上PWR_DOWN,如果采用6*osc则或上MULT6

}



⌨️ 快捷键说明

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