DSP应用设计.doc
《DSP应用设计.doc》由会员分享,可在线阅读,更多相关《DSP应用设计.doc(26页珍藏版)》请在冰点文库上搜索。
JIUJIANGUNIVERSITY
DSP应用设计
题目:
基于DSP的32*32LED点阵显示
英文题目:
LEDcrystaldisplaysdiverse
院系:
电子工程学院
专业:
通信工程
姓名:
年级:
指导教师:
二零一四年五月
22
摘要
LED显示器件的优异特性决定了它在各类显示器件中的地位。
进入21世纪,LED显示成为显示屏主要发展趋势,越来越多的应用到各行各业,各种广告传媒都采用LED显示。
近年来LED显示屏市场得到了迅猛的发展,已经广泛应用到银行、邮电、税务、机场、车站、证券市场及其他交易市场、医院、电力、海关、体育场等多种需要进行广告、宣传的场合。
随着技术的进一步提升,他将带来巨大的社会效益和丰富的经济效益。
本文研究了用DSP控制单色显示屏的方法,并对LED显示单元模块如何进行信号扫描、行列信号控制及信号传输中的驱动问题进行了分析。
用8*8LED点阵连接形成一个32*32显示模块,通过对显示模块进行了研究,设计了显示模块的硬件电路。
经过硬件和软件的实现过程,证明了LED显示屏显示文字是可行的,DSP和驱动芯片也是可行的。
。
【关键字】:
LED,DSP,显示屏,驱动,扫描
Abstract
TheapplicationofLEDcrystaldisplaydeviceofLEDcrystaldisplay(LCD)determinedtheexcellentpropertiesofallkindsofdisplaydevicesintheposition.Only20yearsLEDcrystaldisplaychangedthehundredyearsofclocktimeindustry,electroniccalculatorshaveallnecessary,intellectualinstrumentsusedLEDcrystaldisplay,makeitcanbecomeaportable.Allkindsofcomputerchangehumanlife,eventhewaychangetheformofwar.LEDcrystalasaspecialfunctionalmaterial,haveextremelyextensiveapplicationvalue.AstheLEDcrystaldisplaydevicetogiveprioritytotheemergenceofallkindsofLCDproductsanddevelopment,LEDcrystalhavestretchedintobusinessandsocialeachcornersofthelife.Humandevelopment,LCDLEDchangesinhumanlife.Fulltextonlyaround128x64LCDmonitortheprinciple,structureandusageandthrough,andsupportingtheuseofdigitalsignalprocessor(DSP)torealizethediversityofLEDcrystaldisplayanddynamicbrieflyintroduceLEDcrystaldisplayofpowerfuldisplay.
[Keywords]:
LCDmonitor,diversity,DSP,Dynamicdisplay
目录
第一章绪论 1
1.1概述 1
1.2定时器工作原理 1
1.2.1定时器结构 1
1.2.2中断系统 4
1.3 LED显示原理 7
1.3.1LED显示原理 7
1.3.232*32LED显示的规格描述 7
1.4取模软件的原理及应用 7
第二章LED显示的DSP实现 9
2.1DSP控制LED显示的原理 9
2.2LED显示的DSP软件设计 11
2.3LED显示的结果 14
第三章全文总结 15
附录 16
参考文献 22
致谢 22
第一章绪论
1.1概述
LED显示是微型机系统中反映系统输入/输出的人机界面,LED显示以其微功耗、体积小、显示内容丰富、模块化、接口电路简单等诸多优点得到了广泛的应用。
LED显示模块是一种将LED显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件。
本次实训的主要任务就是利用DSP的硬件仿真功能实现对LED显示控制并且整个实训都是围绕着32*32规格的LED显示模块进行测试和调试,具体的实现方法和原理将在以下叙述中一一为大家讲述。
1.2定时器工作原理
1.2.1定时器结构
定时器的组成框图如图1所示。
它有3个16位存储器映像寄存器:
TIM、PRD和TCR。
这3个寄存器在数据存储器中的地址及其说明如表1所示。
定时器控制寄存器(TCR)位结构如图2所示,各控制位和状态位的功能如表2所示。
图1定时器组成框图
(说明:
图中包括,一个16位的主计数器(TIM)和一个4位预定标计数器(PSC)。
TIM从周期寄存器PRD加载,PSC从周期寄存器TDDR加载。
)
1.典型操作顺序:
(1)在每个CLKOUT脉冲后PSC减1,直到它变为0。
(2)在下一个CLKOUT周期,TDDR加载新的除计数值到PSC,并使TIM减1。
(3)以同样方式,PSC和TIM连续进行减操作,直到TIM减为0。
(4)下一个CLKOUT周期,将定时器中断信号(TINT)送到CPU,同时又用另一脉冲送到TOUT引脚,把新定时器计数值从PRD加载到TIM,并使PSC再次减1。
因此,定时器中断的速率为
TINT速率=
2.定时器编程
(1)TIM:
定时器中的当前值。
(2)PRD:
正常情况,当TIM减到0后,PRD中的时间常数自动地加载到TIM。
(3)控制寄存器(TCR)包含的控制位有下列功能:
①控制定时器模式;
②指定定时器预先定标计数器的当前计数值;
③重新加载定时器;
④启动、停止定时器;
⑤定义定时器的分频系数。
表1定时器的三个寄存器
Timer0地址
Timer1地址
寄存器
说明
0024H
0030H
TIM
定时器寄存器,每计数一次自动减1
0025H
0031H
PRD
定时器周期寄存器,当TIM减为0后,CPU自动将PRD的值装入TIM
0026H
0032H
TCR
定时器控制寄存器,包含定时器的控制和状态位
15~12
11
10
9~6
5
4
3~0
保留
soft
free
PSC
TRB
TSS
TDDR
表2TCR位结构图
表3定时器控制寄存器(TCR)的功能
(说明:
TDDR(TimerDivide-DownRatio):
复位时,TDDR各位清零;PSC(TimerPrescalerCounter):
PSC可被TCR读取,但不能直接写入)
1.2.2中断系统
(一)中断类型:
硬件中断:
外部硬件中断和内部硬件中断
软件中断:
由程序指令引起,INTR、TRAP或RESET。
软件中断不分优先级,硬件中断有优先级。
还可以分为:
1)可屏蔽中断:
用软件可以屏蔽或开放的中断。
通过对中断屏蔽寄存器(IMR)中的相应位;状态寄存器(ST1)中的中断允许控制位INTM;C54x最多可以支持16个用户可屏蔽中断(SINT15~SINT0)
2)非可屏蔽中断:
不能用软件来屏蔽的中断,不受IMR和INTM位的影响。
TMS320C54x对这一类中断总是响应的,并从主程序转移到中断服务程序。
(二)中断管理有关的寄存器
1)中断标志寄存器(IFR,InterruptFlagRegister):
16位存储器映像的CPU寄存器;数据存储器空间,地址为0001H;当一个中断出现的时候,DSP收到了一个相应的中断请求(中断挂起),IFR中相应的中断标志位为1。
15~12
11
10
9
8
7
6
Res
Res
Res
Res
INT3
INT1
RINT1
5
4
3
2
1
0
XINT0
RINT0
TINT
INT2
INT1
INT0
表4IMR的位定义
中断屏蔽寄存器(IMR,InterruptMaskRegister)
INTM:
可屏蔽中断的总允许控制位,ST1中第11位。
INTM=0时,开放全部可屏蔽中断;
INTM=1时,禁止所有可屏蔽中断。
IMR:
1:
开放对应位的中断
0:
禁止对应位的中断
(三)中断流程
有关指令
(1)INTRK:
该指令可启动TMS320C54x的任何中断,INTM=1。
(2)TRAPK:
TRAP与INTR的不同之处是TRAP中断时,不需要设置INTM位。
(3)RESET:
复位操作,INTM=1,PC=0080H。
中断的响应
对于软件中断和非可屏蔽中断,CPU立即响应。
如果是可屏蔽中断,只有满足以下条件才能响应:
(1)优先级别最高。
(2)ST1中的INTM位为0,允许可屏蔽中断。
(3)IMR中的相应位为1,允许可屏蔽中断。
3.2.3执行中断服务程序
响应中断之后,CPU将执行下列操作:
(1)将PC值(即返回地址)压入堆栈。
(2)将中断向量的地址装入PC;将程序引导至中断服务程序ISR。
(3)现场保护,将某些要保护的寄存器和变量压入堆栈。
(4)执行中断服务程序ISR。
(5)恢复现场,以逆序将所保护的寄存器和变量弹出堆栈。
(6)中断返回,从堆栈弹出返回地址加载到PC。
(7)继续执行被中断的程序。
图2中断操作流程图
1.3LED显示原理
1.3.1LED显示原理
LED发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。
LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起。
半导体晶片由两部分组成,一部分P型半导体,在它里面空穴占据主导地位,另一端是N型半导体,在这边主要是电子。
但这两种半导体连接起来的时候,它们之间就形成一个“P-N结”。
当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED发光的原理。
1.3.232*32LED显示的规格描述
LED显示屏实际是有无数的小的单元板拼接成的,单元模组也有规格尺寸,不同型号模组的尺寸也不同,此次32*32LED显示模块是由16个8*8的点阵组成。
LED显示屏是有RGB红、绿、蓝三种颜色的发光二极管组成的,是物理的形式形成像.
1.4取模软件的原理及应用
在编写软件代码之前必须要先掌握汉字字模的方法。
要得到上表中的文字,我们可以借助字模软件来完成。
如下所示字模软件的初始界面和使用界面如图1.3.1,1.3.2,1.3.3和1.3.4所示目前点阵LED的字模软件有很多,我们以本开发板配套的字模软件为例来介绍一下汉字及图形的取模方法。
首先打开字模软件出现如下显示界面:
图3字模软件界面
图4
经过以上步骤后汉字或图形就取模成功了,在程序中只要调用这段代码就可显示出相应的汉字或图像了,其它汉字或图形也可用同样的方法。
第二章LED显示的DSP实现
2.1DSP控制LED显示的原理
以TMS320VC5416DSP为核心的DSP,它通过扩展接口与显示/控制模块连接,可以控制其各种外围设备。
LED显示器与DSP的连接如图2.1.1所示:
图2.1.1
1、LED显示模块的访问、控制时由VC5416DSP对扩展接口的操作完成。
控制口的寻址:
命令控制接口CTRLCDCMDR的地址为0x8001,数据控制接口的地址为CTRLCDLCR:
0x8003和CTRLCDRCR:
0x8004,辅助控制接口CTRLCDCR的地址为0x8002。
控制和状态寄存器列表
名称
地址
功能
属性
CTRGR
Port8001
全局控制寄存器
W
CTRLCDCR
Port8001
LED控制寄存器
W
CTRLCDCMDR
Port8001
LED命令寄存器
W
CTRLCDLR
Port8001
LED左半屏控制寄存器
W
CTRLCDRCR
Port8001
LED右半屏控制寄存器
W
图2.1.2
2、显示控制方法:
本次实训采用的是5416DSP对扩展I/O端口控制外围设备并且通过程序对LED显示模块的访问的方法。
在5416DSP中命令控制I/O接口的的地址为0X8001,辅助控制I/O接口的地址为0X8002。
通过DSP控制LED显示数据的方法:
LED显示模块中有两片显示缓冲存储器,分别对应屏幕显示的像素,向其中写入数值将改变显示,写入“1”则显示一点,写入“0”则不显示。
其地址与像素的对应方式如图2.2.3所示,每次发送一个八位数据(一页的一列数据),高位在下方,低位在上方。
LED显示在DSP硬件电
路上有自动移到下一列的功能。
左侧显示内存
右侧显示内存
列号Y
0
1
····
62
63
0
1
·····
62
63
行号
页号X=0
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
0
7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
8
55
X=7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
DB0
DB7
56
63
3、发送控制命令:
通过向命令控制接口写入命令控制字,然后再向辅助控制接口写入0。
下面给出的是基本命令字、解释和C语言控制语句举例:
显示开关:
0x3f打开显示;0x3e关闭
Port8001=0x3f;Port8002=0;//将LED显示打开
Port8001=0x3e;Port8002=0;//将LED显示关闭
设置显示起始行:
0x0c0+起始行取值,其中起始行取值为0至63;
Port8001=0x0c0;Port8002=0;//设置从存储器第0行开始显示
Port8001=0x0c8;Port8002=0;//设置从存储器第8行开始显示
设置操作页(X):
0x0b8+页号,其中页号取值为0至7;
Port8001=0x0b8;Port8002=0;//设置即将操作的存储器第0页
Port8001=0x0ba;Port8002=0;//设置即将操作的存储器第2页
设置操作列(Y):
0x40+列号,其中列号取值为0至63;
Port8001=0x40;Port8002=0;//设置即将操作的存储器第0列
Port8001=0x44;Port8002=0;//设置即将操作的存储器第4列
4、写显示数据
在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写入LED显示模块的缓存。
将数据发送到相应数据控制I/O接口即可。
由于LED模块相对于DSP来讲是慢速设备,在命令之间可能需要增加延时语句。
2.2LED显示的DSP软件设计
本实验系统由于采用了TI公司的TMS320VC5416DSP芯片,所以主要编程语言为相应的DSP语言,采用的编译环境是TI公司的CCS(CodeComposerStudio)。
软件的编写,主要包括程序的编译、编译和链接。
在软件调试的工作中,一般都需要用到仿真器,目标DSP与PC机通过仿真器连接、编译、链接得到的可执行程序,通过仿真器下载到目标DSP中,目标DSP的状态通过仿真器上传到PC机显示。
TMS320VC5416DSP提供两种编程语言:
汇编语言和C语言。
对于完成一般功能的代码,这两种语言都可以使用。
使用汇编语言程序虽然具有速度快的优点,但用汇编语言编写程序比较费时费力,使用C语言编程可以提高程序开发的效率,同时使阅读程序变得容易一些。
本文采用的软件环境是C语言环境。
(1)端口定义如下:
#defineLCDDELAY1//延迟常数
#defineLCDCMDTURNON0x3f//打开LED显示命令字
#defineLCDCMDTURNOFF0x3e//关闭LED显示命令字
ioportunsignedintport8000;//控制板全局控制寄存器
ioportunsignedintport8001;//命令控制I/O接口的地址为0x8001
ioportunsignedintport8002;//辅助控制I/O接口的地址为0x8002
ioportunsignedintport8003;//左侧屏幕数据缓存器
ioportunsignedintport8004;//右侧屏幕数据缓存器
通过先定义一些必要的端口,来初始化LED显示的控制
(2)子程序声明:
本节只对功能函数进行说明,对于LED、按键的驱动程序不做说明,详细程序源代码见附录。
voidLCDPos(ucharX,ucharY,ucharPage);
LED位置设置子程序,其中X给定列号,Y给定行号,Page给定页号。
voidLCD_Point(unsignedcharx,unsignedchary);
voidLCD_PointCls(unsignedcharx,unsignedchary);
画点子程序,给定两个参数即:
给定一个点的x,y坐标,这样就确定了一个点。
第一个函数声明为点亮一个点,第二个函数声明为擦除一个点。
有了画点子程序就可以利用它来扩展画直线、画圆、画曲线等,只是相应的函数构造问题,下面为画给定两点画线的函数声明:
ucharLCD_Line(intX1,intY1,intX2,intY2);
ucharLCD_LineCls(intX1,intY1,intX2,intY2);
画线子程序,通过给定起始点的坐标和终点的坐标,由这两个坐标确定一条直线。
同样第一个函数声明为描绘一条线,第二个函数声明为擦除一条直线。
有了画线程序我们又可以往下扩展画矩形、画方波、画三角波等。
voidLCD_GUI(uchar*p);
voidLCDCLS();
绘图子程序,位图信息被存放在一个一维数组里大小为32*32,通过数组名进行指针的传递将位图绘于LED屏上。
有了以上的绘图函数就可以完成LED屏的显示功能。
下面对其他功能函数进行一些必要的说明:
voidinterruptint2(void);
按键中断子程序,当有按键按下时,响应外中断2,执行按键中断子程序,在子程序里完成按键键号的识别。
(3)主程序的设计
voidmain();
主程序负责LED、按键、中断等初始化工作,以及LED画面的切换、画点、画线等功能的实现。
2.3LED显示的结果
第三章全文总结
通过此次DSP课程设计,我们加深了对DSP的理解,提高了DSP应用技术实验能力,基本掌握CCS2.0软件应用及简单硬件应用电路的一般设计方法,提高电子电路的设计和实验能力,为以后的学习和科研打下了一定的基础。
当然,在设计的过程当中,遇到的问题还是蛮多的。
首先,是DSP实验箱不熟悉以至对硬件接口的使用不够得心应手。
其次,对DSP程序的的编写上还不是很熟悉。
本次DSP课程设计,给出了LED显示程序的一般框架,采用模块化设计思路,且使用可移植性好的高级语言C进行编程,加速了程序上的编写。
对以后相似项目的设计具有指导意义。
附录
命令文件如下:
-w
-stack400h
-heap100
-lrts.lib
MEMORY
{
PAGE0:
VECT:
o=80h,l=80h
PRAM:
o=100h,l=1f00h
PAGE1:
DRAM:
o=2000h,l=1000h
}
SECTIONS
{
.text:
{}>PRAMPAGE0
.data:
{}>PRAMPAGE0
.cinit:
{}>PRAMPAGE0
.switch:
{}>PRAMPAGE0
.const:
{}>DRAMPAGE1
.bss:
{}>DRAMPAGE1
.stack:
{}>DRAMPAGE1
.vectors:
{}>VECTPAGE0
}
源程序代码:
#defineCLKMD*(unsignedint*)0x58
ioportunsignedintport8002;
ioportunsignedintport8001;
//ioportunsignedintport8002;
//定义定时器和定时中断有关寄存器
#define TIM *(int*)0x24
#define PRD*(int*)0x25
#define TCR *(int*)0x26
#define IMR *(int*)0x0
#define IFR