DSP实验报告Word格式.docx

上传人:聆听****声音 文档编号:317576 上传时间:2023-04-28 格式:DOCX 页数:16 大小:108.42KB
下载 相关 举报
DSP实验报告Word格式.docx_第1页
第1页 / 共16页
DSP实验报告Word格式.docx_第2页
第2页 / 共16页
DSP实验报告Word格式.docx_第3页
第3页 / 共16页
DSP实验报告Word格式.docx_第4页
第4页 / 共16页
DSP实验报告Word格式.docx_第5页
第5页 / 共16页
DSP实验报告Word格式.docx_第6页
第6页 / 共16页
DSP实验报告Word格式.docx_第7页
第7页 / 共16页
DSP实验报告Word格式.docx_第8页
第8页 / 共16页
DSP实验报告Word格式.docx_第9页
第9页 / 共16页
DSP实验报告Word格式.docx_第10页
第10页 / 共16页
DSP实验报告Word格式.docx_第11页
第11页 / 共16页
DSP实验报告Word格式.docx_第12页
第12页 / 共16页
DSP实验报告Word格式.docx_第13页
第13页 / 共16页
DSP实验报告Word格式.docx_第14页
第14页 / 共16页
DSP实验报告Word格式.docx_第15页
第15页 / 共16页
DSP实验报告Word格式.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DSP实验报告Word格式.docx

《DSP实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《DSP实验报告Word格式.docx(16页珍藏版)》请在冰点文库上搜索。

DSP实验报告Word格式.docx

3、认识中断、GPIO、定时器等的编程使用方法。

二、实验内容和原理

实验一

LED绿灯的控制:

共阳极发光二极管原理图如下

图1发光二极管原理图

通过GPIO控制发光二极管DS20~DS25的亮灭。

当GPIOFx=0时,对应的发光二极管被点亮。

GPIO端口:

GPIOF13~GPIOF8

实验二

利用CPU定时器和中断实现点亮了4盏规定的绿灯,同时控制灯分别以1s,100ms,10ms,1ms为周期交替亮灭。

通过设置CPU定时器,使1ms产生1个中断输出,再通过循环计数控制当分别产生1ms、10ms、100ms、1s的时间间隔进入中断,控制相应LED亮灭。

实验三

分别用两种TI资源的方法编程,实现控制绿灯和红灯的要求。

方法一是仅仅使用TI规定的变量编程,方法二是使用TI资源的内置文件,初始化文件和.c文件等中的自带函数。

把6盏绿灯及16盏红灯有规律地控制点亮。

红灯的控制:

LED接口如图:

1、一端接电源高电平红灯的控制:

2、一端接锁存器的输出;

3、由两个锁存器控制16盏灯;

两个锁存器:

1、输入数据为

GPIOB8~GPIOB15;

2、锁存信号由GPIOE0~GPIOE2控制;

点灯控制:

1、先确定第几组,第几盏;

2、GPIOE输出组号,GPIOB输出位号;

3、延时,GPIOE输出锁存信号

三、主要仪器设备

TMS实验板、PC机、程序烧写器

四、操作方法和实验步骤

1、实验一

(1)学习DSP的相关内部元件的使用方法。

(2)了解C语言编写DSP程序的方法。

(3)在软件CSS3.3中读懂并改写老师上传的程序,通过对相关的寄存器赋值完成项目的程序编写工作。

(4)学习软件的调试运行方法。

把相关的程序烧写入开发板中,调试,实现原来预想中的功能。

2、实验二

(1)学习CPU定时器的初始化设置及使用;

(2)学会使用CPU中断系统;

(3)设计并编写项目程序;

(4)把相关的程序烧写入开发板中,调试,实现原来预想中的功能。

3实验三

(1)学习红灯LED控制方法;

(2)设计并编写相关程序;

(3)把相关的程序烧写入开发板中,调试,实现原来预想中的功能。

五、实验结果与分析

1、实验一:

试验中点亮了一排灯,按老师的所要求的方式闪亮。

实验程序设计:

程序段

#defineEALLOWasm("

EALLOW"

#defineEDISasm("

EDIS"

#definePLLCR *((volatileunsignedint*)0x7021)

#definePCLKCR *((volatileunsignedint*)0x701C)

#defineHISPCP *((volatileunsignedint*)0x701A)

#defineLOSPCP *((volatileunsignedint*)0x701B)

#defineWDCR *((volatileunsignedint*)0x7029)

#defineSCSR *((volatileunsignedint*)0x7022)

#defineGPFMUX *((volatileunsignedint*)0x70D4)

#defineGPFDIR *((volatileunsignedint*)0x70D5)

#defineGPFDAT *((volatileunsignedint*)0x70F4)

简单宏定义,将相关寄存器与其地址相关联。

其中#defineEALLOWasm("

#defineEDISasm("

)表示将汇编指令‘EALLOW’与‘EDIS’进行宏定义,在后面以C语言编写的程序可以直接调用。

voidInitPll(void)

{ inti;

EALLOW;

PLLCR=10;

//SYSCLK=外部振荡频率*PLLCR/2

EDIS;

for(i=0;

i<

((131072/2)/12);

i++){;

}//延时,使得PLL模块能够完成初始化操作

}

voidInitPll(void)函数用于锁相环初始化,初始化PLL模块;

如果外部晶振为30MHz,计算得SYSCLK为30MHz*10/2=150MHz。

voidInitPeripheralClocks(void)

{ EALLOW;

HISPCP=1;

//HISPCLK=SYSCLK*HISPCP/2

LOSPCP=2;

//LOSPCLK=SYSCLK*LOSPCP/2

PCLKCR=0x909;

//开启部分外设

}

voidInitPeripheralClocks(void)函数用于初始化外设时钟。

设置高速外设时钟预定表寄存器HISPCP和HSPCLK,使高速外设时钟频率=SYSCLK/(HSPCLK*2)=150MHz/2=75MHz;

设置低速外设时钟预定表寄存器LOSPCP的LSPCLK,使低速外设时钟频率=SYSCLK/(LSPCLK*2)=150MHz/4=37.5MHz;

向PCLKCR写入0x909,用来使能EVA,ADC,SPI,SCIB等外设时钟。

voidDisableDog(void)

WDCR=0x0068;

//关闭看门狗;

voidDisableDog(void)该函数用于关闭看门狗;

设置看门狗控制寄存器WDCR的WDDIS(位6)为1屏蔽看门狗模块。

voidInitSysCtrl(void)

{

DisableDog();

InitPll();

InitPeripheralClocks();

voidInitSysCtrl(void)函数用来初始化系统控制;

包括关闭看门狗,设置初始化始终频率,初始化外设时钟频率。

voidInitGpiof(void)

GPFMUX=0x0000;

GPFDIR=0xFF00;

voidInitGpiof(void)函数用来初始化GPIO口;

设置模式寄存器GPFMUX的相关位为0,使GPIOF引脚配置为通用数字I/O模式;

设置方向寄存器GPFMUX的相关位为1,使引脚配置为输出。

voidmain(void)

{ longinti;

InitSysCtrl();

InitGpiof()

for(;

;

{GPFDAT=0x5678;

for(i=0;

500000;

GPFDAT=0x1234;

}

}//主函数点亮部分绿灯

voidmain(void)函数为实验主函数;

通过设置数据寄存器GPFDAT的值,控制相应输出口对应的绿灯亮灭。

点亮4盏规定的灯,同时实现灯分别以1s,100ms,10ms,1ms为周期交替亮灭。

实验程序设计:

程序段

voidInitPll(void)

EALLOW;

//SYSCLK=外部振荡频率*PLLCR/2

HISPCP=1;

voidInitPeripheralClocks(void)函数用于初始化外设时钟;

voidInitGpiof(void)函数用于GPIO初始化;

voidInitCputimer(void)

TIMER0TPR=149;

TIMER0TPRH=0;

TIMER0PRD=999999;

TIMER0TCR=0xf000;

voidInitCputimer(void)函数用于初始化CPU定时器;

设定CPU定时器的频率,预定标寄存器写入149,将系统时钟分频为1MHz,TIMER0TPRD写入99999

时钟周期值为1s;

TIMER0TCR的14,15位置位,清除中断标志位、中断使能。

typedefinterruptvoid(*PINT)(void);

interruptvoidINT_1_7(void);

voidInitPIE(void)

PIEIFR1=0x0000;

PIEIER1=0x0040;

PIECTRL=0x1;

PIEACK=0x1;

voidInitPIE(void)函数用于初始化PIE控制器;

清零PIEIFR寄存器和PIERER寄存器,使能PIE中断向量表,清零中断标志位

intk;

{ InitSysCtrl();

InitGpiof();

InitCputimer();

InitPIE();

*(PINT*)0x0D4C=&

INT_1_7;

asm("

andIFR,#00H"

);

orIER,#01H"

EINT"

LPMCR0=0x0;

k=0;

){asm("

IDLE"

};

voidmain(void)函数用于初始化系统控制、GPIO、CPU定时器、PIE中断控制器。

清除PIEIER和PIEIFR

没有产生中断的情况下,系统运行在低功耗模式。

interruptvoidINT_1_7(void)//中断函数

{k+=1;

a+=1;

b+=1;

c+=1;

//使用四个变量

if(k==100)

{k=0;

GPFDAT=GPFDAT|0X2000;

elseif(k==50)

{GPFDAT=GPFDAT&

0XDFFF;

if(a==20)

{a=0;

GPFDAT=GPFDAT|0X1000;

elseif(a==10)

0XEFFF;

if(b==200)

{b=0;

GPFDAT=GPFDAT|0X0800;

elseif(b==100)

0XF7FF;

if(c==2000)

{c=0;

GPFDAT=GPFDAT|4000;

elseif(c==1000)

0XFBFF;

PIEACK=0x1;

TIMER0TCR=0xf000;

interruptvoidINT_1_7(void)中断函数采用四个变量和if语句结合,利用位与实现绿灯不同频率的亮灭。

实验现象:

观察到目标板上的四个led绿灯亮起来,其中两个看不出有闪动,一个能观察到微弱的闪动,一个约每秒闪动一次,明亮程度依次递减。

3、实验三

(1)实现规定的功能点亮预定实现的红灯和绿灯。

实现对6盏绿灯和16盏红灯的控制。

#include"

DSP281x_Device.h"

//DSP281x头文件

voidLedOut(Uint16led);

voidIOinit()//I/O口初始化

EALLOW;

GpioMuxRegs.GPBMUX.all=GpioMuxRegs.GPBMUX.all&

0x00ff;

GpioMuxRegs.GPBDIR.all=GpioMuxRegs.GPBDIR.all|0xff00;

GpioMuxRegs.GPEMUX.all=GpioMuxRegs.GPEMUX.all&

0xfff8;

GpioMuxRegs.GPEDIR.all=GpioMuxRegs.GPEDIR.all|0x0007;

EDIS;

voidIOinit()函数用于GPIO口初始化;

将GPIOB8~GPIOB15配置为一般I/O口,D0~D7;

将GPIOB8~GPIOB15配置为输出,D0~D7;

将GPIOE0~GPIOE2配置为一般I/O口输出,作138译码。

程序段

SysCtrlRegs.PLLCR.bit.DIV=10;

SysCtrlRegs.HISPCP.all=1;

//HISPCLK=SYSCLK/HISPCP*2

SysCtrlRegs.LOSPCP.all=2;

//LOSPCLK=SYSCLK/LOSPCP*2

SysCtrlRegs.PCLKCR.all=0;

SysCtrlRegs.WDCR=0x0068;

CpuTimer0Regs.TPR.all=149;

CpuTimer0Regs.TPRH.all=0;

CpuTimer0Regs.PRD.all=999;

CpuTimer0Regs.TCR.all=0xf000;

PieCtrlRegs.PIEIFR1.all=0x0000;

PieCtrlRegs.PIEIER1.all=0x0040;

PieCtrlRegs.PIECRTL.bit.ENPIE=0x1;

PieCtrlRegs.PIEACK.all=0x1;

{ InitSysCtrl();

IOinit();

PieVectTable.TINT0=&

//

SysCtrlRegs.LPMCR0.all=0x0;

voidmain(void)为程序主函数。

扩展内容:

定义变量无符号整形变量led,写入组号。

unsignedintled;

interruptvoidINT_1_7(void)

{led=0x0014;

LedOut(led);

voidLedOut(Uint16led)

Uint16 i;

//将GPIOB8~GPIOB15配置为输出,D0~D7

GpioDataRegs.GPEDAT.all=0xfffb;

//LEDB选通

GpioDataRegs.GPBDAT.all=~led;

//显示高8位

for(i=0;

100;

i++){}//延时

GpioDataRegs.GPEDAT.all=0xffff;

//锁存高8位

GpioDataRegs.GPEDAT.all=0xfffa;

//LEDA选通

GpioDataRegs.GPBDAT.all=~(led<

<

8);

//显示低8位

i++){}

//锁存低8位

第5个红灯和第3个红灯被点亮。

(2)将红灯按规则点亮:

2ms亮一次,七次为一个周期。

初始化PLL模块中外部晶振为30MHz,计算得SYSCLK为30MHz*10/2=150MHz,预定标寄存器写

入149,将系统时钟分频为1MHz,TIMER0TPRD写入99

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

当前位置:首页 > 解决方案 > 学习计划

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

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