fccjxxw.com
非常超级学习网 学习超级帮手
当前位置:首页 >> 计算机硬件及网络 >>

基于DSP的交通灯控制系统设计与实现


毕业设计(论文)
基于 DSP 的交通灯控制系统设计与实现

姓 系

名 别、 专 业

计算机科学系、通信工程

导 师 姓 名、职 称 完 成 时 间

目录

摘 要 ............................................................................................................... I ABSTRACT ........................................................................................................ II 1 绪言 .............................................................................................................. 1 2 DSP 与 VISUAL C++技术简介 ...................................................................... 1 2.1 DSP 概述 .................................................................................................... 1 2.2 TMS320CF2812 DSP 结构以及组成 .......................................................... 3 2.3 DSP 的开发流程 ........................................................................................ 4 2.4 C++语言 ..................................................................................................... 6 3 总体设计方案 .............................................................................................. 8 3.1 系统功能描述 .............................................................................................. 9 3.2 系统设计流程图 ........................................................................................ 10 3.3 硬件设计 ................................................................................................. 11 3.4 软件设计 ................................................................................................. 13 4 系统测试 .................................................................................................... 20 4.1 DSP 系统测试环境 .................................................................................. 20 4.2 程序的调试 ............................................................................................. 23 4.3 系统测试结果 .......................................................................................... 23 5 总结 ............................................................................................................ 26 参考文献 ............................................................................................................ 27 致 谢 ................................................................................ 错误!未定义书签。





数字信号处理(Digital Signal Processing,DSP) ,是 20 世纪 60 年代前后发展 并广泛应用于许多领域的学科。20 世纪 70 年代以来,随着大规模集成电路(LSI)和超 大规模集成电路(VLSI)及微处理器技术的迅猛发展,数学信号处理的理论和技术得到 长足发展,使其在数字通信、雷达、遥感、声纳、语音合成、图像处理、测量与控制、 多媒体技术、生物医学工程及机器人等各个领域都得到广泛的应用。 交通拥堵在我国的大部分城市特别是大城市一直是一个难以解决的问题,也成为了 困扰我国城市发展的一个大问题。所以本设计是基于 DSP 原理设计的交通灯控制系统, 采用的是软硬件结合的方法。在硬件上利用 TI 公司德州仪器生产的用于工业自动控制 TMSC320F2812 系列的 DSP 芯片,四组发光二极管,在软件上使用 CCS 集成开发环境,在 此环境中用 C 语言编写定时器程序来控制发光二极管的亮灭情况以达到模拟十字路口的 交通灯,从而管理十字路口车辆的秩序,使交通畅通无阻。 关键词:DSP;交通灯;发光二极管; CCS;LED

I

ABSTRACT
Digital signal processing (Digital Signal Processing, DSP). Before and after the nineteen sixties developed and widely used in many fields. Since the nineteen seventies, with the large scale integrated circuit (LSI) and very large scale integrated circuit (VLSI) and rapid development of microprocessor technology, rapid development of theory and technology. Digital signal processing, the digital communication, radar, sonar, remote sensing, speech synthesis, image processing, measurement and control, multimedia technology, biomedical engineering and robotics and other fields are widely used. Traffic congestion in most city of our country especially big city is always a difficult problem, has become a big problem in China's city development. So the design is the traffic light control system based on DSP design principle, adopts the method of combining software and hardware. In the hardware used for automatic control of DSP chip TMS320F2812 series industrial manufactured by TI, four group of light-emitting diodes, the software uses the CCS integrated development environment, written with C programming language to control the timer off bright light emitting diode so as to achieve the simulation crossroads traffic lights in this environment, thereby managing crossroads vehicle order, make the traffic smooth operator. Key words: Digtal Signal Process; TrafficLight; Light Emitting Diode;Code Composer Studio;LED

II

1

绪言
随着社会的发展和进步,路上的车辆越来越多,而道路建设往往跟不上城市的发展

速度,因此交通问题越来越严重,经常在十字路口或者是交通繁忙的地方发生堵塞的情 况,出现交通混乱。随着人们对生活要求的不断提高,城市交通问题引起了越来越多的 人的关注,同时交通问题也是制约我国经济发展的一个重大问题,因为我国人口较多, 所以大部分城市都会出现交通堵塞的情况,特别是在一些大城市。随着人们生活不断的 提高城市的车辆也在不断增加,所以导致城市的交通出现了超负荷运行的情况,因此交 通问题已经成为交通部门急需解决的重要问题之一。 当前大量的信号灯电路正走向数字化、 小功率、 多样化和多值化方向发展以方便人、 车、路三者关系的协调。随着社会经济的发展,城市规模的不断扩大,城市交通成为制 约城市发展的一大因素,为此人们想了很多的措施,不断的提高交通控制系统的性能, 但是收到的成效不是很大。在一些大城市里面交通拥堵的现象仍然是随处可见,特别是 在上下班交通高峰时段交通拥挤的情况更为严重。对我们的生活带来了很多困扰。 虽然单片机在交通控制系统得到广泛的应用,但是其收到的效果却是不尽人意的, 交通堵塞仍然是困扰我国大部分城市发展的一个顽固问题。借着本次论文设计的机会, 我选用 DSP F2812 型芯片的开发板作为本次论文设计的硬件设备,采用 CCS 集成开发环 境。DSP F2812 型芯片被大量用于自动化控制领域,其功能远比单片机要强大,如果将 其应用于交通控制,我相信会收到很好的效果。我想通过本次论文设计,熟悉 CCS 集成 开发环境以及 DSP 的开发流程,并实现基本的交通管理功能。同时在此基础上通过不断 的学习和积累,希望在将来能够开发出更加智能的交通管理系统,使长期以来困扰人们 的交通拥堵得到妥善解决。 本论文结构安排如下,第一章介绍该论文背景、目的以及意义。第二章详细介绍论 文采用硬件 DSP F2812 芯片的结构以及组成,简单介绍 C++语言的设计目标、原则。第 三章是关于本论文的总体设计方案,其中包括功能描述、设计流程图、硬件设计、软件 设计。 第四章主要是系统测试包括程序在 CCS 环境中的调试以及论文的测试结果是本论 文的核心部分,介绍了本论文的 DSP 开发过程以及开发工具。

2
2.1

DSP 与 visual C++技术简介
DSP 概述
TMS320F2812 系列 DSP 是 32 位的定点数字信号处理器,是目前国际市场上最先进、

功能最强大的定点 DSP 芯片。它继承了数字信号处理的诸多优点,例如可调整的哈佛总
1

线结构和循环寻址方式[1]。同时 TMS320F2812 系列 DSP 使用精简指令集(RISC) ,从而使 CPU 能够周期地执行寄存器到寄存器的操作。 TMS320F2812 系列 DSP 既具有数字信号处理能力,又具有强大事件管理能力和嵌入 式控制功能,特别适用于有大批量数据处理的测控场合,如工业自动化控制、电力电子 技术应用、智能化仪器仪表及电机、马达伺服控制系统。 图 2-1 所示为一个完整的 DSP 系统框图,图中输入信号多为不同种类的自然信号, 可以为语音信号或已调数字信号,也可以为图像信号。DSP 芯片为整个系统的核心。

模拟信号输入

A/D

DSP 芯片
图 2-1 数字信号处理过程

A/D

模拟信号输出

在该系统中,首先需要通过传感器将自然信号转换成为电信号。模拟信号进入 A/D 子系统后,经 D/A 转换会转变为数字信号。然后 DSP 芯片对输入的数字信号进行某种形 式的处理,如进行一系列的乘累加操作(MAC) 。最后经处理的数字信号再经 D/A 变换转 换为模拟信号[2]。 早期的信号处理主要是模拟信号处理,是运用运算放大电路通过不同的电阻、电容 组配来实现的。其中很明显的问题是不灵活、不稳定、参数停发困难、需采用多种阻值、 容值的电阻、电容、并通过电子开关选通才能修改处理参数 ;而且其对环境变化的敏感 性强,温度、电路噪声等都会造成处理结果的改变。而数字信号处理可以通过软件修改 处理参数,因此具有很大的灵活性。由于数字电路采用二值逻辑,只要环境温度、电路 噪声的变化不造成电路逻辑的翻转,数字电路都可以不受影响的完成工作,因此具有很 好的稳定性。因而信号处理由模拟信号处理逐渐转向数据信号处理,从而使对数据信号 处理的芯片 DSP 应运而生。 针对数字信号处理的要求, DSP 芯片采用 CMOS 集成电路制造, 并且采用改进的哈佛结构(Havard structure) ,同时增加芯片上的外围、存储器,以 及特殊指令集,使得 DSP 有很好的操作弹性与速度。而且改进型的哈佛结构特有的数据 与程序分离的做法,可以提高运算的性能。 DSP 的实现方法一般有以下几种: ① 在通用计算机(如 PC 机)上用软件(如 Fortran、C 语言)实现。 ② 在通用计算机系统中加上专用的加速器(如图形加速卡等) 。 ③ 用通用单片机实现,这种方法可用于一些不太复杂的数字信号处理。 ④ 用通用的可编程 DSP 芯片实现。 与单片机相比, DSP 芯片具有更加适合于数字信号处 理的软件和硬件资源,可用于复杂的数字信号处理算法。 ⑤ 用专用的 DSP 芯片实现。

2

2.2

TMS320CF2812 DSP 结构以及组成
TMS320F212 系列芯片的主要性能如下[3]:

(1) 高性能静态 CMOS(Static CMOS)技术
? ? ?

150MHZ(时钟周期 6.67ns)(最大) Flash 编程电压 3.3V 低功耗(核心电压 1.8V,I/O 口电压 3.3V)

(2)JATG 边界扫描(Boundary Scan)支持 (3)高性能的 32 位中央处理器(TMS320C28X)
? ? ? ? ? ? ?

16*16 位和 32*32 位乘且累加操作 迅速的中断响应和处理 16*16 位的两个乘且累加 统一的寄存器编程模式 哈佛总线结构(Harvard Bus Architecture) 可达 4M 字(1 字为 16 位)的线性程序地址 强大的操作能力 8K*16 位的 Flash 存储器 H0:一块 8K*16 位的单口随机存储器 1K*16 位的 OTP 型只读存储器 L0 和 L1:两块 4K*16 位的单口随机存储器(SARAM) M0 和 M1:两块 1K*16 位的单口随机存储器 带有软件的 Boot 模式 标准的数字表 有多达 1MB 的存储器 可编程读/写选通计数器(Strobe Timing) 可编程等待状态数 三个独立的片选端 支持动态的改变锁相环的频率 看门狗定时器模块 片内振荡器

(4)片内存储器
? ? ? ? ?

(5)只读存储器(Boot ROM)4K*16 位
? ?

(6)外部存储器接口(仅 F2812 有)
? ? ? ?

(7)时钟与系统控制
? ? ?

(8)三个外部中断
3

(9)外部中断扩展(PIE)模块
?

可支持 96 个外部中断,当前仅使用了 45 个外部中断 保护 Flash/OTP 和 L0/L1 SARAM 防止 ROM 中的程序被盗 ANSI C/C++编译器/汇编程序/连接器 DSP/BIOS 支持 TMS320C24x 的指令 ITAG 扫描控制器(TI 或第三方的) 代码编辑集成环境 硬件评估板

(10)128 位的密钥(Security Key/Lock)
? ?

(11)开发工具
? ? ? ? ? ?

2.3

DSP 的开发流程
在进行 DSP 系统开发之前, 设计者首先要明确设计目的和技术指标。 进行具体的 DSP

系统设计时,一般开发流程如图 2-2 所示 (1) 设计需求分析 从图 2-2 可以看到, 在设计和开发之前, 首先设计者需要对设计目标有清楚的了解。 第一步应该定义所有的需要,包括信号处理和非信号处理的需求。信号处理的问题有: 对 DSP 算法的确定,输入、输出结果特性的分析,以及按要求对确定的性能指标在通用 机上用高级语言编程仿真。这部分工作主要通过软件实现。非信号处理的问题有:应用 环境(DSP 芯片和外围电路)搭建,设备的可靠性指标,设备的成本、性能价格比、体 积、重量、功耗、可维护性。 (2)DSP 芯片的选择 设计 DSP 应用系统,选择 DSP 芯片是非常重要的一个环节。只有选定了 DSP 芯片, 才能进一步设计其外围电路及系统的其它电路。总的来说 DSP 芯片的选择应根据实际的 应用系统需要而确定。 不同的 DSP 应该系统由于应用场合、 应用目的等不尽相同, 对 DSP 芯片的选择也是不同的。 一般来说,选择 DSP 芯片时应考虑到以下因素
? ? ? ? ?

DSP 芯片的运算速度。 DSP 芯片的硬件资源。 DSP 芯片的运算精度。 DSP 芯片的开发工具。 DSP 芯片的功耗。
4

?

封闭的形式、质量标准、生命周期。

(3)应用设计 ① 根据选定的算法和 DSP 芯片对系统的各项功能是通过软件实现还是硬件实现来 进行初步分工,例如 FFT、数字上/下变频器、RAKE 分级接收是否需要专门的芯片或者 FPGA 芯片实现,译码判决算法是用硬件判决还是软件判决。 ② 根据系统设计的技术指标和要求进行硬件设计,完成 DSP 芯片外围电路和其他 电路的转换、控制、存储等的设计。 ③ 根据系统设计指标和要求编写 DSP 汇编程序,完成软件的设计。软件设计也可 以采用高级语言进行。由于现有的高级语言编译器的效率比较低,因此设计过程中常常 采用高级语言和汇编语言结合的方法。 (4)软件和硬件的调试 DSP 硬件和软件设计完成后, 就需要进行硬件和软件调试。 软件的调试一般都需要 借助于 DSP 开发工具,如软件模拟器、DSP 开发系统或仿真器等。在调试 DSP 算法时, 一般采用比较实时结果与模拟结果的方法,如果实时程序和模拟程序的输入相同,则两 者的输出应该一致。应用系统的其他软件可以根据实际情况进行调试。硬件调试一般可 以采用硬件仿真器进行调试,如果没有相应硬件仿真器,且硬件系统不是十分复杂,也 可以借助于一般的工具进行调试。 (5)系统集成及测试 系统的软件和硬件分别测试完毕后,就可以将软件脱离开发系统而直接在应用系统 上运行。当然,DSP 系统的开发,特别是软件开发是一个需要反复进行的过程,虽然通 过算法模拟基本上可以知道现实系统的性能,但实际上仿真环境不可能做到与现实系统 环境完全一致,而且在将仿真的算法移植到现实系统时,必须考虑算法是否能够运行的 问题。如果算法运算量太大而不能在硬件上实际运行,则必须重新修改或简化算法。

5

确定设计目标

确定系统设计指标

选择 DSP 芯片

硬件设计

软件编程

硬件调试

软件调试

系统集成

系统测试 图 2-2 设计流程图

2.4 C++语言
C++语言是一种优秀的面向对象程序设计语言,它在 C 语言的基础上发展而来,但 它比 C 语言更容易为人们学习和掌握[4]。 C++以其独特的语言机制在计算机科学的各个领 域中得到了广泛的应用。 面向对象的设计思想是在原来结构化程序设计方法基础上的一 个质的飞跃,C++完美地体现了面向对象的各种特性。 2.4.1 概述 C++ 程序设计语言是由 Bjarne Stroustrup 设计和实现的,它兼具以往 Simula 语言在组织与设计方面的特性以及适用于系统程序设计的 C 语言设施。C++ 最初的 版本被称作“带类的 C( C with classes )”,在 1980 年被第一次投入使用;当 时它只支持系统程序设计和数据抽象技术 [5]。 支持面向对象程序设计的语言设施在 1983 年被加入 C++ ;之后,面向对象设计方法和面向对象程序设计技术就逐渐进 入了 C++ 领域。在 1985 年,C++ 第一次投入商业市场。在 1987 至 1989 年间,支持 范型程序设计的语言设施也被加进了。
6

随着若干独立开发的 C++ 实现产品的出现和广泛应用,正式的 C++ 标准化工作 在 1990 年启动。标准化工作由 ANSI ( American National Standard Institute ) 以及后来加入的 ISO ( International Standards Organization )负责。 1998 年 正式发布了 C++ 语言的国际标准。在标准化工作进展期间,标准委员会充当了一个 重要的角色,其发布的 C++ 标准之草案在正式标准发布之前,一直被作为过渡标准 而存在。而作为标准委员会中的积极分子,我是 C++ 进一步发展工作中的主要参与 者。与以前的 C++ 语言版本相比,标准 C++更接近我理想中的那个 C++ 语言了。 2.4.2 C++设计目标 C++ 的设计目标,就是要让 C++ 既具有适合于系统程序设计的 C 语言所具有的 可适应性和高效性,又能在其程序组织结构方面具有像 Simula 那样的语言设施 ( Simula 所支持的这种程序组织结构通常被称为面向对象程序设计风格)。在设 计的时候,还做了很大的努力,使得引借自 Simula 的高层次的程序设计技术能够 应用于系统程序设计之中。这即是说, C++ 所提供的抽象机制能够被应用于那些对 效率和可适应性具有极高要求的程序设计任务之中。 上述的 C++ 之设计目标可以小结如下: 1 、对于要解决实际问题的程序员而言, C++ 使程序设计变得更有乐趣; 2 、 C++ 是一门通用目的的程序设计语言,它: ( 1 )是一个更好的 C; ( 2 )支持数据抽象; ( 3 )支持面向对象程序设计; ( 4 )支持范型程序设计。 对程序设计的支持在 C++ 设计的后期才被作为一个明确、独立的目标来实现。 而在 C++ 演化过程的大部分时间里, 我一直把程序设计以及支持它的语言特性划归 在“数据抽象”的大标题之下。 2.4.3 C++设计原则 C++ 的设计规则被分为基本规则、基于设计的规则、语言的技术性规则以及基 于低层次程序设计的规则四个方面,分列在下文中。 基本规则( General rules ) 1、 C++ 的每一步演化和发展必须是由于实际问题所引起的; 2、 C++ 是一门语言,而不是一个完整的系统; 3、 不能无休止的一味追求完美; 4、 C++ 在其存在的“当时”那个时期必须是有用处的; 5、 每一种语言特性必须有一个有根据的、明确的实现方案; 6、 总能提供一种变通的方法;
7

7、 能为意欲支持的每一种程序设计风格提供易于理解的支持方法; 8、 不强制于人。 可以注意到,基本规则的最后三条暗示了两点:对适用于真实世界中各种应 用的便捷工具的强调;对程序员的技术和取向(偏好)的充分考虑。从一开始, C++ 面向的就是那些要做实际项目的程序员。所谓的“完美”被认为是不可能达到 的,这是由于 C++ 用户在需求、背景和待解决问题上存在着太大的不同。况且,在 一门通用目的的程序设计语言的整个生存期之内,连对“完美”一词的诠释都可 能会有极大的改变。由此可知,在语言的演化过程中,来自用户的反馈和语言实 现者们积累的经验才是最为重要的。 基于设计的规则( Design-support rules ) 1、 支持良好的设计方案; 2、 提供用于程序组织的语言设施; 3、 心口如一( Say what you mean ); 4、 所有的语言特性必须具有切实有效的承受能力; 5、 开启一个有用的特性比避免所有的误用更为重要; 6、 能将独立开发的部件组合成完整的软件。 语言的技术性规则( Language-technical rules ) 1、 与静态型别系统( Static type system )没有内在的冲突; 2、 像对内建( built-in )型别一样对用户自定义型别提供很好的支持; 3、 个异化( locality )行为是可取的; 4、 避免产生顺序上的依赖关系; 5、 在对语言产生疑惑时,可以选取其特性中最易掌握的部分; 6、 可以因为不正当的语法使用而产生问题( Syntax matters (often in perverse ways) ) 7、 削弱对预处理器的使用。 基于低层次程序设计的规则 1、 使用传统的(笨拙的)连接器( linker ); 2、 与 C 语言不存在无故的不兼容性; 3、 不给 C++ 之下层级的更低层语言留出余地(汇编语言除外); 4、 你不会为你所不使用的部分付出代价(零负荷规则); 5、 在产生疑惑时,能提供完全自主控制的途径。

3

总体设计方案

8

交通灯是我们日常生活中常见的一种对车辆的管理系统,我们的生活也离不开它。 当缺少交通灯时,我们的交通一定会混乱不堪,从而直接影响我们的日常生活。由于日 常生活中会有很多突发事件,像救护车需要畅通无阻的通行,上下班高锋期间交通灯的 应变能力,都是我们目前交通控制系统难以解决的问题。基于此,我们应该将 DSP 更加 广泛的应用到交通控制系统中,充分发挥其高性能的自动化控制功能,使交通管理系统 日益完善。 根据 DSP 的硬件中断、定时器,I/O 访问的原理。用定时器定时,用 I/O 控制红绿 灯的开关,用外中断模拟急救车到达[5]。有特殊车辆到达时,两向全为红车,以便让急 救车通过,急救车通过后,交通灯恢复正常。在 DSP 实验箱上发光二极管由高 8 位的数 据线控制[6]。 首先,对 CPU 频率、ICETEK-CTR、定时器、中断控制寄存器、工作变量进行初始化; 然后,根据定时计数器确定当前状态,再根据当前状态设置指示灯状态,从而设置发光 二极管的显示阵列状态, 读取键盘输入, 确实是否结束; 最后结束。 交通灯示意图如 3-1
N

W

E

S
图 3-1 交通十字路口

3.1 系统功能描述
在当今的生活中随着人们生活水平的不断提高,人们对生活质量的要求也越来越 高,所以现在个人拥有私家车的群体在不断的增加,这样出现了在公路上跑的汽车越来 越多,必然会导致交通拥挤,特别是在一些十字路口,交通规则显得尤其重要,这时候 需要一个智能的系统来管理这些车辆,维护正常的交通秩序。本系统正是基于上述现像 而设计的。 十字交通灯系统,是一个用于十字交叉路口的管理系统,这个系统利用发光二极管
9

以及定时的程序来实现的[7]。在东南西北四个方向,分别放置一排发光二极管,这些发 光二极管亮灯的颜色有红、黄、绿三种。首先东西方向发光二极管的灯亮绿色,表示东 西方向的车辆可以正常通行;同时南北方向的发光二极管亮红灯,表示南北方向的车辆 禁止通行。这时候计时器会按照程序设计的进行倒计时。当倒计时到 0 时,东西方向的 发光二极管亮灯的颜色由绿色变成黄色,然后闪三下,然后由黄色变成红色这时候东西 方向的车辆禁止通行;当东西方向的灯变成红色之后,南北方向的发光二极管由红色变 成绿色,这时候表示南北方向的车辆可以通行。然后重复上面,以达到管理十字路口的 车辆。

3.2 系统设计流程图

10

开始

初始化:CPU 频率、ICETEK-CTR、定时器、 中断控制寄存器、工作变量

根据定时器计数确定当前状态

根据当前状态设置指示灯状态

根据当前状态设置发光二极管显示阵列

读取键盘输入

结束?

N

Y

结束

图 3-2 系统设计流程图

3.3 硬件设计 3.3.1 基本硬件设计思路
该系统包括 DSPF2812 芯片、 A/D 转换部分和 LCD 液晶显示。 通过 IO 口与 DSP 连接, 将模拟信号数据储存。然后通过 A/D 转换器模块将模拟信号转化成数字信号,首先要初 始化 A/D 转换模块,然后等待中断,当产生中断后对采集到的模拟信号进行处理,为确
11

保转换精度要进行多次取值求平均,转换结果放在结果寄存器的高 12 位上,通过编程 将处理后的计时值送到 LCD 上进行显示。或者通过与上位机 PC 相连,通过编译,在 CCS 中显示其结果。系统框图如下:
交通控制电路 DSPF2812 A/D 转换电路 液晶显示模块

图 3-3 硬件设计流程图
? ?

计时显示:液晶屏幕上 8×8

点阵显示 0-9

计数。

正常交通控制信号顺序:正常交通灯信号自动变换: 秒)。

⑴ 南北方向绿灯,东西红灯(20 ⑵南北方向绿灯闪烁。 ⑶南北方向黄灯。 ⑷南北方向红灯,东西方向黄灯。 ⑸东西方向绿灯(20 ⑺东西方向黄灯。 ⑻返回⑴循环控制。 秒)。 ⑹东西方向绿灯闪烁。

紧急情况处理:模仿紧急情况(重要车队通过、急救车通过等)发生时,交通警察手 动控制 ⑴当任意方向通行剩余时间多于 10 秒,将时间改成 10 ⑵ 正常变换到四面红灯(20 秒)。 秒。

⑶直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态) 液晶显示器控制

3.3.2 主要部件介绍
本次设计使用 ICETEK-F2812-A 板,ICETEK-F2812-A 是一块以 TMS320F2812DSP 为核 心的 DSP 扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各 种外围设备。液晶显示模块的访问、控制 2812DSP 对扩展扩展接口的操作完成。控制扩 展口的寻址:命令控制扩展接口的地址为 0x108001 ,数据控制扩展接口的地址为 0x108003 和 0x108004,辅助控制扩展接口的地址为 0x108002。 模数转换器(ADC)主要由以下几个模块组成[8]: (1)12 位 ADC 核,内置采样/保持器 A 和采样/保持器 B。 (2)ADCINA0-ADCINA7 和 ADCINB0-ADCINB7 共 16 个模数转换输入通道(引脚) 。 (3) RESULT0-RESULT15 共 16 个模数转换结果寄存器。 (4)SEQ1 及 SEQ2 两个序列发生器。在并发模式下,每一个序列发生器都可以独立地自 动完成任意 8 个输入通道的采样和模数转换;在级联模式下,SEQ1 及 SEQ2 级联成一个
12

序列发生器,可以自动完成任意 16 个输入通道的采样和模数转换。 (5)序列发生器可通过软件、EVA、EVB 或外部引脚这四个触发源中的一个启动转换。 液晶显示器的优点: ①显示质量高,由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒 定发光,而不象阴极射线管显示器(CRT)那样需要不断刷新亮点。因此,液晶显示器 画质高而且绝对不会闪烁,把眼睛疲劳降到最低。 ②没有电磁辐射,传统显示器的显示材料是荧光粉,通过电子束撞击荧光粉而显示,电 子束在打到荧光粉上的一刹那间会产生强大的电磁辐射,尽管目前有许多显示器产品在 处理辐射问题上进行了比较有效的处理,尽可能地把辐射量降到最低,但要彻底消除是 困难的。 ③可视面积大:对于相同尺寸的显示器来说,液晶显示器的可视面积要更大一些。液晶 显示器的可视面积跟它的对角线尺寸相同。阴极射线管显示器显像管前面板四周有一英 寸左右的边框不能用于显示。 应用范围广: 最初的液晶显示器由于无法显示细腻的字符, 通常应用在电子表、计算器上。随着液晶显示技术的不断发展和进步,字符显示开始细 腻起来,同时也支持基本的彩色显示,并逐步用于液晶电视、摄像机的液晶显示器、掌 上游戏机上。数字式接口:液晶显示器都是数字式的,不像阴极射线管彩显采用模拟接 口。

3.4 软件设计
在设计软件之前应首先确定软件设计时要遵循的一些原则,系统应具备哪些功能及 与之相对的软件系统的结构组成,这样软件设计的过程就会更加的清晰易懂。设计本系 统时应该遵守以下原则: (1) 由于本系统属于一种实时控制系统,而系统要处理的数据量又非常的大,为了满 足系统实时性的需要,程序算法应该最大程度地优化、执行速度应该最大程度的快速。 (2) 由于交通现场情况非常复杂,程序算法的适应性应该非常强,也就是算法要具备 鲁棒性。 (3) 由于本系统属于户外装置,环境变化难以预测,因此系统应可以在各种环境条件 下,尤其是恶劣环境下,仍然正常稳定的运行。 (4)由于本系统的主要目的是控制发光二极管的亮灭情况来管理交通,因此本系统应 该具备较好的可扩展性,便于扩展交通控制系统的其它的功能[9]。 在设计本系统时,我们首先应该对一些主函数进行定义和说明,此功能由如下主要 程序实现: #define LCDDELAY 1 #define LCDCMDTURNON 0x3f #define LCDCMDTURNOFF 0x3e
13

#define LCDCMDSTARTLINE 0xc0 #define LCDCMDPAGE 0xb8 #define LCDCMDVERADDRESS 0x40 void Delay(unsigned int nTime); void SetLEDArray1(int nNumber); void RefreshLEDArray1(); interrupt void cpu_timer0_isr(void); interrupt void XINT2_isr(void); void EndICETEKCTR(); #define XINT2CR (*((unsigned int *)0x7071)) #define XNMICR (*((unsigned int *)0x7077)) #define T46uS 0x0d40 #define SCANCODE_0 0x70 #define SCANCODE_1 0x69 #define SCANCODE_2 0x72 #define SCANCODE_3 0x7A #define SCANCODE_4 0x6B #define SCANCODE_5 0x73 #define SCANCODE_6 0x74 #define SCANCODE_7 0x6C #define SCANCODE_8 0x75 #define SCANCODE_9 0x7D #define SCANCODE_Del 0x49 #define SCANCODE_Enter 0x5A #define SCANCODE_Plus 0x79 #define SCANCODE_Minus 0x7B #define SCANCODE_Mult 0x7C #define SCANCODE_Divid 0x4A #define SCANCODE_Num 0x77 #define CTRGR *(int *)0x108000 #define CTRLCDCMDR *(int *)0x108001 #define CTRKEY *(int *)0x108001
14

// 修改显示内容 // 刷新显示

#define CTRLCDCR *(int *)0x108002 #define CTRCLKEY *(int *)0x108002 #define CTRLCDLCR *(int *)0x108003 #define CTRLCDRCR *(int *)0x108004 #define CTRLA *(int *)0x108005 #define CTRLR *(int *)0x108007 Uint16 var1 = 0; Uint16 var2 = 0; Uint16 var3 = 0; Uint16 test_count = 0; Uint16 Test_flag = 0; Uint16 Test_var = 0; Uint16 Test_status[32]; #define nStatusNSGreenEWRed 160 #define nStatusNSFlashEWRed 184 #define nStatusNSYellowEWRed 200 #define nStatusNSRedEWYellow 216 #define nStatusNSRedEWGreen 376 #define nStatusNSRedEWFlash 400 #define nStatusNSRedEWYellow1 416 #define nStatusNSYellowEWRed1 432 #define nTotalTime 448 #define nStatusHold 160 #define statusNSGreenEWRed 0 #define statusNSFlashEWRed 1 #define statusNSYellowEWRed 2 #define statusNSRedEWYellow 3 #define statusNSRedEWGreen 4 #define statusNSRedEWFlash 5 #define statusHold 6 int a=0; unsigned int uWork,nTimeCount,nTimeMS;
15

unsigned int uLightStatusEW,uLightStatusSN; unsigned int bHold; unsigned char ledbuf[8],ledx[8]; unsigned char led[40]= { 0x7E,0x81,0x81,0x7E,0x00,0x02,0xFF,0x00, 0xE2,0x91,0x91,0x8E,0x42,0x89,0x89,0x76, 0x38,0x24,0x22,0xFF,0x4F,0x89,0x89,0x71, 0x7E,0x89,0x89,0x72,0x01,0xF1,0x09,0x07, 0x76,0x89,0x89,0x76,0x4E,0x91,0x91,0x7E }; unsigned char ledkey[10][8]= { {0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00}, {0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00}, //1 {0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00}, {0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00}, {0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00}, {0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00}, {0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00}, {0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00}, {0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00}, {0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00} }; void TurnOnLCD(); void LCDCLS(); void InitICETEKCTR(); 在定义好主函数以后,我们接下来应该对主函数进行编写,我们编写的主函数主要 有:初始化 CPU 频率、ICETEK-CTR、定时器、中断控制寄存器、工作变量以及地址分配。 此功能由如下主要程序函数实现: (1) 初始化 CPU 频率 /InitSysCtrl();//初始化cpu InitPll(0x0); DINT;//关中断
16

//0 //2

InitPieCtrl();//初始化pie寄存器 IER = 0x0000;//禁止所有的中断 IFR = 0x0000 InitPieVectTable();//初始化pie中断向量表 EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.TINT0 = &cpu_timer0_isr;//指定中断服务子程序 PieVectTable.XINT2 = &XINT2_isr; EDIS; // This is needed to disable write to EALLOW protected registers // This is needed to write to EALLOW protected registers //EALLOW; //EDIS;

//PieVectTable.XINT2 = &XINT2_isr; // This is needed to disable write to EALLOW protected registers CpuTimer0.RegsAddr = &CpuTimer0Regs; // Initialize timer period to maximum: CpuTimer0Regs.PRD.all = 0xffff; = 0xffff; //CpuTimer0Regs.PRDH.all CpuTimer0Regs.TPR.all CpuTimer0Regs.TIM.all

// Initialize pre-scale counter to divide by 1 (SYSCLKOUT): = 0xff09; = 0xffff; = 0xffff;

//CpuTimer0Regs.TIMH.all // Make sure timer is stopped:

CpuTimer0Regs.TPRH.all = 0; CpuTimer0Regs.TCR.bit.TSS = 1; CpuTimer0Regs.TCR.bit.SOFT = 1; CpuTimer0Regs.TCR.bit.FREE = 1; // Reload all counter register with period value: CpuTimer0Regs.TCR.bit.TRB = 1; CpuTimer0Regs.TCR.bit.TIE = 1; // Reset interrupt counters: CpuTimer0.InterruptCount = 0; // Enable CPU INT1 which is connected to CPU-Timer 0: IER |= M_INT1; // Enable TINT0 in the PIE: Group 1 interrupt 7 PieCtrlRegs.PIEIER1.bit.INTx5 = 1; PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
17

XINT2CR =0x1;/*打开管脚xint2外中断*/ //XNMICR=0x1;/*打开nmi中断*/ // Enable global Interrupts and higher priority real-time debug events: EINT; ERTM; // Enable Global interrupt INTM // Enable Global realtime interrupt DBGM

(2) 初始化 ICETEK-CTR void InitICETEKCTR() { int k; CTRGR=0; CTRGR=0x80; CTRGR=0; CTRLR=0; // 关闭东西方向的交通灯 CTRLR=0x40; // 关闭南北方向的交通灯 CTRLR=0x0c1; // 开启发光二极管显示阵列 CTRLR=0xc8; for ( k=0;k<8;k++ ) { ledbuf[k]=0x0ff; } k=CTRCLKEY; // 清除键盘缓冲区 TurnOnLCD(); LCDCLS(); CTRLCDCR=0; (3)中断程序的编写 interrupt void cpu_timer0_isr(void) { //CpuTimer0.InterruptCount++; // Acknowledge this interrupt to receive more interrupts from group 1 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; CpuTimer0Regs.TCR.bit.TIF = 1; CpuTimer0Regs.TCR.bit.TRB = 1;
18

// 初始化ICETEK-CTR

//使能外部中断

// 显示为空白

ledx[k]=(k<<4); // 生成显示列控制字

// 打开显示 // 清除显示内存 // 设置显示起始行

CTRLCDCMDR=LCDCMDSTARTLINE;

nTimeMS++; if ( nTimeMS>=5 ) { nTimeMS=0; nTimeCount++; nTimeCount%=nTotalTime; } } interrupt void XINT2_isr(void) { //StopCpuTimer0(); PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; bHold=1; //StartCpuTimer0(); } (4)然后控制控制发光二极管亮灭发及刷新屏幕显示 CTRLR=0; // 关闭东西方向的交通灯 CTRLR=0x40; // 关闭南北方向的交通灯 CTRLR=0x0c1; // 开启发光二极管显示阵列*/ CTRGR=0; CTRGR=0x80; CTRGR=0; CTRLR=0; // 关闭东西方向的交通灯 CTRLR=0x40; // 关闭南北方向的交通灯 CTRLR=0x0c1; // 开启发光二极管显示阵列 CTRLR=0x0c8; k=CTRLCDCR; // 清除键盘缓冲区 InitICETEKCTR(); for ( k=0;k<8;k++ ) { ledbuf[k]=0x0ff; } k=CTRLCDCR; // 清除键盘缓冲区
19

// 初始化ICETEK-CTR

// 显示为空白

ledx[k]=(k<<4); // 生成显示列控制字

// 设置LCD显示内容 void SetLEDArray1(int nNumber) { int i,ShowNumber; ShowNumber=nNumber/2; if(ShowNumber>9) Delay(LCDDELAY); CTRLCDCR=0; Delay(LCDDELAY); CTRLCDCMDR=LCDCMDVERADDRESS; // 起始列=0 Delay(LCDDELAY); CTRLCDCR=0; Delay(LCDDELAY); for ( i=0;i<8;i++ ) { CTRLCDLCR=ledkey[ShowNumber][i]; Delay(LCDDELAY); CTRLCDCR=0; Delay(LCDDELAY); } } // 将缓存中点阵送发光二极管显示 ShowNumber=0; // 设置操作页=0 CTRLCDCMDR=LCDCMDPAGE;

4 系统测试 4.1 DSP 系统测试环境
可编程 DSP 芯片的开发需要一整套完整的软硬件开发工具。通常,DSP 芯片的开发 工具可以分为代码生成工具和代码调试工具。代码生成工具的作用是将 C 或汇编语言编 写的 DSP 程序编译汇编并链接成为可执行的 DSP 程序。代码调试工具的作用则是对 DSP 程序及系统进行调试,使之能达到设计目标。 (1) 代码生成工具 代码生成工具主要包括汇编器、C 编译器。此外还有一些辅助工具程序,如文件格 式转换程序、库生成和文档管理程序。源程序代码的编写可以通过使用 C 语言和汇编语
20

言来实现[10]。编写完毕后,使用代码生成工具进行编译、链接,最终形成机器代码。 (2) 代码调试工具 ① 源码调试器(Debugger)源码调试器是为嵌入式系统的开发而设计的,一般在 计算机或工件站上运行,是开发环境中主机与软件仿真器、软件评估模块或硬件仿真器 之间的标准接口,它与调试器一起配合使用,完成对程序的调试工作。程序可以在 C、 汇编或 C 与汇编混合环境下进行调试,调试器具有条件执行、单步执行、断点等功能, 并支持多个 DSP。 ② DSP 评估套件和标准评估模块(EVM)DSP 入门套件 DSK(DSP Starter Kit)是 为初学者设计和生产的 DSK,是一种用以评价 DSP 平台的廉价的开发工具。在 PC 机的 DOS 或 Windows 下,用户可以使用 DSK 来作 DSP 的实验,进行诸如控制系统、语音处理 等应用,也可以用来编写和运行实时源代码,并对其作评估,还可以用来调试用户自己 的系统 ③ 软件仿真器(Simulator)软件仿真器是一个软件程序,是一种脱离硬件的纯软 件仿真工具。其一般在 PC 机或工作站上运行。通过椹运行,可对程序进行调试和验证。 应用程序在软件仿真器上运行是非实时性的。在 PC 机上,典型的软件仿真速度是每秒 几百上万条指令。本论文采用的软件仿真器为型号为 ④ 硬件仿真器 硬件仿真器是一种在线仿真工具,它用 JTAG 接口电缆把 DSP 硬件 目标系统和装有仿真软件/仿真卡的 PC 接口板连接起来,用 PC 平台对实际硬件目标系 统进行调试,能真实地仿真程序在实际硬件环境下的功能。 集成开发环境 CCS(Code Composer Staudio)是 TI 公司推出的用于开发 DSP 芯片 的集成开发环境,它采用 Windows 风格界面,集编辑、编译、链接、软件仿真、硬件仿 真、硬件调试以及实时跟踪等功能于一体,极大地方便了 DSP 芯片的开发与设计,是目 前使用最为广泛的 DSP 开发软件之一。 (1) CCS 具有以下特点:
? ? ? ? ? ?

开放的、具有强大集成能力的开发环境。 由先进开发工具组成的直观的系统,可缩短编程时间。 高级的编码工具,可提供第三方工具接入的开放式结构。 开发人员可以采用特定的工具自定义环境,满足特殊的设计需要。 具有广泛的、可以升级的软件基础。 提供 DSP 应用所必须的基本的运行时间系统服务和集成化支持。

(2) CCS 的两种工作模式: ① 软件仿真器模式, 可以脱离 DSP 芯片, 在 PC 机上模拟 DSP 的指令集和工作机制, 主要用于前期算法的实现和调试 ② 硬件在线编程模式,可以在 DSP 芯片上实时运行,并与硬件开发板相结合进行
21

在线编程和调试应用程序[11] (3) 创建一个 CCS 工程的基本步骤:

1、双击

图标,进入 CCS 环境

2、打开 CCS 选择 project→New 3、在弹出的对话框中出击下图 Location 一行的按钮,选择工程合适的路径。注意: 路径中不要有中文

4、在弹出的对话框中,输入工程的名字 5、点击 Finish 添加工程完成 6、打开 CCS 选择 File→New→Source File 命令

点击保存,然后将此文件的后缀改为.c;汇编语言的后缀名为.asm 为.cmd。

CMD 文件的后缀名

7、点击

中的 Source 然后再点击 Add file to project
22

8、在 test.c 文件中输入 C 语言程序,然后保存编写的源文件。

9、同样的方法将 rts.lib 添加到工程中。 10、最后进行程序的编译和下载到开发板。

4.2

程序的调试
第一步,用编辑程序把编制的源程序按照一定的书写格式送到计算机中,编辑程序

会根据使用人员的意图对源程序进行增、删或修改。 第二步,把送入的源程序翻译成机器语言,即用编译程序对源程序进行语法检查并 将符合语法规则的源程序语句翻译成计算机能识别的“语言”。如果经编译程序检查, 发现有语法错误,那就必须用编辑程序来修改源程序中的语法错误,然后再编译,直至 没有语法错误为止 。 第三步,使用计算机中的连接程序,把翻译好的计算机语言程序连接起来,并扶植 成一个计算机能真正运行的程序。在连接过程中,一般不会出现连接错误,如果出现了 连接错误,说明源程序中存在子程序的调用混乱或参数传递错误等问题。这时又要用编 辑程序对源程序进行修改, 再进行编译和连接, 如此反复进行, 直至没有连接错误为止。 第四步,将修改后的程序进行试算,这时可以假设几个模拟数据去试运行,并把输 出结果与手工处理的正确结果相比较。 如有差异, 就表明计算机的程序存在有逻辑错误。 如果程序不大,可以用人工方法去模拟计算机对源程序的这几个数据进行修改处理;如 果程序比较大,人工模拟显然行不通,这时只能将计算机设置成单步执行的方式,一步 步跟踪程序的运行。一旦找到问题所在,仍然要用编辑程序来修改源程序,接着仍要编 译、连接和执行,直至无逻辑错误为止。也可以在完成后再进行编译。
[12]

4.3 系统测试结果
建立一个工程以后,我们将电脑与开发板相连接,通过运行程序会产生如下结果。 当我们编译好以后,把程度下载到开发板,此时发光二极管和液晶显示屏会发生一连串 的变化。首先系统会进行初始化,这个时候东西南北方向的灯均为红色,此时液晶屏上 也会显示倒计时。如图 4-2 所示。当系统初始化完成以后,系统会进入正常工作状态, 在图 4-3 中我们可以看到东西方向为黄灯, 南北方向为红灯, 液晶屏上显示倒计时为 0。 这时东西南北方向的车辆均不可以通行,黄灯闪烁三次以后东西变为红灯,而南北方向 变为黄灯此时倒计时为 0,表示东西南北方向均不通车,如图 4-4 所示。黄灯闪烁三次 以后,南北方向变为绿灯,而东西方向仍然为红灯,此时液晶屏显示倒计时为 8,如图 4-5 所示,这时南北方向可正常行车,而东西方向禁止车辆通行

23

图 4-2 系统初始化

图 4-3 东西南北方向均禁止通车

24

图 4-4 东西南北方向均禁止通车

图 4-5 南北方向通车东西方向禁止通车

25

5 总结
首先, 我要感谢指导老师, 因为在指导老师的热心帮助下, 我最终顺利实现了程序。 该论文介绍了该系统的主要模块和实现方法。论文在深入分析交通管理及交通信号控制 的背景下,探讨设计了本交通信号灯实时控制系统。其中交通信号灯的变化是通过 C 程 序来控制的基本上实现了智能管理,以达到实现疏导交通,提高交通效率,减少交通堵 塞现象的目的。当然本系统还可以做进一步扩充,比如应急处理,上下班车流高峰时的 管理等等, 。 通过本系统的设计,本人初步了解了设计系统的过程和方法,也进一步掌握了对 VC++6.0 的应用及对 DSP 结构和内部原理的理解。 在一次次的反复设计、 修改和测试中, 提高了逻辑分析能力、全面分析问题的能力以及发现问题、解决问题的能力。虽然设计 过程非常烦琐,但这也磨练了我的意志。并且通过对国内外各方面资料的收集、翻译, 我的知识面也进一步拓宽了,专业英文也有了提高。同时,我也发现了自己的不足,像 语言表达还比较差,不能更清楚表达自己的意思,逻辑分析能力虽有提高,但还不够, 编程能力还不足,有些预先的想法未能实现。当然发现问题也是好事,这将能使我在这 些方面以后多努力,加以改进。

26

参考文献
[1] 兰吉昌 .TMS320F2812DSP 应用实例精讲 [M]. 北京 : 化学工业出版社 .2010.2 [2] 张雄. DSP 芯片的原理与开发应用(第 3 版)[M]. 四川:电子工业出版社.2002.6.

[3] 张涛 、陈存彪 .DSP 实验教程[M] 西安:机械工业出版社.2005.9. [4] 谭浩强. C++程序设计[M].北京:高等教育出版社.2006.1. [5] 吴镇扬. 数字信号处理[M].北京:高等教育出版社.2004.9. [6] 严蔚敏. 数据结构[M].北京:清华大学出版社. 2007.6. [7] 郑君里.信号与系统(第二版)[M]. 北京:高等教育出版社.2000.5. [8] 江晓林 杨明极 .通信原理[M].黑龙江:哈尔滨工业大学出版社.2001.8. [9] 高西全、丁玉美.数字信号处理[M].西安:西安电子科技大学出版社.2001.7. [10] 奥本海姆.散时间信号处理 (第 2 版)/奥本海姆[M]. 北京:清华大学出版社. 2000.9. [11] 李辉.改进的离散余弦反变换迭代算法研究与音频 DSP 核设计[D].电子科技大学硕士论文, 2010. [12] 王洪君.H.264 运动估计快速算法研究及编码器 DSP 实现[D].天津大学博士论文,2009.

27


更多相关文章:

非常超级学习网 fccjxxw.com

copyright ©right 2010-2021。
非常超级学习网内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图