📄 digital_wave.c
字号:
/*******************************************************************/
#include "exp1_2407.h"
#define N 256
#define pi 3.1415926
/*******************************************************************/
int i;
unsigned int data;
unsigned int y1[N+1];
unsigned int y2[N+1];
double x0,x1,x2,x3;
double x,r,xx,y[N+1];
void sys_ini() //系统初始化子程序
{
asm(" setc INTM"); //禁止所有中断
asm(" setc SXM"); //抑制符号位扩展
asm(" clrc OVM"); //累加器中结果正常溢出
//WSGR=0x0000; //io、ram、program都设为0等待读写
* WDCR=0x00E8; //禁止看门狗
* SCSR1=0x0021; //CLKIN=7.3728M,CLKOUT=29.4912M,使能spi外围模块
* MCRB=0xFE3F; //使能spi引脚
* IFR=0xFFFF; //清所有中断标志位
* IMR=0x0000; //禁用所有中断
}
void spi_ini()
{
* SPICCR&=0x007F; //复位spi
* SPICCR=0x004F; //CLOCK POLARITY=1,16位数据格式
* SPICTL=0x000E; //禁止溢出中断,CLOCK PHASE=1,禁用spi中断,主模式,使能数据发送
* SPISTS=0x0080; //清除接收溢出中断标志
* SPIBRR=0x0000; //波特率为29.4912/4=7.3728M
* SPICCR|=0x0080; //启动spi工作
}
void delay()
{
unsigned int k;
for(k=0;k<5;k++);
}
interrupt void nothing() //哑中断子程序
{
return;
}
void main()
{
sys_ini();
spi_ini();
r=2*pi/N;
for (i=0; i<=N; i++)
{
x=i*r-pi;
xx = x*x;
x0 = 1-xx/(8*9);
x1 = 1-x0*xx/(6*7);
x2 = 1-x1*xx/(4*5);
x3 = 1-x2*xx/(2*3);
y[i] = x * x3;
data=511.5*(1+y[i]);
y1[i]=data<<2|0xC000; //tlv5617的da值范围
y2[i]=data<<2|0x5000;
}
for(;;)
{
for (i=0; i<=N; i++)
{
* SPITXBUF=y2[i]; //DA值送到tlv5617的buffer
delay();
* SPITXBUF=y1[i]; //DA值转换并从OUTA通道送出,同时tlv5617的buffer
delay(); //值转换并从OUTB通道输出
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -