dsp驱动ad9850程序

发表于 2017-11-05 11:18:43 收藏 已收藏
赞(0) •  评论(0

dsp驱动ad9850程序

发表于 2017-11-05 11:18:43

  传统的DSP程序开发包含两方面程序:即配置、控制、中断等管理DSP片内外设、接口的硬件相关程序和基于应用的算法程序。这样的系统结构,应用程序与硬件相关程序紧密的结合一起,限制了程序的可移植性和通用性,软件开发总要从零开始,存在诸多重复工作。一旦硬件平台有变化,往往与硬件程序捆绑一起的应用程序也需改动,代码的维护性和可移植性均不高。

  通过建立硬件驱动程序的开发模式,可使上述现象得到改善。因此,本文介绍一种开发TI公司DSP片内及片外硬件外设驱动程序的方法,并以C5000 DSP的McBSP/DMA及TMS320C5509的USB驱动程序开发为具体对象,介绍这种方法的应用。

  ad9850程序

  //***************************************************//

  //函数1: ad9850_reset() //

  //函数2: ad9850_reset_serial() //

  //函数3: ad9850_wr_parrel(unsigned char w0,double frequence)//

  //函数4: ad9850_wr_serial(unsigned char w0,double frequence)//

  //版本: V1.1 //

  //***************************************************//

  // 子程序说明 //

  //***************************************************//

  //函数1: ad9850_reset()

  // 复位ad9850,之后为并口写入模式

  //函数2: ad9850_reset_serial()

  // 复位ad9850,之后为串口写入模式

  //函数3: ad9850_wr_parrel(unsigned char w0,double frequence)

  // 并口写ad9850数据,w0为ad9850中w0的数据,frequence

  // 为写入的频率

  //函数4: ad9850_wr_serial(unsigned char w0,double frequence)

  // 串口写ad9850数据,w0为ad9850中w0的数据,frequence

  // 为写入的频率

  //需定义的位:

  //ad9850_w_clk ;

  //ad9850_fq_up ;

  //ad9850_rest ;

  //ad9850_bit_data ;

  //例:

  //sbit ad9850_w_clk =P2^2;

  //sbit ad9850_fq_up =P2^1;

  //sbit ad9850_rest =P2^0;

  //sbit ad9850_bit_data =P1^7;

  //***************************************************//

  // 写数据说明 //

  //***************************************************//

  //写数据例:

  // ad9850_reset()

  // wr_lcd02_data(unsigned char x)

  // ad9850_wr_parrel(0x01,1000)

  // ad9850_wr_serial(0x01,1000)

  //***************************************************//

  //---------------------------------------------------//

  // 程序 //

  //---------------------------------------------------//

  # include 《reg51.h》

  # include 《stdio.h》

  # include 《intrins.h》

  sbit ad9850_w_clk =P1^0; //P2.2口接ad9850的w_clk脚/PIN7

  sbit ad9850_fq_up =P1^1; //P2.1口接ad9850的fq_up脚/PIN8

  sbit ad9850_rest =P1^2; //P2.0口接ad9850的rest脚/PIN12

  sbit ad9850_bit_data =P1^7; //P1.7口接ad9850的D7脚/PIN25

  //P1为8位数据口

  //***************************************************//

  // ad9850复位(并口模式) //

  //---------------------------------------------------//

  void ad9850_reset()

  {

  ad9850_w_clk=0;

  ad9850_fq_up=0;

  //rest信号

  ad9850_rest=0;

  ad9850_rest=1;

  ad9850_rest=0;

  }

  //***************************************************//

  // ad9850复位(串口模式) //

  //---------------------------------------------------//

  void ad9850_reset_serial()

  {

  ad9850_w_clk=0;

  ad9850_fq_up=0;

  //rest信号

  ad9850_rest=0;

  _nop_();

  ad9850_rest=1;

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  ad9850_rest=0;

  _nop_();

  _nop_();

  //w_clk信号

  ad9850_w_clk=0;

  ad9850_w_clk=1;

  _nop_();

  ad9850_w_clk=0;

  //fq_up信号

  ad9850_fq_up=0;

  ad9850_fq_up=1;

  _nop_();

  ad9850_fq_up=0;

  }

  //***************************************************//

  // 向ad9850中写命令与数据(并口) //

  //---------------------------------------------------//

  void ad9850_wr_parrel(unsigned char w0,double frequence)

  {

  unsigned char w;

  long int y;

  double x;

  //计算频率的HEX值

  x=4294967295/125;//适合125M晶振

  //如果时钟频率不为125MHZ,修改该处的频率值,单位MHz !!!

  frequence=frequence/1000000;

  frequence=frequence*x;

  y=frequence;

  //写w0数据

  w=w0;

  P3=w; //w0

  ad9850_w_clk=1;

  ad9850_w_clk=0;

  //写w1数据

  w=(y》》24);

  P3=w; //w1

  ad9850_w_clk=1;

  ad9850_w_clk=0;

  //写w2数据

  w=(y》》16);

  P3=w; //w2

  ad9850_w_clk=1;

  ad9850_w_clk=0;

  //写w3数据

  w=(y》》8);

  P3=w; //w3

  ad9850_w_clk=1;

  ad9850_w_clk=0;

  //写w4数据

  w=(y》》0);

  P3=w; //w4

  ad9850_w_clk=1;

  ad9850_w_clk=0;

  //移入始能

  ad9850_fq_up=1;

  ad9850_fq_up=0;

  }

  //***************************************************//

  // 向ad9850中写命令与数据(串口) //

  //---------------------------------------------------//

  void ad9850_wr_serial(unsigned char w0,double frequence)

  {

  unsigned char i,w;

  long int y;

  double x;

  //计算频率的HEX值

  x=4294967296/125;//适合125M晶振

  //如果时钟频率不为125MHZ,修改该处的频率值,单位MHz !!!

  frequence=frequence/1000000;

  frequence=frequence*x;

  y=frequence;

  //写w4数据

  w=(y》》=0);

  for(i=0;i《8;i++)

  {

  ad9850_bit_data=(w》》i)&0x01;

  ad9850_w_clk=1;

  ad9850_w_clk=0;

  }

  //写w3数据

  w=(y》》8);

  for(i=0;i《8;i++)

  {

  ad9850_bit_data=(w》》i)&0x01;

  ad9850_w_clk=1;

  ad9850_w_clk=0;

  }

  //写w2数据

  w=(y》》16);

  for(i=0;i《8;i++)

  {

  ad9850_bit_data=(w》》i)&0x01;

  ad9850_w_clk=1;

  ad9850_w_clk=0;

  }

  //写w1数据

  w=(y》》24);

  for(i=0;i《8;i++)

  {

  ad9850_bit_data=(w》》i)&0x01;

  ad9850_w_clk=1;

  ad9850_w_clk=0;

  }

  //写w0数据

  w=w0;

  for(i=0;i《8;i++)

  {

  ad9850_bit_data=(w》》i)&0x01;

  ad9850_w_clk=1;

  ad9850_w_clk=0;

  }

  //移入始能

  ad9850_fq_up=1;

  _nop_();

  _nop_();

  ad9850_fq_up=0;

  }

  //***************************************************//

  // 测试程序1000Hz //

  //---------------------------------------------------//

  main()

  {

  P0=0x00;

  P1=0x00;

  P2=0x00;

  P3=0x00;

  //---------------------------------------------------//

  //并行写1000Hz程序

  //ad9850_reset();

  //ad9850_wr_parrel(0x00,1000);

  ad9850_reset_serial();

  ad9850_wr_serial(0x00,10000);

  //---------------------------------------------------//

  while(1)

  {

  }

  }

收藏

相关话题
文章来源栏目

评论(0)

加载更多评论

参与评论

相关文章

分享到

QQ空间 QQ好友 微博
取消