📄 ad999.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 + -