内容发布更新时间 : 2024/12/23 14:15:37星期一 下面是文章的全部内容请认真阅读。
《DSP处理器及应用》期末复习
题型:
1) 单项选择(10×2分=共20分) 2) 填空(10×1分=共20分) 3) 判断(10×2分=共20分)
4) 简答与程序设计(4×10分=共40分)
DSP可以有哪两种含义:
1) 数字信号处理技术(Digital Signal Processing——DSP) 强调对数字信号进行处理的理论和技术。
数字信号处理器(Digital Signal Processor——DSP)
2) 强调将理论上的数字信号处理技术应用在数字信号处理器芯片中,通过执行程序,实现对数字信号的处理。
所学习的课程,属于第二种含义,即数字信号处理器的原理及其应用。
TI公司DSP处理器有三种系列,选型时应注意各自的应用特点:
C2000系列处理器提供多种控制系统使用外围设备,适合控制领域;C5000系列处理器处理速度快、功耗低、相对成本低,适合便携设备及消费类电子设备应用领域。C6000系列处理器处理速度快,精度高,适合图像处理等应用领域。
所学的DSP芯片TMS320F2812属于C2000系列。
TI公司DSP处理器采用CCS(Code Composer Studio)集成开发软件进行程序设计,安装完CCS软件后,会有两个快捷方式,各有的用途:两个快捷方式,分别是:“Setup CCStudio”和“CCStudio”,前者是对CCS进行相应的配置,后者是用来开发DSP的程序。
使用CCS设计DSP程序时,一个完整的工程文件,主要包含的文件:
1) 头文件(.h) 2) 源文件(.c)
3) 命令文件(.cmd) 4) 库文件(.lib)
头文件(.h)定义了DSP的寄存器结构;编写的main等函数存在源文件(.c)中;命令文件(.cmd)实现了寄存器结构到DSP存储器空间的映射。
头文件(.h)中寄存器结构定义的主要内容有:位结构体定义,共同体定义,寄存器文件结构体定义。位结构体定义允许用户直接对寄存器的某些位进行操作。
CCS集成开发环境中,通过在某条语句前设置断点,可以使程序运行到该条语句时停止,要逐行运行程序,应当使用单步调试功能,要查看、编辑内存单元和寄存器,应打开观察窗口。
DSP2812的CPU时钟频率可达150MHz,CPU内核电压1.8V,I/O口电压3.3V。
根据下图,设DSP外部连接30MHz的晶振,若锁相环控制寄存器PLLCR=0xA使能PLL模式,此时锁相环获得了10倍频,分析计算两个信号的频率:OSCCLK、CLKIN。
OSCCLK=30MHz、CLKIN=30MHz×10/2=150MHz
系统时钟SYSCLKOUT等于CPU的时钟信号CLKIN。SYSCLKOUT送至各个外设,经过高速时钟预定标器后的时钟信号,再送至高速外设;经过低速时钟预定标器后的时钟信号,再送至低速外设。为降低系统功耗,应禁止不使用的外设时钟。
看门狗定时器是一个独立于CPU的计数单元,用于监测软件和硬件的运行状态,提高了系统的可靠性。
1) 通过软件周期地向看门狗复位控制寄存器写0x55+0xAA,使看门狗计数器清零。否则,看门狗电路将产生一个复位信号使CPU复位。
2) 通过屏蔽计数器,可以禁用看门狗。
TMS320F2812有56个通用数字量输人输出端口(GPIO),绝大部分是通用I/O和专用功能复用引脚。
GPIO相关的寄存器分两大类: (1)控制寄存器:
GPxMUX ——功能选择控制寄存器 GPxDIR ——方向控制寄存器 (2)数据寄存器:
GPxDAT ——数据寄存器 GPxSET ——置高电平寄存器 GPxCLEAR ——置低电平寄存器 GPxTOGGLE ——电平反转寄存器 数字量输人输出端口(GPIO),配置引脚的操作模式,应对GPxMUX寄存器进行设置;要使用DSP的GPIO引脚输出高电平,应当依次设置GPxMUX,GPxDIR,GPxDAT或 GPxSET
GPIO输出方波控制灯的闪烁
+3.3VF2812GPIOA0T 已知:
GPIO Mux寄存器用来选择引脚操作模式,可独立设置每个引脚的功能(数字量I/O或外设专用I/O)。(GPIO Mux:0——为数字量I/O,1——为专用I/O)
在数字量I/O模式下:
1) 通过GPxDIR寄存器配置数字量I/O的方向;(GPxDIR:0——为数字量输入,1——为数字量输出)
2) 提供GPxSET和GPxCLEAR寄存器对数字量进行置位或清零; 3) 通过GPx DAT寄存器独立读/写I/O信号。
#include \
#include \void delay_loop(void); void Gpio_select(void);
unsigned int var1 = 0; unsigned int var2 = 0;
void main(void) { int kk=0; InitSysCtrl();
// Disable and clear all CPU interrupts: DINT;
IER = 0x0000; IFR = 0x0000;
// Initialize Pie Control Registers To Default State: InitPieCtrl();
InitPieVectTable(); // Run GPIO test
var1= 0x0000; // sets GPIO Muxs as I/Os var2= 0xFFFF; // sets GPIO DIR as outputs Gpio_select(); while(1) // Toggle I/Os using DATA register for ever {
GpioDataRegs.GPADAT.all=0xAAAA; GpioDataRegs.GPBDAT.all=0xAAAA;
for(kk=0;kk<100;kk++) delay_loop(); //循环程序实现延时 GpioDataRegs.GPADAT.all=0x5555; GpioDataRegs.GPBDAT.all=0x5555;
for(kk=0;kk<100;kk++) delay_loop(); //循环程序实现延时 } }
void delay_loop() { short i;
for (i = 0; i < 10000; i++) {} }
void Gpio_select(void) { EALLOW;