山东大学DSP考试及参考标准答案.docx

上传人:b****6 文档编号:12407852 上传时间:2023-06-05 格式:DOCX 页数:14 大小:79.63KB
下载 相关 举报
山东大学DSP考试及参考标准答案.docx_第1页
第1页 / 共14页
山东大学DSP考试及参考标准答案.docx_第2页
第2页 / 共14页
山东大学DSP考试及参考标准答案.docx_第3页
第3页 / 共14页
山东大学DSP考试及参考标准答案.docx_第4页
第4页 / 共14页
山东大学DSP考试及参考标准答案.docx_第5页
第5页 / 共14页
山东大学DSP考试及参考标准答案.docx_第6页
第6页 / 共14页
山东大学DSP考试及参考标准答案.docx_第7页
第7页 / 共14页
山东大学DSP考试及参考标准答案.docx_第8页
第8页 / 共14页
山东大学DSP考试及参考标准答案.docx_第9页
第9页 / 共14页
山东大学DSP考试及参考标准答案.docx_第10页
第10页 / 共14页
山东大学DSP考试及参考标准答案.docx_第11页
第11页 / 共14页
山东大学DSP考试及参考标准答案.docx_第12页
第12页 / 共14页
山东大学DSP考试及参考标准答案.docx_第13页
第13页 / 共14页
山东大学DSP考试及参考标准答案.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

山东大学DSP考试及参考标准答案.docx

《山东大学DSP考试及参考标准答案.docx》由会员分享,可在线阅读,更多相关《山东大学DSP考试及参考标准答案.docx(14页珍藏版)》请在冰点文库上搜索。

山东大学DSP考试及参考标准答案.docx

山东大学DSP考试及参考标准答案

年山东大学DSP考试及参考答案

 

 

————————————————————————————————作者:

————————————————————————————————日期:

 

1、选用2812DSP,30MHz外部无源晶振,CY7C1021(64KW)SRAM存储器,请设计一个DSP应用系统的硬件电路,包括电源电路、时钟电路、复位电路、JTAG接口电路、存储器电路,并给出扩展存储器的地址。

采用TPS767D318芯片的DSP电源电路

2812DSP时钟电路

 

RC复位电路

 

JTAG接口

DSP存储器扩展

 

2、已知2812DSP的GPIOB1引脚连接一个LED指示灯,低电平点亮。

要求用C语言编程时该指示灯闪烁、每400ms亮灭一次。

要求采用定时器T2中断方式,定时1ms。

已知晶振频率为30MHz,要求CPU的工作频率为150MHz。

请编写初始化程序、主程序与中断服务程序。

voidInitSysCtrl(void)

{

Uint16i;

EALLOW;//禁止看门狗模块

SysCtrlRegs.WDCR=0x0068;//初始化PLL模块

SysCtrlRegs.PLLCR=0xA;//如果外部晶振为30M,则SYSCLKOUT=30*10/2=150MHz

for(i=0;i<5000;i++){}//延时,使得PLL模块能够完成初始化操作

//高速时钟预定标器和低速时钟预定标器,产生高速外设时钟HSPCLK和低速外设时钟LSPCLK

SysCtrlRegs.HISPCP.all=0x0001;//HSPCLK=150/2=75MHz

SysCtrlRegs.LOSPCP.all=0x0002;//LSPCLK=150/4=37.5MHz

//对工程中使用到的外设进行时钟使能,不用的外设不使能,以降低功耗

SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;//使能EVA,T2定时器

//SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;//使能EVB

//SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;//ADC模块时钟使能

EDIS;

}

voidInitPieCtrl(void)//系统PIE子程序

{

PieCtrlRegs.PIECRTL.bit.ENPIE=0;//禁止PIE

PieCtrlRegs.PIEIER1.all=0;//清除PIEIER寄存器

PieCtrlRegs.PIEIER12.all=0;

PieCtrlRegs.PIEIFR1.all=0;//清除PIEIFR寄存器

PieCtrlRegs.PIEIFR12.all=0;

//PieCtrlRegs.PIECRTL.bit.ENPIE=0;//允许PIE中断

PieCtrlRegs.PIEACK.all=0xFFFF;//写1清0

}

#include"DSP281x_Device.h"

interruptvoideva_timer2_isr(void);

intcounter;//全局变量软件计数器,扩大定时时间

VoidEVA_Timer2()

{

EvaRegs.GPTCONA.all=0;//初始化EVATimer1

EvaRegs.T2PR=0x249;//定时周期为1.707us*(T1PR+1)=1ms

EvaRegs.EVAIMRA.bit.T2PINT=1;//使能定时器2的周期中断

EvaRegs.EVAIFRA.bit.T2PINT=1;//写1清除定时器2的周期中断标志

EvaRegs.T2CNT=0x0000;

EvaRegs.T2CON.all=0x1740;//连续增计数,128分频,开启定时器

}

voidmain(void)

{

InitSysCtrl();//初始化系统控制寄存器,时钟频率150MHz

//高速时钟的工作频率HSPCLK=75MHz

EALLOW;

GpioMuxRegs.GPBMUX.all=0;//把GPIOB0~7设置为一般I/O口

GpioMuxRegs.GPFDIR.all=0xff;//GPIOB7~0为输出

EDIS;

DINT;//关闭总中断,清除中断标志

IER=0x0000;//关闭外围中断

IFR=0x0000;//清中断标志

InitPieCtrl();//初始化PIE控制寄存器

InitPieVectTable();//初始化PIE中断向量表

EVA_Timer2();//初始化EVATimer2

EALLOW;

PieVectTable.T2PINT=&eva_time2_isr;//中断服务程序入口地址放入中断向量表

EDIS;

//依次使能各级中断:

外设中相应中断位->PIE控制器->CPU

PieCtrlRegs.PIEIER3.all=M_INT1;//GP定时器2使能位于PIE第3组第1个,将其使能(62页)

IER|=M_INT3;//PIE第3组对应于CPU的可屏蔽中断3(INT3),将其使能

EINT;//开总中断

counter=0;//软件计数器初值

GpioDataRegs.GPBDAT.bit.GPIOB1=1;//指示灯灭

for(;;){;}

}

interruptvoideva_timer2_isr(void)

{

counter++;

if(counter==400)//400*1ms=400ms

{

counter=0;

GpioDataRegs.GPBDAT.bit.GPIOB1^=1;//GPIOB5取反产生方波,指示灯亮灭切换

}

EvaRegs.EVAIMRA.bit.T2PINT=1;//使能定时器2的周期中断

EvaRegs.EVAIFRA.bit.T2PINT=1;//写1清除定时器2的周期中断标志

PieCtrlRegs.PIEACK.all=PIEACK_GROUP3;//清零PIEACK中的第3组中断对应位

}

 

3、采用CCS集成开发环境进行程序调试,其工程文件通常包括哪些文件?

其中哪些文件粗要编写者自己编写?

哪些文件能够自动生成?

一般应用程序开发调试的过程是什么?

1)CCS工程文件(扩展名为.pjt)。

由CCS自动生成。

在CC(CodeComposer)软件环境中,扩展名为.mak。

2)源程序文件。

汇编语言文件(*.asm),C文件(*.c)或二者混合编程。

3)头文件(*.h)。

定义寄存器映射地址,用户自定义的常量等。

例如,头文件DSP281x_Adc.h定义了ADC寄存器,头文件DSP281x_PieVec.h定义了PIE中断矢量。

4)链接命令文件(*.cmd)。

包含链接器选项、对程序和数据存储器空间的分配。

5)库文件(*.lib)。

标准运行时支持库rts2800_ml.lib。

6)目标文件(*.obj)。

由汇编器产生,COFF公共目标文件格式。

7)列表文件(*.lst)。

汇编生成的文件。

8)映射文件(*.map)。

汇编器生成的变量与符号存储器地址分配文件。

9)可执行代码文件(*.out)。

由链接器生成,COFF格式。

该文件可以装入到存储器进行调试与执行。

这些文件中,用户需要编写源程序文件(.c、.asm)、链接命令文件(.cmd)和头文件(.h)。

程序开发调试的过程:

1.连续运行与单步运行。

2.设置断点。

3.查看与修改存储单元。

4.查看与修改寄存器内容。

5.观察和编辑变量。

6.程序Animate运行和数据图形显示。

4、采用DSPC语言编程,将DSP片内RAM200H地址开始的20个存储单元分别设置为0~15。

main()

{

inti;

unsignedint*px;

px=(unsignedint*)0x200;

for(i=0;i<20;i++,px++)

(*px)=i;

while

(1){;}

}

 

5、2个模拟量(0~3.3V)分别连接到2812DSP的ADCINA0\ADCINA7引脚。

要求采用定时器T1的周期匹配触发A/D转换,T1定时150µs。

A/D转换采用连续转换方式,每次转换两个通道。

A/D转换的结果分别存放到两个数组中,采样200次。

已知CPU的工作频率为150MHz。

请采用DSPC语言编程。

voidInitSysCtrl(void)

{

Uint16i;

EALLOW;//禁止看门狗模块

SysCtrlRegs.WDCR=0x0068;//初始化PLL模块

SysCtrlRegs.PLLCR=0xA;//如果外部晶振为30M,则SYSCLKOUT=30*10/2=150MHz

for(i=0;i<5000;i++){}//延时,使得PLL模块能够完成初始化操作

//高速时钟预定标器和低速时钟预定标器,产生高速外设时钟HSPCLK和低速外设时钟LSPCLK

SysCtrlRegs.HISPCP.all=0x0001;//HSPCLK=150/2=75MHz

SysCtrlRegs.LOSPCP.all=0x0002;//LSPCLK=150/4=37.5MHz

//对工程中使用到的外设进行时钟使能

SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;//ADC模块时钟使能

EDIS;

}

#include"DSP28_Device.h"

interruptvoidadc_isr(void)//ADC中断函数声明

Uint16SampleCount;

Uint16adcresulta0[200];//用于保存ADCINA0通道的200次采样结果

Uint16adcresulta7[200];//用于保存ADCINA7通道的200次采样结果

main()

{

inti;

InitSysCtrl();//初始化系统函数

DINT;

InitPieCtrl();//初始化PIE控制寄存器

IER=0x0000;//禁止CPU中断

IFR=0x0000;//清除CPU中断标志

InitPieVectTable();//初始化PIE中断向量表

EALLOW;

PieVectTable.ADCINT=&adc_isr;

EDIS;

AdcRegs.ADCTRL1.bit.RESET=1;//复位ADC

asm("RPT#10||NOP");//等待12个时钟周期是ADC复位产生作用

AdcRegs.ADCTRL3.all=0x00C8;//ADC参考电压与带隙基准电路上电,顺序采样

AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;

AdcRegs.ADCTRL3.bit.ADCPWDN=1;

PieCtrlRegs.PIEIER1.bit.INTx6=1;//使能PIE模块中的AD采样中断

IER|=M_INT1;//开CPU中断

EINT;//使能全局中断

ERTM;//使能实时中断DBGM

SampleCount=0;

AdcRegs.MAXCONV.all=0x0001;//总共采样2路

AdcRegs.ADCCHSELSEQ1.bit.CONV00=0;//选择ADCINA0为第1转换通道

AdcRegs.ADCCHSELSEQ1.bit.CONV01=7;//选择ADCINA7为第2转换通道

AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1;//选择EVA启动SEQ1转换

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;//使能SEQ1中断(每个EOS)

EvaRegs.T1PR=0x2BF1;//周期为150µs=(11249+1)/75MHz

EvaRegs.GPTCONA.bit.T1TOADC=2;//设置EVA(T1)周期匹配启动ADC

EvaRegs.T1CON.all=0x1044;//设置T1为连续增模式,并启动定时器T1

for(;;){}

}

interruptvoidadc_isr(void)//ADC中断函数

{

adcresulta0[SampleCount-1]=AdcRegs.ADCRESULT0>>4;

//将ADCINA0通道采样到的数据存入数组adcresulta0[]中

adcresulta7[SampleCount-1]=AdcRegs.ADCRESULT1>>4;

//将ADCINA7通道采样到的数据存入数组adcresulta1[]中

if(SampleCount==199)

{

SampleCount=0;

}

elseSampleCount++;//采样计数器计数

AdcRegs.ADCTRL2.bit.RST_SEQ1=1;//复位SEQ1

AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;//清除AD中断的标志位

PieCtrl.PIEACK.all=0xffff;//写1清0

}

 

6、要求采用2812DSP定时器T3和PWM电路产生一个频率为20kHz(50µs)的非对称PWM波形,占空比为50%,PWM波形从PWM1引脚输出。

已知CPU的工作频率为150MHz。

请采用DSPC语言编程。

#include"DSP281x_Device.h"

voidEVA_PWM()

{

EvbRegs.EXTCONB.bit.INDCOE=1;//独立使能比较输出模式

EvbRegs.ACTRB.all=0x0aaa;//空间矢量不动作,高电平有效

EvbRegs.COMCONB.all=0xa400;//空间向量禁止,禁止全比较

}

voidEVB_Timer3()

{

EvbRegs.EXTCONB.bit.INDCOE=1;//独立使能比较输出模式

EvbRegs.GPTCONB.all=0x0012;//GP定时器3比较输出低有效

EvbRegs.T3PR=0x0009;//定时周期为(T1PR+1)*128/25MHz=50µs

EvbRegs.T3CMPR=0x0005;//GP定时器3的比较寄存器

EvbRegs.T3CNT=0x0000;//定时器3初值

EvbRegs.T3CON.all=0x1742;//连续增计数,128分频,使能比较,打开定时器

}

voidIOinit()

{

EALLOW;

GpioMuxRegs.GPBMUX.all=0xffff;//将GPIOB配置为外设口

GpioMuxRegs.GPBDIR.all=0xffff;//将GPIOB配置为输出

EDIS;

}

voidmain(void)

{

InitSysCtrl();//初始化系统控制寄存器,时钟频率150MHz

EALLOW;

SysCtrlRegs.HISPCP.all=0x0003;//高速时钟的工作频率=25MHz

EDIS;

DINT;//关闭总中断,清除中断标志

IER=0x0000;//关闭外围中断

IFR=0x0000;//清中断标志

IOinit();

EVB_PWM();

EVB_Timer3();

for(;;){;}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2