孙鹏DSP正余弦波形发生器.docx
《孙鹏DSP正余弦波形发生器.docx》由会员分享,可在线阅读,更多相关《孙鹏DSP正余弦波形发生器.docx(13页珍藏版)》请在冰豆网上搜索。
![孙鹏DSP正余弦波形发生器.docx](https://file1.bdocx.com/fileroot1/2022-11/16/18e732b3-e829-4080-914d-56c7b65211e0/18e732b3-e829-4080-914d-56c7b65211e01.gif)
孙鹏DSP正余弦波形发生器
DSP正余弦波形发生器
班级:
232122
组员:
孙鹏吴斌李文柏
指导老师:
杨越
实习教室:
信息楼
一实习题目
正余弦波形发生器
实现:
产生一个2kHz的正弦信号和同频的余弦信号(泰勒级数展开法)。
从相应的观察窗口查看波形,并可通过DAC输出,通过示波器观察结果。
二实习步骤
1熟悉DSP的软件编程技巧及硬件连接方式。
2按照题目要求分析正余弦波产生机理,查表法及泰勒级数法。
3上机将历程操作,并修改参数使其达到其题目要求,根据查表法原理和泰勒级数展开式原理分别产生2khz正余弦波,比较有何差异。
4整理数据资料,分析波形产生原因及机理。
三实习过程
TMS320F5416是ti公司c5000系列16位定点系列产品,最高最平主频120MHZ。
RAM128K,ROM16K,能适用一般的运用场合,本实习过程采用该开发板做简单的正余弦波发生器,绰绰有余。
因为系统主要修改在主函数那里所以我只写主函数这部分程序。
这里主要讲查表法和泰勒展开式法。
1查表法:
利用单片机自带的数学库函数,生成一个104个数的正余弦表,由DA输出就可以形成一个正弦波形。
//------------------头文件--------------------------------------
#include"DspRegDefine.h"//VC5402寄存器定义
#include"math.h"
//---------------------------------------------------------------
/*******************宏定义***************
************************************************************
*/
#defineUCHARunsignedchar
#defineUINT16unsignedint
#defineUINT32unsignedlong
#defineTRUE1
#defineFALSE0
#definepi3.1415926
#defineLEN104//定义由256点改104点,恰好可以实现2KHZ波形
//---------------------------------------------------------
/*端口定义*/
//---------------------------------------------------------
ioportUINT16port8001;//定义输出io端口为0x8001;
//----------------------------------------------------------
//----------------------------------------------------------
/*全局变量定义*/
//---------------------------------------------------------
intdata_buff[LEN];//数据缓冲
UINT16show=0x00aa;//LED显示的数值
/*
**********************************************************************
***************所使用的函数原型*****************
**********************************************************************
*/
voidcpu_init(void);//初始化CPU
voidDelay(UINT16numbers);//延迟
externvoiddelay_3us(void);//3us延迟
voidmcbsp0_write_rdy(UINT16out_data);//MCBSP0发送一个数据
voidmcbsp0_init_SPI(void);//MCBSP0设置为SPI模式
voidmcbsp0_close(void);//MCBSP0关闭
//-------------------------------------------------------------------
/*
************************************************************************
***********************函数定义******************
************************************************************************
*/
//--------------------------------------------------------------------
//函数名称:
voidcpu_init(void)
//函数说明:
初始化CPU
//输入参数:
无
//输出参数:
无
//--------------------------------------------------------------------
voidcpu_init(void)
{
asm("nop");
asm("nop");
asm("nop");
*(unsignedint*)CLKMD=0x0;//switchtoDIVmodeclkout=1/2clkin
while(((*(unsignedint*)CLKMD)&01)!
=0);
*(unsignedint*)CLKMD=0x37ff;//switchtoPLLX4mode
*(unsignedint*)IMR=0x0;
*(unsignedint*)IFR=0xffff;
//--------------------------------------------------------------------
asm("nop");
asm("nop");
asm("nop");
}
/*
***********************************************************
-函数名称:
voidDelay(intnumbers)
-函数说明:
延时
-输入参数:
numbers
-输出参数:
无
***********************************************************
*/
voidDelay(UINT16numbers)
{
UINT16i,j;
for(i=0;i<4000;i++)
for(j=0;j}
/*
*************************************************************************
-函数名称:
voidmcbsp0_write_rdy(UINT16out_data);
-函数说明:
MCBSP0发送一个数据
-输入参数:
data
-输出参数:
无
-补充说明:
内部带是否发送完成的判断
**************************************************************************
*/
voidmcbsp0_write_rdy(UINT16out_data)
{
UINT16j;
*(unsignedint*)McBSP0_SPSA=0x0001;//McBSP0_SPSA指向SPCR2
while((*(unsignedint*)McBSP0_SPSD&0x0002)==0);
//for(j=0;j<20;j++);
//delay不需要延时,这样可以节约时间,较少每点之间的DA输出时间
*(unsignedint*)McBSP0_DXR1=out_data;//输出da的数据
}
/*
*************************************************************************
-函数名称:
voidmcbsp0_init_SPI(void);
-函数说明:
MCBSP0设置为SPI模式
-输入参数:
无
-输出参数:
无
-补充说明:
**************************************************************************
*/
voidmcbsp0_init_SPI(void)
{
//复位McBSP0
*(unsignedint*)McBSP0_SPSA=0x0000;//SPCR1
*(unsignedint*)McBSP0_SPSD=0x0000;//设置SPCR1.0(RRST=0)
*(unsignedint*)McBSP0_SPSA=0x0001;//SPCR2
*(unsignedint*)McBSP0_SPSD=0x0000;//设置SPCR1.0(XRST=0)
//---------------------------------------------------------
//延迟
Delay(0);//延迟4000*CPU时钟周期
//等待复位稳定
//---------------------------------------------------------
//配置McBSP0为SPI模式
*(unsignedint*)McBSP0_SPSA=0x0000;//SPCR1
*(unsignedint*)McBSP0_SPSD=0x1800;
*(unsignedint*)McBSP0_SPSA=0x0001;//SPCR2
*(unsignedint*)McBSP0_SPSD=0x0000;
*(unsignedint*)McBSP0_SPSA=0x000E;//PCR
*(unsignedint*)McBSP0_SPSD=0x0A0C;
*(unsignedint*)McBSP0_SPSA=0x0002;//RCR1
*(unsignedint*)McBSP0_SPSD=0x0040;//
*(unsignedint*)McBSP0_SPSA=0x0003;//RCR2
*(unsignedint*)McBSP0_SPSD=0x0041;//
*(unsignedint*)McBSP0_SPSA=0x0004;//XCR1
*(unsignedint*)McBSP0_SPSD=0x0040;
*(unsignedint*)McBSP0_SPSA=0x0005;//XCR2
*(un