DSP综合性实验——任意信号发生器实验
#include
//#include \#include \
#define pi 3.14159265 #define N 360
#define F0 1000 //定义所求输出频率
#define amp 1 //调节信号幅度 #define L 0 //调节直流分量
#pragma DATA_SECTION(output1,\存放sin数据,浮点型 double output1[N];
#pragma DATA_SECTION(output,\存放sin数据,定点型 int output[N];
#undef CODEC_ADDR
#define CODEC_ADDR 0x1A
// 定义McBSP的句柄 MCBSP_Handle hMcbsp;
/*------------------------------------------------------------------------------------*/ //
// FUNCTION: MAIN //
/*------------------------------------------------------------------------------------*/
void main(void) {
float Nx=32000/F0*2; //Fs为32000Hz,Nx为抽样点数
第 6 页 共 42 页
DSP综合性实验——任意信号发生器实验
unsigned int i;
float input0=0,x1;
float a,b,c,d,e,f,g,h,ii,step;//step为角度步长
step=360.0/Nx; // Nx为360度内取样点数 /*****************新增函数段****************/
for(i=0;i<=Nx-1;i++) {
float angle,xx;
angle=input0+step*i;
x1=pi*angle/180; //角度转换为弧度 xx=x1*x1;
a=1-xx/16/17;b=1-xx/14/15*a;c=1-xx/12/13*b;d=1-xx/10/11*c;e=1-xx/8/9*d;f=1-xx/6/7*e;g=1-xx/4/5*f;h=1-xx/2/3*g;ii=x1*h; output1[i]=amp*32767*ii; //利用泰勒级数计算出正弦波前8项的数值,存放到output1中
output[i]=output1[i]/128+L; //除以128为使输出不溢出 }
// Initialize CSL library - This is REQUIRED !!! 初始化CSL库 CSL_init();
// The main frequency of system is 240MHz
// 该频率是为了设置IIC模块的需要设置的,为了使用I2C_setup函数 PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0);
//EMIF初始化 Emif_Config();
// Open McBSP port 1 and get a McBSP type handle
hMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);
// Config McBSP port 1 by use previously defined structure Mcbsp_Config(hMcbsp);
//I2C初始化
I2C_cofig();
//CODEC寄存器初始化 inti_AIC();
/*------------------------------------------------------------------------------------*/
第 7 页 共 42 页
DSP综合性实验——任意信号发生器实验
// Receive the ADC output data of CODEC
// Then output the received data to DAC of CODEC
/*------------------------------------------------------------------------------------*/
while(1) //循环产生波形 {
for(i=0;i while(!MCBSP_xrdy(hMcbsp)) {}; MCBSP_write16(hMcbsp, output[i]); } for(i=0;i while(!MCBSP_xrdy(hMcbsp)) {}; MCBSP_write16(hMcbsp, output[i]); } for(i=0;i while(!MCBSP_xrdy(hMcbsp)) {}; MCBSP_write16(hMcbsp, output[i]); } } } /******************************************************************************/ // No more /******************************************************************************/ 总之,该程序的算法依据的是正弦函数泰勒展开公式,根据公式得到每个点的值; 2.方波 #include 第 8 页 共 42 页 DSP综合性实验——任意信号发生器实验 #include #include //#include \#include \ #define N 1024 #define T 16 //设置调节频率 #pragma DATA_SECTION(fang,\double fang[N]; #pragma DATA_SECTION(dacdata,\int dacdata[N],outbuffer[N]; double t=0, dt; float amp=40; //设置调节幅度 float L=5; //设置直流分量 #undef CODEC_ADDR #define CODEC_ADDR 0x1A // 定义McBSP的句柄 MCBSP_Handle hMcbsp; /*------------------------------------------------------------------------------------*/ // // FUNCTION: MAIN // /*------------------------------------------------------------------------------------*/ void main(void) { 第 9 页 共 42 页 DSP综合性实验——任意信号发生器实验 unsigned int i=0,j=0,k=0; /*****************新增函数段*****************/ for(j=0;j for(i=N/T*2*j;i for(i=N/T*(2*j+1);i for(i=0;i<=N;i++) { dacdata[i]=amp*fang[i]; outbuffer[i]=dacdata[i]+L; } } // Initialize CSL library - This is REQUIRED !!! CSL_init(); // The main frequency of system is 240MHz // 该频率是为了设置IIC模块的需要设置的,为了使用I2C_setup函数 PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0); //EMIF初始化 Emif_Config(); // Open McBSP port 1 and get a McBSP type handle hMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET); // Config McBSP port 1 by use previously defined structure Mcbsp_Config(hMcbsp); //I2C初始化 I2C_cofig(); //CODEC寄存器初始化 inti_AIC(); /*------------------------------------------------------------------------------------*/ 第 10 页 共 42 页