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

📄 ad.c

📁 高精度可编程波形发生器程序
💻 C
字号:
#include "lf2407regs.h"
unsigned int flag;
//  SCLK    BIT SPISCLK;  控制线定义
//  FSYNC   BIT PE.0
//  SDATA   BIT SPISIMO;  数据线
   
//系统初始化子程序
void xtinitial()
{
  asm(" setc INTM");    //禁止总中断子程序
  WSGR=0X00;            //禁止所有的等待状态
  asm(" setc SXM");
  asm(" CLRC OVM");
  asm(" CLRC CNF");     //B0被配置为数据空间
  *SCSR1=0X87FE;        //1倍频,CLKOUT=10MHz,使能各模块时钟
  *WDCR=0X0E8;           //不使能看门狗
  *IMR=0X0000;           //禁止所有中断 
  *IFR=0X0FFFF;          //清除所有中断标志
}

//SPI模块初始化子程序
void SPIinitial()
{
  *SPICCR=0X004F;          //16个字符位,在SPICLK的上升沿发送数据,与AD9833在下降沿接收数据配合
  *SPICTL=0X000E;          //配置为主动方式,一般的时钟方式,允许发送,禁止超时中断,禁止SPI中断
  *SPIBRR=0X0007;          //SPI的波特率为1.25Mbps,
  *MCRB=0X0FE14;           //设置SPICLK,SPISIMO,IOPC5,IPOC3引脚
  *MCRC=(*MCRC)|(0x0001);   //设置CLKOUT引脚
  *SPICCR=(*SPICCR)|(0X0080); //使SPI退出复位状态
}

//SPI发送数据子程序,需要发送的数据存放在GPR3寄存器中
void SPI1trans(unsigned int data_16)
{
  *PCDATDIR=((*PCDATDIR)|(0X2000))&(0x0FFDF); //设置IOPC5为输出,且输出低电平,以选中AD9833芯片 
  *SPITXBUF=data_16;   			        //向SPI的发送缓冲器写一个发送数据 
  while(1)
  {
    flag=(*SPISTS)&(0x0040);	               //flag=SPI的中断标志 
    if(flag==0x40)
    break;	                       //如果SPI的中断标志的中断标志为1,则证明SPI已经发送成功,则停止等待 
  } 
  *SPIRXBUF=*SPIRXBUF;             //虚读SPIRXBUF寄存器,以清除SPI中断标志
  *PCDATDIR=(*PCDATDIR)|(0x2020);          //发送完毕,则IOPC5输出高,使发送的数据输出到AD9833的相应寄存器中 
}
//SPI发送数据子程序,需要发送的数据存放在GPR3寄存器中
void SPI2trans(unsigned int data_16)
{
  *PCDATDIR=((*PCDATDIR)|(0X0800))&(0x0FFF7); //设置IOPC3为输出,且输出低电平,以选中AD9833芯片 
  *SPITXBUF=data_16;   			        //向SPI的发送缓冲器写一个发送数据 
  while(1)
  {
    flag=(*SPISTS)&(0x0040);	               //flag=SPI的中断标志 
    if(flag==0x40)
    break;	                       //如果SPI的中断标志的中断标志为1,则证明SPI已经发送成功,则停止等待 
  } 
  *SPIRXBUF=*SPIRXBUF;             //虚读SPIRXBUF寄存器,以清除SPI中断标志
  *PCDATDIR=(*PCDATDIR)|(0x0808);          //发送完毕,则IOPC3输出高,使发送的数据输出到AD9833的相应寄存器中 
}

void main()
{

  xtinitial();
  SPIinitial();
  SPI1trans(0x2100);
  SPI1trans(0x7BA9);
  SPI1trans(0x4003);
  //SPI1trans(0x8000);   
  //SPI1trans(0x8000);
  //SPI1trans(0x0C000);
  //SPI1trans(0x0E000);  //写数据到Preg0,写0不移相
  SPI1trans(0x2000) ; //设置RESET位为0,等待8个MCLK后,Vout输出正弦波

  SPI2trans(0x2100);
  SPI2trans(0x5A08);
  SPI2trans(0x4005);
  //SPI2trans(0x8000);   
  //SPI2trans(0x8000);
  //SPI2trans(0x0C000);
  //SPI2trans(0x0E000);  //写数据到Preg0,写0不移相
  SPI2trans(0x2000) ; //设置RESET位为0,等待8个MCLK后,Vout输出正弦波
  
}


void interrupt nothing() 
{
  return;
}

⌨️ 快捷键说明

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