山东大学DSP考试及参考标准答案.docx
- 文档编号:25184038
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:14
- 大小:79.63KB
山东大学DSP考试及参考标准答案.docx
《山东大学DSP考试及参考标准答案.docx》由会员分享,可在线阅读,更多相关《山东大学DSP考试及参考标准答案.docx(14页珍藏版)》请在冰豆网上搜索。
山东大学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(;;){;}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东大学 DSP 考试 参考 标准答案