哈工大DSP大作业
- 格式:doc
- 大小:199.50 KB
- 文档页数:8
DSP-F2812的最小系统设计
姓名
学号
班级
时间
一、设计目的:
TMS320F2812DSP是TI公司一款用于控制的高性能、多功能、高性价比的32位定点DSP。它整合了DSP和微控制器的最佳特性,集成了事件管理器,A/D转换模块、SCI通信接口、SPI外设接口、eCAN 总线通信模块、看门狗电路、通用数字I/O口、多通道缓冲串口、外部中断接口等多个功能模块,为功能复杂的控制系统设计提供了方便,同时由于其性价比高,越来越多地被应用于数字马达控制、工业自动化、电力转换系统、医疗器械及通信设备中。
通过本课程的学习,我对DSP的各个模块有了较为深入的了解,希望可以通过对最小系统的设计,进一步加深对DSP的学习,能在实践中运用DSP,提高自己的动手实践能力。
二、设计思路
所谓最小系统就是由主控芯片加上一些电容、电阻等外围器件构成,其能够独立运行,实现最基本的功能。为了验证DSP的最基本的功能,我设计了如下单元:有源电路的设计、复位电路及JATG下载口电路的设计、外扩RAM的设计、串口电路的设计、外扩A/D模块电路的设计。
三、详细设计步骤和原理
1、电源电路的设计
TMS320F2812工作时所要求的电压分为两部分:3.3V的Flash电压和1.8V的内核电压。TMS320F2812对电源很敏感,所以在此推荐
选择电压精度较高的电源芯片TPS767D318。TPS767D318芯片输入电压为+5V,芯片起振,正常工作之后,能够产生3.3V和1.8V两种电压电压供DSP使用。如下图所示:
2、复位电路及JATG下载口电路的设计
考虑到TPS767D301芯片自身能够产生复位信号,此复位信号可以直接供DSP芯片使用,所以不用为DSP设置专门的复位芯片。
在实际设计过程中,考虑到JATG下载口的抗干扰性,在与DSP 相连接的接口均需要采用上拉设计。
3、外扩RAM的设计
TMS320F2812芯片内部具有18K*16位RAM空间。当程序代码长度小于18K*16位时,该芯片内部的RAM空间就能够满足用户的需求。但是当程序代码大于这个时,DSP片内的RAM空间就不够用了。
TMS320F2812的外部接口XINTF是一种非多路选通的异步总线。设计时,可以通过XINTF接口来外扩存储器。TMS320F2812有19根地址线和16根数据线,所以可以外扩容量为64K*16位的SRAM芯片,如IS61LV6416。
4、串口电路的设计
串口通信口(SCI)是一种采用两根信号线的异步串行通信接口,又称UART。在TMS320F2812中游两组SCI通信,SCIA和SCIB。SCI 模块的接收器和发送器都带有16级深度的FIFO,并且接收器和发送
器都有独立的使能和中断位,可以在半双工模式下独立操作,也可以在全双工模式下同时操作。根据TMS320F2812已有的资源设计SCI 串口通信的话,可以选用MAX3232芯片,具体电路设计如下:
5、A/D模块的设计
TMS320F2812内部具有16路12位的A/D转换器,采样精度为12位,它有2个采样保持器,具有单一或者级联;两种转换模式,
最高转换速率为12.5MSPS。从理论上讲,ADC模块的采样精度还是可以的。但是根据工程经验,一般ADC模块的采样精度都会比理论值少3位,也就是说12位ADC模块,采样精度在比较好的情况下能达到9位,这个精度很多情况下并不尽如人意,给实际应用带来极大的困扰。因此实际应用中,可以外扩AD芯片AD7864AS_2,连接原理图如上图所示。
四、演示程序源代码:
本文我选取了自己编写的两个程序进行验证,测试GPIO 口以及定时器的功能。
1、控制GPIOA0口输出高低电平
#include"DSP28_Device.h"//头文件,包含各种寄存器的定义和配置
#include"DSP28_Globalprototypes.h"
void delay_loop(void); //延时函数的声明
void main(void)
{
int kk=0;//变量,用作延时
InitSysCtrl();//初始化系统函数
DINT;
IER=0x0000;//禁止CPU中断
IFR=0x0000;//清除CPU中断标志
InitPieCtrl();//
InitPieVectTable();
InitGpio();
while(1)
{
GpioDataRegs.GPACLEAR.bit.GPIOA0=1;//GPIOA0口输出低电平
for(kk=0;kk<100;kk++)
delay_loop();//实现延时功能
GpioDataRegs.GPASET.bit.GPIOA0=1;//GPIOA0口输出高电平
for(kk=0;kk<100;kk++)
delay_loop();//再延时一段时间
}
}
void delay_loop()//延时函数的定义
{
short i;
for(i=0;i<30000;i++)
{
}
}
实验结果:利用示波器观察GPIOA0口发现会有高低电平不断跳变。
2、利用定时器0实现控制GPIOA0口隔1S进行高低电平的转换
#include "DSP28_Device.h"
void main(void)
{
InitSysCtrl();
InitCpuTimers();//初始化CPU定时器0
DINT;//禁止和清除所有CPU中断
InitPieCtrl();//初始化中断向量
IER-0x0000;
IFR=0x0000;
//InitPieCtrl();
InitPieVectTable();//初始化中断向量表
InitPeripherals();//初始化CPU定时器模块
InitGpio();//初始化GPIO
PieCtrl.PIEIER1.bit.INTx7=1;
IER|=M_INT1;//开CPU中断1
EINT;//使能全局中断
ERTM;//使能实时中断
ConfigCpuTimer(&CpuTimer0,150,1000000);//调用时钟配置函数,将定时器设置为1S。StartCpuTimer0();//启动定时器
for(;;)
{
}
}
interrupt void TINT0_ISR(void) // CPU-Timer0中断函数,在文件DSP28_DefaultIsr.c中{ // 中断函数代码
CpuTimer0.InterruptCount++;
if(CpuTimer0.InterruptCount==1)
{
GpioDataRegs.GPACLEAR.bit.GPIOA0=1;
}
if(CpuTimer0.InterruptCount==2)
{
GpioDataRegs.GPASET.bit.GPIOA0=1;