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

📄 ad999.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=0X83FE;        //2倍频,CLKOUT=20MHz,使能各模块时钟
  *WDCR=0X0E8;           //不使能看门狗
}
           
//SPI模块初始化子程序
void SPIinitial()
{
  *SPICCR=0X004F;         //16个字符位,在SPICLK的上升沿发送数据,与AD9833在下降沿接收数据配合
  *SPICTL=0X000E;         //配置为主动方式,一般的时钟方式,允许发送,禁止超时中断,禁止SPI中断
  *SPIBRR=0X0007;         //SPI的波特率为2.5Mbps,
  *MCRB=0X0FE3C;           //设置通用引脚的SPI功能的引脚
  *MCRC=((*MCRC)|(0X0001))&(0X0FEFF);   //设置IOPF0脚为通用引脚
  *SPICCR=(*SPICCR)|(0X0080); //使SPI退出复位状态
}
//延时程序
void Delayus(unsigned long t)
{int i,j;
     for (i=0;i<t;i++)
     for (j=0;j<t;j++);
}

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

void main()
{
  xtinitial();
  SPIinitial();
 while(1)
 {SPItrans(0x2100);
  SPItrans(0x7ba9);
  SPItrans(0x4003);  
  SPItrans(0x8000);   
  SPItrans(0x8000);  
  SPItrans(0x0C000);
  SPItrans(0x0E000);  //写数据到Preg0,写0不移相  
  SPItrans(0x2000) ; //设置RESET位为0,等待8个MCLK后,Vout输出正弦波
  Delayus(200);
  
  SPItrans(0x2100);
  SPItrans(0x7242);
  SPItrans(0x4002);  
  SPItrans(0x8000);   
  SPItrans(0x8000);  
  SPItrans(0x0C000);
  SPItrans(0x0E000);  //写数据到Preg0,写0不移相  
  SPItrans(0x2000) ; //设置RESET位为0,等待8个MCLK后,Vout输出正弦波
  Delayus(200);
  }                   
  
}


void interrupt nothing() 
{
  return;
}

⌨️ 快捷键说明

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