DSP principle and application by HC121005183842

VIEWS: 51 PAGES: 239

									数字信号处理器 DSP 原理及其应用

           维修技术培训资料




                 站长
              2005-9/2006




                        0
                        目录
第一章:DSP 及应用概论                 3
    DSP
第一节: 概论                        3
第二节:产品技术前沿动态                   7
    TI
第三节: 公司的 DSP 产品概述             12
第四节:运动控制技术                    15
第二章:DSP 控制器内核                 18
第一节: X24 系列 DSP 控制器概述         18
第二节:中央处理单元                    19
第三节:系统配置与中断任务                 27
第四节:存储器                       36
第三章:DSP 控制器的片上外设              45
第一节:片内锁相环(PLL)                45
第二节:数字 I/O 端口                 49
    A/D
第三节: 转换器                      50
第四节:看门狗/实时中断模块                55
第四章:事件管理器                     62
第一节:概述                        62
第二节:通用定时器                     66
第三节:比较单元                      80
第四节:事件管理器的中断                  96
第五章:指令系统及编程                  100
第一节:程序地址的产生                  100
第二节:程序跳转和子程序调用的执行            101
第三节:单指令的重复操作                 103
第四节:寻址方式                     103
第五节:汇编语言编程基础                 107
第六节:数据传送指令                   115
第七节:算术运算指令                   134
第八节:逻辑运算指令                   147
第九节:分支指令                     153
第六章:DSP 软件开发工具平台             162
第一节:开发工具与开发步骤                162

                               1
第二节:CCS 简介                                          163
第三节:CCS 安装与配置                                      164
第四节:汇编源文件与公共目标文件                                   167
第五节:基于 CCS 开发 DSP 软件                               171
第六节:调试应用程序                                         181
第七节:结语                                             183
第七章:课程相关的阅读资料                                      184
资料 1:TI 科学家谈浮点 DSP 未来发展                            184
资料 2:DSP 典型应用解决方案                                  187
资料 3:基于算法的 DSP 硬件结构分析                              194
资料 4:数字信号处理器的选择策略                                  197
资料 5:基于 DSP 混合编程关键问题的研究                            202
资料 6:DSP高手的经验介绍,编写基于 DSP 程序的注意事项(转)                208
资料 7:DSP 引领新潮流—纪念 DSP 发明 25 周年                     212
资料 8:ARM 简介                                        217
资料 9:数字讯号处理工作平台 : C2000 DSP                        223
资料 10:新推出的浮点 DSP                                   227
附录                                                 229
DSP 技术关联缩略语一览表                                     229
关于 X24X 引脚的描述                                      232
参考网站:
  1.http://www.ti.com.cn/。TI 公司中文网站。
  2.http://dsp.blueidea.com/product/asic/。DSP 专业资讯网。
  3.http://www.dspzixun.com/shouye.htm。DSP 技术资讯中心。
  4.http://www.61ic.com/Article/ti/c2000/List_4.html。中国
电子在线 C2000 文章专版。




                                                         2
第一章:DSP 及应用概论

要点:
1) 什么是 DSP?
2) DSP 的产生。
3) DSP 的结构特点。
4) DSP 的现状。
5) DSP 的应用。
6) DSP 的未来发展方向。


第一节:DSP 概论
一.什么是 DSP?
  DSP 也叫数字信号处理器,是一种专门设计用来进行数字信号处理的片上计算
机系统。
  微处理器的发展经历了单板计算机、单片计算机的历程,DSP 则是一种高性能
的片上微计算机系统。它除了利用大量的新技术、新结构来大幅度改善芯片性能外,
还把内存、接口、外设、事件管理器等集成在一个芯片上,成为一个功能强大的片
上系统(SOC)。
  DSP 的产生和发展,得益于数字信号处理理论及计算机、电子技术的飞速进步。
二.DSP 发展背景
  过去的 40 年内,数字信号理论及应用取得了极大的发展。
  基础理论:微积分、概率统计、复变函数、线性代数、泛函分析、随机过程、
数值分析等。
  新兴学科:人工智能、模式识别、神经网络、最优控制、模糊控制、故障理论
等都与数字信号处理密切相关。
  应用工程理论:网络理论、信号与系统、控制论、通讯理论、故障诊断。
  数字信号处理技术的高速发展推动了 DSP 的诞生和发展。目前,DSP 已经在数
字通讯、语音合成、图象处理、电动机及运动控制、测量及数字处理等领域取得了
广泛的应用,几乎涉及人类生产生活的各个领域。
  在 DSP 出现前,数字信号处理基本局限于算法研究和模拟方面,实时性一直无
法解决。随着 DSP 的出现,数字信号处理技术才真正走向普及和应用。
三.DSP 发展概况
  1978 年 AMI 公司发布了世界第一个 DSP 芯片——S2811。


                                         3
  1979 年美国 INTEL 公司发布第二个 DSP 芯片——2920。
  这两种 DSP 的缺点是,没有内置片内单周期乘法器,从而极大地限制了处理速
度的提高。
  1980 年,日本 NEC 公司推出具有硬件乘法器的 DSP 芯片——uPD7720。
  1981 年,美国贝尔实验室推出具有硬件乘法器的 DSP 芯片 DSPI。
  1982 年,美国 TI 公司的 DSP:TMS320C10,成为具有现代意义的 DSP,它以低
廉的成本、应用简单及功能强大等特点,而取得了巨大成功。随后又陆续推出了一
系列产品,使得该公司产品目前占据市场 50%。
  此外,AD、MOTOROLA、AT&T 等公司相继推出了自己的产品,但始终不能取代 TI 公
司产品的地位。
  目前,TI 公司的通用产品主要为四大系列:
  TMS320C2000 系列:面向数字控制和运动控制(控制)。控制最佳。
  TMS320C5000 系列:面向低功耗的手持通讯设备、无线终端等(个人)。节能
最佳。
  TMS320C6000 系列:面向高性能、多功能、复杂应用领域(宽带)。性能最佳。
  OMAP 系列:更高端应用,OMAP 集成了 ARM 的有关技术。
  实际上,TI 曾经推出 C1000-C8000 各个系列产品,最后逐步收敛到如上几个
系列,并形成规模和市场。
  有关公司:目前已经有几十家公司推出自己的超过 DSP,比较有影响的,除 TI
公司外,还有 MOTOROLA、AD(美国模拟器件)公司等,品种超过百种以上。
四.DSP 的结构改进




  由于 DSP 是专门面向复杂的大量数据处理过程开发的,因此,在结构和控制原
理上采取了许多的措施,来提高其性能。
  1.哈佛结构或改进的哈佛结构
  老式的冯-诺曼结构程序和数据使用同一存储空间,读指令和数据分时进行。
  DSP 芯片采用了哈佛结构,它分别设置程序存储和数据存储空间,使用专用
的程序总线和地址总线。CPU 可以同时访问程序和数据,大大提高了处理速度。


                                                 4
  所谓的改进哈佛结构,体现在如下几点:
  1)允许数据存放在程序存储器中,并可以被算术指令直接使用。但程序和数
据不能同时读取,多数访问存储器的指令需要两个执行周期。
  2)将指令存储在高速缓存中,无须从数据/程序存储器读取,可以节约一个指
令周期。
  3)改进存储器块结构,允许在一个周期内同时读取一条指令和两个操作数。
  2.多总线结构
  使用两类(程序总线、数据总线)六组总线。包括程序地址总线、程序读总线、
数据写地址总线、数据读地址总线、数据写总线、数据读总线。配合哈佛机构,大
大提高了系统速度。
  3.指令执行的流水线作业
  指令执行过程:取指——译码——取操作数——执行。
  DSP 采取流水线作业方式,同时可以执行四条命令,比传统执行速度提高了
四倍。其过程如下图:
  1st 指令——取指——译码——取操作数——执行——
  2nd 指令——译码——取操作数——执行——取指——
  3rd 指令——取操作数——执行——取指——译码——
  4th 指令——执行——取指——译码——取操作数——
  图 1-1:流水线示意图
  4.专用硬件乘法器
  CPU 最多的运算是加法和乘法运算。传统的乘法运算要通过软件实现,从而
极大地影响运行速度。DSP 设置了 1 个或多个内部硬件乘法器,从而提高了系统
的运算速度。
  5.多个功能单元
  DSP 内部设置了多个可以并行操作的功能功能单元——算术逻辑单元、乘法
器、地址产生器、输入定标单元等,可以同步协调操作。
  6.专用寻址单元
  传统的计算机系统随着程序的复杂化,访问时伴随的地址运算也越来越消耗系
    如
统速度。 8086 地址计算要占用 5-12 个周期。DSP 设置了专用的单周期操作的多
个地址产生器,可以和算术逻辑单元等同步工作,不额外占用 CPU 的时间。
  7.片内存储器
  DSP 设置了片内程序存储器、数据存储器、I/O 存储器等,越来越缓解外部存
储器访问的瓶颈现象。
  8.特殊指令集


                                           5
   针对 DSP 的特殊应用,设计了一系列特殊指令,以充分发挥 DSP 算法及特殊
功能。
   9.快速指令周期
   由于大量的硬件改进及特殊指令系统,其指令周期大大缩短,普通产品执行周
              如
期已经达到 50ns 以下。 C54X 为 10ns,C67X 系列为 5ns;最快的可以达到 1GHz,
周期 1ns。
   10.强大的片内硬件配置
   随着 DSP 的发展,DSP 逐步集成了串行口、主机接口(HPI)、事件管理模
块、DMA 控制器、CAN 总线控制模块、软件等待状态发生器、锁相环、A/D 模块、
测试仿真口等。
五.DSP 性能指标及选择
   适当了解 DSP 的性能指标,对 DSP 的选择是有用的。
(一)运算速度指标
   1.MIPS:百万指令/秒。手册提供的一般是峰值,设计时要考虑余量。
   2.指令周期:执行一条指令的时间。
   3.MOPS:百万次操作/秒。这是对器件综合性能的描述,这些操作包括:地
址计算、DMA 访问、数据传输、I/O 操作等。
   4.MFLOPS:百万次浮点操作/秒。如浮点加、减、乘、存储等操作。这是浮
点 DSP 的重要指标。手册提供的一般是峰值,设计时要考虑余量。
   5.MAC 时间:执行一次乘法和加法运算的时间,大多数 DSP 芯片可以在一
个周期内完成。
   6.FFT/FIR 执行时间:运行 N 点 FFT(快速傅立叶变换)或 N 点 FIR(有限
脉冲响应)运算的时间。
   7.衡量端口传输速度的指标:Mb/s。
(二)运算精度
   DSP 有定点和浮点两种。定点芯片有 16、24、32 位等,浮点芯片字长为 32
位或 64 位,最近,还产生了 128 位器件。
   一般来讲,浮点器件运算精度比定点器件高。但由于价格的差异比较大,选择
多大精度,要看实际需要决定。
(三)片内硬件资源
   这里包括片内 RAM、ROM 数量,是否带有外部存储器扩展接口,总线接口、
中断、串口等资源是否够用,外部事件管理器资源需求等。
(四)功耗




                                                   6
   根据产品需求,这是一个必须考虑的问题。比如移动通讯设备,就需要选用功
耗低的 C5000 系列产品。
(五)价格
   当产品形成大批量并商品化时,价格就成为非常关键的选择要素。
(六)其他
   包括开发调试工具、封装、品质等指标。
六.应用领域:
   1)通讯;2)家用设备;3)音像与多媒体;4)网络;5)工业;6)医疗;7)
汽车;8)控制;9)仪器仪表;10)其它。
   参见 P10-11 表 1.1。


第二节:产品技术前沿动态
一.制造工艺
   性能指标是永远的追求,着眼于半导体技术的发展趋势,采用先进工艺和高集
成度是 DSP 的必由之路。
   2004 年 11 月,TI 宣布开始量产第一批采用 90 纳米工艺的 1GHz DSP,再度为
业界写下 DSP 性能的新标准,其采用 90 纳米工艺生产的 C6414T、C6415T 及 C6416T
DSP 已在超过 70 家客户的产品中得到大量应用。目前批量生产的 DSP 芯片的主流
工艺已到 0.13 微米,而采用 90 纳米工艺的 DSP 已投入批量生产。65 纳米工艺的
DSP 正在开发中。对于中国目前的工艺水平,2005 年 10 月宣布,0.13 微米芯片生
产已经开始形成能力。
二.运算精度与浮点器件
   最近的产品水平,主流芯片精度已经达到 64 位,并开发出了 128 位,256 字
长运算的 DSP。
   高性能浮点芯片也不断发展,以 TI 公司为例,日前针对高质音频应用推出三
款浮点 DSP 器件——TMS320C6722、TMS320C6726 与 TMS320C6727,进一步降
低了高品质音频产品的开发成本。基于 C67x DSP 的新内核具有高效 C 语言效率,
其 VLIW 架构显著提高应用性能。这三款 DSP 的性价比高达每美元 130 MFLOPS,
使音频工程师能够在各种音频应用中集成 DSP 处理性能,这些应用包括广播、会
议、乐器和专业音响。除此之外,C672x 器件还适合支持众多采用浮点技术的其他
应用,其中包括生物辨识、医学与工业应用等。
   C672x 器件的样片即将上市,并计划将于 2005 年第四季度投入量产。
三.片内配置




                                                     7
   DSP 芯片不断改进内部结构,如采用哈佛结构、多总线、流水线、完善的接口、
事件管理器,较多数量的寄存器等,使得其功能大大增强。
   另一方面,制造工艺不断进步的结果,使得 DSP 已经不再是单一的处理部件,
而是集成了更多的功能单元、外围设备甚至多个微处理器。引脚数也不断增加(200
个以上),功耗不断降低。
四.运算速度
             DSP       如
   随着制造工艺的发展, 运行速度越来越高。 CPU 时钟速度:最高的 C641xT
为 1GHz,C54X 为 100MHz,C54XTM 为 160MHz,C55X、C672X 为 300MHz。
   指令执行速度方面,采用精简指令集计算机 RISC 技术,使得绝大多数指令能
够在单周期内完成。如 X28X 为 100-150MIPS,我们讲的 X24X 为 20-40MIPS。
五.专用 DSP 芯片
   针对产品应用方向,大量专用 DSP 器件被开发出来,如用于 MPEG4、MP3、视
频、手机、数码相机、运动控制等的专用 DSP。
   如果达到一定的使用量,TI 公司还承制专门定制的 DSP 芯片。
六.SOC 片上系统
   片上系统的英文名是:System On Chips。它采用内嵌技术,除 DSP 内核外,
还把更多的外围功能控制环节甚至多 CPU 集成到单一芯片上,形成存在于一个独立
芯片上的“系统”。这一技术类似于 ARM 公司提出的系统框架结构 ARM 芯片。
   目前,SOC 技术已经取得越来越广泛的应用。
七.开发工具
   随着 DSP 的发展,开发工具也不断获得改进。在许多开发工具中,最流行的是
CCS。而 CCS 是由 GO DSP 公司开发的,最初面向 C6000 系列。后来 TI 公司收购了
GO DSP 公司,并将 CCS 扩展为面向所有系列。
   德州仪器 (TI) 日前宣布推出 Code Composer Studio™ 集成开发环境 (IDE)
白金版,使 DSP 软件开发工具备更多优异特性以及更高的稳健性。复杂系统常常
以多个 DSP 处理器和平台为基础,以实现所需的性能水平。过去,采用多个 DSP
平台的开发人员通常必须在设计中使用多种工具集。TI 新型的 CCStudio 白金版
提供了可支持所有 TI 平台(包括 TMS320C6000™ DSP、TMS320C5000™ DSP、
TMS320C2000™ DSP 以及 OMAP™ 平台)的全面集成型 IDE,从而显著简化了
设计工作。
八.最新 C2000 DSP 器件
   两颗新的高精确度的控制数字信号处理器(DSPs)将发展时间由数小时减少至
数分钟,而且其效能是目前任何现有的可程序设计的数字信号处理器(DSPs)之效能
的 12 倍以上。


                                                            8
  TMS320F2810 及 TMS320F2812 DSPs 是工业界首批 32 位的控制专用、内含
flash 内存以及高达 150MIPS 的 DSPs。他们乃是专为工业自动化、光学网络及自动
化控制等等用途而设计的.C28x 的核心是世界上在数字控制应用方面最高性能的
DSPs 核心。C28x 的核心提供高达 400 MIPS 的计算频宽以致能够实时地处理许多复
杂的控制算法。例如:无感测速度控制、随机的 PWM、功率因子改善等等。C28 同
时亦是世界上程序代码最有效率的 DSPs,且 C28x 的程序代码与目前所有的 C2000
DSPs 的程序代码是兼容的。




  图 1-2:C2000 系列当前产品发展策略图
  参考 C5000、C6000 平台发展策略——




  图 1-3:C5000 系列当前产品发展策略图


                                                       9
  图 1-4:C6000 系列当前产品发展策略图
九.中国 DSP 发展前沿状态
(一)上海交大的“汉芯”器件
  上海交大汉芯半导体科技有限公司,成立于 2002 年 12 月 26 日。公司旨在紧
密依靠上海交通大学的研究优势,凭借上海优越的 IC 设计和生产环境,建设一支
高素质的芯片设计队伍,为交大乃至国内高校的集成电路研究及科研成果的产业化
探索一条新路。公司以汉芯研发和产业化发展为目标,成立仅一年时间,就已获得
多个国家科技部及上海市 50 个重大科研项目。同时,公司还获得了上海市高新技
术企业、上海市集成电路企业等多项荣誉;企业价值得到上百倍的增长,实现了跨
越式发展。
  作为首个完全由国内设计、生产、封装和测试,0.18 微米设计的高端 DSP 芯
片,“汉芯一号”项目达到国际先进水平,是中国芯片发展史上重要的里程碑。
  “汉芯二号、三号”高性能 DSP 芯片作为汉芯家族的新成员,在性能和开发支
持等方面又有了较大的发展。“汉芯二号”是采用 0.18 微米半导体工艺设计的 24 位
高性能 DSP 的 IP 内核,具有每秒 1.5 亿次指令的运算速度和 150MHz 的时钟主
频。十五国家 863 计划的重点项目——“汉芯三号”32 位 DSP 芯片,在 10 月中旬
流片成功后,已一次性的通过上海集成电路研究中心的测试:工作频率达到
300MHz,超过 863 计划预定的 200MHz,每秒可处理指令 6 亿次以上;平均低功
耗指标 0.3mW/MHz,也低于 863 预定的标准。高速、低功耗的“汉芯三号”已经达
到国际高端的 DSP 设计水平。“汉芯二号、三号”,是继“汉芯一号”后,我国在 DSP
核心芯片技术领域又一次重大突破。




                                              10
  中国已成为世界上最大的 DSP 应用市场,而且每年都还在高速增长,但目前
国内 DSP 芯片几乎全部依赖进口。据权威估计:2005 年我国 DSP 的需求量将达
30 亿美元,“汉芯”系列芯片可以逐步替代目前应用的国外主流芯片:TI 的
TMS320c54x 系列,ADI 的 ADSP21xx 等等。“汉芯三号”目前已申请“寄存器预读
写优化硬件栈”等六项专利,可以应用的领域包括图像处理、音频压缩解码、数据
通信、雷达系统、数码产品、指纹识别系统、图象识别及网络应用。在不久的将来,
“汉芯”还会推出国内领先的“汉芯四号”(128 位)以及“汉芯五号”(DSP+CPU 双
核结构的终端 SOC 芯片),以满足更高功能的市场要求。
  汉芯系列芯片的诞生,改写了国内缺乏高端 DSP 芯片的历史,预示着我国在
DSP 核心技术领域登上国际竞争舞台。“汉芯”与国外同类产品相比在性价比上优势
明显,具备良好的竞争力和市场前景,可广泛的应用于国防、科研以及经济生活;
“汉芯”核心技术的自主知识产权,对于国家安全和稳定、国民经济的发展具有深远
的意义。
(二)中科院计算机研究所的“龙芯”器件
  0.13 微米的“龙芯 2 号”于 2005 年 10 月推出。龙芯 2 号的一个突出特点是
采用了自主设计的多媒体指令结构,两条 64 位浮点流水线可以同时执行 16 个 8
位多媒体操作,流媒体处理能力很强。在 863 计划的支持下,计算所正在研制增强
型的龙芯 2 号 CPU(龙芯 2-D 和龙芯 2-E),到 2006 年初,争取达到 1G Hz 的主频,
可用于低档服务器,满足桌面应用的要求。“十一五”计划期间,中科院计算所将
研制多核的龙芯 3 号,可用来研制生产高性能的计算机和服务器,进一步缩小与国
外先进水平的差距。
十.世界 DSP 市场情况
  DSP 的市场应用,基本呈现逐年递增的趋势。到 2004 年,销售已经超过 950
万片。2005 年预计销售额将突破 95 亿美圆。
  世界开发生产 DSP 的厂商约有一二十家,较大的有 TI、Agere、ADI、Motorola、
ST、Philips、富士通、松下、日立、三星等。
  TI 公司独占世界 DSP 市场半壁江山,是业界无可争议的先驱和龙头企业,事
实上的拓荒者,没有 TI 就没有今天的 DSP 事业。1982 年 TI 率先上市世界首款商
用 DSP-TMS 32010,此后年年革新不断,直到今年两创记录,继推出 720MHz DSP
不久,接着又推出 1GHz DSP,被载入吉尼斯世界记录(见附表)。1GHzDSP 虽然采
用 130nm 工艺开发,但生产将采用 90nm、铜布线等更先进的工艺。它适于人工视
觉、智能汽车、无线媒体中心等新应用。




                                                    11
第三节:TI 公司的 DSP 产品概述
一.分类方法
(一)TI 公司主推的四大系列 DSP
      1)C2000 系列(定点、控制器):C20X、F20X、F24X、F24XX 、C28x,
             如:
该系芯片具有大量外设资源, A/D、定时器、各种串口       ,
                          (同步和异步) WATCHDOG、
CAN 总线/PWM 发生器、数字 IO 脚等。是针对控制应用最佳化的 DSP,在 TI 所有的
DSP 中,只有 C2000 有 FLASH,也只有该系列有异步串口可以和 PC 的 UART 相连。
处理速度为 20-150MHz。
   2)C5000 系列(定点、低功耗):C54X、C54XX、C55X ,相比其它系列的主
要特点是低功耗,所以最适合个人与便携式上网以及无线通信应用,如手机、PDA、
GPS 等应用。处理速度在 80MIPS--400MIPS 之间。C54XX 和 C55XX 一般只具有 McBSP
同步串口、HPI 并行接口、定时器、DMA 等外设。值得注意的是 C55XX 提供了 EMIF
外部存储器扩展接口,可以直接使用 SDRAM,而 C54XX 则不能直接使用。两个系列
的数字 IO 都只有两条。
   3)C6000 系列:C62XX、C67XX、C64X。该系列以高性能著称,最适合宽带网
络和数字影像应用。速度最高达到 1GHz。其中:C62XX 和 C64X 是定点系列,C67XX
是浮点系列。该系列提供 EMIF 扩展存储器接口。该系列只提供 BGA 封装,只能制
作多层 PCB。且功耗较大。同为浮点系列的 C3X 中的 VC33 现在虽非主流产品,但
也仍在广泛使用,但其速度较低,最高在 150MIPS。
   4)OMAP 系列:OMAP 处理器集成 ARM 的命令及控制功能,另外还提供 DSP 的
低功耗实时信号处理能力,最适合移动上网设备和多媒体家电。
   其他系列的 DSP 曾经有过风光,但现在都非 TI 主推产品了,除了 C3X 浮点系
列外,其他基本处于淘汰阶段。
(二)定点和浮点
   根据是否能处理浮点运算,器件又分为定点和浮点两种。
   定点芯片只能进行小数点位置固定的数学运算,精度低,但价格低廉,执行速
度快。一般 C2000、C5000、C62X、C64X 系列都是定点芯片。
   浮点芯片可以进行小数点位置变动的数学运算,精度高,但价格较高,执行速
度慢。一般 C3X、C4X、C67X、C8X 系列都是浮点芯片。
   定点芯片在一般应用场合使用比较广泛,浮点芯片则用于高性能、精度要求高
的场合,如音频、视频处理等。
(三)通用和专用
   前面所说的芯片都是通用芯片。专用芯片是为特殊使用需求设计的,如特殊运
算、数字滤波、卷积、FFT 等。如 Motorola 公司的 DSP56200。


                                                        12
二.TI 公司常用产品概况
          TI
   1982 年, 公司开发了第一个可编程的 DSP 芯片 TMS320C10,此后的 25 年内,
技术日益发展,陆续开发了多个系列不同特点的 DSP 芯片。目前,其产品占据 DSP
市场的 50%左右。
   TI 产品拥有 C1X、C2X、C20X、C24X、C24XX、C28X、C3X、C4X、C5X、C54X、
C55X、C62X、C64X、C67X、C8X 等。其中 C3X、C4X、C67X 是浮点芯片,C8X 是多处
理器芯片,其它则都是定点处理器芯片。
   目前 TI 产品开始向 C2000、C5000、C6000 及 OMAP 平台收敛,其它产品逐步被
淘汰。下面介绍的是目前仍然在使用中的产品。
(一)TMS320C3X 系列
   1.TI 公司的第一代浮点芯片。
   2.典型指令周期:40ns。
   3.32 位 CPU。
   4.2KX32 位片上 DARAM。
   5.4KX32 位片上 DAROM。
   6.可寻址存储器空间 16MX32 位。
   7.64KX32 位 Cache。
   8.208 引脚。
   9.硬件乘法器、DMA、串行口、地址产生器等片上资源。
   10.113 条汇编指令。
   等等。
(二)TMS320C28X 系列
   这是 TI 公司开发的面向高性能、高精度工业控制领域、光网络、光通讯的 32
位定点 DSP。
   目前包括:C2810、C/R2811、C/R2812,F2801/2806/2808/2810/2811/2812。
   具体性能数据见 P18。
(三)TMS320C54X 系列
   这是一款高性能、低功耗的产品,适用于通讯、语音处理等的需求,在无线电
通讯及便携设备领域得到广泛应用。
   其 CPU 为 40 位,具体性能数据见 P18。
(四)TMS320C55X 系列
   这是在 C54X 基础上发展起来的 40 位,240 引脚的 DSP,与 C54 兼容。其功耗
更低,性能更好,速度更快。时钟可达 200MHz。
   具体性能数据见 P19。


                                                           13
(五)TMS320C62X 系列
   这曾是 TI 公司目前最快,处理能力最强的高端定点 DSP 系列。时钟可达
200MHz,处理速度最大 2000MIPS。如 C6201,引脚数达 352 个,速度 1600MIPS,
寻址空间 4G。共有 8 条流水线并行操作。
   具体性能数据见 P20。
(六)TMS320C64X 系列
   这个系列的定点 DSP,其主频达到 1.1G,处理能力为 9000MIPS,性能比 C62X
有极大的提高。
   具体性能数据见 P21、22。C6411 的引脚达到 532 个。
(七)TMS320C67X 系列
   这是 C6000 的浮点产品。是目前速度最快,处理能力最强的浮点器件。最新公
布的产品为 6726/6727/6722。
   如 C6701,引脚数达 352 个,频率 167MHZ,速度 1336MIPS/1GFLOPS。共有 8
条流水线并行操作。
   具体性能数据见 P21。
(八)TMS320C8X 系列
   这是世界上最早的 64 位浮点 DSP 芯片,是一种多 CPU 的 DSP。如 C80 有 5 个
处理器,包括一个 RISC 主处理器、四个浮点 DSP;处理速度高达 20 亿次操作/秒,
端口速度 400Mb/s。特别适用于图象处理、2D/3D 成像、音频/视频处理、会议电视、
多媒体等需要超量数据处理的高端应用。
   具体性能数据见 P23。
三、TMS320X24X 系列
   这是 TI 公司推出的面向数字控制系统,特别是运动控制系统的 16 位 DSP。其
主频范围 20-40MHz。
   该系列具体内容后续章节将详细介绍,此处略。




                                                       14
第四节:运动控制技术
  本节对运动控制的基本概念和方法做一般性介绍。
一.运动控制的概念
  这里的所谓运动控制,就是指控制机械运动的一般方法。对自动控制领域,一
般是对指电机运动的控制。
二.运动控制的具体研究方向
  根据电机产品的发展,共产生了直流电机、步进电机、交流异步电机、同步电
机、无刷直流电机、支流伺服电机、交流伺服电机、直线电机等,由于电机的不同,
控制方法也有明显的差异。
  按照传统的控制方法,对电动机的控制大致分为:
  1.简单控制:常规的继电器系统,只控制启动、停止、制动、旋转方向。普
通设备上的主轴、刀具进给、起重等多数是这类控制。
  2.复杂控制:除了以上控制,还需要对电机的速度、转角、电压、电流、转
矩、功率等进行控制。这类控制一般用于位置随动系统、速度随动系统等。
  因此,要实现对电机的控制,就要根据控制目标的特性不同,研究控制结构方
法、控制算法、目标输出特性等基本方向,以求构成一个适合的系统。
  对电机控制的应用成为自动化控制系统中最典型的应用。
三.运动控制技术的发展
  1.控制理论的发展
  运动控制集合了控制技术、计算机技术、数字信号处理技术、微电子技术、电
力电子技术、检测技术、材料技术等一系列学科,最近几十年,这些学科取得了突
飞猛进的发展,从而带动了运动控制理论和产品的高速发展。
  这些学科的发展,使得数字控制朝数字化、智能化、精确化、大功率、小型化
等方向不断进步。
  2.应用的发展
  目前,其应用涉及工业控制的数控设备、加工中心、机器人、变频器、软启动
器、电机保护器、自动扳手,军事应用的雷达、火炮瞄准、导航、卫星姿态及计算
机外部设备的打印机、复印机、绘图机、扫描仪、传真机,民用领域的电梯、数码
相机、音像设备等生产、生活、军事等广泛领域。
  3.模拟控制与数字控制
  早期的复杂控制全部都是模拟控制系统,这种控制系统电路相对复杂,对环境
的要求比较苛刻,稳定性差。




                                    15
  随着计算机技术、数字信号处理技术的发展,运动控制系统逐步朝着数字化的
方向演化。DSP 也在这一过程中逐步获得应用,并开始普及。2000 系列就是朝着这
一方向开发的重要 DSP 产品。
  4.控制器件的发展
  运动控制系统经历了模拟器件、数字器件、小型计算机、单板计算机、单片计
算机、DSP、ARM 等一系列发展过程,核心控制器件的发展,极大地推动了运动控
制系统性能的不断提升。
四.运动控制系统
  运动控制系统,以位置随动系统为例,一般都有这样三套反馈:位置环、速度

环、电流环。这三个反馈环路构成一个稳定的位置控制系统。

(一).三环系统的控制框图
  下面给出了典型的三环系统框图。
                          电流环
                                 电流反
                                 馈电路

         速度给
  数字控制    定         速度           电流    驱动
                                                 M
   系统              调节器          调节器    控制
                                       电路
位置环
            速度环
                         速度反馈
  转换电路
                          电路

  图 1-5:三环系统框图
  图中,转换电路的作用是把速度信号转换为位移信号。
(二).三个环的各自作用
  1.位置精度的实现——位置环
  处于反馈环路的最外圈,由位置测量器件把测到的实际位置反馈到数控系统,
与给定的位置指令进行比较,以实现精确位置跟踪控制。
  2.速度波动的控制——速度环
  处于三个环路的中间,其任务是测量电机的实际速度,与数控系统的速度给
定进行比较,以实现对给定速度的跟踪,达到对速度的精确平滑控制。
  3.负荷变化的适应——电流环
  电流环是三个环的内环,其作用是通过测量电机的电流变化来间接得到实际加
工负载的波动状况,再与电流环给定量进行比较,从而通过调节控制抑制它给速度

                                            16
造成的可能扰动。
(三)典型的数控机床控制系统
  典型的数控机床控制系统如下图所示:
    (键盘、手轮等)



     操作设备         PLC 系统     机床现场




 显示器       数控系统       驱动电路      伺服电机    工作台



                                       或

                     反馈电路       反馈器件



  图 1-6:数控机床的控制结构图
  其中,数控系统、驱动电路的核心控制部分、反馈信号的处理等完全可以由
DSP 来实现。




                                           17
第二章:DSP 控制器内核

第一节: X24 系列 DSP 控制器概述
   这是 TI 公司推出的面向数字控制系统,特别是运动控制系统的 16 位 DSP。
一、器件概述
   2000 系列流行产品为 X28X(如 F2812 为 32 位定点,150MHz)。
   我们所讲的 X24X(16 位定点,20-40MHz)系列是目前还在使用的 2000 系列最
低端产品,专门为运动控制设计的 16 位定点芯片。它集成了一个 DSP 核及大量外
设、事件管理器等,并可以扩展外部存储器,成为一个功能完整的控制器件。
   该系列也曾经有面向消费、工业系统、高性能/高精度三个发展方向,但按 TI
公司的战略,X24X 将逐步朝 X28X 系列发展。
   该系列又分为:
   1.不带 FLASH 存储器的 TMS320C24X,如 C249/C242。
   2.带 FLASH 存储器的 TMS320F24X,如 F240/F241/F243。
   3.低功耗的 TMS320LX24XX,如 LC2402/2404/2406、LF2402/2406/2407。
   4.代码可加密的 TMS320LX240XA,如 LC2402A/2404A/2406A、
LF2401A/2402A/2403A/240A/2407A。
二、基本特点
   X24X 系列 DSP 的特点为:
   1.内部器件:32 位 ALU、32 位累加器,16 位 X16 位并行乘法器、32 位乘法
结果寄存器,三个定标移位器、8 个辅助寄存器。
   2.存储器:544 字 DRAM、16K 程序 ROM 或 FLASHROM,最大寻址 224K 字。部分
器件带有软件等待状态产生器及外部存储器接口 EMI,根据型号不同,可以接不同
大小的外部存储器。
   3.4 级流水线,8 级硬件堆栈,6 个外部中断。
   4.采用静态 CMOS 工艺,4 种低功耗操作模式。
   5.单指令周期小于 50nS,主频 20-40MHz,绝大多数指令可以在单周期内完成。
   6.片上集成事件管理器、ADC、28 个可编程 I/O 引脚、锁相环时钟发生器、
看门狗、串行通讯接口、串行外设接口等。
三、器件管脚
   该器件有多种封装形式,具体管脚不同封装有所不同。下图是 C240/F240 的管
脚图,它共有 8 中不同的封装。图中封装有 132 个管脚。
   后面附录中列出了本书介绍到的 X24X 系列 DSP 常用管脚的一览表,但序号不
代表引脚编号。


                                                              18
 图 2-1:TMS320C240/F240 管脚图


第二节:中央处理单元
一.内部结构框图
 X24X 系列 DSP 内部结构参见示意图 2.2。
 x24x 器件内部分为如下几部分:
 1.DSP 核:包括系统模块(程序控制器、时钟模块、系统接口模块等)、CPU、
   片内存储器、多总线系统等。
 2.用于外部存储器扩展、访问的外部存储器接口 EMI、软件等待状态发生器等。
 3.片上外设总线及外设,含锁相环、A/D、串行通讯接口、串行外设接口、看
   门狗/实时中断、数字 I/O、CAN 接口等。
 4.事件管理器,包括定时器、捕获单元、正交脉冲电路、比较单元等。
 5.其它:如 JTAG 测试/仿真接口。
 不同 X24X 器件,基本区别在外设(如 A/D、PWM 通道、外设功能模块)及存储
器配置的不同,速度、性能不同,其它是相同的。


                                          19
    图 2-2:X24X 系列 DSP 内部结构框图
  结构特点上,它体现了一般 DSP 的优点:
  1.利用深亚微米 CMOS 工艺制造,功耗极低。
  2.利用改进的哈佛结构,使用独立的总线来访问程序和数据存储空间。
  3.通过片上外设总线和外设接口,实现对大量片上外设的支持,及对外部存
储空间及外部 I/O 空间的访问。
  4.采用四级流水线提高处理速度。




                                     20
  5.CPU 内核设置了大量特殊功能单元,如硬件乘法器、32 位累加器、辅助寄
存器组等,进一步提高了系统的实时处理能力。
二.内部总线结构
(一)程序、数据总线
  如图 2-3,系统包括 6 组独立的 16 位并行程序和数据总线。




  图 2-3:X24X 地址总线结构
  它们是:
  1.PAB:程序地址总线。
  2.PRDB:程序读总线。
  3.DRAB:数据读地址总线。
  4.DRDB:数据读总线。
  5.DWAB:数据写地址总线。
  6.DWEB:数据写总线。
               CPU
  由于使用了独立的总线系统, 可以在同一周期内对数据存储器同时进行读
写访问。
(二)外设总线
  芯片内部有独立的外设总线,便于大量外设在支持。它通过系统接口模块和内
部数据总线进行接口,使得挂在该总线上的片内外设(CAN 接口、看门狗定时器、
串行外设接口、串行通讯接口等)的内部寄存器可以映射到内部数据存储空间。这
样,所以访问内部数据存储空间的指令都可以实现对外设寄存器的操作。
三.流水线操作
  XF24X 采用四级流水线作业技术。
  指令执行过程分为四个独立的阶段:


                                       21
  1)取指令 P。2)指令译码 T。3)取操作数 D。4)指令执行 E。
  XF24X 同时激活 1-4 条指令。四级流水线的每一级可以在同一节拍内分别执行
四条指令的各个阶段,这样,就大大增加了系统的执行速度。




  图 2-4:四级流水作业示意图
  CPU 的操作采用两相(节拍)静态逻辑实现,分别包括主相和从相。主相实现
所有的计算逻辑,在从相中锁存结果。
四.CPU 的组成
  CPU 由输入定标单元、中央算术逻辑单元、乘积单元、辅助寄存器算术单元、
状态寄存器、配置寄存器等组成。




  图 2-5:CPU 输入定标单元、中央算术逻辑单元、乘积单元逻辑框图


                                         22
  上图是 CPU 输入定标单元、中央算术逻辑单元、乘积单元的逻辑关系框图。
(一)输入定标单元
                      该单元为 32 位。它接受来自程序读总线和
                    数据读总线的两个 16 位数值,进行调整,然后
                    送到中央算术逻辑单元。
                      它由多路选择器 MUX、输入移位器构成。
                      多路选择器把两组数据进行分时选择,输
                    入移位器进行数据移位。
                      具体移位按照指令要求或临时寄存器 TREG
                    的低四位要求进行。移位后,低位填 0,未用
                    到的高位填 0 或进行符号扩展。
                      是否进行扩展,由状态寄存器的 BIT10
                    (SXM)控制。SXM=0 时不进行符号扩展,SXM=1
                    时,进行符号扩展。
                      移位器的输出被送到算术逻辑单元。
  图 2-6:输入定标单元结构图
  输入移位定标是 X24X 的指令集操作所需要的,具体实例后续课程将进行介绍。
(二)乘积单元
DRDB                    它包括:
                           1.16 位临时寄存器(TREG)——
 PRDB
                        用于保存一个乘数。
                           2.16X16 位硬件乘法器——执行
                        乘法运算。
                           3.32 位的乘积寄存器(PREG)
                        ——存储运算结果。
                           4.乘积定标移位器——在乘积送
                        CALU 之前,对乘法运算的结果进行移
                        位操作。
                           5.多路选择器——用于选择来自
                        数据存储器或程序存储器的第二乘数。




  图 2-7:乘积单元结构图
  两个 16 位乘数分别来自如下两个途径并应具备补码格式:


                                                23
  1.TREG 先从数据读总线读到的数据作为乘数之一。
  2.当前数据读总线或程序读总线的数据。
  器件支持 4 种移位方式,无移位、左移一位、左移四位、右移六位。移位时,
PREG 的乘积值保持不变。
(三)中央算术逻辑单元
                   来自输入移位器 来自乘积移位器




                       去数据写总线 DWEB
  图 2-8:中央算术逻辑单元结构图
  该单元包括:
  1.32 位多路选择器(MUX)——从输入移位器或乘积移位器中,选择其一送
    CALU。
  2.32 位中央算术逻辑单元(CALU)——对累加器和 MUX 的输出进行算术逻辑
    等运算。如 16 位加、16 位减、布尔逻辑运算、位测试、移位、旋转等。
  3.32 位累加器(ACC)——对来自 CALU 的数据进行移位操作。
  4.32 位输出移位器——对 ACC 输出的高位字或低位字的拷贝进行移位。
  其输出最终将通过数据写总线送到数据存储器。
  同样,其硬件结构也是和指令集的设计紧密关联的。
  状态寄存器的如下五个位和累加器操作有关:
  1.符号扩展方式位(SXM):ST1/BIT10。
  2.进位位(C):ST1/BIT9。
  3.溢出方式位(OVM):ST0/BIT11。
  4.溢出标志位(OV):ST0/BIT12。
  5.测试/控制标志位(TC):ST1/BIT11。
  实际影响方式,后续章节将予以描述。


                                          24
(四)辅助寄存器算术单元
  辅助寄存器算术单元(ARAU)独立于 CALU,它由 8 个辅助寄存器(AR0-AR7)
组成,用来执行以寻址为主要任务的 16 位无符号运算。这种运算可以与 CALU 中的
运算并行执行。




  图 2-9:辅助寄存器逻辑结构图
  这 8 个辅助寄存器通过间接寻址形成强大的寻址能力,可以访问 64K 字节的数
据存储器的任意单元。
  使用这 8 个寄存器进行寻址的方法,也叫做寄存器间接寻址。方法是通过程序
装载辅助寄存器指针(状态寄存器 ST0 的高三位)ARP,给出辅助寄存器编号 0-7,
从而指向一个辅助寄存器——当前辅助寄存器。当前辅助寄存器中包含了要访问
(读或写)的数据存储单元的地址,根据指令要求以确定送往 DRAB 或 DWAB。




                                            25
  APR 的值可以通过 MAR 指令(修改辅助寄存器和 ARP 值)或 LST(把数据存储
器的值写入 ST0)来修改。也可以通过任何支持间接寻址的命令把修改 ARP 作为辅
助操作来执行。
  ARAU 主要执行下面算术操作:
  1.通过执行支持间接寻址的指令使当前辅助寄存器的值增 1 或减 1。
  2.将一个 8 位常数值加至当前辅助寄存器(ADRK 指令),或从当前辅助寄存
器的值减去一个 8 位常数(SBRK 指令)。
  3.执行指令 CMPR,比较 AR0 和当前 AR 的内容,然后根据比较结果设置 ST1
的测试位 TC。
五.状态寄存器
  DSP 包括两个状态寄存器:ST0、ST1。它们控制了处理器的许多操作方式,是
DSP 学习中必须熟悉的最重要的两个寄存器。
  下面是它们的位分布图:
 15    14    13     12        11    10     9     8
      ARP           OV        OVM    1    INTM   DP
 7     6      5     4          3     2     1     0
                         DP
  图 2-10:状态存储器 ST0 的位分配图


 15    14    13     12        11    10     9     8
      ARB          CNF        TC    SXM    C     1
 7     6      5     4          3     2     1     0
 1     1      1     XF         1     1     PM    PM
  图 2-11:状态存储器 ST1 的位分配图
  如下一些命令可以对辅助寄存器进行操作:
  1.LST:把数据从数据存储器装载到状态寄存器。
  2.SST:将状态寄存器值保存到数据存储器。
  3.SETC:设定指定位。如 SETC SXM。
  4.CLRC:清除指定位。如 CLRC SXM。
  5.LDP:装载 DP 域(数据页指针)。
  6.MAR:修改辅助寄存器和 ARP 值。


  下表给出了 ST0、ST1 各位的作用解释。要熟练掌握 DSP 开发,就必须熟练和
准确掌握这些位的作用。


                                                      26
                           SETC、CLRC 可以对该位进行置位和清 0。LST 也
                           可以修改改位。




                                 ,该位对输入移位器有效。




第三节:系统配置与中断任务

一.系统配置寄存器
  系统配置寄存器规定系统的工作状态,包括中断的有关控制。它们是:
  系统控制寄存器 SYSCR、系统状态寄存器 SYSSR、系统中断矢量寄存器 SYSIVR。
(一)系统控制寄存器 SYSCR




                                                    27
      该寄存器主要用于规定系统的复位和时钟输出方式。它被映射到数据存储器的
7018h 单元。
  15            14         13-8        7            6                 5-0
RESET1     RESET0       Reserved CLKSCR1 CLKSCR0                    Reserved
      图 2-12:系统控制寄存器位布置图
1.RESET1、RESET0:软件复位位。可以由软件读写,写入要同时进行。无论是 RESET1
为 1 或者 RESET0 为 0,都将引起全局复位。只有当 RESET1=0,RESET0=1 时,系统
无动作。即:
      00:全局复位。
      01:无动作。
      10:全局复位。
      11:全局复位。
2.CLKSCR1、CLKSCR0:CLKOUT 引脚功能选择位。可以由用户读写,复位时为 1。
      取值和作用如下:
      00:数字 I/O 模式,受特定器件的 I/O 寄存器控制。
      01:看门狗时钟输出。(WDCLK)
      10:系统时钟输出。(SYSCLK)
      11:CPU 时钟输出。(CPUCLK)
(二)系统状态寄存器 SYSSR
      该寄存器用于反映系统的复位原因等。它被映射到数据存储器的 701Ah 单元,
可以被用户读取判断复位产生的原因。
 15      14-13        12      11     10       9         8-6   5      4         3     2-1     0

PORST     Res        ILLADR   Res   SWRST   WDRST       Res   HPO   Res     VCCAOR   Res    VECRD

      图 2-13:系统状态寄存器位布置图
      各位的具体含义参见:P57 表 2.6。
      1.PORST:上电复位状态位。发生上电复位事件将置位。
      2.Res:系统保留。
      3.ILLADR:访问非法地址复位状态位。发生了对非法地址的访问时,将引起
复位此时该位被置 1。
      4.SWRST:软件复位状态位。该位为 1 指示发生了软件复位操作。将 0 写如
SYSCR 的 BIT14 或将 1 写入 SYSCR 的 BIT15 将引发软件复位。
      5.WDRST:看门狗复位状态位。该位为 1 时,指示发生了看门狗溢出导致的系
统复位。



                                                                                       28
  6.HPO:硬件保护补偿位。当 RS 为低,且 Vccp 为稳定的 5VDC 时,系统进入
EEPROM 编辑状态。此时 HPO 被置 1,表示 EEPROM 编程被使能。
  7.VCCAOR:模拟电压 VCCA 超出稳压范围位。当该电压超出规定范围时,该位
为 1。
  8.VECRD:中断向量挂起位。当中断被响应且一个中断向量被装入中断向量寄
存器时,该位被置位。当读 SYSIVR 时,该位被清除。
(三)系统中断向量寄存器 SYSIVR
  该寄存器用于暂存 CPU 响应中断请求时的中断向量。它被映射到数据存储器的
701Eh 单元,是一个只读寄存器。
  寄存器的 0-7 位用于存储来自挂在外设总线上的外设提供的中断向量的地址
偏移量。其余各位保留。


  ***注意:以上三个寄存器被映射到三个奇数单元,紧跟在其后面的偶数单元,
也可以用于同一寄存器的访问。


二.中断信号源
(一)中断分类
  系统中断大多数来自硬件,但也可以由软件产生。
  而硬件中断又分两种:
  1.外部硬件中断:挂在 DSP 中断请求引脚上的外部器件产生。它们的优先级
受可编程的外部中断控制寄存器控制。如 RS、NMI 及外部可屏蔽中断。
  2.内部硬件中断:挂在内部外设总线上的外设发出的中断。
  中断又分为:
  1.可屏蔽中断:一般为硬件中断,可以通过软件进行屏蔽和使能。
  2.不可屏蔽中断:软件中断及 RS、NMI 引脚引入的中断。
(二)中断信号的来源
  中断信号有三个来源:DSP 内核中断、事件管理器中断和系统模块中断。




                                           2-14


                                                  29
   图 2-14:F240/C240 的内部中断关系结构
   由图可以看出:系统模块占用了内核中断 INT1、INT5、INT6 及 NMI,事件管
理器占用 INT2、INT3、INT4。
(三)X24X 系统的中断信号
   X24X 的中断信号表见 P59 表 2.8。这里共列出了 32 个中断源的中断名称、中
断矢量地址、操作数及优先级等。
   这些中断大致有:
   1) RS :硬件复位。不可以屏蔽。
   2)INT1-INT6:来自于外部硬件(系统模块、事件管理器)的可屏蔽中断或
INTR 指令的中断。
   3)INT8-INT16、INT20-INT31:用户自定义软件中断。
   4)NMI:不可屏蔽中断,来自于外部引脚 NMI 或 NMI 指令。这两个方法使用
了共同的中断向量:24h。
   5)TRAP:TRAP 指令中断。
   6)(无名):系统保留的中断。中断矢量:Eh、26h,共两个。被系统保留,
用户无法干预。


三.系统中断控制寄存器
   中断控制寄存器用于可屏蔽中断 INT1-INT6 的标志及屏蔽控制。它又有:
(一)中断标志寄存器 IFR:
   有 INT1-INT6 共六个中断标志位,用于指示是否有可屏蔽中断被送至 CPU 的六
个中断级。
   它被映射到数据存储器的 0006h 单元,可以进行读写。通常它由中断源置位,
但也可以通过写入数据来清除挂起的中断。相应位为 1 时,表示至少有一个同级别
中断被挂起等待处理。
   当系统复位或 CPU 响应外部中断时,对应的标志位被清零。但如果 INT1-INT6
是 INTR 指令发出的,则 IFR 标志要用软件来解除。
   其位排列图:


                                              30
     15-6      5      4      3       2      1      0
   Reserved   INT6   INT5   INT4    INT3   INT2   INT1
   图 2-15:中断标志寄存器位布置图
(二)中断屏蔽寄存器 IMR:
   用于使能或屏蔽某一个中断级(INT1-INT6)。它被映射到 0004h 单元,可以
由软件进行读写。
   其位排列图:
     15-6      5      4      3       2      1      0
   Reserved   INT6   INT5   INT4    INT3   INT2   INT1
   图 2-16:中断屏蔽寄存器位布置图
   只有当 INT1-INT6 的屏蔽位为 1 时,对应中断才被允许送往 CPU。
   系统复位后,IMR 被清零。


四.外部中断控制寄存器
   外部中断由挂在 DSP 中断请求引脚上的外部器件产生。它们的优先级和极性
(上升沿/下降沿有效)受可编程的外部中断控制寄存器控制。
(一)外部中断控制寄存器概述
   这些外部中断控制寄存器包括:
   1)类型 A 外部中断控制寄存器 XINTA1CR。
   2)类型 A 外部中断控制寄存器 XINTA2NMICR。
   3)类型 B 外部中断控制寄存器 XINTB1CR。
   4)类型 B 外部中断控制寄存器 XINTB2CR。
   5)类型 C 外部中断控制寄存器 XINTC1CR。
   6)类型 C 外部中断控制寄存器 XINTC2CR。
   7)电源模块外部中断控制寄存器 PMINT1CR。
   8)电源模块外部中断控制寄存器 PMINT2CR。
   X24X 控制器最多有 6 个系统外部中断引脚,分别由上面 1-6 六个外部中断控
制寄存器控制。有的还包括两个电源模块中断控制寄存器,可以支持 14 个附加的
中断引脚。
1.类型 A 外部中断控制寄存器 XINTA1CR、XINTA2NMICR
   XINTA1CR 为可屏蔽引脚控制,XINTA2NMICR 为不可屏蔽中断引脚 NMI 的控制。
这两个引脚只能用做数字输入引脚。分别映射到数据存储器的 7070h、7072h。
2.类型 B 外部中断控制寄存器 XINTB1CR、XINB2CR



                                                         31
   XINTB1CR、XINTB2CR 可以被编程为可屏蔽或者不可屏蔽中断,且可以被编程
用做数字 I/O。分别映射到数据存储器的 7074h、7076h。
3.类型 C 外部中断控制寄存器 XINTC1CR、XINTC2CR
   XINTC1CR、XINTC2CR 只能是可屏蔽中断,且可以被编程用做数字 I/O。分别映
射到数据存储器的 7078h、707Ah。
4.电源模块外部中断控制寄存器 PMINT1CR、PMINT2CR
   PMINT1CR、PMINT2C4 可以控制 14 个来自内部外设或外部引脚的中断。其优先
级器件制造时已经确定,不能被编程设置。而且,同一个寄存器的 7 个中断为一组,
使用同一个中断向量。这两个寄存器分别映射到数据存储器的 707Ch、707Eh。
(二)位布置及含义
   以上 A、B、C 三种类型的中断引脚都可以通过编程配置为上升或下降沿有效,
或者调整优先级。而且复位时,均自动被配置为数字输入引脚。
   这些引脚对应于 INT1、6,INT5 则对应片上外设的其它一些中断。具体请查阅
对应器件的资料。
   (依照书中表格讲解各位的含义和用法。)
1.类型 A 外部中断控制寄存器 XINTA1CR、XINTA2NMICR
   位图:P62/图 2-20。
   位定义:P63/表 2.12。
2.类型 B 外部中断控制寄存器 XINTB1CR、XINB2CR
   位图:P62/图 2-21。
   位定义:P64/表 2.13。
3.类型 C 外部中断控制寄存器 XINTC1CR、XINTC2CR
   位图:P62/图 2-22。
   位定义:P65/表 2.14。
   以上 ABC 三类中,所谓高、低优先级是指通过 INT1 还是 INT6 送出。如果设置
为高,将向 INT1 申请中断,否则向 INT6 申请中断。
4.电源模块外部中断控制寄存器 PMINT1CR、PMINT2CR
   位图:P63/图 2-23。
   位定义:P66/表 2.15。
   电源模块中断每 7 个一组,使用一个控制寄存器和一个中断矢量。每个控制寄
存器中,7 个外部中断各有其中断标志和使能,做为模块本身,还有一个总标志和
总使能信号。这些构成了其 16 位控制。


五.不可屏蔽中断


                                              32
(一)硬件不可屏蔽中断
  硬件不可屏蔽中断可以通过下面两个引脚请求:
  1.复位引脚 RS :该中断停止正在执行的程序流,使处理器返回一个预定义
状态,程序指针回到 0000h。
  2.不可屏蔽中断引脚 NMI:处理器程序指针转到 24h 处,并使状态寄存器 ST0
的 INTM(中断方式控制位)位置 1,从而禁止一切可屏蔽中断。除此之外,不影响
系统其它操作。
(二)软件不可屏蔽中断
  软件不可屏蔽中断一般通过如下指令请求:
  NMI:强迫程序转移到中断向量 24h 处,与 NMI 引脚功能一致。
  TRAP:强迫 CPU 转移到中断向量 22h 处,但不把 INTM 写 1,即可以被任意可
屏蔽硬件中断打断。
  INTR:格式 INTR K,用于初始化 X24X 中断中的任何一个中断。编号 K 指示出
中断向量的值(见 P59/表 2.8)。它被响应时,将 INTM 置 1,以禁止所有可屏蔽
中断。
(三)不可屏蔽中断的执行步骤
  1.程序计数器 PC 的值返回堆栈顶部。
  2.将对应的中断矢量地址载入 PC。
  3.如为外部硬件中断或 INTR、NMI 指令引发的中断,还要把 INTM 置 1,以禁
止所有可屏蔽中断。
  4.执行中断矢量地址处的跳转指令,以转到中断服务程序入口。
  5.执行中断服务子程序。
  6.遇到子程序后面的中断返回指令,将返回地址从堆栈顶部弹回 PC。
  7.继续执行挂起的主程序。


六.复位操作
  发生复位时,将引起任何系统操作的非正常退出,是级别最高的中断。此时,
它使系统进入预定的初始状态。
(一)复位后的系统状态
  这个初始状态为:
  1.PC 清零,程序执行从 0000h 开始。
  2.INTM=1,禁止所有可屏蔽中断。另外中断标志寄存器 IFR 和中断屏蔽寄存
器 IMR 也被清零。




                                               33
   3.状态寄存器按如下方法初始化:OV=0,XF=1,SXM=1,PM=0,CNF=0,INTM=1,
C=1。
   4.全局存储器分配寄存器 GREG 被清零,使所有数据存储器配置为全局数据存
储器。
   5.重复计数器 RPTC 被清零。
   6.有外部存储器接口时,等待状态被设置为最大延时。
   7.初始化外设的各控制寄存器。
(二)可以引发复位的条件
   1.看门狗定时器复位:当不正确的值写入期关键寄存器或控制寄存器时,引
起定时器复位。
   2.软件复位:当通过编程使系统控制寄存器 SYSCR 的 RESET0=0,或者 RESET1=1
时,引发系统复位。
   3.上电复位:系统的上电复位引脚 PORESET 有效时,系统复位。
   4.VDD 超范围复位:芯片电源 VDD 超推荐范围,系统复位。
   5.非法地址访问复位:程序试图访问非法地址时,系统复位。
   6.复位引脚复位: RS 引脚接入低电平时,系统复位。


七.可屏蔽中断
   X24X 系列 DSP 提供 6 个可屏蔽中断级——INT1-INT6,其中每个中断级又可以
连接多个中断源。
   这 6 个中断的 INT1、5、6 对应于系统模块的外部硬件中断,INT2、3、4 对应
于事件管理器的硬件中断。同时,它们也都可以由 INTR k 指令来产生。
   可屏蔽中断响应过程如下:
   1.外部中断源发出中断申请。
   2.对应的外部中断控制寄存器的标志位(bit15)被置 1,表示中断被请求。
   3.如果对应的外部中断控制寄存器的屏蔽位(bit0)被置 1,则该请求被送
到仲裁逻辑。
   4.仲裁逻辑可能接收到多个请求信号,它通过比较其优先级,将最高的中断
申请送到 CPU。
   5.设置 IFR 的对应优先级的标志位,挂起该中断。
   6.如果 IMR 的对应屏蔽位为 1,且 ST0 的 INTM 位(中断方式位)=0,则该中
断被 CPU 响应,并执行对应的中断服务子程序(ISR)。
   以下的执行过程和不可屏蔽中断类似。
   多个中断响应示意图见 P72/图 2.25。


                                                   34
八.中断服务过程
   中断服务中,最复杂的情形就是多个中断源利用同一优先级的情况。下面,我
们总结前面的介绍,列出这种情况的服务全过程。当然,这个过程要结合用户合理
的程序设计来实现。
(一)可屏蔽中断被响应
   这里描述可屏蔽中断被 CPU 响应的前期过程。
   1.外部中断源发出中断申请。
   2.对应的外部中断控制寄存器的标志位(bit15)被置 1,表示中断被请求。
   3.如果对应的外部中断控制寄存器的使能位(bit0)被置 1,则该请求被送
到仲裁逻辑。
   4.仲裁逻辑可能接收到多个请求信号,它通过比较其优先级,将最高的中断
申请送到 CPU。
   5.设置 IFR 的对应的标志位,挂起该中断。
   6.如果 IMR 的对应屏蔽位为 1,且 ST0 的 INTM 位(中断方式位)=0,则该中
断被 CPU 响应,并执行对应的中断服务子程序(ISR,见(二)、(三))。
   7.中断被响应的同时,对 IFR 相应位清零,INTM 置 1(屏蔽其它中断),但
中断源的标志位不清除。
(二)执行通用中断服务子程序(GISR)
   实际上,由于 DSP 大量外设及事件管理器的存在,必然出现多个外部中断使用
一个系统中断入口的现象。下面这个过程可以对来自同一级别系统中断的不同中断
源进行服务入口选择。
   8.跳转到对应中断源(30 个之一)的中断矢量地址。该地址可以放置去对应
GISR 的跳转命令。我们可以对每一个可屏蔽中断源设计一个这样的 GISR,如
GISR1-GISR6。
   9.外部中断源会向系统中断矢量寄存器 SYSIVR 自动写入一个具体的特定的中
断矢量——外设偏移矢量地址,GISR 读取这个地址。
   10.保存必要的现场,跳转到特定的矢量地址入口。
   11.执行该入口的跳转指令,跳转到特定的中断服务子程序 SISR。
(三)执行特定的中断服务子程序(SISR)
   这是具体的中断服务,完成中断请求所要求的服务功能。
   12.执行 SISR 程序,处理中断服务内容。
   13.执行返回指令,堆栈地址弹回 PC,回到 GISR 断点处继续执行挂起的 GISR。
(四)GISR 回归操作


                                               35
  SISR 执行结束后,回到 GISR。GISR 继续完成如下操作:
  14.GISR 程序要恢复暂存的寄存器中间值等(现场)。
  15.把堆栈主程序地址返回 PC,回到主程序继续执行。
(五)每次跳转到中断矢量入口必须完成的操作
  需要注意的是,GISR、SISR 执行时,有两次中断矢量入口操作,这两次操作
构成了一个中断的嵌套结构。每次跳转到中断矢量入口必须完成如下任务:
  1.在转入前,用户程序保存必须的寄存器值。
  2.程序计数器 PC 的值返回堆栈顶部。
  3.将对应的中断矢量地址载入 PC。
  4.如为外部硬件中断或 INTR、NMI 指令引发的中断,还要把 INTM 置 1,以禁
止所有可屏蔽中断。
  5.执行中断矢量地址处的跳转指令,以转到中断服务程序(GISR、SISR)入
口处。
  6.执行中断服务子程序 GISR 或 SISR。
  7.恢复寄存器值。
  8.遇到子程序后面的中断返回指令,将返回地址从堆栈顶部弹回 PC。
  9.继续执行挂起的上一级程序。对 SISR 来讲,上一级为 GISR;对 GISR 来讲,
上一级为主程序。
  注意,以上第 1、7 步是用户程序必须考虑的。而程序地址的压栈、出栈操作
则由转移、调用、返回等指令自动完成。
  实际上,如果外部中断源无须仲裁,则可以不设置 GISR 这一级别的中断。


第四节:存储器

一.存储器和 I/O 概述
  X24X 包含了如下不同的片内存储器:
  1.双口 RAM(DARAM):最多 1056 字。分为 B0、B1、B2 三个区。B0 可以用做
数据、程序存储器,B1、B2 只能用做数据存储器。
  2.单口 RAM(SARAM):最多 16K。
  3.Flash EEPROM 或工厂掩膜 ROM:最多 16K。
  包括片内、片外存储器,X24X 可以访问的存储空间范围是:
  1.程序存储空间(64K)——存储程序指令、表信息、程序执行期间要使用的
常量操作数。
  2.局部数据存储空间(64K)——存储指令使用的数据。


                                                 36
   3.全局数据存储空间(32K)——保存和其它处理器共享的数据或用做附加的
局部数据空间。
   4.输入/输出访问空间(64K)——用于和片外外设接口,也包含了片内外设
的寄存器映象。
   总计 224K 字的片内存储空间。基于哈佛结构,X24X 可以通过 PAB、DRAB、DWAB
三组地址总线,在一个指令周期内,执行三次并行的存储器操作。
   如果内部存储空间不够使用,还可以通过外部存储器接口(EIMF)扩展外部存
储器。但内部存储器在访问速度、价格、功耗等方面具有优势。


二.片上 RAM
   片内一般有 DARAM、SARAM 两种随机存储器。
(一)DARAM
   最多 1056 字。分为 B0、B1、B2 三个区。B0 可以用做数据、程序存储器,B1、
B2 只能用做数据存储器。用于速度要求比较快的操作如频繁执行的程序等。
   它可以由 ST1 的 CNF 位(BIT12)进行设置:
   1.当 DARAM 有 1056 字,CNF=0 时,全部 DARAM 用做数据存储器;当 CNF=1 时,
544 字(B1 区 512 字,B2 区 32 字)被配置为数据存储器,512 字配置为程序存储
器(B0 区)。
   2.当 DARAM 有 544 字,CNF=0 时,全部 DARAM 用做数据存储器;当 CNF=1 时,
288 字(B1 区 256 字,B2 区 32 字)被配置为数据存储器,256 字(B0 区)配置为
程序存储器。
   DARAM 在一个时钟周期内可以被访问两次,因此,它可以在同一时钟的主相写
数据,从相读数据。这充分利用了读写各自的总线并行工作,因此极大地加快了
CPU 的处理速度。
(二)SARAM
   SARAM 是单口 RAM,一个时钟周期可以访问一次。它可以配置到 16K,其地址
范围从 0800h 处开始,或位于程序存储器的高端。
   它可以被配置成程序存储器、数据存储器或二者公用。用做程序存储器时,可
以把程序从片外 ROM 引导到片内 SARAM 中,以提高运行速度。
   SARAM 的使用配置和外部引脚 RAMEN 有关,见后续“程序存储器部分介绍”。


三.片上 ROM 和 Flash EEPROM
   X24X 中,C24X 包含 4-16K 的掩膜 ROM,用于存储那些不变更的程序,适合于
大批量的产品。这些程序可以向 TI 公司预约定制,出厂时掩膜。


                                                       37
  C24X 出厂前,预留 128 字或 64 字的保留单元,用于芯片测试。地址为 3F80h
或 3FC0h 到 3FFFh。其余的接近 16K 字(0000h-3F79h)用于用户代码存放。
  F24X 包含 16K 或 8K 字的 Flash EEPROM。它在 VCCP 加稳定的 5V 电压时,可以
通过特定算法和 JTAG 仿真扫描口重复擦写,适合二次开发使用。


四.程序存储器
  程序存储器可以是 DARAM、SARAM、ROM/FLASH。如果器件有 EMIF 接口,则当
产生超过内部程序存储器地址范围的访问时,自动发出一个外部程序存储器访问的
控制信号。
  图 2-17 是程序存储器的分布图。地址范围为 64K,从 0000h-FFFFh。




  图 2-17:程序存储器分布图
  程序存储器的 0000h-003Fh 被用作中断向量,可以参见中断部分章节。
  影响程序存储器配置的因素有:


                                                       38
  1.CNF 位。状态寄存器 ST1 的 CNF 位,用于配置 DARAM。当 CNF=0 时,DARAM
全部用做数据存储器;当 CNF=1 时,DARAM/B0 区用做程序存储器。复位时,CNF=0。
  2.MP/MC*引脚:该引脚=0 时,器件为计算机方式,片内的 ROM/FLASH 可以被
访问,CPU 从 0000h 开始读取复位向量(0000h-003Fh 被预留作为中断控制,
0000h-0001h 存储复位向量)。引脚为 1 时,器件被配置成处理器方式,CPU 忽略
内部存储器的存在,从外部存储器读取复位向量;此时, 0000h-003Fh 仍然被预
留作为中断控制用,但存在于外部存储器空间,0040h-4000h 地址也转而被外部存
储器使用。
  3.RAMEN 引脚:在一些具有片内 SARAM 存储器的器件中,该引脚的电平状态
决定了某些特定地址的访问是发生在片内 SARAM 还是发生在外部存储器。该脚=0
时,地址 4000h-FEFFh 被外部存储器占用,而禁止内部 RAM 的使用。当为 1 时,则
程序存储器、数据存储器的某些特定地址段同时被映射到内部存储器 SARAM 中,出
现重叠,因此写操作时必须特别注意。


五.局部数据存储器
  DARAM 分为 B0、B1、B2 三个区。B0 可以用做数据、程序存储器,B1、B2 只能
用做数据存储器。片内 SARAM 也可以用做程序和数据存储器。
  图 2-18 是局部数据存储器的分布图。地址范围同样为 64K,从 0000h-FFFFh。
  它们被分配为:
  1.DSP 寄存器的映射。一部分局部数据存储器用来作为 DSP 部分寄存器的映
射,这些映射集中在数据页的第 0 页,地址 0000h-007Fh。具体分配是:
  0000-0003h:保留。
  0004h:系统中断屏蔽寄存器 IMR。
  0005h:全局存储器分配寄存器 GREG。
  0006h:系统中断标志寄存器 IFR。
  0023-0027h:保留。
  002B-002Fh:测试与仿真。
  0060-007Fh:数据暂存 RAM(DARAM B2)。
  2.DARAM 的 B0、B1、B2 区。这个区域的配置主要取决于 CNF 位,当 CNF=0 时,
所有 DARAM 配置为数据存储器,否则 B0 用做程序存储器。
  3.SARAM。部分 X24X 器件包含了片内 SARAM 块,该块可以用做数据存储器或
程序存储器。
  4.事件管理器及外设总线映射区。7000h-73FFh 用于外设总线上相关片内外
设的映射,7400h-743Fh 用于事件管理器映射。


                                                    39
5.外部存储器。
6.系统保留。




图 2-18:局部数据存储器布置图


                    40
  按照程序存储器部分的介绍,CNF 位及 RAMEN 引脚也将影响到数据存储器的配
置。可以参照前面相应介绍。


六.全局数据存储器
  为实现和其它设备的数据共享,在 X24X 器件中,最高允许配置 32K 全局存储
器。它占用数据存储器的地址高端,地址范围 8000h-FFFFh。它与局部数据存储器
发生不同尺寸的重叠,具体大小还可以由全局存储器分配寄存器 GREG 的低 8 位来
进行设置。
  GREG 被映射到数据存储器的 0005h。其取值和决定的全局存储器大小、地址范
围等见下表。




  物理上,局部数据存储器和全局数据存储器可以使用同一存储器,也可以使用
不同的存储器。
  使用同一物理存储器时,二者共同使用 64K 地址范围,按照 GREG 的设置,局
部数据存储器使用地址低端,全局数据存储器使用地址高端(8000h-FFFFh 的一部
分)。CPU 采用同样的方法对这两部分进行访问。
  不使用同一物理存储器时,局部数据存储器占用独立的 64K(0000-FFFFh)地
址,全局数据存储器使用 8000h-FFFFh 的 32K 地址。当引脚 DS*=0,BR*=0 时,该




                                                  41
地址区间指向全局数据存储器;当 DS*=0,BR*=1 时,该地址区间指向局部数据存
储器。
  特别注意的是,全局数据存储器只能用于外部存储器。对于没有 EMIF 的器件,
GREG 及对应的地址空间被保留。


七.I/O 空间
  X24X 系列的 DSP 中,最多可以寻址 64K 的 I/O 空间,范围 0000h-FFFFh。
  P83/图 2.32 是地址分布图。它包括:
  1.外部 I/O 访问:0000h-FEFFh。可以用 IN 或 OUT 指令来访问,它和数据存
      储器可以共用一组总线,执行这两条指令时,IS*有效,因此,可以用它来
      做外部 I/O 的片选信号。
  2.FLASH 控制模式寄存器映射:FF0Fh。
  3.等待状态发生器控制寄存器映射:FFFFh。
  4.保留:FF00h-FF0Eh、FF10h-FFFEh。
  对于没有 FLASH 的器件,FF0Fh 也被保留。此时,保留空间为 FF00h-FFFEh。
  I/O 空间也仅仅存在于具有 EMIF 的器件,否则该空间被保留。


八.存储器及 I/O 扩展
(一)EMIF 接口模块
  有些 X24X DSP 具备 EMIF 外部存储器接口模块,通过该模块,CPU 可以访问外
部存储器及 I/O。EMIF 有 16 根地址线、16 根数据线和部分控制信号线,从而实现
对外部数据、程序和 I/O 空间的访问。
(二)等待状态发生器
  由于外部存储器访问一般都比较慢,因此 DSP 设置了片内等待状态发生器。它
能在访问时插入一个等待周期,如果超过一个等待周期,则要使用外部等待状态产
生逻辑电路。
  外部等待状态产生逻辑可以和 DSP 的 READY 信号相连,如果 READY 没有准备好,
则系统自动插入一个等待周期。
(三)外部访问需要的控制信号
  下面分别给出了 X24X 访问外部程序存储器和数据存储器时,必须使用的一些
信号。
1.访问外部程序存储器必须使用的信号
A15-A0:16 位外部双向地址总线。
BR:总线请求信号。


                                                       42
D15-D0:16 位外部双向数据总线。
PS*:程序存储器选择信号。
READY:存储器准备就绪信号。
W*/R:读写信号。
STRB*:外部存储器访问有效选通信号。
WE*:写使能信号。
W/R*:写读信号。
2.访问外部数据存储器必须使用的信号
A15-A0:16 位外部双向地址总线。
BR:总线请求信号。
D15-D0:16 位外部双向数据总线。
DS*:数据存储器选择信号。
READY:存储器准备就绪信号。
W*/R:读写信号。
STRB*:外部存储器访问有效选通信号。
WE*:写使能信号。
W/R*:写读信号。
(四)电路实例
  参见 P85/图 2-33,P86/图 2-34,P87/图 2-35。分别列出了外部程序存储器、
外部数据存储器、外部 I/O 的扩展实例。


九.等待状态发生器
(一)产生等待周期的方法
  DSP 系统产生等待状态机器周期的方法有:
  1)软件等待状态发生器。
  等待状态发生器用于在外部访问速度不匹配时,产生一个等待周期。它可以通
过对 WSGR(等待状态发生器控制寄存器)编程来实现。
  2)利用外部等待状态产生逻辑与 DSP 的 READY 信号。
  REDAY 信号可以在当一个等待周期不够用时,产生多个等待周期。该信号不使
用时,要接到高电平。
  一般地,当外部存储器或外设准备好被访问时,外部等待状态逻辑产生一个高
电平送 READY,此时,CPU 和外部可以直接交互。如果 READY 检测到低电平,则通
知 CPU 等待到下个周期重复检测,直到 READY 变为高电平为止。这样,READY 可以
控制产生多个等待周期。


                                                 43
(二)等待状态发生器控制寄存器 WSGR
  有时,外部电路不可能在第一个周期就产生等待信号,所以第一个等待周期应
该由内部等待状态发生器来提供。DSP 设置了一个等待状态发生器控制寄存器
(WSGR),它被映射到 I/O 存储区 FFFFh 处。图 2-20 是其位布置图。
   15-4       3          2        1            0
   Res       AVIS       ISWS     DSWS         PSWS
  图 2-19:WSGR 位布置图
  各位含义解释如下:
  AVIS:地址可见方式位。复位时被置 1。
    0:清除,减少功耗与噪声,用于生产选通。
    1:使能器件地址可见模式。在该模式下,器件提供一种跟踪内部代码执行
的方法。
  ISWS:片外 I/O 空间等待状态位。复位时,该位置 1。
    0:不产生片外 I/O 等待状态。
    1:片外 I/O 空间读写访问时,插入 1 个等待状态。
  DSWS:片外数据存储空间等待状态位。复位时,该位置 1。
    0:不产生片外数据存储器空间访问的等待状态。
    1:片外数据存储器空间读写访问时,插入 1 个等待状态。
  PSWS:片外程序存储器空间等待状态位。复位时,该位置 1。
    0:不产生片外程序存储器访问的等待状态。
    1:片外程序存储器空间读写访问时,插入 1 个等待状态。
  WSGR 可以分别通过编程使三种外部存储空间无条件插入一个等待周期。在系
统复位时,默认插入一个等待周期。




                                                     44
第三章:DSP 控制器的片上外设
  DSP 的强大功能,除了体现在高性能的内核之外,还体现在它提供了功能极强
的片上外设及事件管理模块。
  正是由于具备了这些片上外设,使得 DSP 成为一个完善的片上系统。
  下面,重点介绍锁相环、数字 I/O、A/D 转换、串行通讯、看门狗几个模块。


第一节:片内锁相环(PLL)


一.概述
  锁相环的任务是,根据系统的需要,给各部分提供各种频率的时钟信号。
  PLL 可以产生四种不同用途的时钟:
  1.CPUCLK:CPU 时钟。这是 DSP 最高频率的时钟,所有直接挂在 CPU 总线上
    的存储器、外设、EMIF 等都使用该时钟。片内所有时钟都来自于该时钟的
    分频信号。
  2.SYSCLK:系统时钟。它是 CUPCLK 的 1/2 或 1/4。所有挂在片内外设总线上
    的外设都使用该信号。
  3.ACLK:模拟时钟。用于模拟模块,额定频率:1MHz+/-10%。
  4.WDCLK:看门狗时钟。用于看门狗定时器/实时中断模块的低频率时钟,额
    定频率 16KHz。
  这四种时钟的原始信号,可以来自如下两个来源:
  1.芯片内部振荡电路:需要外接石英晶体,频率 4、6 或 8MHz。
  2.外部时钟输入:从芯片外部引入符合要求的时钟信号。
  原始输入时钟经过倍频、分频等处理,可以得到多种系统需求的时钟信号。根
据系统设置及编程,可以得到 1、2、3、4、5、9 及 1.5、2.5、4.5 等倍频因子,
从而获得不同频率。
  PLL 时钟模块有两个可用的控制寄存器:
  时钟控制寄存器 0(CKCR0):用于模块整体工作方式的控制位,如时钟方式、
低功耗方式等。映射单元:数据寄存器 702Ah。
  时钟控制寄存器 1(CKCR1):规定了 PLL 的倍频因子和输入时钟的频率。映
射单元:数据寄存器 702Ch。
  下面图 3-1 是锁相环模块的内部结构逻辑图。


二.PLL 时钟操作
(一)时钟系统相关外部引脚


                                               45
 图 3-1:PLL 时钟模块逻辑结构图
 如下三个引脚和时钟控制相关:
 1.OSCBYP:用来选择是否旁路片内时钟振荡电路。低电平旁路内部电路,使
   用外部时钟;高电平使用内部时钟,此时要外接晶振电路。
 2.XTAL1/CLKIN:用外部时钟时,此脚为时钟输入脚。内部时钟时,此脚接 4、
   6、8MHz 的晶振。
 3.XTAL2:内部时钟时,此脚接 4、6、8MHz 的晶振。
(二)时钟系统的控制方式
 两个时钟控制寄存器如下方法控制四种时钟:
 1.输入频率选择:它使用输入频率选择位 CKINF(3:0)来表示,它占据 CKCR1
   的位 7-4。这 4 位的编码分别是:0000-1111 时,分别表示输入频率为 32、
   30、28、…、2 的 16 种频率。
 2.输入时钟信号的处理
 它由 CKCR0 的位 7-6(CLKMD(1:0))控制。具体方式见下表:
      CLKMD(1:0)                   用途
          00             输入时钟 2 分频后用做 CPUCLK。
          01             输入时钟直接用做 CPUCLK。
          10             输入时钟用做 PLL 输入信号源(可倍频)。
          11             输入时钟用做 PLL 输入信号源(可倍频)。


                                                46
    3.锁定计数器与锁定标志
    锁相环电路 PLL 内部有一个锁定计数器,它配合外部时钟方式工作。用来保证
X24X 器件使用 PLL 电路输出时钟信号前,有足够的时间锁定输入时钟频率。它可
以通过上电复位清除。
    在 CKCR0 中,位 5/PLLOCK(1)用来指示锁定计数器是否已经翻转。如果翻转
             ,
(PLLOCK(1)=1) 则表示 PLL 电路已经锁定输入信号频率并获得稳定的时钟输出。
    4.CPUCLK 的频率控制
    由 CKCR1 寄存器的 PLLFB(2:0)(位 2、1、0)及 PLLDIV2(位 3)进行控制。
    PLLFB 通过代码组合决定了乘积因子:1、2、3、4、5、9。具体配置说明见后
面介绍。具体对应关系为 000-111 对应 1、2、3、4、5、9、1、1。
    PLLDIV2 决定了是否使用 2 分频,当该位=1 时,使用 2 分频。这样可以获得
1.5、2.5、4.5 的乘积因子。
    此时,CPU 时钟为:
    fCPUCLK=fCKIN*(PLL 乘积因子)/2PLLDIV2
    5.SYSCLK 的频率控制
    由 CKCR0 的位 0(预定标选择位 PLLPS)进行控制。并当 PLLPS=0 时,
SYSCLK=CPUCLK/4;PLLPS=1 时,SYSCLK=CPUCLK/2。
    6.ACLK:PLL 时钟模块为某些模拟外设提供一个模拟时钟信号 ACLK。该时钟
       额定频率为 1MHz,它由专用的分频电路来得到。
    CKCR0 的位 1(ACLKENA)用于使能 ACLK。当 ACLKENA=1 时,产生 1MHz 的频率,
否则 ACLK 被停止。
    7.WDCLK:PLL 也为片内看门狗实时中断模块提供了一个看门狗计数器时钟信
       号。通过分频电路,可以得到约 16384Hz 的 WDCLK 信号。


三.PLL 控制寄存器 CKCR0、CKCR1
    PLL 时钟模块是一个 8 位外设,所以控制寄存器也是 8 位。当访问其映射存储
器时,总是低 8 位有效。
   7          6          5               4           3        2          1         0
CLKMD(1)   CLKMD(0)   PLLOCK(1)   PLLOCK(0)    PLLPM(1)   PLLPM(0)    ACLKENA    PLLPS
    时钟控制寄存器 CKCR0
   7          6          5           4           3           2          1          0
CKINF(3)   CKINF(2)   CKINF(1)    CKINF(0)    PLLDIV(2)   PLLFB(2)   PLLFB(1)   PLLFB(0)
    时钟控制寄存器 CKCR1
    图 3-2:时钟控制寄存器位分布图


                                                                                       47
  实际上,“二”中已经大部分介绍了这两个控制寄存器的各位用法。P95-97/
表 3.5-3.8 列出了 CKCR0、CKCR1 的各位详细含义及用法。


四.低功耗模式
  X24X 系列有三个时钟域:
    CPU
  1. 时钟域:CPU、片内存储器、外部存储器接口、事件管理器都使用 CPUCLK。
  2.系统时钟域:除 EMIF 及事件管理器外,所有外设都使用 SYSCLK。
  3.看门狗时钟域:看门狗定时器和实时中断模块。
  降低功耗可以节省能源及提高系统性能,退出低功耗方式,不影响原来的运行
状态。
  当执行一条 IDLE 指令时,系统进入低功耗方式。X24X 系列 DSP 控制器具有 4
种低功耗运行方式,具体进入哪种方式,由程序编辑 CKCR0 的 PLLPM 位域(位 3、
2)来控制。
  在四个不同的低功耗方式下,这几个时钟域及振荡器可以分别被关闭。这四个
方式是:
  1.Idle1:仅仅关闭 CPUCLK。任何中断和复位发生时,将退出 Idle1。
  2.Idle2:关闭 CPUCLK、SYSCLK。发生唤醒中断或复位时,退出 Idle2。看门
      狗定时器溢出时,将引发一次复位。
  3.PLL 低功耗:关闭 CPUCLK、SYSCLK。如果允许,将关闭 PLL,但 WDCLK 将
      继续运行。发生唤醒中断或复位时,退出 PLL 低功耗。看门狗定时器溢出
      时,将引发一次复位。但 PLL 需要上电和等待输入时钟锁定,PLL 才能高
      速运行。
  4.振荡器低功耗:三个时钟域及振荡器全部关闭。发生外部唤醒中断(NMI、
      XINT)或复位时,退出该方式。此时,需要给振荡器、PLL 电路重新上电,
      完成前,器件不会高速操作。
  四个方式功耗依次递减,但退出低功耗需要的时间则越长。
  四种低功耗方式的 CKCR0/PLLPM 位域(位 3、2)设置分别为 00、01、10、11。


五.低功耗方式的退出
  按照四中的描述,退出低功耗运行有如下这些信号:
  1.复位信号:可以退出所有的低功耗方式。
  2.看门狗复位:看门狗定时器溢出可以使得头三种低功耗方式退出。第四种
      方式由于振荡器电源被关闭,不存在看门狗时钟,所以不可能有该复位方
      式。


                                                  48
  3.外部中断信号:即外部引脚中断。如 NMI、XINTx(可屏蔽中断),可以终
    止任何低功耗方式。但 XINTx 一定要在未被屏蔽时,才能使低功耗方式结
    束;否则会恢复时钟,但器件仍处于 IDLE 状态。
  4.唤醒中断信号:NMI、XINTx 属于唤醒中断。除此之外,部分外设可以产生
    唤醒中断。但注意,振荡器低功耗方式下,由于振荡器被关闭,因而片内
    外设不可能产生唤醒中断;此时,它只能通过 NMI、XINTx 来结束。
  5.外设中断:普通的外设中断可以恢复 Idle1、Idle2、PLL 低功耗方式。但
    在 Idle2、PLL 低功耗方式下,由于系统时钟被关闭,只有不受 SYSCLK 控
    制的未被屏蔽外设中断可以起作用。
  但要注意,退出后系统的如下程序运行规律:
  1.使用 NMI 中断时,系统将执行对应的中断服务子程序。
  2.使用 XINTx 时,如果 INTM=0,中断被使能,系统将执行对应的中断服务子
    程序;INTM=1 时,由于中断被禁止,系统仍将恢复,但恢复后系统将执行
    IDLE 后的那条指令。
  因此,我们在编辑软件时,要根据不同操作需要,合理使用恢复低功耗的方式
及合理设置 INTM。


第二节:数字 I/O 端口
  这个模块可以提供最多 32 点输入、32 点输出、32 点复用 I/O。它们由映射到
内部数据存储器中的 8 个 I/O 控制寄存器来控制,用户通过读写这些内部数据单元,
可以实现对外部 I/O 点的控制和查询。
  实际上,随着器件型号的不同,I/O 个数,是否复用等都不同,具体使用时,
需要查阅相关手册。
  这 8 个寄存器是:
(一)输出控制寄存器 OCR——OCRA、OCRB
  OCR 有两个——OCRA、OCRB,分别映射到内部局部数据存储器的 7090h、7092h。
每个包含 16 点,总计 32 点。
  用户程序可以对该 OCR 进行读写,可以用于输出控制。1 对应高电平、0 对应
低电平。复位后其状态为 0。
(二)输入状态寄存器 ISR——ISRA、ISRB
  ISR 有两个——ISRA、ISRB,分别映射到内部局部数据存储器的 7094h、7096h。
每个包含 16 点,总计 32 点。
  用户程序可以对该 OCR 进行读(写?),可以用于输入控制。1 对应高电平、
0 对应低电平。复位后其状态为 0。


                                               49
(三)数据和方向控制寄存器 PADATDIR、PBDATDIR、PCDATDIR、PDDATDIR
   共有四个——PADATDIR、PBDATDIR、PCDATDIR、PDDATDIR,分别映射到内部局
部数据存储器的 7098h、709Ah、709Ch、709Eh。每个含 8 点 I/O,总计 32 点。
   但是要注意,这四个寄存器都是 16 位的,高 8 位 BIT8-15 用于控制方向,依
次对应低 8 位的 BIT0-7。当方向位=0 时,对应低位被设为输入,为 1 则对应位被
设为输出。
   用户程序可以对这些寄存器进行读写,用于输入/输出控制。1 对应高电平、0
对应低电平。复位后其状态为 0。
   以上所有寄存器的具体分配及含义见教材对应章节(P101-103)。


第三节:A/D 转换器
   在 X24X 系列器件中,配置了一个双十位模拟数字转换器模块(ADC)。使用这
个片内转换器,用户不必要在片外扩展同类器件,就可以方便地把电压、电流等模
拟信号输入到片内供 CPU 内核进行处理。


一.ADC 模块的功能及引脚
   X24X 的 ADC 模块是一个带有内部采样/保持电路的 10 位串行电容转换器。片
内具有两个独立的模拟数字转换单元,以 F240 为例,每个单元有 8 个模拟输入通
道,合计 16 个通道。
   图 3-3 是 ADC 模块的内部功能框图。




   图 3-3:ADC 模块内部功能结构图


                                                       50
  该模块有如下 4 个相关引脚:
  1.VREFHI:小于或等于 5VDC 的基准电压输入脚的正端。
  2.VREFLO:小于或等于 5VDC 的基准电压输入脚的负端。
  3.VCCA:模拟 5VDC 电源正。
  4.VSSA:模拟 5VDC 电源地。
  需要注意的是,模拟电源引线应尽可能短,并采取必要的减噪技术,以获得比
较精确的转换。
  5.ADCIN0-ADCIN15:模拟信号输入引脚。


二.模拟数字转换模块的操作
  16 个通道中,ADC0-7 属于单元 1,ADC8-15 属于单元 2。引脚 ADC0、ADC1、ADC8、
ADC9 为 A/D 与数字 I/O 复用,需要控制寄存器来设置其具体作用,这四个通道转
换精度比其它通道低。
  下面公式近似给出了转换结果:
  10 位数字结果=1023x(模拟输入电压-VREFLO)/(VREFHI-VREFLO)
  对 F240 来讲,为了保证转换精度,需要 5 到 5.5 个模拟数字转换预定标周期,
最短时间为 5.5us。用户必须选择合适的模拟输入时钟预定标因子,使得整个采样
转换时间大于或等于 5.5us。预定标因此要满足以下公式:
  SYSCLK 时钟周期 x 预定标因子 x5.5≥5.5us
  模拟数字转换模块具有以下功能:
  1)可以同时对两个不同单元内的两个输入通道进行转换。
  2)每个单元可以单独或连续采样、保持和转换。
  3)每个单元使用一个二级 FIFO 结果寄存器来储存转换结果值,如果第三次转
换时,前两次结果还没有被读取,则第一次转换的结果会丢失。
  4)转换操作可由软件指令、外部引脚信号跳变、通用定时器的定时/比较输出
和捕获引脚上的跳变等事件来启动。
  5)ADC 的控制寄存器是可投影的(带缓存)。即任何时候可以更新控制寄存
器而不影响当前操作,新值将被送入缓存寄存器,工作寄存器将在当前操作完成后,
才载入缓存寄存器的新值。
  6)每次转换结束后,将设置中断标志。如果该中断未被屏蔽且被使能,将产
生中断请求。


三.控制寄存器
  共有 4 个 16 位控制寄存器用于 ADC 模块的控制:


                                                      51
          1)ADCTRL1:模拟数字转换控制寄存器 1。映射到 7032h。
          2)ADCTRL2:模拟数字转换控制寄存器 2。映射到 7034h。
          3)ADCFIFO1:模拟数字转换单元 1 的两级 FIFO 结果寄存器。映射到 7036h。
          4)ADCFIFO2:模拟数字转换单元 2 的两级 FIFO 结果寄存器。映射到 7038h。
       这些寄存器被映射到局部数据存储单元,下面是其布置及说明。
1.ADCTRL1 的作用与配置
       ADCTRL1 主要用于控制模拟数字转换的启动、转换的使能/禁止、中断使能与
禁止以及转换的结束。下图给出了其位布置:
    15              14            13      12       11         10          9           8
Suspendsoft   Suspendfree   ADCIMASTAR   ADC2EN   ADC1EN   ADCCONRUN   ADCINTEN   ADCINTFLAG



   7            6             5           4         3          2           1          0
 ADCEOC                  ADC2CHSEL                         ADC1CHSEL                ADCSOC
       图 3-4:ADCTRL1 位布置图
       下表是其功能说明:




                                                                                          52
2.ADCRTL2 的作用与配置
  该寄存器的作用是设置模拟数字转换模块输入时钟的预定标因子、转换模式、
仿真操作,并显示了模拟数字转换模块的 FIFO 结果寄存器的状态。
  下图是其位布置图:
 15          14        13       12          11        10          9               8
                     Reserved                       ADCEVSOC   ADCEXTSOC   Reserved


  7              6      5       4               3      2           1              0
      ADCFIFO2       Reserved        ADCFIFO1       PLLPM(0)          ADCPSCALE
  图 3-5:ADCTRL2 位布置图
  该控制寄存器各位的含义见下表:




                                                                                      53
3.ADCFIFO1、ADCFIFO2 的作用与配置
     模拟数字转换模块的转换结果寄存器事实上是一个 2 级先入先出堆栈,用来包
含 10 位转换结果。它们是只读寄存器,复位时这些寄存器被清零。
     下图是其位排列:
15   14     13   12   11      10   9    8    7    6    5    4   3   2   1   0
D9   D8     D7   D6   D5      D4   D3   D2   D1   D0   0    0   0   0   0   0
     图 3-6:ADCFIFOx 的位布置图
     位号               名称                                   功能
     15-6             D9-D0        保存 10 位转换结果。
     5-0                0          保留,读操作时返回 0。


                                                                            54
   关于这几个寄存器,有几点需要说明的是:
   1)操作前一定要用 ADC1CHSEL、ADC2CHSEL 选择要转换的通道。
   2)如果需要由软件立即启动转换,则设置 ADCIMSTART 为 1;如果需要事件管
理器同步启动,则设置 ADCEVSOC 为 1;如果需要外部引脚信号(即外部引脚
ADCSOC/IOPCO)同步启动,则设置 ADCEXTSOC 为 1。
   3)读取结果前要测试转换是否完成(检测 ADCEOC)及结果寄存器的状态(检
测 ADCFIFOx),以免出错。同时注意结果放在结果寄存器的高十位。
   4)当 ADCCONRUN 设置为 1,即连续运行时,无须启动信号 ADCSOC。此时,系
统连续快速对输入信号进行转换。


第四节:看门狗/实时中断模块

   看门狗/实时中断电路(WD/RTI)的作用是出现程序跑飞或死机等异常情况时
使系统迅速复位,可使系统自动恢复工作。


一.看门狗/实时中断模块概述
(一)作用和原理
   该模块可以按照用户设定的时间间隔产生中断。如果软件运行进入一个不正常
的循环或 CPU 硬件运行出现异常时,看门狗电路就出现溢出,引发系统复位。
   该电路能对系统的绝大多数异常状况进行清除,因此,看门狗模块保证了系统
运行的可靠性和完整性。
   其原理实际上很简单,那就是看门狗模块设置了一个定时计数器,在程序正常
运行时,我们可以通过软件定期清除计数器,以免它产生溢出。如果产生溢出,则
引发系统复位。一般地,在程序和硬件系统正常工作时,完全可以按时“喂狗”,
使得系统不被复位;当出现程序跑飞,或硬件系统因干扰死机等情况时,就不可能
按时“喂狗”,从而出现溢出,引起系统自动复位。
(二)逻辑构成
   该模块电路逻辑如图 3-7 所示,包括两部分——看门狗定时器(WD)和实时中
断定时器(RTI)。
1.WD 定时器逻辑包括:
   1)8 位 WD 计数器,在数据溢出时,产生系统复位。
   2)7 位自由运行计数器。可以通过 WD 计数器预定标器实现 WD 计数器数据的
装入。




                                              55
 3)WD 复位关键字寄存器(WDKEY),当正确格式数据被写入时,可以清除 WD
计数器,否则触发一次系统复位。




 图 3-7:看门狗/实时中断模块的结构框图
 4)WD 标志位(WDFLAG)。用于指示 WD 是否产生系统复位。
 5)WD 检查位。如果 WD 操作异常,就触发系统复位。
 6)系统复位后,WD 定时器操作自动激活。
 7)WD 预定标器。


                                        56
2.WD/RTI 模块的相关寄存器
   包括如下五个寄存器,它们控制着整个模块的操作:
   1)RTI 计数器寄存器 RTICNTR,包含 RTI 计数器的值。被映射到局部数据存储
器的 7021h。
   2)WD 计数器寄存器 WDCNTR,包含 WD 计数器的值。被映射到局部数据存储器
的 7023h。
   3)WD 复位关键字寄存器 WDKEY,当 55h 和 AAh 顺序写入该寄存器时,可清除
WDCNTR 的内容。被映射到局部数据存储器的 7025h。
   4)RTI 控制寄存器 RTICR,包含了 RTI 标志位、使能位、预定标因子选择位。
被映射到局部数据存储器的 7027h。
   5)WD 控制寄存器 WDCR,包含了 WD 标志位、使能位、预定标因子选择位。被
映射到局部数据存储器的 7029h。
   以上所有寄存器都是 8 位的,占据其 16 位映象的低字节,高字节被保留。


二.看门狗定时器的操作
   WD 定时器独立于 CPU 操作而运行,用来监控系统的软件和硬件运行情况,当
出现异常时,WD 定时器的数据溢出可以触发一个系统复位事件。
   该器件的操作要点如下:
   1.WD 时钟预定标:
   WDCNTR 是一个 8 位增计数器,计数所需要的时钟可以由 WDCLK 直接提供或由
WDCLK 经过预定标来提供。模块预定标器的 7 位自由运行计数器(free-running)
有 6 个抽头,可以提供 6 种时钟选择,该选择通过预定标因子(WDPS2-0)来实现。
自由运行计数器只有在系统复位时才能被复位。
   WDPS2-0 分别组合为 000、001-111 时,频率抽头分别对应 WDCLK 及自由运行
计数器的输出 1、1、1/2、1/4、1/8、1/16、1/32、1/64,亦即 WDCLK 的 1/n 倍。
   2.WD 定时器的有效条件:
   WD 定时器在正常运行、IDLE1、IDLE2、PLL 低功耗的方式下均正常工作。只有
在振荡器低功耗方式下,由于 WDCLK 被关闭,WD 电路才被关闭。
   3.WD 定时器的复位:
   WD 定时器可以被复位,按照 55h+AAh 的固定组合向 WDKEY 寄存器中写入代码
时,将触发 WDCNTR 的一次复位。写入 55h 允许 WDCNTR 复位,接着写入 AAh 进行复
位。任何其它的 55h 和 AAh 组合将不引起系统复位,但无法复位 WDCNTR,在它溢
出后将引发系统复位。但如任何其他代码被写入 WDKEY,都立即引起整个系统复位。
   4.看门狗引发系统复位的条件:


                                                     57
   在计数时钟的驱动下,WDCNTR 将不断进行增计数,在发生溢出前,只要软件
对其进行复位操作,整个系统就将正常工作下去。亦即在溢出周期内,定时给 WDKEY
写入合适的关键字,则 WDCNTR 不断被复位为零,使得它无法产生溢出。一旦溢出
发生,则系统复位被触发。
   5.WDFLAG 标志:
   在 WDCNTR 溢出发生或向 WDKEY 寄存器写入非法关键字都将置位 WDFLAG 标志。
用户中断服务程序可以通过读该标志位来确定复位源,但也要由用户程序来清零。
   6.禁止 WD 运行:
   有时,可能需要禁止 WD 定时器的运行,如系统开发和调试等。此时,可以设
置 WDCR 的 WDDIS 位为 1,以禁止 WD 定时器的运行。
   7.WD 检查位:
             位
   WDCR 寄存器中, 5-3 即 WDCHK2-0 必须是 101。它不断与常量 101 进行比较,
如果不一致,也将触发一次系统复位。错误的原因可能上错误写 WDCR、尖峰电压、
干扰等原因造成。


三.RTI 定时器的操作
   RTI 可根据用户设定的频率产生周期性的中断信号,这些周期性中断信号的产
生可以由软件来使能和禁止。
   1.RTI 定时器时基由自由运行计数器的 1/4、1/16、1/64、1/128 及由其 1/128
抽头再次通过 RTICNTR 产生的 4 个抽头 1/256、1/512、1/2048、1/16384 来提供。
这样,通过对 WDCLK 的 RTI 计数,在溢出时发送 RTI 中断信号。这个信号是周期性
的,而且周期可以被编程。
   周期由 RTICR 的 RTIPS2-0 来设置,000-111 组合分别对应抽头 1/4、1/16、1/64、
1/128、1/256、1/512、1/2048、1/16384。抽头数据越大,中断发生频率越低,具
体频率是 WDCLK 的 1/n。
   2.需要了解的是,自由运行计数器只有在系统复位或溢出时才被清除,程序
无法写该计数器。
   3.RTI 的中断可以通过软件来使能和禁止。对于不同型号的器件,中断向量
可能不同,但 CPU 的访问方式是一样的。
   4.RTI 定时器可以通过 RTIENA 位来使能和禁止。
   5.RTIFLAG 标志:
   在 RTI 定时器(不是 RTICNTR)溢出时将置位 RTIFLAG 标志。用户中断服务程
序可以通过读该标志位来确定中断源,但该标志也要由用户程序来清零。




                                                        58
四.控制寄存器
   如前述,该模块包括五个寄存器,它们控制着整个模块的操作。
   所有这些寄存器都是 8 位的,占据其 16 位映象的低字节,高字节被保留。
(一)实时中断计数寄存器 RTICNTR
   存放实时计数器的值,被映射到局部数据存储器的 7021h。
   它对自由运行计数器的 1/128 抽头进行计数,分别产生 4 个计数器输出抽头
1/256、1/512、1/2048、1/16384。这个计数器在正常运行、IDLE1、IDLE2、PLL
低功耗方式均不停止。
   用户可以对该计数器进行读写访问,写任何值都会将其清零,复位后寄存器也
将清零。
(二)看门狗计数寄存器 WDCNTR
   存放看门狗计数器的值,被映射到局部数据存储器的 7023h。
   它根据看门狗定标器设置的抽头进行计数,定标由控制寄存器的预定标因子
WDPS2-0 决定。当计数器发生溢出时,将引发一次系统复位。
   但在系统复位前,将有一个 WD 周期(WD 或 WD 预定标后的周期)的延迟。在
这个周期内,如果通过写入正确的关键字到 WDKEY,还可以有效地使 WDCNTR 清零,
从而阻止系统复位发生。
   用户可以对该计数器进行读访问,复位后寄存器将清零。
(三)WD 复位关键字寄存器 WDKEY
   当 55h 和 AAh 顺序写入该寄存器时,可清除 WDCNTR 的内容。它被映射到局部
数据存储器的 7025h。
   任何一个非法代码被写入,将立即引发一个系统复位。写入 55h 允许 WDCNTR
复位,接着写入 AAh 进行复位。任何其它的 55h 和 AAh 组合将不引起系统复位,但
无法复位 WDCNTR,在它溢出后将引发系统复位。
   用户可以对该计数器进行读写访问。复位后寄存器也将清零。
(四)RTI 控制寄存器 RTICR
   包含了 RTI 标志位、使能位、预定标因子选择位,被映射到局部数据存储器的
7027h。
   用户可以对该计数器进行读写访问。复位后寄存器也将清零。
  15        14     13      12         11        10       9        8
                               Reserved
   7        6      5       4              3     2        1        0
RTIFLAG   RTIENA        Reserved              RTIPS2   RTIPS1   RTIPS0
   图 3-8:RTICR 位布置图


                                                                      59
   上图给出了 RTICR 的位分布。各位含义前面已经介绍,简要概括如下:
   1)RTIFLAG:在 RTI 定时器溢出时将置位 RTIFLAG 标志。用户中断服务程序可
以通过读该标志位来确定中断源,但该标志也要由用户程序来清零。
         0:没有溢出。
         1:发生溢出。
   2)RTIENA:实时中断使能位。
         0:清除未被响应的挂起 RTI 中断及禁止未来的 RTI 中断。
         1:当 RTIFLAG 被置 1 时,使能 RTI 中断。
   3)RTIPS2-0:实时中断预定标因子选择位。
   000-111 组合分别对应抽头 1/4、1/16、1/64、1/128、1/256、1/512、1/2048、
1/16384。抽头数据越大,中断发生频率越低,具体频率是 WDCLK 的 1/n。
   如当代码组合为 001 时,抽头为 1/16,则中断间隔频率为:
   WDCLK/16=16384/16=1024(Hz)
(五)WD 控制寄存器 WDCR
   包含了 WD 标志位、使能位、预定标因子选择位,被映射到局部数据存储器的
7029h。
   用户可以对该计数器进行读写访问,复位后寄存器也将清零。
   下图是其位布置图:
  15       14       13       12         11       10       9       8
                                 Reserved
  7         6       5        4              3     2       1       0
WDFLAG    WDDIS   WDCHK2   WDCHK1     WDCHK0    WDPS2   WDPS1   WDPS0
   图 3-9:WDCR 位布置图
   各位的含义概括如下:
   1)WDFLAG:看门狗标志位。
   在 WDCNTR 溢出发生或向 WDKEY 寄存器写入非法关键字都将置位 WDFLAG 标志。
用户中断服务程序可以通过读该标志位来确定复位源,但也要由用户程序来清零。
         0:没有发生看门狗复位。
         1:发生了看门狗复位。
   2)WDDIS:看门狗禁止位。               (程序开发模式,
                  仅当系统状态寄存器的 HP0=1       FLASH
EEPROM 编程状态)时,看门狗可以被禁止。
         0:看门狗被使能。
         1:看门狗被禁止。
   3)WDCHK2-0:看门狗检查位。


                                                                      60
   WDCHK2-0 必须是 101。它不断与常量 101 进行比较,如果不一致,也将触发一
次系统复位。错误的原因可能是错误写 WDCR(非 101 写入)、尖峰电压、干扰等
原因造成。
         101:看门狗正常运行。
         其它:系统复位。
   4)WDPS2-0:看门狗预定标因子,用于选择看门狗计数器的计数溢出抽头。
   WDPS2-0 分别组合为 000、001-111 时,分别对应 WDCLK 及自由运行计数器的
输出 1、1、1/2、1/4、1/8、1/16、1/32、1/64,亦即 WDCLK 的 1/n 倍。


******
   前面我们介绍了 2000 系列 DSP 最常用的几种挂在外设总线上的外设,如锁相
环、数字 I/O、ADC 转换和看门狗,其它还有诸如串行外设接口(SPI)、串行通讯
接口(SCI)、CAN 控制器模块等,由于课时关系,我们不再进行介绍,感兴趣的
学员,可以自行查阅相关资料。




                                                      61
第四章:事件管理器
   为了方便快速地进行特定的应用控制,DSP 芯片针对应用工程的需求,提供了
常用的片上事件管理器——即特定的典型工程控制环节模块。这是 DSP 有别于传统
单片微处理器的重要特点。


第一节:概述
   TM320x24x 的事件管理器模块是针对电机控制设计的,包括定时器、比较单元、
正交脉冲编码电路、PWM 脉冲产生电路等。这就为电机的自动化控制提供了极大的
便利,减少了大量的设计任务和成本。


一.功能及引脚
   事件管理器模块 EV 的结构如图 4-1。主要包含:
   1.3 个通用定时器。有 3 个比较/输出引脚:T1PWM/T1CMP、T2PWM/T2CMP、
T3PWM/T3CMP。
   通用定时器可以选择 CPU 时钟或外部时钟。如果选择外部时钟,则引脚 TMRCLK
接外部时钟源。引脚 TMKDIR 用于确定计数方向。
   2.3 个全比较单元。有 6 个比较/PWM 输出引脚:PWM1/CMP1、PWM2/CMP2、
PWM3/CMP3、PWM4/CMP4、PWM5/CMP5、PWM6/CMP6。
   3.3 个单比较单元。有 3 个比较/PWM 输出引脚:PWM7/CMP7、PWM8/CMP8、
PWM9/CMP9。
   4.PWM 电路。主要包括空间矢量电路、死区产生电路和输出逻辑。
     4
   5. 个捕获单元。和正交编码 QEP 电路共用 4 个输入脚:CAP1/QEP1、CAP2/QEP2、
CAP3、CAP4。
   6.正交编码 QEP 电路。和捕获单元共用两个引脚:CAP1/QEP1、CAP2/QEP2。
   7.事件管理器模块中断控制电路。
   下面给出了 EV 模块的引脚清单:。
    1.   TIPWM/T1CMP:EV 模块通用定时器的比较/PWM 输出。
    2.   TIPWM/T2CMP:EV 模块通用定时器的比较/PWM 输出。
    3.   TIPWM/T3CMP:EV 模块通用定时器的比较/PWM 输出。
    4.   TMRCLK:EV 模块通用定时器外部时钟输入。
    5.   TMRDIR:EV 模块通用定时器外部方向输入。
    6.   PWM1/CMP1:EV 模块全比较单元的比较/PWM 输出。
    7.   PWM2/CMP2:EV 模块全比较单元的比较/PWM 输出。
    8.   PWM3/CMP3:EV 模块全比较单元的比较/PWM 输出。


                                                      62
图 4-1:事件管理器功能框图


                  63
    9.      PWM4/CMP4:EV 模块全比较单元的比较/PWM 输出。
    10.     PWM5/CMP5:EV 模块全比较单元的比较/PWM 输出。
    11.     PWM6/CMP6:EV 模块全比较单元的比较/PWM 输出。
    12.     PWM7/CMP7:EV 模块单比较单元的比较/PWM 输出。
    13.     PWM8/CMP8:EV 模块单比较单元的比较/PWM 输出。
    14.     PWM9/CMP9:EV 模块单比较单元的比较/PWM 输出。
    15.     CAP1/QEP1:EV 模块捕获单元 1 的输入引脚/QEP 电路输入 1。
    16.     CAP2/QEP2:EV 模块捕获单元 2 的输入引脚/QEP 电路输入 2。
    17.     CAP3:EV 模块捕获单元 3 的输入引脚。
    18.     CAP4:EV 模块捕获单元 4 的输入引脚。
   要注意的是,所有输入引脚信号至少要保持两个 CPU 时钟的上升沿,才能被
EV 模块识别,所以输入信号必须至少保持两个时钟周期。


二.控制与状态寄存器
   EV 模块一共有 64 个映射局部数据存储单元,用于其控制、状态存储器,地址
为 7400h-743Fh。
   下面(教材 P178 表 4.2-P179 表 4.5)罗列了所有这些寄存器。


   表 4-1:通用定时器单元使用的寄存器
    地址             寄存器                  名称
    7400h          GPTCON         通用定时器控制寄存器
    7401h           T1CNT        通用定时器 1 的计数寄存器
    7402h          T1CMPR        通用定时器 1 的比较寄存器
    7403h           T1PR         通用定时器 1 的周期寄存器
    7404h           T1CON        通用定时器 1 的控制寄存器
    7405h           T2CNT        通用定时器 2 的计数寄存器
    7406h          T2CMPR        通用定时器 2 的比较寄存器
    7407h           T2PR         通用定时器 2 的周期寄存器
    7408h           T2CON        通用定时器 2 的控制寄存器
    7409h           T3CNT        通用定时器 3 的计数寄存器
    740Ah          T3CMPR        通用定时器 3 的比较寄存器
    740Bh           T3PR         通用定时器 3 的周期寄存器
    740Ch           T3CON        通用定时器 3 的控制寄存器



                                                      64
表 4-2:全/单比较单元使用的寄存器
地址        寄存器               名称
7411h     COMCON         比较控制寄存器
7413h      ACTR        全比较动作控制寄存器
7414h     SACTR        单比较动作控制寄存器
7415h     DBTCON       死区定时器控制寄存器
7417h     CMPR1        全比较单元比较寄存器 1
7418h     CMPR2        全比较单元比较寄存器 2
7419h     CMPR3        全比较单元比较寄存器 3
741Ah     SCMPR1       单比较单元比较寄存器 1
741Bh     SCMPR2       单比较单元比较寄存器 2
741Ch     SCMPR3       单比较单元比较寄存器 3


表 4.3 捕获单元和正交编码脉冲电路使用的寄存器
地址        寄存器               名称
7420h     CAPCON         捕获控制寄存器
7422h     CAPFIFO     捕获单元先入先出状态寄存器
7423h    CAP1FIFO     捕获单元 1 的先入先出堆栈
7424h    CAP2FIFO     捕获单元 2 的先入先出堆栈
7425h    CAP3FIFO     捕获单元 3 的先入先出堆栈
7426h    CAP4FIFO     捕获单元 4 的先入先出堆栈


表 4.4 中断控制逻辑使用的寄存器
地址        寄存器               名称
742Ch     EVIMRA         中断控制寄存器
742Dh     EVIMRB         中断控制寄存器
742Eh     EVIMRC         中断控制寄存器
742Fh     EVIFRA         中断标志寄存器
7430h     EVIFRB         中断标志寄存器
7431h     EVIFRC         中断标志寄存器
7432h     EVIVRA         中断向量寄存器
7433h     EVIVRB         中断向量寄存器
7434h     EVIVRC         中断向量寄存器




                                       65
三.功率驱动保护
   事件管理器有一个引脚 PDPINT,用于功率驱动保护中断。当该引脚为低电平
时,如果没有被屏蔽,将使得所有 EV 模块输出被设置成高阻状态,并产生外部中
断。该信号至少要保持 4 个 CPU 时钟周期,才能被可靠响应。该中断无论是否被屏
蔽,对应的中断标志寄存器的标志位均将置 1。
   该中断的设置目的是用于保护外部电动机的过载、过流、过压等,及时响应并
向系统报告。


四.中断控制系统
   事件管理器(EV)模块共有三组中断信号,分别对应于 CPU 的三个中断输入:
INT2、INT3、INT4。这三组中断各有自己独立的中断标志寄存器:EVIFRA、EVIFRB、
EVIFRC,中断向量寄存器:EVIVRA、EVIVRB、EVIVRC,和中断屏蔽寄存器:EVIMRA、
EVIMRB、EVIMRC。
   标志置位与否,与中断是否屏蔽无关。屏蔽寄存器在对应位为 1 时,中断被开
放,为 0 被屏蔽。只有当屏蔽寄存器的对应位为 1,且标志位被置位为 1(表示已
经有中断请求),CPU 才响应中断。
   标志位的复位有两种方式:
   1)中断被响应,用户软件读取该组的中断向量寄存器。
   2)软件改写中断标志寄存器。


第二节:通用定时器
   事件管理器(EV)模块中有 3 个通用定时器(GPT)。在实际应用中,这些定
时器能产生用如下用途的信号:
   1)系统中需要的计数信号。
   2)离散控制系统的采样周期。
   3)QEP 电路的时基。
   4)捕获单元的时基。
   5)比较单元的时基。
   等。


一.通用定时器的结构
(一)结构逻辑框图
   下面是通用定时器的结构框图:




                                                  66
  图 4-2:通用定时器结构框图
(二)主要构成
  每个通用定时器包含如下部分:
  1.1 个可读写的 16 位增/减计数器。
  2.1 个可读写的 16 位比较寄存器。
  3.1 个可读写的 16 位周期寄存器。
  4.1 个可读写的 16 位控制寄存器。
  5.可用于内部及外部时钟输入的可编程预定标器。
  6.控制、中断和输出处理。
  7.一个通用定时器比较/输出引脚 TxPWM/TxCMP(X=1、2、3)。
(三)GPT 的输入信号
  它可接受如下输入信号,这些信号主要是 GPT 运行所需要的时钟:
  1.直接来自 CPU 内部的时钟 CPUCLK。
  2.外部时钟输入 TMKCLK,最大频率为 CPUCLK 的 1/4。
  3.定时器的方向输入信号 TMKDIR。
  4.复位信号 RESET。
  GPT2、GPT3 可以组成一个 32 位定时器,这时,GPT2 的溢出作为 GPT3 的输入
信号。GPT 和 QEP 电路一起使用时,QEP 产生 GPT 需要的时钟和方向信号。


                                               67
(四)GPT 的输出信号
  根据不同的控制寄存器设置,GPT 可以产生如下输出信号。
  1.通用定时器比较/PWM 输出信号,由引脚 TxPWM/TxCMP 输出。
  2.至模拟/数字转换模块 ADC 的模数转换启动信号。
  3.至本身比较逻辑或全/单比较单元的下溢、上溢、比较匹配和周期匹配信号。
  4.计数方向指示位。


二.通用定时器的计数模式
  每个通用定时器有 6 个可选择的计数模式:
  1)停止/保持模式。         2)单增计数模式。
  3)连续增计数模式。         4)定向增/减计数模式。
  5)单增/减计数模式。        6)连续增/减计数模式。
(一)停止/保持模式
  该状态下,GPT 停止计数操作且保持当前状态。此时,定时器/计数器、比较
输出、预定标计数器都保持不变。
(二)单增计数模式
  单增计数模式下,GPT 内部计数器对定标后的时钟输入进行计数,直到计数器
寄存器(TxCNT)的值与周期寄存器(TxPR)的值匹配。随后,将完成如下操作:
  1)下一个时钟的上升沿,GPT 将计数器复位为 0。
  2)复位定时器计数操作使能位(TxCON/Bit6),禁止计数器的后续操作。
  3)计数器复位时钟的下降沿,置位周期中断标志。
  4)计数器复位后的下一个时钟的下降沿,置位下溢中断标志。
  用户可以通过设置 TxCON 的定时器使能位来重新启动 GPT 的计数操作。




  图 4-3:单增计数模式时序图


                                           68
  周期中断信号、下溢中断信号等均可以被设置用来启动 ADC 转换。
  如果 TxCNT 的初始值(0000-FFFFh)小于周期寄存器的值,则向上计数到匹配
为止;如果初始值大于周期寄存器的值,则向上计数到 FFFFh,然后回零,再向上
计数到和周期寄存器的值匹配。
  向上计数到 FFFF 时,通用定时器的上溢标志将在两个 CPU 时钟周期后被设置。
  在该模式下,GPTCON 的计数方向指示位为 1。外部或内部 CPU 时钟都可以被用
做定时器输入时钟。TMRDIR 引脚上的输入信号将被通用定时器忽略。
(三)连续增计数模式
  这个模式下,GPT 对定标后的输入脉冲进行计数,TxCNT 和周期寄存器 TxPR
的值匹配后,自动清零。然后,隔一个定标时钟周期,再重新开始计数,如此连续
循环。
  达到匹配值时,将进行如下操作:
  1)下一个时钟的上升沿,GPT 将计数器复位为 0。
  2)计数器复位时钟的下降沿,置位周期中断标志。
  3)计数器复位后下一个时钟的下降沿,置位下溢中断标志。
  4)计数器复位后下一个时钟的上升沿,重新从 0 开始计数。
  计数器时序图见图 4-4。




  图 4-4:连续增计数模式时序图
  除了第一个周期外,以后的每个周期等于 TxPR+1 个定标时钟周期。
  如果 TxCNT 的初始值(0000-FFFFh)小于周期寄存器的值,则向上计数到匹配
再从零开始计数;如果初始值大于周期寄存器的值,则向上计数到 FFFFh,然后回
零,再向上计数。
  实际上,除了连续循环计数外,周期、下溢、上溢中断等标志的设置和相关动
作,都由各自的匹配事件产生,和单增计数模式是一样的。




                                            69
  在该模式下,GPTCON 的计数方向指示位为 1。外部或内部 CPU 时钟都可以被用
做定时器输入时钟。TMRDIR 引脚上的输入信号将被通用定时器忽略。
(四)定向增/减计数模式
  这种方式一般用于计数器 1 和 3。此时,TMRDIR 引脚上的电平用于决定计数方
向。高电平为增计数,低电平为减计数。
  初始值可以是 0000-FFFFh 的任何值。具体计数方法分如下几种情况:
  1.当 TxCNT 初始值小于 TxPR 时:
  1)当 TMRDIR 为低电平时,向下计数到 0。只要 TMRDIR 维持低电平,TxCNT
将维持 0 不变。
    当
  2) TMRDIR 为高电平时,向上计数到和 TxPR 匹配。只要 TMRDIR 维持高电平,
TxCNT 将维持匹配值不变。
  2.当 TxCNT 初始值等于 TxPR 时:
  1)当 TMRDIR 为低电平时,向下计数到 0。只要 TMRDIR 维持低电平,TxCNT
将维持 0 不变。
  2)当 TMRDIR 为高电平时,只要 TMRDIR 维持高电平,TxCNT 将维持匹配值不
变。
  3.当 TxCNT 初始值大于 TxPR 时:
    当
  1) TMRDIR 为低电平时,向下计数到匹配值,然后继续计数到 0。只要 TMRDIR
维持低电平,TxCNT 将维持 0 不变。
    当
  2) TMRDIR 为高电平时,向上计数到 FFFFh。只要 TMRDIR 维持高电平,TxCNT
将维持 FFFFh 不变。
  下图是定向增/减计数模式的时序图。




  图 4-5:定向增/减计数模式时序图
  该模式的周期、下溢、上溢中断等标志的设置和相关动作,都由各自的匹配事
件产生,和单增计数模式是一样的。


                                                 70
  定时器时钟可以使用内部或外部时钟,TMRDIR 的电平则决定了计数器的方向。
(五)单增/减计数模式
  在该计数模式下,通用定时器/计数器对定标后的时钟脉冲进行计数,首先增
计数到匹配值,然后改变计数方向,减计数到 0 为止。此时,完成一个计数周期,
并做如下操作:
  1)复位定时器使能位(TxCON/Bit6)来禁止继续操作。
  2)复位预定标因子。
  3)停止计数并保持当前状态。
  如果 TxCNR 的初值小于 TxPR 的值,则先增计数到匹配值,再减计数到零。如
初始值等于匹配值,则直接减计数到 0。如初始值大于匹配值,则先计数到 FFFFh,
然后回零,再增计数到匹配值,再反向减计数到零。
  图 4-6 是该模式的时序图。




  图 4-6:单增/减计数模式时序图
  该模式的周期、下溢、上溢中断等标志的设置和相关动作,都由各自的匹配事
件产生,和单增计数模式是一样的。但要注意,此模式下的周期匹配事件是在计数
周期中间过程中发生的,和前几种方式有区别。
  用户可以通过写 1 到使能位(TxCON/Bit6)来重新启动计数过程。
  当计数方向为增时,GPTCON 的方向指示位为 1,方向为减时,指示位为 0。外
部 TMRDIR 被忽略。外部时钟或内部 CPU 时钟都可以用做定时器的时钟输入。
(六)连续增/减计数模式
  这种模式下,每当计数器复位为零时,将重复单增/减计数模式下的操作;无
须任何硬件或用户程序的干预,就能进行连续周期性计数。
  如果 TxCNR 的初值小于 TxPR 的值,则先增计数到匹配值,再减计数到零,然
后循环计数。如初始值等于匹配值,则直接减计数到 0,再继续循环。如初始值大
于匹配值,则先计数到 FFFFh,然后回零,再循环计数。




                                            71
  图 4-7:连续增/减计数模式
  该模式的周期、下溢、上溢中断等标志的设置和相关动作,都由各自的匹配事
件产生,和单增计数模式是一样的。
  当计数方向为增时,GPTCON 的方向指示位为 1,方向为减时,指示位为 0。外
部 TMRDIR 被忽略。外部时钟或内部 CPU 时钟都可以用做定时器的时钟输入。


三.通用定时器的比较操作
  各通用定时器都有一个比较寄存器 TxCMPR 和一个比较/PWM 引脚 TxPWM/TxCMP,
定时器的值总是和对应 TxCMPR 的值相比较,当两者相等时,就发生比较匹配事件。
  通过将 TxCON/Bit1 设置为 1,可以使能定时器的比较操作。
  出现比较匹配事件时,将进行如下操作:
  1)2 个 CPU 时钟周期后,定时器比较中断标志被设置。
  2)                   1
    如果通用定时器不处于定向增减操作模式, 个 CPU 时钟周期后,根据 GPTCON
中位的配置情况,对应比较/PWM 输出引脚发生信号跳变。
  3)如果已经使能定时器比较中断标志位来启动 ADC 转换,则当该标志被置位
时,同时产生 AD 转换所需要的启动信号。
  4)如定时器比较中断未被屏蔽,且没有优先级更高的中断被挂起,则比较中
断标志产生的中断请求将被送到 DSP 内核。
  如果比较操作被禁止,对应比较/PWM 输出处于高阻态,上述动作也不会发生。


四.比较/PWM 输出
  除了比较匹配输出外,通用定时器的比较/PWM 输出引脚的另一个重要功能,
就是产生 PWM 输出信号,这个信号对位置控制是非常有用的。
  内部的对称/非对称波形发生器可以根据 GPT 计数模式的不同,而在比较/PWM
输出引脚产生需要的对称、非对称 PWM 波形。


                                                72
(一)非对称波形的产生
  GPT 处于单增或连续增计数模式时,在比较/PWM 输出引脚上产生非对称波形。
如果引脚高电平有效,引脚信号的变化顺序是:
  1.计数开始前,输出为 0。
  2.信号保持不变,直到比较匹配事件发生。
  3.发生比较匹配事件时,引脚产生电平跳变。
  4.信号保持不变,直到该计数周期结束。
  5.如果下一个计数周期的比较寄存器值不是 0,则发生周期匹配事件后的那
个周期结束时,信号复位为 0。
  关于比较寄存器的值,还有如下三种特殊情况:
  1)如计数周期开始时,比较值为 0,则在整个计数周期内,      (高)
                              引脚一直为 1  。
  2)如果比较值大于周期寄存器的值,则整个计数周期都维持为 0。
  3)如果比较值等于周期寄存器的值,则在周期结束前的最后一个计数脉冲内
输出一个计数时钟脉冲。



                                      TxCMPR>TxPR
                                      时,则无此脉
                                      冲输出。




  图 4-8:增计数模式时,比较/PWM 引脚的非对称 PWM 波形
  上图给出了 GPT 处于单增或连续增计数模式时,比较/PWM 引脚波形图。
(二)对称波形的产生
  GPT 处于单增/减或连续增/减计数模式时,在比较/PWM 输出引脚上产生对称波
形。如果引脚高电平有效,引脚信号的变化顺序是:
  1.计数开始前,输出为 0。
  2.信号保持不变,直到比较匹配事件发生。
  3.发生比较匹配事件时,引脚产生电平跳变。
  4.信号保持不变,直到第二次比较匹配事件发生。
  5.第二次比较匹配事件发生时,引脚信号产生反向跳变。
  6.信号保持不变,直到该计数周期结束。


                                           73
  第一次匹配指增计数期间      ,
             (前半周期) 第二次匹配指减计数期间(后半周期)。
  关于比较寄存器的值,还有如下几种特殊情况(正逻辑):
  1)如周期开始时,比较值为 0,输出将被置 1,直到下次比较匹配事件发生。
  2)如果因比较匹配事件导致输出从 0 到 1 跳变后,后半个周期内比较值为 0,
则输出信号将保持 1,直到该计数周期结束。
  3)如果输出在下一计数周期到来时保持高电平,而新周期比较值为 0,则继
续保持 1 不变(1-1);如果下一个计数周期的比较寄存器值不是 0,则该计数周
期结束时,信号复位为 0(1-0)。
  4)如果前半周期比较值大于或等于周期寄存器的值,则信号将不跳变。但如
下半周期发生周期匹配事件,则输出电平仍然发生跳变。
  总结一下,实际上这个 PWM 对称输出的规律就是:
  1)标准的 PWM 对称波形应在增/减计数的对应前后半周各发生一次匹配事件,
每次发生匹配事件,信号将跳变。此时无论前后半周,都有 0<TxCMPR<TxPR。
  2)无论前后半周开始时,TxCMPR=0,则视为匹配发生在计数累加值零点。
  3)无论前后半周开始时,TxCMPR>TxPR,则视为没有匹配条件,信号将不跳变。




  图 4-9:增/减计数模式时,比较/PWM 引脚的对称 PWM 波形
  上图给出了 GPT 处于单增/减或连续增/减计数模式时,比较/PWM 引脚波形图。
(三)输出逻辑
  GPT 的输出逻辑用于调整对称/非对称波形的输出,以获得不同需求的信号。
  通过设置 GPTCON 的有关设置,可以使 PWM 输出引脚高电平有效、低电平有效、
强制高或强制低。
  高电平有效时,输出波形和前述图 4-8、4-9 的波形相同。
  低电平有效时,输出波形和前述图 4-8、4-9 的波形反向。
  强制高被设置时,立即输出高电平。
  强制低被设置时,立即输出低电平。


                                            74
   在以下情况下,PWM 输出引脚被置为高阻态:
   1)GPTCON/Bit6=0。
   2)PDPINT 引脚电平为低,且该中断未被屏蔽。
   3)系统复位。
(四)定向增/减计数模式下的比较输出
   该方式下,比较/PWM 输出引脚不会发生任何变化,但比较中断系统依然有效。


五.控制寄存器
   GPT 的控制寄存器有四个,TxCON(x=1、2、3)和 GPTCON,前者用于三个定时
器的独立控制,后者用于 GPT 模块的整体控制。
(一)TxCON
   TxCON 决定了各定时器的自身操作方式,映射到局部数据存储器的 7404h、
7408h、740Ch。其位布置如图 4-10。
  15       14       13       12       11       10       9        8
 Free     Soft     TMODE2   TMODE1   TMODE0   TPS2     TPS1     TPS0
  7        6         5        4        3       2        1        0
 TSWT1   TENABLE   TCLKS1   TCLKS0   TCLD1    TCLD0   TECMPR   SELT1PR
   图 4-10:TxCON 位布置图
   具体各位含义,见下表——TxCON 控制寄存器位定义表。




                                                                       75
  TxCON 可以被用户程序读写,复位时各位清零。
(二)GPTCON
  GPTCON 决定了所有各定时器的相关操作方式,该寄存器被映射到局部数据存
储器的 7400h。其位布置如图 4-11。


                                      76
  15         14        13       12         11         10          9          8
 T3STAT    T2STAT    T1STAT   T3TOADC1   T3TOADC0   T2TOADC1   T2TOADC0   T1TOADC1
   7         6         5         4          3          2          1          0
T1TOADC0   TCOMPOE   T3PIN1    T3PIN0     T2PIN1    T2PIN0     T1PIN1     T1PIN0
    图 4-11:GPTCON 位布置图
    具体各位含义,见下表。
    GPTCON 控制寄存器位定义表——




                                                                                 77
(三)操作提示
  1.GPT 的比较/PWM 输出引脚可以被 GPTCON 设置为高电平有效、低电平有效、
强制高、强制低等。前面介绍的波形图是高电平有效的情况,低电平有效时,相位
和高电平有效相反。
  2.当通用定时器处于定向增/减计数模式时,输入引脚 TMRDIR 的电平决定了
计数方向,高电平为增计数,低电平为减计数。
  3.GPT 的事件包括:周期匹配、比较匹配、下溢、上溢。这些事件可以:
  1)产生各自的中断信号。
  2)除上溢外,其它三种事件可以做为 ADC 的启动信号,具体由 GPTCON 来设置。
  4.发生比较匹配事件时,将产生如下操作:
  1)在比较/PWM 输出引脚产生电平跳变。
  2)根据 GPTCON 中的位定义,用来启动 ADC 转换。
  3)设置相关的比较匹配中断标志。
  比较操作可以由 TxCON 的位 1 来禁止或使能。
  5.GPT 的比较寄存器和周期寄存器是可投影寄存器。数据在写入时,先写到
投影寄存器。周期寄存器值要在计数器值为 0 时,才重新从投影寄存器加载到周期
寄存器;而比较寄存器的值要根据 TxCON/Bit2、3 的设置来加载。


                                            78
六.时钟与中断
  对于通用定时器的时钟与中断,还有如下问题需要说明:
(一)时钟
  1.通用定时器的输入时钟源,可以采用内部 CPU 时钟或外部 TMRCLK。
  2.外部时钟的频率必须小于或等于 CPUCLK 的 1/4。
  3.在定向增/减方式下,通用定时器 2、3 级联为 32 位定时器时,可以使用正
交编码脉冲电路提供的时钟信号和方向信号。此时预定标因子默认为 1。
  4.实际计数脉冲要由输入时钟频率乘以预定标因子决定。
(二)定时器的级联
  通用定时器 2、3 可以级联为 32 位定时器。设置方法是:
  1.通过 TxCON/Bit11-13 为 011,把定时器设置为定向增/减计数模式。
  2.此时计数方向由 TMRDIR 决定,即我们要通过外电路提供计数方向。
  3.设置 TxCON/Bit4-5 为 10(2 输出作为 3 的输入时钟)或 11(QEP 电路提供
2、3 的时钟和方向)。
  4.此时,比较寄存器的比较事件还是 16 位的,其它三种事件都是 32 位的。
(三)同步操作
  按照下述方法实现三个定时器的同步:
  1.设置 TxCON/Bit7,使 T1 的使能位同时控制 T2、T3。
  2.设置同步操作前,把 T2、T3 的计数器初始化为不同值。
  3.设置 TxCON/Bit0,使 T1 的周期寄存器作为 T2、T3 的周期寄存器。
(四)中断
  每个通用定时器可以产生 4 种中断,3 个定时器可以产生 12 个中断。当中断
发生时,将在中断标志寄存器 EVIFRA、EVIFRB、EVIFRC 中自动设置中断标志:
  1.上溢中断:标志 TxOFINT(x=1、2、3)。
  2.下溢中断:标志 TxUFINT(x=1、2、3)。
  3.比较匹配:标志 TxCINT(x=1、2、3)。
  4.周期匹配:标志 TxPINT(x=1、2、3)。
  中断标志的设置一般是在事件发生的两个 CPU 时钟周期之后,这些中断将按照
中断系统的一般规律被系统进行屏蔽、挂起、响应等操作。


七.产生比较/PWM 输出信号
  每个定时器都有一个比较/PWM 输出引脚,因此可以产生最多三个 PWM 输出。
下面介绍使用通用定时器产生 PWM 信号输出的一般方法:


                                                   79
  1.设置 TxCON 为连续增计数方式,可以得到非对称 PWM 输出;设置连续增/
减计数模式,可以得到对称 PWM 输出。
  2.根据占空比要求,合理设置 TxCMPR 的值。
  3.设置 GPTCON,从而在比较匹配时产生一个希望的跳变逻辑(强制高、强制
低或正逻辑、负逻辑)。
  4.根据频率要求,给 TxPR 加载合理的周期寄存器值。
  连续增计数方式
    TxPR=(预定周期/定标后时钟周期)-1
  连续增/减计数方式
    TxPR=预定周期/2x 定标后时钟周期
  5.如果需要,将合适的计数器初始值加载到 TxCNT。
  6.设置 TxCON,选择合适的时钟源。
  7.设置 TxCON/Bit6 使能位,启动计数器操作。


八.通用定时器的复位
  通用定时器在发生任意复位操作时,其状态变化如下:
  1.GPTCON 的计数方向指示位被置 1。
  2.除了计数方向指示位外,控制寄存器 TxCON、GPTCON 其余各位均被置 0。
  3.通用定时器操作被禁止。
  4.所有定时器中断标志位被复位为 0。
  5.所有定时器中断屏蔽位被复位为 0,即中断被屏蔽。
  6.所有比较/PWM 输出引脚被设置为高阻态。


第三节:比较单元
  EV 模块有三个全比较单元、三个单比较单元。每个全比较单元有 2 个比较/PWM
输出引脚,每个单比较单元有 1 个比较/PWM 输出引脚。


一.单比较单元
  单比较单元时钟由通用定时器 1 或 2 提供。
  3 个单比较单元包括:
  1)3 个可读写的 16 位比较寄存器(SCMPRx,x=1、2、3),各带有一个投影
寄存器。
  2)1 个可读写的比较控制寄存器 COMCON,所有比较寄存器共享。
  3)1 个 16 位单比较动作控制寄存器 SACTR,带 1 个投影寄存器。


                                            80
  4)3 个对称/非对称波形发生器。
  5)3 个比较/PWM(3 态)输出引脚 PWMy/CMPy(y=7、8、9),极性可编程。
  6)比较和中断逻辑。
  下面是单比较单元逻辑框图:




  图 4-12:单比较单元内部结构框图
  3 个比较单元的操作与通用定时器类似,存在区别如下:
  1)单比较单元的时钟输入来源于定时器 1 或 2。
  2)单比较单元的工作特性由自身的控制寄存器 COMCON、SACTR 控制。
  单比较单元时序波形与通用定时器相同,出现匹配事件时,也将设置中断标志,
并申请中断。实际上,就是 T1CNT、T2CNT 的值和 SCMPx 进行比较操作。


二.全比较单元
  全比较单元比单比较单元控制要复杂些,分别介绍如下:
(一)全比较单元的构成
  3 个全比较单元包括:
  1)3 个可读写的 16 位比较寄存器(CMPRx,x=1、2、3),各带一个投影寄存器。
  2)1 个可读写的比较控制寄存器 COMCON,所有比较寄存器共享。
  3)1 个 16 位全比较动作控制寄存器 ACTR,带 1 个投影寄存器。
  4)6 个比较/PWM(3 态)输出脚 PWMy/CMPy(y=1、2、3、4、5、6),极性可编程。
  5)控制和中断逻辑。
  下面是全比较单元逻辑框图:


                                                   81
  图 4-13:全比较单元内部结构框图
(二)全比较单元的控制
  1.全比较单元时钟由通用定时器 1 提供。
  2.通用定时器可处于任何工作模式,定向增减方式时,比较输出不发生变化。
  3.所需要的输入信号有:
  1)控制寄存器的控制信号。
  2)来自于通用定时器 1 的计数信号、下溢信号和周期匹配信号。
  3)复位信号。
  4.COMCON 寄存器也控制全比较单元,它还受自身的控制寄存器 ACTR 控制。
(三)全比较单元的两种工作模式
  通过设置 COMCON,可以规定全比较单元工作于如下两种模式。
  1.比较模式
  当 COMCON 中全比较操作被使能,且比较模式被选中时,通用定时器的计数器
就不断地和全比较单元的比较寄存器进行比较。当发生匹配时,进行如下操作:
  1)两个输出脚根据 ACTR 的设置发生电平跳变。该引脚有四种状态:保持、复
位(低)、置位(高)、比较匹配触发。
  2)设置全比较单元的中断标志。过程与通用定时器类似。
  2.PWM 模式
  全比较单元被设置为 PWM 模式时,类似于通用定时器的比较操作,引脚上将产
生 PWM 输出。区别是:
  1)全比较单元使用自身的控制寄存器。
  2)输出波形受内部死区单元和空间矢量 PWM 逻辑电路的改变。
(四)全比较单元的使用设置步骤
  为了实现全比较单元的操作,用户按可以如下步骤设置:


                                          82
   1)设置 T1PR,给出计数周期。
   2)设置 ACTR,确认输出逻辑等。
   3)初始化 CMPRx,设置比较值。
   4)设置 COMCON。
   5)设置 T1CON,规定 T1 的工作模式。
   X24X 有一个问题:COMCON 通常要被写操作两次,才能保证 PWM 输出的正确性。
   可以看到,所有比较单元都不能独立工作,需要和通用定时器配合操作。


三.比较单元控制寄存器
   比较单元有 COMCON、ACTR、SACTR 等控制寄存器,下面分别予以介绍。
(一)比较控制寄存器 COMCON(工作方式、使能、重载条件)
   比较控制寄存器的位排列见图 4-14:
  15       14      13       12         11         10        9         8
CENABLE   CLD1    CLD0    SVENABLE   ACTRLD1    ACTRLD0   FCOMPOE   SCOMPOE
  7        6       5         4          3         2         1         0
SELTMR    SCLD1   SCLD0   SACTRLD1   SACTRLD0   SELCMP2   SELCMP2   SELCMP1
   图 4-14:比较控制寄存器位排列图
   下表是各位功能介绍:




                                                                          83
(二)全比较动作控制寄存器 ACTR(空间矢量、输出逻辑)
    全比较动作控制寄存器的位排列见图 4-15:
  15         14         13         12         11         10          9          8
 SVRDIR      D2         D1         D0       CMP6ACT1   CMP6ACT0   CMP5ACT1   CMP5AC50
   7          6          5          4          3          2          1          0
CMP4ACT1   CMP4ACT0   CMP3ACT1   CMP3ACT0   CMP2ACT1   CMP2ACT0   CMP1ACT1   CMP1ACT0
    图 4-15:全比较动作控制寄存器位排列图
    各位功能介绍如下:




                                                                                    84
(三)单比较动作控制寄存器 SACTR(输出逻辑)
        单比较动作控制寄存器的位排列见图 4-16:
   15         14         13          12          11          10          9           8
Reserved   Reserved   Reserved    Reserved    Reserved    Reserved    Reserved    Reserved

    7          6         5           4           3           2           1           0
Reserved   Reserved
                      SCMP3ACT1   SCMP3ACT0   SCMP2ACT1   SCMP2ACT0   SCMP1ACT1   SCMP1ACT0

        图 4-16:单比较动作控制寄存器位排列图


                                                                                         85
  各位功能如下表:




(四)控制动作说明
  COMCON 控制了所有比较单元的工作状态,是不可投影的。
  ACTR、SACTR 都是可投影的,重载条件由 COMCON 确定。
  在 EVIFRA、EVIFRC 寄存器中,每个比较单元都有一个中断标志。如果比较操
作被使能,比较匹配发生后的 2 个 CPU 周期后,比较单元的中断标志被设置。
  当任何复位事件发生时,所有与比较单元相关的寄存器被复位为零,并且所有
的比较输出引脚被置成高阻态。


四.PWM 的产生
  PWM 控制是电动机运动控制应用中,广泛使用的技术。与全比较单元相关的 PWM
电路可在极大的减少 CPU 或用户干预的情况下,产生带有可编程死区和输出极性的
6 个 PWM 脉冲输出。
  PWM 电路主要包括如下部分:
   1) 非对称/对称波形发生器。
   2) 可编程死区单元(DBU)。
   3) 输出逻辑。
   4) 空间矢量 PWM 状态机。


                                          86
  与全比较单元相关的波形产生受 T1CON、COMCON、ACTR 和 DBTCON 等寄存器的
控制。




  图 4-17:PWM 电路的结构框图
  其 PWM 脉冲具有以下特点:
  1)9 个独立的 PWM 输出。
  2)可编程死区长度 0-2048 个 CPU 时钟周期。
  3)最小的死区时间为 1 个 CPU 周期。
  4)PWM 脉冲宽度和增减量均为 1 个 CPU 时钟周期。
  5)最大 16 位的 PWM 分辨率。
  6)PWM 脉冲频率可高速变化(T1PR 使用可投影的比较寄存器)。
  7)PWM 脉冲宽度可高速变化(CMPRx 使用可投影的比较寄存器)。
  8)具有驱动功率保护中断,可以处理异常情况发生。
  9)可编程产生非对称/对称或空间矢量 PWM 波形。
  10)比较和周期寄存器的自动重载功能可以使 CPU 额外开销最小化。
  从图中可以看出,PWM 模式下又具备普通 PWM 模式和空间矢量 PWM 模式两种情
况,可通过 COMCON 的选择来进行设置。


五.可编程死区单元
  死区单元是针对全比较单元的 PWM 工作模式而设置的。
(一)死区单元的结构
  如下图,死区单元用于形成 PWM 死区,这个死区是可编程的。




                                               87
   死区输入信号可以来自波形空间矢量 PWM 状态机和其它波形来源,通过边沿检
测,在边沿点开始产生一定宽度的死区。这个宽度通过 DBTCON 来设置,经过和预
定标后的时钟计数输出进行比较,来实现宽度控制,最终通过输出逻辑输出。
   从图中看到,它包含如下部分:
   1)1 个用户可读写的 16 位死区定时器控制寄存器 DBTCON。
   2)1 个输入时钟预定标器。
   3)采用 CPU 时钟输入。
   4)内部 3 个 8 位减计数器。
   5)控制、比较逻辑。




   图 4-18:死区单元逻辑框图
(二)死区单元的操作说明
   一个全比较单元在处于比较模式时,死区功能将被禁止。
   死区单元的输入信号是 PH1、PH2、PH3,分别来自全比较单元的非对称/对称
波形发生器和矢量状态机;其输出是 DTPH1/DTPH1_、DTPH2/DTPH2_、DTPH3/DTPH3_,
与 PH1、PH2、PH3 分别对应。




                                                      88
      当死区功能未被使能时,每个单元的两个输出信号完全相同;当被使能后,则
2 个信号的跳变点不再相同,而是具有一段时间间隔,该间隔称为“死区”。
      死区的时间长度由控制寄存器 DBTCON 决定,假定其 15-8 位是 m,预定标因子
4-3 位是 1/p,则:死区长度=pxm 个时钟周期。
(三)死区定时器控制寄存器
      死区定时器控制寄存器 DBTCON 排列见图 4-19。
  15        14      13      12       11        10          9          8
 DBT7      DBT6    DBT5    DBT4     DBT3      DBT2       DBT1       DBT0

  7         6       5        4        3         2          1          0
 EDBT3     EDBT2   EDBT1   DBTPS1   DBTPS0   Reserved   Reserved   Reserved

      图 4-19:DBTCON 位排列图
      具体各位的含义如下面表格所示:




六.输出逻辑
      比较单元的输出引脚 PWMx/CMPx 的逻辑规律如下:
(一)单比较单元
      对单比较单元来讲,控制寄存器 SACTR 规定了它的极性:
      1)强制高:输出一直为高;
      2)强制低:输出一直为低;


                                                                           89
  3)高有效:即正逻辑;
  4)低有效:即负逻辑。
(二)全比较单元
  对全比较单元来讲,控制寄存器 ACTR 决定了它的极性。
 1.当处于比较模式时,分为:
  1)置位:即置为高电平;
  2)复位:即置为低电平;
  3)保持:输出保持不变;
  4)触发:正常输出状态。
 2.处于 PWM 模式时,有:
  1)强制高:输出一直为高;
  2)强制低:输出一直为低;
  3)高有效:即正逻辑;
  4)低有效:即负逻辑。
(三)输出高阻态
  当发生如下事件时,输出处于高阻态:
  1)COMCON 的位 8(单比较使能)、9(全比较使能)被清零;
  2)当 PDPINT 中断产生并未被屏蔽时;
  3)任何复位事件发生。


七.PWM 波形讨论
(一)PWM 信号
  PWM 是一组具有特定载波周期和频率,但宽度可以调节的脉冲序列。为了对每
周期内的脉冲宽度进行调节,需要有另一列具有需要值的调制信号。
     载波


     调制信号



     PWM 波形



  图 4-20:PWM 信号调制过程示意图
  PWM 信号广泛用于电动机的控制,该信号可以用来控制驱动功率器件的开闭时
间,从而实现对电动机的驱动特性可调节。


                                      90
  图 4-21:三相功率变换电路
  图 4-21 是一个三相电机控制输出电路的例子,6 组调制后的 PWM 信号可以用
来控制 6 个晶体管的基极,从而控制电动机的三相绕组,实现需要的控制目的。
(二)利用事件管理器产生 PWM 信号
  DSP 的 PWM 信号产生,是通过定时器和比较器来产生的。一般方法是:
  1)使定时器工作在连续增或连续增减方式;
  2)对定时器给出一个合适的周期值,作为载波周期;
  3)给出一个合适的比较值,作为调节信号,通过调节增、减计数过程中的比
    较匹配点,控制脉冲宽度。
  通常,全比较单元的 6 个输出,可以产生 6 组死区可编程的驱动信号,用于控
制三相电机的驱动。由于 DSP 的可编程特性,从而使控制具有相当的灵活性,适合
交流异步电机、直流无刷电机、磁组电机等。
(三)死区
  死区是为了防止功率管开关期间出现重叠短路(如逆变失败)而设置的。死区
时间通常被插入到两个串联晶体管的关闭和开启之间,以确保在前面晶体管可靠关
闭之后,再开启后面的晶体管。
  EV 模块全比较器的死区功能满足了这一要求,而且可以根据负载和功率管的
相关特性来进行编程。
(四)EV 寄存器的设置
  为了产生合理的 PWM 波形,需要设置如下寄存器:
  1)设置合理的 TxPR 值,以设定合理的载波周期。
  2)设置和装载 ACTR,以控制输出波形的逻辑;
  3)设置和装载 DBTCON,以设置合理的死区;
  4)初始化 CMPRx,以调制合理的脉冲宽度;
  5)设置和装载 COMCON,以设置工作模式、使能输出、确定重载条件等;
  6)设置和装载 T1CON、T2CON,以设置定时器的计数方式,并启动操作;
  7)刷新 CMPRx,实现动态调制过程。
(五)非对称 PWM 波形的产生




                                           91
  由于连续增计数模式下,在计数器清零时时,输出进行第二次翻转,所以,其
脉冲宽度调节发生在载波周期的后侧。
  使用全比较单元产生非对 PWM 称波形的要点是:
  1)用 T1CON 将通用定时器设置成连续增计数方式。
  2)对通用定时器 1 的周期寄存器 T1PR 载入周期值。
  3)COMCON 配置成使能比较操作。
  4)在 COMCON 中使能 PWM 操作。
  5)在 COMCON 中使能对应的输出引脚。
  6)对 DBTCON 设置死区值。
  7)对 ACTR 进行设置,选择正确的输出逻辑。
  8)在每个周期写入新的比较值 CMPRx,以动态调整占空比。
(六)对称 PWM 波形的产生
  对称 PWM 波形比非对称波形应用更加广泛,由于它的增、减计数期间,都可以
控制比较点,因而增加了控制的灵活性。
  其过程和非对称波形类似,惟独不同的是,定时器处于连续增/减计数方式。


八.空间矢量 PWM
  空间矢量是指构成三相功率转换器的 6 个晶体管之间的一种特殊开关机制,可
以使三相绕组中产生的电流谐波最小。
(一)三相功率转换电路(静态情况)
  从图 4-18 可以看到,三相功率转换器的六个基极,由死区单元的六个输出
DTPHx 控制,每一对输出分别控制同一臂上的两个晶体管。按逻辑组合,应该有 8
种情况,如下表所示:




                                         92
  其中 000 实际上就是关断转换器,111 在实际使用中是不存在的情况。
(二)基本空间矢量(静态情况)
  先引入 d-q 变换的概念。d-q 变换相当于把三维矢量(a,b,c)正交投影到垂
直于矢量(1,1,1)的二维平面上。
  通过 d-q 变换,可以将与 8 种输入组合对应的电动机相电压映射到 d-q 平面上,
从而得到 6 个非零向量和 2 个零向量。6 个非零向量构成了空间六边形的轴线,且
相临向量之间的夹角是 60 度,2 个零向量位于坐标原点。这八个向量称为基本空
间矢量,分别记为 U0、U60、U120、U180、U240、U300、U000、U111。
  图 4-22 给出了基本空间矢量的示意图。




  图 4-22:基本空间矢量示意图
  实际使用中,d-q 平面就是电动机的水平和垂直轴线构成的平面。所谓空间矢
量的 PWM 方法,就是通过 6 个晶体管的 8 种基本空间矢量组合来逼近施加到电动机
的三个输入相电压。原因是,每个空间矢量和电动机的三组相电压有一一投影反对
应的关系,这样由于矢量的减少,及把三维矢量转化为二维矢量,从而大大简化了
软件控制过程。
                        在
  这就是空间矢量 PWM 控制方法的基本原理, DSP 中,这部分是用空间矢量状
态机来完成的。状态机进行这种变换和反变换,以实现对电动机的最终控制。
(三)电动机实际电压矢量和基本空间矢量的关系(动态情况)
  随着电动机的旋转,对应的空间矢量也将在二维平面上以顺时针或逆时针方向
旋转,旋转频率等于三相交流电的频率。实际上,绕组励磁磁场的旋转过程,也是
输出驱动晶体管 6 管组合的切换过程,即空间矢量的切换过程。
  二维矢量和三维矢量的关系如下:




                                                 93
  可以看出,任何时候的三相电压矢量 V 都可以由两个相临的空间矢量合成,当
该矢量在旋转时,空间矢量由一个有效状态转移到另一个有效状态,从而产生连续
的三相电压。
  此时,电压矢量与两个相临有效状态之间的关系是:




  其中,各变量含义是:
  Tp:载波周期;
  Tx:空间矢量 Ux 的持续时间;
  Tx±60:空间矢量 Ux±60 的持续时间;
  T0:T0=Tp-Tx- Tx±60,为零矢量的持续时间。
  具体空间矢量变换请查阅相关书籍,此处不予赘述。
(四)利用 DSP 产生空间矢量 PWM 波形(动态情况)
  为了产生空间矢量 PWM 波形,需要一个 T1PR 来控制 PWM 波形周期,用两个全
比较器的 CMPR1、CMPR2 来存储两个基本空间矢量的宽度 Tx、Tx±60,并需要完成
如下工作:
  1)设置 ACTR 来定义全比较单元输出引脚的极性,如高有效。
  2)设置 COMCON 寄存器来使能比较操作、全比较输出和空间矢量 PWM 模式。
  3)将 ACTR 和 CMPRx 的重载条件设置为下溢重载。
  4)设置 T1CON,将通用定时器 1 设置为连续增/减计数模式。
  5)设置 T1PR 为 Tp/2,即设置合理周期。
  6)在二维 d-q 平面上确定输入到电动机的各相电压 Uout。
  7)分解 Uout。
  8)在每个 PWM 周期内,根据旋转方向,确定 2 个相临矢量——Ux、Ux±60。
    CCW(正转)使用 Ux、Ux+60,CW(反转)使用 Ux、Ux-60。
  9)确定参数 Tx、Tx±60 和 T0。
  10)                               (
        把对应于 Ux 的开关方式写入 ACTR 的位 12-14 对应于八种基本矢量的
    哪一个)。ACTR 的位 15 写 0(CCW 方向旋转),或者 ACTR 的位 15 写 1(CW
    方向旋转)。


                                                    94
 11)   如果 ACTR/Bit15=0(CCW 方向旋转),则将 Tx/2 写入 CMPR1,
   (Tx/2+Tx+60/2)写入 CMPR2;如果 ACTR/Bit15=1( CW 方向旋转),则将
   Tx/2 写入 CMPR1,(Tx/2+Tx-60/2)写入 CMPR2。
 12)   根据死区要求合理设置死区,该死区将以合理的方式插入到同一比较
   器的两个输出波形中。
 13)   在 T1CON 启动操作。
 此时,三个全比较单元的 6 个引脚中的引脚 PWM1/CMP1、PWM3/CMP3、PWM5/CMP5
的动作电平组合代码规律如下:
 1)第一次比较匹配发生前,输出为 Ux。
 2)周期内(增计数)第一次比较匹配发生后,输出根据 CCW、CW 方向不同,
   分别为代码 Ux+60 或者 Ux-60。
 3)周期内(增计数)第二次比较匹配发生后,输出 U000 或 U111。
 4)周期内(减计数)第三次比较匹配发生后,输出根据 CCW、CW 方向不同,
   分别为代码 Ux+60 或者 Ux-60。
 5)周期内(减计数)第四次比较匹配发生后,输出为 Ux。
 以下是三个全比较器的 PWM 输出波形图:




 图 4-23:空间矢量 PWM 输出波形图
 两个比较单元的 CMPR 值应保持如下关系:
        CMPR1≦CMPR2≦T1PR
 系统才能正常工作。当 1、2 都被装如零时,3 个比较单元都将变成无效。
 另外比较输出引脚上的电平跳变将被延迟两个 CPU 时钟周期。


                                                     95
   鉴于课时关系,正交编码电路和捕获单元从略。


第四节:事件管理器的中断

一.DSP 中断系统
(一)内核中断
   内核中断包括:
   1)不可屏蔽中断 RESET、NMI:其中 RESET 优先级别最高。
   2)可屏蔽中断 INT1-INT6:用于系统模块中断、事件管理器中断、片外外设
      中断,可屏蔽。
   3)软件中断:TRAP、INT 等。软件中断是不可屏蔽的。
(二)外部中断
   除内核中断外,DSP 还支持部分可屏蔽外部中断。
   1)外部中断引脚(片外外设)
   前面我们讲过 6 个外部中断引脚,用于挂在这些引脚上的外部设备(传真、显
示等)引发中断使用。但它们必须通过内核中断 INT1、INT6 起作用。
   2)事件管理器中断
   事件管理器自身各模块包含一系列中断源,分别通过内核中断 INT2、INT3、
INT4 起作用。
   3)系统模块中断(片上外设)
   系统模块(片上外设)的一系列中断,分别通过内核中断 INT1、INT5、INT6
起作用。
(三)中断控制
   不可屏蔽中断系统直接响应,有自己独立的系统中断向量入口,响应过程相对
简单。
   可屏蔽中断通过 INT1-INT6 起作用,可以通过软件屏蔽,一般来讲,其中断控
制分为 3 个层次:
   1.核心层:ST0/INTM
   系统所有可屏蔽中断(系统模块、事件管理器、外部可屏蔽中断引脚),都受
状态寄存器 ST0 的 INTM 位控制。该位为 1 时,所有的可屏蔽中断都被屏蔽。
   2.系统中断控制层
   包含系统中断标志寄存器 IFR、系统中断屏蔽寄存器 IMR、系统中断向量寄存
器 SYSIVR。


                                             96
      这一层用于管理外部被送到 INT1-INT6 的中断请求,IFR 用于设置中断标志,
IMR 用于屏蔽。只有当 IMR、IFR 对应位都为 1,且 INTM=0 时,中断才被系统响应。
      中断被响应时,外部中断矢量寄存器的矢量值被读到 SYSIVR,外部中断标志
被自动清零。
      3.外部中断控制层
      外部中断源包括事件管理器中断、系统模块中断(片上外设)、外部设备通过
外部可屏蔽中断引脚引发的中断。
      这些中断源将提供大量的中断需求,但必须通过系统中断 INT1-INT6 触发系统
中断。其中 INT1 优先级最高,依次到 INT6,INT6 最低。
      外部中断自身一般都有中断标志寄存器、中断屏蔽寄存器和中断向量寄存器。
只有当中断被响应时,自身中断向量寄存器的值才被自动载入 SYSIVR,同时自身
标志寄存器被清零。


二.EV 模块的中断
(一)中断分组
      X24X 的 EV 模块可以产生 23 个中断,这些中断被分成 A、B、C3 组,分别通过
INT2、INT3、INT4 起作用。
      下表是事件管理器中断分组表:
组别       中断名称          组内优先级   中断矢量          功能
  A     PDPINT     1(最高)       0020h   功率驱动保护中断
(INT2) CMP1INT     2           0021h   全比较单元 1 的比较中断
       CMP2INT     3           0022h   全比较单元 2 的比较中断
        CMP3INT    4           0023h   全比较单元 3 的比较中断
        SCMP1INT   5           0024h   单比较单元 1 的比较中断
        SCMP2INT   6           0025h   单比较单元 2 的比较中断
        SCMP3INT   7           0026h   单比较单元 3 的比较中断
        T1PINT     8           0027h   通用定时器 1 的周期中断
        T1CINT     9           0028h   通用定时器 1 的比较中断

        T1UFINT    10          0029h   通用定时器 1 的下溢中断

        T1OFINT    11(最低)      002Ah   通用定时器 1 的上溢中断

  B     T2PINT     1(最高)       002Bh   通用定时器 2 的周期中断
(INT3) T2CINT      2           002Ch   通用定时器 2 的比较中断

        T2UFINT    3           002Dh   通用定时器 2 的下溢中断

        T2OFINT    4           002Eh   通用定时器 2 的上溢中断


                                                       97
            T3PINIT            5                         002Fh             通用定时器 3 的周期中断
            T3CINT             6                         0030h             通用定时器 3 的比较中断

            T3UFINT            7                         0031h             通用定时器 3 的下溢中断

            T3OFINT            8(最低)                     0032h             通用定时器 3 的上溢中断

    C       CAP1INT            1(最高)                     0033h             捕获单元 1 的中断
 (INT4) CAP2INT                2                         0034h             捕获单元 2 的中断

            CAP3INT            3                         0035h             捕获单元 3 的中断

            CAP4INT            4(最低)                     0036h             捕获单元 4 的中断

 (二)EV 中断的相关寄存器及中断响应
         每个事件管理器中断组都有一个中断标志寄存器 EVIFRx、一个中断屏蔽寄存
 器 EVIMRx、一个中断向量寄存器 EVIVRx(x=A、B、C)。
         申请中断时,组内同时挂起的最高优先级的中断矢量将被写入 EVIVRx,同时
 设置中断标志。如果系统和外部对应中断没有被屏蔽,且没有更高级的中断被挂起,
 INTM=0,则该中断被系统响应,中断矢量被读入 SYSIVR,外部中断标志被清除。
         一般地,事件管理器同一组内,当有多个中断发生时,EVIVRx 将写入最高优
 先级的中断。中断响应后,该中断矢量自动被送到 SYSIVR。服务程序中,累加器
 将读取这个 SYSIVR,从而跳转到对应的中断服务子程序。当中断矢量被读取时,
 外部中断矢量 EVIVR 将被清除。也可以通过软件对 EVIFR 写 1 来清除中断标志。


 三.事件管理器的中断控制寄存器
         如前所述,每个中断组都各有一个中断标志寄存器 EVIFRx、中断屏蔽寄存器
 EVIMRx、中断向量寄存器 EVIVRx。这些控制寄存器都被映射到局部数据存储器中。
 (一)中断标志寄存器(EVIFRx)
         EVIFRA、EVIFRB、EVIFRC 是 16 位寄存器,可读写。复位发生时,这些寄存器
 被清零。
         下面是各寄存器的位分布图:
    15            14               13            12            11               10            9           8
                            Reserved                                       T1OFINT         T1UFINT     T1CINT

     7            6                5             4             3                2             1           0
 T1PINT      SCMP3INT
                            SCMP2INT          SCMP1INT       CMP3INT          CMP2INT      CMP1INT      PDPINT

         图 4-24:EV 中断标志寄存器 EVIFRA
 15-8         7            6              5              4             3             2            1           0
Reserved   T3OFINT      T3UFINT
                                        T3CINT        T3PINT        T2OFINT      T2UFINT      T2CINT     T2PINT

         图 4-25:EV 中断标志寄存器 EVIFRB

                                                                                                                  98
                           15-4                                    3                  2               1           0
                       Reserved                                  CAP4INT            CAP3INT      CAP21INT      CAP1INT

         图 4-26:EV 中断标志寄存器 EVIFRC
         以上各标志,在有相应中断申请时被设置为 1,无中断时被设置为 0。写访问
 时,写入 0,无影响;写入 1,将复位标志位。
 (二)中断屏蔽寄存器(EVIMRx)
         EVIMRA、EVIMRB、EVIMRC 是 16 位寄存器,可读写。复位发生时,这些寄存器
 被清零。
         下面是各寄存器的位分布图:
    15            14              13               12              11                 10              9           8
                              Reserved                                         T1OFINT           T1UFINT       T1CINT

     7            6               5                 4              3                  2               1           0
 T1PINT      SCMP3INT
                              SCMP2INT           SCMP1INT        CMP3INT            CMP2INT      CMP1INT        PDPINT

         图 4-27:EV 中断屏蔽寄存器 EVIMRA
 15-8         7              6               5              4              3               2              1           0
Reserved   T3OFINT      T3UFINT
                                         T3CINT         T3PINT          T2OFINT        T2UFINT        T2CINT     T2PINT

         图 4-28:EV 中断屏蔽寄存器 EVIMRB
                           15-4                                    3                  2               1           0
                       Reserved                                  CAP4INT            CAP3INT      CAP21INT      CAP1INT

         图 4-29:EV 中断屏蔽寄存器 EVIMRC
         以上各标志,相应中断被使能时被设置为 1,禁止时被设置为 0。
 (三)中断矢量寄存器(EVIVRx)
         事件管理器中断矢量寄存器 EVIVRA、EVIVRB、EVIVRC 是 16 位寄存器,只读。
 复位发生时,这些寄存器被清零。
         下面是其位排列图:
    15-6               5                 4                  3                  2                 1               0
      0                D5              D4                   D3                 D2                D1             D0
         图 4-30:EV 中断矢量寄存器 EVIVRx
         该寄存器的低 6 位存储当前中断组内级别最高中断申请的中断向量。




                                                                                                                          99
第五章:指令系统及编程

第一节:程序地址的产生

一.程序地址的来源
  程序要正常执行,CPU 必须能按照一定的规则找到指令在程序存储器中的位
置,以便取出指令。也就是说,系统必须能自动产生下一条指令的存放地址——程
序地址。
  针对不同操作,程序地址的来源有如下几种情况:
  1.顺序操作:来自于程序计数器(PC)。
  2.空操作:来自于程序地址寄存器(PAR)。
  3.子程序返回:来自于堆栈顶部。
  4.表移动或块移动返回:来自于微堆栈。
  5.跳转到指令指定的地址或调用指令指定的子程序:来自跳转或调用指令。
  6.跳转到累加器低字指定的地址或调用累加器低字指定的子程序:来自累加
   器低位字。
  7.响应中断:系统规定的中断矢量地址。
  在地址产生过程中,以下硬件设备被使用:
  1.16 位程序计数器 PC:PC 在程序运行时,要给出下一条指令的地址,以指
示程序的执行方向。
  2.程序地址寄存器 PAR:用于驱动程序地址总线。
  3.8 级硬件堆栈:16 位、8 级硬件堆栈可以存储最多 8 个返回地址,也可以
用于数据暂时存储。
  4.微堆栈 MSTACK:表移动或块移动返回时,程序地址产生逻辑使用 MSTACK
来存储一个返回地址。
  5.重复计数器 RPTC:与重复指令 RPT 一起使用,以计算重复次数。


二.程序计数器
  在程序运行时,16 位程序计数器 PC 要给出下一条指令的地址,以指示程序的
执行方向。
                           PC
  通过程序读总线把指令从程序存储器读到指令寄存器后, 的刷新规律如下:
  1.执行顺序程序代码: PC 指向 PC+n,其中 n 为当前指令的字长。
  2.执行跳转指令:PC 指向指令后面的操作数。




                                          100
   3.子程序调用和返回:子程序调用时,把 PC 中的下一条指令地址压入堆栈,
把跟在指令码后的立即数装入 PC。当子程序返回时,把堆栈顶部的数据装回到 PC。
   4.响应中断:把对应的中断向量装入 PC。
   5.计算机转移操作:当执行 BACC 指令或 CALA 指令时,累加器低 16 位字被装
入 PC。


三.硬件堆栈
   X24X 具有 16 位宽,8 级深度的硬件堆栈。
   堆栈的作用是存储中断或子程序调用时,原来程序处的下一条指令的地址,以
便以后程序的正确返回。
   如果需要,堆栈也可以用于暂存数据。
   我们可以使用如下两组指令访问堆栈:
   5)PUSH(入栈)和 POP(出栈)。PUSH 把累加器的低位字推入堆栈,POP 则
        把堆栈顶部数据装入累加器的低位字。
   6)PSHD 和 POPD。这两条指令在当堆栈超过 8 级时,在数据存储器中开辟新
        堆栈空间。PSHD 把数据从数据存储器中压入到堆栈顶部,POPD 则把堆栈
        顶部数据装回到数据存储器。
   每压入一个新数值到堆栈后,堆栈原来的数据将依次下移,最下面的数值丢失。
弹出操作则相反,第一个数据弹出后,下面的数据依次上移;上移 7 次后,原来的
各级堆栈将全部被刷新成底部的数值。


四.微堆栈
   在执行某些数据块移动之前,程序地址产生逻辑使用 16 位宽,1 级深的微堆
栈来存储返回地址。
   这些数据块移动指令包括:BLDD、BLPD、MAC、MACD、TBLR、TBLW 等。
   微堆栈只能被程序地址产生逻辑使用,不能被用户访问。


第二节:程序跳转和子程序调用的执行

一.程序的无条件执行
   如下两种情况属于无条件执行:
   1.无条件转移:B(转移)、BACC(转移到累加器指定的存储单元)。执行时,
程序对 PC 装入跳转指令的目标程序地址,或者累加器的低 16 位,然后从这里开始
执行。


                                                 101
  2.无条件调用:CALL(调用)、CALA(调用累加器指定单元处的子程序)。
执行时,程序对 PC 装入调用指令的子程序地址,或者累加器的低 16 位,然后从这
里开始执行。在目标地址装入 PC 之前,原来的地址被硬件自动压入堆栈,作为子
程序的返回地址。
  当执行到无条件返回(RET)指令时,堆栈顶部的地址被装回 PC,程序从该地
址继续执行。
  由于是流水线作业,当程序执行序列发生变化时,在新地址被载入 PC 后,紧
跟其后的原序列的两条指令被从流水线中清除。


二.操作条件
  X24X 提供了多种检测条件,作为条件转移或条件调用、条件返回的判断依据。
  这些条件的指令操作数(助记符)和条件有:
  操作数         条件
  1.EQ——累加器 ACC 值为 0,即 ACC=0。
  2.NEQ——累加器 ACC 值不为 0,即 ACC≠0。
  3.LT——累加器值小于 0,即 ACC<0。
  4.GT——累加器值大于 0,即 ACC>0。
  5.LEQ——累加器值小于等于 0,即 ACC≦0。
  6.GEQ——累加器值大于等于 0,即 ACC≧0。
  7.C——进位位为 1,即 C=1。
  8.NC——进位位为 0,即 C=0。
  9.0V——检测到累加器溢出,即 OV=1。
  10.NOV——未检测到累加器溢出,即 OV=0。
  11.BIO——BIO 引脚为低电平。
  12.TC——测试/控制标志被设置为 1,即 TC=1。
  13.NTC——测试/控制标志被设置为 0,即 TC=0。
  这些条件被分组如下:
  组 1:A 类:EQ、NEQ、LT、LEQ、GT、GEQ。
      B 类:OV、NOV。
  组 2:A 类:TC、NTC。
      B 类:C、NC。
      C 类:BIO。
  同一指令中,选择检测条件的原则是:
    a) 条件可以单独使用或者混合使用。


                                       102
     b) 条件混合使用时,必须来自同一个组内的不同类。
     c) 组 1 最多可以混合使用两个条件,组 2 最多可以混合使用三个条件。
  在指令中,条件是被当作操作数来理解的。


三.程序的条件执行
  如下两种情况属于程序的条件执行:
  1.条件跳转:BCND(条件跳转)、BANZ(当前辅助寄存器不等于 0 跳转)。
执行时,当指令所有检测条件均满足时,程序对 PC 装入跳转指令的目标程序地址
(指令的第 2 操作数),然后从这里开始执行。
  2.条件调用:CC(条件调用)。执行时,当指令所有检测条件均满足时,程
序对 PC 装入调用指令的子程序地址(指令的第 2 操作数),然后从这里开始执行。
在目标地址装入 PC 之前,原来的地址被硬件自动压入堆栈,作为子程序的返回地
址。条件调用可以向用户提供多个子程序入口,使程序变得更灵活。
  条件调用的返回可以使用条件返回(RETC)、返回(RET)。前者需要所有检
测条件都被满足才被执行,后者无须条件,被立即执行。当执行返回时,堆栈顶部
的地址被装回 PC,程序从该地址继续执行。
  由于是流水线作业,当程序执行序列发生变化时,在新地址被载入 PC 后,紧
跟其后的原序列的两条指令被从流水线中清除。


第三节:单指令的重复操作
  某些时候,一条指令可能需要执行多次,为此 X24X 提供了重复指令 RPT。该
指令将使跟在其后的那条指令执行 N+1 次,N 为重复计数器 RPTC 的预置值。
  重复执行时,RPTC 将进行减 1 操作,直到 0,停止重复。RPTC 的计数值来自
于数据存储器时,可以用作 16 位计数器;作为常量操作数时,它是 8 位计数器。
                 NORM     、 (乘及并带数据移动)
  与 RPT 指令复用的指令有: (累加器规格化) MACD       、
SUBC(条件减)等。
  RPT 的使用格式:
  RPT #N   ;将后面那条指令执行 N+1 次。
  立即数以#开头。


第四节:寻址方式

一.寻址方式:
  X24X 提供了三种寻址方式:


                                            103
  1)立即寻址方式:指令中直接给出操作数。
  长立即寻址:操作数为 16 位。
  短立即寻址:操作数为 8、9、13 位。
  2)直接寻址方式:把指令字的低 7 位和数据页指针(DP)的内容连接起来,
得到 16 位数据存储单元地址。
  3)间接寻址方式:当访问数据存储单元时,通过片上 8 个 16 位辅助寄存器来
产生访问地址。


二.立即寻址方式:
  立即寻址方式指令中直接给出操作数,无须通过访问数据存储器来获得。又包
括:
  1)长立即寻址:操作数为 16 位。指令为双字指令,操作数为第二个字。
  2)短立即寻址:操作数为 8、9、13 位。指令一般为单字指令,操作数嵌在指
令字的低位中。
  例如:RPT #99 为短立即寻址,
        ADD #16384,2 为长立即寻址。(将立即数左移 2 位,再与累加器内容
相加)。


三.直接寻址方式:
  直接寻址用于数据存储器的寻址。DSP 把数据存储器划分为 0-511 共计 512 个
数据页,每个数据页涵盖 128 个存储单元。共计全部 64K 数据存储空间。
  使用两个片内器件来进行直接寻址,它们是:
  1.状态寄存器 ST0:它的低 9 位提供数据页指针(DP),用来指示数据页。
  2.指令寄存器:CPU 在读取指令时,指令代码被装入指令寄存器 IR。其高 8
     位提供操作指令代码,低 7 位提供数据在数据页内部的页内偏移量。
  下面是 IR 的位布置图:
     8MSBs/指令代码        0 或 1/寻址方式      7LSBs/页内偏移量
  图 5-1:指令寄存器的位布置图
  其中,Bit7 表示寻址方式:0 代表直接寻址,1 代表间接寻址。
  实际的访问地址是 DP 和页内偏移量合并而成的:
       数据页指针/DP(9 位)                页内偏移量(7 位)
  图 5-2:直接寻址的数据存储器访问地址合成
  因而,我们在使用直接寻址时,必须按如下步骤进行:
  1.设置数据页:将数据页代码装入 DP。如:


                                                     104
  LDP #32    ;把 DP 设置为 32。
  2.指定偏移量:7 位页内偏移量由指令操作数提供。如:
  ADD 1h。    ;把页内偏移量为 1 的内容(页内第 2 单元)和累加器目前的内
容相加。
  上述指令生成的代码为单字指令,1h 被镶嵌在指令字的低 7 位。
  当本次对数据存储器的访问数据页与上次相同时,可以不初始化数据页;当访
问数据页变化时,则要重新初始化(对 DP 赋值)。
  例 1:使用直接寻址方式的 ADD 指令。
  LDP #4       ;设定当前数据页为 4。(0200h-027Fh)。
  ADD 9h,5     ;把 0209h 的内容左移 5 位,再与累加器的内容   相加。


四.间接寻址方式:
(一)间接寻址概述
  X24X 片内有 8 个辅助寄存器 AR0-AR7,提供了灵活强大的寻址能力。用户通过
当前辅助寄存器的 16 位地址,可以访问 64K 字的数据存储器。
  AR、APR 的值可以通过 MAR 指令(修改辅助寄存器和 ARP 值)或 LST(把数据
存储器的值写入 ST0)来修改。也可以通过任何支持间接寻址的命令把修改 ARP 作
为辅助操作来执行。
  使用这 8 个寄存器进行寻址的方法,也叫做寄存器间接寻址。方法是通过程序
装载辅助寄存器指针(状态寄存器 ST0 的高三位)ARP,给出辅助寄存器编号 0-7,
从而指向一个辅助寄存器——当前辅助寄存器。当前辅助寄存器中包含了要访问
(读或写)的数据存储单元的地址,根据指令要求读或写以确定送往 DRAB 或 DWAB。
  当指令使用当前 AR 操作完成后,其值可以由 ARAU 按照无符号 16 位算术运算
规则自动进行增减。(1 或其它整数)
(二)7 种间接寻址方式
  间接寻址方式的当前 AR 所包含的地址使用结束后,要根据指令需求进行修改,
为下一步操作做准备。系统提供了 4 种修改方法:
  1.无增减。对当前辅助 AR 不做任何修改。
  2.增加 1 或减少 1。对当前辅助 AR 的值加或减 1。
               把
  3.按照索引量增加或减少。 AR0 的值当作索引量,从当前 AR 中增加或减去
     AR0 的索引量。
  4.按照索引量增加或减少并反向进位。把 AR0 的值当作索引量,从当前 AR
     中增加或减去 AR0 的索引量,并在加减过程中进行反向进位。一般用于快
     速傅立叶变换(FFT)算法。


                                               105
  这四种修改方法提供了 7 种不同的间接寻址方式——
  表 5-1:7 种间接寻址方式及示例




(三)当前辅助寄存器的修改
  所有指令都支持间接寻址,其中一些还可以在修改当前辅助 AR 的同时,在第
二操作数中声明下一个当前辅助寄存器。这些指令执行时,将用一个新值装载辅助
寄存器指针 ARP,                          (
          而旧的 ARP 值将被装入辅助寄存器指针缓冲器 ARB ST1 高 3 位)。
  例 2:声明当前辅助寄存器的例子
  MAR *,AR1       ;向 ARP 装入 1,使得 AR1 成为当前辅助寄存器。
  LT *+,AR2       ;把 AR1 的内容装入 TREG,然后 AR1 增 1;同时,对 ARP 装
入 2,把 AR2 声明为下一辅助寄存器。
  MPY *           ;把 AR2 对应数据单元的内容和 TREG 的值相乘。
(四)间接寻址的指令字格式
  间接寻址的指令字如下面格式:                七种寻址方式         下一当前寄存器

              8MSBs      1     ARU     N      NAR
  图 5-3:间接寻址指令字位布置图
  各位的含义如下:




                                                       106
  可以看出,直接寻址、间接寻址方式的指令字格式有比较大的差异。
  下表是 ARU 代码不同时的操作定义,其中 011 组合被保留。
  表 5-2:间接寻址的指令操作码组合含义表




  即 ARU(BIT6、5、4)依次为 000-111 时,分别对应当前辅助 AR 的内容不变、
减 1、加 1、保留、减 AR0 及反向进位、减 AR0、加 AR0、加 AR0 及反向进位。
  例 3:采用间接寻址的 ADD 指令
  ADD *,8    ;当前辅助寄存器指定数据单元的内容左移 8 位,
             ;与累加器的内容相加,当前 AR 内容不变。
  例 4:采用间接寻址的 ADD 指令
  ADD *+,8,AR4    ;当前辅助寄存器指定数据单元的内容左移 8 位,
                  ;与累加器的内容相加,然后当前 AR 内容增 1。
                  ;同时,声明 AR4 为新的当前 AR(下一辅助寄存器)。
  例 5:采用间接寻址的 ADD 指令
  ADD *BRO+,8    ;当前辅助寄存器指定数据单元的内容左移 8 位,
                 ;与累加器的内容相加,然后当前 AR 内容加 AR0,
                 ;并反向进位。


第五节:汇编语言编程基础

一.汇编语言的一般格式
  X24X 汇编程序一般格式如下:
格式 1——


                                                  107
  标号:指令     操作数(1-3 个)    ;注释
格式 2——
  *注释
  标号:指令     操作数(1-3 个)
解释如下:
 1.关于标号:
  1)标号必须以字母或下划线+字母开始;
  2)标号的第一个字符必须位于第一列;
  3)标号最多包含 32 个字符。
 2.关于指令:
  1)包括伪指令和汇编命令;
  2)伪指令以实心点“.”开头;
  3)汇编指令直接书写,没有特定标记。
 3.关于操作数:
  1)操作数包含常数、符号或表达式。
  2)操作数之间用逗号“,”隔开。
  3)根据指令功能不同,操作数可能有 1-3 个。
 4.关于注释:
  1)注释要用“;”或“*”号引出;
  2)使用“;”号时,可以从任一列开始;而使用“*”号时,则必须从第一列
开始。
  3)注释不是必须的,在编译时将被忽略。


二.具体指令格式表述方法
  在查阅指令集时,必须弄懂通用的格式表述方法。以 ADD 为例,其格式有:




  这里使用了诸如:dma、shift、ind、AR、k、lk、shift 等符号。了解这些符
号,有助于我们准确查阅手册,掌握各类指令的用法。


                                             108
 表 5-3:指令查询代号列表




乘积移位模式位           109
 比较常用的如:
 k——8 位立即数,使用格式为#k;
 lk——16 位立即数,使用格式为#lk;
 ind——间接寻址,代表*、*+、*-等;
 AR——辅助寄存器;
 ARP——辅助寄存器指针;
 C——进位位;
 dma——数据存储单元地址,如 050Ah;间接寻址;
 dst——目的地址;
 pma——程序存储器地址;
 shift、shiftn——移位 1-16 位;
 等等。


三.汇编语言指令集
 教材 P245 的表 5.10 给出了 X24X 的汇编指令集列表,我们可以查阅各类指令
的具体使用方法。
 下面给出的是指令的分类列表:


                                           110
表 5-4:数据传送指令一览表




                  111
表 5-5:算术运算指令一览表




                  112
 表 5-6:逻辑运算指令一览表




 以上三类指令即:
 1.数据传送指令;
 2.算术运算指令;
 3.逻辑运算指令。
 这三类指令是 X24X 的常用基本指令。X24X 的基本指令功能是由这些指令构成
的。因此要熟练掌握。
 下面的分支指令主要是用于条件判断和分支等结构化程序的设计。


                                       113
表 5-7:分支指令一览表




                114
第六节:数据传送指令
 数据传送指令是 DSP 使用最多的一类指令,共 30 条。大致包括三种:
 1.数据存储器之间传送。
 2.数据、程序存储器之间传送。
 3.I/O 单元的输入输出指令。
 我们将从下面全部指令的介绍中,有选择地介绍部分数据传送指令。




                               左操作数做数据源,右
                             操作数做目标地址。




                                        115
116
      右操作数做数据源,左操作
      数做目标地址。




十进制




                     117
十进制




      注意累加器为 32 位。




                 118
119
                右为数据源,左为目标。




下面示例为 10h=16。




         当前 AR 也是 AR4 的情况。




                              120
121
INTM 不变




122
应该为 4?AR1 忽略




               ST1/Bit5-7 恒 1




                          123
124
125
126
127
应为 00?




         向上复制,底
         层保留。




                  128
十进制数




       129
1Eh=30




         130
131
132
133
第七节:算术运算指令




             134
135
136
137
138
139
140
141
142
143
144
145
146
第八节:逻辑运算指令




             147
148
149
150
151
152
第九节:分支指令




           153
154
155
156
157
158
159
160
161
第六章:DSP 软件开发工具平台

  DSP 学习要达到开发能力,认真解析汇编语言编程、 语言编程及掌握必要的
                           C
开发工具是必须的。


第一节:开发工具与开发步骤

一.代码开发方法
  DSP 代码开发的方法有:
  1.汇编语言编程
  这个方式编辑的代码,容易达到最简化,运行效率高,实时性强;但缺点是开
发效率低,编程过程相对烦琐。
  2.C 语言编程
  C 语言是大多数 DSP 支持的一种代码开发工具。它使得编程过程变得相对简
单而高效,但缺点是由于目标代码不是最简单的,因而实时性比较差。因此,对实
时性要求高的场合,必须采用汇编代码编程。
  C 语言还在某些特定场合受到限制,如 C 语言缺乏访问程序区数据的有效手
段,这种情况必须使用汇编语言来编程。
  3.混合编程
  实际上,最佳的方式,是使用以上两种方式,即汇编、 语言混合编程的方法。
                          C
  根据实际情况,可以灵活选择使用什么语言编程。一般系统程序可以使用 C
语言,涉及算法等实时性比较强的程序使用汇编语言。
  程序通过特定的编程方式可以实现 C、汇编语言的互相调用。


二.开发工具
  开发工具按开发阶段分为:
  1.代码产生工具:用于生成程序代码及代码转换。
  如 C 编译器、汇编器、链接器、文档管理器、运行支持库、交叉参考列表工
具、建库工具、16 进制转换工具等。
  2.代码调试工具:用于代码的调试过程。
  如软件模拟器、软件评估模块 EVM、MCK、初学者开发工具 DSK。
  3.集成开发环境:适用于 DSP 开发的全过程。
  如 CC2000、CCStudio 等。CC2000 是用于 DSP 2000 系列的专用开发工具;而
CCStudio 是一个多平台开发环境,适用于 TI 公司所有 DSP 系列的开发。


                                                   162
   按软硬件分为:
   1.软件工具:CC2000、CCStudio、软件模拟器、代码产生工具等。
   2.硬件工具:软件评估模块 EVM、初学者开发工具 DSK、MCK、用户板等。
   实际产品的开发调试必须是软件平台结合硬件模块或用户板,才能进行。


三.开发步骤
   DSP 的软件开发不仅是个代码编辑的概念,而应立足于工程的角度来研究。
其一般步骤是:
   1.利用文本编辑工具编辑 1 汇编语言源程序(*.asm)。如果使用 C 语言开发
     代码,则要先使用 C 编译器把 C 语言代码转换为汇编语言程序。
   2.调用汇编器汇编 2 该源文件。如果该文件用到了宏,汇编器还将使用宏库
     (Macro Library)。
   3.汇编后生成符合公共目标文件格式的目标文件(COFF 目标文件,*.obj)。
   4.调用链接器实现 COFF 目标文件和其它诸如运行支持库、目标文件库等中
     关联文件的链接 3。
   5.链接之后生成可执行的 COFF 执行文件(*.out)。
   6.将 COFF 执行文件下载 4 到 DSP。
   7.利用调试工具对运行进行跟踪和调试 5。
   也就是说,软件开发大体要经历程序编辑(asm、c、cpp 等文件)、汇编(obj
文件)、链接(out 文件)、下载、调试等五个阶段。


第二节:CCS 简介
   CCS 是一个完整的 DSP 集成开发环境,也是目前最优秀、最流行的开发工具。
   CCS 最初是由 GO DSP 公司为 C6000 系列设计的,后来 TI 公司收购了 GO DSP
公司,并将 CCS 扩展到其它系列,成为一个多平台的集成开发环境。
   德州仪器(TI)近期推出的 Code Composer Studio™ 集成开发环境 (IDE) 白金
版,使 DSP 软件开发工具具备更多优异特性以及更高的稳健性。


一.CCS 与传统开发工具的主要区别
   复杂系统常常以多个 DSP 处理器和平台为基础,以实现所需的性能水平。过
去,采用多个 DSP 平台的开发人员通常必须在设计中使用多种工具集。TI 新型的
CCStudio 提供了可支持所有 TI 平台(包括目前流行的 TMS320C6000™ DSP、
TMS320C5000™ DSP、TMS320C2000™ DSP 以及 OMAP™平台)的全面集成型开发环境,
从而显著简化了设计工作。


                                                     163
  同时,各个开发阶段,也无须使用传统的不同的开发工具来进行开发。CCS 集
成了编程环境设置、汇编/C 语言编辑、程序调试、程序分析、程序跟踪、程序优
化等工具,从而使用户在一个软件开发环境中就可以完成所有的软件开发步骤。
  一般地,编程人员用于调试代码的时间超过整个项目所需时间的六成,查寻并
解决软件故障的工作极为枯燥烦冗,延长了整个开发周期。CCStudio 白金版的全
新回卷功能为大幅节约调试工作时间提供了高效率的解决方案。
  过去,开发人员不得不从头开始,返回去一步步研究程序以寻找源代码中存在
的问题。凭借回卷功能,在解决源代码的问题时,开发人员可以随意前进和后退,
使工作游刃有余。该功能使开发人员只需按返回键就能在任意点上停顿,有效地免
除了将程序从头加载、一步步寻找代码错误的繁杂工作。


二.基本功能
  CCS 包含如下基本功能:
  1.可视化代码编辑界面。可编写 C、汇编、.H 文件、.cmd 文件等。
  2.集成代码生成工具。如汇编器、C 编译器、链接器等。
  3.基本调试工具。跟踪、查看程序执行、存储器、寄存器等。
  4.断点工具。
  5.探针工具。用于算法仿真、数据监视等。
  6.分析工具。评估代码执行的时钟数。
  7.数据的图形显示工具。如绘制时域/频域波形、眼图、星座图等。
  8.GEL 工具。用户可以自行修改控制面板、菜单,方便直观修改变量,配置
参数等。
  9.支持 RTDX(实时数据交换)技术。可以在不中断系统运行的情况下,实现
DSP 与其他应用程序的数据交换。
  10.开放式 Plug-in 技术,支持第三方的 ActiveX 插件(一种支持软件组件网
络交互的工具),支持包括软仿真在内的各种仿真器(只需安装驱动)。
  11.提供 DSP/BIOS 工具。增强了对代码的实时分析、运行调度、资源管理的
能力,减少了用户对硬件熟悉程度的依赖。
  12.支持多 DSP 调试。


第三节:CCS 安装与配置
  CCS 目前流行的有正版及测试板两种。正式版可以在一台电脑上重复安装,
但测试版则只能安装一次。如果出现重复安装,将提示输入授权代码。




                                             164
一.安装过程
   安装时,可以进入 CCS 安装目录,执行 setup.exe,以下根据提示安装即可。
   注意:评估版的 CCS2.0 只能在一台机器上安装一次,如果运行时出现要求输
入“SITE CODE”的对话框,原因就是可能在同一台机器上再次安装了这个软件。
   解决问题的方法有:
  1、购买正式版的软件。
  2、换一台计算机安装。
  3、将机器格式化,重新安装。


二.配置驱动
   CCS 安装完成后,需要根据你使用的支持硬件进行配置以加载驱动。如外部
用户板、DSK、软件模拟器等。
(一)配置系统自带的驱动
   步骤如下:


  1、 ccs 安装完毕后,桌面上出现 2 个图标           和        ;


  2、 单击图标         ,出现如图 6-1 所示的画面。




   图 6-1:配置驱动示意图

    3、如图 6-2 所示,配置需要的驱动程序,如选择 C27xx simulator 或 F2812
Simulator。

                                                   165
  图 6-2:配置驱动示意图
  4、单击 Import 按钮,然后单击 Close 按钮,出现如图 6-3 所示的画面,配置
完毕。




    图 6-3:配置驱动示意图
    5、单击 File→Save,配置被存储。单击 Exit 退出。
(二)配置第三方硬件驱动
    这个过程相对复杂得多,需要根据说明书进行安装。下面以安装 Spectrum
Digital 公司的型号:XDS510PP PLUS 并口型硬件仿真器为例,说明安装过程。
    1.在图 6-3 界面的右侧方框内单击“install a Device Driver”。
    2.在弹出的 Select Device Driver File 对话框中,浏览找到 CCS 安装目录
下的 Driver 目录;在目录文件列表中找到 sdgo5xx.dvr 文件,按“打开”。


                                                     166
    3.如图 6-3,“Available Board/Simulator Types”栏目将看到新增加的
“sdgo5xx”,单击它。
    4.此时将在图 6-3 的右侧“Install a Device Driver”方框内出现该器件的
简介。点击“Add to System”。
    此时弹出一个    “Board Properties”界面,   在该界面的四个标签中做如下      (5-8)
工作:
    5.选择“Board Name&Data File”标签,在“Board”文本框中输入如“My
sdgo5xx”。
    6.按 Next 按钮,弹出“Board Properties”标签,将“I/O Port”的值改为
计算机并口地址“0x378”。不同的用户板端口类型可能不同,可参考产品手册。
       按
    7. Next 按钮,  弹出  “Processor Configuration”标签, 在左侧“Available
 Processor”栏目选择处理器型号,同时在左下部“Processor Name”栏目输入自
                如
 定义的处理器名称, “CPU_1” 单击中间的   ,         “Add Single”按钮。此时,“CPU_1”
 被显示在右侧栏目中。
    8.按 Next 按钮,弹出“Startup GEL File(s)”标签,配置 GEL 语言(通用
 扩展语言)启动配置文件。GEL 是一种类似 C 语言的解释性语言,可以用来编写
 函数。浏览找到该文件位置,如我们的板卡选择“D:\ti\gel\c5416gel”,配置
 后,该路径显示在左侧窗口中。
    9.单击“Finish”按钮,完成板卡属性设置。
    10.选择菜单 File/Save 命令,将当前配置存盘。
(三)驱动删除
    已经配置的器件也可以删除。方法是:
    1.用鼠标右键单击仿真设备名单“Available Board/Simulator Types”栏目
内的设备。
    2.选择“Remove”命令,仿真设备被删除。


第四节:汇编源文件与公共目标文件

一、汇编源文件的格式
(一)初始化段与未初始化段
   开发系统默认的汇编语言以段(section)为基本单元,一个程序包括若干段,每
个段又由若干语句构成。
   段又包括:
   1)初始化段:可以是程序代码、程序中用到的常量、数据表等信息。初始化
段在程序下载时需要写入数据和代码。
   2)未初始化段:用于存储变量。程序下载时无须进行写代码和数据的操作,
只是预留空间用于程序运行时存储变量值。
   段的名称和属性可以用户来定义,如果不定义,系统默认为如下三个段:
   1)程序代码段:.text,通常用于包含可执行程序代码。
   2)初始化数据段:.data,通常用于包含已初始化的数据。

                                                            167
        3)未初始化数据段:.bss,通常用于为未初始化的变量保留空间。
        用户可以用如下两条伪指令来定义特定段:
        1).sect:自定义初始化段,格式为:
        [symbol]   .sect “section_name”
        其中,Symbol:符号地址;Section_name:段名。
        2).usect:自定义未初始化段,格式为:
        [symbol]   .usect “section_name”,Length
        其中,Symbol:符号地址;Section_name:段名;length:段的长度(字数,
如 8),这个长度还可以是二维数组(如 12*6)。
(二)汇编语言实例
        源代码见书 P257。
(三)常用伪指令
        伪指令是用于编译的辅助指令,它们不会最终生成目标代码。
        X24X 使用了下面的常用伪指令:
                       语法                                    说明
.bss     Symbol,size                       在.bss 段中,为变量保留 size 字节的空间。
.data                                      将初始化数据汇编到.data 段。
.text                                      将可执行代码汇编到.text 段。
[symbol]     .usect “section_name”,size    定义未初始化段,size 给出预留空间字数。
                                           汇编到用户自定义的 section_name 段。
[symbol]     .sect “section_name”          定义初始化段。汇编到用户自定义的
                                           section_name 段。
.bes size in bit                           在当前段内保留 size 位的空间,标号指向保
                                           留空间的最后一个可寻址字。
.byte value1,[,…,value n]                  在当前段内初始化一个或多个连续字节。
.word value1,[,…,value n]                  初始化一个或多个 16 位整数。
.copy [“]filename[“]                       从其他文件读取源代码。以拷贝形式读取的
                                           代码可以列入表文件。
.def symbol1,[,…,symbol n]                 在当前模块内定义一个或多个符号,这些符
                                           号可以被其他模块引用。
.global symbol1,[,…,symbol n]              定义一个或多个全局符号。
.include[“]filename[“]                     从其他文件读取源代码。以包含形式读取的
                                           代码不可以列入表文件。
.ref symbol1,[,…,symbol n]                 在当前模块内引用其他模块内定义的符号。

                                                                  168
.macro                                  宏定义识别符,在宏的第一行。
.endm                                   宏定义结束符,在宏的最后一行。
.if expression                          标记条件汇编的起始位置,且表达式条件为
                                        真时,汇编代码。
.endif                                  标记条件代码块的结束位置,结束条件汇编
.globe _varialbename                    定义全局变量,全局变量名要用“_”开头。


二.公共目标文件格式
     对源文件使用汇编器汇编或链接器链接后,生成公共目标文件(COFF)。前者
生成 COFF 目标文件(*.obj),后者生成 COFF 可执行文件(*.out)。
(一)COFF 文件的通用格式
     COFF 文件包含如下部分:
                                 File header
                             Optional file header
                              Section 1 header


                              Section n header
                             Section 1 raw data


                             Section n raw data
                       Section 1 relocation information


                       Section n relocation information
                            Section 1 line number


                            Section n line number
                                Symbol table
                                 String table
     图 6-4:COFF 文件的一般结构
         1)文件头(file header):长度 22 字节,包含 COFF 文件结构的版本号、
            段的数量、创建日期、符号表起始地址、入口数量、可选文件头长度
            等基本信息。
         2)可选文件头:由链接器生成。包括执行代码的长度和起始地址、初始
            化数据的长度和起始地址、未初始化段的长度、程序入口地址等。

                                                          169
    3)段头信息列表(section x header):每个段都有一个头,用于定义各段
       在 COFF 文件中的起始位置。如段名、物理地址、虚拟地址、长度、
       原始数据长度等。
    4)初始化段的原始数据(section x raw data):每个初始化段的原始数据,
       即需要写入程序存储空间的代码和初始化数据。
    5)初始化的重定位信息(section x relocation information):汇编器自动
       生成各初始化段的重要定位入口信息,链接时,链接器读取这些入口
       信息并结合用户对存储空间的分配进行重定位。
    6)初始化段的入口行号(section line number):该部分主要用于 C 语言
       程序的符号调试。由于 C 语言要先编译成汇编程序,汇编器会在汇编
       代码前生成一个行号,并将行号映射到 C 源程序中相应的行上,便于
       调试程序。
    7)符号表(symbol table):用于存放程序中定义的符号的入口地址,以
       便调试。
    8)字符串表(string table):用于存放那些符号名称超过 8 个字符的符号
       名称字符串。因为符号表中,符号一栏的长度为 8 个字符,当符号名
       称的长度小于 8 个字符时,就在符号表中直接使用符号名称;当超过 8
       个字符时,就在符号表中使用指针,该指针指向字符串表中对应的符
       号名。
  COFF 目标文件中,“段(Section)”是目标文件中的最小单位。一个段是最
终在 DSP 片内或片外存储器中占据连续空间的一段代码或数据。
  一般的 COFF 文件都包含.text、.data、.bss 三个段。
(二)一个 COFF 文件的例子
  下面是一个 COFF 目标文件的典型例子。
                          File header
                      .text section header
                     .data section header
                      .bss section header
                   <named> section header
                         .text raw data
                        .data raw data
                  <named> section raw data
                  .text relocation information
                 .data relocation information


                                                     170
              <name> section relocation information
                        .text line number
                        .data line number
                  <named> section line number
                          Symbol table
                           String table
  图 6-5:一个 COFF 文件的典型例子
  比照前面的一般结构,可以看出该文件包含 3 个默认段.text、.data、.bss 和 1
个命名段<name>。
(三)各段在 COFF 文件中的存储顺序
  一般来讲,汇编器或链接工具按如下顺序将各个段保存在目标文件中:
  1).text
  2).data
  3)用户自定义的初始化命名段
  4).bss
  5)用户自定义的未初始化命名段
  由于未初始化段.bss、.usect 只是用于在存储空间中保留一定数量的存储单元,
因此,各未初始化段虽然也有段头,但没有原始数据、重定位信息和入口行号。


第五节:基于 CCS 开发 DSP 软件

  到此,我们具备了使用 CCS 的一些最基本条件和知识。这里,我们介绍工程
创建和开发的最典型过程。实际上,要达到熟练开发的目的,CCS 要了解的内容
很多,绝对不少于对 DSP 本身的了解内容。限于课时原因,我们不可能全面展开
介绍 CCS 的全部,只能简单地予以介绍和演示。面对实际开发任务,我们可以参
照具体的 CCS 技术资料。


一.新建工程
  下面,将给出一个新建开发 DSP 软件工程的过程指导,按照这个步骤,我们
可以快速建立自己的 DSP 软件工程。
(一)建立工程
  1.我们在 CCS 安装目录下,找到\myprojects\目录,在这里新建一个你自己
的工程文件夹,如 abc。




                                                      171
  2.单击桌面上的图标         或者在完成配置驱动,选择“Save and Exit”
命令时,直接选择“Start Code Composer Studio”,都可以出现如图 6-6 所示的
画面。




  图 6-6:新建工程示意图
  3.首先在 Project 菜单下选择 New 菜单项,操作如图 6-7 所示。




  图 6-7:新建工程示意图


                                                  172
  然后,出现如图 6-8 所示的对话框。我们在这里可以设置新建工程的相关属性
等内容。




  图 6-8:新建工程示意图
  4.填写对话框,建立一个名为 abc 的新工程,并确认存储路径、工程类型、目
标器件型号等,如图 6-9 所示。




  图 6-9:新建工程示意图
  单击“完成”按钮,即可保存。
  这样,就建立了一个名为 abc.prj 的工程,这时的界面如图 6-10 所示。



                                             173
   图 6-10:新建工程示意图
(二)CCS 软件自带的实验工程文件
   CCS 自带了用于实验的工程文件,如果想利用它来进行演示和实验,可以把这
些文件直接加载到你的工程目录。
   如前面例子,你建立的工程目录是 c:\tieval2\my projects\abc。我们需要
                            (工程对应的 DSP 系列)
把 CCS 安装目录下的\tutorial\sim28xx             \volume1\目录下
的如下文件拷贝到 abc 中。
   1.volume.c:实验用源文件(C 主函数)。
   2.load.asm:实验用源文件(汇编子函数)。
   3.vectors.asm:实验用源文件(中断向量表)。
   4.volume.h:C 主函数使用的头文件。
   5.volume.cmd:内存定位文件。
   6.sine.dat:实验用数据文件。
   7.volume.gel:实验用 GEL 控制文件。
   一般地,    我们要按照  “二、 三”的方法,自行进行我们需要的工程源文件开发,
使用编辑器编辑我们需要的各种源代码文件。

二.建立源文件
  工程建立后,按如下方法建立源文件。我们可以建立 C(*.c)、汇编(*.asm)及
存储器配置文件(*.cmd)等源文件。
  1.单击 File→New→Source File,即可建立属于该工程(abc.prj)的文件,
默认文件名为 Untitled1,操作如图 6-11、图 6-12 所示。




                                                   174
图 6-11:建立源文件示意图




图 6-12:新建工程示意图
2.单击 File 菜单下的 Save 或 Save As 菜单项,如图 6-13 所示。




                                                175
  图 6-13:建立源文件示意图
  然后,出现如图 6-14 所示的保存画面。




  图 6-14:新建工程示意图
  3、可根据项目的需要,为文件选择一个合适的文件名,并选择不同的文件类
型,如.asm、.cmd、.c,以及存储路径等,如图 6-15 所示。




                                  176
  图 6-15:新建工程示意图
  然后,单击“保存”按钮即可。
  4、我们尝试建立一个名字为 dsp.c 文件后,界面如图 6-16 所示。




    图 6-16:新建工程示意图
    5、此时,用户就可以进行文件的编辑了。
    实际上,   编辑器可以编辑许多类型的文件,   包括汇编        、
                                  (*.asm) C 语言(*.c)、
C++(*.cpp)、存储器配置       、
                (*.cmd) 链接结果说明文件       、
                                (*.map) 各种头文件  (*.h、
*.hpp)、汇编包含文件(*.inc)等。

                                                 177
三.编辑源文件(asm,c,cpp)
(一)汇编语言编程
    使用汇编语言编辑工程文件需要非常熟悉汇编语言各类指令代码,我们可以按
照上述方法进行对应的汇编语言源文件开发。
    一个汇编代码的实例。
(二)C 语言编程
    使用 C 语言代码编辑需要的文件。一般建议,尽量用 C 而不是 C++编辑代码,
这是因为,C 的效率要比 C++高。
    如果使用 C 代码编程,要先用 C 编译器转换为汇编语言,然后再进行汇编和
链接。
    一个 C 代码的实例。
(三)C 与汇编语言混合编程
    一般地,可以用 C 语言来编辑主系统程序和部分子程序,对于算法、中断向
量表等实时性要求强的代码,则使用汇编语言来编辑。
    C 语言和汇编语言混合编程有其特定格式,根据这些要求编辑的程序可以实现
互相调用。
    具体混合编程方法,我们引入了如下文章供大家参考:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.C 与汇编混合编程的一般规则
   C 语言的 mC/OS-II 内核带来了编程方式选择的问题。一方面,采用 C 语言设计效率较高,
利于实现模块化、组态化的设计目标。另一方面,信号采集处理频率较高,如 400Hz 交流信
号、频率信号和分辨率较高的开关量信号;同时,程序运行既要符合 mC/OS-II 时钟节拍,也
要满足数据总线上大小周期的定义。这导致对定时的要求较高,对中断程序设计要求严格。因
此混合编程是合理的编程方式。
2.一般混合编程方法
   混合编程的一般方法有三种:一是对 C 程序编译后形成的汇编程序进行手工的修改与优
化。二是直接在 C 语言程序中嵌入汇编语句。三是分别编写 C 程序和汇编程序,再独立编译
成目标代码模块,再进行链接。
   第一种编程方式要求对汇编与 C 语言都极其熟悉,并且这样的编程方式对程序的可读性
和扩展性的负面影响比较大。第二种方法适用于语句执行频率非常高,并且 C 编程与汇编编
程效率差异较大的情况,例如进入中断的通用中断子程序等。第三种方式是混合编程最常用的
方式之一。在这种方式下,C 程序与汇编程序均可使用另一方定义的函数与变量。
变量定义的规则与数组、指针的使用
   变量定义是混合编程的基本问题。C 程序与汇编程序定义的变量相互之间可以进行访问。

                                                                           178
在汇编程序中定义时,需要在变量前加下划线“_”,然后再用.global 定义为全局变量。在 C 程
序中则需要说明为 extern 变量。
C 语言中常用的数组与指针也可以很方便地在汇编程序中定义并互相访问。如例,在汇编语言
中用.usect 定义占用 6*32 个字的全局变量_AC_RSLT,在 C 程序中被说明成一个 6*32 的 16
位无符号数的二位数组。当然,在汇编程序中,数据的存放格式需要满足 C 对二维数组数据
存放格式的要求。即在存储器中,从低地址到高地址,二维数组的内容从第一行起各行依次放
入存储器中。实际上,这个数组定义也可以看作是指针定义。
汇编程序:
_AC_RSLT .usect “ADDATA”, (6*32)
.global _AC_RSLT
C 程序:
extern INT16U AC_RSLT[6][32];
( extern INT16U *AC_RSLT; )
依此类推,只要具有明确的数据存放格式,C 语言中各种类型的变量在汇编语言中都可以方便
地定义和使用。
3.函数调用的一般规则
1)C 程序中调用汇编函数
C 程序中调用的汇编函数,在汇编中其名称以程序标号的形式出现。程序标号作为操作数
用.global 进行定义。并且同变量一样,在前面加下划线“_”。汇编函数也可以给调用者传递返
回值,它实际上是通过被写入累加器返回的。汇编函数一般具有如下例的形式:
_calcu:
POPD *+ ; 将返回地址压入任务栈
SAR AR0, *+ ; 存储调用者的帧指针
SAR AR1, *
LAR AR0, #01h
LAR AR0, *0+,AR2 ; 堆栈指针复制到 AR0 并创建局部帧
SETC SXM ; 注意: 改变了状态寄存器
MAR *, AR2
LAR AR2, #0FFFDh ; AR2=-3
MAR *0+
LACC * ; 访问调用者传递的参数
……
MAR *, AR3
LACL * ; 传递返回值


                                                         179
MAR *, AR1
SBRK #02h
LAR AR0, *-
PSHD *
RET
2)汇编程序中调用 C 函数
      汇编程序中调用 C 函数相对比较简单,编译器已经提供了相当完善的支持。函数在 C 中
需要用 extern 进行定义,函数名加“_”后在汇编程序中用.ref 说明为外部标号。在调用函数之前
应手工编程将参数以逆序写入到当前运行任务所使用的任务堆栈中,压栈之前堆栈指针可不作
调整。被调用的 C 函数即可正常访问调用者传递的参数,函数调用完毕后需要调整堆栈指针,
清除函数调用中参数所占用的堆栈空间。C 函数的返回值可以通过访问累加器获得。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(四)其他关联文件和支持文件
      除了用上述方法编辑的主程序、子程序、头文件、数据文件等代码文件外,还
需要准备如下文件:
      一个工程,如果用到中断,则需要编辑自己的中断向量表文件(vector.asm)。
      为了合理分配内存,还需要编辑自己的内存定位文件(如 abc.cmd)。
      如果使用了 C 语言编程,则需要运行时支持库文件(rts.lib)。
      等等。


四.内存配置与链接命令文件
      略。


五.向工程添加文件
      完成以上工作后,可以象工程中添加我们的各类文件。
1.添加源文件
2.添加内存定位文件
3.添加支持库文件
4.添加头文件


六.建造工程
(一)建造工具介绍
1.C 编译器




                                                                           180
  使用 C 编译器可以进行 C 语言到汇编语言的转换。C 语言程序必须要经过 C
编译器编译为汇编程序后,才能进入汇编阶段。
  该模块又包含语法分析、代码优化、代码产生等部分,分别用于 C 代码的预
处理及语法检查、代码效率优化、C 程序(*.c)到汇编程序(*.asm)的转换等。
2.汇编器
  汇编器用于将用户编辑或 C 编译器输出的汇编语言源文件以及文件管理器的
宏库内的宏汇编成可重新分配地址的机器语言目标文件*.obj。
  它符合 COFF 格式,但是不可执行的。只有通过链接器的链接,才成为可以执
行的 COFF 格式文件*.out。
3.链接器
  实际上,链接器是把可以重新分配地址的目标文件*.obj 作为输入,生成可以
执行的目标文件。也就是说,链接器把具有浮动地址的*.obj 文件的代码和数据,
按照用户说明的程序和数据存放地址,重新定位链接,并产生到实际物理存储器中
的映射——可执行的 COFF 目标文件*.out 和链接过程结果说明文件*.map。
  链接器的输入可以是多个目标文件:直接输入的或者是目标文件库中包含的。
链接时,同名段的代码将被合并到同一个段中。
  同时,链接器允许用户重新配置各段的空间位置,如不定义,则默认.text 的起
始地址为 0000h,其他段按前述顺序(默认算法)依次存放。用户配置的方法是利
用链接器命令语言来编制链接器命令文件*.cmd。相关内容教材中 P264“存储器空
间的分配”一节有介绍。
  归纳起来,链接器要完成如下工作:
  1)将各段定位到目标系统的物理存储器中。
  2)为符号和各段指定最终地址。
  3)定位输入文件之间未定义的外部引用。
(二)建造过程
  实际上 CCS 的建造过程包含了 C 编译、汇编、链接三个过程,直接“建造”
即可完成,而象以往那样,分别进行。


第六节:调试应用程序

一.常用代码调试工具
(一)软件模拟器(Simulator)
  是一种软件模拟开发工具,可以被安装在 PC 上,不需要硬件支持。它可以非
实时方式调试和模拟程序的运行过程,及做相关修改,是初学者一种理想的工具。


                                             181
  用这个模拟器进行调试前,必须先对源程序进行汇编和链接,再调入模拟器调
试。
  它利用 PC 的 CPU 和存储器实现对 DSP 硬件的模拟,可以执行程序、修改和
查看寄存器、对数据和程序存储器进行修改和浏览及初始化、模拟外设和流水线、
计算指令周期数、断点设置、跟踪累加器和程序计数器及辅助寄存器、单步执行程
序、非法代码和非法访问提示等等,基本具备一个模拟调试工具的常规功能。
(二)软件评估模块(EVM)
  该模块用于 DSP 器件的性能评估、软件调试,包括 EVM 硬件板和驱动软件。
它配置了一定数量的硬件资源,可以用来对 DSP 芯片的性能进行评价,也可以组
成一定规模的用户 DSP 系统,适合于原理样机开发阶段。它使得硬件设计、软件
开发、系统调试可以同步进行。
  以 F240 EVM 板为例,包括了 128K RAM、异步串行口、模拟 I/O 接口、F240
芯片等。
  除了 EVM 外,TI 公司及其它公司还提供其它功能类似的板卡,如 MCK 等。
(三)初学者开发工具(DSK)
  该板主要用于软件调试。这个工具与 EVM 有类似之处,它也配置了 DSP 芯
片、A/D 转换、外部接口等,并可以通过串行接口连接计算机系统。
  在计算机上实现程序编辑、汇编、链接之后,可以下传到 DSK 芯片的片内 RAM
中。
  DSK 还把 DSP 芯片的数据总线、地址总线及相应控制信号引出,以便用户扩
展自己的系统。


二.下载到 DSP
  我们可以选择合适的硬件开发工具,如 EVM、MCK、DSK 及用户自己的用户
板等,把程序下载到 DSP 进行调试。
  把第五节范例程序下载到 DSP。


三.调试过程
  这一部分涉及如下一些内容:
(一)查阅代码
(二)运行程序
(三)改变选项和修改语法错误
(四)使用断点
(五)观察窗


                                                182
   具体细节可以参阅有关资料,不再赘述。


第七节:结语
   实际上,集成开发环境 CCS 是一个非常复杂的开发工具,对它的了解绝对不
是少数课时可以完成的。除了系统的学习外,更重要的是要在实际应用中掌握相关
技术。
    该软件平台包括大量高级工具、DSP/BISOTM、片级支持库等,为 DSP 技术
开发提供了强有力的支持。
    从应用层面来讲,整个 DSP 的产业链可分为五个部分,分别是器件、开发和
演示系统、标准应用算法、操作系统/设备驱动/协议栈/系统应用,以及产品开发
与系统集成,逐级而上,分别由 DSP 厂商、第三方公司(3P)和客户承担。其中 DSP
厂商的精力主要放在改进芯片设计、革新制造工艺、提高运算速度、增加功能、降
低功耗和减小成本等方面,而开发工具、应用软件和实际应用系统一般由第三方公
司和客户或 ODM 完成。
   具体应用范畴参考《DSP 入门及系统解决方案》。其中提到关于音频、生物辨
识、数字控制、电讯、视频与成像等多方面的应用解决方案。
   TI 公司报出的建议零售价格,目前的 TMSX24X 到 TMSX28X,价格为 345-595
美圆。开发工具 1500-16000 美圆。
   TI 网站给出了产品、开发工具、解决方案、算法等大量信息,我们可以参考。
网址 WWW.TI.COM。




                                                  183
第七章:课程相关的阅读资料
   这里推荐了部分资料,供学员阅读。通过这些资料,可以比较完整地了解 DSP
技术的相关知识和信息。


资料 1:TI 科学家谈浮点 DSP 未来发展

  自十多年前浮点数字信号处理器(DSP)诞生以来,便为实时信号处理提供了算术上更为先
进的备选方案。不过,定点器件至今仍是业界的主流--当然低成本是主要原因。定点 DSP 每器
件产品的价格很低,这对大规模大众市场应用而言是相当重要的优势。


  相比较而言,浮点 DSP 能够实现更快速而简便的开发,因此对开发成本比单位制造成本
重要的小规模应用而言,更是最佳的选择。


  最近几年,高密度集成与支持改善使两种 DSP 在使用方便性与成本上都较为接近。目前,
器件类型的选择越来越取决于应用数据集是否要求浮点格式的更多计算功能。因此,设计大规
模量产信号处理应用的开发人员现在开始发现浮点格式更多的内在价值。他们将视线投向传统
定点 DSP 开发模式之外的领域,并探索浮点 DSP 所带来的设计机遇。


不同的数字格式


   定点与浮点 DSP 的基本差异在于它们各自对数据的数字表示法不同。定点硬件严格执行
整数运算,而浮点 DSP 既支持整数运算又支持实数运算,后者以科学计数法进行了标准化。
字长为 16 位的定点 DSP 实现 (rovide) 64K 的精度,带符号整数值范围为 -215 至 215-1。


  与此相对比,浮点 DSP 将数据路径分为两部分:一是可用作整数值或实数基数的尾数,
二是指数。在支持业界标准单一精确运算的 32 位浮点 DSP 中,尾数为 24 位,指数为 8 位。
由于其较长的字长与取幂范围,该器件支持 16M 的精度范围,这样的动态范围大大高于定点
格式可提供的精确度。实施业界标准双精度(64 位,包括一个 53 位的尾数与 11 位的指数)
的器件还可实现更高的精确度。


成本与方便易用性


  浮点 DSP 提供的计算能力更高,这也是其区别于定点 DSP 功能的最大差异所在。但在
浮点 DSP 刚刚出现的 20 世纪 90 年代初期,其它因素往往掩盖了基本的数学计算问题。浮点
功能需要的内部电路多,而 32 位数据路径比当时可用的定点器件要宽一倍。晶片面积越大,
引脚数量就越多,封装也越大,这就大大提高了新款浮点器件的成本,因此数字化语音与电信
集成卡(concentration card)等高产量应用仍更倾向于采用较低成本的定点器件。

                                                        184
  当时,方便易用性抵消了成本问题带来的不利影响。浮点器件是最早支持 C 语言的 DSP
之一,而定点 DSP 则仍须在汇编代码级上进行编程。此外,对浮点格式而言,实数运算可直
接通过代码加入硬件运算中,而定点器件则必须通过软件才能间接执行实数运算,这就增加了
算法指令并延长了开发时间。由于浮点 DSP 易于编程,因此其最初主要用于开发工作强度较
大的情况,如研究、原型开发、影像识别、工作站的三维图像加速器以及雷达等军用系统。


逐渐趋同


  目前,早先的成本与易用性间的差异已经不那么明显了。总体说来,定点 DSP 仍然在成
本上有优势,而浮点 DSP 仍然在易用性上有优势,但差别已经缩小很多,因此上述因素已经
不再起决定作用了。


  成本日益成为片上系统(SoC)集成与产量的问题,而不是 DSP 内核本身大小的问题。在十
年前还只能放置单个晶体管的空间,目前可放置数十个晶体管。目前,占据晶片面积最多的是
存储器,而不是逻辑,而且许多基于 DSP 的产品都充分利用再扩展(rescaling)的优势,针对具
体市场的需求集成了不只一个内核。定点 DSP 的成本仍然较低,因为其针对大众市场应用的
产量很高;但是,如果大规模量产的需求出现,那么浮点器件也将受益于规模效益带来的同样
的成本降低。


  早期在易用性方面的差异也已经减小。高效的 C 编译程序与工具早已能支持定点 DSP,
为代码执行带来了可视性。直接采用浮点硬件实施实数运算仍有优势;但目前先进的建模工具、
完整的数学函数库以及现成的算法降低了为定点器件开发复杂应用的难度。


浮点的精确度


  目前,选用定点 DSP 还是浮点 DSP 归根结底在于应用数据集是否需要浮点算术功能。总
体说来,设计人员应解决两个问题:数据集要求多高的精确度?数据集的可预见度有多大?


  三个因素影响着浮点格式的内在高精度。首先,浮点 DSP 的 24 位 I/O 字长在整数与实数
值方面可实现比定点器件中常用的 16 位字长更高的精确度。第二,取幂大幅提高了应用可用
的动态范围,较大的动态范围对处理极大数据集以及难以方便预计数据集范围的情况相当重
要。第三,浮点硬件内部的数据表示法比定点器件更为精确,这就保证了最终结果的精确度更
高。


  最后一点应稍做解释。在 DSP 的内部架构中,三种数据字长相当重要,应当考虑。第一
是 I/O 信号字长,正如我们已经说过的那样,其就浮点而言为 24 位,就定点 DSP 而言通常为
16 位。第二就是用于乘法的系数字长。定点系数为 16 位,与信号数据相同;但浮点系数则可

                                                185
能为 24 位或 53 位,这取决于所用的是单宽度精度还是双宽度精度。如果指数表示有意义的零,
则精确度实际上会超过上述位数。


  最后,就是保存乘加器(MAC)运算中间结果的字长,通常称作寄存器文件。对单一 16 位
乘以 16 位的乘法而言,将需要 32 位的乘积;而就单一 24 位乘以 24 位的尾数乘法而言,则需
48 位的乘积(指数有不同的数据路径)。但是,MAC 需要额外的位用于溢出空间 (overflow
headroom)。在 16 位定点器件中,溢出空间通常为 8 位,这就使总的中间结果字长为 40 位
(16 个信号+16 个系数+8 个溢出)。


  将相同大小的溢出空间集成到浮点 DSP 中将需要 60 个中间结果位(24 个信号+24 个系数
+12 个溢出),这将超过大多数应用对精度的要求。但就取幂而言,我们将结果标准化,这样
所有 24 位或 53 位都有效,溢出位就不必要了。TI 的 TMS320C67x 系列等浮点 DSP 允许开发
人员在双精度内部运算与单精度 I/O 结合的模式下优化精确度与性能。其结果是得到的精确度
比定点或单精度浮点运算提供的精确度高得多,但又不会产生完全双精度 I/O 带来的周期问
题。


视频与音频数据集要求


  将视频与音频应用的数据集要求加以对比,就很容易看出使用浮点格式的优势。视频的采
样率很高,其像素数据采样率相当于每秒数十乃至数百个兆位 (Mbps),具体的值决于应用。
像素数据通常以 8 至 12 位的短字表示,每一位代表影像的红、绿、蓝(RGB)位面。业界标
准的 MPEG 视频压缩算法的关键数学运算包括离散余弦变换(DCT)与量化,且过滤有限。DCT
与量化采用整数运算就能有效处理,它与短数据字相结合使得视频成为定点 DSP 很自然的应
用,特别对那些设计有大量并行数据路径与片上视频接口的情况更是如此。


  另一方面,音频的数据流更为有限,对 24 位采样且每秒 48 千个采样 (ksps) 的速度而
言,约为 1Mbps 的速度。新兴的采样率为 192ksps,为该数据速率的四倍,但其数据流仍然大
大低于视频流。不过音频数据的处理必须比视频精确得多。眼睛很容易就被欺骗,特别当影像
运动时更是如此;但耳朵就很难欺骗了。因此音频需要浮点硬件提供的更大的字长。


  使用完全 24 位浮点 I/O 精度来进行声音采样,这就得到 144dB 的动态范围,大大超出了
声音复制所需的全振幅范围。此外,音频还要求宽系数与中间结果提供的精确度,其原因有二。
首先,音频应用通常使用串联无限脉冲响应滤波器(IIR)以实现最低时延与最高性能。但串联过
滤每一级都会传播上一级的错误。信号与系数字长越长,精确度越高,上述传播错误的影响就
越小。




                                                      186
   第二,在接近于零时必须保持信号精确度,以避免人耳可以分辨的谐波失真。浮点格式
从本质上说与人耳的敏感度配合得很好,因为它在分数趋近于零时会变得更精确。相反,定点
系统在分数极小的情况下会取近似值等于零,这就降低了精确度。所有上述浮点实数算法方面
都对真实复制音频信号至关重要。


  尽管过去常用定点器件实现高保真音频,但目前则转向采用精确度更高的浮点格式。某些
浮点 DSP 集成了多通道音频串行端口(McASP),从而简化了音频系统的设计,这就为上述发
展趋势提供了支持。随着最新型音频创新在消费类电子产品中的日益普及,对浮点 DSP 的需
求也将上升,这也有助于让其成本更接近于定点 DSP。


其他数据集


  其它类型应用的数据集也可受益于浮点的精确度。在医疗影像识别中,更高的精确度能够
支持许多层次的信号输入,包括光、X 射线、超声波与其它来源的输入等,它们都必须进行定
义与处理,以生成提供有用诊断信息的输出影像。动态范围较大对雷达至关重要,这种情况下,
系统应能够在从零到无穷大的范围内进行跟踪,而只用整个范围的一个较小的子集进行目标捕
获与识别。动态范围较大也有助于让机器人处理不可预见的情况,如在机器人正常有限的运动
范围中遇到的障碍等。与上述应用形成对比的是,定点器件为巨大的通信市场提供更好的服务,
因为大多数通信数据都是以八位字节串行传输,随后进行内部扩展以根据整数运算进行 16 位
处理。


  近年来,随着数字信号处理领域不断发展,DSP 也由应用推动发展。SoC 集成意味着更多
的存储器和不同的内核与专用外设一起均能集成到同一器件上,这就使 DSP 产品能够按特定
市场的需求进行定制。在此环境中,浮点功能已成为整体 DSP 产品组合中的另一要素。


定点 DSP 与浮点 DSP


  之间在成本与易用性方面仍有某些差异,但随着时间的推移,上述差异已经不大。对设计
人员最具重要性的特性在于浮点格式具有更高的算术灵活性与精确度。对高保真音频以及需要
实数运算、更高精确度与较大动态范围的其它数据集应用而言,浮点 DSP 是最佳的解决方案。




资料 2:DSP 典型应用解决方案

  DSP 经过十几年在国内的发展,已广泛的应用到了图象、语音、电机控制等各个领域,
当然这就给大家在做系统方案设计时提供了可借鉴的资源,由于 DSP 的应用领域很广而限于



                                            187
文章的篇幅我们给大家推荐三种目前应用最广泛的三种解决方案,希望能给大家的产品设计提
供借鉴。


DSP 典型应用解决方案一:图象处理
    美国 TI 公司 2002 年推出 TMS320C64x 系列 DSP,预计 2003 年该系列 DSP 的处理器主频能
达到 1GHz 以上,基于该处理器北京飓风中天科技发展有限公司(TI 公司的第三方)推出了具
有超高速、高性能、高可靠性的实时图象处理应用平台。
   可广泛应用于雷达、实时图象处理、IP 可视电话、图象监控、模式识别等领域。
   系统功能框图:




                                                            图1
                                                            典型
                                                            图象
                                                            处理
                                                            系统
                                                            功能
                                                            框图




一、 硬件
1、 高速 DSP 核心处理板
(1)DSP 选用 TI 公司推出的全世界最快的 DSP--TMS320C64xx,根据用户不同的应用可选择:
TMS320C6416 /15 /14GLZ:工作频率可达到:750-、600-、500-MHz,运算速度可达到:4000、
4800、5760MIPS
(2)存储器资源:
   片内:
- 128K-Bit (16K-Byte) L1P 程序缓存
- 128K-Bit (16K-Byte) L1D 数据缓存
- 8M-Bit (1024K-Byte) L2 全局存储器
   板上 EMIFs 扩展:
EMIFA(64-Bit):256M-Bit/32M-Byte SDRAM
EMIFB(16-Bit):256M-Bit/32M-Byte SDRAM
FLASH Memory 扩展:16M-Bit/2M-Byte 或 32M-Bit/4M-Byte 可选


                                                             188
(3)64 个独立的增强 DMA 通道
(4)一个主机通信接口(HPI)(总线宽度可由用户配置为 32-/16-Bit),根据不同的项目需
求用户可选择以下扩展板:
① ARM 嵌入式系统板(CY-ARM4510B)可扩展出 10Base-T 或 10/100Base-T 以太网接口(可
选)、IDE 硬盘或 CF 卡(可选)、RS-232 接口、RS-485 接口、液晶显示、键盘等。
② PCI 接口板(CY-PCI2.2):32-Bit/33-MHz, 3.3-V PCI Master/Slave Interface Conforms to PCI
Specification 2.2 (适用于 6415、6416 DSP),四线串行的 EEPROM。
(5)三个 McBSP 串口(多通道缓存串口)
(6)三个 32-Bit 定时器
(7)一个 RS-232 接口
(8)三路模拟图象输入接口:支持 NTSC/PAL/SECAM 复合视频输入,具有卓越的三线自适
应梳状滤波器能克服传统梳状滤波器的人工痕迹而保证全屏视频分辨率,其灵活的像素端口即
支持数字视频输入又支持 VIP、VMI、ByteStream 这些流行图像控制器接口。


2、ARM 嵌入式系统扩展板(CY-ARM4510B)
    硬件资源:
    ☆ 8M-Byte SDRAM
    ☆ 16M-Byte Flash memory
    ☆ 10Base-T 或 10/100Base-T 以太网接口(可选)
    ☆ IDE 硬盘或 CF 卡(可选)
    ☆ RS-232 接口
    ☆ RS-485 接口
    ☆ 可扩展液晶显示、键盘等


3、 PCI 接口板(CY-PCI2.2)
    ☆ PCI 接口:32-Bit/33-MHz, 3.3-V PCI Master/Slave Interface Conforms to PCI Specification
    2.2 (适用于 6415、6416 DSP)
    ☆ 四线串行的 EEPROM
    ☆ 根据用户需求可选择 CPCI 接口卡




二、 硬件测试软件、操作系统和算法


1、 硬件测试软件:
    测试软件包括:SDRAM、Flash memory、RTC、IIC、等板上所有资源的测试程序源代码。


                                                                                       189
2、操作系统和接口驱动程序:
☆ 操作系统:uCLinxu 2.4 (提供源代码)
☆ 提供板上各种接口的驱动程序(提供源代码)
☆ 提供与 DSP 通信的驱动程序


3、 DSP BIOS 和 API 接口:
   板上提供了针对 DSP 芯片的函数库、板上各种资源的基本输入输出操作系统(BIOS)和
专用于图象处理的应用程序接口(API),以及方便用户做二此开发的软件开发包(SDK)。


4、 应用算法:
☆ JPEG
☆ MPEG2
☆ MPEG4
☆ H.263
☆ H.264




图 2 图象处理实物图


DSP 典型应用解决方案二:语音处理


一、系统硬件组成:
   USB2.0 接口:高速(High speed)USB 接口,传输速度可达 480Mbps,兼容 USB1.1,热
插拔,即插即用。USB 驱动程序兼容 Win98、Win2000 和 Windows XP。利用 USB 接口实现
DSP 与主机的高速通信。




                                                          190
   系统功能框图如下:




            图 3 典型的语音处理系统功能框图
具体的资源包括以下内容:
1. DSP:兼容 TI 公司 TMS320C54XX 系列和 TMS320C54XX(A)系列,包括 5402、5409、
5416、5402A、5409A、5410A 等。DSP 可以工作在最高 160MHz。
2. 扩展程序存储器:256K-16bit SRAM,配置在片外,全速(零等待)运行。
3. 扩展数据存储: 256K-16bit SRAM,配置在片外,全速进行。
4. 扩展 Flash:512K-16bit FLASH,可扩充至 1M-16bit;配置在 DSP 片外,读写周期 70ns。
5. 扩展同步串口:扩展两个同步串口,MCBSP0+MCBSP1/MCBSP2。
6. 扩展 IO:扩展 16 bit 通用 IO      ,
                        (GPIO) 可以按位配置为输入或输出,电平兼容 5V 和 3.3V。
7. JTAG 接口:符合 IEEE 1149.1 标准,支持 TI 公司的 Code Composer Studio(CCS), 软件开
发可以用汇编语言,也可以用 C 语言。
8. 看门狗(WATCHDOG):硬件看门狗,使系统可以适应复杂的工作现场。
9. 电源:单一电源(+5V)供电,电流<500mA;可以使用 USB 接口提供的电源,也可以
使用外接电源供电,二者可以灵活转换。
10. 信号源、电源、音箱、实验箱


二、软件组成
   鉴于该系统目前主要用户是高校,所以针对本实验开发系统,目前开发了如下实验,今后
还将开发系列化 DSP 应用实验。
1.基本数学运算实验 2.数据采集实验
3.采样定理实验 4.信号发生实验
5.IIR 滤波器实验 6.FFT 变换实验
7.FIR 滤波器实验 8.自适应滤波器实验
9.语音处理实验

                                                                   191
DSP 典型应用解决方案三:电机控制
  TI 公司 TMS320LF2407 系列 DSP 专为高速控制应用设计的一个处理器。
  飓风公司结合各种应用设计出标准应用平台,该系统根据算法和驱动板的不同已广泛应用
于大功率电机控制、小功率马达控制、电池检测、UPS、燃料电池等产品中。其中电机控制的
方案适用于:直流无刷电机控制、交流感应电机控制、永磁同步电机控制、开关磁组电机控制,
可实现开环、半闭环和闭环控制,同时可以将电机运行的状态和参数通过 LCD 现场显示,并
可直接通过打印机打印。
  系统功能框图如下:




        图 4 典型电机控制系统功能框图


系统包括以下几部分:
一、硬件组成:


1、高速 DSP 控制板
  包括 DSP、电源、时钟、复位和存储器部分、键盘和显示模块、打印机控制模块、串口
通信模块和与功率驱动板的标准接口。


2、 功率驱动板
  包括系统电源管理部分、整流滤波模块、逆变驱动部分和反馈电路部分。


二、 软件和算法
  该系统不仅提供了完整的各模块的测试程序源代码,而且还可根据用户的不同需求定制以

                                                192
下专用算法,有 Random PWM、无传感器控制算法、变速控制算法、PFC 控制算法、DC 纹波
补偿算法、空间矢量控制算法、自适应控制算法等。


DSP 核心处理板
功率驱动板 电机控制套件




图 5 电机控制系统实物图
  以上给大家介绍了 DSP 的典型应用,要实现以上应用需要建立以下开发环境。


DSP 仿真器:
  开发环境的建立在项目开发中至关重要。开发工具包括仿真器、CCS、评估板等,用户可
根据自己的实际情况选择最佳的开发工具。
  TI 的 TMS320C64x 是最新的 DSP 所以建议大家一定要使用最成熟的开发工具,根据本人
在开发过程中对所有厂家的开发工具做了详细的测试和应用,比较结果如下:
PCI 仿真器缺点:
☆ 需要有 PCI 卡插到 PC 内,与 PC 机接口不稳定
☆ 与计算机内的显卡、网卡、声卡等都有可能会发生冲突
☆ 设备驱动程序与 WIN98/WIN2000/WINDOWS XP 等不兼容
USB 仿真器缺点:
☆ 大多数 PC 机的 USB 接口是 1.1 而不是 2.0 所以 USB2.0 的仿真器在 PC 机上做调试时速度
极慢
☆ 驱动程序不完善(目前为测试版),不能很好的与 C64x DSP 兼容,有些寄存器不能识别
  建议大家使用北京飓风中天科技发展有限公司的 CY-XDS510PP for C64x DSP 仿真器。
CCS 软件建议大家使用 CCS2.20.18 以上版本。


合作方式:
  随着 DSP 技术的发展,社会分工越来越细,要完成一个完整的产品需要整合社会各种资
源来共同完成,比如有些公司专门做硬件、有些公司专业做软件、有些公司专做系统集成。所
以建议大家用系统集成的观点,站在"巨人的肩膀上"来完成自己的设计。
  一般的技术设计公司都可接受客户的委托开发与合作开发。只要您把您的需求明确提出,



                                                         193
一般都能给您提供全套的硬件集成模块和算法解决方案。当然最终的具体应用还得最好靠自己
解决,因为自己对自己的行业应用最熟悉。




资料 3:基于算法的 DSP 硬件结构分析

1 引言


  在当前信息化、数字化进程中,信号作为信息的传输和处理对象,逐渐由模拟信号变成数
字信号。信息化的基础是数字化,而数字化的核心技术之一就是数字信号处理。数字信号处理
技术已成为人们日益关注的并得到迅速发展的前沿技术。DSP 作为一种特别适合于进行数字
信号处理运算的微处理器,凭借其独特的硬件结构和出色的数字信号处理能力,广泛应用于通
讯、语言识别、图像处理、自动控制等领域。


2 DSP 算法的主要特点及其硬件要求


  数字信号处理是指将模拟信号通过采样进行数字化后的信号进行分析、处理、它侧重于理
论、算法及软件实现。数字信号处理算法具有如下一些主要的特点:
①信号处理算法运算量大,要求速度快。不论是一维的语言信号,还是二维的图像信号,一般
算法的运算量都很大,且算法的实现都必须实时。
②信号处理算法通常需要执行大量的乘累加运算。比如 FIR 滤波算法主要执行的是一个点积运
算,也就是以乘、加为主的运算。
③信号处理算法常具有某些特定模式。比较典型的数字滤波器中的连续推移位。
④信号处理算法大部分处理时间花在执行相对小循环的操作上。
⑤信号处理要求专门的接口。一个非常重要的接口是把模拟信号与数字信号相互转换的 ADC
和 DAC,另外大量的数据交换需要有高速的数据吞吐能力。
  从一开始,DSP 的结构就是针对 DSP 算法模型进行构造的,几乎所有的 DSP 都包含有
DSP 算法的特征。因此,数字信号处理的上述特点要求 DSP 必须是专门设计的,典型 DSP 的
设计满足数字信号处理的这样一些要求:
①单周期快速运算,允许任意计算次序。
②单周期内能取两个以上操作数,保证快速的乘累加运算(MAC)。
③能产生信号处理算法需要的特殊寻址,如循环寻址和位翻转寻址。
④有相应的硬件循环缓冲区,能执行零开销的循环和转移操作。
⑤具有串口、DMA 控制器、定时器等丰富的外设资源。




                                              194
3 DSP 的基本结构组成


3.1 多总线结构


  微处理器内一般有两种基本总线结构:冯·诺曼结构和哈佛结构。这两种总线结构的结构
框图如图 1 所示。冯·诺曼结构取指令、取数据都是通过同一总线完成。因此必须分时进行,
在高速运算时,往往在传输通道上出现瓶颈效应。而 DSP 内部采用的是哈佛结构,它在片内
至少有四套总线:程序的数据总线、程序的地址总线、数据的数据总线和数据的地址总线。这
种分离的程序总线和数据总线,可允许同时获取来自程序存储器的指令字和来自数据存储器的
操作数,互不干扰。有的 DSP 片内还包括有其他总线,如 DMA 总线等,可在单周期内完成
更多的工作。


3.2 流水线


  与哈佛总线结构相关, DSP 广泛采用流水线以减少指令执行时间,从而增加了处理器的
处理能力。要执行一条 DSP 指令,需要通过取指、译码、取操作数、执行等几个阶段,DSP
的流水线结构是指它的这几个阶段在程序执行过程中是重叠进行的,即在对本条指令取指的同
时,前面的三条指令已依次完成译码、取操作数、执行的操作。正是利用这种流水线机制,保
证 DSP 的乘法、加法以及乘累加可以在单周期内完成,这对提高 DSP 的运算速度具有重要意
义,特别是当设计的算法需要连续的乘累加运算时。


3.3 硬件乘法器


  专用的硬件乘法器是 DSP 的特征之一,硬件乘法器的功能是在单周期内完成一次乘法运
算。 DSP 内还增加了累加器寄存器来处理多个乘积的和,而且该寄存器通常比其他寄存器宽,
这样保证乘累加运算结果不至于发生溢出。


3.4 多处理单元


  DSP 内部一般都包括多个处理单元,如 ALU、乘法器、辅助算术单元等。它们都可在单
独的一个指令周期内执行完计算和操作任务,而且往往同时完成。这种结构特别适合于滤波器
的设计,如 FIR 和 IIR。这种多处理单元结构还表现为在将一些特殊的算法作成硬件,如典型
的 FFT 的位翻转寻址和流水 FIR 滤波算法的循环寻址等。而且大部分 DSP 具有零消耗循环控
制的专门硬件,使得处理器不用花时间测试循环计数器的值就能执行一组指令的循环,硬件完
成循环跳转和循环计数器的衰减。


3.5 外围设备


                                               195
  DSP 片内通常具有 DMA 控制器、串行口、定时器等外设,所以用户通常只需要外加很少
的器件就可以构成自己的 DSP 系统。DMA 控制器可以在不干扰 CPU 操作的前提下,由其专
用的数据存取通道独立完成接口到片内存储器之间的数据传输,从而形成片内的高速数据通
道。大多数 DSP 还支持 IEEE1149.1 标准,用户通过 JTAG 端口可对 DSP 进行在线
实时仿真。


4 当前主流 DSP 的体系结构


  近年来,DSP 不断推陈出新,其硬件结构也有了很大的改进和提高。DSP 体系结构的革
新在很大程度上受到应用需求的影响,其指令集的设计是面向存储器和数字信号处理算法来进
行性能优化的。当前高性能 DSP 结构的主在特点就是采用了各种并行处理技术,它可由两个
途径实现:一种途径是基于 VLIW、类 RISC 指令集等技术来增加单时钟周期并发的指令数;
另一种途径是通过 SIMD、增大总线字长或增加指令字的长度等技术来增加单指令周期并行执
行的处理单元个数。


4.1 VLIW 结构及其优缺点


                                         其结构如图 2 所示。 VLIW
  TI 公司 TMS320C6X 系列 DSP 就是采用了 VLIW 的体系结构,          在
处理器的硬件上,各功能单元共用大型寄存器堆,由功能单元同时执行的各种操作是由 VLIW
的长指令来同步,它把长指令中不同字段的操作码分送给不同的功能单元。相对于传统型 DSP,
VLIW 处理器使用简单的指令集,一条指令只完成一个操作。这个处理器将简单指令并行地发
射出去,并同时执行,有这样的多条指令构成一个超长指令字。由于使用了简单指令集后,简
化了译码和执行操作。


  VLIW 技术极大地提高 DSP 的性能,但它也有缺点。由于它的指令字长增加了,所以它
较大地增加了程序存储器的占用空间,使得 DSP 的成本随之增加。同时为了支持多个并行指
令的执行,这种结构的 DSP 要求有庞大的调整寄存器堆。


4.2 SIMD 结构及其优缺点


  SIMD 处理器把输入的长数据分解为多个较短的数据,然后由单指令并行地操作。它在目
前一些高性能的 DSP 得到了应用,如 AD 公司的 ADSP21160 系列 DSP,如图 3 所示。该结构
内有两套包括 ALU、桶形移位器、乘法器和寄存器堆等功能部件的运算单元,可在单周期内
对不同的操作数执行两个及以上的乘法操作。SIMD 使总线、数据通道等资源充分
利用,并无需改变信号处理的基本结构。但是,这种结构只有处理并行算法时才是高效的。对
于那种算法中的结果作为下一操作输入的串行算法,SIMD 处理器通常不使用。



                                                       196
5 DSP 结构改进的思考


  过去的 DSP 结构设计主要是面向计算密集型的应用,而对控制密集型支持得不够。而现
实应用中很多场合需要信号处理和精确控制的有效结合,如数字蜂窝电话,它要有监控和语言
音处理的工作。现代的 DSP 将采用 DSP/MCU 的混合结构,在保证计算能力优先的前提下,
通过快速的现场切换、多执行部件并行执行等方式,加强控制类操作的处理能力。将 MCU 核
集成到 DSP 核中,或者从整体上对 DSP 进行重新设计,使之兼有 DSP 和 MCU 的功能。


  另外,为解决速度、功耗、可编程之间的矛盾,我们提出了一种新型的计算方
式,它结合了现有微处理器和 DSP 的时间计算方式以及 ASIC、FPGA 解决方案的空
间计算方式。这种可重构 DSP 处理器的关键是它能同时进行时间和空间计算。它由
一个计算元件互相连接的二维阵列构成,每个阵列都有各自的逻辑单元和本地寄存
器。连接这些计算元件的可编程连线借以对阵列的数据流架构动态重构,从而可根
据运行的具体任务而对其进行优化。由于可重构计算使开发人员可对其软硬件加以
控制,因此这些编译器将在需要运行的 DSP 的系统中实现真正的软硬件协同设计。




资料 4:数字信号处理器的选择策略

  DSP 器件按设计要求可以分为两类。第一类,应用领域为廉价的、大规模嵌入式应用系
统,如手机、磁盘驱动(DSP 用作伺服电机控制)以及便携式数字音频播放器等。在这些应用中
价格和集成度是最重要的考虑因素。对于便携式电池供电的设备,功耗也是一个关键的因素。
尽管这些应用常常需要开发运行于 DSP 的客户应用软件和外围支持硬件,但易于开发的要求
仍然是次要的因素,因为批量生产可以分摊开发成本,从而降低单位产品的开发成本。


  另外一类是需要用复杂算法对大量数据进行处理的应用,例如声纳探测和地震探测等,也
需要用 DSP 器件。该类设备的批量一般较小、算法要求苛刻、产品很大而且很复杂。所以设
计工程师在选择处理器时会尽量选择性能最佳、易于开发并支持多处理器的 DSP 器件。有时,
设计工程师更喜欢选用现成的开发板来开发系统而不是从零开始硬件和软件设计,同时可以采
用现成的功能库文件开发应用软件。


  在实际设计时应根据具体的应用选择合适的 DSP。不同的 DSP 有不同的特点,适用于不
同的应用,在选择时可以遵循以下要点。


算法格式



                                                    197
   DSP 的算法有多种。绝大多数的 DSP 处理器使用定点算法,数字表示为整数或-1.0 到+1.0
                                                     指数
之间的小数形式。有些处理器采用浮点算法,数据表示成尾数加指数的形式:尾数×2                    。


   浮点算法是一种较复杂的常规算法,利用浮点数据可以实现大的数据动态范围(这个动态
范围可以用最大和最小数的比值来表示)。浮点 DSP 在应用中,设计工程师不用关心动态范围
和精度一类的问题。浮点 DSP 比定点 DSP 更容易编程,但是成本和功耗高。


   由于成本和功耗的原因,一般批量产品选用定点 DSP。编程和算法设计人员通过分析或
仿真来确定所需要的动态范围和精度。如果要求易于开发,而且动态范围很宽、精度很高,可
以考虑采用浮点 DSP。


   也可以在采用定点 DSP 的条件下由软件实现浮点计算,但是这样的软件程序会占用大量
处理器时间,因而很少使用。有效的办法是“块浮点”,利用该方法将具有相同指数,而尾数不
同的一组数据作为数据块进行处理。“块浮点”处理通常用软件来实现。


数据宽度


   所有浮点 DSP 的字宽为 32 位,而定点 DSP 的字宽一般为 16 位,也有 24 位和 20 位的
DSP,如摩托罗拉的 DSP563XX 系列和 Zoran 公司的 ZR3800X 系列。由于字宽与 DSP 的外
部尺寸、管脚数量以及需要的存储器的大小等有很大的关系,所以字宽的长短直接影响到器件
的成本。字宽越宽则尺寸越大,管脚越多,存储器要求也越大,成本相应地增大。在满足设计
要求的条件下,要尽量选用小字宽的 DSP 以减小成本。


   在关于定点和浮点的选择时,可以权衡字宽和开发复杂度之间的关系。例如,通过将指令
组合连用,一个 16 位字宽的 DSP 器件也可以实现 32 位字宽双精度算法(当然双精度算法比单
精度算法慢得多)。如果单精度能满足绝大多数的计算要求,而仅少量代码需要双精度,这种
方法也可行,但如果大多数的计算要求精度很高,则需要选用较大字宽的处理器。


   请注意,绝大多数 DSP 器件的指令字和数据字的宽度一样,也有一些不一样,如 ADI(模
拟器件公司)的 ADSP-21XX 系列的数据字为 16 位而指令字为 24 位。


DSP 的速度


   处理器是否符合设计要求,关键在于是否满足速度要求。测试处理器的速度有很多方法,
最基本的是测量处理器的指令周期,即处理器执行最快指令所需要的时间。指令周期的倒数除
以一百万,再乘以每个周期执行的指令数,结果即为处理器的最高速率,单位为每秒百万条指
令 MIPS。


                                                          198
  但是指令执行时间并不能表明处理器的真正性能,不同的处理器在单个指令完成的任务量
不一样,单纯地比较指令执行时间并不能公正地区别性能的差异。现在一些新的 DSP 采用超
长指令字(VLIW)架构,在这种架构中,单个周期时间内可以实现多条指令,而每个指令所实
现的任务比传统 DSP 少,因此相对 VLIW 和通用 DSP 器件而言,比较 MIPS 的大小时会产生
误导作用。


  即使在传统 DSP 之间比较 MIPS 大小也具有一定的片面性。例如,某些处理器允许在单
个指令中同时对几位一起进行移位,而有些 DSP 的一个指令只能对单个数据位移位;有些 DSP
可以进行与正在执行的 ALU 指令无关的数据的并行处理(在执行指令的同时加载操作数),而
另外有些 DSP 只能支持与正在执行的 ALU 指令有关的数据并行处理;有些新的 DSP 允许在
单个指令内定义两个 MAC。因此仅仅进行 MIPS 比较并不能准确得出处理器的性能。


  解决上述问题的方法之一是采用一个基本的操作(而不是指令)作为标准来比较处理器的
性能。常用到的是 MAC 操作,但是 MAC 操作时间不能提供比较 DSP 性能差异的足够信息,
在绝大多数 DSP 中,MAC 操作仅在单个指令周期内实现,其 MAC 时间等于指令周期时间,
如上所述,某些 DSP 在单个 MAC 周期内处理的任务比其它 DSP 多。MAC 时间并不能反映诸
如循环操作等的性能,而这种操作在所有的应用中都会用到。


  最通用的办法是定义一套标准例程,比较在不同 DSP 上的执行速度。这种例程可能是一
个算法的“核心”功能,如 FIR 或 IIR 滤波器等,也可以是整个或部分应用程序(如语音编码器)。
图 1 为使用 BDTI 公司的工具测试的几款 DSP 器件性能。


  在比较 DSP 处理器的速度时要注意其所标榜的 MOPS(百万次操作每秒)和 MFLOPS(百万
次浮点操作每秒)参数,因为不同的厂商对“操作”的理解不一样,指标的意义也不一样。例如,
某些处理器能同时进行浮点乘法操作和浮点加法操作,因而标榜其产品的 MFLOPS 为 MIPS
的两倍。


  其次,在比较处理器时钟速率时,DSP 的输入时钟可能与其指令速率一样,也可能是指
令速率的两倍到四倍,不同的处理器可能不一样。另外,许多 DSP 具有时钟倍频器或锁相环,
可以使用外部低频时钟产生片上所需的高频时钟信号。


存储器管理


  DSP 的性能受其对存储器子系统的管理能力的影响。如前所述,MAC 和其它一些信号处
理功能是 DSP 器件信号处理的基本能力,快速 MAC 执行能力要求在每个指令周期从存储器
读取一个指令字和两个数据字。有多种方法实现这种读取,包括多接口存储器(允许在每个指



                                                  199
令周期内对存储器多次访问)、分离指令和数据存储器(“哈佛”结构及其派生类)以及指令缓存
(允许从缓存读取指令而不是存储器,从而将存储器空闲出来用作数据读取)。图 2 和图 3 显示
了哈佛存储器结构与很多微控制器采用的“冯·诺曼”结构的差别。


  另外要注意所支持的存储器空间的大小。许多定点 DSP 的主要目标市场是嵌入式应用系
统,在这种应用中存储器一般较小,所以这种 DSP 器件具有小到中等片上存储器(4K 到 64K
字左右),备有窄的外部数据总线。另外,绝大多数定点 DSP 的地址总线小于或等于 16 位,
因而可外接的存储器空间受到限制。


  一些浮点 DSP 的片上存储器很小,甚至没有,但外部数据总线宽。例如 TI 公司的
TMS320C30 只有 6K 片上存储器,外部总线为 24 位,13 位外部地址总线。而 ADI 的
ADSP2-21060 具有 4Mb 的片上存储器,可以多种方式划分为程序存储器和数据存储器。


  选择 DSP 时,需要根据具体应用对存储空间大小以及对外部总线的要求来选择。


开发的简便性


  对不同的应用来说,对开发简便性的要求不一样。对于研究和样机的开发,一般要求系统
工具能便于开发。而如果公司在开发下一代手机产品,成本是最重要的因素,只要能降低最终
产品的成本,一般他们愿意承受很烦琐的开发,采用复杂的开发工具 (当然如果大大延迟了产
品上市的时间则是另一回事)。


  因此选择 DSP 时需要考虑的因素有软件开发工具(包括汇编、链接、仿真、调试、编译、
代码库以及实时操作系统等部分)、硬件工具(开发板和仿真机)和高级工具(例如基于框图的代
码生成环境)。利用这些工具的设计过程如图 4 所示。


  选择 DSP 器件时常有如何实现编程的问题。一般设计工程师选择汇编语言或高级语言(如
C 或 Ada),或两者相结合的办法。现在大部分的 DSP 程序采用汇编语言,由于编译器产生的
汇编代码一般未经最优化,需要手动进行程序优化,降低程序代码大小和使流程更合理,进一
步加快程序的执行速度。这样的工作对于消费类电子产品很有意义,因为通过代码的优化能弥
补 DSP 性能的不足。


  使用高级语言编译器的设计工程师会发现,浮点 DSP 编译器的执行效果比定点 DSP 好,
这有几个原因:首先,多数的高级语言本身并不支持小数算法;其次,浮点处理器一般比定点
处理器具有更规则的指令,指令限制少,更适合编译器处理;第三,由于浮点处理器支持更大
的存储器,能提供足够的空间。编译器产生的代码一般比手动生成的代码更大。



                                                      200
  不管是用高级语言还是汇编语言实现编程,都必须注意调试和硬件仿真工具的使用,因为
很大一部分的开发时间会花在这里。几乎所有的生产商都提供指令集仿真器,在硬件完成之前,
采用指令集仿真器对软件调试很有帮助。如果所用的是高级语言,对高级语言调试器功能进行
评估很重要,包括能否与模拟机和/或硬件仿真器一起运行等性能。


  大多数 DSP 销售商提供硬件仿真工具,现在许多处理器具有片上调试/仿真功能,通过采
用 IEEE1149.1JTAG 标准的串行接口访问。该串行接口允许基于扫描的仿真,即程序员通过该
接口加载断点,然后通过扫描处理器内部寄存器来查看处理器到达断点后寄存器的内容并进行
修改。


  很多的生产商都可以提供现成的 DSP 开发系统板。在硬件没有开发完成之前可用开发板
实现软件实时运行调试,这样可以提高最终产品的可制造性。对于一些小批量系统甚至可以用
开发板作为最终产品电路板。


支持多处理器


  在某些数据计算量很大的应用中,经常要求使用多个 DSP 处理器。在这种情况下,多处
理器互连和互连性能(关于相互间通信流量、开销和时间延迟)成为重要的考虑因素。如 ADI
的 ADSP-2106X 系列提供了简化多处理器系统设计的专用硬件。


电源管理和功耗


  DSP 器件越来越多地应用在便携式产品中,在这些应用中功耗是一个重要的考虑因素,
                                      在某些 DSP
因而 DSP 生产商尽量在产品内部加入电源管理并降低工作电压以减小系统的功耗。
器件中的电源管理功能包括:


a. 降低工作电压:许多生产商提供低电压 DSP 版本(3.3V,2.5V,或 1.8V),这种处理器在相同的
时钟下功耗远远低于 5V 供电的同类产品。


b. “休眠”或“空闲”模式:绝大多数处理器具有关断处理器部分时钟的功能,降低功耗。在某些
情况下,非屏蔽的中断信号可以将处理器从“休眠”模式下恢复,而在另外一些情况下,只有设
定的几个外部中断才能唤醒处理器。有些处理器可以提供不同省电功能和时延的多个“休眠”
模式。


c. 可编程时钟分频器:某些 DSP 允许在软件控制下改变处理器时钟,以便在某个特定任务时
使用最低时钟频率来降低功耗。




                                                     201
d. 外围控制:一些 DSP 器件允许程序停止系统未用到的外围电路的工作。


  不管电源管理特性怎么样,设计工程师要获得优秀的省电设计很困难,因为 DSP 的功耗
随所执行的指令不同而不同。多数生产商所提供的功耗指标为典型值或最大值,而 TI 公司给
出的指标是一个例外,该公司的应用实例中详细地说明了在执行不同指令和不同配置下的功
耗。


成本因素


  在满足设计要求条件下要尽量使用低成本 DSP,即使这种 DSP 编程难度很大而且灵活性
差。在处理器系列中,越便宜的处理器功能越少,片上存储器也越小,性能也比价格高的处理
器差。


  封装不同的 DSP 器件价格也存在差别。例如,PQFP 和 TQFP 封装比 PGA 封装便宜得多。


  在考虑到成本时要切记两点。首先,处理器的价格在持续下跌;第二点,价格还依赖于批
量,如 10,000 片的单价可能会比 1,000 片的单价便宜很多。


本文小结


  DSP 处理器存在两种发展趋势:一是 DSP 应用越来越多,如手机和便携式音频播放器等。
DSP 将集成更多功能,如 A/D 转换、LCD 控制器等,系统成本和器件数将会大为降低。另一
个趋势是将 DSP 作为 IP 出售,如亿恒科技公司的 Camel 和 TriCore 内核。随着 EDA 工具的不
断成熟,系统设计工程师将更容易地修改 DSP 内核,加入用户专用外围电路以实现更专业化、
更低成本的 DSP 解决方案。




资料 5:基于 DSP 混合编程关键问题的研究
摘 要: 本文介绍了 C 语言与汇编语言混合编程的规则,讨论了混合编程的一般方法。并在
此基础上从工程实际的角度对混合编程的几项关键问题作了深入的论述。
关键词: DSP;C 语言;汇编语言;混合编程
  现代电子设备中,对数据处理能力的要求日益提高。数字信号处理器(DSP),由于具有先
进的体系结构,强大的信号处理能力而得到了蓬勃的发展。在本文所涉及的容错供配电系统设
计中,采用了 TMS320LF240xA 系列,它作为 TI 公司 DSP 向传统的单片机领域渗透的产品,
在控制领域得到了广泛的应用。
  DSP 具有的优势允许它面向更加复杂的应用。对于这类系统,采用嵌入式实时操作系统
极大的改善了系统的设计与运行。它不仅提高了开发的效率,而且提高了程序运行的效率,稳

                                                        202
定性,以及扩展性等。本设计中采用了 mC/OS-II v2.62。该内核已历经近十年的应用与改进,
在实用性与可靠性方面得到了广泛的好评。开放源代码的优势也使它尤其适合设计中自检测,
以及故障诊断与定位的要求。


C 与汇编混合编程的一般规则
    C 语言的 mC/OS-II 内核带来了编程方式选择的问题。一方面,采用 C 语言设计效率较高,
利于实现模块化、组态化的设计目标。另一方面,信号采集处理频率较高,如 400Hz 交流信
号、频率信号和分辨率较高的开关量信号;同时,程序运行既要符合 mC/OS-II 时钟节拍,也
要满足数据总线上大小周期的定义。这导致对定时的要求较高,对中断程序设计要求严格。因
此混合编程是合理的编程方式。
一般混合编程方法
    混合编程的一般方法有三种:一是对 C 程序编译后形成的汇编程序进行手工的修改与优
化。二是直接在 C 语言程序中嵌入汇编语句。三是分别编写 C 程序和汇编程序,再独立编译
成目标代码模块,再进行链接。
    第一种编程方式要求对汇编与 C 语言都极其熟悉,并且这样的编程方式对程序的可读性
和扩展性的负面影响比较大。第二种方法适用于语句执行频率非常高,并且 C 编程与汇编编
程效率差异较大的情况,例如进入中断的通用中断子程序等。第三种方式是混合编程最常用的
方式之一。在这种方式下,C 程序与汇编程序均可使用另一方定义的函数与变量。
变量定义的规则与数组、指针的使用
    变量定义是混合编程的基本问题。C 程序与汇编程序定义的变量相互之间可以进行访问。
在汇编程序中定义时,需要在变量前加下划线“_”,然后再用.global 定义为全局变量。在 C 程
序中则需要说明为 extern 变量。
    C 语言中常用的数组与指针也可以很方便地在汇编程序中定义并互相访问。如例,在汇编
语言中用.usect 定义占用 6*32 个字的全局变量_AC_RSLT,在 C 程序中被说明成一个 6*32 的
16 位无符号数的二位数组。当然,在汇编程序中,数据的存放格式需要满足 C 对二维数组数
据存放格式的要求。即在存储器中,从低地址到高地址,二维数组的内容从第一行起各行依次
放入存储器中。实际上,这个数组定义也可以看作是指针定义。
汇编程序:
_AC_RSLT .usect “ADDATA”, (6*32)
.global _AC_RSLT
C 程序:
extern INT16U AC_RSLT[6][32];
( extern INT16U *AC_RSLT; )




                                                       203
依此类推,只要具有明确的数据存放格式,C 语言中各种类型的变量在汇编语言中都可以方便
地定义和使用。
函数调用的一般规则
C 程序中调用汇编函数
      C 程序中调用的汇编函数,在汇编中其名称以程序标号的形式出现。程序标号作为操作数
用.global 进行定义。并且同变量一样,在前面加下划线“_”。汇编函数也可以给调用者传递返
回值,它实际上是通过被写入累加器返回的。汇编函数一般具有如下例的形式:
_calcu:
POPD *+ ; 将返回地址压入任务栈
SAR AR0, *+ ; 存储调用者的帧指针
SAR AR1, *
LAR AR0, #01h
LAR AR0, *0+,AR2 ; 堆栈指针复制到 AR0 并创建局部帧


SETC SXM ; 注意: 改变了状态寄存器
MAR *, AR2
LAR AR2, #0FFFDh ; AR2=-3
MAR *0+
LACC * ; 访问调用者传递的参数
...
MAR *, AR3
LACL * ; 传递返回值
MAR *, AR1
SBRK #02h
LAR AR0, *-
PSHD *
RET
汇编程序中调用 C 函数
      汇编程序中调用 C 函数相对比较简单,编译器已经提供了相当完善的支持。函数在 C 中
需要用 extern 进行定义,函数名加“_”后在汇编程序中用.ref 说明为外部标号。在调用函数之前
应手工编程将参数以逆序写入到当前运行任务所使用的任务堆栈中,压栈之前堆栈指针可不作
调整。被调用的 C 函数即可正常访问调用者传递的参数,函数调用完毕后需要调整堆栈指针,
清除函数调用中参数所占用的堆栈空间。C 函数的返回值可以通过访问累加器获得。
参数的访问与堆栈指针的调整


                                                 204
    如果希望被 C 程序调用的汇编函数含有参数,那么就必须按照编译器对含参数的 C 函数
的参数处理原则,利用任务堆栈指针访问参数。其方式如上例中所示。在 DSP 中,堆栈指针
的调整借助辅助寄存器(ARx 或者 XARx)实现。如例,通过 AR2 实现了带符号数的补码运算,
这样可以根据需要移动堆栈指针,实现对函数参数的访问,此外,调用者与被调用函数的局部
数据结构的创建与释放也是通过堆栈指针实现的。值得一提的是,在 μC/OS-II 移植中任务调
度与中断部分程序需要注意因参数而产生的堆栈指针调整,应用任务的参数定义也必须与之保
持一致。
混合编程中程序运行环境的改变与保持
    不管采用哪种混合编程方式,运行环境的改变与保持对程序运行正常与否有着重要影响。
正常的运行环境不仅关系到 DSP 状态寄存器的各状态位,也关系到编译器的函数调用规则,
寄存器和堆栈的使用规则。尤其在使用第三方提供的函数时,应该特别注意这个问题。在允许
的情况下函数调用前后也可采用保存与恢复现场的手段。这样做不利于提高耦合性和减少冗
余,但有利于增加可移植性。此外,对运行环境的关注也有利于提高程序的扩展性。


mC/OS-II 及应用程序在 DSP 上运行关键问题的解决
堆栈的使用。I$$SAVE,I$$REST 函数
    函数调用是否正常,任务调度与中断是否正常,在很大程度上都取决于堆栈的使用正确与
否。对于 240xA 系列, TI 提供了保存与恢复堆栈的函数 I$$SAVE、I$$REST,这两个函数都
位于 rts2xx.lib 库中,所在的源文件是 saverest.asm。它们在发生任务调度和中断的时候使用,
保存或恢复了所有编译器所使用的寄存器以及硬件堆栈。I$$SAVE 函数的代码如下:
I$$SAVE:
MAR *, AR1 ; AR1 存放堆栈指针
ADRK #1h
SST #1, *+ ; 保存状态寄存器
SST #0, *+
SACH *+, 0 ; 保存 ACC 内容
SACL *+, 0
CLRC OVM
SPM
SPH *+ ; 保存 PREG
SPL *+
MPY #1h ; 保存 TREG
SPL *+
SAR AR0, *+ ; 保存辅助寄存器


                                                      205
SAR AR2, *+
SAR AR3, *+
SAR AR4, *+
SAR AR5, *+
SAR AR6, *+
SAR AR7, *+
POPD * ; I$$SAVE 的返回
 地址压入任务堆栈
LACC *, 0
RPT #6h ; 硬件堆栈其它内容
 压入任务堆栈
POPD *+
BACC
    与 I$$SAVE 函数相反,I$$REST 恢复各寄存器与硬件堆栈的值。但是现场恢复的顺序与
保存有所不同,其中利用了 TREG 将 PREG 的低 16 位弹出堆栈,再弹出 TREG 本身,这里弹
栈的过程相对于压栈而言不是顺序的。另外,I$$SAVE 函数将 8 级硬件堆栈全部压入任务栈,
但栈顶内容被其下的内容覆盖,同时最后使用了跳转指令,因此调用 I$$SAVE 函数必须使用
CALL 指令,而 I$$REST 函数只需恢复除了原栈顶以外其它 7 级硬件堆栈的内容。
                   在
    AR1 自始至终存放着堆栈指针。 I$$SAVE 与 I$$REST 函数的首尾对堆栈指针作了调整。
两个函数对指针的调整是相互对应的,确保了堆栈指针位置正确。
    在现场保存要求较高情况下,这两个函数可以用修改库文件的方法改进,添加某些用户希
望在调度与中断过程中保存的量,特别是对于大型嵌入式软件中具有类似 C 语言 volatile 属性
的量。当堆栈空间紧张时,也可以用同样的方式去除某些不必保存的量。
    对操作系统的移植而言,堆栈在初始化中必须模仿被中断时保存堆栈的情形,只是在任务
返回地址处不使用硬件堆栈中的值,而是使用任务的入口地址。
    某些 DSP 并不具有硬件堆栈,因而保存与恢复寄存器的方式有较大的不同,给编程带来
了更大的灵活性。他们通常采用了 TRAP 与 IRET 这样的保存恢复现场的指令,在执行这些指
令前需要对堆栈指针进行调整。
程序及数据的 ROM 初始化
    混合编程的程序在 DSP 中的固化涉及到程序是否能够彻底脱机运行。其内容包括设置微
处理器/微控制器位,合理的编写.cmd 文件等。而程序固化的关键问题是如何在程序存储器中
分配存储空间给常量和用 const 关键字定义的静态、全局变量。
    上述这些量被分配到存储空间中的.const 段。它在 DSP 中的初始化一般有三种方式,一种
是去除 const 关键字,在程序中赋初值使用。并且需要在.cmd 文件中将.cinit 段分配到程序区


                                                   206
FLASH 存储空间,然后在编译器的编译选项中选中“-C”,即 ROM 初始化。第二种方法不对
定义作修改,.const 段保存在 FLASH 存储器中,数据不向数据存储器移动,程序运行时直接
在程序存储空间中访问这些量。由于 C 语言缺乏访问程序区数据的有效手段,因此这些语句
只能使用汇编语言编写。由于在每一处访问这些常量时都必须使用这些语句,因此这样编写程
序改动量较大。
     第三种方法较之前两种,运用起来要方便得多。它不需要修改常量定义,也不必编写专门
的程序。主要的工作是修改.cmd 文件并对工程中使用的库文件作简单的修改,修改工作量小
而且集中,极大地方便了程序的编写。同前两种方式不同,这种方式需要设置.const 段的装载
地址和运行地址。其表达式如下。
.const : LOAD = FLASH PAGE 0 , RUN = EXT PAGE 1
{
__const_run = .;       /* 获取运行地址 */
*(.c_mark)          /* 标志装载地址 */
*(.const)          /* 分配.const 段 */
__const_length = .- __const_run; /* 计算段长 */
}
     采用了装载地址与运行地址分离的方式后,为了使程序正常运行,在初始化时,需要
将.const 段的内容从装载地址拷贝到运行地址内。这段程序可以在编译时由编译器自动生成。
这还需要对软件所使用的库文件作简单的修改。该库名称即是 rts.lib(表示不同类型的 DSP,有
2xx,25,50 等等)。修改该库的方法是将源文件从库中提取出来,作修改,编译后再替代原
有的文件。具体的操作如下:先执行 DOS 命令:
dspar -x rts.src boot.asm
     这句的功能是从 rts.src 文件中提取出 boot.asm 文件。这个 rts.src 即是 rts.lib 的源文件。在
boot.asm 文件中能找到 CONST_COPY 这个标志量,为了实现所需要的功能它应被赋值为 1。
对 boot.asm 文件的编辑完成之后,就可以将其编译生成目标文件,执行语句:
dspa -v boot.asm
     其中对于不同的 DSP 需要使用不同的参数,对于 240xA 来说,应该使用 2xx 来代替“”。
语句执行完后会生成 boot.obj 文件。再执行语句:
dspar -r rts.lib boot.obj
     这时它就替换了库里的同名文件。在编译时编译器就会自动增加拷贝.const 段到数据空间
的语句。这种方法不必修改程序,代价是牺牲了一定数据存储空间,时间开销主要出现在初始
化中。这是最经济实用的方法之一。


使用代码工具


                                                                 207
   各种各样的代码生成工具可以大大增加编程的灵活性。除了前面提到的 dspar 与 dspa 两个
指令外, 文法分析程序 dspac.exe 对.C 文件进行文法分析,
    C                              生成.IF 中间文件,dspopt.exe 对.IF
文件进行优化,生成.OPT 文件。此外,还有其它多种功能不同的代码工具。对于应用环境苛
刻的程序,它们有利于分析如何对其进行优化。


混合编程的实际运用及结论
   本项目全面采用了 C 与汇编混合编程,采用这种方式是为了提高程序的运行效率,节省
空间。本项目软件包括模拟量采集与计算,频率采集与计算,开关量、数字量采集与控制,总
线通讯,历史数据备份,BIT 等诸多功能;程序运行一方面依据 mC/OS-II 提供的时钟节拍并
考虑数据采集分辨率的要求,另一方面需要兼顾总线上的大小定时周期。如果全部采用 C 语
言编程,那么 16 路交流模拟量以 16 个点采样并计算时 CPU 资源紧张,而使用 C 与汇编混合
编程,CPU 利用率有超过 5%的降幅。每个周期内 CPU 仍然有一定的空闲时间。这其中,数
学运算函数也使用了 TI 提供的由汇编程序生成的库。
   我们的实践证明,采用混合编程的软件更加契合一般嵌入式系统对时间和空间的严格约
束。设计良好的混合编程软件既能有效地满足嵌入式系统对功能与性能的需求;同时,它也可
以为程序的扩展和移植预留足够的空间。混合编程是嵌入式系统软件最优化的重要途径。


资料 6:DSP高手的经验介绍,编写基于 DSP 程序的注意事项(转)
   一. 我是已经从事 DSP 开发有几年了,看到许多朋友对 DSP 的开发非常感兴取,我结合这
几年对 DSP 的开发写一写自己的感受,一家之言,欢迎指教。我上研究生的第一天起根据老板
的安排就开始接触 DSP,那时 DSP 开发在国内高校刚刚开始,一台 DSP 开发器接近一万还是 ISA
总线的,我从 206 开始 240、2407A 都作过产品,对 5402、2812、5471 在产品方案规划制定和
论证时也研究过。由于方向所限对 6X、8X 系列没有接触。
   我发现在国内无论在公司或高校许多地方为了加快开发周期往往把一个产品开发分为硬
件和软件两个相对独立部分,由不同的人完成。这在具有一定技术和管理基础的公司,由总设
计师统一规划协调,分任务并行完成的情况下是可行的,也是符合现代产品开发规律的。但是
在高校人员的流动很大,研究生的有效科研时间很短、基础差(许多研究生起步时对电熔、电
阻、三极管的分类和选型都很困难,我也是这样过来的)更不用说系统规划设计了,况且许多
老板自己也不太懂,师兄有自己的任务,他们搞明白时也毕业了。在许多高校做 DSP 就是找一
个算法加到自己的主程序里,在板子上跑一下,基本达到效果就可以了,至于可靠性是次要的,
产业化无从谈起,这已经算不错的了。
   其实我觉得一个系统的完成,系统的规划是最重要的,在规划时对硬件设计的知识和认识
是决定性的,它可以让你知道什么是可行的,什么是不可行的,当你同时具有软件设计能力时,
就可以合理的分配系统功能,完成使用 VHDL 进行系统行为描述-—系统功能划分—— 系统子


                                                           208
结构设计这样的自顶向下的设计规划流程,成为系统设计专家、项目经理,否则只是硬件工程
师、软件工程师。无论作 51、196、还是 DSP 都是这样。
  下面分别谈谈我对硬件和软件设计的感受
  硬件设计是系统设计的关键,国内和国外产品的差距往往是硬件设计水平高低决定的,任
何软件设计思想没有可靠的物理载体都是空中楼阁,纸上谈兵。学校的研究生很多都想避开硬
件设计,对于一个全新的设计与其说不屑不如说不敢。试想一下烧几个片子的压力要比跑飞几
段程序的压力大的多,尤其是功率器件,一旦烧掉,弄不好火光冲天,人的自信都没了。况且
改一次板周期长,经费高,还不知行不行。其实在国外实力一般的公司也是尽量避免硬件的更
新设计,产品一旦定型往往通过软件升级,这是公司的发展策略,对个人而言物以希为贵,培
养一个硬件设计师往往要比软件设计师时间长花费多。在设计 dsp 硬件时,开始设计最小系统
板,系统按功能分板设计调试,注意分板电路的稳定性可能不如整板电路,要多加入抗干扰环
节,分板间的引线包括电源线地线要短,尽量在 10 公分以内,实在不行加入光耦隔离、采用
隔离电源。切记电源线、地线的干扰远比信号干扰对系统的危害大得多,又常常被人忽视。电
路板工作正常的先决条件就是电源正常!当分板电路正常后再更居情况设计整板电路。在调试
时发现的问题一定要找到原因解决,即使是飞线,割线,不要寄希望于下一板改了再看,除非
原理性错误。每一个功能环节多准备几套方案。DSP 的选型要根据系统功能而定,2000 是一个
功能比较全的控制器,但运算性能相对低,但目前大部分控制类、家电类包括中低层次的工业
总线通信产品足够了,281X 不错但太贵,而且开发技术不成熟。54XX 更像一个协处理器,其
实高端产品 5471 就很好,功能完*,但 BGA 封装对产品的开发有一定难度。如果没有从事过嵌
入式系统开发的朋友其实可以从 51 看起,许多思想是共通的,51 很经典没有哪一款微处理器
像 51 那样使用持久和普遍。在硬件设计时更多的精力放在外围电路设计上,外围电路设计的
灵活性要比 DSP 本身高得多,难度大得多。建议多考虑 CPLD。
  软件设计上,着眼点不要仅局限于某种算法和控制策略,而是软件系统框架的制定,即操
作系统的选择和实现,算法和控制策略只是其中技巧性很强的子程序和子程序间参数相互关
系,建议设计软件时能具有操作系统、数据结构和编译原理方面的知识,        对
                                特别是使用 C。 DSP
的内部硬件结构一定要掌握,特别是中断结构和流程、流水线操作,不然飞都不知道怎么飞的。
在语言选择上我当时是这么给自己规定的先编 20 个左右的汇编程序,每个代码量超过 4K,使
用语句范围覆盖全部语句的 60%-70%,在此基础上使用 C。现在发现用 C 构建程序的主体框
架(操作系统)比较快而其不容易出错,(我现在正在用 ASM 根据 UCOSII 的思想重写自己的
操作系统)但对系统实时性影响比较大的运算算法一般采用 MATLAB——C——ASM 的办法仿真
调试优化,这里的优化不单单是利用优化器优化,而是根据数据的特点改变运算方法,以除法
为例 C 里的/号其实掩盖了许多技巧,当除数为常数时就可以放大倒数移位相乘移位的办法进
行,精度高速度快。这些办法只有掌握了 ASM 语言并用 ASM 语言思考才会熟练应用。另外我想
告诉一些作算法特别是控制算法的朋友,千万不要随意评判一个算法的优劣,在程序中程序和


                                              209
代码优化的程度往往影响了控制效果好坏,而不是算法本身的思想。其实在实际中往往 PID
甚至 PI、PD 就够了,神经元、模糊、小波适用于研究和写论文,模糊在实际中用的多一点,
主要是小日本用的比较成熟,我再恨日本人,这点也服气,小日本就是滑,许多物理现象搞不
透,就用这法,还管用,题外话。
  最后我想说的是,当我们面对市场要求时,产品往往考虑的是可靠性、性能、价格而不是
你用的什么芯片,在满足性能的基础上结构越简单就越可靠,芯片越通用价格就越低,能用
51 就不用 196,能用 2407 就不用 2812,除非把芯片本身作买点利用高成本赢取高利润。无论
2000 还是 5000、6000 系列都有市场前景,关键是要做深做透
  获取知识的方法、处理项目的能力是相通的,具体的说就是不要把目光盯在做硬件还是做
软件上,用 ASM 还是 C,要勤动手打好基础,提高自己对系统总体设计的能力,从系统的眼光
看问题。为什么都是做 DSP 的有的毕业拿 3000,有的 5000、8000,除了运气和关系外,重要
的是你对事物的认识深度和高度。我一直都记住这句话:有前途的人做什么都有前途,没前途
的人做什么都没前途。


  二. 与其说是钻在里面,毕业设计是搞 240,在老师的压力做出了一点东西,这期间主要
是对 DSP 的各种基础知识的熟悉与理解,对 DSP 的真正深入是在公司工作以后。


  当初进公司,因为正有一个项目需要用 5410 要我接手。说实话,在学校期间我 5000 的书
都没有看过一眼,可没办法,只能靠自己了。不过好的是我 2000DSP 的基础很好。接过项目后,
我第一个星期就全部看的是 5000 的指令,DSP 的结构倒没怎么看,因为项目硬件已成型,主
要是算法。这样,花了一个星期熟悉指令与项目相关的程序,第二个星期也就开始编程了。半
个月以后我对 5410 也就用很熟了的,当然主要还是讲在算法方面。这个项目太概做了四个月
吧,系统程序是我编写的,主要有如 64 位加减乘除乘方开方、及时域方面的一些算法。


  现在又做一个控制系统,用 2407 开发的,硬件主要有直交变频,并把 2407 的所有外设资
源全部用到了。现在我可以这样自夸一句吧:TI 的 2000 系列与 5000 系列的我都熟悉,要我
去以此做个系统,没问题。


  上面是把我搞 DSP 的经历简单说了一下的吧,在这里我想对正在学及想学 DSP 的难兄们说
一句的是,DSP 并不是很难。当然,这个前提是你的基础要好,我单片机,接口都还行,当初
就是从单片机改成 DSP 的。有了单片机的基础再去学 2000 第列的 DSP(下面的 DSP 单指 2000
系列,另有说明为止),你就可以把 DSP 看成一个 super microcontroller 了。相比之下,DSP
除了比单片机多了更丰的外设接口(SPI,SCI、CAN、PWM、CAP、QEP 等等),他就是一块单片
机,                   DSP
  只不过在单片机来说你要另加芯片的工作, 全部把它做在一块芯片去了,我现在看 DSP
也真就这么简单。



                                                        210
  前面有人提到 DSP 主要是做算法,这句话有一定的片面性:


  TI 有很多系列的 DSP,现在主流的 DSP 主要为 2000 系列、3000 系列、4000 系列、5000
系列、6000 系列。除了 2000 与 5000 系列是定点 DSP 外,其余的均为浮点系列。


  TI 的 2000 系列主要长处是在用于控制系统,因为它的资源非常丰富,前面提到,在控制
系统中用到的一些外设 2000 系列均在片内集成了。


  TI 的 5000 系列主要长处是用于数字信号的算法处理,这里所讲算法处理主要是指在数字
信号处理时的一些算法,如 FIR、IIR、FFT 等等。5000 系列的 DSP 的速度比 2000 快,2407
最快只能到 40M,2800 系列除外,5410 的 DSP 可以达到 160M,如现在我们主要用来做数字信
号方面的处理以及简单的静态图像处理等这样一些在资源需要处于中等的一些算法。


  TI 的 6000 系列主要是用在实时图像处理,这个就更则重于算法处理。一般的硬件很少自
制,我们是用 TI 的 DSK 板再加上自主板相结合。


三. 使用 C/C++语言编写基于 DSP 程序的注意事项
1、 不影响执行速度的情况下,可以使用 c 或 c/c++语言提供的函数库,也可以自己设计函数,
这样更易于使用“裁缝师”优化处理,例如:进行绝对值运算,可以调用 fabs()或 abs()函数,
也可以使用 if...else...判断语句来替代。
2、 要非常谨慎地使用局部变量,根据自己项目开发的需要,应尽可能多地使用全局变量和静
态变量。
3、 一定要非常重视中断向量表的问题,很多朋友对中断向量表的调用方式不清楚。其实中断
向量表中的中断名是任意取定的,dsp 是不认名字的,它只认地址!!中断向量表要重新定位。
这一点很重要。
4、 要明确 dsp 软件开发的第一步是对可用存储空间的分析,存储空间分配好坏关系到一个
dsp 程序员的水平。对于 dsp,我们有两种名称的存储空间,一种是物理空间,另一种是映射
空间。物理空间是 dsp 上可以存放数据和程序的实际空间(包括外部存储器),我们的数据和
程序最终放到物理空间上,但我们并不能直接访问它们。我们要访问物理空间,必须借助于映
射空间才行!!但是映射空间本身是个“虚”空间,是个不存在的空间。所以,往往是映射空
间远远大于实际的物理空间,有些映射空间,如 io 映射空间,它本身还代表了一种接口。只
有那些物理空间映射到的映射空间才是我们真正可访问(读或写)的存储空间。
5、 尽可能地减少除法运算,而尽可能多地使用乘法和加法运算代替。
6、 如果 ti 公司或第三方软件合作商提供了 dsplib 或其他的合法子程序库供调用,应尽可能
地调用使用。这些子程序均使用用汇编写成,更为重要之处是通过了 tms320 算法标准测试。
而且,常用的数字信号处理算法均有包括!!


                                                        211
7、 尽可能地采用内联函数!!而不用一般的函数!!可以提高代码的集成度。
8、 编程风格力求简炼!!尽可能用 c 语言而不用 c++语言。我个人感到虽然 c++终代码长了
一些,好象对执行速度没有影响。
9、 因为在 c5000 中 double 型和 float 型均占有 2 个字,所以都可以使用,而且,可以直接
将 int 型赋给 float 型或 double 型,但尽可能地多使用 int 数据类型代替!这一点需要注意!!
10、 程序最后至少要加上一个空行,编译器当这个空行为结尾提示符。
11、 大胆使用位运算符,非常好用!!
12、 2003 年 6 月份从 ti 的网站上下到了关于 tms320c67x 系列 dsp 的快速算法库,于是,
tms320c5000 和 c6000 全系列的快速算法库都问世了,这些算法库均可供 c/c++语言直接调用,
优化程度 100%,实际编程时尽可能地使用(下载时可以同时下载到说明文档和 ascii 源程序,
可以根据自己需要作出修改,修改前最好做个备份)。




资料 7:DSP 引领新潮流—纪念 DSP 发明 25 周年

   作者:邵虞 最后更新:2004-4-1 20:54:30 推荐指数: 401

  DSP 是 Digital Signal Processing (数字信号处理)或 Digital Signal Processor(数字信号处理器)
的缩写,本文是指后者,专门用于实时处理数据和信号的运算处理器。它与一般微处理器的不
同在于具有更快的运算速度和更少的指令执行周期,但它们间又是互补的。
  DSP 是为了在当今数字信息设备中,为输出/输入介面而发展出的一个重要工具,最适于
处理视觉、听视、嗅觉、触觉、味觉等人类感官刺激的数字化表示方法。它能迅速压缩和解压
缩多媒体信号,它是数字处理的利器,也是与模拟世界沟通的桥梁。
  DSP 应用日广,以通信为主,涉及计算机、消费电子、汽车电子等各个领域。DSP 是继
DRAM、MPU 之后推动世界集成电路产业发展的第三次浪潮。DSP 是数字化的中心。除了推
动电子设备的高速化、高性能化之外,它还在小型化、便携化、适用化等方面扮演重要的角色。
  没有 DSP 人们便无法上网,不可能有多媒体,也不会出现一切都有赖于日增月长的无线
通信。




                                                                         212
  图 1 世界 DSP 市场




  图 2 DSP 与 IC 同步发展


历程回眸
  上世纪 60 年代,DSP 的概念萌芽于美国大学,当时有些教授从事语言的滤波、变换以及
数据压缩等 DSP 基本功能的开发研究。1965 年当 Cooly 和 Tukey 发现快速傅利叶变换时达到
高潮。
  1978 年 AMI(American Microsystem Inc.)公司将 DSP 技术 IC 化,这是具有理程碑意义的
研发成果-S2811,DSP 就此诞生,迄今已有 25 年历史。下一年贝尔研究所推出了世界首块完
整的 DSP。发明和推广应用有时是两股道,例如晶体管、集成电路都是美国公司发明的,但
推广应用却靠的日本 Sony、NEC 等公司。DSP 也是如此,TI 公司虽不是 DSP 的发明者,但
它对 DSP 的应用发展同样发挥了不可磨灭的引领作用,正是它在 1982 年研发生产了世上第一
款上市的可编程通用 DSP——TMS32010,且与时俱进,不断推出新产品,成为 DSP 领域无可
争议的龙头老大。从整体而言,DSP 问世至今,已经历 5 代:
  第 1 代(1978~1982 年)——1978 年 AMI 公司成功地将 DSP 技术集成化,第二年 Bell 研究
所开发出首个 DSP。这时期为理论运算时期,产品缺乏平行处理能力,芯片内存储容量小,
须外接昂贵的存储芯片方能应用。
  第 2 代(1982~1986 年)——1982 年 TI 上市首款通用 DSP,1984 年 Bell 研究所推出第一个
32 位 DSP,1986 年 Motorola 公司宣布 24 位可编程 DSP。DSP 具有乘法累加器、直接存储器
存取、串行通信端口、计时器和中断等功能,强化了它在系统中的控制作用。
  第 3 代(1986~1990 年)——TI 产品被列为学校教材。TI、ATT Microelectronics 和 Zoran 公
司分别开发出 32 位浮点 DSP,可实时进行图像处理。
  第 4 代(1990~1994 年)——ADI 和 Motorola 推出包含调制—解调电路的 DSP。DSP 内有闪
存、DRAM、一次可编程等多种存储器可供选择。
  第 5 代(1994~今)——TI 发表 DSP OMAP 平台,1999 年 Agere、Motorola 携手,2000 年


                                                                 213
Intel 与 ADI 结盟,翌年推出 Blackfin 架构,2002 年 6 月,Agere、Motorola 和 Infineon 合资成
立 StarCore DSP 研发中心。随着 TI 市场份额不断增大,各公司相互结成策略联盟共同推出新
平台,较劲 TI。DSP 市场虽曾一度陷入不景,但各公司仍加紧研发,迎接光明未来。与此同
时,人们还应看到在通信领域 DSP 尚面临着 FPGA、PLD 等技术的挑战。


市场发展
      世界 DSP 市场自 1996~2000 年间无论出货量还是出货值的业绩都堪称亮丽,出货值年均
增长率 26%,达到 61 亿美元高峰(图 1)。由于技术趋向成熟,市场需求殷切,产品平均销售单
价从 1997 年的 9.3 美元下降到 2000 年的 6.7 美元。
      这一时期 DSP 的快速发展,特别受到了 1999 年起移动电话迅猛发展的强势推动,2000
年臻于顶峰。可跨入新世纪受世界经济低迷、IT 泡沫破灭等不良影响,DSP 与世界 IC 产业一
 2001 年遭受大幅滑落 30%的严重挫折,
样,                    DSP 与 IC 业 1997 年后基本呈现同步发展的态势(图
2)。
      据 WSTS(世界半导体贸易统计协会)新近预测,世界 DSP 市场前景看好,2002 年世界 DSP
市场即有力反弹 16.7%,达 49 亿美元,预计 2003 年更将大幅窜升 31%,超过 2000 年的 61 亿
                                       美元,达 64 亿美元,再创新高。增幅也大
                                       大超过包括 MPU、MCU、DSP 一起在内的
                                       微芯片(12%)。预期 2002~2006 年间将以年
                                       率 19.2%的速度增长,届时将达 99 亿美元
                                       (图 3)




      图 3 世界 DSP 市场的未来发展




                                                                     214
      图 4 DSP 的应用市场




                         图 5 DSP 应用的发展




      图 5 TI 公司 DSP 性能不断改进


      又据 Forward Concepts 公司的最新预测,认为世界 DSP 市场因受中国 SARS 和欧洲 3G 通
信停滞的影响,公司已将 2003 年的增长率从 20%下调到 15%,仅达 56 亿美元。但公司对 2004
年后的世界 DSP 市场同样乐观,预测将以 23.5%的年均增长率前进,2007 年可达 140 亿美元。
      近年中国和韩国已成长为 DSP 主要市场,因而亚太地区所占世界 DSP 市场份额 2002 年
已上升到 42%,美国略降到 21%,日本更下降到仅占 9%左右。中国已成为具有很大吸引力的
市场,但中国尚未有国产 DSP 上市,而有 10 多家集成电路设计企业从事 DSP 的开发及应用
工作。


深耕应用
      到上世纪 90 年代中期,可编程与专用 DSP 已大量渗入各类应用,从 modem、硬驱、蜂
窝电话、电话应答机到许多视听产品都可见到 DSP 的身影。
      不过,目前 DSP 的应用主战场仍在通信,2001 年占其总销售的 65%,其中无线通信独
占 53%,有线通信占 12%。随后依次为计算机外设(12%),消费电子(7%),汽车电子(3%),参
见图 4。据 Forwand Concepts 公司预测,2003 年无线用 DSP 芯片将增长 18%,达 38 亿美元,
所占市场份额达到前所未有的 68%。TI 主宰该市场,Motorola、Agere 和 ADI 公司随后,
Qualcomm 公司因未报告有关数据,估计实际应居第 2 位。其余有线通信、计算机和消费电子
各占 6%以上。
      Dataquest 公司的有关信息显示,今后 DSP 的应用将不断扩大,除无线通信将继续不断发
展之外,宽带(有线 modem、xDSL、Gigabit 以太网、10Gb 以太网)、多媒体(MP3、DVD、MP4、
数码相机、数字录像机、游戏机)、视频点播、电视会、VoIP(网络电话)等都将对 DSP 提出更
多的需求。语音识别、翻译机、全球定位系统、汽车导航系统等无不是推广 DSP 应用的领域(图
5)。
      随着 SOC 的前进,更将掀起数字与模拟信号之间相互转换的风潮,也会出现 DSP 的 SOC。

                                                             215
手机不断增强图像、数据的传输,将进一步拓展 DSP 的应用。在同步控制领域,尽管有 CPU、
MCU 等的争锋,但 DSP 也自有它独特的发展空间。
   值得一提的是,DSP 的应用往往不是独立存在的,而是与其他功能产品整合出现,如移
动电话中的基频芯片中即包含了 MCU 和 DSP,只有在大型设备如基站中才会单独配置通用
DSP。


厂商巡礼
   世界开发生产 DSP 的厂商约有一二十家,较大的有 TI、Agere、ADI、         ST、
                                          Motorola、 Philips、
富士通、松下、日立、三星等。
  TI 公司独占世界 DSP 市场半壁江山,是业界无可争议的先驱和龙头企业,事实上的拓荒
者,没有 TI 就没有今天的 DSP 事业。1982 年 TI 率先上市世界首款商用 DSP-TMS 32010,此
后年年革新不断,直到今年两创记录,继推出 720MHz DSP 不久,接着又推出 1GHz DSP,被
载入吉尼斯世界记录(见附表)。1GHzDSP 虽然采用 130nm 工艺开发,但生产将采用 90nm、铜
布线等更先进的工艺。它能提供更高的通道密度,为基站增添新的功能,在无需改动硬件的情
况下可开拓新的应用,并改进现有应用。它适于人工视觉、智能汽车、无线媒体中心等新应用。
   随着工艺的不断发展,TI 公司的 DSP 速度不断提高,性能不断改进,应用不断扩大,公
司产品迄今已历经 5 代变革(图 6)。
   自从现任公司董事长、总裁兼 CEO Tom Engibous 大刀阔斧重组公司,卖掉了亏损累累的
DRAM 以及军用系统、工程软件、笔记本电脑等部门,锁定 DSP 开发生产,公司得以重振雄
风,再铸辉煌。为开拓未来,公司 2003 年的研发费预算达 17 亿美元,设备投资 8 亿美元。制
造工艺正向 90nm 挺进,高速度和低功耗将是 TI 未来产品努力发展的两大方向。
  TI 公司的 DSP 业务包括无线通信、宽带、数字消费电子、新兴设备等 4 大领域,为它们
应用提供最佳解决方案,推出适用的开发环境和软件支持,供应产品包括可编程 DSP 平台(马
达控制用 DSP-C2000)、面向个人的 DSP(C5000)和宽带基础设施用 DSP(C6000)3 大类。   ADI
公司 1986 年推出第一款可编程 DSP—ADSP2100。ADI 在模拟信号处理方面的丰富经验为其
80 年代进取 DSP 市场奠定了基础,目前公司的营收中,大约 20%来自 DSP 产品。
  ADI 在数字马达控制用 DSP 方面独擅专长,这种技术应用十分广泛,举凡洗衣机、洗碗
机、干燥机等都需用到马达。公司相信未来马达仍将不断革新改进,因此还有许多的机遇。与
此同时,公司也重新认识到了一度失察的无线通信的巨大市场潜力,并已开发出用于手机的芯
片组。
   1994 年推出的 Sharc 结构是 ADI 公司 DSP 事业的核心,它冲破了百美元的价格关,基于
Sharc 的 ADSP2000 曾是最快的浮点运算 DSP 之一,适于高端产品应用。
   1999 年公司与 Intel 结盟,共同开发新的 DSP 核,2001 年推出 Blackfin DSP 新结构,它
集合 DSP 与 MCU 功能于一体,专攻以图像处理为主的网络终端应用产品,诸如可视电话、


                                                            216
游戏设备、上网终端、智能手持设备等,同时支持无线通信、宽带连接、仪器测量和控制应用。
用于 EDGE 手机的 Blackfin SoftFone 芯片组包括数字基带、模拟基带、射频和功率放大器等功
能,是个设计完整的平台。ADI 此举不仅把 Intel 带入了 DSP 领域,也大大增强了自已挑战 TI
公司的实力。
  上文说过,与 Agere(前身 Lucent Technology)有渊源关系的 Bell 研究所早在 1979 年便开
发出了单片 DSP。公司心仪专用 DSP 而不是通用 DSP,力耕通信应用,在手机、modem 和数
字应答设备中处于领先地位,一度占有手机用 DSP 市场的 60%。
  Motorola 情况类似,开发的 DSP 首先为自己的通信系统服务。DSP566xx 核系列用于蜂窝
电话和其他个人通信设备。高端 DSP96002 用于台式多媒体计算机音频、视频和通信的共同处
理。
  Agere 与 Motorola 也于 1999 年宣布合作,双方互享 Motorola 的 M Core、新推出的
DSP56800 与 Agere DSP1600 的技术优势,还包括 Bell 研究所的资源、DSP 架构授权等,合力
共推 DSP 技术继续前进。2002 年 6 月,Infineon 也加入同盟,势力进一步增强,三方合资成立
了 Starcore 中心。据称中心将不生产芯片而专注开发,期望通过收取授权费以加快普及他们的
DSP 核心技术。■




资料 8:ARM 简介

一.关于 ARM 产品及其应用现状


  ARM(Advanced   RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、
廉价、耗能低的 RISC 处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点。
适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP 和移动式应用等。
  ARM 将其技术授权给世界上许多著名的半导体、软件和 OEM 厂商,每个厂商得到的都是一
套独一无二的 ARM 相关技术及服务。利用这种合伙关系,ARM 很快成为许多全球性 RISC 标准
的缔造者。
  目前,总共有 30 家半导体公司与 ARM 签订了硬件技术使用许可协议,其中包括 Intel、
IBM、LG 半导体、NEC、SONY、菲利浦和国民半导体这样的大公司。至于软件系统的合伙人,
则包括微软、升阳和 MRI 等一系列知名公司。
  ARM 架构是面向低预算市场设计的第一款 RISC 微处理器。
  2.产品介绍
  ARM 提供一系列内核、体系扩展、微处理器和系统芯片方案。由于所有产品均采用一个通
用的软件体系,所以相同的软件可在所有产品中运行(理论上如此)。典型的产品如下。
     ①CPU 内核

                                                               217
    --ARM7:小型、快速、低能耗、集成式 RISC 内核,用于移动通信。
   -- ARM7TDMI(Thumb):这是公司授权用户最多的一项产品,将 ARM7 指令集同 Thumb 扩展
组合在一起,以减少内存容量和系统成本。同时,它还利用嵌入式 ICE 调试技术来简化系统设
计,并用一个 DSP 增强扩展来改进性能。该产品的典型用途是数字蜂窝电话和硬盘驱动器。
   --ARM9TDMI:采用 5 阶段管道化 ARM9 内核,同时配备 Thumb 扩展、调试和 Harvard 总线。
在生产工艺相同的情况下,性能可达 ARM7TDMI 的两倍之多。常用于连网和顶置盒。
   ②体系扩展
   -- Thumb:以 16 位系统的成本,提供 32 位 RISC 性能,特别注意的是它所需的内存容量
非常小。
   ③嵌入式 ICE 调试
   由于集成了类似于 ICE 的 CPU 内核调试技术,所以原型设计和系统芯片的调试得到了极大
的简化。
   ④微处理器
   --ARM710 系列,包括 ARM710、ARM710T、ARM720TDMI 和 ARM740T:低价、低能耗、封装式
常规系统微型处理器,配有高速缓存(Cache)、内存管理、写缓冲和 JTAG。广泛应用于手持
式计算、数据通信和消费类多媒体。
    --ARM940T、920T 系列:低价、低能耗、高性能系统微处理器,配有 Cache、内存管理和
写缓冲。应用于高级引擎管理、保安系统、顶置盒、便携计算机和高档打印机。
   --StrongARM:性能很高、同时满足常规应用需要的一种微处理器技术,与 DEC 联合研制,
后来授权给 Intel。SA110 处理器、SA1100 PDA 系统芯片和 SA1500 多媒体处理器芯片均采用
了这一技术。


目前 ARM7 是性价比最高用户量最大的一个内核, 而 S3C44B0X 是国内用户量最大的一
款 ARM7 的 CPU。
   Windows   CE 的 Pocket   PC 只支持 ARMWindows CE 可支持多种嵌入式处理器,但基于
Windows CE 的 Pocket PC 则只支持 ARM 一种。微软在对 SH3、MIPS、ARM 等嵌入式处理器做
了评估后认为,ARM 是一种性价比较好的选择。由于目前 ARM 在手持设备市场占有 90%以上的
份额,只支持 ARM,可以有效地缩短应用程序开发与测试的时间,也降低了研发费用。由于 ARM
开放其处理器授权,因此,用户在市场上可以在多家整机厂商中进行选择,从而保证了这一市
场的竞争性。

二.ARM 芯片 CL-PS7111 主要特点

    电平 2.7v/3.3v.相对应 CPU 工作频率 13MHz/18MHz. 13MHz 位节电模式, 性能相当于 33MHz
Inter 486 PC
ARM710A 内核

                                                                218
ARM7 CPU
8K 4 向缓存(cache)
MMU 带有 64 入口 TLB(Transition Look-aside Buffer)
DRAM 控制器
支持 16 位和 32 位 DRAM
ROM/SRAM/Flash Memory 控制
可译码 4,5 或 6 个独立的 256M 存储空间段
每个存储段支持 8 位,16 位和 32 位操作,并支持分页模式
可编程 ROM/SRAM/Flash Memory
支持两个低功耗 CL-PS6700 PC 卡(PCMCIA)控制器
2K 片内 SRAM 用于程序快速执行
片内 Boot ROM (128Byte)
两个同步串行接口
支持 SPI,或 Microwire2 兼容
音频解码器(Audio Codec)
27 位通用接口 GPIO(general-purpose I/O port)
3 个 8 位和 1 个 3 位 GPIO port
支持键盘阵列扫描(Scanning keyboard matrix)
两个异步串口 UARTs
支持高达 115.2K 波特率
内有两个接收发送(TX,RX) 16Bytes FIFOs 缓冲
支持 MODEM 控制信号
DC-to-DC 转换器接口
提供两个 96KHz 时钟输出,通过编程 duty ratio(1/16---15/16)操作
LCD 控制器
直接信号扫描板接口,单色 LCD
面板的大小可编程从 16 到 1024 个像素,16 个像素为一个单位
视频帧大小可编程到 128K byte
每个像素点的位数可编程 1,2,4 位
计时器和实时时钟
两个 16 位计时器(Timer counter)和一个 32 位实时时钟(RTC)

三. 调试工具及调试方法
    ARM Project Manager (APM) include ARM Debuger: 这个工具由 ARM 提供主要是开发程
序, 编程调试 ARM 芯片, 有相当不错的开发环境和远端调试功能, 支持汇编和 C. 它带有一个
ARM 自己的嵌入式操作系统 ARM Angel, 用户可以在它的上面开发自己的嵌入式软件, 不过这
个操作系统不是实时多任务的.
    通过计算机串口与处理器 UART 相连,设置计算机的超级终端 ( Hyper Terminal ), 通过
超级终端察看硬件情况(寄存器设置,数据等)和程序运行情况,当然程序重要加入向 UART 送出
数据的指令, 用 Beep 报警也是经常用的. 这种调试方法是用于底层调试硬件,找出硬件存在
的问题.
    VxWorks 在 Shell 不能正常运行前,也是采取这种方法来调试程序,不过一般不是硬件问
题,而是 BSP 中存在的问题,需要根据硬件,修改 BSP.



                                                                  219
        需要说明的是:上述方法是在没有硬件仿真器的情况下采用的,仿真器是底层调试硬件程
      序最好,最简便直观的办法。

      四. ARM7 编程要点及示例
      ARM 编程可参考程序示例 ARM_Boot              Flash ROM 驱动
      VxWorks image 装入 ARM 的过程:
            ARM7 有两种运行模式, Boot 模式和 Normal 模式, Boot 模式主要是把程序装入(down
      load 或 load )Flash ROM 中用的, Normal 模式是一般运行程序用的.
            ARM7 Boot 模式时, Flash 的地址是 0x70000000 片选型号是 CS0 (Normal 模式
      下,Flash 地址为 0x00000000)
             ARM7 内部有 128byte 的 BootROM 和 2K 的 SRAM,当需要 Download VxWorks image 时,ARM
      启动采用 Boot 方式启动运行存在 128byte BootROM 中的程序初始化 ARM 内部的 COM 口, COM            从
      口接受数据到 2K 的 SRAM,这 2K 程序是用来真正 Load VxWorks 的,2K 程序 Load 完毕后系统
      自动跳转到这 2K 程序执行,它的作用是再次初始化内部的 COM 口,通过 COM 口接受 VxWorks 到
      DRAM,然后由 DRAM 写入 FLASH。在主板 2K SRAM 运行的 Boot Load 程序执行过程,可参看程序
      示例中 ARM Boot Load 程序
          写入完毕后,切换到 Normal 模式重新启动系统,系统自动跳到 FLASH 0X00000000 开始运
      行 VXWORKS。
          用 PC 机上的 COM1 与 ARM 内部的 UART1(COM)通信来 Download VxWorks。

      主要管脚定义
           32 条数据线: D0-------D31
           28 条地址线: A0-------A27               little endian 定义, 相对应数据排列
      0 1 2 3 4 5 6--------27
           6 条片选信号脚: CS0-------CS5,         其实作用相当于地址线 A28------A31
           4 个 8 位的 PORT 口: PORT A, PORT B , PORT D 主要用于外围芯片信号的控制. PORT E
      有双作用.
           例如 PORT A 控制键盘的行信号, PORT B 用于 RS232, PORT D 用于控制 MODEM, FPGA..
           外部中断信号 EINT, EXTFIQ.
            编程时要根据主板原理图和硬件手册进行.
        看硬件图纸, 该芯片和 CPU 的那些管脚连结. 特别是 PORT 口和片选线.
        查 CPU 手册, 得到 PORT 口和该片选的硬件地址.
        编程: 用 PORT 口直接对芯片操作,如开,关,RESET 等, 用片选地址和芯片内地址结合对该
      外围芯片操作.

      Exception vectors, 中断向量表及中断分配


Vector 地址      Exception                      Exception Mode   Priority(1=High)
0x0            Reset                          Svc              1

0x4            Undefined Instruction          Undef            6
0x8            Software Interrupt             Svc              6
0xC            Prefetch Abort                 Abort            5



                                                                                  220
0x10             Data Abort                      Abort            2
0x14             Reserved                        Not applicable   Not applicable
0x18             Interrupt (IRQ)                 irq              4
0x1C             Fast Interrupt (FIQ)            Fiq              3
        这个向量表必须要放置在系统地址 0x00000000 (一般是逻辑地址, 即经过 MMU 映射后的地
       址)处.
       一般是在这些地址上放跳转指令 BL, 跳到相应的地址空间执行相应的程序.
       如系统执行从 0x00000000 Reset 开始, Reset 跳转到某一地址开始运行操作系统.

       程序示例,中断向量表 (ARM asm):
       __VectorStart ; Start of ARM processor vectors
       LDR pc,ResetV ;                          00 - Reset
       LDR pc,UndefV ;                          04 - Undefined instructions
       LDR pc,SWIV ;                                08 - SWI instructions
       LDR pc,PAbortV ;                        0C - Instruction fetch aborts
       LDR pc,DAbortV ;                        10 - Data access aborts
       LDR pc,UnusedV ;                   14 - Reserved (was address exception)
       LDR pc,IRQV ; 18 -                    IRQ interrupts
       LDR pc,FIQV ;                                  1C - FIQ interrupts
       中断号分配 (FIQ, IRQ)
   中断类型                中断号              Name                          说明

   FIQ                 0                外部中断 EXTFIQ                   管脚 NEXT FIQ

   …                   …                …                             …

   IRQ                 5                外部中断 EINT1                    管脚 NEINT1

   IRQ                 6                外部中断 EINT2                    管脚 NEINT2

   IRQ                 7                外部中断 EINT3                    管脚 NEINT3
   …                   …                …                             …

   IRQ                 12               内部中断 UTXINT1                  UART1 TX FIFO 为空

   …                   …                …                             …


           中断号也是寄存器 INTMR 和 INTSR 的位,所以在 ARM 中中断的编程要点是:
           看硬件图纸, 该外设和 CPU 的那一个管脚连结.
           查 CPU 手册, 得到中断号及 INTMR,INTSR 的地址.
           编程
       注: 如果不是写底层 driver, 只是在系统上层编程(如 VxWorks, Linux) 知道中断号即可.
       程序示例(VxWorks):
       //登记中断号 5, 和相应的中断例程 ComISR.
       intConnect ( ( VOIDFUNCPTR * ) 5, ComISR, 0 ) ;
       //使能这中断

                                                                                     221
  intEnable ( ( VOIDFUNCPTR * ) 5 );
  ……
         ARM Interrupts: ARM processors implement fast and normal level of
  interrupt,signalled externally, synchronise interrupts before an exception is raised.
  A fast interrupt requst (FIQ) will desable subsequent normal and fast interrupt by
  setting the I and F bit in CPSR,and a normal interrup request(IRQ) will disable
  subsequent normal interrupt by setting I bit in CPSR.

  计时器中断编程过程
         ARM7 一般内部有两个 16 位计时器(Timer counter)和一个 32 位实时时钟(RTC),计时
  器中断属于 IRQ 中断,这里以计时器 1 为例叙述一下中断的编程过程
         设置 interrup mask INTMR1 寄存器 0x80000240 第 8 位 TC1OI 计时器 1 为使能. 在
  0x800000300 计时器 1 的数据寄存器 TC1D 写入指定数据,这样数据开始从这个给定的数开始
  递减计数,计数递减至 0 后,会产生一个溢出 underflow IRQ 中断请求,中断状态寄存器
  INTSR1 0x80000240 第 8 位 TC1OI 置位.系统会跳到中断向量表地址 0x00000018 处,执行相应
  的中断程序,中断程序通过判断中断的类型(判断中断状态寄存器的位),来执行相应的中断服
  务程序 ISR. 中断状态寄存器标志位复位,计时器开始重新开始计时.

  存储空间管理单元(MMU)
      物理地址映射
      重点在于片选地址 CS 的选取,另外 MMU 映射需要参考这个物理地址

  ARM7 物理地址映射表
地址                   内容                           大小                备注

0xF000.0000          Unused                       256Mbytes

0xE000.0000          Unused                       256Mbytes
0xD000.0000          DRAM Bank 1                  256Mbytes
0xC000.0000          DRAM Bank 0                  256Mbytes         外接 DRAM
0x8000.2000          Unused                       --1Gbytes
0x8000.0000          内部寄存器地址                      8Kbytes           主要的 I/O 和控制
0x7000.0000          Boot ROM                     128 bytes         片内,封有 Boot 程序
0x6000.0000          On-chip SRAM                 2 Kbytes          片内,存放 Load 程序
0x5000.0000          PCMCIA-1(NCS[5])             4*64 Mbytes
0x4000.0000          PCMCIA-0(NCS[4])             4*64 Mbytes
0x3000.0000          外部扩展(NCS[3])                 256Mbytes
0x2000.0000          外部扩展(NCS[2])                 256Mbytes
0x1000.0000          ROM Bank 1(NCS[1])           256Mbytes
0x0000.0000          ROM Bank 0(NCS[0])           256Mbytes         外接 Flash ROM


         MMU 虚拟(逻辑)地址和物理地址的映射实例

                                                                                    222
     Vxworks 支持的 ARM 架构的处理器,一般是 RAM 的起始位置为 0x0,而实际上 ARM 的物理
地址 0x0 是 ROM 的起始地址,RAM 在高位地址.这就需要系统在 Boot 过程中,执行 MMU 程序,重
新映射 RAM 和 ROM 的地址.即 RAM 起始地址为 0x0.
     MMU 主要有 ARM7 中协处理器 coprocessor 15 控制,coporocessor 主要控制:
  片内的 MMU
  指令和数据缓存(IDC)
  Write Buffer(WB)
  MMU 有两层页表(two-level page table)用来进行虚拟地址向物理地址转换,CP15 定义 16
个寄存器,只有 MRC 和 MCR 指令才能对它们操作.
  在 VxWorks 系统中,MMU 表分成两部分:boot up table 和 final table.在文件 ramAtHigh.h
中定义.该表在文件 romInit.s 中初始化,语句为:
     BL _ramAtHigh_1(2)

MMU 映射实例
              虚拟(逻辑)地址(VxWorks 系统)                                       硬件物理
地址

                                                                 VxWorks image
                                        ROM 0x0000.0000
                                                                 和文件系统
      首地址            0x0000.0000
                                              首地                 存放 LCD,MMU 表
RAM Low Address      0x0000.1000                   0xC000.0000
                                              址                  等
                                   相同
      High Address   0x0060.0000
                                   的颜              0xC004.0000 中断向量表等
ROM                  0x0100.0000   色映                            VxWorks 运行位
                                        RAM        0xC004.1000
                                   射对                            置
                                   应的
                                                               VxWorks 从 ROM
                                   地址
                                                   0xC064.0000 解压后 Copy 的位
其他的地址逻辑地址和物理地址映射                                               置
地址不变
0x8000.0000          内部寄存器
                                        其他的地址映射地址不变
..................
                                        0x8000.0000              内部寄存器
.................
                                        ..............
                                        ..............




  其中,Low Address,High Address 在系统配置文件 config.h 和 Makefile 中设置,参见 BSP
文件示例


资料 9:数字讯号处理工作平台 : C2000 DSP
  德州仪器公司已经发展了应用范围最广泛的数字信号处理器(DSP)解决方案,藉由提供工
业界最高性能及程序代码最有效率的数字信号处理器(DSP),因而驱使数字控制的数字革命。


                                                                                 223
   TMS320C2000 DSP 控制器家族,藉由提供独一无二芯片内部内含的外围整合,例如:Flash
内存、快速的 AD 转换器、强健的 CAN 模块等等,为 DSP 控制器定订了效能标准。由德州仪器
公司(TI)强而有力且又便宜的 TMS320C2000 系列的数字信号处理器(DSP)平台,研发设计人员
能够藉此提升他们的发明、减少研发所需时间、同时亦可降低系统的成本.两颗新的高精确度
的控制数字信号处理器 (DSP)
   两颗新的高精确度的控制数字信号处理器(DSPs)将发展时间由数小时减少至数分钟,而且
其效能是目前任何现有的可程序设计的数字信号处理器(DSPs)之效能的 12 倍以上。
TMS320F2810 及 TMS320F2812 DSPs 是工业界首批 32 位的控制专用、内含 flash 内存以及高
达 150MIPS 的 DSPs。           光学网络及自动化控制等等用途而设计的.C28x
                 他们乃是专为工业自动化、
的核心是世界上在数字控制应用方面最高性能的 DSPs 核心。C28x 的核心提供高达 400 MIPS
的计算频宽以致能够实时地处理许多复杂的控制算法。例如:无感测速度控制、随机的 PWM、
功率因子改善等等。C28 同时亦是世界上程序代码最有效率的 DSPs,且 C28x 的程序代码与目
前所有的 C2000 DSPs 的程序代码是兼容的.


   应用领域:


                   工业用驱动器           冷却系统

                   appliances       可调雷射

                   电源供应器           消费性物品

                   高压交流系统           燃料帮浦

                    光纤网络           不断电系统

                  手持式电动工具         智能型传感器




                                                            224
C2000 数字信号处理器功能及其特点:

   C2000 DSP 平台的特色为混合信号整合能力。C2000 DSP 整合了高效能的 DSP 核心、内含
的 Flash 内存、高精确度模拟外围、数字控制及通讯外围等。此种整合提供使用者更易使用且
价格便宜的单芯片设计.

  C2000 平台包含传统的 ROM 以及 Flash 内存的数字信号处理器(DSP),并且内部整合了许
多有弹性的外围。TMS320LF2407A 整合的令人印象深刻的 32k words 的 flash 内存,且有程序
代码保护功能、2.5 k RAM、500ns 快速转换时间的 A/D 转换器、事件管理者(event manager)
提供可驱动任何马达的 PWM 及 I/O、以及 watchdog timer、SCI、SPI、CAN 等等控制最佳化的
外围.

    德州仪器公司(TI)是第一家提供具有内部 flash 内存的 DSP 的公司,Flash 内存提供可重
复性程序设计、非挥发性的储存,以允许快速地设计 prototype 及产品升级,亦因不需外加
EPROMs 而可减少成本。C2000 DSPs 因整合速度较快、功能较强、及控制最佳化的外围等特性,
因而使得较传统的 8-bit 或 16-bit 的 microcontroller 富有弹性.

Flash 内存:

    C2000 产品线是工业界唯一的 DSP 内含 Flash 内存,且自 1997 年开始已获合格认并量产
出货。Flash 内存的大小有由 8k 至 128k 字符(words),Flash 内存模块使得设计者能够不断
重复地将他们的程序代码写入 DSP 内部的 Flash 内存,      不论是在实验室中或是量产或售出之后。
Flash 内存提供使用者能快速且方便地去改变标准品或更新原有产品。
C2000 DSP 提供分 sector 的 Flash 内存,允许使用者去写入每一个 sector,而不用清掉整个
Flash 内存。C2000 DSP 特别以密码为基础的程序代码保护,让使用者得以保护他们的程序.

事件管理器(Event Manager)

 计时(timer)/比较(compare)单元不论是事件时序(event timing)、取样循环(sampling loop)
及产生 PWM 等均被设计成占用 CPU 最少的时间
 可程序规划的 dead band 单元,不需外加产生 dead band 的逻辑电路
 Capture 及 QEP 单元,不需外加速度或是位置感测逻辑
 PDP 中断保护系统故障时的电源驱动

模拟/数字转换器 (A/D Converter)

 10-位模拟/数字转换器 (C24x 组件) 和 12-位模拟/数字转换器 (C28x 组件)
 LF240xA 具有高达 500 nsec 的快速转换时间,F2810 及 F2812 具有高达 60nsec 的 burst 转
换时间。允许较大的取样速率可用于回馈循环。亦有可程序规划的多信道转换
 外部模拟/数字转换及事件(EV)触发的模拟/数字转换不需占用额外的 CPU 时间
 具有两个双缓冲的资料缓存器,减少中断至取得结果所需的时间
 高达 16 个模拟输入信道
 转换自动排序器可增加信道数目,而不需 CPU 介入


                                                                225
CAN 模块

 完整的 CAN 控制器,符合 16-bit 外围规格 2.0B
 传送及接收标准架构(11-bit identifier)及延伸的架构(29-bit identifier)
 C24 有 6 个信箱; F2810、F2812 有 32 个信箱。 资料长度可由 0~8 字节
 提供接收信箱、传输信箱及可规划的传送/接收信箱(信箱 0 及 1)
 28x 系列亦提供低耗电模式,时间标志(time stamping)以及可程序规划的传输讯息
 自我测试模式
 CAN 控制器接收自己传输过的讯息
 可程序规划的位速率。可程序规划的整体屏蔽(global masks)。可程序规划的中断结构

串行通讯接口(Serial communication interface)(SCI-UART)

 异步通讯格式(NRZ)
 可程序规划的鲍率(baud rate)
 可程序规划的资料长度,1~8 位
 可程序规划的停止位长度,1 或 2 位
 错误侦测旗标有: Parity、Overrun、Framing、Break 等侦测错误
 两种唤醒的多处理器模式:Idle line 唤醒及 Address bit 唤醒
 半双工或全双工操作
 C24x 有双缓冲器的接收及传输功能;而 C28x 有 16 层的接收及传送缓冲器
 分开的接收及传送中断
 分开的接收及传送中断致能位

串行外围接口(Serial Peripheral Interface)(SPI)

 高速,1~16 位可程序规划的资料长度。(F/C240 为 1~8 位)
 同步的传送/接收埠
 主/仆操作
 3 或 4 支接脚的操作模式
 支持多处理器通讯
 SPI 时脉(clock)控制与极性(polarity)控制


C28x 的多信道缓冲串行端口(McBSP)


 全双工通讯
 双缓冲传输;三缓冲接收。故允许连续的资料流
 传输及接收有 128 个信道
 独立的传输时脉及结构
 多信道选择模式致能每个信道的 block 传输




                                                         226
资料 10:新推出的浮点 DSP

   高性能浮点芯片也不断发展,以 TI 公司为例,日前针对高质音频应用推出三款浮点 DSP
器件——TMS320C6722、TMS320C6726 与 TMS320C6727,进一步降低了高品质音频产品的
开发成本。基于 C67x DSP 的新内核具有高效 C 语言效率,其 VLIW 架构显著提高应用性能。
                            使音频工程师能够在各种音频应用中集成 DSP
这三款 DSP 的性价比高达每美元 130 MFLOPS,
处理性能,这些应用包括广播、会议、音乐乐器和专业音响。除此之外,C672x 器件还适合支
持众多采用浮点技术的其他应用,其中包括生物辨识、医学与工业应用等。


C672x 器件具备与全系列 C67x DSP 产品的代码兼容性,具有如下改进:


     将内部寄存器数量从 32 个增加至 64 个,以便增强寄存器限定内核(register-bound kernel)
      的性能,并使编译器优化简便易行;
     将并行浮点“加指令”数量从 2 个增至 4 个,使 FFT 处理性能提高 20%;
     将指令高速缓存的容量从 4K 提高至 32K,以降低指令高速缓存的缺失损失(miss
      penalty);
     实施 dMAX DMA 引擎,降低处理器在效果处理期间的负载,从而专注执行片外存储
      器存取;
     提供新的混合精度指令,包括结果为 64 位的 32′32 位乘法指令和结果为 64 位的 32′64
      位乘法,以便提高在高采样率、低频音频应用中高品质 FIR 与 IIR 滤波器的性能效率;
     具有一个平面内存模型(flat-memory model),能够实现更稳定的应用性能。


   经过改进,新器件的音频应用性能提高了 20%以上。例如,MP3 解码目前只占用 16MHz
的 C672x DSP,低于 C6713 DSP 的 20MHz,而 10 段均衡器解码只占用 6MHz 的 C672x DSP,
低于 C6713 DSP 的 17MHz。C672x 器件的时钟频率为 200~300MHz,具有 256KB 的 SRAM
和 32KB 的指令高速缓存。


   C672x 采用了专门针对音频应用而选定的外设。外设集随具体处理器不同而各异,不过
C672x 器件包含 3 个 McASP、2 个 SPI、1 个 HPI、1 个 RTI、1 个 EMIF、2 个 I2C、1 个 PLL
和 1 个 dMAX 引擎。


   TI 同时还宣布推出 Lyrtech Signal Processing 开发的专业音频开发套件(PADK)。开发人员
凭借 PADK 可以快速评估 C672x 器件性能,并立即启动产品开发工作,而无需先开发自己的
原型电路板,从而缩短了产品的设计时间。




                                                                  227
   PADK 集成了 C6727 DSP 与 TI 的补偿模拟技术,其中包括 TI Burr-Brown 产品线的 A/D
与 D/A 转换器。另外,PADK 还针对高端专业音频应用进行了调整。板上扩展槽可提供灵活
的 I/O 连接性,使开发人员能够对其他模拟组件进行评估,以实现不同的产品价位。


   除了 PADK 外,TI 还提供了连同硬件一起设计的 DSP 开发工具,以期采用 C 语言实现极
高的原始性能。Code Composer Studio(TMDSCCSALL-1)包含 TI 的优化 C 语言编译程序,从而
在大多数情况下都无需汇编代码,使维护代码库变得更轻松。对于电视会议等需要混合视频与
音频的应用,由于能够采用相同工具开发音频和视频子系统,开发人员可以节省时间并降低工
作量。


   C672x 器件的样片即将上市,并计划将于 2005 年第四季度投入量产。200MHz
C6722 DSP 、250MHz C6726 DSP 和 300MHz C6727 DSP 的批量单价分别为 9.95 美
元、14.10 美元和 19.95 美元(仅供参考)。PADK 现已开始由 Lyrtech 供货,售价
为 1995 美元(仅供参考),TI 供货定于 2005 年第三季度。




                                                            228
附录:

》》DSP 技术关联缩略语一览表《〈
ACC:累加器。
ACLK:模拟时钟。
ACTR:全比较动作控制寄存器。
ADCFIFO1、ADCFIFO2:模拟数字转换的转换结果寄存器。
ADCTRL1、ADCTRL2:模拟数字转换控制寄存器。
ALU:算术逻辑单元。
AR(AR0-AR7):辅助寄存器。
ARAU:辅助寄存器算术单元。
ARB:辅助寄存器指针缓冲器。
ARP:辅助寄存器指针。
C:进位位。
CALU:中央算术逻辑单元。
CKCR0:时钟控制寄存器 0。
CKCR1:时钟控制寄存器 1。
CMPRx:全比较寄存器。
CNF:片内 DARAM 配置位。
COMCON:比较控制寄存器。
CPUCLK:CPU 时钟输出。
DSP:Data Signal Processor/数字信号处理器。
DARAM:双口静态存储器。
DP:数据页指针。
DRAB:数据读地址总线。
DRDB:数据读总线。
DWAB:数据写地址总线。
DWEB:数据写总线。
EMIF:外部存储器接口。
EV:事件管理器。
FFT:快速傅立叶变换。
FLASH ROM:闪存。
GISR:通用中断服务子程序。
GPT:事件管理模块通用定时器。
GPTCON:通用定时器控制寄存器。

                                     229
GREG:全局存储器分配寄存器。
IFR:中断标志寄存器。
IMR:中断屏蔽寄存器。
INTM:中断方式位。
IR:指令寄存器。
ISR:中断服务子程序、输入状态寄存器。
ISRA:输入状态寄存器 A。
ISRB:输入状态寄存器 B。
IVR:中断向量寄存器。
MAC:乘法及累加单元。
MSTACK:微堆栈。
MUX:多路选择器。
NMI:不可屏蔽中断。
OCR:输出控制寄存器。
OCRA:输出控制寄存器 A。
OCRB:输出控制寄存器 B。
OV:溢出指示位。
OVM:溢出方式位。
PAB:程序地址总线。
PADATDIR:数据和方向控制寄存器 A。
PBDATDIR:数据和方向控制寄存器 B。
PAR:程序地址寄存器。
PC:程序计数器。
PCDATDIR:数据和状态控制寄存器 C。
PDDATDIR:数据和状态控制寄存器 D。
PLL:片内锁相环。
PM:乘积移位方式位。
PRDB:程序读总线。
PREG:乘积寄存器。
QEP:正交编码电路。
RAM:随机存储器。
ROM:只读存储器。
RPTC:重复计数器。
RTICNTR:RTI 计数器寄存器。


                         230
RTICR:RTI 控制寄存器。
SACTR:单比较动作控制寄存器。
SARAM:单口静态存储器。
SCMPRx:单比较寄存器。
SISR:特殊中断服务子程序。
SRAM:静态随机存储器。
ST0:状态寄存器 0。
ST1:状态寄存器 1。
SXM:符号扩展方式位。
SYSCLK:系统时钟输出。
SYSCR:系统配置寄存器 1——系统控制寄存器。
SYSIVR:系统配置寄存器 2——系统中断矢量寄存器。
SYSSR:系统配置寄存器 3——系统状态寄存器。
TC:测试控制标志位。
TOS:堆栈顶部。
TREG:临时寄存器。
TxCMPR:通用定时器比较寄存器。
TxCNT:通用定时器计数寄存器。
TxCON:通用定时器控制寄存器。
TxPR:通用定时器周期寄存器。
WDCLK:看门狗时钟输出。
WDCNTR:WD 计数器寄存器。
WDCR:WD 控制寄存器。
WDKEY:WD 关键字复位寄存器。
WSGR:等待状态发生器控制寄存器。
XF:XF 引脚状态位。
XINTA1CR:A 型外部中断控制寄存器 1。
XINTA2NMICR:A 型外部中断控制寄存器 2。
XINTB1CR:B 型外部中断控制寄存器 1。
XINTB2CR:B 型外部中断控制寄存器 2。
XINTC1CR:C 型外部中断控制寄存器 1。
XINTC2CR:C 型外部中断控制寄存器 2。




                               231
》》关于 X24X 引脚的描述:
1.MP/MC*:微处理器/微计算机方式设置。P78。
2.RAMEN:SARAM 使能信号。P79。
3.VDD:芯片电源。
4.VCCP:EEPROM 编程电源。
5.Vss:电源地。
6.OSCBYP:用来选择是否旁路片内时钟振荡电路。低电平旁路内部电路,使用外
  部时钟;高电平使用内部时钟,此时要外接晶振电路。
7.XTAL1/CLKIN:用外部时钟时,此脚为时钟收入脚。内部时钟时,此脚接 4、6、
  8MHz 的晶振。
8.XTAL2:内部时钟时,此脚接 4、6、8MHz 的晶振。
9.XF:通用输出引脚。P55。
10.   NMI:不可屏蔽中断。
11.   RT*:复位。
12.   CLKOUT:时钟输出。可以由系统控制寄存器来定义输出是 CPUCLK、SYSCLK
  或 WDCLK。P56。
13.   XINTA1:可屏蔽中断 1。
14.   XINTB1:可屏蔽中断 2。
15.   XINTB2:可屏蔽中断 3。
16.   XINTC1:可屏蔽中断 4。
17.   XINTC2:可屏蔽中断 5。
18.   W*/R:读/写信号。P84。
19.   W/R*:写/读信号。P84。
20.   WE*:写使能信号。P84。
21.   BR*:总线请求。P84。
22.   PS*:程序存储器选择。P84。
23.   DS*:外部数据存储器选择。P82、84。
24.   READY:存储器准备就绪。P84。
25.   STRB*:外部存储器访问有效选通信号。P84。
26.   PS*:外部程序存储器选通信号。P83。
27.   IS*:外部 I/O 访问识别。P87。
28.   PORESET:外部上电复位。引脚有效时,表示产生了上电复位操作。
29.   D0:外部数据总线。
30.   D1:外部数据总线。


                                              232
31.   D2:外部数据总线。
32.   D3:外部数据总线。
33.   D4:外部数据总线。
34.   D5:外部数据总线。
35.   D6:外部数据总线。
36.   D7:外部数据总线。
37.   D8:外部数据总线。
38.   D9:外部数据总线。
39.   D10:外部数据总线。
40.   D11:外部数据总线。
41.   D12:外部数据总线。
42.   D13:外部数据总线。
43.   D14:外部数据总线。
44.   D15:外部数据总线。
45.   A0:外部地址总线。
46.   A1:外部地址总线。
47.   A2:外部地址总线。
48.   A3:外部地址总线。
49.   A4:外部地址总线。
50.   A5:外部地址总线。
51.   A6:外部地址总线。
52.   A7:外部地址总线。
53.   A8:外部地址总线。
54.   A9:外部地址总线。
55.   A10:外部地址总线。
56.   A11:外部地址总线。
57.   A12:外部地址总线。
58.   A13:外部地址总线。
59.   A14:外部地址总线。
60.   A15:外部地址总线。
61.   VCCA:外部模拟电源+。P105。
62.   VSSA:外部模拟电源-。P105。
63.   VREFHI:基准电压输入脚+。P103。
64.   VREFLO:基准电压输入脚-。P103。


                              233
65.   ADCSOC/IOPCO:外部模数转换启动引脚。
66.   ADCIN0/IO:AD 转换 0/数字 IO。
67.   ADCIN1/IO:AD 转换 1/数字 IO。
68.   ADCIN2:AD 转换输入 2。
69.   ADCIN3:AD 转换输入 3。
70.   ADCIN4:AD 转换输入 4。
71.   ADCIN5:AD 转换输入 5。
72.   ADCIN6:AD 转换输入 6。
73.   ADCIN7:AD 转换输入 7。
74.   ADCIN8/IO:AD 转换 8/数字 IO。
75.   ADCIN9/IO:AD 转换 9/数字 IO。
76.   ADCIN10:AD 转换输入 10。
77.   ADCIN11:AD 转换输入 11。
78.   ADCIN12:AD 转换输入 12。
79.   ADCIN13:AD 转换输入 13。
80.   ADCIN14:AD 转换输入 14。
81.   ADCIN15:AD 转换输入 15。
82.   CRA0:数字输出 CRA0。
83.   CRA1:数字输出 CRA1。
84.   CRA2:数字输出 CRA2。
85.   CRA3:数字输出 CRA3。
86.   CRA4:数字输出 CRA4。
87.   CRA5:数字输出 CRA5。
88.   CRA6:数字输出 CRA6。
89.   CRA7:数字输出 CRA7。
90.   CRA8:数字输出 CRA8。
91.   CRA9:数字输出 CRA9。
92.   CRA10:数字输出 CRA10。
93.   CRA11:数字输出 CRA11。
94.   CRA12:数字输出 CRA12。
95.   CRA13:数字输出 CRA13。
96.   CRA14:数字输出 CRA14。
97.   CRA15:数字输出 CRA15。
98.   CRB0:数字输出 CRB0。


                                 234
99.   CRB1:数字输出 CRB1。
100. CRB2:数字输出 CRB2。
101. CRB3:数字输出 CRB3。
102. CRB4:数字输出 CRB4。
103. CRB5:数字输出 CRB5。
104. CRB6:数字输出 CRB6。
105. CRB7:数字输出 CRB7。
106. CRB8:数字输出 CRB8。
107. CRB9:数字输出 CRB9。
108. CRB10:数字输出 CRB10。
109. CRB11:数字输出 CRB11。
110. CRB12:数字输出 CRB12。
111. CRB13:数字输出 CRB13。
112. CRB14:数字输出 CRB14。
113. CRB15:数字输出 CRB15。
114. IPA0:数字输出 IPA0。
115. IPA1:数字输出 IPA1。
116. IPA2:数字输出 IPA2。
117. IPA3:数字输出 IPA3。
118. IPA4:数字输出 IPA4。
119. IPA5:数字输出 IPA5。
120. IPA6:数字输出 IPA6。
121. IPA7:数字输出 IPA7。
122. IPA8:数字输出 IPA8。
123. IPA9:数字输出 IPA9。
124. IPA10:数字输出 IPA10。
125. IPA11:数字输出 IPA11。
126. IPA12:数字输出 IPA12。
127. IPA13:数字输出 IPA13。
128. IPA14:数字输出 IPA14。
129. IPA15:数字输出 IPA15。
130. IPB0:数字输出 IPB0。
131. IPB1:数字输出 IPB1。
132. IPB2:数字输出 IPB2。


                         235
133. IPB3:数字输出 IPB3。
134. IPB4:数字输出 IPB4。
135. IPB5:数字输出 IPB5。
136. IPB6:数字输出 IPB6。
137. IPB7:数字输出 IPB7。
138. IPB8:数字输出 IPB8。
139. IPB9:数字输出 IPB9。
140. IPB10:数字输出 IPB10。
141. IPB11:数字输出 IPB11。
142. IPB12:数字输出 IPB12。
143. IPB13:数字输出 IPB13。
144. IPB14:数字输出 IPB14。
145. IPB15:数字输出 IPB15。
146. IOPA0:数字输出 IOPA0。
147. IOPA1:数字输出 IOPA1。
148. IOPA2:数字输出 IOPA2。
149. IOPA3:数字输出 IOPA3。
150. IOPA4:数字输出 IOPA4。
151. IOPA5:数字输出 IOPA5。
152. IOPA6:数字输出 IOPA6。
153. IOPA7:数字输出 IOPA7。
154. IOPB0:数字输出 IOPB0。
155. IOPB1:数字输出 IOPB1。
156. IOPB2:数字输出 IOPB2。
157. IOPB3:数字输出 IOPB3。
158. IOPB4:数字输出 IOPB4。
159. IOPB5:数字输出 IOPB5。
160. IOPB6:数字输出 IOPB6。
161. IOPB7:数字输出 IOPB7。
162. IOPC0:数字输出 IOPC0。
163. IOPC1:数字输出 IOPC1。
164. IOPC2:数字输出 IOPC2。
165. IOPC3:数字输出 IOPC3。
166. IOPC4:数字输出 IOPC4。


                         236
167. IOPC5:数字输出 IOPC5。
168. IOPC6:数字输出 IOPC6。
169. IOPC7:数字输出 IOPC7。
170. IOPD0:数字输出 IOPD0。
171. IOPD1:数字输出 IOPD1。
172. IOPD2:数字输出 IOPD2。
173. IOPD3:数字输出 IOPD3。
174. IOPD4:数字输出 IOPD4。
175. IOPD5:数字输出 IOPD5。
176. IOPD6:数字输出 IOPD6。
177. IOPD7:数字输出 IOPD7。
178. TIPWM/T1CMP:EV 模块通用定时器的比较/PWM 输出。
179. TIPWM/T2CMP:EV 模块通用定时器的比较/PWM 输出。
180. TIPWM/T3CMP:EV 模块通用定时器的比较/PWM 输出。
181. TMRCLK:EV 模块通用定时器外部时钟输入。
182. TMRDIR:EV 模块通用定时器外部方向输入。
183. PWM1/CMP1:EV 模块全比较单元的比较/PWM 输出。
184. PWM2/CMP2:EV 模块全比较单元的比较/PWM 输出。
185. PWM3/CMP3:EV 模块全比较单元的比较/PWM 输出。
186. PWM4/CMP4:EV 模块全比较单元的比较/PWM 输出。
187. PWM5/CMP5:EV 模块全比较单元的比较/PWM 输出。
188. PWM6/CMP6:EV 模块全比较单元的比较/PWM 输出。
189. PWM7/CMP7:EV 模块单比较单元的比较/PWM 输出。
190. PWM8/CMP8:EV 模块单比较单元的比较/PWM 输出。
191. PWM9/CMP9:EV 模块单比较单元的比较/PWM 输出。
192. CAP1/QEP1:EV 模块捕获单元 1 的输入引脚/QEP 电路输入 1。
193. CAP2/QEP2:EV 模块捕获单元 2 的输入引脚/QEP 电路输入 2。
194. CAP3:EV 模块捕获单元 3 的输入引脚。
195. CAP4:EV 模块捕获单元 4 的输入引脚。
196. PDPINT:功率驱动保护中断。用于外部电机保护。P179。
197. SCITXD:串行通讯接口 SCI 数据交换脚。
198. SCIRXD:串行通讯接口 SCI 数据交换脚。
199. SPISIMO:串行外设接口 SPI 从输入/主输出。
200. SPISOMI:串行外设接口 SPI 主输入/从输出。


                                               237
201. SPISTE:串行外设接口 SPI 选通。
202. SPICLK:串行外设接口 SPI 时钟。
203. CANTX:CAN 总线通讯引脚。
204. CANRX:CAN 总线通讯引脚。




系统运行不正常可能的原因:
1.注意程序计数器第一页为中断向量表。调试程序必须注意可能引起的存储器分
  配不当造成不正常。
2.看门狗的设置,调试程序时,要把 WDCR 的 WDDIS 失效。
3.注意 WDCR 位 5-3 要设置为 101,否则将引起系统复位。




                                      238

								
To top