教材及参考书
(1) TMS320LF240XDSP硬件开发教程,江思敏,机械工业出版社。
(2) TMS320LF240XDSP应用程序设计教程,清源科技,机械工业出版社。
(3)TMS320C2000系列DSP原理及应用,张卫宁,国防工业出版社
(4) DSP技术的发展与应用,彭启宗,高等教育出版社.
(5) 数字信号处理器技术原理与开发应用,王军宁,高等教育出版社。
绪论 数字信号处理器(DSP)综述
0.1 什么是数字信号处理器数字信号处理 (Digital Signal Processing):信号的数字化和数字处理。
数字信号处理器 ——DSP。
过去受集成电路技术和数字化器件发展水平限制,只限于理论概念的讲授和仿真。
早期 -在计算机上仿真,算法实现。
现在 -在DSP上实时处理国内常用DSP一词来指数字信号处理器。
DSP最典型的应用 ——手机,可见DSP的应用市场之大。
在世界众多的DSP厂商中,德州仪器(TI) 的DSP始终占有较大的市场份额(百分之60)。
全球每10部手机中就有6部采用TI的DSP,每10部手机中就有8部嵌进TI公司的模拟芯片。
PC时代的领袖 ——Intel
信息时代的领袖 ——TI
2000年诺贝尔物理奖 —TI公司杰克-基尔比
0.2 DSP与通用计算机、单片机的区别数字信号处理的 运算特点,乘/加,及反复相乘求和
(乘积累加)
早期的计算机或微处理器的内部乘法运算是靠加法器反复移位相加实现的,需要数十个时钟周期。
而DSP设置了硬件乘法/累加器,能在单个指令周期内完成乘/加运算。
为满足FFT、卷积等数字信号处理的特殊要求,目前
DSP大多在指令系统中设置了,循环寻址,及,位倒序,寻址指令和其他特殊指令,使得 寻址、排序 的速度大大提高。
1024点复数FFT所需时间,微秒量级。
高速数据的传输能力 是高速实时处理的关键之一。
(1)新型的DSP设置了单独的 DMA总线及其控制器,
在不影响或基本不影响DSP处理速度的情况下,做并行的数据传送,传送速率可达每秒百兆字节。
(2) DSP还在 指令并行、功能单元并行、多总线、时钟频率提高 等方面不断创新和改进。
(3) DSP是专为数字信号处理所设计的。 与PC机相比,
体积小、成本低。且易于开发,易于实现嵌入式和便携式应用。
所以,DSP在 内部功能单元并行、多DSP核并行、多总线、功耗小 方面尤为突出;
通用微机(PC机)、单片机不适于用在高速数字信号处理领域中。
通用计算机(PC机):
在 大容量内存,大规模 多级高速缓存,极高的主频 和复杂的管理调度算法 方面表现明显。
例如,奔腾PC机,目前主频已达3.2GHz,主内存1GB。
它将许多大中型计算机上出现的技术应用到了芯片内部。
采用:
(1)超标量流水线结构
(2)层次化多级高速缓存
(3)实现动态执行技术和分支预测功能,大大提高指令运行的并行度,使奔腾PC机的运行速度大大提高 。
PC机的设计目的:
(1)“通用,计算,方便使用,所以,它有 大容量内存,
复杂的指令集 和 操作系统 。
(2) 体系结构对特殊类型的数据结构只能提供 通用的寻址 操作,而DSP有专门的简捷寻址机构和辅助硬件来快速完成。
PC机通常不能高效地完成许多基本的数字处理运算。
例如,乘法累加,矢量旋转,三角函数等。
许多DSP有很好的并行性,但在单处理机系统中不能有效地利用,例如神经网络、基本神经元。
单片机:
(1)为低成本控制领域而设计和开发的。位控能力强,
I/O接口种类繁多,在片上外设和控制功能丰富、价格低、使用方便占有一定的优势,但处理速度较慢。
(2)DSP具有高速并行结构及指令,而单片机没有。
DSP处理的算法的复杂度和大的数据处理流量更是单片机不可企及的。
三者各有所长,技术的发展使得DSP、通用计算机、单片机相互借鉴对方的优点,互相取长补短。
现在,PC机及部分单片机 内部都有 硬件乘法器单片机内部也有了通用计算机和DSP内部才有的 流水线作业(但规模小些)
而DSP内部也有了一定规模的 高速缓存。
吸收Intel的嵌入式系统芯片和系统软件的优点。 有的
DSP内部集成了高速运行的的DSP内核及控制功能丰富的嵌入式处理器内核。 例如,内部集成有TI公司的C54xCPU内核和ARM公司的ARM7TDMIE内核的DSP,
既具有高速的数据处理能力,又有各种类型的外设接口和位控能力,大大拓宽DSP在控制领域的应用。
DSP在注重高速的同时,也在发展自己的低价位控制芯片。
美国Cygnal公司的C8051F020 8位单片机,内部采用流水线结构,大部分指令的完成时间为1或2个时钟周期,峰值处理能力为25MIPS。 片上集成有 8通道
A/D,两路D/A,两路电压比较器,内置温度传感器、
定时器、可编程数字交叉开关和64个通用I/O口、电源监测、看门狗、多种类型的串行总线(两个UART、
SPI等)。
0.3 DSP芯片分类
0.3.1 三种方式分类按以下三种分类:
1.按基础特性分按工作时钟和指令类型分类。
静态DSP芯片,在某时钟频率范围内的任何时钟频率上,DSP都能正常工作,除计算速度的变化外,性能上没有下降。
一致性芯片,两种或两种以上的DSP芯片,它们的指令集和相应的引脚结构相互兼容。
2.按数据格式分定点和浮点之分。
定点:TMS320C2XX/C5X,TMS320C54X/C62XX等系列。
浮点:TMS320C3X/C4X。
不同的DSP的浮点格式不一定完全一样,如 IEEE的标准浮点格式 (莫托罗拉的MC96002),自定义的浮点格式( TMS320C3X)。
3.按用途分通用型和专用型通用型,适合普通的DSP应用专用型,为特定的DSP运算而设计,如数字卷积、数字滤波、FFT等。
0.3.2 DSP的应用自 20世纪 70年代末诞生,得到飞速发展。已广泛应用,
价格越来越低。
主要应用,
(1)信号处理,数字滤波,自适应滤波,FFT,相关运算,谱分析,卷积,模式匹配,加密,波形产生
(2)电机和机器人控制,在单片内集成多个 DSP处理器,
可采用先进的神经网络和模糊逻辑控制等人工智能算法。
机器人智能的视觉、听觉和四肢的灵活运动必须有
DSP技术支持才能实时实现。
(3)激光打印机、扫描仪和复印机,DSP不仅仅是控制,还有繁重的数字信号处理任务,如字符识别、
图像增强、色彩调整等。
(4)网络控制及传输设备,网络功能和性能的不断提高,如视频信箱、交互式电视等,要求更宽、更灵活的传输带宽,实时传输和处理数据的网络控制器、网络服务器和网关都需要 DSP的支持。
(5)通讯,调制解调器,自适应均衡,数据加密,数据压缩,扩频通信,纠错编码,传真,可视电话。
(6)语音处理,语音编码,语音合成,语音识别,语音邮件,语音存储。
(7)自动测试诊断设备及仪器仪表、虚拟仪器,现代电子系统设备中,有近百分之六十的设备及资金是用于测试设备,自动测试设备集高速数据采集、
传输、存储、实时处理于一体,又一广阔应用领域。
(8)图像处理,二维三维图形处理,图像压缩、传输与增强,动画,机器人视觉,模式识别。
( 9)军事,保密通信,雷达处理,导航,导弹制导。
如机载空 -空导弹,在有限的体积内装有红外探测仪和相应的 DSP处理部分,完成目标的自动锁定与跟踪,战斗机上的目视瞄准器和步兵头盔式微光仪,需 DSP完成图像的滤波与增强,智能化目标的搜索、捕获。
( 10)自动控制,机器人控制,磁盘控制,自动驾驶,
声控,发动机控制。
( 11)医疗仪器,助听、诊断工具、超声仪,CT、核磁共振。
(12)家用电器,数字电话,数字电视,音乐合成,音调控制,玩具与游戏,高保真音响,数字收音机、
数字电视。
(13)汽车,防滑刹车、引擎控制、伺服控制、振动分析、安全气囊的控制器、视像地图。
0.4 如何选择DSP
从本质上说,没有任何处理器能够满足所有的,或者大多数应用的需要。
DSP第一类应用,大量便宜的嵌入式系统,如手机、
硬盘和光盘驱动器(用于伺 服控制)和便携式播放器。在这些应用中,成本和集成是极为重要的。 对便携式的以电池供电的产品,功耗也极为重要 。
DSP第二类应用,处理专门的复杂算法的大量数据。
以声纳和地震探矿为例,其 产品的产量并不大,但算法非常复杂,产品的设计工作量很大,也更复杂 。
因此设计者希望使用 性能最高的、最容易使用的、
能支持多处理器配置 的方案。
DSP的选取,完全取决于应用。某种DSP对于某些应用可能是是很好的,但对于另外的应用可能很差的。
0.4.1 如何选择数据格式定点格式、浮点格式。
大多数DSP使用定点运算。有的DSP使用浮点运算。
浮点运算与定点运算相比,灵活性和数据的动态范围都比较大,因此,比较容易编程。因为浮点DSP电路更复杂,芯片也更大,所以成本和功耗也就比较大。
但在很多情况下,不需关注数据的动态范围和精度。
可考虑使用定点DSP。大多数批量生产的产品使用定点DSP,主要考虑其成本和功耗低。
程序员和算法设计者根据实际应用的要求,通过分析和仿真来确定数据的动态范围和精度,然后在需要的时候,在代码中增加定标运算。
对于需要很高动态范围和精度的应用,或在开发的容易程度比成本更重要的情况下,浮点DSP就有其优势 。
0.4.2 数据宽度所有浮点DSP为32位,大多数定点DSP是16位,但有的也使用20、24、32位数据字。
数据字的长短是影响成本的重要因素,因为它极大地影响芯片的大小、引脚数以及DSP的片外存储器的大小。
0.4.3 速度有多种方法来衡量DSP的速度。最基本的是指令周期,
即用 MIPS——每秒执行多少百万条指令 。但问题是:
不同的DSP在单个周期所完成的工作是大不相同。
使用 MOPS(每秒百万次运算) 和 MFLOPS (每秒百万次浮点运算),要十分小心。因为不同厂商的关于,运算,的概念是不同的。
其次,要注意的是,DSP的输入时钟可能和DSP的指令速率一致,也可能内部时钟加倍。
现在许多DSP是用低频的时钟,来产生片上所需的高频时钟。
0.4.4 存储器的安排关注:多次访问存储器(DARAM),哈佛结构,高速缓存,存储空间的大小。
0.4.5 开发的难易程度为减少产品成本,可使用比较便宜的开发工具。
使用何种语言编程。选择C语言、汇编语言等。用C编写用的较多。对实时性要求高的程序,仍用汇编语言编写。也有混合编写的。
消费类产品,由于成本限制,不可能使用高性能的
DSP。
0.4.6 支持多处理器雷达:高数据率和大运算量的应用系统,往往需要多个DSP,在这种情况下,DSP的连接是否容易、连接的性能,都成为重要的因素。近年推出的DSP大都非常注意增加专门的接口或DMA通道,来支持多DSP
的运行。
0.4.7 功耗和电源管理越来越多的DSP用于电池供电的便携式应用(如手机
、便携式播放器),许多DSP厂商都降低了DSP的供电电压,加强了电源管理功能。
0.4.8 成本决定DSP的价格的主要因素之一是器件封装的价格。
0.4.9 结论并不存在最好的DSP。正确的DSP选择取决于具体的应用场合。
对于一种应用来说是好的选择,对另外的应用则可能是很差的。
0.5 TI公司的主流产品三大家族:2000系列、5000系列、6000系列。
0.5,1 TMSC2000家族
TMSC2000家族,将闪存、10位A/D、CAN(控制器局域网)等各种片内外设集成在一起,主要包括
TMSC240X及TMSC28X两类产品。
主要产品为两个系列,C20X,C240X
C20X:系列用于电话、数字相机、嵌入式家电设备等。
C240X:主要用于数字电机控制、电机控制、工业自动化电力转换系统等
0.5.1,1 TMSC240X系列该系列为16位定点DSP,速度:
LF240X为30 MIPS,
LF240XA为40 MIPS。
专为数字电机控制和其它控制系统而设计 的。是当前集成度最高、性能最强的运动控制芯片。
不但有 高性能的C2XX CPU内核,配置有高速数字信号处理的结构,且有单片电机控制的外设。
将数字信号处理的高速运算功能,与面向电机的强大控制功能 结合在一起,成为传统的多微处理器单元和多片系统的理想替代品。
可用于控制功率开关转换器,可提供多电机的控制等。
C240X采用诸如自适应控制、卡尔曼滤波和控制等先进的 控制算法,支持多项式的高速实时算法,因而可减少力矩纹波、降低攻耗、减少振动,从而延长被控设备的寿命,为各种电机提供了高速、高效和全变速的先进控制技术。
4级流水线结构,采用改进的哈佛结构。
片内外设及存储器,
(1)双10位(双8路或单16路)A/D转换器,转换时间500nS。
(2)41个可独立编程的多路复用I/O引脚;
(3)带锁相环PLL的时钟模块;
(4)看门狗定时器模块;
(5) 串行通信接口SCI与串行外设接口SPI;
(6) 两个事件管理器EVA、EVB,可为所有电机类型提供控制技术,在工业自动化方面的应用奠定了基础。
* 3个具有死区功能的全比较单元;2个单比较单元;
* 防止击穿故障的可编程PWM死区控制;
* 2个16位通用定时器;
* 3个事件捕捉单元,其中2个具有直接连接光电编码器脉冲的能力;
(7)8个 16位PWM通道--三相反相器控制;
(8) 5个外部中断(两个驱动保护、复位、两个可屏蔽中断);
(8)CAN 2.0B模块
(9)指令集:包括信号处理指令和通用控制指令,利用的它的为反转变址寻址能力可进行基2的FFT运算。
(10)用于仿真的JTEG接口。
(11)片内存储器:32K字闪存、2.5K字RAM
0.5.1,1 TMSC28X系列为32位定点,速度为可达400 MIPS
片内,闪存、12位A/D、CAN(控制器局域网)总线模块、SPI,SCI等片内外设。
0.5.2 TMSC5000家族该系列高性能、多种片内外设选择、小封装、省电。
适用:无线电通信、因特网。电源可降至0.9V 及.速度可达600.
非常适用于:数字音乐唱机、3G电话、数字相机。
0.5.2,1 TMSC54X系列
16位定点,功耗0.32 mw/MIPS,32-532MIPS.
0.5.2,2 TMSC55X系列
8-48位浮点,功耗0.05 mw/MIPS,288-600MIPS.程序字宽度为32位.
0.5.3 TMSC6000家族
TMSC6000家族为高性能DSP.
包括,TMSC62X定点DSP系列、TMSC64X定点DSP系列、
TMSC67X浮点DSP系列。
0.5.3,1 TMSC62X系列工作频率:150-300MHz,
运行速度:1200-2400MIPS
内部2个乘法器,6个算术逻辑单元,超长指令字
(VLIW)结构,大容量的片内存储器和大范围的寻址能力,4个DMA接口,2个多通道缓存串口,2个32
位片内外设。
0.5.3,2 TMSC64X系列工作频率:400-600MHz,
运行速度:3200-4800MIPS
具有特殊功能的指令集。
0.5.3,3 TMSC67X系列为高性能浮点DSP
工作频率:100-225MHz
运行速度:600-1350MFLOPS
具有4个浮点/定点算术逻辑单元,2个定点算术逻辑单元,2个浮点/定点乘法器。
0.6 系统的芯片集成 ——SOC
SOC(System on Chip) 系统集成到芯片上。是下一代基于DSP产品的主要发展方向之一。
如,具有电视质量的无线电会议、家庭娱乐设施、电子游戏等。
最近,可将8个DSP核,每个具有1亿个晶体管,集成到拇指大的一块芯片上。
2010年,可将12个DSP核,每个具有5亿个晶体管,集成到一块芯片上。 相当于将今天的笔记本集成到手表大的体积内。
以移动电话为例,逐步完成了从模拟到数字式的过度,
即从第一代(1G)到第二代(2G)的过渡,在很短的时间内,从2G向2.5G和3G发展。
0.6.1 2G手机简介
GSM,几乎所有的2G手机采用的基带体系结构,都是以两个可编程处理器(一个DSP和一个MCU)为基础的。
目前,已逐渐将这两个处理器集成在一个芯片中。
在时分多址(TDMA)模式手机,
DSP负责数据流的调制解调,利用编解码实现传输误码纠正,维持数据链路的稳定,对数据进行加密、
解密、保证通信的安全性,对语音数据进行压缩和解压缩。
在码分多址(CDMA)模式手机:
采用扩频技术,手机功能划分的方案也就发生了相应的变化,DSP仍是手机的关键部件,负责前向纠错加密、语音压缩和解压缩,还负责控制ASIC硬件。
ASIC硬件:负责对扩频信号调制或解调及后处理。
在2G手机中,上述功能由DSP硬件来实现,时钟为
40MHz,在2.5G手机,语音编码芯片较以前更为复杂,数据速率率更高,时钟已高于100MHz。
在2G手机中。MCU负责支持手机的用户界面。例如,大多数采用 32位的RISC内核 ——ARM7就是典型的代表。
时钟不超过10MHz。在2.5G手机,时钟也不超过
40MHz。
随着科技发展,手机的功能及实现方案也在发生变化。
目前,手机还是一个封闭的、静态的、嵌入式系统的典型,主要还是为用户建立一个语音信道,这是一个固定的、实时的、集中的DSP任务。
未来的移动电话市场可能会发生分化:
传统的以语音业务为主的,会继续占有一定的市场份额。
随着互联网的发展,例如下载一个 MP3应用程序,希望手机支持一个电视会议,或变为 GPS辅助导航仪,
将具有类似于个人计算机的特性,变为一个应用平台。因此,手机的体系结构也将发生重大的变化。
0.6.2 2G手机简介与 2G手机相比,3G手机的体系结构将发生重大变化。
多媒体数据应用日益显得重要。为将实时通信功能和用户交互式分开,TI开发了的双处理器开放式多媒体应用平台。
50-100MIPS提高到500MIPS以上。未来的手机可能会采用多个DSP芯片,一个用来实现固定功能,嵌入式解调器,另外一个更加灵活的DSP芯片用来实现各种应用。
在未来的手机中,为支持各种可下载的应用,3G中使用的 DSP体系结构和软件基础结构必须不断变化,
此时,DSP将不再是具有固定功能的嵌入式处理器,
而 开始呈现出许多类似于通用处理器的特征,如 超高速指令缓冲器和内存管理单元等功能 。为实现动态任务管理,需要 实时操作系统 ( RTOS)。
第1章 TMS320LF240X系列DSP概述该系列包括:
闪存,TMS320LF2402、TMS320 LF2406、TMS320 LF2407
ROM,TMS320LC2402、TMS320 LC2404、TMS320 LC2406
最具革命性产品,LF2407/ LF2407A,是当今世界上集成度最高、性能最强的 运动控制 DSP芯片。
1.1 DSP芯片的基本结构
1.什么是DSP芯片
DSP是一种特殊结构的微处理器,快速实现各种数字信号处理算法。
2,DSP芯片的基本结构
(1) 哈佛结构-程序和数据分开的结构程序和数据存储在两个不同的空间。
通用微处理器,存储器结构为 冯.诺依曼结构 。见下图程序存储器和数据存储器 共用 一个公共的存储空间和单一的地址和数据总线。
CPU
程序 /数据存储器哈佛结构,DSP的程序存储器空间和数据存储器空间分开,即 每个存储器空间独立编址,独立访问,并具有 独立的程序总线和数据总线,取指和执行能完全重叠进行。
允许数据存放在程序存储器中,并被算术指令运算指令直接使用。
指令存储在 高速缓冲器(Cache) 中,当执行本指令时,不需再从存储器中读取指令,节省一个机器周期的时间。
(2)流水线操作功能
DSP芯片采用多组总线结构,允许CPU同时进行指令和数据的访问。因而,可在内部实行流水线操作。
执行一条指令,总要经过 取指、译码、取数、执行 运算,需要若干个指令周期才能完成。 流水线技术是将各个步骤重叠起来进行。 既第一条指令取指、译码时,第二条指令取指;第一条指令取数时,第二条指令译码,第三条指令取指,依次类推。
(3)专门的硬件乘法器和乘加指令MAC
在数字信号处理的算法中,乘法和累加是基本的大量运算,占用绝大部分的处理时间 。例如,数字滤波,卷积,相关,向量和矩阵运算中,有大量的乘和累加运算。。 PC机计算乘法需多个周期用软件实现,而DSP设置了硬件乘法器以及乘加指令
MAC,在单周期内取两个操作数一次完成。
取指 取数取指 执行译码执行执行执行取指取指译码译码译码取数取数取数
(4)特殊的处理器指令采用特殊的指令。
例如,DMOV指令,把指令的数据复制到该地址加1的地址中,原单元的内容不变----数据移位,相当于延迟。
另一特殊指令LTD,在一个指令周期完成LT、DMOV和
APAC三条指令的内容。
(5) 高速的指令运行周期
DSP指令周期可为几ns,LF2407A为40ns 。
(6) 丰富的片内存储器件和灵活的寻址方式片内集成FLASH和双口RAM,通过片内总线访问这些存储空间,因此不存在总线竞争和速度匹配问题,
大大提高数据的读/写速度。
(7) 独立的直接存储器访问(DMA)总线及其控制器
DSP为DMA单独设置了完全独立的总线和控制器。
1.2 TMS320系列DSP概述该系列包括:定点、浮点、多处理器DSP和定点DSP。
体系结构专为实时数字信号处理而设计。
TI公司从1982年推出:
第一代 TMS32010、TMS32011等。
第二代 TMS32020、TMS320C025(改进型TMS320C2xx)
第三代 TMS32030、TMS320C32等。
第四代 TMS32040/TMS320C44等。
第五代 TMS3205x/TMS320C54x等。
第六代 TMS32062x/TMS320C67x等(速度最快)。
TMS320C8X,内有多个DSP
三大系列,2000,5000,6000。
同一代的器件有相同的CPU结构,但片内存储器和外设配置不同。
1.3 TMS320LF240x系列 DSP控制器专为数字电机控制和其它控制系统而设计的。是当前集成度最高、性能最强的运动控制芯片。
不但有高性能的C2XX CPU内核,配置有高速数字信号处理的结构,且 有控制电机的外设 。
它将数字信号处理的高速运算功能,与面向电机的强大控制功能结合在一起,成为传统的多微处理器单元和多片系统的理想替代品。
主要用途:
(1)电机(交流伺服、直流永磁、开关磁阻)的鲁棒控制器。
(2)无刷电机的全变速控制。
(3)使用先进的算法可降低传感器的数量。
(4)汽车电子制动系统。
(5)多电机系统的单处理器控制。
(6)与控制算法处理一起完成电源开关转换的控制。
处理速度,LF240x为 30MIPS,LF240xA为 40MIPS。
240X采用诸如自适应控制、卡尔曼滤波和控制等先进的控制算法,支持多项式的高速实时算法,因而可减少力矩纹波、降低攻耗、减少振动,从而延长被控设备的寿命,为各种电机提供了高速、高效和全变速的先进控制技术。
4级流水线结构,采用改进的哈佛结构。
指令系统,信号处理指令、通用控制指令。
源代码和目标代码与24x同代产品兼容,源代码与C2x
兼容,且与C5x向上兼容。利用它的为反转变址寻址能力可进行基2的FFT运算。
片内外设及存储器等资源:
C2xx
DSP
内核
DARAM(B0)
256字
DARAM(B1)
256字
DARAM(B2)
32字
PLL时钟
10-bit ADC
具有双排序器
SCI
SPI
CAN
WD
SARAM 2K字
Flash/ROM
32K字
4K/12K/12K/4K
外部存储器接口数字I/O
与其它引脚共享
JTAG端口
事件管理器A
* 3个捕获输入
* 6个比较/PWM输出
* 2个定时器/PWM
事件管理器B
* 3个捕获输入
* 6个比较/PWM输出
* 2个定时器/PWM
XINT1/IOPA2
TMS2
MP/MC
RS
CLKOUT/IOPE0
VDD(3.3V)
VSS
TP2
TP1
VCCP(5V)
A0-A15
ENA 144
D0-D15
READY
PS,DS,IS
BIO/IOPC1
BOOT EN/XF
CAP1/QEP1/IOPA3
CAP2/QEP2/IOPA4
CAP3/IOPA5
PWM1/IOPA6
PWM2/IOPA7
TCLKINA/IOPB7
PWM3/IOPB0
PWM4/IOPB1
PWM5/IOPB2
TDIRA/IOPB6
PWM6/IOPB3
T1PWM/T1CMP/IOP
B4 T2PWM/T2CMP/IOP
B5
TCLKINB/IOPF5
TDIRB/IOPF4
T4PWM/T4CMP/IOP
F3
CAP4/QEP3/IOPF7
CAP5/QEP4/IOPF0
CAP6/IOPF1
T3PWM/T4CMP/IOP
F2
PWM12/IOPE6
PWM11/IOPE5
PWM10/IOPE4
PWM7/IOPE1
PWM9/IOPE3
PWM8/IOPE2
VIS OE
PDPINTA
R/W
RD
WE
W/R/IOPC0
STRB
PDPINTB
TRST
EMU1
TDO
TDI
TMS
TCK
EMU0
Port D(0) IOPD[0]
CANRX/IOPC7
CANTX/IOPC6
SPISTE/IOPC5
SCITXD/IOPA0
SCIRXD/IOPA1
SPISIMO/IOPC2
SPISIMI/IOPC3
SPICLK/IOPC4
VSSA
VREFHO
XINT2/ADCSOC/IOP
D0
VREFHI
ADCIN00-ADCIN07
ADCIN08-ADCIN15
VCCA
PLLF2
XTAL1/CLKIN
PLLVCCA
XTAL2
PLLF
Port A(0-7) IOPA[0:7]
Port B(0-7) IOPB[0:7]
PortF(0-7) IOPF[0:6]
PortE(0-7) IOPE[0:7]
Port C(0-7) IOPC[0:7]
(1)双10位(双8路或单16路)A/D转换器,转换时间500nS。
(2)41个可独立编程的多路复用I/O引脚;
(3)带锁相环PLL的时钟模块;
(4)看门狗定时器模块;
(5)串行通信接口SCI与串行外设接口SPI;
(6)两个事件管理器EVA、EVB,可为所有类型电机提供控制技术,在工业自动化方面的应用奠定了基础。
* 3个具有死区功能的全比较单元;2个单比较单元;
* 防止击穿故障的可编程PWM死区控制;
* 2个16位通用定时器;
* 3个事件捕捉单元,其中2个具有直接连接光电编码器脉冲的能力;
(7)8个16位PWM通道--三相反相器控制;
(8)5个外部中断(两个驱动保护、复位、两个可屏蔽中断);
(9)CAN 2.0B 模块
(10)用于仿真的JTEG接口。
(11)片内存储器:32K字闪存、2.5K字RAM
引脚功能介绍
TMS320LF2407A
14
4
14
3
14
2
13
8
13
9
13
7
14
1
14
0
13
6
13
5
13
4
13
3
13
2
13
0
13
1
12
9
12
8
12
7
12
6
12
5
12
4
12
3
12
2
12
1
11
1
11
0
11
5
11
4
10
9
12
0
11
9
11
8
11
2
11
3
11
6
11
7
TM
S
TD
O
TDI
TC
K
VD
D
VS
SD6
VD
D
O
VS
S
O
VS
S
O
VS
S
A
VCC
A
D5 D4 D3 D2 D1 D0
PDPINT
B
RS
IO
PF
6
XTA
L2
RE
A
DY
XTA
L
1/
CLK
IN
BO
OT
EN/XF
TCLKINB/I
O
PF
5
EN
A
144
BIO/
I
O
PC
1
MP/M
C
VR
EF
HI
AD
CIN0
8
VR
EF
LO
AD
CIN0
0
AD
CIN0
9
AD
CIN0
1
AD
CIN1
0
D7
D8
D9
TRS
T
VSS
O
VDD
O
TDIRB/IOPF
4
T4PWM/T4CMP/IO
PF3
PDPINTA
T3PWM/T3CMP/IOPF
2
PLLF2
PLLF
PLLVCCA
TDIRA/IOPD0
D10
T1PWM/T1CMP/IOPB4
D11
T2PWM/T2CMP/IOPB5
W/R/IOPC0
D12
XINT2/ADCSOC/IOPD0
D13
XINT1/IOPA2
D1
4
SCITXD/IOPA
0
SCITXD/IOPA
1
D15
VS
S
VDD
SPISIMO/IOPC2
A1
5
SPISIMI/IOPC3
SPISTE/IOPC5
A14
SPICLK/IOPC
4
TMS2
37 38 39 41 42 50 51 49 48 47 46 45 44 43 40 52 53 54 55 72 71 70 56 57 58 59 60 69 68 67 66 65 64 63 62 61
TCLKINA/IOPB7 PW
M
1
2/
IO
P
E
6
A1
3
PW
M
6
/
I
O
P
B3
VS
SO
VD
DO
A1
2
PW
M
5
/
I
O
P
B2
A1
1
PW
M
1
1I
OP
E5
PW
M
4
/
I
O
P
B1
A1
0
VS
S
VD
D
A9 PW
M
3
/
I
O
P
B0
A8 PW
M
7
/
I
O
P
E1
A5TP2PW
M
8
/
I
O
P
E2
A6PW
M
9
/
I
O
P
E3
TP1V
CCP
A7PW
M
1
/
I
O
P
A6
PW
M
2
/
I
O
P
A7
PW
M
1
0/
IO
P
E
4
CA
NT
X/I
O
PC
6
A3CA
NR
X
/
I
O
PC
7
CAP
6
/IOPF1
A4VD
DO
VS
SO
108
107
106
105
104
103
1
36
35
34
33
32
31
30
29
28
27
26
25
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
102
101
100
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83
73
74
75
76
77
78
79
80
82
81
ADCIN11
ADCIN02
ADCIN12
ADCIN03
ADCIN13
ADCIN04
ADCIN05
ADCIN14
ADCIN06
ADCIN07
ADCIN15
VIS_OE
STRB
VDDO
VSSO
RD
R/W
EMU1/OFF
EMUU0
WE
DS
VDD
VSS
PS
IS
A0
A1
VDDO
VSSO
CAP3/IOPA
5
A2
CAP4/QEP3/IOPE
7
CAP1/QEP1/IOP
A3
CAP5/QEP4/IOPF
0
CAP2/QEP2/IOP
A4
CLKOUT/IOPE0
地址、数据、存储器控制信号
A0-A15:
D0-D15:
DS*,数据空间选通;
PS*,程序空间选通;
IS*,I/O空间选通;
R/W*,读写选通,指明与外围器件信号的传送方向;
W/R*/IOPC0,为R/W *的反;
WE*,对外部3个空间写;
RD*:对外部3个空间读;
STRB*,外部存储器选通;
READY,插入等待状态;
MP/MC*,微处理器/微计算机(控制器)方式选择
ENA_144:=1,使能外部信号;
=0,无外部存储器。
VIS_OE*:可视输出可能。
可视输出的方式下,外部数据总线为输出时,该引脚有效,可用作外部编码逻辑,以防止数据总线冲突。
事件管理器A(EVA)
CAP1/QEP1/IOPA3:捕捉输入1/正交编码脉冲输入;
CAP2/QEP2/IOPA4:
CAP3/IOPA5:
PWM1/IOPA6,比较PWM输出或通用IO;
PWM2/IOPA7:
PWM3/IOPB0:
PWM4/IOPB1:
PWM5/IOPB2:
PWM6/IOPB3:
T1PWM/T1CMP/IOPB4:
T2PWM/T2CMP/IOPB5:
TDIRA/IOPB6,通用计数器方向选择(EVA)
1:加计数; 0:为减计数;
TCLKINA/IOPB7,通用计数器(EVA)外部时钟输入,
事件管理器B(EVB)
CAP4/QEP3/IOPE7:
CAP5/QEP4/IOPF0:
CAP6/IOPF1:
PWM7/IOPE1~PWM12/IOPE6:
T3PWM/T3CMP/IOPF2:
T4PWM/T4CMP/IOPF3:
TDIRB/IOPF4,通用计数器方向选择(EVB)
1:加计数; 0:减计数;
TCLKINB/IOPF5,通用计数器(EVA)外部时钟输入模数转换器
ADCIN00~ADCIN15,ADC的模拟输入
VREFHI,ADC的模拟参考电压高电平输入端
VREFLO,ADC的模拟参考电压低电平输入端
VCCA,ADC模拟供电电压(3.3V)
VSSA,ADC模拟地。
CAN、SCI、SPI
CANRX/IOPC7,CAN接收数据脚或IO脚;
CANTX/IOPC6,CAN发送数据脚或IO脚;
SCITXD/IOPA0,SCI发送数据脚或IO脚;
SCIRXD/IOPA1,SCI接收数据脚或IO脚;
SPICLK/IOPC4,SPI时钟脚或IO脚;
SPISIMO/IOPC2,SPI从输入主输出或IO脚;
SPISOMI/IOPC3,SPI从输出主输入或IO脚;
SPISTE*/IOPC5,SPI从发送使能或IO脚;
外部中断、时钟
RS
*
,复位引脚,当RS *为高电平时,从程序存储器的
0地址开始执行程序;当WD定时器溢出时,在RS *脚产生一个系统复位脉冲;
PDPINTA
*
:功率驱动保护中断输入,当电机驱动不正常时,如出现过压、过流时,该中断有效,将
PWM脚(EVA)置为高阻态。
XINT1/IOPA2,外中断1或通用IO脚,极性可编程;
XINT2/ADCSOC/IOPD0,外中断2可做AD转换开始输入或通用IO脚,极性可编程;
CLKOUT/IOPE0,时钟输出或通用IO脚;
PDPINTB
*
:功率驱动保护中断输入,当电机驱动不正常时,如出现过压、过流时,该中断有效,将PWM
脚(EVB)置为高阻态。
振荡器、锁相环、闪存、引导及其他
XTAL1/CLKIN,PLL振荡器输入引脚;
XTAL2,PLL振荡器输出引脚;
PLLVCCA,PLL电压(3.3V);
IOPF6,通用IO脚;
BOOT_EN*/XF,引导ROM使能,通用IOXF脚;
PLLF1,PLL外接滤波器输入1;
PLLF2,PLL外接滤波器输入2;
VCCP(5V),闪存编程电压输入端,在硬件仿真时,
该脚可为5V或0V。运行时,该脚必须接地。
TP1(Flash),Flash阵列测试引脚,悬空;
TP2(Flash),Flash阵列测试引脚,悬空;
BIO*/IOPC1:分支控制输入引脚或通用IO脚,0:执行分支程序。如不用该脚,必须为高电平;复位时,
配置为分支控制输入;
仿真和测试
EMU0,
EMU1/OFF
*

TCK:
TDI:
TDO:
TMS:
TMS2:
TRST
*

电源电压
VDD,内核电源电压+3.3V,数字逻辑电源电压;
VDDO,IO缓冲器电源电压+3.3V,数字逻辑和缓冲器电源电压;
VSS,内核电源地,数字参考地;
VSSO,IO缓冲器电源地,数字逻辑和缓冲器电源地;
1.4 TMS320LF240x系列 DSP存储器映射
Flash扇区0(4K)
中断向量(0000-003FH)
保留 (0040-0043H)
用户代码开始于0044H
Flash扇区 1( 12K)
Flash扇区 2( 12K)
Flash扇区 3( 4K)
SARAM(2K)
内部 (PON=1)
外部 (PON=2)
外部保留 (CNF=1)
外部 (CNF=0)
片内 DAREM(B0) (CNF=1)
外部 (CNF=0)
存储器映射寄存器 /保留地址片内 DAREM B2
非法保留片内 DAREM(B0) (CNF=1)
外部 (CNF=0)
片内 DAREM B1
保留非法
SAREM(2K)
内部 (DON=1)
外部 (DON=0)
非法外设存储器映射寄存器
(系统,WD,ADC,
SCI,
SPI,CAN,I/O,中断 )
外部外部保留
Flash控制模式寄存器保留等待状态发生器控制器寄存器(片内)
Hex
0000
0FFF
1000
3FFF
4000
6FFF
7000
7FFF
8000
87FF
8800
FDFF
FE00
FEFF
FF00
FFFF FFFF FFFF
Hex
0000
005F
0060
007F
0080
00FF
0100
01FF
0200
02FF
0300
03FF
0400
0500
04FF
07FF
0800
0FFF
1000
6FFF
7000
7FFF
8000
Hex
0000
FEFF
FF00
FF0E
FF0F
FF10
FFFE
I/O
Hex
0000
0003
0004
0005
0006
0007
005F
7000-700F
7010-701F
7020-702F
7030-703F
7040-704F
7050-705F
7200-722F
7060-706F
7070-707F
7080-708F
7090-709F
70A0-70BF
70C0-70FF
7100-710E
710F-71FF
7230-73FF
7400-7408
7411-7419
7420-7429
742C-7431
7432-743F
7500-7508
7511-7519
7520-7529
752C-7531
7532-753F
0000
Hex
005F
0060
007F
0080
00FF
0100
01FF
0200
02FF
0300
03FF
0400
04FF
0500
07FF
0800
0FFF
1000
6FFF
7000
73FF
7400
743F
7440
74FF
7500
753F
7540
77EF
77F0
77F3
77F4
77FF
7800
7FFF
8000
FFFF
存储器映射寄存器和保留片内 DARAM B2
非法保留片内 DARAM B0
片内 DARAM B1
保留非法
SARAM(2K)
非法外设帧 1 (PF1)
外设帧 2 (PF2)
非法外设帧 3 (PF3)
非法代码安全密码保留非法外部 *
保留
中断屏蔽寄存器保留中断标识寄存器仿真寄存器和保留非法系统配置和控制寄存器看门狗定时器寄存器非法
SPI
SCI
非法外部中断寄存器非法数字 I/O 控制寄存器
ADC 控制寄存器非法
CAN 控制寄存器
CAN 邮箱非法非法事件管理器 EVA
通用目标定时器寄存器比较,PWM 和死区寄存器捕获和 QEP 寄存器中断屏蔽,向量和标志寄存器非法事件管理器 EVB
通用目标定时器寄存器比较,PWM 和死区寄存器捕获和 QEP 寄存器中断屏蔽,向量和标志寄存器保留
* 表示这些地址只有 LF2407才有有16位地址线,可以访问 3个独立的地址空间,总计
192K字 。
(1)程序存储器:64K字;
(2)数据存储器:64K字;
(3)I/O空间:64K字。
所有的 片内外设寄存器 均映射在 数据存储器空间 。
片内32K字 Falsh 。
片内RAM为544个字 (为DARAM-双口RAM ),B0-256
个; B1-256个; B2-32个。
片内SARAM 2K字 (单口RAM)。
1.5 TMS320LF240x系列 DSP的CPU功能模块包括:输入定标移位器、乘法器、中央算术逻辑单元
1.5,1 输入定标移位器将来自程序/数据存储器的16位数据调整为32位数据送到中央算术逻辑单元(CALU)。
作为程序/数据存储器到CALU数据传输路径的一部分
1.5,2 乘法器
16?16硬件乘法器,单周期产生一个32位有符号或无符号乘积。
1.5,3 中央算术逻辑单元 (CALU)
实现大部分的 算术 和 逻辑 运算功能。大多数只需1个机器周期。
可进行布尔运算,使高速控制器所要求的位操作很容易。
对于大动态范围,可支持浮点操作。
对大多数指令,状态寄存器 ST1的第10位 符号扩展位
(SXM)决定在计算时是否使用符号扩展:
若 SXM=0,符号扩展无效;
若 SXM=1,符号扩展有效。
1.5,4 累加器 (A CC)
有关累加器的状态位和转移指令。
(1) 进位标志位C
状态寄存器 ST1的第9位 。
(2) 溢出方式标志位OVM
状态寄存器 ST0的第11位 。决定累加器如何反映算术运算的溢出。
OVM=1,且运算溢出,A CC为下列两个特定值:
若正溢出,A CC中填最大正数:7FFF FFFFh
若负溢出,A CC中填最大负数:8000 0000h
OVM=0,ACC中的结果正常溢出。、
(3)溢出标志位OV
ST0的第12位
(4)测试/控制标志位TC
ST1的第11位,根据被测位的值置1或清0。
与累加器有关的转移指令大都取决于C、OV、TC的状态和累加器的值。
1.5,5 输出数据定标移位器将累加器输出的内容左移0-7位,而累加器的内容保持不变。
1.5,6 状态寄存器ST0和ST1
特别重要,两个寄存器的内容可被读出并保存到数据存储器( 用SST指令 ),或从数据存储器读出加载到ST0和ST1 ( 用LST指令 )。
在子程序调用或进入中断时实现CPU各种状态的保存 。
可用指令 SETC和 CLRC单独置1或清0。
ST0各位的含义:
ARP(位15-13),辅助寄存器指针,间接寻址,选择当前的辅助寄存器AR。 AR被装载时,原ARP的值被复制到ARB中。
OV (位12),溢出标志位。
OVM (位11),溢出方式标志位。
INTM(位9),中断总开关位。
=1,所有可屏蔽中断被禁止;
=0,所有可屏蔽中断有效。
DP(位8-0),数据存储器页面指针
9位的DP与指令字中的7位一起形成16位的数据存储器的直接地址。
ST1各位的含义:
ARB(位15-13),辅助寄存器指针缓冲器。
当ARP被加载到ST0时,原来的ARP被复制到ARB中,
也可将ARB复制到ARP中。
CNF(位12),片内DARAM配置位
=0,片内DARAM映射到数据存储器区;
=1,片内DARAM映射到程序存储器区。
TC(位11),测试/控制标志位
SXM(位10),符号扩展方式位
=1,数据通过定标移位器传送到累加器时将产生符号扩展;
=0,不产生符号扩展。
C(位9),进位标志位。
XF(位4),XF引脚状态位。
可用 指令SETC 置1,用 指令CLRC 清0
PM(位1-0 ),乘积移位方式
00:乘法器的 32位乘积不移位,直接入 CALU。
01,PREG左移 1位后装入 CALU,最低位填 0;
10,PREG左移 4位后装入 CALU,低 4位填 0;
11,PREG输出进行符号位扩展右移 6位。
1.5,7 辅助寄存器算术单元(ARAU)
1.辅助寄存器算术单元ARAU简介
ARAU的 主要功能,在CALU操作的同时,执行8个辅助寄存器AR7-AR0中的算术运算,8个辅助寄存器提供了强大而灵活的间接寻址能力。利用辅助寄存器中的
16位地址可访问64K字的数据空间任一单元。
如何选择某一辅助寄存器?用 ARP指针装入 3位数据 。
2.辅助寄存器除可用于数据存储器的地址外,还有其他用途:
(1)利用辅助寄存器进行条件转移;
(2)利用辅助寄存器进行暂存单元;
(3)利用辅助寄存器进行软件计数。
第2章 系统配置和中断介绍系统的 配置寄存器 和有关中断,并介绍用于 增加中断请求容量 的 外设中断扩展(PIE)寄存器 。
2.1 系统配置概述系统配置和中断操作的 内容包括,系统配置寄存器、中断优先级和中断向量表、外设中断扩展控制器(PIE)、
中断向量、中断响应的流程、中断响应的时间、CPU
中断寄存器、外设中断寄存器、复位、无效地址检测、外部中断控制寄存器。
LF2407大部分的I/O口是多路复用的,复位时会被上拉为数字输入的模式。
2.2 系统配置寄存器对功能模块进行配置。
2.2.1 系统控制和状态寄存器
(1)系统控制和状态寄存器 - SCSR1,映射到数据存储器空间 7018h。
位15,保留位14,CLKSRC,CLKOUT引脚输出源选择
0-CLKOUT引脚 输出CPU时钟 ;
1-CLKOUT引脚 输出WDCLK时钟位13-12,LPM低功耗模式选择,指明在执行 IDLE 指令 后进入哪一种低功耗模式。
00-进入IDLE1(LPM0)模式;
01-进入IDLE2(LPM1)模式;
1x-进入HALT (LPM2)模式。
位11-9,PLL时钟预定标选择,对输入时钟选择 倍频系数 。
000-4;
001-2;
010-1.33;
011-1;
100-0.8;
101-0.66;
110-0.57;
111-0.5
位8,保留位7,ADC CLKEN,ADC模块时钟使能控制位位6,SCICLKEN,SCI模块时钟使能控制位位5,SPICLKEN,SPI模块时钟使能控制位位4,CANCLKEN,CAN模块时钟使能控制位位3,EVBCLKEN,EVB模块时钟使能控制位位2,EVACLKEN,EVA模块时钟使能控制位
0,禁止模块时钟(节能) ; 1,使能模块时钟,且运行位1,保留位0,ILLADR,无效地址检测位当检测到一个无效地址时,该位被置1,该位需软件清除,写0即可。初始化时该位写0。
注意,任何无效的地址会导致NMI事件发生。
(2)系统控制和状态寄存器2 - SCSR2
映射到数据存储器空间 7019h 。
位15-7,保留位位6,I/P QUAL,时钟输入限定,它限定输入到DSP的
CAP1-6,XINT1-2,ADCSOC以及PDPINTA */PDPINTB*引脚 上的 信号被正确锁存时,需要的最小脉冲宽度 。
脉冲宽度只有达到这个宽度之后,内部的输入状态才会改变。
0-锁存脉冲至少需要 5个时钟周期 ;
1-锁存脉冲至少需要 11个时钟周期 。
如果 这些引脚作I/O,则不会使用输入时钟限定电路。
位5,WD保护位,该位 可用软件来禁止WD工作 。这位是 —个只能清除的位,复位后默认1。通过向这位写1对其清除。
0-保护WD,防止WD被软件禁止。
1-复位时的默认值位4,XMIF HI-Z。控制 外部存储器接口信号 (XMIF)
0:所有XMIF信号处于 正常驱动模式 (即 非高阻态 )
1:所有XMIF信号处于 高阻态位3,BOOTEN*(使能位)。这位反映了BOOTEN *引脚在复位时的状态。
0:使能引导ROM。地址空间0000h-00FFh被片内引导ROM块占用。 禁止用FLASH存储器 。
1:禁止引导ROM。TMS320LF2407片内FALSH程序存储器映射地址范围为0000h一7FFFh。
位2,(微处理器/微控制器选择)。这位反映了器件复位时MP/MC *引脚的状态。
0:器件 设置为微控制器方式,程序地址范围从
0000h一7FFFh被映射到片内
1:器件 设置为微处理器方式,程序地址范围从
0000h一7FFFh被映射到片外(必须外扩外部存储器)
位1-0,SRAM的程序/数据空间选择
0 0 地址空间不被映射,该空间被分配到外部存储器
0 l SARAM 被映射到 片内程序空间
1 0 SARAM 被映射到 片内数据空间
1 1 SARAM 被映射到 片内程序空间,又被 映射到片内数据空间
2.2.2 器件标识号寄存器(DINR)
该寄存器被映射到数据存储器空间 701Ch。
位15-4 DIN15-DIN4。这些位包含了硬连线器件指定的器件标识号。
位3-0 DIN3-DIN0。包含了器件的版本、给定值器件 版本 DIN15-DIN0
LF2407 1.0~1.5 0510h
LF2407 1.6 0511h
LF2407A 1.0 0520h
LC2406A 1.0 0700h
LC2402A 1.0 0610h
2.3 中断优先级和中断向量表
LF2407 DSP具有 3个不可屏蔽中断和6个可屏蔽中断 (INT1-
INT6),可 采用 中断扩展设计来满足大量外设中断需求。
每个可屏蔽中断有多个中断源,每个中断源具有唯一的中断入口地址向量。
中断源如下所示:
不可屏蔽中断(3个)
中断优先级 中断名称 外设中断向量 描述
1 Reset 0000h 复位引脚和 WD溢出
2 保留 0026h 仿真陷阱
3 NMI 0004h 软件中断
INT1(级别1)
中断优先级 中断名称 外设中断向量 描述
4 PDPINTA 0020h 功率驱动保护中断
5 PDPINTB 0019h 功率驱动保护中断
6 ADCINT 0004h 高优先级 ADC中断
7 XINT1 0001h 高优先级外中断
8 XINT2 0001h 高优先级外中断
9 SPINT 0005h 高优先级 SPI中断
10 RXINT 0006h 高优先级 SCI接收中断
11 TXINT 0007h 高优先级 SCI发送中断
12 CANMBINT 0040h 高优先级 CAN邮箱中断
13 CANERINT 0041h 高优先级 CAN错误中断
INT2(级别2)
中断优先级 中断名称 外设中断向量 描述
14 CMP1INT 0021h 比较器 1中断
15 CMP2INT 0022h 比较器 2中断
16 CMP3INT 0023h 比较器 3中断
17 T1PINT 0027h 定时器 1周期中断
18 T1CINT 0028h 定时器 1比较中断
19 T1UFINT 0029h 定时器 1下溢中断
20 T1OFINT 0029h 定时器 1上溢中断
21 CMP4INT 0024h 比较器 4中断
22 CMP5INT 0025h 比较器 5中断
23 CMP6INT 0026h 比较器 6中断续 INT2(级别2)
中断优先级 中断名称 外设中断向量 描述
24 T3PINT 002Fh 定时器 3周期中断
25 T3CINT 0030h 定时器 3比较中断
26 T3UFINT 0031h 定时器 3下溢中断
27 T1OFINT 0032h 定时器 3上溢中断
INT3(级别3)
中断优先级 中断名称 外设中断向量 描述
28 T2PINT 002Bh 定时器 2周期中断
29 T2CINT 002Ch 定时器 2比较中断
30 T2UFINT 002Dh 定时器 2下溢中断
31 T2OFINT 002Eh 定时器 2上溢中断
32 T4PINT 0039h 定时器 4周期中断
33 T4CINT 003Ah 定时器 4比较中断
34 T4UFINT 003Bh 定时器 4下溢中断
35 T4OFINT 003Ch 定时器 4上溢中断
INT4(级别4)
中断优先级 中断名称 外设中断向量 描述
36 CAP1INT 0033h 比较器 1中断
37 CAP2INT 0034h 比较器 2中断
38 CAP3INT 0035h 比较器 3中断
39 CAP4INT 0036h 比较器 1中断
40 CAP5INT 0037h 比较器 2中断
41 CAP6INT 0038h 比较器 3中断
INT5(级别5)
中断优先级 中断名称 外设中断向量 描述
42 SPINT 0005h 低优先级 SPI中断
43 RXINT 0006h 低优先级 SCI接收中断
44 TXINT 0007h 低优先级 SCI发送中断
45 CANMBINT 0040h 低优先级 CAN邮箱中断
46 CANERINT 0040h 低优先级 CAN错误中断
INT6(级别6)
中断优先级 中断名称 外设中断向量 描述
47 ADCINT 0004h 低优先级 ADC中断
48 XINT1 0001h 低优先级外中断
49 XINT2 0011h 低优先级外中断
N/A TRAP 0022h 陷阱中断
N/A 假中断向量 0000h 假中断向量
2.4 外设中断扩展控制器
LF2407采用一个 外设中断扩展(PIE)控制器 来专门管理来自各种外设或外部引脚的中断请求。下图为外设中断扩展模块图。
具体寄存器为:PIRQR0-PIRQR2
地址总线
INT6
INT2
INT1
CPU
优先级别 1
IRQ REN
优先级别 2
IRQ REN
优先级别 6
IRQ REN
数据总线
PIRQTn
PIACKRn
PIVR
PIRQR0
PIRQR1
IACK
PIE
2.4.1 中断层次通过中断请求系统中的一个两级中断来 扩展中断个数,
2407 可响应的中断个数数量很多,DSP的中断请求/
应答逻辑和中断服务程序软件都有 两级层次 的中断。
2.4.2 中断请求的结构在 低层次 中断,从几个外设来的 外设中断请求(PIRQ)
在中断控制器处进行或运算,产生一个INTn中断; 在高层次 中断,从INTn中断请求产生一个到CPU的中断。
2.4.3 中断应答外设产生中断请求后,经PIE控制器译码,决定谁被响应,CPU通过赋予程序地址总线一个值 ——中断向量,决定哪个中断请求被应答。
2.5 中断向量为使CPU能够区别不同外设引起中断,在每个外设中断请求有效时,都会 产生一个唯一的外设中断向量,
这个外设中断向量被装载到 外设中断向量寄存器
(PIVR)。
CPU响应外设中断时,从PIVR中读取相应的中断向量,
转到相关的中断服务程序入口。
LF2407 有 两个向量表 。
(1) CPU向量表 用来获取响应CPU中断请求的一级 通用中断服务子程序(GISR) 。
(2) 外设向量表 用来获取响应某一特定外设事件的 特定中断服务子程序(SISR)。
GISR中的程序可读出PIVR中的值,在保存必要的上下文之后,用PIVR中的值来产生一个转到SISR的向量。
2.5.1 假中断向量假中断向量特性可以 保证 系统一直可靠安全地运行,
而不会进入无法预料的中断死循环中。
以下两种情况会产生假中断:
(1)CPU执行一个软件中断指令,并且指令具有一个与外设中断(通常为INT1一INT6)相关的变量。
(2)当外设发出中断请求,但是其 INTn标志位却在CPU
应答请求之前已经被清0。
在上述两种情况下,没有外设中断请求送到中断控制器,因此控制器不知道哪个外设中断向量装入到
PIVR,此时向PIVR中装入假中断向量。
2.5.2 软件层次中断服务子程序的 层次有两级,通用中断服务子程序
(GISR)和 特定中断服务子程序(SISR)
对于每个向CPU发送的可屏蔽高优先级中断请求(INTl
一INT6),从PIVR获取外设中断向量之前,必须在
GISR中保存必要的上下文。从外设中断向量寄存器
(PIVR)中获取外设中断向量。转移到SISR的地址入口。
在SISR中执行对该外设事件的响应。
当程序进入中断服务程序后,所有的可屏蔽中断都被屏蔽。 GISR必须在中断被重新使能之前读取PIVR中的值,否则在另一个中断请求发生之后,PIVR中将装入另一个中断请求的偏移量,这将导致原外设中断向量参数的永久丢失。
2.5.3 不可屏蔽中断
LF2407 DSP 无NMI引脚,在访问无效的地址时,不可屏蔽中断(NMI)就会发出请求 。当NMI被响应后,
程序将转到 不可屏蔽中断向量入口地址 0024h处。
LF2407 DSP没有与NMI相对应的控制寄存器。
2.5.4 全局中断使能
INTM为全局中断使能位,在初始化程序和主程序中,
常常需要使用该位对DSP中断进行打开和关闭操作。
特别是初始化过程中,需要 关中断,而在主程序开始执行时,需要 开中断 。
SETC INTM; 关中断
CLRC INTM; 开中断进入中断服务程序时,系统自动关闭中断,不允许在中断服务程序中响应其他中断。
从中断服务程序返回时需要重新打开中断。
2.6 中断响应的流程外设模块的中断响应流程开始外设中断产生外设中断寄存器
(PR)中的中断标志位IF置1
中断使能IE=1?
中断产生逻辑等待,
IE位置1或IF位被软件清0
IE位被S/W置1
N
Y
转下页向PIE控制器发送外设中断请求外设中断请求位置
1,并向INTn发送中断请求
CPU接收INTn
接上页
2.7 中断等待时间中断响应的等待时间包括,外设同步接口时间、CPU
响应时间、ISR等待时间,分别介绍如下:
(1)外设同步接口时间 是指为了响应一个PlE控制器可以识别的中断事件,而产生一个中断请求所花的时间和转换后将请求发送至CPU的时间。
(2) CPU的响应时间 指的是CPU识别出已经被使能的中断请求、响应中断、清除流水线、并且开始捕获来自CPU中断向量的第一条指令所花费的时间。
最小的CPU的响应时间是4个CPU指令周期 。 如果一个更高优先级的可屏蔽中断在最小的等待周期被请求,该中断将被屏蔽,直到正在工作的ISR重新使能该中断。 当中断请求发生在一个不可中断的操作期间,那么等待时间更长。 例如,一个循环程序环、一条多周期指令的执行,或处于一个等待状态的访问期间。
(3)ISR等待时间 是指为了响应产生应答的中断事件,
而到达特定中断服务程序(SlSR)所花费的时间。
该时间长短根据用户响应中断后保存上下文的不同而有所变化。
2.8 CPU中断寄存器
CPU中断寄存器包括,(1)中断标志寄存器(IFR);(2)
中断屏蔽寄存器(IMR)。
2.8.1 CPU中断标志寄存器 (IFR)
IFR包含所有可屏蔽中断的标志位,用于识别和清除挂号的中断。当一个可屏蔽中断被请求时,中断标志寄存器的相应标志位被置1。如果对应中断屏蔽寄存器中的中断使能位也为1,则该中断请求被送到CPU,并设置IFR的相应位,此时该中断正被挂号或等待响应。
读取IFR可以识别挂号的中断,向相应的IFR位写1将清除已挂号的中断。
该寄存器映射到 数据存储器空间为 0006h。
位15-6,保留位。
位5-0,分别为INT6-INT1的中断标志位。
0:无中断挂号,
1:表示有INTn的中断挂号。
2.8.2 CPU中断屏蔽寄存器(IMR)
IMR中包含所有中断级(INT1-INT6)的屏蔽位,读IMR
可以识别出已屏蔽或使能的中断级,而向IMR中写,
则可屏蔽中断或使能中断。为了使能中断,应设置相应的IMR位为1,而屏蔽中断时只需将相应的IMR
位设为0。
中断屏蔽寄存器 - IMR,映射到 数据存储器空间0004h 。
位15-6,保留位。
位5-0,分别为INT6-INT1中断的屏蔽位。
0,中断INTn被屏蔽。
1,中断INTn被使能。
2.9 外设中断寄存器外设中断寄存器包括如下几种:
z 外设中断向量寄存器(PIVR)
z 外设中断请求寄存器0(PIRQ0)
z 外设中断请求寄存器1(PIRQ1)
z 外设中断请求寄存器2(PIRQ2)
z 外设中断应答寄存器0(PIACKR0)
z 外设中断应答寄存器1(PIACKR1)
z 外设中断应答寄存器2(PIACKR2)
与用户无关,
编程忽略外设中断请求寄存器 和 外设中断应答寄存器 都属于外设中断扩展模块用来向CPU产生INT1-INT6中断请求的内部寄存器。这些 寄存器主要用于测试目的,而不用于用户应用程序,在编程时可忽略。
2.10 复位和无效地址检测
2.10.1 复位
LF2407 DSP器件有两个复位源:
一个为外部复位引脚
一个看门狗定时器溢出
2.10.2 无效地址检测无效地址是不可执行的地址,
例如:外设存储器映射中的 保留寄存器 。
一旦检测到对无效地址的访问,就将系统控制和状态寄存器1(SCSRl)中的 无效地址标志位 (ILLADR)置1。
无效地址检测会产生一个不可屏蔽中断(NMI) 。无效地址标志位(ILLADR)在无效地址条件发生之后被置
1,并一直保持,直到软件将其清除。
通常产生无效地址访问的 原因是不正确的数据页面初始化 。
2.11 外部中断控制寄存器控制和监视 XINT1和 XINT2引脚状态的两个外部中断控制寄存器为 XINTlCR和 XINT2CR。在LF2407 中,
XINTl和XINT2引脚必须被拉为低电平 至少6个 (或12
个) CLKOUT周期 才能被CPU内核识别。
1,外部中断1控制寄存器-XINT1CR,映射到数据存储器空间 7070h。
位15,XINT1标志位 。 表示在XINTl引脚上是否检测到一个所选择的中断跳变,无论中断是否使能,该位都可以被置位。
当相应的中断被应答时,该位被自动清0。通过软件向该位写1(写0无效)或者器件复位时,这位也被清0
0-没有检测到跳变
1-检测到跳变位14-3,保留位位2,XINTl极性。 该读/写位决定了是在XINTl引脚信号的上升沿还是下降沿产生中断。
0-在下降沿产生中断
1-在上升沿产生中断位1,XINTl优先级。该读/写位 决定哪一个中断优先级被请求 。
0-高优先级
1-低优先级位0,XINTl使能位。该读/写位可使能或屏蔽外部中断XINTl
0-屏蔽中断
1-使能中断
2.外部中断2控制寄存器-XINT2CR,映射到数据存储器空间 7071h。
位15,XINT2标志位 。该位表示 在XINT2引脚上是否检测到一个所选择的中断跳变,无论中断是否使能,
该位都可以被置1。当相应的中断被应答时,该位被自动清0。
0-没有检测到跳变
1-检测到跳变软件向该位写1 (写0无效)或 器件复位 时,该位也被清0
位14-3,保留位。
位2,XINT2极性 。该读/写位决定了是在XINT2引脚信号的上升沿还是下降沿产生中断。
0-在下降沿产生中断
1-在上升沿产生中断位1,XINT2优先级 。
0-高优先级
1-低优先级位0,XINT2使能位 。
0-屏蔽中断
1-使能中断第3章 存储器及I/O空间
C240X芯片有16位地址线,可以访问3个独立的地址空间,总计 192K字。
程序存储器,64K字
数据存储器,64K字
I/O空间,64K字,包含片内外设寄存器
LC:无FLASH
LF:有FLASH,
片内:单端口SARAM(共2K字)
双端口DARAM(B0块、B1块、B2块共544字)
改进的哈佛结构,通过 3组并行地址总线 访问3个空间。
(1)程序地址总线(PAB)
(2)数据读地址总线(DRAB)
(3)数据写地址总线(DWAB)
可同时访问程序和数据空间,一个周期内,CALU可执行多达3次的并行存储器操作。
TMSC206:片内32K Falsh,B0-256个;B1-256个;
B2-32个 SARAM 4K字
TMSC240:片内16K Falsh,B0-256个;B1-256个;
B2-32个
TMSLF2407A(片内):
32K字 Falsh,
DARAM(双口RAM)为544个字:B0-256个;B1-256个;
B2-32个。
SARAM(单口RAM)2K字。
3.1 片内存储器
3.1.1 双端口RAM(DARAM)
544个字,分为三块:B0、B1、B2。
B0作程序存储器还是作数据存储器,由寄存器ST1的
D12位 CNF 来决定:
CNF=1,B0映射到程序存储器空间
CNF=0,B0映射到数据存储器空间
DARAM,双访问随机读/写 存储器,在单个机器周期内可被访问2次:
CPU在时钟的主相写入DAR AM;在时钟的从相从
DARAM读出数据;大大的提高了运行速度。
3.1.2 单端口RAM(SARAM)
2K字单访问随机读/写存储器,在单个机器周期内可被访问1次。
例如,一条指令要将A的值保存,且装载一个新值到A
在SARAM中需两个时钟周期,而在DARAM中需一个时钟周期,
3.1.3 FLASH程序存储器
LF2407:16K字,映射到程序存储空间。有片内程序存储器和片外程序存储器之分。
MP/MC
*
=0,选择片内Falsh存储器
MP/MC
*
=1,选择片外程序存储器,从片外程序存储器开始执行程序。
1.FLASH程序存储器特点:
(1)运行在3.3V电压模式;
(2)编程需在VCCP上加有5V电压;
(3)有多个向量,被保护,防止被擦除。
(4)编程由CPU实现。
2.FLASH控制方式寄存器(FCMR)
占用I/O空间 FF0Fh 。可对FLASH阵列编程。
3.访问FLASH控制寄存器内有4个寄存器,控制在FLASH中的操作。
3.2 程序存储器存放指令码、表格、常量寻址空间为64K字范围。
当某一片外地址被访问时,会自动产生控制信号:PS
*

DS
*
、STRB
*
两个因素决定程序存储器的配置
(1)CNF位
CNF=1,B0映射到程序存储器空间
CNF=0,B0映射到数据存储器空间
(2)MP/MC
*

MP/MC
*
=0,选择片内Falsh存储器0000h-7FFFh
MP/MC
*
=1,选择片外程序存储器0000h-7FFFh开始执行程序。
程序存储器空间
3.3 数据存储器
1.数据存储器映射三块:B0、B1、B2。
B0:256个字(可设置为程序/数据存储器)
B1、B2 块:只能配置为数据存储器数据存储器映射图如下图所示。
数据存储器空间
2.数据存储器页面在直接寻址中,64K空间分为512页,具体页由状态寄存器 ST0中的 9位数据页 指针(DP)的值确定。
因此,在使用 直接寻址 指令中,必须指定数据页和 7位偏移量
9位 数据页指针(DP)+ 7位 偏移量
3.第0页数据地址映射第0页(00h-7Fh)包含一些重要的寄存器:
0004h:中断屏蔽寄存器IMR。
0006h:中断标志寄存器IFR。
002Bh-002Fh:用作测试和仿真
0060h-007Fh:B2块,32个字
3.4 I/O空间可寻址64K字,I/O空间映射如下。
0000h-FEFFh,外部I/O空间
FF00h-FF0Eh,保留
FF0Fh,FLASH控制方式寄存器
FF10h-FFFEh,保留
FFFFh,等待状态发生寄存器对I/O访问和对存储器访问可用IS
*
信号作为标志。
用IN 或 OUT指令,此时,IS
*
有效,作外部I/O片选。
访问外部I/O,与外部数据、程序存储器 复用 相同的地址和数据总线。
数据总线宽度16位,若用8位外设,可使用高8位数据线,也可使用低8位数据线。
访问片内I/O时,信号IS
*
和STRB
*
变成无效。
IN DAT7,0AFEEh; 从端口AFEEh读数据到DAT7寄存器
OUT DAT7,0CFEFh; DAT7寄存器的内容输出到 CEEFh;端口寄存器
IN DAT7,0FFFFh ; 将数据从等待状态发生器读入
OUT DAT7,0FFFFh ; 将数据输出到等待状态发生器
3.5 外部存储器接口选通程序空间 64K PS
*
有效数据空间 64K DS
*
有效
I/O空间 64K IS
*
有效外部存储器接口信号:
A0-A15:地址线;
D0-D15:数据线;
DS*:数据空间选通;
PS*:程序空间选通;
IS*,I/O空间选通;
STB*,外部空间选通;
R/W
*
:读写选通,指明与外围器件信号的传送方向;
W/R
*
/IOPC0:读选通;
WE
*
:写选通;
MP/MC
*
:微处理器/微控制器选择
VIS_OE
*
:可视输出可能;可视输出的方式下,外部数据总线为输出时,该引脚有效,可用作外部编码逻辑,以防止数据总线冲突。
ENA_144,1-使能外部接口信号; 0-无外部存储器。
3.6 等待状态发生器如果采用慢速的RAM、外设芯片,须考虑与C240X芯片的速度匹配问题,需使用READY 信号、片外延迟电路或内部等待状态产生器来添加等待状态。
3.6.1 用READY信号产生等待状态外设通过使READY信号变为高电平,表示已准备好。若外设未准备好,则需保持READY为低。
READY为低,LF240X等待一个CLKOUT周期。
再次检查READY,若READY信号没有被使用,LF240X将在外部访问时把READY拉高。
READY脚可用来产生任意数目的等待状态。
3.6.2 用等待状态发生器产生等待状态为控制等待状态发生器,必须写映射IO空间的FFFFh
等待状态控制寄存器。
格式如下:
位15 ~11:保留位10 ~9,BVIS,总线可见模式,提供了跟踪内部总线活动的方式。
00-总线可见模式关(降低功耗和噪声)
01-总线可见模式开;
10-数据到地址总线输出到外部地址总线;
数据到数据总线输出到外部数据总线;
11-程序到地址总线输出到外部地址总线;
数据到数据总线输出到外部数据总线。
位8 ~6:决定了等待状态(0 ~7)的数目。用于读片外
I/O空间 。复位为111,为 片外I/O空间 的读写设定 7个 等待状态。
位5 ~3:决定了等待状态(0 ~7)的数目。用于读 片外数据空间 。复位为111,为 片外数据空间 的读写设定 7个 等待状态。
位2 ~0:决定程序空间等待状态(0 ~7)的数目。复位为111,设定 程序空间7个 等待状态。
3.7 外部存储器接口程序存储器64K寻址空间。
当 访问片内程序存储器 时,PS
*
和STRB
*
为无效。
仅当访问 片外程序存储器 时,PS
*
、STRB
*
和数据总线与地址总线才有效。
可选用EPROM、EEPROM、Falsh作为片外程序存储器。
选用这些芯片时,注意它们的运行速度 问题。
与外部数据存储器的接口电路 。
2407外扩16K数据存储器。
关键是控制线的连接。
DSP2407 数据存储器
DS
*
CS
*
W/R
*
OE
*
WE
*
WE
*
如外扩 16K程序存储器,只需将 WE
*
信号去掉即可。
A0-A13
A0-A13
A0-A13
D0-D15
D0-D7
D0-D7
D0-D7
D8-D15
OE*
OE*
CS*
CS*
PS*
W/R*
WE*
16K*8 RAM
C2407A
TMS320
图4-4 外扩16K字程序存储器
WE*
WE*
16K*8 RAM
第4章 时钟和低功耗模式片内集成有PLL(锁相环)电路。
外接的 基准晶体+PLL (锁相环)电路共同组成系统时钟电路。
有关引脚:
XTAL1/CLKIN,外接的基准晶体到片内振荡器输入引脚;
如使用外部振荡器,外部振荡器的输出必须接该脚。
XTAL2,片内PLL振荡器输出引脚;
CLKOUT/IOPE0,该脚可作为 时钟输出 或 通用IO脚 ; 可用来输出CPU时钟或看门狗定时器时钟 ;由系统控制状态寄存器(SCSR1)中的位14决定。
当不作时钟输出时,就可作通用I/O。
复位时,本脚配置为CLKOUT 。
4.1 锁相环(PLL)
PLL支持从0.5 ~4倍输入时钟频率的乘法因子。
PLL还可控制低功耗操作。
PLL的倍率由系统控制状态寄存器(SCSR1)的位11 ~9
来决定。如下表所示。
复位时,倍率默认为 0.5 。
0.5111
0.57011
0.66101
0.8001
1110
1.33010
2100
4000
倍频系数CLKPS0CLKPS1CLKPS2
表 PLL倍率选择
1.锁相环的时钟模块电路时钟模块电路如图所示。
XTAL2
XTAL1
XTAL
OSC
PLLF1
PLLF2
PLL
PLL倍率选择
CLKOUT
F
IN
R1
C2
Cb1
Cb2
C1
两种时钟方式:
(1)内部时钟,只需外接晶体振荡器
(2)外部时钟,把外部时钟接至 XTAL1/CLKIN脚
2,外部滤波器电路回路用来 抑制信号的抖动和电磁干扰 。
电路中存在大量噪声,通过实验来确定滤波器回路元件。
fc=10MHz
VDD
VSS
PLLVCCA
时钟模块
PLLF1
PLLF2
R1
C2
C1
可选的低通滤波回路滤波器回路元件
3,片内时钟
XTAL2
XTAL1
Cb1
Cb2
内部振荡电路被使能
4,外部振荡器时钟
XTAL2
XTAL1
空置外部时钟信号内部振荡器无效
5,PLL旁路方式可对片内PLL实现旁路,通过复位时拉低TRST、TMS和
TMS引脚来实现。
此时改变系统时钟的唯一方法是改变输入频率,系统的时钟与外输入时钟相同。此时,不需滤波器元件。
使用片内时钟,CLKIN的 时钟频率4 ~20MHz
使用片外时钟,CLKIN的 时钟频率4 ~30MHz
(对2407A为40MHz)
4.2 看门狗定时器时钟当时钟 CPUCLK=40MHz,WDCLK来自于:
WDCLK=CLKOUT/512=78125Hz
WDCLK是由看门狗定时器的外围器件生成的。
当时钟
4.3 低功耗模式有一 IDLE(睡眠)指令,可关闭CPU时钟,节约能耗。
当收到一个中断请求或者复位时,CPU会退出睡眠状态。
4.3.1 时钟域有 两个时钟域,
(1) CPU时钟域,包含大部分CPU逻辑的时钟;
(2) 系统时钟域,包含外设时钟(来自CLKOUT分频)
和用于CPU中断逻辑的时钟。
IDLE1模式,当CPU进入睡眠状态,CPU时钟域停止,
系统时钟域继续运行。
IDLE2模式,当CPU进入睡眠状态,CPU时钟域和系统时钟域均停止,进一步降低功耗。
HALT模式,振荡器(即输入到PLL的时钟)和WDCLK被关闭。
当执行IDLE指令时,系统控制状态寄存器(SCSR1)的
13、12位指明进入哪一种低功耗模式。
0 0 CPU进入 IDLE1模式
0 1 CPU进入 IDLE2模式
1 x CPU进入 HALT模式
4.3.2 退出低功耗模式
1.复位复位信号可使器件退出IDLE模式。
2.外部中断外部中断xINTx可使器件退出低功耗模式,但不能退出
HALT模式。
3.唤醒中断有些外设具有启动器件时钟的能力,然后产生一个中断去响应一定的外部事件。
4.3.3 片内闪存断电进入HALT模式之前,片内闪存可以被断电,会使电流消耗到最低。
第5章 数字I/O
数字I/O脚有 专用 和 复用 。
数字I/O脚的功能通过 9个 16位控制寄存器 来控制。
控制寄存器分为 两类,
(1)I/O复用控制寄存器(MCR X),来选择I/O脚是外设功能还是I/O功能。
(2)数据方向控制寄存器(P XDATDIR):控制双向I/O
脚的数据和数据方向。
注意,数字I/O脚是通过 映射在数据空间的控制寄存器来控制的,与器件的I/O空间无任何关系。
240X/240XA多达 41只数字I/O脚,多数具有复用功能。
5.1 数字I/O寄存器简介
I/O复用引脚见下图。
表5-1列出I/O模块中有用的寄存器,地址为:7090h —
709Fh。
注意,映射到数据存储器空间。
当复用I/O脚被配置为 外设功能 或 I/O时,引脚的状态可通过读I/O数据寄存器来获取。
外设功能引脚上拉或下拉
(内部)
1-外设功能
I/O方向位
01
0-输入
I/O口数据位读/写
1-输出输出输入开关控制位
0-I/O功能
I/O端口F数据和方向寄存器PFDATDIR
7096h
I/O端口E数据和方向寄存器PEDATDIR
7095h
I/O端口D数据和方向寄存器PDDATDIR
709Eh
I/O端口C数据和方向寄存器PCDATDIR
709Ch
I/O端口B数据和方向寄存器PBDATDIR
709Ah
I/O端口A数据和方向寄存器PADATDIR
7098h
MUX控制寄存器CMCRC I/O
7094h
MUX控制寄存器BMCRB I/O
7092h
MUX控制寄存器AMCRA I/O
7090h
功能寄存器地址表5-1 数字I/O控制寄存器
5.2 I/O 端口复用控制寄存器
3个I/O端口复用控制寄存器,MCRA,MCRB、
MCRC。
( 1) I/O端口复用控制寄存器 A 地址,7090h
表5-2 I/O端口复用控制寄存器 A的配置位 外设功能 通用I/O
MCRA.0 SCITXD IOPA0
MCRA.1 SCIRXD IOPA1
位 外设功能 通用I/O
MCRA.2 XINT1 IOPA2
MCRA.3 CAP1/QEP1 IOPA3
MCRA.4 CAP2/QEP2 IOPA4
MCRA.5 CAP3 IOPA5
MCRA.6 PWM1 IOPA6
MCRA.7 PWM2 IOPA7
MCRA.8 PWM3 IOPB0
MCRA.9 PWM3 IOPB1
MCRA.10 PWM3 IOPB2
MCRA.11 PWM4 IOPB3
MCRA.12 T1PWM/T1CMP IOPB4
MCRA.13 T2PWM/T2CMP IOPB5
MCRA.14 TDIRA IOPB6
MCRA.15 TDIRB IOPB7
表5-2 I/O端口复用控制寄存器 B的配置位 外设功能 通用I/O
MCRB.0 W/R* IOPC0
MCRB.1 BIO* IOPC1
MCRB.2 SPISIMO IOPC2
MCRB.3 SPISOMI IOPC3
MCRB.4 SPICLK IOPC4
MCRB.5 SPISTE* IOPC5
MCRB.6 CANTX IOPC6
MCRB.7 CANRX IOPC7
(2)I/O端口复用控制寄存器B 地址,7092h
位 外设功能 通用I/O
MCRB.8 XINT2/ADCSOC IOPD0
MCRB.9 EMU0 保留
MCRB.10 EMU1 保留
MCRB.11 TCK 保留
MCRB.12 TDI 保留
MCRB.13 TDO 保留
MCRB.14 TMS 保留
MCRB.15 TMS2 保留表5-3 I/O端口复用控制寄存器 C的配置位 外设功能 通用I/O
MCRC.0 CLKOUT IOPE0
MCRC.1 PWM7 IOPE1
MCRC.2 PWM8 IOPE2
MCRC.3 PWM9 IOPE3
MCRC.4 PWM10 IOPE4
(3) I/O端口复用控制寄存器C 地址:7094h
位 外设功能 通用I/O
MCRC.5 PWM11 IOPE5
MCRC.6 PWM12 IOPE6
MCRC.7 CAP4/QEP3 IOPE7
MCRC.8 CAP5/QEP4 IOPF0
MCRC.9 CAP6 IOPF1
MCRC.10 T3PWM/T3CMP IOPF2
MCRC.11 T4PWM/T4CMP IOPF3
MCRC.12 TDIRB IOPF4
MCRC.13 TCLKINB IOPF5
MCRC.14 保留 IOPF6
MCRC.15 保留 IOPF7
5.3 数据和方向控制寄存器
6个 数据和方向控制寄存器(P XDATDIR),包含两个功能位。
(1) I/O方向位如果引脚被选择了通用I/O,方向位决定了是输入(0)
还是输出(1)。
(2) I/O数据位如果引脚被选择了通用I/O,当方向选为 输入,则可从该位上 读取 数据,当方向选为 输出,则可向该位 写入 数据 。
如I/O端口被选择作 通用I/O 引脚,数据和方向控制寄存器可以控制数据和I/O引脚的数据方向。
如I/O端口被选择作 外设 功能时,数据和方向控制寄存器的设置对相应的引脚无影响。
(1)I/O端口A数据和方向控制寄存器(PADATDIR),
地址:7098h
位15-8,AnDIR PA7-PA0的数据方向
0:相应引脚配置为 输入
1:相应引脚配置为 输出位7-0,IOPA7-IOPA0
如果AnDIR=0,引脚配置为 输入
0-相应引脚的电平 读为低电平
1-相应引脚的电平 读为高电平如果AnDIR=1,引脚配置为 输出
0-设置相应引脚,使其输出信号为低电平时有效
1-设置相应引脚,使其输出信号为高电平时有效如果I/O端口用作通用I/O,则必须对数据和方向寄存器进行 初始化设置,为输入还是输出。
(2) I/O端口B数据和方向控制寄存器(PBDATDIR),
地址:709Ah
(3) I/O端口C数据和方向控制寄存器(PCDATDIR),
地址:709Ch
(4) I/O端口D数据和方向控制寄存器(PDDATDIR),
地址:709Eh
(5) I/O端口E数据和方向控制寄存器(PEDATDIR),
地址:7095h
(6) I/O端口F数据和方向控制寄存器(PFDATDIR),
地址:7096h
5.4 数字I/O端口配置实例配置,选择I/O引脚的功能,且设置I/O引脚的方向。
I/O配置实例程序:
MCRA,set7090h ;可将这些映射语句放于240x.h文件中
PADATDIR,set7098h ;可将这些映射语句放于240x.h文件中
PBDATDIR,set709Ah ;可将这些映射语句放于240x.h文件中
LDP #0E1h ;指向相应的数据页面
LACC #0h ;设置MCRA所有位均为0
SACL MCRA ;配置为I/O脚,选择引脚IOPA0-;IOPA7和IOPB0-IOPB7
SACL PADATDIR ;引脚IOPA0-IOPA7配置为输入,低有效
LACC #0F00h ;引脚IOPB7-IOPB4配置为输入
SACL PBDATDIR ;引脚IOPB3-IOPB0配置为输出
LACC PBDATDIR ;读取引脚IOPB7-IOPB4输入状态
AND #00F0h ;A为输入状态上为一个数字I/O的实际配置程序,对于每个寄存器的定义已介绍,对于所有数字I/O配置定义的参考表,见P81。
5.5 数字I/O应用实例
5.5.1 使用数字I/O查询输入信号接口电路如下图所示。
在I/O初始化时,需设置引脚为I/O,且需要选择信号方向。程序见参考书。
5.5.2 使用数字I/O输出信号本例为使用I/O端口输出4个信号,分别连接到4个LED。
输出脚与LED间接一 触发器SN74HCT273,对LED驱动。
使用:PWM3/IOPB0、PWM4/IOPB1、PWM5/IOPB2、
PWM6/IOPB3作为输出。
PWM7/IOPE1作为 SN74HCT273的选通信号 。
如何实现对4个LED的循环驱动? 即DS0 →DS1→DS2
→DS2,参考程序见P86。
第6章 事件管理器(EV)
事件管理器(EV)模块 为控制系统(运动控制和电机控制)的开发提供了强大功能。
6.1 事件管理器(EV)模块基本知识
LF2407A 包括 两个 事件管理器模块,EVA和 EVB。
每个事件管理器模块包括,通用定时器(GP)、比较单元、捕获单元以及两个正交编码脉冲输入电路(QEP)。
EVA和EVB功能相同,只是名称不同 。
6.1.1 事件管理器结构事件管理器EVA结构框图如图6-1所示。
图6-1
EVA
结构图
EV控制寄存器和控制逻辑
GP定时器 1比较捕获单元
SVPWM
状态机输出逻辑预定标
GP定时器 1
输出逻辑全比较单元
MUX
TDIRA
T1CMP
T1PWM
ADC转换开始
T1CON[4,5]
死区带宽单元
QEP
电路
T1CON[8,9,10]
TCLKINA
CLKOUT
PWM1
...
PWM6
GP定时器 2比较输出逻辑预定标
GP定时器 2
T2CMP
T2PWM
T2CON[4,5]
T2CON[8,9,10]
TCLKINA
CLKOUT
TDIRA
CAP3
CAP1/QEP1
CAP2/QEP2
CAPCONA[14,13]
DIR
CLOCK
6.1.2 事件管理器引脚事件管理器A和事件管理器B的引脚描述见下页表。
事件管理器模块中所有 输入跳变脉冲宽度 至少保持两个CPU时钟周期 才能被识别。
6.1.3 功率驱动保护中断
PDPINTx
*
可为 功率变换 和 电动机驱动 等系统操作提供安全保证。
PDPINTx
*
可以 用于向电动机的监视程序提供 过电压,
过电流 和 异常的温升 等异常信息 。如果PDPINTx
*
中断被允许,则在PDPINTx
*
引脚电平变低后,则驱动所有PWM输出引脚为高阻态,一个中断将被生成。
EVB定时器的外部时钟输入TCLKINB
EVA定时器的外部时钟输入TCLKINA
EVB定时器的计数方向输入TDIRB
EVA定时器的计数方向输入TDIRA
定时器4比较/PWM输出T4CMP/T4PWM
定时器 2比较 /PWM输出T2CMP/T2PWM
定时器3比较/PWM输出T3CMP/T3PWM
定时器 1比较 /PWM输出T1CMP/T1PWM
比较单元6输出2PWM12
比较单元 3输出 2PWM6
比较单元6输出1PWM11
比较单元 3输出 1PWM5
比较单元5输出2PWM10
比较单元 2输出 2PWM4
比较单元5输出1PWM9
比较单元 2输出 1PWM3
比较单元4输出2PWM8
比较单元 1输出 2PWM2
比较单元4输出1PWM7
比较单元 1输出 1PWM1
捕获单元6输入CAP6
捕获单元 3输入CAP3
捕获单元5输入,QEP电路输入4
CAP5/QEP4
捕获单元 2输入,QEP电路输入 2
CAP2/QEP2
捕获单元4输入,QEP电路输入3
CAP4/QEP3
捕获单元 1输入,QEP电路输入 1
CAP1/QEP1
描述引脚名称描述引脚名称事件管理器 B的引脚事件管理器 A的引脚事件管理器的引脚描述
PDPINTx
*
中断在复位后被使能。
如果PDPINTx
*
中断被禁止,则驱动PWM输出到高阻态的动作也被禁止。
6.1.4 EV中断事件管理器中断总共分 三组,每组均分配一个CPU中断
(INT2,3或4) 。
因为每组中断 均有多个中断源,所以CPU中断请求通过外设中断扩展控制器(PIE)模块来处理。
中断请求有如下几个响应阶段:
(1)中断源 。 如果 外设中断发生,EVxIFRA、EVxIFRB、
或EVxIFRC(x=A或B)相应的标志位被置1。
(2)中断使能 。事件管理器中断可以分别由寄存器
EVxIMRA、EVxIMRB或EVxIMRC(x=A或B)来 使能 或 禁止 。
(3)PIE请求 。如果中断标志位和中断屏蔽位被置1,那么外设会向PIE模块发送一个外设中断请求。
(4)CPU响应 。CPU接收到中断后,IFR相应的位被置1,
并响应中断。CPU响应中断后,中断响应被软件控制。
(5)PIE响应 。PIE使用中断向量更新PIVR寄存器。
(6)中断软件,中断软件有两级响应,包括 GISR和 SISR。
6.2 事件管理寄存器地址下面四个表列出EVA所有寄存器的地址,EVB的类似。
EVA定时器寄存器地址定时器 2的控制寄存器
T2CON7408h
定时器 2的周期寄存器
T2PR7407h
定时器 2的比较寄存器
T2CMPR7406h
定时器 2定时器 2的计数寄存器
T2CNT7405h
定时器 1的控制寄存器
T1CON7404h
定时器 1的周期寄存器
T1PR7403h
定时器 1的比较寄存器
T1CMPR7402h
定时器 1定时器 1的计数寄存器
T1CNT7401h
EVA定时器控制寄存器 A
GPTCONA7400h
说明名称寄存器地址
EVA比较控制寄存器地址比较寄存器3CMPR37419h
比较寄存器2CMPR27418h
比较寄存器1CMPR17417h
死区时间控制寄存器ADBTCONA7415h
比较动作控制寄存器AACTRA7413h
比较控制寄存器ACOMCONA7411h
名称寄存器地址
EVA捕获控制寄存器地址
FIFO堆栈的底部寄存器,允许读取最近的捕获值
CAP1FBOT7427h
CAP2FBOT7428h
CAP3FBOT7429h
两级深度的捕获FIFO堆栈3CAP3FIFO7425h
两级深度的捕获FIFO堆栈2CAP2FIFO7424h
两级深度的捕获FIFO堆栈1CAP1FIFO7423h
捕获FIFO状态寄存器ACAPFIFOA7422h
捕获控制寄存器ACAPCONA7420h
名称寄存器地址
EVA中断寄存器地址
EVA的中断标志寄存器CEVAIFRC7431h
EVA的中断标志寄存器BEVAIFRB7430h
EVA的中断标志寄存器AEVAIFRA742Fh
EVA的中断屏蔽寄存器CEVAIMRC742Eh
EVA的中断屏蔽寄存器BEVAIMRB742Dh
EVA的中断屏蔽寄存器AEVAIMRA742Ch
名称寄存器地址
6.3 通用定时器
6.3.1 通用定时器概述每个事件管理模块有 两个 通用定时器(GP),这些定时器可以为 下列应用 提供独立的时间基准,
(1)控制系统中采样周期产生。
(2)为QEP电路和捕获单元的操作提供时间基准。
(3)为比较单元和相应的PWM电路操作提供时间基准。
定时器结构如图6-3所示,由图可知,每个定时器包括:
(1)一个可读写的 16位双向计数器的寄存器 TxCNT,
它存储了计数器的当前值,并根据计数方向进行增计数或减计数。
(2)一个可读写的16位定时器 比较寄存器 TxCMPR。
(3)一个可读写的16位定时器 周期寄存器 TxPR。
(4)一个可读写的16位定时器 控制寄存器 TxCON。
(5)时钟预定标器。
(6)控制和中断逻辑 。
(7)一个GP定时器 比较输出引脚,TxCMP 。
(8)输出条件逻辑。
(9)其他全局控制寄存器
TxPWM
图6-3 GP定时器结构框图
TxPR周期寄存器(映像)
TyPR周期寄存器(映像)
TxCON
GPTx控制寄存器控制逻辑比较逻辑
GPTCONA/B
GP定时器控制寄存器同步 /异步波形发生器
TxCMPR
比较寄存器
(映像)
输出逻辑
TxCNT GP定时器计数器
MUX
内部 CPU时钟
TDIRA/B
TCLKINA/B
ADC转换启动信号中断标志
TnCON[0]
当 x=2时,y=1,并且 n=2;当 x=4时,y=3,并且 n=4;
通用定时器的 输入 包括:
z 内部CPU时钟。
z 外部时钟TCLKINA/B,最高频率是CPU时钟频率的1/
4。
z 方向输入 TDIRA/B,控制通用定时器增/减计数。
z 复位信号RESET。
通用定时器的 输出 包括:
z 通用定时器比较输出TxCMP(x=1、2、3、4)。
z 到ADC模块的ADC转换启动信号。
z自身的比较逻辑和比较单元的下溢、上溢、比较匹配和周期匹配信号。
z 计数方向指示位。
6.3.2 通用定时器计数操作每个GP定时器有 四种 可选的操作模式:
(1) 停止/保持 模式
(2) 连续递增计数 模式
(3) 定向增/减计数 模式
(4) 连续增/减计数 模式相应的定时器 控制寄存器TxCON 中的位模式决定了通用定时器的操作模式。
1.停止/保持模式此种模式,通用定时器的 操作停止并保持其当前状态,
定时器的计数器、比较输出和预定标计数器都 保持不变 。
2.连续递增计数模式此种模式,通用定时器将按照已定标的输入时钟计数,
直到定时器 计数器的值和周期寄存器的值匹配 为止。
产生 周期匹配 之后在下一个输入时钟的上升沿,定时器复位为0,开始另一个计数周期。
在产生周期匹配的下一个CPU时钟周期后,周期中断被置位,产生一个中断请求,也可作ADC转换启动信号 。
定时器变成0的一个CPU时钟周期之后,定时器的下溢中断标志被置位,也可向发出一个ADC启动信号。
定时器计数到FFFFh后,定时器的上溢标志在一个CPU
时钟周期之后被置位。
定时器初值可以是0000h-FFFFh之间的任何值。
如果初值大于周期寄存器的值时,定时器将计数到
FFFFh后复位为0,然后从0开始继续计数。
如果初值等于周期寄存器的值时,周期中断标志被置位,定时器复位为0,下溢中断标志被置位,然后从
0开始继续计数。
本工作模式的工作示意如图6-4所示。
本模式特别适于 边沿触发或异步PWM波形产生,也适于电机和运动系统的采样周期 。
图 6- 4
3.定向的增/减计数模式此种模式,定时器将根据TDIRA/B引脚的输入,对定标的时钟进行 递增或递减 计数。如图6-5所示。
周期、下溢、上溢中断标志位、中断以及相应的事件,
产生,与连续递增计数模式一样 。
定时器2和4的本模式可 用于正交编码脉冲电路,在这种情况下,正交编码脉冲电路为定时器2和4提供计数时钟和方向,也可用于运动/电机控制和电力电子设备应用中的外部事件定时 。
4.连续增/减计数模式此种模式与定向的增/减计数模式一样,但是在本模式下,引脚TDIRA/B 的状态对计数的方向没有影响。
定时器的计数方向仅在 定时器的值达到周期寄存器的值 时(或FFFFh,如果初始定时器的值大于周期寄存器的值),才从递增计数变为减计数。 定时器的计数方向仅当计数器的值为0时才从减计数变为增计数。
如图6-6所示。
6.3.3 通用定时器比较操作
GP定时器的值连续地与相应的比较寄存器的值比较,
当 两个值相等 时,就会发生 比较匹配,可通过对
TxCON[1] 置1来使能比较操作。比较操作使能后,
当发生 比较匹配 时,会发生以下情况,
(1) 比较中断标志 置1 。
(2)根据GPTCONA/B寄存器相应位的配置情况,相应的 PWM输出将发生跳变 。
(3)如果用于启动ADC,则 产生一个ADC启动信号 。
1.PWM输出转换
PWM输出的转换由一个非对称和对称的波形发生器和相应的输出逻辑控制,并且依赖于以下条件:
z GPTCONA/B寄存器中相应位的定义。
z 定时器所处的计数模式。
z 在连续增/减计数模式下的计数方向。
2.非对称和对称波形发生器非对称和对称波形发生器依据通用定时器所处计数模式,产生一个非对称和对称的PWM波形 输出。
3.非对称波形的发生在 连续增计数 模式时,通用定时器会产生一个 非对称波形 的PWM脉冲,如图6-7所示。
4.对称波形的发生在 连续增/减计数 模式时,通用定时器会产生 对称 波形,如图6-8所示。
5.输出逻辑输出逻辑可进一步调节波形发生器的输出,以生成最终的PWM波形输出,来 控制各种不同类型的功率设备 。
PWM输出可通过 配置GPTCONA/B寄存器 的相应位 来设置 高电平有效、低电平有效、强制高电平或强制低电平 。
当PWM输出设置为高电平有效时,它的极性与波形发生器的输出极性相同。
当PWM输出设置为低电平有效时,极性相反。
GPTCONA/B寄存器的相应位设定后,PWM输出也可被强制为高电平或低电平。
6.3.4 定时器控制寄存器
1.单个通用定时器控制寄存器TxCON
单个通用定时器的控制寄存器TxCON(x=1,2,3或4)
决定一个定时器的操作模式,每个定时器都可对其独立配置。
TxCON(x=1,2,3或4)的 映射地址 为,7404h(T1CON)、
7408h(T2CON),7504h(T3CON)和7508h(T4CON)。
TxCON(x=1,2,3或4)各位的定义如下:
位15-14 Free,Soft。 仿真控制位
00 仿真挂起时立即停止
01 仿真挂起时当前定时周期结束后停止
10 操作不受仿真挂起的影响
11 操作不受仿真挂起的影响位13 保留。
位12-11 TMODE1,TMODE0。 4种计数模式选择
00 停止/保持
01 连续增/减计数模式
10 连续增计数模式
11 定向的增/减计数模式位10-8 TPS2一TPS0。 输入时钟定标器
000 x/1 100 x/16
001 x/2 101 x/32
010 x/4 110 x/64
011 x/8 111 x/128
x=CPU时钟频率位7 T2SWTl
0,使用自身的使能位 (TENABLE)
1,不用自身的使能位,使用T1CON(EVA)或
T3CON(EVB)的使能位来使能或禁止操作,
位6 TENABLE 定时器使能与禁止
0 禁止定时器操作。也就是说,使定时器保持并且使预定标计数器复位
1 允许定时器操作位5-4 TCLKS1,TCLKSO,时钟源选择 。
00 内部时钟
01 外部时钟
10 保留
11 正交编码脉冲电路,只适用于T2CON和T4CON
位3-2 TCLD1,TCLD0,定时器比较(有效)寄存器重载条件 。
00 计数器的值为0时重载
01 计数器的值为0或等于周期寄存器的值时重载
10 立即
11 保留位1 TECMPR,定时器比较使能与禁止
0 禁止定时器比较操作
1 使能定时器比较操作位0 SELT1PR,周期寄存器选择
0 使用自己的周期寄存器
1 使用T1PR(EVA)或T3PR(EVB)作周期寄存器而忽略自己的周期寄存器。
2,全局通用定时器控制寄存器(GPTCONA/B)
全局通用定时器控制寄存器(GPTCONA/B)规定了通用定时器 针对不同定时器事件所采取的动作,并指明了它们的计数方向。
映射地址为7400h。
各位的意义如下:
位15 保留位位14 T2STAT,通用定时器2的状态,只读。
0 递减计数
1 递增计数位13 T1STAT,通用定时器l的状态,只读。
0 递减计数
1 递增计数位12-11 保留位。
位10-9 T2TOADC,使用通用定时器2启动ADC(模数转换)事件。
00 无事件启动ADC(模数转换)
01 设置 下溢中断标志 来启动ADC(模数转换)
10 设置 周期中断标志 来启动ADC(模数转换)
11 设置 比较中断标志 来启动ADC(模数转换)
位8-7 T1TOADC,使用通用定时器1启动ADC(模数转换)
事件。
00 无事件启动ADC(模数转换)
01 设置下溢中断标志来启动ADC(模数转换)
10 设置周期中断标志来启动ADC(模数转换)
11 设置比较中断标志来启动ADC(模数转换)
位6 TCOMPOE,比较输出使能,如果PDPINTx
*
有效则该位设置为0。
0 禁止所有通用定时器比较输出(所有比较输出都置于高阻态)
1 使能所有通用定时器比较输出位5-4 保留位。
位3-2 T2PIN,通用定时器2比较输出极性
00 强制低
01 低有效
10 高有效
11 强制高位1-0 T1PIN,通用定时器1比较输出极性
00 强制低
01 低有效
10 高有效
11 强制高全局通用定时器控制寄存器 GPTCONB的 映射地址为
7500h,各位的意义与 GPTCONA类似。
6.3.5 通用定时器的PWM输出为了设置通用定时器以产生PWM输出,需做以下工作:
z 根据预定的PWM(载波)周期设置TxPR。
z 设置TxCON寄存器以确定计数模式和时钟源,并启动PWM输出操作。
z 将对应于PWM脉冲的在线计算宽度(占空比)的值加载到TxCMPR寄存器中。
6.3.6 通用定时器的复位当任何复位事件发生时,将发生以下情况:
GPTCONA/B寄存器中 除计数方向指示位外,所有与通用定时器相关的位 都被复位为0,因此 所有通用定时器的操作都被禁止,计数方向指示位都置成1。
z所有的定时器 中断标志位均被复位为0 。所有的定时器中断屏蔽位都被复位为0,因此所有通用定时器的中断都被屏蔽 。
z所有通用定时器的比较输出都被置为高阻态。
位1-0 T1PIN,通用定时器1比较输出极性
00 强制低
01 低有效
10 高有效
11 强制高全局通用定时器控制寄存器 GPTCONB的 映射地址为
7500h,各位的意义与GPTCONA类似。
6.4 比较单元
6.4.1 比较单元概述事件管理器EVA模块和EVB模块中分别有 3个 全比较单元,
每个比较单元都有两个相应的PWM输出。 比较单元的时基由通用定时器1(EVA模块)和通用定时器3(EVB模块)提供。
每个 事件管理器模块的比较单元包括,
z3个16位的比较寄存器 (对于EVA模块为CMPRl、CMPR2
和CMPR3,对于EVB模块为CMPR4,CMPR5和CMPR6),
它们各带一个相应的映像寄存器(可读/写)。
z一个16位的 比较控制寄存器 (对于EVA模块为COMCONA,
对于EVB模块为COMCONB),该寄存器为可读写的。
z 一个16位的 动作控制寄存器 (对于EVA模块为ACTRA,
对于EVB模块为ACTRB),它们各带一个相应的映像寄存器(可读/写) 。
z6个PWM(三态)输出(比较输出)引脚 。
z控制和中断逻辑。
比较单元的功能结构图如图6-9所示。
图6-9 比较单元功能结构图注意:对于 EVA模块( x=1,2,3; y=1,3,5; z=1),对于 EVB模块( x=4、
5,6; y=7,9,11; z=2)。
TzCNT,GPTZ
计数器输出逻辑
PWM
电路比较逻辑
ACTR全比较动作控制寄存器(带映像)
CMPRx全比较寄存器
(带映像)
PWMy,y+1
比较单元操作所要求的寄存器设置顺序设置 T3CON设置 T1CON
设置 COMCONB设置 COMCONA
初始化 CMPRx初始化 CMPRx
设置 ACTRB设置 ACTRA
设置 T3PR设置 T1PR
EVB模块EVA模块
6.4.2 比较单元寄存器
1.比较控制寄存器(COMCONA和COMCONB)
比较单元的操作由比较控制寄存器(COMCONA和COMCONB)
控制,它们均是可读写的。比较控制寄存器 COMCONA
的 映射地址为7411h 。各位描述如下:
位15 CENABLE,比较使能位
0 禁止比较操作,所有映像寄存器(CMPRx和
ACTRA)为透明。
1 使能比较操作位14-13 CLD1,CLD0,比较寄存器CMPRx重载条件。
00 当T1CNT=0时(下溢)时重载
01 当T1CNT=0或当T1CNT=T1PR时(下溢或周期匹配)重载
10 立即重载
11 保留,结果不可预测位12 SVENABLE,空间向量PWM模式使能。
0 禁止空间向量PWM模式
1 使能空间向量PWM模式位11-10 ACTRLD1,ACTRLD0,动作控制寄存器重载条件
00 当T1CNT=0时(下溢)时重载
01 当T1CNT=0或当T1CNT=T1PR时(下溢或周期匹配)重载
10 立即重载
11 保留位9 FCOMPOE,比较输出使能位,有效的PDPINTA *会使该位清0
0 PWM输出引脚为高阻态,即比较输出被禁止
1 PWM输出引脚处于非高阻态,即比较输出被使能位8 PDPINTA
*
的状态位,该位反映PDPINTA
*
引脚的当前状态。
位7-0 保留位比较控制寄存器 COMCONB映射地址为7511h,各位定义与COMCONA类似
2,比较动作控制寄存器(ACTRA和ACTRB)
比较动作控制寄存器(ACTRA和ACTRB)控制6个比较输出引脚的动作。
比较动作控制寄存器 ACTRA映射地址为7413h,各位描述如下:
位15 SVRDIR,空间向量PWM旋转方向位,仅用于产生空间向量PWM输出。
0 正向(CCW)
1 负向(CW)
位14-12 D2-D0,基本的空间向量位,仅用于产生空间向量PWM输出。
位11-10 CMP6ACT1-0,比较输出 引脚PWM6 上的比较输出方式选择。
00 强制低
01 低有效
10 高有效
11 强制高位9-8 CMP5ACT1-0,比较输出 引脚PWM5 上的比较输出方式选择。
00 强制低
01 低有效
10 高有效
11 强制高位7-6 CMP4ACT1-0,比较输出 引脚PWM4 上的比较输出方式选择。
00 强制低
01 低有效
10 高有效
11 强制高位5-4 CMP3ACT1-0,比较输出 引脚PWM3 上的比较输出方式选择。
00 强制低
01 低有效
10 高有效
11 强制高位3-2 CMP2ACT1-0,比较输出 引脚PWM2 上的比较输出方式选择。
00 强制低
01 低有效
10 高有效
11 强制高位1-0 CMP1ACT1-0,比较输出 引脚PWM1 上的比较输出方式选择。
00 强制低
01 低有效
10 高有效
11 强制高比较动作控制寄存器 ACTRB映射地址为:7513h,各位描述与ACTRA类似。
6.4.3 比较单元的复位当任何复位事件发生时,所有与比较单元相关的寄存器 都复位为0,且所有 比较输出引脚 被置为 高阻态 。
6.5 与比较单元相应的PWM电路
6.5.1 PWM电路概述
EVA模块的PWM电路功能结构图如图6-10所示,它 包括以下功能单元:
(1)非对称/对称波形发生器;(2)可编程的死区单元(DBU);(3)输出逻辑;(4)空间向量(SV)
PWM状态机。
6.5.2 死区单元及其控制死区波形图如图6-11所示,对于一个输入信号
PHx,会产生两个输出信号DTPHx和DTPHx
-

死区单元用于保证在任何情况下,每个比较单元相关的 2路PWM输出控制一对正向导通和负向导通设备时没有重叠,即当一个器件没有完全关断时,另一个器件不导通,以避免功率器件击穿失效 。如图6-12所示。
图6-11 死区波形图图6-12 三相交流反相换流器原理图死区定时器控制寄存器死区单元的操作是由死区定时器控制寄存器
(DBTCONA和DBTCONB)来控制的。 DBTCONA映射地址为7415h,各位描述如下:
位15-12 保留。
位11-8 DBT3一DBT0。死区定时器周期,规定了3个
4位死区定时器的周期值。
位7 EDBT3。死区定时器3使能位(对应PWM5和PWM6)
0 禁止
1 使能位6 EDBT2。死区定时器2使能位(对应PWM3和PWM4)
0 禁止
1 使能位5 EDBT1。死区定时器1使能位(对应PWM1和PWM2)
0 禁止
1 使能位4-2 DBTPS2-DBTPS0。死区定时器的预定标器。
000 x/1
001 x/2
010 x/4
011 x/8
100 x/16
位4-2 DBTPS2-DBTPS0。死区定时器的预定标器。
101 x/32
110 x/32
111 x/32
x为CPU时钟频率位1-0 保留。
DBTCONB映射地址为7515h,各位的意义和DBTCONA的相应位意义一致。
6.6 用比较单元和PWM电路产生PWM波形
6.6.1 PWM信号
PWM是一系列脉宽不断变化的脉冲。PWM周期固定。
在电机控制系统中,PWM用来控制开关电源器件的 开关时间,为电机绕组提供 所需的能量,控制电机所需转速和转矩 。
1.PWM信号产生用 一定时器重复产生与PWM周期相同的计数周期,
一个比较寄存器保持着调制值,在相应的输出上会产生一个转换。
当两个值之间的第二个匹配或定时器的周期结束时,
输出上会产生又一个转换。
利用此法,输出脉冲的开关时间会与比较寄存器的值成比例。
2.死区在许多的运动/电机控制和功率电子应用场合中,两个功率器件(上级和下级)被串联在一个功率支路中,
为避免击穿失效,两个器件的打开的周期不能重叠,
在一个三极管的关断和另一个三极管导通之间经常要插入一个死区,这段时间延迟允许一个三极管在别的三极管导通之前完全关断。
6.6.2 用事件管理器产生PWM输出三个比较单元中的每一个都可与事件管理器的GP定时器用于产生 一对可编程死区和输出极性的PWM输出 。
对于每个EV模块中的三个比较单元,共有六个这种给定的PWM输出引脚,这 六个输出引脚可用来控制三相交流感应电机或无刷直流电机 。
又比较动作控制寄存器提供的输出动作控制的灵活性,
使得 开关和同步磁阻电机 的控制变得非常简单容易。
PWM电路可在单任务或多任务场合控制 直流有刷电机和步进电机 等。
6.6.3 PWM产生的寄存器设置用比较单元和相应的电路产生所有三种PWM波形均需要对相同的EV寄存器进行配置。
配置过程需要以下步骤:
(1)设置和装载ACTRx寄存器
(2)如需死区,则设置和装载DBTCONx寄存器
(3)初始化CMPRx寄存器
(4)设置和装载COMCONx寄存器
(5)设置和装载T1CON或T3CON寄存器,来启动比较操作
(6)更新CMPRx寄存器的值
6.6.4 非对称和对称的PWM产生
EV模块中的每个比较单元均 可产生非对称和对称的PWM
波形 。另外这 三个比较单元一起产生三相对称空间向量PWM输出 。用GP定时器产生PWM输出已介绍,下面仅 介绍用比较单元产生PWM 。
1.非对称PWM波形产生用一个比较单元产生一个非对称的PWM波形。见下页图
GP定时器1必须设置为连续递增计数模式,其周期寄存器必须载入一个与所需的PWM载波周期相对应的值。
通过软件对ACTRx进行适当的配置,在开关磁阻电机控制中时特别有用的。
2,对称的PWM波形产生一个中心或对称的PWM波形的特点是其调制脉冲在每个
PWM周期是对称的。
对称的与非对称PWM波形相比,优点在于它有两个相同长度的无效区,在每个PWM周期的开始和结束,这种对称性表现为当正弦调制使用时,它 在一个交流电机的相电流中比非对称的PWM信号引起更少的谐波 。
下图是对称PWM波形的例子。
6.7 空间向量PWM
6.7.1 空间向量PWM理论概述空间向量PWM指的是一个三相功率变换器中六个功率三极管的一种特殊的开关电路,可使三相交流电机绕组产生的电流的谐波失真最小,还 提供了比正弦调制方式更有效的供电电压的使用 。
1.三相功率反相换流器典型的三相功率反相换流器的结构如图6-15所示。
图中Va、Vb和Vc是提供给电动机绕组的电压。六个功率三极管由DTPHx和DTPHx_ (x=a、b和c)控制当上部的三极管导通时(DTPHx=1),下部的三极管关断(DTPHx_=0)。这样,通过上部三极管的开关状态(QI、Q34和Q5)或者等效地说,DTPHx(x=a、b
和c)的状态,就可以计算出提供给电动机的电压
Uout。
2.功率反相换流器的开关模式和基本空间向量当一个支路中的上部三极管导通时,由支路提供给电动机绕组的电压Vx(x=a、b或c)等于供电电压Uab,
当三极管关断时,提供的电压为0。上部三极管
(DTPHx,x=a、b或c)的开关切换有8种可能的组合方式。
这些组合方式和由之导出的电动机拉直流供电电压
Udc确定的线电压和相电压如表6-15所示。注意a、
b和c分别代表DTPHa,DTPHb和DTPHc的值。
通过进行一个d-q变换,可以把对应与8种组合方式的 相电压映射到 —个d-q平面上。这等效于把三个向量(abc)的正交投影映射到垂直子向量(1,1,
1)的二维平面上,即d-q平面上,这就产生6个非零向量和两个零向量。两个零向量位于原点。这 8
个 向量叫做 基本空间向量 。
基本空间向量 近似地给出了电机的电压向量 。
相邻两个向量的二进制表示只有一位不同,当开关模式变化时,只有一个上级三极管改变开关状态。
3.用基本空间向量估算电机电压可 平衡 三级管的开关周期和功率损耗。
6.7.2 用EV产生空间向量PWM波形
6.8 捕获单元可以记录 6个捕获输入引脚 上的事件。
共6个捕获单元,每个事件管理器有3个捕获单元。
EVA:CAP1、CAP2、CAP3
EVB:CAP4、CAP5、CAP6
EVA中的每个捕获单元均可选择 GP定时器2或1 作为其时间基准,CAPl和CAP2 不能选择不同的定时器作为它们的时基。
EVB中的每个捕获单元均可选择 GP定时器4或3 作为其时间基准,CAP4和CAP5 不能选择不同的定时器作为它们的时基。
当在捕获输入引脚CAPx上检测到一个设定的转换时,
GP定时器的值被捕获并存储在相应的 2级深度FIFO
堆栈 中。
图6-18是一个EVA的捕获单元原理框图,EVB的捕获单元原理框图与EVA一样,仅寄存器不同。
6.8.1 捕获单元的特点捕获单元 包括下列特性,
1个16位的捕获控制寄存器CAPCONx(可读/写)
1个16位的捕获FIFO状态寄存器CAPFIF0x。
可选择通用定时器1/2(EVA)或者3/4(EvB)作为时基。
6个 16位2级深 的FIFO栈(CAPxFlFO),每个对应一个捕获单元,
3个 施密特触发器输入引脚 (对于EVA,CAPl/2/3;
对于EVB,CAP4/5/6),每个捕获单元一个输入引脚(所有的输入和内部CPU时钟同步,为使跳变被捕获,输入必须在当前电平保持两个CPU时钟周期。
输入引脚 CAP1/2和CAP4/5也可用作正交编码器脉冲电路的正交编码器脉冲输入 )。
用户可定义跳变检测方式 (上升沿,下降沿或二者)
6个可屏蔽的中断标志位,每个标志位对应一个捕获单元。
6.8.2 捕获单元的操作在捕获单元位能后,相应输入引脚上的指定转换会将所选的通用定时器的计数值 装入到相应的FlFO堆栈 。同时,如果有个或更多有效的捕获值保存在FlFO堆栈
(CAPx FlFO位不等于0)中,则相应的中断标志位被置
1。如果该个断标志没有被屏蔽,产生一个外设中断请求。
每当将捕获到的新计数值存入到FlFO堆栈时,CAPFlFOx
的相应状态位被调整以反映FlFO堆栈的新状态。 从捕获单元输入引脚处发生转换到所选通用定时器的计数值被锁存之间的延时需要2个CPU时钟周期。
1.捕获单元时间基准的选择对EVA模块,与 CAP1和CAP2不问,捕获单元CAP3有白己独立的时基选择位,这就允许同时使用2个通用定时器,CAP1和CAP2共用一个,而CAP3单独使用一个。在EVB模块,CAP6有自己独立的时基本选择位。
捕获操作不影响与任何GP定时器对应的任何GP定时器操作或比较/PWM操作。
2.捕获单元的设置为使捕获单元能正常工作,需对寄存器进行以下设置:
初始化捕获FlFO状态寄存器(CAPFlFOx),清除专用状态位。
设置选定的GP定时器为一种操作模式。
如果需要,设置相应的GP定时器比较寄存器或GP定时器周期寄存器。
设置相应的CAPCONA或CAPCONB。
6.8.3 捕获单元寄存器捕获单元的操作由4个16位的控制寄存器CAPCONA/B和
CAPFlFOA/B控制。因为捕获电路的时间基准是由GP
定时器1/2或3/4提供的,所以TxCON(x=1,2,3或4)
寄存器用于控制捕获单元的操作。
另外,寄存器CMCONA/B也可用于正交编码器脉冲电路的操作。
1.捕获控制寄存器CAPCONx
(1)捕获控制寄存器A(CAPCONA),映射地址:7420h 。
CAPCONA各位的意义:
位15 CAPRES 。捕获复位,该位只能写,任何读的结果均为0。 向位15写0将清除所有的捕获和QEP寄存器。但是,使能捕获功能时不需要向位15写1。
0 所有捕获单元和正文编码脉冲电路的寄存器清o
1 无动作位14-13 CAPQEPN。 捕获单元1和2的控制位。
00 禁止捕获单元1fu 2,FIF0堆栈保持原内容
01 使能捕获单元1和2
10 保留
11 保留位12 CAP3EN 。 捕获单元3控制位。
0 禁止捕获单元3,其FlFO堆栈保持原内容
1 使能捕获单元3
位11 保留位 。
位10 CAP3TSEL 。捕获单元3的通用定时器选择位。
0 选择通用定时器2
1 选择通用定时器1
位9 CAP2TSEL 。捕获单元1和2的通用定时器选择位。
0 选择通用定时器2
1 选择通用定时器1
位8 CAP3TOADC 。捕获单元3事件启动ADC转换位:
0 无操作
1 当CAP3INT标志位被置位时,启动ADC(模数转换位7-6 CAP1EDGE 。捕获单元1的边沿检测控制位。
00 无检测
01 检测上升沿
I0 检侧下降沿
11 上升沿、下降沿均检测位5-4 CAP2EDGE 。捕获单元2的边沿检测控制位。
00 无检测
01 检测上升沿
I0 检侧下降沿
11 上升沿、下降沿均检测位3-2 CAP3EDGE 。捕获单元3的边沿检测控制位。
00 无检测
01 检测上升沿
I0 检侧下降沿
11 上升沿、下降沿均检测位1-0 保留位
(2)捕获控制寄存器B(CAPCONB),映射地址:7520h 。
CAPCONB与CAPCONA各位的意义相同。
2.捕获FIFO状态寄存器
CAPFlFOx中包括捕获单元的3个FlFO堆栈的状态位。如果CAPFlFOx的状态位正在更新的同时(因为一个捕获事件)向CAPFlFOx状态位写数据,写数据优先。
CAPFlFOx寄存器的写操作在编程中很有用。例如,如果
“01”写入CAPFlFOx位,则EV模块会认为FIFO有一个输入。随后,每次FIFO获得一个新值,则将产生一个捕获中断。
(1)捕获FlFO状态寄存器A(CAPFlFOA),
映射地址:7422h
捕获FlFO状态寄存器A(CAPFlFOA)各位的意义如下:
位15-14 保留位。
位13-12 CAP3FlFO 。捕获单元3的FlFO状态位
00 空
01 有一个输入
10 有两个输入
11 有两个输入并又捕获到一个,第一个输入已丢失。
位11-10 CAP2FlFO 。捕获单元2的FlFO状态位
00 空
01 有一个输入
10 有两个输入
11 有两个输入并又捕获到一个,第一个输入已丢失。
位9-8 CAP1FlFO 。捕获单元1的FlFO状态位
00 空
01 有一个输入
10 有两个输入
11 有两个输入并又捕获到一个,第一个输入已丢失。
位7-0 保留位
(2)捕获FlFO状态寄存器B(CAPFlFOB),
映射地址:7522h
与捕获FlFO状态寄存器A(CAPFlFOA)各位的意义相同。
6.8.4 捕获单元FIF0堆栈每个捕获单元有一个2级深度FlFO堆栈。任何一个
FlFO堆栈的2级寄存器都是只读寄存器,它保存着相应的捕获单元捕获的旧计数器值。因此,对FlFO堆栈的一个读访问总是读出捕获到堆栈中的旧计数器值。
当位于FlFO堆栈顶部寄存器中的计数器值被读出时,
FlFO堆栈底部寄存器的新计数器值(如果有的话)就会被压入项部寄存器。
如果读取了底层寄存器的值,那么捕获FlFO状态寄存器的相应位将发生变化。
如果读取前捕获FlFO状态寄存器的相应位为10或11,
则读取后变成为01,即堆栈中只有一个值。
如果读取前捕获FlFO状态寄存器的相应位为01,则读取后变成为00,即堆栈为空。
(1)第1次捕获当捕获单元的输入引脚出现一个指定的转换时,选定的GP定时器的计数器值就会被捕获,如果堆栈是空的,这个计数器值就会被写入到FlFO堆栈的项层寄存器。同时,相应的状态位被设置为0。
如果另外一个捕获发生之前对FlFO堆栈进行了读访问,
则FlFO状态位被复位为00。
(2)第2次捕获如果在以前的捕获的计数值被读取之前,又发生一次捕获,那么捕获的计数器值就会进入底部寄存器。同时,
寄存器中相应的FlFO状态位被置为10。当在另外一次捕获之的读FlFO堆栈时,顶部寄存器中的旧计数器值被读出,底部寄存器中的新计数器值被压入顶部寄存器,相应的状态位设置为01。
第2捕获会将寄存器相应的捕获中断标志位置1,如果中断没有被屏蔽,则会产生一个中断请求。
(3)第3次捕获当FlFO堆栈中已有两个计数器值,这时如果又有一个捕获发生,堆栈顶部寄存器中最旧的计数器值被推出并且丢失,然后堆栈底部寄存器的计数器值被向上一次压入到顶部寄存器,新捕获的计数器值被写入底部寄存器,并巳状态位设置为11,表明一个或更多的旧计数器值被丢失。
第3次捕获会将寄存器相应的捕获中断标志位置1,如果中断没有被屏蔽,则会产生一个中断请求。
6.8.5 捕获中断当一个捕获单元执行了一次捕获,且FlFO中至少有一个捕获到的计数值时(CAPFlFO位不为0),则相应的中断标志位置1。如果该中断没有被屏蔽,则会产生一个外设中断请求信号。
如果使用了捕获中断,则 可在中断服务程序中读取捕获到的一对计数值。
如果没有使用中断,也可以通过查询中断标志位和FlFO
堆栈的状态位来确定是否发生捕获事件,如果已发生捕获事件则可以从相应的捕获单元的FlFO堆栈中读取捕获到的计数值。
6.9 正交编码器脉冲电路(QEP)
每个事件管理器模块都有一个正交编码器脉冲(QEP)电路。当QEP电路被使能时,可以对CAP1/QEP1和
CAP2/QEP2(EVA模块)或CAP3/QEP3和CAP4/QEP1(EVB
模块)引脚上的正交编码输入脉冲进行解码和计数。
正交编码脉冲电路可用于连接光电编码器获得旋转机械的位置和速率等信息。当QEP电路被使能时,
CAP1/CAP2和CAP4/CAP5引脚上的捕获功能将被禁止。
6.9.1 正交编码器脉冲引脚两个QEP输入引脚由捕获单元1和 2(或3和4,对于EVB
模块)和QEP 电路共亨。因此CAPCONx寄存器中相应的位必须被正确设置,以使能QEP电路,并禁止捕获单元,
这样就把相应的输入引脚分配给正交编码器脉冲QEP
电路,
6.9.2 正交编码器脉冲电路事件基准
QEP电路的时间基准可以由 通用定时器2 (EVB模块的为通用定时器4) 提供。
通用定时器必须设置成 定向的增/减 汁数模式。并以QFP
电路作为时钟源。图6-19为EVA模块中正交编码器
(QEP)脉冲电路的原理框图。
位必须被正确设置,以使能QEP电路,并禁止捕获单元,
这样就把相应的输入引脚分配给正交编码器脉冲QEP
电路,
6.9.3 正交编码器脉冲电路事件基准正交编码脉冲包括两个脉冲序列,是频率变化的正交
(相差四分之一周期,即90 °)脉冲序列。当电动机轴上的光学编码器产生正交编码脉冲时,通过检测两个序列中 哪个序列领先,就可测出电动机的转向。角位置和速度可以通过脉冲计数和脉冲的频率测出 。
1,QEP电路
QEP电路的 方向检测逻辑 测定哪个脉冲序列的相位领先,
然后 产生一个方向信号 作为通用定时器2或4的方向输入。 如果CAPl/QEPl(EVB为CAP4/QEP3)输入为相位领先的脉冲序列,选定的定时器递增计数。如果CAP2
/QEP2(EVB为CAP5/QEP4)输入为相位领先的脉冲序列,选定的定时器递减计数。
两个正交编码输入脉冲的两个边沿均被QEP电路计数,
因此 送到通用定时器2或4的QEP电路产生的时钟频率是每个输入序列频率的四倍 。这个产生的时钟与通用定时器2或4的时钟输入端相连。
2.正交编码脉冲解码实例图6-21表示的是正交编码脉冲解码的实例图,正交编码脉冲和测定的计数方向以及时钟如图所示。
6.9.4 正交编码器脉冲电路的计数通用定时器 2或 4总是从计数器中的当前值开始计数,
因此可以在使能 QEP工作模式前将所需的值装载到所选通用定时器的计数器中。当正交编码器脉冲电路的时钟作为通用定时器的时钟源时,选定的通用定时器将忽略输入引脚 TDIRA和 TCLKINA/B(定时器方向和时钟)
用 QEP电路作为时钟的 GP定时器的周期、下溢、上溢和比较中断标志是根据相应的匹配产生的。如果中断没有被屏蔽,则中断标志将产生外设中断请求信号。
6.9.5 正交编码器脉冲电路的寄存器设置
(1)EVA模块中启动QEP电路需作以下设置:
如果需要,为GP定时器2的计数器、周期和比较寄存器载入设定值。
配置T2CON寄存器,将通用定时器2设置成定向的增
/减计数模式,以正交编码器脉冲电路作为时钟源,
并使能通用定时器2。
配置CAPCONA寄存器以使能正交编码脉冲电路。
(2) EVB模块中启动QEP电路需作以下设置:
如果需要,为GP定时器4的计数器、周期和比较寄存器载入设定值。
配置T2CON寄存器,将通用定时器4设置成定向的增
/减计数模式,以正交编码器脉冲电路作为时钟源,
并使能通用定时器4。
配置CAPCONA寄存器以使能正交编码脉冲电路。
6.10 事件管理器中断事件管理器中断分为3组:事件管理器中断组A、B和C。
每组具有不同的中断标志、中断屏蔽寄存器,见下表。
表 EV中断组的中断标志寄存器和中断屏蔽寄存器表 所有EVA中断、优先级和分组
EVA中断标志寄存器以EVA中断标志寄存器A(EVAIFRA)为例,其映射地址为
742Fh,各位描述如下:
位15-11 保留位。读返回0,写无效。
位10 T1OFINT FLAG。通用定时器1的上溢中断标志读 0:标志被复位;1:标志被置位写 0:无效 1:复位标志位位9 T1UFINT FLAG。通用定时器1的下溢中断标志读 0:标志被复位;1:标志被置位写 0:无效 1:复位标志位位8 T1CINT FLAG。通用定时器1的比较中断标志读 0:标志被复位;1:标志被置位写 0:无效 1:复位标志位位7 T1PINT FLAG。通用定时器1的周期中断标志读 0:标志被复位;1:标志被置位写 0:无效 1:复位标志位位6-4 保留位。读返回0,写无效。
位3 CMP3INT FLAG。比较单元3中断标志读 0:标志被复位;1:标志被置位写 0:无效 1:复位标志位位2 CMP2INT FLAG。比较单元2中断标志读 0:标志被复位;1:标志被置位写 0:无效 1:复位标志位位1 CMP1INT FLAG。比较单元1中断标志读 0:标志被复位;1:标志被置位写 0:无效 1:复位标志位位0 PDPINTA FLAG。功率驱动保护中断标志读 0:标志被复位;1:标志被置位写 0:无效 1:复位标志位
EVAIFRB、EVAIFRC各位意义不再详述
EVA中断屏蔽寄存器以EVA中断屏蔽寄存器A(EVAIFRA)为例,其 映射地址为
742Ch,各位描述如下:
位15-11 保留位。读返回0,写无效。
位10 T1OFINT ENABLE。通用定时器1的 上溢中断使能
0:禁止
1:使能位9 T1UFINT ENABLE。通用定时器1的 下溢中断使能
0:禁止
1:使能位8 T1CINT ENABLE。通用定时器1的比较中断使能
0:禁止
1:使能位7 T1PINT ENABLE。通用定时器1的周期中断使能
0:禁止
1:使能位6-4 保留位。读返回0,写无效。
位3 CMP3INT ENABLE。比较单元3中断使能
0:禁止
1:使能位2 CMP2INT ENABLE。比较单元2中断使能
0:禁止
1:使能位1 CMP1INT ENABLE。比较单元1中断使能
0:禁止
1:使能位0 PDPINTA ENABLE。功率驱动保护中断使能
0:禁止
1:使能
EVAIMRB、EVAIMRC各位意义不再详述第7章 模数转换(ADC)模块
7.1 模数转换(ADC)模块的特性
1.ADC模块的特性
(1)带有内部采样-保持电路 10bit ADC模块
(2) 375ns的转换时间。
(3)16个模拟输入通道,每8个通过一个8选1的模拟多路转换开关。
(4)对 16路模拟量进行,自动排序,。
(5)两个独立的 8状态排序器 (SEQ1和SEQ2),可以独立工作在 双排序器 模式,或级联为 16个状态排序器 模式(SEQ一级联模式)
(6)在给定的排序模式下,4个排序控制器决定通道的转换顺序 。
(7)16个存放结果的寄存器(RESULT0 ~RESULT15)
(8)有多个启动ADC转换的 触发源 如下:
软件立即启动
EVA事件管理器启动
EVB事件管理器启动
ADC 的SOC引脚启动
(9)EVA和EVB可分别独立地触发SEQ1和SEQ2(仅用于双排序器模式)
(10)有单独的预定标的采样/保持时间
2.ADC模块的寄存器表7-1 (ADC)模块的 寄存器地址 寄存器 名称
70A0h ADCCTRL1 ADC控制寄存器1
70A1h ADCCTRL2 ADC控制寄存器2
70A2h MAXCONV 最大转换通道寄存器
70A3h CHSELSEQ1 通道选择排序控制寄存器1
70A4h CHSELSEQ2 通道选择排序控制寄存器2
70A5h CHSELSEQ3 通道选择排序控制寄存器3
70A6h CHSELSEQ4 通道选择排序控制寄存器4
70A7h AUTO_SEQ_SR 自动排序状态寄存器地址 寄存器 名称
70A8h~70B7h RESULT0~RESULT15 转换结果寄存器0 ~15
70B8h CALIBRATION 校准寄存器
7.2 ADC转换模块概述
7.2.1 自动排序器的操作原理
2个8状态排序器 SEQ1和 SEQ2,也可级联成一个16状态排序器 SEQ。
状态,排序器可以执行的自动转换数目。
ADC模块能对一序列转换自动排序。转换结束后,结果依次保存在RESULT0、RESULT1 …… 中。
用户也可对同一通道进行多次采样,即,过采样,,得到的采样结果比传统的单采样结果分辨率高。
单排序器(16状态,级联)
  双排序器(2个独立的8
状态排序器)
为讲解方便,规定排序器的状态如下:
排序器SEQ1,CONV00-CON07
排序器SEQ2,CONV08-CON15
排序器SEQ,CONV00-CON15
转换触发特性:
SEQ1:软件、EVA、外部引脚,仲裁优先级高于SEQ2
SEQ2:软件、EVB,仲裁优先级低于SEQ1
SEQ,软件、EVA、EVB、外部引脚,无仲裁优先级为每个排序所选的模拟输入通道排序控制寄存器
(CHSELSEQn)的CONVnn位所定义。
CONVnn位为4位长,可指定16通道中的任何一个。
7.2.2 不中断的自动排序的模式此模式,SEQ1/SEQ2在一次排序过程中,可对任意通道的8个转换进行自动排序。
转换结果被保存到8个结果寄存器 (SEQ1为RESULT0-
RESULT7,SEQ2为RESULT8-RESULT15)。
在一个排序中的 转换个数受寄存器 MAXCONV中的一个3
位域 或 4位域 控制。它的值在自动排序转换开始时被自动装载到 自动排序寄存器(AUTO_SEQ_SR) 的排序计数器状态域(SEQCNTR3 ~0)。
MAXCONV中的3位域有一个在0 ~7范围的值,当排序器从状态CONV00开始依次进行。 SEQCNTRn位从装载值开始向下计数直到SEQCNTRn为0 。
一次自动排序中完成的转换数为MAXCONVn+1。
例 使用SEQ1的双排序模式中的A/D转换。
假设SEQ1要完成 7个通道的转换(通道2、3、2、3、6
、7和12经过自动排序后转换),则MAXCONV1的值应该设置为6,且 CHSELSEQn寄存器 的设置如下,
位15-12 位11-8 位7-4 位3-0
70A3h 3 2 3 2 CHSELSEQ1
70A4h x 12 7 6 CHSELSEQ2
70A5h x x x x CHSELSEQ3
70A6h x x x x CHSELSEQ4
不中断的自动排序流程图如下:
一旦 转换启动(SOC)触发器 被排序器收到后,转换立即开始 。
SOC触发器载入在SEQCNTRn位 。在CHSELSEQn寄存器指定的通道已预先决定的顺序进行转换。每个转换结束后,SEQCNTRn位自动减少1。当SEQCNTRn达到0时
,将根据ADCTRL1寄存器的连续运行(CONT RUN)位状态,发生以下事情:
(1)如果CONT RUN位置1,转换排序自动再次启动(
SEQCNTRn重载MAXCONV1中的初始值,且SEQ1状态被置于CONV00)。
在这种情况下,必须确保在下一次转换排序之前读取结果寄存器。
在ADC模块向结果寄存器写入数据而用户却想从结果寄存器读取数据时,ADC的仲裁逻辑 确保结果寄存器不会崩溃。
(2)如果 CONT RUN位 没有被置位,则排序会停留在过去的状态(例如CONV06),并且SEQCNTRn继续保持0
值。
因为每次SEQCNTRn位达到0时,中断标志会被置1。如果需要,用户可使用ADCTRL2寄存器的RSTSEQn位,在中断服务程序(ISR)中手动复位排序器,以便下一次转换启动时,SEQCNTRn位可以重载MAXCONV1的初始值,且SEQ1状态被设置为CONV00。
这一特性在排序器的启动/停止操作中很有用,本例也可用于SEQ2的级联的16状态排序器SEQ。
7.2.3 排序器的启动/停止模式除不中断的自动排序模式外,任何一个排序器都可工作在启动/停止模式,在此模式,可实现和多个转换
/启动触发器时间上同步。这种模式和上例基本相同,
但是排序器完成一个转换序列之后,可以在没有复位到初始状态CONV00情况下,被重触发。因此当一个转换排序结束后,排序器停留在当前的转换状态。
ADCTRL1寄存器的连续运行位必须设置为0(禁止)。
例 排序器的启动/停止操作使用触发器1(下溢)启动3个自动转换(V1,V2,V3) 。
触发器1和触发器2时间间隔为25微妙,且由事件管理器A提供,如下图所示。本例只用了SEQ1。
注意,触发器1和2可以是事件管理器A(EVA)的转换启动(SOC)信号、外部引脚或软件。相同的触发器信号源要产生两次,以满足本实例双触发器的要求。
在这种情况下,MAX CONV1的值被设置为2,并且ADC模块的输入通道选择排序控制寄存器(CHSELSEQn)应置
1。如表7-4所示。
表7-4
位15-12 位11-8 位7-4 位3-0
70A3h V3 I3 I2 I1 CHSELSEQ1
70A4h x x V2 V1 CHSELSEQ2
70A5h x x x x CHSELSEQ3
70A6h x x x x CHSELSEQ4
复位和初始化之后,SEQ1等待一个触发源信号。第一个触发源到来之后,执行通道选择值为CONV00( I1 )、
CONV01(I2 )和CONV02(I 3 )的3个转换,然后,SEQ1
在当前状态等待另一个触发源信号。当第二个触发源到来后25为微秒,ADC模块开始另外3个转换,通道选择值为CONV03(V 1)、CONV04(V 2)和CONV05(V 3)。
在两种触发源的情况下,MAX CONV1的值被自动装入到
SEQ CNTV1中。如果第二个触发源信号到来时,要求转换的数目和第一个触发源时不一样,则用户必须
(在第二个触发源到来之前)通过软件改变MAX CONV1
的值,否则重新使用当前的MAX CONV1的值(初始载入的),改变MAX CONV1的值可以在适当的时候由中断服务程序(ISR)来完成。
在第2个自动转换完成店,ADC的结果寄存器的值如表7-
5所示。
表7-5 ADC的结果寄存器的值缓冲寄存器 ADC的结果
RESULT0 I1
RESULT1 I2
RESULT2 I3
RESULT3 V1
RESULT4 V2
RESULT5 V3
RESULT6-RESULT15 X
完成第二个触发源转换后,SEQ1在当前状态等待另一个触发源到来。用户可以通过软件复位SEQ1到CONV00
,并重复同样的触发源1、2转换操作。
7.2.4 输入触发器描述每一排序器都有一组能被使能或禁止的触发源。
7.2.5 排序转换期间的中断操作排序器可以在两种工作方式下产生中断。
7.3 ADC时钟预定标适应输入信号的阻抗的变化
7.4 ADC校准校准模式可以计算ADC模块的零、中值和最大值的偏置误差。该偏置误差的二进制补码被载入CALBRATION
寄存器。此后,ADC硬件自动将偏置误差加到转换值上
第8章 串行通信接口(SCI)
内部有一个串行通信(SCI)接口模块,来实现与其它外设之间的串行数据通信。波特率可编程。
SCI的发送器与接收器都是双缓冲的。各自有工作使能和中断控制。可工作于全双工模式波特率 可编程。
8.1 串行通信接口的结构
8.1.1 串行通信接口的物理描述内部结构如图8-1所示。
(1) 两个I/O引脚,SCIRXD与SCITXD
(2)通过对一个16位的 波特率选择寄存器 编程,可得到 65000种的不同速率 。
(3) 1-8位 的 可编程 数据位 。
(4)长度为 1位或2位的 可编程 停止位 。
(5) 内部 产生的 串行时钟 。
(6)四个错误的检测标志:
奇偶性错误、超限错误、帧错误、间断检测
(7) 两种 唤醒 多处理器模式,
空闲线唤醒、位寻址唤醒
(8)半双工或全双工。
(9)双缓冲接收和发送功能。
(10)发送和接收操作均可通过中断或查询操作进行
(11)非归零格式(NRZ)
8.1.2 SCI模块的结构模块主要包括以下部件:
(1)发送器-TX,
SCITXBUF-发送数据缓冲寄存器,存发送数据。
TXSHF-发送移位寄存器,每次1位送到SCITXD
引脚
(2)接收器-RX,
RXSHF-接收移位寄存器,每次1位将SCITXD引脚上的数据移入。
SCIRXBUF-接收数据缓冲寄存器,存RXSHF接收到数据
(3)一个可编程的波特率发生器。
(4)控制和状态寄存器(映射在数据存储器区)
8.1.3 SCI模块的寄存器地址地址 寄存器 名称
7050h SCICCR SCI控制寄存器
7051h SCICTRL1 SCI控制寄存器1
7052h SCIBAUD 波特率选择寄存器高8位
7053h SCIBAUD 波特率选择寄存器低8位
7054h SCICTRL2 SCI控制寄存器2
7055h SCIRXST SCI接收器状态寄存器
7056h SCIRXEMU SCI仿真数据缓冲寄存器
7057h SCIRXBUF SCI接收器数据缓冲寄存器
7059h SCITXBUF SCI发送数据缓冲寄存器
8.1.4 多机异步通信模式
SCI有两种多处理器协议,即 空闲线路多处理器模式和 地址位多处理器模式,这些协议允许在多个处理器之间进行有效的数据传输。
SCI提供了与许多流行的外围设备接口的 通用异步接收器发送器(UART)通信模式 。异步模式需要两条钱与标准设备接口,如使用RS-232C格式的终端和打印机等。数据发送的字符包括:
一个起始位
1-8个数据位
一个奇偶校验位或无奇偶校验位
1-2个数据位
8.2 可编程的数据格式串行通信接口可的数据无论是接收还是发送都采用
NRZ(非归零) 格式,NRZ包括以下组成部分,
一个起始位
1-8个数据位.
一个奇偶校验位或无奇偶校验位
1-2个停止位
一个从数据中识别地址的附加位(仅用于地址模式)。
数据的基本单位被称作一个字符,为1-8位的字长。
数据的每个字符格式化为1个起始位,1-2个停止位和可选的奇偶校验位和地址位,如图8-2所示。
注意,带有格式化信息数据的一个字符称为一个 帧 。
为了对数据格式化进行编程,要使用SCI通信接口控制寄存器(SCICCR)。用于对数据格式进行编程的位如表8-2所示。
表8-2 对数据格式进行编程的位位功能
SCICCR2-0 选择字符长度(1-8位)
SCICCR.5 是否选择奇偶校验功能
SCICCR.6 选择奇偶校验,1-偶,0-奇
SCICCR.7 选择停止位的个数,1-1个,0-2个
8.3 SCI多处理器通信多处理器通信即一条串行线上只能有一个信息源。
地址字节信息源发送的数据块的第一个字节包括一个地址字节,
它被所有的接收器读取,但只有地址正确的接收器才能被紧随地址字节后面的数据字节中断,地址不正确的接收器不被中断,直到下一个地址字节。
SLEEP位串行线路上的所有处理器将它们的串行通信接口的
SLEEP位 (SClCTL1.2)设置为 1,这样当仅在检测到地址字节时才被中断。当一个处理器读取到的一个数据块地址与软件设置的CPU器件地址相一致时,用户程序必须清除 SLEEP位来确保串行通信接口在收到每个数据字节时产生一个中断。
尽管当 SLEEP位为1时,接收器仍能工作,但它不会使
RXRDY、RXINT或任何接收错误状态位设置为1,除非检测到地址字节,且接收到的帧的地址位是1。SCI
不会改变SLEEP位,必须由用户软件改变。
识别地址字节处理器根据多处理器的模式来识别一个地址字节,例如:
空闲线模式 在地址字节前留有一段静空间。该模式没有一个附加的地址/数据位,在处理包含多于10
个字节的数据块的情况下,其效率比地址位模式更高。
空闲线模式 应用于典型的非多处理器的SCI通信 。
地址位模式 为每个字节增加一个附加位(地址位)来从数据中识别地址。 该模式在处理多个小数据块时更有效。与空闲线模式不一样,因为它在数据块之间不需要等待。当处于高速传送时,空闲模式的程序速率不足以避免传送中的一个10位空闲位。
控制SCI Tx和Rx特性多处理器的模式可通过ADDR/IDLE MODE位(SCICCR.3)
来设置。两种模式都使用 TXWAKE(发送唤醒标志)位
(SCICTL1.3),RXWAKE (接收唤醒标志)位
(SCIRXST.1)和SLEEP标志位(SCICTL1.3)来控制串行通信接口发送器和接收器的工作状态。
接收顺序,在两种多处理器模式中,接收顺序如下:
(1)在接收一个地址块时,串行通信接口唤醒并请求一个中断(RX/BK INT ENA- SCICTL2.1必须被使能以请求中断)。它读取地址块的第一帧数据,其中包括目的地址
(2)通过中断和检查程序引入的地址进入一个软件服务程序,并且该地址字节与保存在内存中的器件地址再次进行校对。
(3)如果检查表明此块是DSP控制器的地址,则CPU清除
SLEEP位并读块的其余部分,如果不是,则退出软件子程序,SLEEP位设置为1,并在下一个块开始之前不接收中断。
8.3.1 空闲线多处理器模式
8.3.2 地址位多处理器模式
8.4 SCI通信模式
8.4.1 通信模式中的接收器信号
8.4.2 通信模式中的发送器信号
8.5 串行通信中断
8.6 SCI波特率计算
8.7 SCI模块寄存器
8.8 串行通信实例
8.8.1 串行通信回环传输实例
8.8.2 使用中断执行SCI数据的接收
DSP
TXD
RXD
TTL-232
电平转换
TTL电平
PC机232接口
232电平
第9章 串行外设接口SPI
SPI是一个高速同步串行输入/输出端口,传送速率可编程,应用,外部移位寄存器、D/A转换器,A/D转换器、
串行EEPROM、LED显示驱动器等外部设备 进行扩展。
9.1 串行外设接口的结构
4个外部引脚,以下引脚都可用作数字I/O引脚。
SPISIMO,SPI从输入、主输出;
SPISOMI,SPI主输入、从输出;
SPICLK,SPI时钟;
SPISTE*,SPI从发送使能。
SPI模块中有 9个 寄存器 用于控制该模块的操作:
(1)SPICCR,SPI配置控制寄存器。
(2)SPICTL,SPI操作控制寄存器。
(3)SPISTS,SPI状态寄存器。
(4)SPIBRR,SPI波特率寄存器。
(5)SPIRXEMU,SPI仿真缓冲寄存器。
(6)SPIRXBUF,SPI串行输入缓冲寄存器。
(7)SPITXBUF,SPI串行发送缓冲寄存器。
(8)SPIDAT,SPI串行数据寄存器。
(9)SPIPRI,SPI优先级控制。
图9-2是SPI用于两个控制器(一个主控制器和一个从控制器)通信的典型连接方式。
SPICLK
SPICLK
SPISIMO SPISIMO
SPISTE*SPISTE*
SPISOMI
SPISOMI
主出/从入
SPI选通主入/从出串行时钟图9-2 SPI主/从控制器连接
SPI主控制器 SPI从控制器
9.2 SPI操作
?由图9-2可知,SPI有 两种 工作模式,主模式 和 从模式,操作模式由 SPICTL.2(MASTER/SLAVE位) 决定。
?主控制器控制SPICLK信号,通过发出SPICLK信号启动数据发送,从控制器则通过检测SPICLK信号接收数据。
?一个主控制器可以连接多个从控制器,但是 一次只允许一个从控制器给主控制器发送数据
SPI可工作于主模式或从模式。
SPICTL.2位---MASTER/SLAVE用来选择操作模式和
SPICLK的源。
(1)主模式将Master的数据传送给Slave,8位数据传送,传送完毕,
申请中断。
SPICLK
SPIMOSI
SPICLK
时钟
SPIMOSI
(2)从模式
8位数据传送,传送完毕,申请中断。
SPICLK
SPIMISO
SPISTE
SPICLK
时钟
SPIMISO
SPISTE
9.3 串行外设接口中断有 五个控制位 用于初始化串行外设接口的中断:
?SPI中断使能 位:SPI INT ENA (SPICTL.0);
?SPI中断标志 位:SPI INT FLAG(SPISTS.6);
?SPI超限中断使能 位:OVERRUN INT ENA(SPICTL.4);
?SPI接收器超限中断标志 位:RECEIVER OVERRUN
FLAG(SPISTS.7)
?SPI中断优先级选择 位:SPI PRIORITY(SPIPRI.6)。
9.4 数据格式
MSB 移位寄存器 SPIDAT LSB
?SPI通信时,要发送的数据从SPIDAT寄存器的MSB依次移出,接收的数据则从SPIDAT的LSB依次移入。
?SPI数据字符位数(1-16位)由SPICCR.3-0指定。
?当写入SPIDAT或SPITXBUF时,数据必须是左对齐的。
?数据从SPIRXBUF读回时是右对齐的。
9.5 SPI波特率和时钟模式
SPI模块支持 125种 不同的波特率和 4种不同的时钟模式 。SPI 最大波特率 为CLKOUT频率的四分之一。
9.5.1 SPI波特率的确定
SPI波特率取决于 CLKOUT和 SPIBRR的值。
(1)对于SPIBRR= 3-127
SPI波特率=CLKOUT/(SPIBRR+1)
(2) 对于SPIBRR= 0-2
SPI波特率=CLKOUT/4
SPI最大波特率=CLKOUT/4=10MHz
9.5.2 SPI时钟模式
SPI有 四种时钟模式,由CLOCK POLARITY 和CLOCK
PHASE位控制。 CLOCK POLARITY 位选择时钟的有效沿是上升沿还是下降沿,CLOCK PHASE位选择是否有半个时钟周期的延时。
(1)下降沿,无延时,SPI在时钟下降沿发送数据,在时钟的上升沿接收数据;
(2)下降沿,有延时,SPI在时钟下降沿前半个周期发送数据,在时钟的下降沿接收数据;
(3)上升沿,无延时,SPI在时钟上升沿发送数据,在时钟的下降沿接收数据;
(4)上升沿,有延时,SPI在时钟上升沿前半个周期发送数据,在时钟的上升沿接收数据。
4种时钟模式如图9-4所示。
9.6 SPI的复位和初始化系统复位使SPI管脚功能被选定为通用输入,要 对SPI的配置,需要做以下工作:
(1) 设置SPI SW RESET位(SPICCR.7)的值为0,强制
SPI复位;
(2) 初始化SPI的配置、格式、波特率和管脚功能为期望值;
(3) 设置SPI SW RESET位为1,从复位状态释放SPI;
(4) 向SPIDAT或SPITXBUF写数据;
(5) 数据发送完成后(SPISTS.6=1),读取SPIRXBUF已确定接收的数据。
SPI应用实例(控制串行D/A)
DAC714是 美国BB公司生产的16位具有串行接口的数模转换器,电压输出型,输出范围是-10V+10V。
串行时钟串行数据输入引脚数据更新使能引脚数据输入使能引脚
DAC714控制时序
DSP与DAC714连接框图
SPICLK
SPICLK
SPISIMO SDI
A0*SPISTE*
A1*
SPISOMI
串行数据
SPI选通串行时钟
2407 DAC714
UP/DA
由控制时序图可知,SPI时钟模式应为下降沿,无延时。即SPI在时钟下降沿发送数据,在时钟的上升沿将数据锁存到DAC714。
第10章 CAN控制器模块世界向着网络化方向发展,测控系统也不例外。
CAN总线的出现,使 控制系统的网络化 成为可能,是国际公认的一种现场总线协议。
CAN (Controller Area Network)总线是 德国Bosch
公司 为解决 现代汽车中众多的控制单元与测试仪器之间的数据交换 而开发的一种 串行数据通信协议 。
CAN总线问世以来,以高效率、低成本和快速性等特点迅速在汽车电子、测量仪器、控制系统得到广泛的应用。
CAN协议一般用来 管理控制器、传感器、执行器和人机接口 之间的数据传输; 使用双绞线,给用户提供了一种 低成本的系统连网 方案。
由于协议本身的优点,总线上的数据绝对不会发生冲突、数据遗失等现象,使得CAN广泛 用于环境恶劣的工业现场和自动化生产线 。
LF24xx系列DSP控制器作为第一个具有片上CAN控制模块的DSP芯片,给用户提供一个设计分布式或网络化运动控制系统的无限可能。
LF240X配置了一个符合 CAN2.0B协议 的CAN模块。
CAN总线是一种多主总线,通信介质可以是绞线、同轴电缆或光导纤维,通信速率可达1Mbps,通信 距离可达10km 。
CAN协议的个最大特点是 废除了传统的站地址编码,而代之以对通信数据块进行编码,使 网络内的节点个数在理论上不受限制。 由于CAN总线具有较强的纠错能力,支持差分收发,因而 适合高干扰环境,并具有较远的传输距离 。
CAN协议对于许多领域的分布式测控是很有吸引力的,
目前CAN已成为 IS011898标准,其特性如下:
(1)CAN是一种有效支持分布式控制和实时控制的串行通信网络。
(2)CAN协议 遵循ISO/OSI模型,采用了其中的物理层、
数据链路层与应用层。
(3)CAN可以 多主模式 工作,本质上也是 —种CSMA/CD方式,网络上 任意一个节点均可以在任意时刻主动地向网络上的其它节点发送信息,而不分主从,节点之间的优先级之分,因而通信方式灵活。
(4)CAN采用非破坏性位仲裁技术,优先级发送,可以大大节省总线冲突仲裁时间,在重负荷下表现出良好的性能。
(5)CAN可以 点对点、一点对多点(成组)及全局广播 等几种方式传送和接收数据。
(6)CAN的直接 通信距离最远可达10km(传输速率为
5Kbps);最高 通信速率可达1Mbps(传输距离为40m) 。
(7)CAN上的 节点数实际可达110个 。
(8)CAN数据链路层采用短帧结构,每一帧为8个字节,
易于纠错。可满足通常工业领域中控制命令工作状态及测试数据的一般要求。同时,8个字节不会占用总线时间过长,从而保证了通信的实时性。
(9)CAN每帧信息都有CRC校验及其它检错措施,有效地降低了数据的错误率。
(10)CAN节点在 错误严重 的情况下,具有 自动关闭 的功能,使总线上其它节点不受影响。
(11)信号调制解调方式采用NBZ(非归零)编码解码方式,并且采用插入填充位(位填充)技术。
(12)数据位具有支配,0” (Dominant bit)和退让,1”
(Recessive bit)两种逻辑值,采用时钟同步技术,
具有硬件自同步和定时时间自动跟踪功能。
CAN协议支持用于通信的4种不同的帧类型:
数据帧,从发送节点到接收节点传送数据。
远程帧,通过一个节点,使用相同的标志符请求一个数据帧的发送。
错误帧,在总线检测错误时,任意一个节点所发送的帧。
过载帧,在前面的和后面的数据帧之间提供一个额外的延时。
CAN标准数据帧包含 44到108位,而 CAN扩展数据帧包含 64到128位,另外,多达 23个填充位 可以插入到一个标准的数据帧中,多达 28个填充位 可以插入到扩展数据帧中,这要根据数据流的代码来定。数据帧的最大长度为131位,扩展数据帧的最大长度为156
位。
如图10-1所示,数据帧包含如下内容:
帧的起始;
包含标志符和被发送信息类型的仲裁域:
包含数据位数的控制域;
多达8个字节的数据;
循环冗余检查(CRC);
应答;
帧的结束
CAN总线所具有的卓越性能、极高的可靠性,设计独特,特别适合工业设备测控单元相连。 因此,备受工业界的重视,并已 被公认为工业界最有前途的现场总线之一。
CAN总线一般用双绞线,传输速率取绝于总线长度,
总线长度小于40m时,传输速率可达1Mb/s。
CAN总线的连接如下图所示,DSP需要通过一个CAN收发器连接到CAN总线上。
片内CAN模块
CAN收发器
SN75LBC031
TXD
RXD
CAN总线
CAN_L
CAN_H
图 CAN总线连接图第11章 看门狗(WD)定时器看门狗(WD)定时器外设 监视 软件和硬件的运行,在CPU混乱时
(如软件进入死循环或跑飞)完成系统的复位,从而提高CPU的可靠性 。
11.1 看门狗定时器概述看门狗(WD)定时器 结构框图 见下页,所有寄存器都是 8位 宽度。
具有如下特征:
(1) 8位WD计数器,作用是在 上溢时产生一个系统复位信号 。
(2) 6位的自行计数器,用于WD预定标,共6种选择。
(3) 一个WD 复位密钥(WDKEY)寄存器 。当一个 55h值 后紧随着一个 AAh值写入WDKEY时,则WD计数器清零,当不正确的值写入时,
则产生一个复位信号。
(4) 3个WD检验位。若WD定时器失效,则启动系统复位。
(5) 一旦系统复位后,WD定时器就自动启动。
WD预定标选择
8位WD
计数器
55+AA
探测器
WD检验位判断逻辑
WDCLK
系统复位请求
WD复位关键字寄存器
WD模块结构框图
11.2 WD操作
11.2.1 WD的时钟看门狗(WD)定时器的时钟 WDCLK是一个低频时钟,
WDCLK由CPU的输出时钟CLKOUT提供。
WDCLK=CLKOUT/512
11.2.2 定时器的悬挂因为 WDCLK的时钟是由 CLKOUT分频 产生的,当CPU被 挂起时(即CPU进入 HALT低功耗模式),WDCLK被停止 。
11.2.3 WD控制寄存器共有 3个寄存器 控制着WD的操作:
(1) WD计数寄存器( WDCNTR)—用来保存WD计数器的值。
位7-0,数据值。这些只读位包含了8位WD计数器的值,向该计数器 写无效 。向WD复位关键字寄存器写入正确的序列会清除
WDCNTR并且可阻止系统复位,但是并不会清除自行计数器。
(2) WD复位关键字寄存器( WDKEY)—当一个55h值后紧随写入一个AAh值,则清除WDCNTR。任何其他值都会引起系统复位。
位7-0,数据值。这些只写数据位包含了8位复位关键字值,
(3) WD定时器控制寄存器( WDCR) —包含用于看门狗配置的如下控制位,WD禁止位 ; WD标志位 ; WD检验位 (3个); WD预定标选择位 (3个)。
位7,WDFLAG,看门狗标志位。该位标识WD定时器是否产生了一个系统复位。
0:表明自上次清除该位后,WD定时器还没有产生复位。
1:表明自上次清除该位后,WD定时器已经产生了复位。
位6,WDDIS,看门狗禁止位。仅当SCSR2寄存器的WD OVERRIDE位为1时,该位才能被写。
0:看门狗被使能。
1:看门狗被禁止。
位5-位3,WDCHK2-WDCHK0,看门狗检验位(3个)。当向WDCR控制寄存器写时这三位 必须被写为101,否则产生系统复位。
位2-位0,WDPS2-WDPS0,看门狗 预定标选择位 。这些位决定了看门狗的溢出频率,如下页表所示。
52.416101
104.932011
209.764111
26.28001
13.14110
6.62010
3.281X00
最小上溢时间(ms)
WDCLK除数WDPS0WDPS1WDPS2
WD上溢时间选择注:CLKOUT默认为 40MHz
第12章 DSP开发工具与开发环境
DSP的软件、硬件的开发以及系统的集成,日益关注。
如何提高开发速度、降低开发难度,所有开发者共同关心。
除了必须了解DSP本身的结构和技术指标外,大量的时间和精力花费在熟悉和掌握开发工具和环境上 。
系统复杂程度的百分之八十取决于软件 。所以,设计人员都极为 看重先进的、易于使用的开发环境与工具。
DSP的开发环境如何,开发工具的功能是否丰富,使用是否方便,是一件十分重要的事情。
TI的DSP开发环境和工具主要包括以下 3个方面,
(1)代码生成工具 (编译器、链接器、优化C编译器、
转换工具等)
(2)系统集成及调试环境与工具
(3)实时操作系统一个DSP软件 可使用汇编或C语言编写源程序,通过编译、链接、工具产生DSP执行代码。
在调试阶段,可利用软件仿真在计算机上仿真运行;
也可利用硬件调试工具将代码下载到DSP中,并通过计算机监控、调试运行该程序。
当调试完成后,可将该程序代码固化到程序存储器中,
以便DSP目标系统脱离计算机单独运行。
12.1 系统集成与调试工具
12.1.1 软件模拟模拟器软件模拟器 是一种模拟DSP芯片功能并在非实时条件下进行软件调试的调试工具,它不需要硬件支持,只需在计算机上运行,是一种 廉价方便的调试工具,
软件模拟器 模拟DSP芯片的I/O口时采用与文件关联的方法来实现,因而 调试中所需的I/O值可从文件中读取,输出的I/O值也可存储在文件中 。
可以按用户定义的时间间隔,周期性的设置中断标志,
仿真中断信号.
在程序执行之前作初始化,设置断点及跟踪模式.
程序执行一旦终止,就可对内部寄存器、程序和数据存储器作检查和修改,也可显示跟踪寄存器。
整个仿真的记录可以做成一个文件,下次再做仿真的时候,运行该文件就可以恢复同样的机器状态。
软件模拟器的主要功能有,
(1)在计算机上执行用户的DSP程序;
(2)可修改和查看寄存器;
(3)可修改和查看程序和数据存储器,任何时候都可进行存储器的修改,也可在程序装入前进行存储器初始化;
(4)可模拟外设,高速缓存(Cache)及流水线、定时功能。
(5)可计算指令周期数。
(6)可编程的断点设置:可在取指令、读写存储器及错误条件满足时设置断点
(7)可进行累加器、程序计数器、辅助寄存器的跟踪
(8)指令的单步执行
(9)用户设定的中断产生间隔
(10)在遇到非法操作码和无效数据访问时提示错误信息
(11)从文件中执行命令早期的软件模拟器与其他的开发工具是分离的。使用起来不方便。现在已经作为CCS(Code Composer
Studio)的一个部件。
12.1.2 集成开发环境CCS
CCS(Code Composer Studio)是一个完整的集成开发环境,也是目前使用使用最为广泛的DSP开发软件之一。
最早由GO DSP公司为TI的VC6000系列开发,后来TI收购
GO DSP,并将CCS扩展到其它系列。 所有的TI DSP
都可以用CCS开发 。但目前只有VC5000和VC6000的
CCS中提供DSP/BIOS功能。因为,VC2000系列的CCS
中没有DSP/BIOS功能,也称为CC(Code Composer),
以示区别。
现在所有的TI DSP都可利用该软件工具进行开发。
一,CCS的功能
(1)集成可视化的代码编辑界面,可直接编写C、汇编、.H文件、.cmd文件等.
(2)集成代码生成工具,包括汇编器,优化C编译器,连接器等.
(3)基本调试工具,如装入执行代码,查看寄存器,存储器,反汇编,变量窗口等,支持C源代码级调试.
(4)支持多DSP调试
(5)可设置硬件断点、数据空间读/写断点、条件断点(使用GEL编写表达式)
(6)
(7)
(8)
二,为CCS安装驱动程序三,利用CCS开发DSP流程四,探针工具的使用五,图形工具的使用六,分析工具的使用
12.2 仿真器两种类型 的 仿真器
(1)传统的电路仿真器
(2)先进的扫描仿真器利用传统的电路仿真器进行硬件仿真,仿真器的仿真插头必须插入到硬件电路中DSP相应的位置。仿真插头引脚与DSP芯片引脚一一对应。
扫描仿真器不采用插入仿真的方法,而是通过DSP芯片上提供的几个仿真引脚实现仿真功能。这种方法为TI公司所开发,用来解决高速DSP芯片的仿真。
由于DSP芯片具有高度的并行结构、快速的指令周期、
高密度的封装,采用传统的电路仿真方法很难实现可靠的仿真。
12.2.1 各类仿真器及接口仿真器品牌:
(1)闻亭;(2)合众达(SEED);(3)中泰康
(4)其他计算机接口:
PCI接口/并行口/USB接口
DSP接口:
IEEE1149.1(JTAG)
扫描仿真消除了传统的电路仿真存在的问题:仿真电缆过长会引起信号失真,仿真插头的可靠性差的问题。
DSP是通过内部移位寄存器扫描链,实现扫描仿真。
采用扫描仿真,即使芯片已经焊在电路板上,也可进行仿真调试。带来了极大的方便。
12.2.2 JTAG接口仿真头采用14根信号线,仿真头 扫描仿真信号线采用JTAG标准IEEE1149.1。 如图12-1(b)所示。
仿真信号的定义 如表12-3
表12-3 JTAG仿真信号的定义信号 仿真头状态 DSP芯片状态 信号说明
TMS 输出 输入 JTAG测试方式选择
TDI 输出 输入 JTAG测试数据输入
TDO 输入 输出 JTAG测试数据输
TCK 输出 输入 JTAG测试时钟
TRST 输出 输入 JTAG测试复位
EMU0 输入 输出 仿真脚0
EMU1 输入 输出 仿真脚1
PD 输入 输出 指示仿真电缆连接
(在目标系统中应接至+5V)
TCK_RET 输入 输出 JTAG测试时钟返回注1,脚6 没有连接,而且应该把双排针连接器 该针脚去掉,仿真器的DSP连接器通常用此脚进行定位。
注2,根据IEEE1149.1标准,TDI、TCK、TMS、TRST *
四个引脚最好接上拉电阻 。另外 EMU0、EMU1两个仿真控制脚也最好接上拉电阻。
1
2
3
4
11
13
5
9
7
14
12
10
8
6
TMS
TDI
TCK
VCC
TDO
EMU0
TRST
*
EMU1
? DSP仿真环境
MP/MC* = 1,微处理器模式
VccP(Pin 50) = 5V
外部时钟要保证CPUCLK = 40MHz
仿真RAM(PS * or DS* 选通)
12.3 DSP开发环境
?Code Composer(v4.1)
CC For C2000
CC For C3xC4x
?Code Composer Studio(v2.2)
CCS 2000
CCS 5000
CCS 6000
其他开发工具:
?软件模拟器(Software Simulator)
?初学者开发套件DSK(DSP Starter Kit)
?软件评估模块EVM(Evaluation Module)
Code Composer特性:
?集成开发环境
?对C和DSP汇编文件的目标管理
?高集成的编辑器调整C和DSP汇编代码
?C代码优化编译功能
?丰富的调试手段:
断点、单步、
观察窗口、探针、图形分析寄存器、内存查看
?目标DSP的帮助
CC初始化未连接仿真器初始窗口正常连接仿真器初始窗口打开工程后窗口运行过程窗口工程编译选项(Project->Optoins->Compiler):
END
第13章 DSP程序设计主要内容:
(1)DSP C语言程序设计
(2)C语言与汇编语言混合编程
(3)DSP程序烧写
13.1 DSP C语言程序设计
DSP支持使用ANCI C 进行程序设计,并提供了相应的编译器和C优化编译工具,利用这些优化编译工具可以产生可与手工编写相比的汇编语言程序。
13.1.1 DSP C语言的特征
DSP C语言以ANSI C为基础,并对ANSI C进行了相应的限定和扩展。
以下是LF2407 C语言的一些不同于一般标准C的特征:
?标识符和常量
? 所有标识符的前100个字符是有效的,区分大小写。
? 不允许多字节字符。
? 多字符的字符常数按序列中的最后一个字符来编码。
例如,’abc’ == ’c’。
?数据类型
? 整型、双精度型等数据类型长度与常见编译器中数据类型不同,所有的浮点型都是由MS320C2x/C2xx/C5x的
32位的二进制浮点格式来表示。
? size_t(sizeof操作符的结果)定义为unsigned int。
? ptrdiff_t(指针加减的结果)定义为int。
?类型转换
? 浮点数转换为整型数为向零取整转换。
? 指针和整型数可以自由转换。
?表达式
? 当两个有符号整型数相除,如果两个数中任一个为负数,则商为负数,并且余数的符号与被除数的符号相同。
用斜线符号(/)可以得到商,用百分号(%)可以得到余数。
例如:10 / -3 = -3; -10 / 3 = -3;
10 % -3 = 1; -10 % 3 = -1;
? 有符号型数的右移是算术移位,符号被保留。
?声明
? 寄存器变量(register)声明对
short,integer,pointer等所有类型的变量都有效。
?预处理指令(#pragma)
? 预处理器会忽略所有不支持的预处理指令。
? 支持下列预处理指令:CODE_SECTION,
DATA_SECTION和FUNC_EXT_CALLED。
13.1.2 数据类型
?所有整数类型(char,short,int以及对应的无符号类型)都是相同的,都是由16位的二进制数来表示。
?长整型(long)和无符号长整型(unsigned
long)都是由32位的二进制数来表示。
?有符号类型都是由基2的补码来表示。
?字符型是有符号类型,等同于整型。
?枚举(enum)类型的对象用16位数来表示;在表达上与整型相似。
?所有浮点型(float,double和long double)相似,在TMS320C2x/C2xx/C5x中都是用32位浮点格式来表示。
?long和float类型以低有效字存储在低端的存储地址。
注,在TMS320C2x/C2xx/C5x C语言中,字节长度为16位,sizeof操作符返回的对象长度是以16位为字节长度的字节数。例如sizeof(int) = 1。
13.1.3 寄存器变量
C编译器 在一个函数中最多只能用两个寄存器变量,
而且必须在参数表或函数的开始处声明。在嵌套块中的寄存器变量定义被认为是一般的变量。
编译器用AR6和AR7作寄存器变量,
□ AR6被指定为第一个寄存器变量。
□ AR7被指定为第二个寄存器变量。
变量的地址放在指定的寄存器中,访问起来更加容易。16位的字节变量(char,short,int和pointer)
可以用作寄存器变量。
在运行时,设置每一个寄存器变量需要四条指令。
为了有效地利用这种方式,只有在一个变量被多次访问时,才使用寄存器变量。
程序优化编译器也会定义寄存器变量,但使用方式不同。编译器会自己决定哪些变量作为寄存器变量,
程序中声明的寄存器变量会全部被忽略。
13.1.4 asm语句
TMS320C2x/C2xx/C5x的 C编译器可以在编译器输出的汇编语言中直接嵌入汇编语言指令 。这种能力是C语言的扩展 —
—asm语句 。asm语句 能够实现一些C无法实现的功能。
/*******************************************************/
asm(" clrc INTM");
/******************************************************/
?对于 嵌入的汇编指令,编译器不会进行语法检查,
编程者必须确认嵌入的指令合理有效。
?使用asm指令的时候应小心不要破坏C语言的环境 。
如果C代码中插入跳转指令和标识符可能会引起不可预料的操作结果。能够改变块或其它影响汇编环境的指令也可能引起麻烦。
?对带asm语句的代码使用优化器时要特别小心。 尽管优化器不能删除asm指令,但它可以重新安排asm
指令附近的代码顺序,这样就可能会引起不期望的结果。
13.1.5 访问I/O空间
?I/O空间地址声明要在程序中访问io空间地址,必须首先用关键字
“ioport”对要访问的地址进行定义。
语法:ioport type porthex_num
ioport 声明io空间端口变量的关键字;
type 变量类型,可以为char,short,int或
unsigned int;
porthex_num 端口号,port后面接16进制数字。
/*******************************************/
ioport unsigned int port10;
/******************************************/
注,声明io空间地址必须在C文件起始声明,不允许在函数中使用ioport声明io空间地址。
?I/O空间地址访问访问用ioport关键字声明的I/O端口变量和访问一般变量没有区别。
/***********************************************************/
ioport unsigned int port10; /* 访问I/O端口10h的变量 */
int func ()
{
...
port10 = a; /* 写 a到端口 10h */
...
b = port10; /* 读取端口10h的值到 b */
...
}
/***********************************************************/
I/O端口变量的使用不仅仅局限于赋值,和其他变量同样也可以应用于其它的表达式 。
/***********************************************************/
call (port10); /* read port 10h and pass to call */
a = port10 + b; /* read port 10h,add b,assign to a */
port10 += a; /* read port 10h,add a,write to port 10h */
/***********************************************************/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
程序中访问的任何一个IO地址都必须在C语言程序起始处用ioport关键字声明!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
13.1.6 访问数据空间访问数据空间不需要对要访问的单元预先声明,访问是通过指针的方法实现的。
/***********************************************************/
unsigned int org,cnt,block,offset,tmp,i;
org = *(unsigned int *) 0x8000;
cnt = *(unsigned int *) 0x8001;
block = *(unsigned int *) 0x8002;
offset = *(unsigned int *) 0x8003;
for (i=0; i<cnt; i++)

tmp = *(unsigned int *) (org + i);
*(unsigned int *) (org + offset +i) = tmp;

/***********************************************************/
13.1.7 中断处理
(1)中断处理方法
?查询法程序通过查询中断标志位来判断是否有中断发生,并进行相应的处理。
优点,流程易于控制,不会发生中断嵌套的问题,一般也不会发生丢失中断的问题。
缺点,中断实时性差。
?回调法为中断指定一个回调函数,即中断服务程序。将中断服务程序的入口地址放在中断向量处。
优点,中断实时性好,程序结构简洁,类似于
windows操作系统下事件驱动的编程方式。
缺点,处理不好容易造成中断嵌套或丢失中断。
(2)回调法处理中断的一般性问题
?中断服务函数可以和一般函数一样访问全局变量、分配局部变量和调用其它函数等。
?进入中断服务函数,编译器将自动产生程序保护所有必要的寄存器,并在中断服务函数结束时恢复运行环境。
?c_int0是保留的复 位中断处理函数,不会被调用,也不需要保护任何寄存器。
?要将中断服务函数入口地址放在中断向量处以使中断服务函数可以被正确调用。
?中断服务函数要尽量短小,避免中断嵌套等问题。
(3)用C编写中断服务函数有两种方式定义中断服务函数:a)任何具有名为c_int d 的函数( d为0到
9的数),都被假定为一个中断程序,c _int0函数留作系统复位中断用。
b)利用中断关键词interrupt进行定义。举例如下:
/***********************************************************/
void c_int1 ()
{
......
}
/***********************************************************/
interrupt void isr ()
{
......
}
/***********************************************************/
(4)C语言编写中断处理函数注意事项:
?中断处理函数必须是void类型,而且不能有任何输入参数。
?进入中断服务程序,编译器只保护与运行上下文相关的寄存器,而不是保护所有的寄存器。中断服务程序可以任意修改不被保护的寄存器,如外设控制寄存器等。
?要注意IMR、INTM等中断控制量的设置。
?中断处理函数可以被其他C程序调用,但是效率较差。
?多个中断可以共用一个中断处理函数,除了c_int0。
?使用中断处理函数和一些编译选项冲突,注意避免对包含中断处理函数的C程序采用这些编译选项。
13.2 C语言与汇编语言混合编程
C语言编写DSP程序对底层的了解要 求较低,流程控制灵活,开发周期短。
程序可读性、可移植性好,程序修改、升级方便。
某些硬件控制功能不如汇编语言灵活,程序实时性不理想,很多核心程序可能仍然需要利用汇编语言来实现。
13.2.1 C语言与汇编语言混合编程的方式
? C语言调用汇编语言编写的函数
? 使用内嵌汇编语句(asm语句)
? C语言访问汇编语言变量
? 手动修改C语言程序编译后生成的汇编代码
13.2.2 存储器模式
TMS320C2x/C2xx/C5x的C语言编译器将存储器分为两个线性的空间:
? 程序存储器 存储可执行代码
? 数据存储器 存储各种变量和堆栈编译器将存储器以分段(section)的方法分配和管理,用户以不同的方式分配存储器,可以形成不同的系统配置。连接器将各个块连接在一起形成最终输出的存储器结构。
已初始化的段:
.text 包含所有可执行代码和浮点型常量 Page 0
.cinit 包含初始化变量和常量表 Page 0
.const 包含字符串常量,以及以const修饰的全局或静态变量的声明和初始化 Page 1
.switch 包含switch语句的分支跳转地址表 Page 0
未初始化的块:
.bss 为全局和静态变量保留空间 Page 1
.stack 为系统软件堆栈分配空间 Page 1
.system 为动态分配的内存保留空间,可以被calloc、
malloc、realloc函数使用 Page 1
13.2.3 系统堆栈系统堆栈分为硬件堆栈和软件堆栈。
DSP内部程序控制逻辑部分包含一定大小的堆栈,通常称为硬件堆栈,可以用来保存若干个分支、跳转、函数调用或中断服务程序的返回地址,也可以用来保存其它变量。
通过系统配置可以另外生成一定大小的软件堆栈,用来:
?分配局部变量
?传递函数参数
?保存处理器状态
?保存函数返回地址
?保存临时结果
?保存寄存器内容堆栈从低端地址向高端地址生成。编译器利用两个辅助寄存器来管理堆栈:
? AR1 堆栈指针(SP,stack pointer),指向当前堆栈顶。
? AR0 帧指针(FP,frame pointer),指向当前帧的起始点,每一个函数都会在堆栈顶部建立一个新的帧,
用来保存局部或临时变量。
C语言环境自动操作这两个寄存器。如果编写用到堆栈的汇编语言程序,一定要注意正确使用这两个寄存器。
用-stack连接选项可以指定软件堆栈的大小,用C编写DSP程序一定注意保留足够的堆栈空间!
注意:编译器不会检查堆栈溢出情况,堆栈溢出会破坏DSP
运行环境,导致程序失败。编写DSP程序和配置DSP存储器资源要注意防止堆栈溢出的发生。
13.2.4 动态分配内存
TMS320C2x/C2xx/C5x C语言可调用malloc、calloc或realloc
函数动态申请内存,申请的内存将分配在.system块。
动态分配的内存只能通过指针进行访问。将大数组通过这种方式来分配可以节省.bss块的空间。
通过连接器的-heap选项可以定义.system块。
/***************************************************/
unsigned int *data;
data =(unsigned int *) malloc (100 * sizeof (unsigned
int));
/***************************************************/
13.2.5 寄存器规则
TMS320C2x/C2xx/C5x运行环境对寄存器的使用有严格的要求,如果编写涉及到寄存器的汇编程序,必须严格遵守这些规则,否则可能造成系统工作异常。
寄存器规则规定了编译器如何使用寄存器,和寄存器在函数调用的过程中如何进行保护。
寄存器按照保护方式分为两种:
? 调用保存(save on call),调用其它函数的函数负责保存这些寄存器的内容。
? 入口保存(save on entry),被调用的函数负责保存这些寄存器的内容。
注:无论是否使用优化编译,都必须遵守这些寄存器规则。
寄存器的使用和保护
Yes
寄存器变量
AR6-AR7
No局部变量指针( LVP)AR2
Yes帧指针( FP)AR0
No
表达式运算/返回值
Accumulator
No
表达式运算
AR3-AR5
Yes堆栈指针( SP)AR1
调用时保护用途寄存器状态寄存器(ST0、ST1)单元
0
乘法移位模式
PM
-
符号扩展模式
SXM
0
溢出模式
OVM
-
数据页
DP
1
辅助寄存器指针
ARP
-
测试模式
TC
-
溢出标值
OV
-
进位标志
C
假定值名称单元对于有假定值(为 0或为 1)的状态寄存器单元,在进行函数调用和函数返回时必须保证其值为假定值。
13.2.6 函数结构与调用规则
TMS320C2x/C2xx/C5x运行环境对函数调用有严格的要求,要调用C函数或要被C程序调用的汇编语言程序必须遵守这些规则,否则可能破坏C运行环境,造成程序失败。
?当进行函数调用时,调用者要将传递参数压入系统堆栈传给被调用的函数,并将函数返回地址压栈。
?被调用的函数要在函数运行结束时将返回值放在累加器里返回给调用者函数。
可见函数参数及返回地址等都是通过堆栈传递的,要编写汇编函数,必须明确函数调用的过程中堆栈的变化和应该进行的处理进行函数调用过程中系统堆栈的变化
? 调用函数的工作:
?将参数反向压入堆栈(最右端的参数最先压栈,最左端的参数最后压栈),这样,当函数被调用时,最左端的参数会在堆栈的最顶部。
?调用被调用函数。
?当被调用函数返回时,调用者函数假定ARP已被设置为
AR1。
?当被调用函数运行结束时,调用者函数要将压入堆栈的参数弹出以恢复堆栈状态。
注:如果用C程序调用汇编语言程序,C编译器会自动产生代码完成这些工作。
? 被调用函数的工作:
?进入函数时,函数假定ARP已经被设定为AR1。
?将返回地址从硬件堆栈弹出,压入软件堆栈。
?将FP(SP)压入软件堆栈。
?分配局部帧。
?如果函数中要修改AR6、AR7,将它们压入堆栈,其它寄存器不用进行保护就可以进行修改。
?实现函数功能。
?如果函数返回标量数据,将它放入累加器。
?将ARP设定为AR1。
?如果保护了AR6、AR7,恢复这两个寄存器。
?删除局部帧。
?恢复FP(SP)。
?将返回地址从软件堆栈中弹出,压入硬件堆栈。
?返回。
?一些特殊的情况:
?返回一个结构:当函数的返回值为一个结构时,调用者函数负责分配存储空间,并将存储空间地址作为最后一个输入参数传递给被调用函数。被调用函数将要返回的结构拷贝到这个参数所指向的内存空间。
?不将返回地址移动到软件堆栈:当被调用函数不再调用其它函数,
或者确定调用深度不会超过8级,可以不用将返回地址移动到软件堆栈。
?不分配局部帧:如果函数没有输入参数,不使用局部变量,就不需要修改AR0(FP),因此也不需要对其进行保护。
13.2.7 C程序调用汇编函数
C程序调用汇编函数必须要满足前面介绍的调用规则和寄存器规则,C程序可以访问汇编语言定义的变量或调用汇编语言函数,同样汇编语言也可以访问C程序定义的变量或调用
C函数。
用C程序调用汇编函数有以下注意事项:
? 所有的函数(不论用C编写还是用汇编语言编写)都必须满足前面介绍的寄存器规则。
? 对于一些寄存器,如果函数要修改其内容,则必须事先对其进行保护。这些寄存器包括:
? AR0(FP)
? AR1(SP)
? AR6
? AR7
其它的寄存器可以不用保护自由使用。
? 如果函数改变了状态寄存器某些有假定值的位,则必须在函数结束前恢复其原有值。尤其要注意ARP必须为AR1

? 中断服务程序必须保护所有其用到的寄存器。
? long型和float型变量在存储器中的存储方式为低有效位在低端地址。
? 函数返回值要通过累加器进行传递。
? 编译器会在所有对象的名称前面加下横线,_”,因此汇编语言模块定义对象名称时也要以下横线为前缀,才能使定义的对象可以被C代码访问。例如C语言对象x在汇编语言中就是_x。汇编语言可以使用任何不带下横线前缀的变量而不会和C语言对象冲突。
? 任何汇编语言定义的对象,如果要被C程序访问,则必须用.global修饰。同样任何C语言定义的对象,如果要被汇编语言访问,也必须以.global修饰。
C程序调用汇编语言函数实例
13.2.8 使用内嵌asm语句在C程序中可以用asm语句插入单行汇编语句,用来实现用C
语言很难实现的功能。但是如果使用这种语句,一定小心不要破坏C运行环境,因为C编译器不会对这种插入的汇编语句进行检查或分析。
? 不要插入跳转或标签,否则会破坏编译器的堆栈处理算法,造成无法预期的后果。
? 不要修改C变量,但可以任意读取C变量当前值。
? 不要在内嵌汇编语句中书写修饰性汇编代码(如.text、
.data等),否则会破坏汇编环境。
内嵌汇编语句可以用来在编译输出结果中添加注释。
asm(,***** this is an assembly language comment”);
13.2.9 C程序访问汇编语言变量有时候需要在C程序中访问汇编语言变量,这通常有两种方式:
? 访问.bss块中的变量:
? 将要访问的变量定义在.bss块中。
? 用.golbal修饰要访问的变量。
? 在汇编语言中以下横线,_”为前缀声明要访问的变量。
? 在C语言中将变量声明为外部变量(extern),就可以进行正常访问。
? 访问非.bss块中的变量:
要访问非.bss块中的变量,通常的办法是在汇编语言中定义一个查找表,然后在C语言中通过指针来访问。
? 首先定义变量,而且最好放在独立的初始化块中。
? 定义一个全局的标识指向对象的起始点,这样对象可以分配在存储器空间的任何位置。
? 在C程序中将这个对象定义为外部对象(extern),并且对象名称不带下横线,_”前缀,就可以对其进行正常访问。
13.2.10 修改编译器输出结果程序设计者可以检查和修改C编译器输出的汇编语言程序,然后再对其进行汇编编译和连接。
在C语言可以使用内嵌汇编语句在编译输出结果中添加注释,以改善编译器输出汇编程序的可读性。
/***************************************************/
asm(,***** this is an assembly language comment”);
/***************************************************/
13.2.11 系统初始化
C程序开始运行时,必须首先初始化C运行环境,这是通过
c_int0函数完成的,这个函数在运行支持库(rts,
runtime-support library)中。连接器会将这个函数的入口地址放置在复位中断向量处,使其可以在初始化时被调用。
c_int0函数进行以下工作以建立C运行环境:
?为系统堆栈产生.stack块,并初始化堆栈指针。
?从.cinit块将初始化数据拷贝到.bss块中相应的变量。
?调用main函数,开始运行C程序。
用户可以对c_int0函数进行修改,但修改后的函数必须完成以上任务。
13.3 DSP程序烧写
DSP程序编写完成,调试无误后,就可以将程序烧写到DSP的
FLASH(EEPROM)中,使DSP可以脱离仿真器独立运行。
烧写DSP程序也要通过仿真器来进行,仿真器制造者会提供相应的烧写程序。要注意不同型号的DSP往往使用不同的烧写程序,不同类型的仿真器对烧写环境也会有不同的要求,使用前要详细阅读相应说明(readme)。
? MP/MC*模式置为0(微计算机模式)
? 仿真RAM不被PS*信号选中
DSP烧写步骤:
?清除flash内容 (bc0.bat,bc1.bat)
将FLASH(EEPROM)中的所有位清零(set to 0)。
?擦除flash内容 (be0.bat,be1.bat)
将FLASH(EEPROM)中的所有位置位(set to 1)。
?把目标程序写进flash中 (bp16k.bat,bp32k.bat)
将FLASH(EEPROM)中的所有选中的位清零(set to
0)。
烧写程序需要注意,
? 电路元件初始化同步问题:由于外部器件初始化可能较慢,
DSP初始化完成后要等一会儿再访问外部慢速器件 。
? 用仿真器执行速度比较慢,循环时间比较长,而烧写到DSP中可能时间比较短,要对决定循环时间的循环次数重新考虑。
? 用仿真器调试的时候,DSP运行的一些资源(如堆栈等)用的是仿真器中的资源,烧写到DSP中执行必须利用DSP本身的资源,
烧写前必须对.cmd文件中定义的各种资源进行详细考虑。
? 连接仿真器的时候和不连接仿真器的时候电路板上负载状态不同,可能改变板上某些信号的抖动情况,若有某部分功能模块工作不正常,可能是由上述原因引起的干扰造成的。
? 浮点数运算的问题:考虑用全局变量,因为局部变量都是在堆栈里生成的,对堆栈要求太多。

主要四部分内容:
(1)DSP2407概述
(2)系统概貌:系统配置和中断、存储器和I/O空间、
时钟和低功耗模式、数字输入输出
(3)片内外设:事件管理器、ADC,SCI,SPI,CAN、
WD
( 4) 系统开发和基于C语言的软件设计
DSP2407

(1)DSP与其他处理器(单片机、PC) 相比独有的特点
(2)DSP能进行快速的数字信号处理运算的原因
(3)TMS320LF2407A内部资源
(4)TMS320LF2407A引脚定义
R1.1 DSP
(1)哈佛结构;(2)流水线结构;
(3)硬件乘法器和特殊的数字信号处理指令
R1.2 TMS320LF2407A
(1)10位 ( 双 8路或单16路 ) A/D转换器,转换时间
375nS;
( 2) 41个可独立编程的数字I/O引脚;
(3)带锁相环PLL的时钟模块;
(4)看门狗定时器模块;
(5)串行通信接口SCI与 串 行外设接口SPI;
( 6) 两个事件管理器EVA,EVB,可为所有类型电机提供控制技术,在工业自动化方面的应用奠定了基础:
* 2个 16位通用定时器;
* 3个具有死区功能的全比较单元;
* 3个 事件捕捉单元,其中2个具有直接连接光电编码器脉冲的能力;
* 8个 16位 PWM通道--三 相 反 相器控制;
(7)5个外部中断(两个驱动保护、复位、两个可屏蔽中断);
(8)CAN 2.0B 模 块
( 9) 用 于 仿真的JTAG接口。
(10) 片内存储器:32K字 闪 存,2.5K字 RAM
R1.3 TMS320LF2407A
§地址、数据、存储器控制信号
§事件管理器A(EVA)
§事件管理器B(EVB)
§模数转换器
§CAN,SCI,SPI
§外部中断、时钟
§振荡器、锁相环、闪存、引导及其他
§仿真和测试(JTAG)
§电 源 电压


(1)DSP2407的中断系统
(2)DSP2407的存储器映射
(3)DSP2407锁 相 环 的 工作方式
(4)DSP2407数字I/O引脚的使用
R2.1 DSP2407
(1)众多中断源
(2)包含不可屏蔽中断和六个中断优先级的可屏蔽中断
( 3) PIE外部中断扩展控制器管理
(4)两级中断模式(外设中断向量寄存器PIVR)
( 5) 两 级 中断服务函数(GISR/SISR)
R2.2 DSP2407
R2.2.1
可寻址三个独立的空间:程序空间、数据空间和
I/O空间,每个空间最大寻址能力为64K。
绝大部分外设控制寄存器都映射在片内数据空间,
只有等待状态发生器映射在片内I/O空间。
R2.2.2
FLASH,32K,程 序 空间
RAM,2.5K
SARAM,2K,程 序 空间/数据空间
DARAM,544字
BO,256字,程 序 空间/数据空间
B1,256字,数 据 空间
B2,32字,数 据 空间
R2.2.3 DSP2407
( 1) 内部时钟:只需外接晶体振荡器
(2)外部时钟:把外部时钟接至XTAL1/CLKIN脚
R2.2.4 DSP2407 I/O
( 1) 最 多 41个 数字I/O引脚,绝大部分有复用功能
(2)区别I/O引脚与I/O空间
(3)使用数字I/O引脚:
配置引脚功能
设定I/O方 向
读写数据位

R3.1
(1)事件管理器的功能部件及用途
(2)通用定时器:功能/工作方式/比较输出
(3)比较单元的功能
(4)捕捉单元和光电正交编码器输入单元的基本原理
R3.1.1
有两个事件管理器EVA和 EVB,每 个 事件管理器包括:
(1)2个通用定时器:计数/定时、提供时基、比较输出
( 2) 3个 比 较 单 元,死区控制、SVPWM控制、波形发生器
(3)3个捕捉单元:记录事件时刻
(4)1个光电编码器解码模块:获取外部旋转机械的方向、速度、位置等信息
(5)三组中断,占用中断级别2,3,4
比较单元只能用定时器1/3,光电编码器只能用于定时器2/4。
R3.1.2
( 1) 通用定时器的功能:计数/定时、比较、提供时基
( 2) 通用定时器的四种工作方式:
停止/保持模式
连续增计数模式
定向增减计数模式
连续增减计数模式
(3)通用定时器的比较输出每个通用定时器有1个比较输出引脚,可以输出对称/非对称的PWM波形,具有输出控制逻辑
R3.1.3
使用定时器1或定时器3作为时基,每个比较单元有两个PWM输出引脚。与定时器的比较输出不同,比较单元的输出具有死区控制和SVPWM控制功能,在早期的产品中也称为全比较单元。
R3.1.4
(1)捕捉单元两级FIFO堆栈
(2)光电正交编码器解码模块可以为定时器2或定时器4提供计数方向和计数时钟,输出时钟是引脚输入信号的四倍频。使用光电正交编码器作为定时器计数时钟和计数方向控制时,定时器必须工作在定向增/减计数模式。
R3.2 ADC
(1)10bit精度,375ns转换时间
(2)带有内部采样保持器
(3)16路 输入,两个8状态排序器(SEQ1和 SEQ2)
或 级联成1个16状态排序器(SEQ)
( 4) 有 多个启动ADC转换的触发源:
§软件立即启动
§EVA事件管理器启动
§EVB事件管理器启动
§ADC的 SOC引脚启动
R3.3 SCI
(1)异步,全双工
(2)可编程的数据位数和停止位、奇偶校验位
(2)16位 波 特 率 发 生 器,最高波特率2.5M
( 3) 两 种 唤醒多处理器协议
§空闲线模式:适合于大数据块传输
§地址位模式:适合于小数据块传输
( 4) 三 种 常见的串行通信协议RS-232、
RS-422,RS-485
R3.4 SPI
(1)通信中分为主控制器/从控制器
(2)125种 不 同 的 波 特 率,最大波特率为
CLKOUT的四分之一
(3)四种时钟模式
§上升沿,无延时
§上升沿,有延时
§下降沿,无延时
§下降沿,有延时
R3.5 WD
( 1) 8位 计数器,上溢时产生一个系统复位信号
(2)WD的时钟为CLKOUT的 1/ 512,可 以 进行 预 定 标
C

(1)建设仿真调试环境
(2)软件开发环境
(3)软件开发语言
(4)COFF文 件 格 式
( 5) CCS工程中的各种文件
(6)DSP C语言
R4.1 DSP
( 1) 仿真RAM
( 2) MP/MC*选择
(3)VccP( 5V)
R4.2
(1)CC-Code Composer,no DSP/BIOS
( 2) CCS-Code Composer Studio,with
DSP/BIOS
R4.3
( 1) 汇 编 语言高效指令,代码效率高、底层控制灵活、实时性好指令集掌握困难,程序可读性、可维护性、可移植性差,流程控制困难,
开发周期长适用于运算量大、实时性要求高的场合
(2)C语言程序可读性、可维护性、可移植性好,修改、升级方便,流程控制容易,
开发周期短某些硬件控制不便,实时性不好适用于运算量小,实时性要求不高的场合
(3)汇编与C混合编程综合利用两种语言的优越性,用C语言实现流程控制,用汇编语言实现时序或效率要求严格的核心程序
R4.4 COFF
( 1) 按照“段”对程序进行组织,有利于模块化编程
(2)段是程序中的一个数据或代码块,最终实现为存储器中的一部分连续空间
(3) COFF目标文件至少包含以下三个默认段:
.text段 ( 文 本 段 ) 通 常 包含可执行代码
.data段 ( 数 据 段 ) 通 常 包含初始化的数据
.bss段 ( 保 留 空间段)通常为没有初始化的变量保留空间
R4.5 CCS
.pjt (CCS工程文件)
.mak ( CC工程文件)
.cmd 连接命令文件(定义存储器空间并确定输出各段的位置)
.lib 库文件(开发环境自带)
.h 头文件(DSP寄 存器定义文件等)
.c c源 文 件
.asm 汇 编程序文件(中断向量定义)
.obj 编 译后的目标文件(COFF)
.out 可在目标DSP上执行的文件(COFF)
R4.6 DSP C
DSP C语言以ANSI C为 基 础,并 对 ANSI C进行了相应的限定和扩展。
R4.6.1 DSP C ANSI C
(1)没有16位 以 下 的数据类型
(2)增加关键字:ioport,interrupt,register

( 3) 内 嵌 汇 编 语 句 asm(" clrc INTM");
R4.6.2 DSP CI/O
(1)用关键字“ioport”对 要 访问的地址进行定义
ioport type porthex_num
( 2) 定义后的I/O端 口 访问和一般变量访问没有区别
/***********************************************************/
ioport unsigned int port10; /* 访问I/O端 口 10h的 变 量 */
int func ()
{
...
port10 = a; /* 写 a到端口 10h */
...
b = port10; /* 读取端口10h的 值到 b */
...
}
/***********************************************************/
R4.6.3 DSP C
访问数据空间不需要对要访问的单元预先声明,访问是通过指针的方法实现的。
val = *(unsigned int *)addr;
*(unsigned int *)addr = val;
用这样的访问方法容易实现循环:
/***********************************************************/
pInt= (int * ) 0x201;
for(i = 0;i<4;i++)
{
* (pInt+i) = i+1;
}
/***********************************************************/
R4.6.4 DSP C
有两种方式定义中断服务函数:a)任何具有名为c_intd 的 函数 ( d为 0到 9的数),都被假定为一个中断程序,c_int0函 数留 作 系统复位中断用。
b)利 用 中断关键词interrupt进行定义。举例如下:
/***********************************************************/
void c_int1 ()
{
......
}
/***********************************************************/
interrupt void isr ()
{
......
}
/***********************************************************/
R4.6.5 DSP C
有以下几种混合编程方法:
qC语言调用汇编语言编写的函数
q使用内嵌汇编语句(asm语 句 )
q C语言访问汇编语言变量
q手动修改C语言程序编译后生成的汇编代码
哈尔滨工业大学
数字信号处理器原理与应用
课程实验指导书
哈尔滨工业大学自动化测试与控制系
2005 年 6 月
目 录
i
目 录
第一部分 ICETEK–LF2407-A 评估板硬件使用指导
第一部分 ICETEK –LF2407-A评估板硬件使用指导,............................................................................1
第一节ICETEK-LF2407-A板级产品介绍,................................................................................................1
1.1 ICETEK-LF2407-A概述,............................................................................................................1
1.2 ICETEK-LF2407-A 板功能,......................................................................................................1
1.3 结构框图,..................................................................................................................................1
第二节 板上器件功能与使用方法,........................................................................................................1
2.1 ICETEK-LF2407-A板构造,........................................................................................................1
2.2 ICETEK-LF2407-A 板的使用,..................................................................................................2
2.2.1 电源管理,......................................................................................................................2
2.2.2 ICETEK-LF2407-A板的存储器空间,............................................................................2
2.2.3 I/O空间,........................................................................................................................3
2.2.4 用户开关和指示灯,......................................................................................................4
2.2.5 选择振荡器,..................................................................................................................4
2.2.6 数模转换,......................................................................................................................4
2.2.7 JTAG接口,......................................................................................................................5
2.2.8 SPI口,............................................................................................................................5
2.2.9 异步串口,......................................................................................................................5
2.2.10 CAN总线,......................................................................................................................5
2.2.11 ICETEK-LF2407-A 跳线,..........................................................................................5
2.2.12 指示灯状态,.................................................................................................................7
2.2.13 用户可控指示灯,........................................................................................................7
2.2.14 复位,............................................................................................................................8
2.2.15 用户使用开关,.............................................................................................................8
2.2.16 ON/OFF开关,................................................................................................................8
2.2.17 测试端,........................................................................................................................8
第二部分 ICETEK–LF2407-A教学实验系统使用指导,........................................................................9
第一节 ICETEK DSP教学实验箱简介,..............................................................................................9
1.1 ICETEK DSP教学实验箱的特点,..............................................................................................9
1.2 ICETEK DSP教学实验箱的功能,..............................................................................................9
1.3 ICETEK DSP教学实验箱的组成,............................................................................................10
1.4 ICETEK DSP教学实验箱性能指标,........................................................................................11
1.5 ICETEK DSP教学实验箱结构图,............................................................................................12
第二节 教学实验箱硬件接口和编程说明,..........................................................................................12
2.1 ICETEK DSP教学实验箱的外围接口,....................................................................................12
2.2 ICETEK DSP教学实验箱硬件编程,........................................................................................14
2.2.1 液晶显示模块编程控制,............................................................................................14
2.2.2 发光二极管编程控制,................................................................................................16
2.2.3 发光二极管显示阵列编程控制,................................................................................16
2.2.4 步进电机编程控制,....................................................................................................16
目 录
ii
2.2.5 蜂鸣器编程控制,........................................................................................................17
2.2.6 键盘输入编程控制,....................................................................................................17
2.2.7 直流电机编程控制,.....................................................................................................17
第三节 ICETEK DSP教学实验箱操作手册,..........................................................................................17
3.1 ICETEK DSP教学实验箱的使用,............................................................................................17
3.1.2 连接各模块电源,........................................................................................................18
3.1.3 连接DSP评估板信号线,..............................................................................................18
3.2 ICETEK DSP教学实验箱使用注意事项,................................................................................18
3.3 ICETEK DSP教学实验箱故障判断及排除,............................................................................18
3.3.1 无法接通电源,.............................................................................................................18
3.3.2 信号源没有输出,........................................................................................................18
3.3.3 显示/控制模块上步进电机不转,..............................................................................19
3.3.4 显示/控制模块上液晶没有显示,..............................................................................19
3.3.5 直流电机不停转动,....................................................................................................19
3.3.6 无法进入CCS软件仿真,..............................................................................................19
4.1 教学实验箱:ICETEK-EDU,....................................................................................................19
4.2 通用DSP开发系统:ICETE K5100-PP或ICETEK5100-USB,....................................................19
4.3 DSP控制板:ICETEK-LF2407-A,............................................................................................19
4.4 通用控制板:ICETEK-CTR,....................................................................................................20
第三部分 ICETEK–LF2407-A评估板软件实验指导,..........................................................................1
实验一 数据存取实验,....................................................................................................................1
实验二 I/O控制模块实验,..............................................................................................................6
实验三 定时器实验,........................................................................................................................9
实验四 模数转换实验,..................................................................................................................15
实验五 数模转换实验,..................................................................................................................23
实验六 PWM实验,............................................................................................................................28
实验七 外设控制实验—发光二极管阵列显示实验,..................................................................33
实验八 外设控制实验—液晶显示器控制显示实验,..................................................................38
实验九 外设控制实验—键盘输入实验,......................................................................................45
实验十 外设控制实验—步进电机控制实验,..............................................................................52
实验十一 直流电机控制实验,......................................................................................................57
实验十二 异步串口通信实验,......................................................................................................65
实验十三 快速傅立叶变换(FFT)算法实验,............................................................................72
哈尔滨工业大学——DSP 原理与应用实验指导书
II-1
第一部分 ICETEK–LF2407-A评估板硬件使用指导
第一节ICETEK-LF2407-A板级产品介绍
1.1 ICETEK-LF2407-A概述
ICETEK-LF2407-A 板是一块独立的目标板,它非常适合检验 LF2407 DSP 的性能,此外,本目标板提供了 LF240x 系列芯片进行扩展和运行软件的标准平台。
ICETEK-LF2407-A 板使用了 TMS320LF2407 DSP 芯片,兼容所有 LF2407 的使用代码,它具有 2.5K 字节的片上数据存储器,128K 板上存储器,片上 UART,
DAC7625 数模转换器。此 EVM 板还提供了 DSP 的扩展引脚,方便了用户外搭所需电路。
许多用户接口可利用简单的代码进行扩展,从而缩短了调试时间。
1.2 ICETEK-LF2407-A 板功能
它主要的接口包括目标存储器接口、模拟接口、CAN 总线接口、并口、用户指示灯和开关、外部扩展接口。
LF2407 提供了 128K 的静态存储器,外部 I/O 口支持相应的 64k I/O 端口,片上的 CAN 总线和 RS232 端口可用做扩展连接。
1.3 结构框图
ICETIK-LF2407-A 板的结构框图如图 1-1 所示。
第二节 板上器件功能与使用方法
本节描述了 EVM 板的构造和使用方法并提供了 EVM 板上接口的资料。
2.1 ICETEK-LF2407-A板构造
ICETEK-LF2407-A 板由 6 个主要部分组成,
·LF2407 外部存储器
·A/D,D/A 转换
·串口
·指示灯和开关
·片上 CAN 总线
·SPI 口
·DSP 扩展引脚
·JTAG 接口
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 2
A /
D D
D A
R T
E A
S
S P3
DAC7625
D/A
A E
N X
A P
L A
O N
G S
|
P2 O
N
SRAM
128K x 16
DATA ANALOG
ADDRESS
TMS320LF2407
CONTROL
PWM/IO
I/O
SPI JTAG UART
C
O
N
T P4
R
O
L
SWITCHES
LEDs
I E
/ X
O P
A
N
S
|
P1 O
N
CAN
DRIVER
C
A
N
I
/
F
SERIAL
BOOT
ROM
LOGGING
INTERFACE
JTAG
P5
S
E
R P6
I
A
L
2.2 ICETEK-LF2407-A 板的使用
2.2.1 电 源管理
LF2407 使用的是 5V 电源输入,输入后在板上要对其进行降压,使其降为 3.3V
的内部电源,但板子需要 750 毫安的电流,要满足这个电流就必须从电路板上 2 毫米的插孔 J1 输入一个 5V 的电源。
2.2.2 ICETEK-LF2407-A 板 的存储器空间
ICETEK-LF2407-A 板包括 64K 程序存储器,64K 数据存储器,合计为 128K 片上的静态存储器。
内部存储器在存储时比外部存储器具有更高的 优先级,如果您需要更多关 于
ICETEK-LF2407-A 板的存储器资料,请您查阅 TI TMS320LF2407 Users Guide。
? 程序存储器
程序存储器存在两种配置,我们可以通过 JP6 上的跳线选择使用哪一种结构,
如果 JP6 选择为 2-3,那 么 DSP 处于 MC 方式,并且其内部闪存从 0x0000 到 0x7fff
被激活,如果选择的为 1-2,那么内部 Flash 和 Rom 是不可用的,并且全部的程序存储空间都映射到外部存储器。
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 3
? 数据存储器
下图是数据存储器的结构,外部存储器从 0x8000-0xffff 有效,
0000
005F
0060
007F
0080
01FF
0200
02FF
0300
03FF
0400
07FF
0800
0FFF
1000
6FFF
7000
73FF
7400
743F
7440
74FF
7500
753F
7540
77FF
7800
7FFF
外部寄存器
JP7 = 1-2
无效区
保留区域
8000
FFFF
管理器 B
保留区域
外部存储器映射寄存器
管理器 A
外部存储器映射寄存器
(系统,ADC,SCI,SPI,I/O,中断)
无效区
单存取访问 DON = 1
外部 DON = 0
保留区域
片上双存取访问 B0’( CNF = 0)
保留区域 CNF = 1
片上双存取访问 B0( CNF = 0)
保留区域 CNF = 1
保留区域
片上双存取访问 B2
存储器映射寄存器
保留区域
2.2.3 I/O 空间
下图显示的是 ICETEK-LF2407-A 板的 I/O 空间分配,
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 4
0000
0004
0005
0007
0008
0009
000B
000C
000D
7FFF
外部空间 8000
FFFF
保留区域
指示灯
保留区域
4 种 DIP 开关
保留区域
D/A 转换
2.2.4 用 户开关和指示灯
ICETEK-LF2407-A 板有 4 处开关和 4 个指示灯,方便使用,它们分别被设置在
I/O 映射区内的 0x0008 和 0x000C 地址上,使用 IN 或 OUT 指令,可以控制指示灯
D0 ~ D3。
2.2.5 选 择振荡器
ICETEK-LF2407-A 板具有一个 15M 的振荡器,内核 CPU 接收到输入时钟
CLKIN/2( CPUCLK),在重新复位后,PLL 时钟模块预定义为 CPUCLK/4,大约为
2M 的输出。 PLL 能够编程为 CPUCLK*4,这样的结果就可以得到 30M 的输出时钟。
关于 PLL Clock Module 的详细资料,请查阅 TMS320LF2407 User’s Guide。
2.2.6 数 模转换
ICETEK-LF2407-A 板,提供了 4 路 12-bit 的数模转换,转换后输出的将是从 0 ~
3.3V 的直流电,转换器占用了 I/O 地址空间中 0x000 ~ 0x0004 的部分,0x000 ~ 0x0003
分别是数据寄存器的 4 条通路,地址 0x0004 用于寄存器控制,也就是说,您能在同一时间内分 4 路向寄存器写入数据并进行转换。
表 2-1 DAC I/O 地址
I/O 地址
0x0000
0x0001
0x0002
0x0003
转换 0x0004
4
3
2
1
通路
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 5
2.2.7 JTAG 接口
ICETEK-LF2407-A 板具有一个 14 根引脚的接口 P5,我们可以通过这个 JTAG
口对 TI 生产的 DSP 芯片进行仿真。
2.2.8 SPI 口
ICETEK-LF2407-A 板上具有与并口 SPI515 相兼容的 SPI 口,通过 SPI 口可以进行高速的数据传输。
如果需要使用此 SPI 口,那么跳线 JP4 就应该选择 2-3 脚。
2.2.9 异 步串口
ICETEK-LF2407-A 板上具有一个符合 RS232 标准的 DB9 孔的异步串口 P6,我们可以通过这个串口进行数据的传输和计算机 之间的通讯。如果用户要使用串口进行通讯,就要对跳线 JP10,JP11,JP12,JP14 进行设置。
2.2.10 CAN 总线
ICETEK-LF2407-A 板具有一个 4 孔的小型 CAN 接口 P7,这个串口可以进行高速的信号传输,如果用户使用此 CAN 接口,则要修改跳线 JP12 的设置。
CAN 总线的插头是一个 4 孔的连接器 P7。
2.2.11 ICETEK-LF2407-A 跳线
ICETEK-LF2407-A 板具有 16 根跳线。
下图显示了 ICETEK-LF2407-A 板上所有跳线所在位置 (可以参考前面的电路版图,图 2- 1 上的标注),
? 跳线 1,能 /否使用 CAN 总线
跳线 1 可以控制能 /否使用 CAN 总线。 选择 2-3 可以使用,选择 1-2 则不能使用。
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 6
? 跳线 2,选择 CAN 总线输入
跳线 2 可以选择 CANRX 输入信号的来源,如果选择了 1-2,CAN 总线直接可以接收 CAN 总线上的输入,如果选择了 2-3,则 CANRX/IOPC7 连接到 P4 的 24 脚接收传来的信号。
? 跳线 3,选择串行 EEPROM 的写保护
串行 EEPROM 可以被写保护,以防止 ROM 中的内容被破坏。
跳线 3 就可以设置单存取存储器写保护的状态,选择 1-2 时可以向 ROM 中写入内容,如果选择 2-3 就设置了写保护状态。
? 跳线 4,选择 SPI 口通讯
跳线 4 可以选择 SPI 口通讯方式,SPI 口可以选择外部扩展接口 /串行 EEPROM
或 P8 的数据输入。 如果选择 1-2 就可以通过 SPI 口进行数据的装载,如果选择 2-3,
则就要通过外部扩展口 /单存取存储器进行数据的装载。
? 跳线 5,能 /否进行 FLASH 编程
跳线 5 连接了 LF2407 的 VCCP 管脚,在 LF2407 上 VCCP 管脚可以设置对内部闪存编程的设置,它还允许进行看门狗的设置,LF2407 User’s Guide 详细介绍了如何进行看门狗的设置。
? 跳线 6,MP/MC 能否进行内部闪存的设置
跳线 6 与 LF2407 上的 MP/MC 管脚相连,当选择 1-2 时,内部闪存是不可使用的,如果选择 2-3,则内部闪存可用。
? 跳线 7,模拟信号输入管理
跳线 7 控制了 ICETEK-LF2407-A 板的模拟信号输入,当选择 1-2 时系统滤掉数字信号保留模拟信号装载到 EVM 板,当选择 2-3 时,则模拟信号要经由 P2 装载到
EVM 板。
? 跳线 8,选择高电位
跳线 8 使用的是 LF2407 上的 VREFHI 管脚,当选择 1-2 时电压为 3.3V,如果选择 2-3,则控制电压通过 R1 把管理电压降为 0-3.3V。
? 跳线 9,选择低电位
跳线 9 使用的是 LF2407 上的 VREFLO 管脚,当选择 1-2 时电压为,0”接地,
如果选择 2-3,则控制电压通过 R2 转化为 0-3.3V。
? 跳线 10,能否通过 DTR-复位
跳线 10 允许在 P7 端口进行复位,当选择 2-3 时就是把 P7 的第 4 脚拉低进行复位,如果选择 1-2 则不能复位。
? 跳线 11,能否向 BIO/IOPC1 发送请求
跳线 11 连接到 P6 口的 DSP’S BIO-/IOPC1 管脚。当选择 1-2 时不能发送请求,
选择 2-3 时可以发送请求,这是使用串口进行通讯时硬件所必须的握手协议。
警 告
? 跳线 12,能否从 SCIRXD/IOPA1 接收到数据,
如果选择 2-3 脚,那么一定不要从 P4 上设置 BIO-/IOPC1 脚。
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 7
跳线 12 能对 P6 上的 DSP’S SCIRXD/IOPA1 管脚进行设置,当选择 1-2 时可以接收到数据,当选择 2-3 时不能进行数据的接收并且 SCIRXD/IOPA1 管脚可进行外部扩展连接。
警 告
如果选择 2-3 脚,那么一定不要从 P4 上设置 SCIORXD/IOOA1 脚。
? 跳线 13,选择震荡源
跳线 13 使用了 ICETEK-LF2407-A 上的输入时钟,当选择 1-2 时就选择了板上震荡器,当选择 2-3 时则从 P4 的 31 脚进行时钟的设置。
? 跳线 14,选择 DTS/RTS
跳线 14 选择 DSP 所接收的是否是时实信号。 当选择 1-2 时,DSP 所接收的是固定信号,当选择 2-3 时 DSP 所能接收的是时实信号。
? 跳线 15,选择由 SPI/SCI 装载
跳线 15 允许用户选择片上程序装载的方式。 用户可选择 SPI 或 SCI 中的任何一种方法进行程序的装载,当选择 1-2 时就是选择了 SPI 口进行装载,当选择了 2-3 时就是选择了 SCI 口装载。
? 跳线 16,选择输入
ICETEK-LF2407-A 板可以通过外部扩展接口或 RS232 口把数据装载到
EEPROM,使用 BOOT-LOAD 之前一定要进行跳线 6 的设置,如果选择从 SPI 口进行 BOOT-LOAD 那么还要对跳线 4 进行设置,并且跳线 16 要选择 2-3,跳 线 15 要选择 SPI 口装载方式。如果选用 RS232 进行 BOOT-LOAD 就不需要进行设置跳线 4,
跳线 6 还继续以前的设置,跳线 15 选择为 SCI 口装载方式,跳线 16 选择 1-2,这 样就可以进行 BOOT-LOAD。
2.2.12指示灯状态
ICETEK-LF2407-A 板上具有 3 个指示灯,两个受软件控制,DS3 是板子上电时的指示灯,下图显示了他们的关系,
2.2.13 用户可控指示灯
ICETEK-LF2407-A 板具有 4 个可以由用户进行编程设计的指示灯,在 I/O 空间中 0x000c 地址内写入二进制数就可以对这些指示灯进行控制,下图显示了他们的关系,
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 8
2.2.14 复位
ICETEK-LF2407-A 板可以进行多重复位,第一次复位产生与对 U12 的调整,这个设置将等待 LF2407 的 RESET 管脚上的电压到内部电压到达指定范围为止。
系统也可以进行输入输出的复位,内部复位是利用看门狗在 RS-管脚拉底的情况下产生的,外部复位是只要选择 SW1,主 机复位是要对 P4 的 4 和 13 管脚进行设置,
使其产生复位信号。
SW1 是用户复位开关,按下这个开关,ICETEK-LF2407-A 即刻就会复位。
2.2.15 用户使用开关
ICETEK-LF2407-A 具有一个 4 点的双列直插开关 SW2,每个开关都可手动进行设置。 这个开关可以通过修改 I/O 中的地址 0x0008 进行设置,设置为,ON” 时所读的数就为,1” 。下图显示了他们的关系,
2.2.16 ON/OFF开 关
开关 SW3 可以控制模拟和数字信号的输入,当它设置为,ON”时,EVM 板可以使用。
2.2.17 测试端
ICETEK-LF2407-A 板提供两个测试端,它们是一个接地一个模拟接地的两个探针。下图显示了他们的关系,
哈尔滨工业大学——DSP 原理与应用实验指导书
II-9
第二部分 ICETEK–LF2407-A教学实验系统使用指导
第一节 ICETEK DSP教学实验箱简介
1.1 ICETEK DSP教学实验箱的特点
? 完备性:提供完整的DSP实验环境。硬件上包括DSP仿真器、评估板、信号源、控制模块;软件上提供仿真软件、完全使用手册和实验例程。可以进行与DSP应用相关的大部分实验和测试。
? 易用性:完备的使用说明和实验手册使使用者可以轻松上手、尽快熟悉 DSP
使用的相关操作,多功能的控制模块提供从图象到声音、从输入到输出多种形象直观的显示、控制手段,使用户的知识得到感性的结果,从而加深对DSP
的理解。
? 直观性:提供液晶图象显示、发光二极管阵列显示、电机指示等视觉实验效果,信号源也提供了容易控制、简单明了的测试手段,使实验现象能更加直观、具体、明确地展示出来。
? 灵活性:支持使用 ICETEK5100PP 和 ICETEK5100USB 仿真器;在接口相同的前提下,支持多种系列的评估板,如:ICETEK-LF2407-A板、ICETEK-VC33-A
板、ICETEK-VC5416-A板、ICETEK-VC33-AE板、ICETEK-C6713-A板和已经或即将推出的多种评估板。各模块更换操作简单、安装容易,可以适用各种教学需求。
? 适用性:针对DSP能同时进行多路信号处理的特点;提供两个独立的信号源,
可单独设置,四路波形输出,充分测试DSP的并行数字信号处理能力。
1.2 ICETEK DSP教学实验箱的功能
? 两个独立的信号发生器,可同时提供两种波形、四路输出;信号的波形、频率、幅度可调。
? 多种直流电源输出。支持对仿真器和评估板的直流电源连接插座。
? 显示输出:液晶图象显示器(LCD),可显示从DSP发送来的数据;发光二级管阵列(LEDArray);发光二极管;马达指针0-360度指示。
? 音频输出:可由 DSP I/O 脚控制的蜂鸣器;D/A 输出提供音频插座,可直接接插耳机。
? 键盘输入:可由DSP回读扫描码;同时键盘产生中断信号作为DSP的外中断输入。
? 步进电机:四相步进电机,可由DSP I/O端口控制旋转和方向、速度。
? 直流电机:可以接收DSP输出的PWM控制信号,实现电机的转速和方向控制。
? 底板提供插座,可使用插座完成DSP评估板上的A/D信号输入和D/A输出。
? 测试模块:提供14个测试点,可以测量PWM输出、AD输入和DA输出波形。
? 软件资料:相关DSP设计编程使用教材、实验教程、使用说明、实验程序等。
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 10
1.3 ICETEK DSP教学实验箱的组成
箱盖
ICETEK-CTR
显示 /控制模块
信号源
仿真器模块
DSP 系统板 模块
底板
箱体
如图所示,ICETEK DSP 教学实验箱主要由以下几个部分组成,
? 箱盖,保护实验箱设备; 保存教材,使用手册,实验指导书,各种实验用的连线;可拆卸,在实验中可从箱体上拆下;带锁,可在关闭时用钥匙锁住。
? 箱体,装载实验箱设备; 左侧外壁上有一个标准外接电源线插孔; 通过固定螺丝与实验箱底板连为一体。
? 底板,固定各模块; 提供电源开关,实验用直流电源插座(3),A/D D/A输入输出插座(8),各模块直流供电插座(5),信号插座(6),信号源输出插座(4)、
测试点(14);实现显示控制模块和 DSP评估板模块的信号互连。
? 信号源:两组、四路输出,可使用专门开关启动;提供切换选择输出方波、
三角波和正弦波,另可选择输出频率范围 (10Hz-100Hz,100Hz-1KHz,
1KHz-10KHz,10KHz-100KHz),还可进行频率和幅度(0-3.3V)的微调。
? 仿真器模块:固定 ICETEK 仿真器,支持 PP 型和 USB 型;提供 PP 型仿真器供电 5V电源插座;仿真器可从底板上拆下更换。
? 显示控制模块:通过信号线连接到底板;从底板提供的 5V 和 12V 直流电源插座输入电源; 提供液晶图形显示(128x64 象素),发光二极管阵列显示(8x8
点),指示灯(12 只,分为红,黄,绿三种颜色),四相步进电机,直流电机,
键盘(外接 PSII接口),蜂鸣器。显示控制模块可从底板上拆下更换。
? 测试模块:提供对常用信号的测试点,其中有 PWM 信号(4 路,仅针对 DSP
哈尔滨工业大学——DSP 原理与应用实验指导书
II-11
系统为ICETEK-LF2407-A的实验箱)、模数转换信号(4路)、和数模转换信号
(4路),另外还包括两个地线(DGND、AGND)。
? DSP评估板模块:固定各种DSP评估板;提供5V直流电源插座(两个位置);
34Pin信号线插座(4个),用于连接DSP评估板和实验箱底板。DSP评估板模块可从底板上拆下更换。
1.4 ICETEK DSP教学实验箱性能指标
? 直流电源:+5V(5A),+12V(1A),-12V(0.5A),地
? 信号源(A、B),
-双路输出
-频率范围:分为 4 段(10Hz—100Hz,100Hz—1KHz,1KHz—10KHz,
10KHz—100KHz),可通过拨动开关进行选择
-频率微调:在每个频率段范围内进行频率调整
-波形切换:提供3种波形(方波,三角波,正弦波),可通过拨动开关进行选择
-幅值微调:0—3.3V平滑调整
? 信 号 接 插 孔,4 路 A/D 输 入 (ADCIN0-ADCIN3),4 路 D/A 输 出
(DACOUT1—DACOUT4),每路均提供信号和地
? 显示/控制模块(可选),
-液晶显示(LCD):128×64点阵图形显示屏,可调整显示对比度
-发光二极管显示阵列:8×8点阵
-发光二极管
-蜂鸣器
-步进电机:四相八拍,步距角5.625,起动频率≥300PPS,运行频率≥900PPS
-直流电机:空载转速3050转/分,输出功率1.35W,启动力矩21.3N
-键盘:PSII接口,标准键盘
-拨动开关(DIP):4路,可实现复位和设置DSP应用板参数
? 电源输入:220V交流
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 12
1.5 ICETEK DSP教学实验箱结构图
第二节 教学实验箱硬件接口和编程说明
2.1 ICETEK DSP教学实验箱的外围接口
? 外围接口 PA,
2407-A 扩展接口 P4(其中连接到实验箱底板的引脚加下划线,其他未连接 )
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 13
? 外围接口 PB,
2407-A 扩展接口 P3(其中连接到实验箱底板的引脚加下划线,其他未连接 )
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 14
? 外围接口 PC,
2407-A 扩展接口 P2(其中连接到实验箱底板的引脚加下划线,其他未连接 )
2.2 ICETEK DSP教学实验箱硬件编程
显示控制模块有一个全局控制寄存器,地址映射在 2407 的 I/O 扩展空间上,地址为 8000H。其各位上的定义如下,
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
GS LEDA2 LEDA1 LEDA0 BUZZE PWME IOPE DCME
GS:全局控制标志位
LEDA2-0:发光二极管阵列列显示控制位
BUZZE:蜂鸣器使能
PWME:PWM 控制使能
IOPE:通用 I/O端口(FSX0)直接控制交通灯北方向红灯使能
DCME:直流电机使能
例如需要使能直流电机,可以用以下 C 语言语句,
port8000=1;
2.2.1 液 晶显示模块编程控制
液晶显示模块的访问、控制是由 2407DSP 对扩展 I/O 接口的操作完成。
控制 I/O 口的寻址,命令控制 I/O 接口的地址为 0x8001,数据控制 I/O 接口的地址为 0x8003 和 0x8004,辅助控制 I/O 接口的地址为 0x8002。
显示控制方法,
-液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的象素,向其中写入数值将改变显示,写入,1”则显示一点,写入,0”则不显示。其地址与象素的对应方式如下,
哈尔滨工业大学——DSP 原理与应用实验指导书
II-15
左侧显示内存 右侧显示内存
Y= 0 1 · · · 62 63 0 1 · · · 62 63 行号
DB0 DB0 DB0 DBO DBO DBO DBO DBO DBO DBO 0
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
X=0 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 7
DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 8
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 55
X=7 DB0 DBO DBO DBO DBO DBO DBO DBO DBO DBO 56
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 63
-发送控制命令:向液晶显示模块发送控制命令的方法是通过向命令控制 I/O 接口写入命令控制字,然后再向辅助控制接口写入 0。由于液晶模块相对于 DSP 来讲是慢速设备,在命令之间可能需要增加延时语 句。下面给出的是基本命令字、解释和 C 语言控制语句举例。
·显示开关:0x3f打开显示;0x3e关闭显示;
port8001=0x3f; port8002=0; //将液晶显示打开
port8001=0x3e; port8002=0; //将液晶显示关闭
·设置显示起始行:0x0c0+起始行取值,其中起始行取值为0至63;
port8001=0x0c0; port8002=0; // 设置从存储器第0行开始显示
port8001=0x0c8; port8002=0; // 设置从存储器第8行开始显示
·设置操作页:0x0b8+页号,其中页号取值为0-7;
port8001=0x0b0; port8002=0; //设置即将操作的存储器第0页
port8001=0x0b2; port8002=0; //设置即将操作的存储器第2页
·设置操作列:0x40+列号,其中列号为取值为0-63;
port8001=0x40; port8002=0; //设置即将操作的存储器第0列
port8001=0x44; port8002=0; //设置即将操作的存储器第4列
-写显示数据:在使用命令控制字选择操作位置 (页数、列数) 之后,可以将待显示的数据写入液晶显示模块的缓存。将数据发送到相应数据控制 I/O 接口即可。由于液晶模块相对于 DSP 来讲是慢速设备,在命令之间可能需要增加延时语句。C 语言语句举例说明,
port8003=0x80; port8002=0; //向左侧屏幕缓存存入数0x80,
//如果显示行、页号和列号均为0
//时,屏幕上第8行第1列将显
//示黑色象素
port8004=0x01; port8002=0; //向右侧屏幕缓存存入数据1,如
//果显示行、页号和列号均为0
//时,屏幕上/第1行第65列将显
//示黑色象素
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 16
2.2.2 发 光二极管编程控制
显示 /控制模块上的发光二极管是由连接在 2407DSP 扩展 I/O 接口上的寄存器
EWR 和 SNR 控制的。这两个寄存器均为 6 位寄存器,其位定义见下表,
EWR,
bit5 bit4 bit3 bit2 bit1 bit0
东-红 东-黄 东-绿 西-红 西-黄 西-绿
SNR,
bit5 bit4 bit3 bit2 bit1 bit0
南-红 南-黄 南-绿 北-红 北-黄 北-绿
两个寄存器的地址均映射到 2407DSP 的 I/O 空间,地址为 8007H,DSP 通过对
I/O 区域该地址的写操作来修改两个寄存器上各位的状态,当寄存器某位取‘ 1’值时,相应指示灯被点亮,取‘ 0’值则熄灭。当写入 8007H 的数据 (8 位有效值 )的高两位为 ‘ 00’时,数 据 的 低 6 位将写入 EWR 寄存器; 当高两位的值为 ‘ 01’时,写入 SNR 寄存器。
例如:需要点亮东、西方向的红灯和南、北方向的绿灯,其它灯均熄灭时,可以用下面 C 语句完成。对于高速 DSP,可能需要在两个语句之间加入延时语句。
port8007=0x024; port8007=0x49;
2.2.3 发 光二极管显示阵列编程控制
发光二极管显示阵列的显示是由 I/O 扩展端口控制,DSP 须将显示的图形按列的顺 序存储起来 (8× 8 点阵,8 个字节,高位在下方,低位在上方 ),然后定时刷新控制显示。具体方法是,将以下控制字按先后 顺序,每两个为一组发送到全局控制寄存器的第 6-4 位和端口 0x8005,发送完毕后,隔不太长的时间 (以人眼观察不闪烁的时间间隔 )再发送一遍。由于位值为,0”时点亮,所以需要将显示的数据取反。
000B,第 8列数据取反;001B,第 7列数据取反;
010B,第 6列数据取反;011B,第 5列数据取反;
100B,第 4列数据取反;101B,第 3列数据取反;
110B,第 2列数据取反;111B,第 1列数据取反。
注意:在使用前须在 I/O 端口 8007 写入控制字 0x0C1,以打开此设备。关闭时写 0x0C0。
2.2.4 步 进电机编程控制
步进电机是由寄存器 PWMR控制。 这个寄存器映射在 2407DSP的 I/O空间 8007H
上,当 DSP 向该地址写数据 (8 位有效值 )时,高两位为 ‘ 10’ 时数据的低 4 位将写入
PWMR 寄存器 (PWM4,PWM3,PWM2,PWM1)。
WM1-4 按照下面拍的顺序给电机的四相输入端 送入控制信号,且频率大于
500PPS,电 机将开始正向转动。 如果按照拍的逆序送控制信号,且频率大于 500PPS,
电机将开始反向转动。
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
II- 17
拍 PWM4 PWM3 PWM2 PWM1
1 1 1 1 0
2 1 1 0 0
3 1 1 0 1
4 1 0 0 1
5 1 0 1 1
6 0 0 1 1
7 0 1 1 1
8 0 1 1 0
控制的方法是,首先设置全局控制寄存器中的 PWME 位为 ‘ 1’,再 使 DSP 以一定的频率改变 PWM4-1 各位状态,输出正向或反向的 PWM 波。
2.2.5 蜂 鸣器编程控制
蜂鸣器由 DSP 通用 I/O 管脚输出控制,可将此管脚上的频率输出转换成声音输出。 2407 的通用 I/O 口 BDX0 控制蜂鸣器的输出频率。
控制的方法是首先设置全局控制寄存器中的 BUZZE 位为‘ 1’,再使用 DSP 通用定时器设置 BDX0 以一定的频率改变高低状态,输出方波。
2.2.6 键 盘输入编程控制
键盘的扫描码由 DSP 的 I/O 扩展地址 0x8001 给出,当有键盘输入时,读此端口得到扫描码,当无键被按下时读此端口的结果为 0。读取的方法如下,
nScanCode=port8001; nnn=port8002; // nScanCode 中为扫描码
2.2.7直 流电机编程控制
直流电机需要加上适合的电压 (1.5-3.0V)、通过一定的电流 (0.12A)才能转动,当电流改变时会使电机转速改变,当电流的方向 发生变化时,电机会朝相反的方向转动。
显示控制模块将 C2407DSP 的通用 I/O 管脚 BFSR1 的输出接到直流电机控制电路,利用此管脚上输出的 PWM 波形的占空比变化来产生受控改变的电流,再利用另一个通用 I/O 管脚 BCLKXR0 上的电平信号控制电流的方向。
具体控制的方法是:首先设置全局控制寄存器中的 DCME 位为‘ 1’,再通过改变 BFSR1 的状态在此管脚上输出可以改变占空比的 PWM 波,同时设置 BCLKXR0
为高电平则顺时针转动,低电平为逆时针转动。
第三节 ICETEK DSP 教学实验箱操作手册
3.1 ICETEK DSP教学实验箱的使用
3.1.1 连 接电源打开实验箱,取出三相电源连接线;将电源线的一端插入实验箱外部左恻箱壁上的电源插孔中;确认实验箱面板上电源总开关 (位于实验箱底板左上角 )处于“关”
的位置;连接电源线的另一端至 220V 交流供电插座上,保证稳固连接。
哈尔滨工业大学——DSP 原理与应用实验指导书
II-18
3.1.2 连接各模块电源
确认断开实验箱总电源;使用电源连接线 (两端均为带孔的插头 )连接显示 /控制模块上边插座到实验箱底板上+12V 电源插座;使用电源连接线( 两端均为带孔的插头)
连接显示/ 控制模块下边插座到实验箱底板上+5V 电源插座;如使用 PP(并口) 型仿真器,则使用电源连接线( 两端均为带孔的插头) 连接仿真器上插座到实验箱底板上+5V
电源插座;使用电源连接线( 两端均为带孔的插头) 连接 DSP 评估板模块电源插座到实验箱底板上+5V 电源插座。注意各插头要插到底,防止虚接或接触不良。
3.1.3 连接DSP评估板信号线
当需要连接信号源输出到 A/D 输入插座时,使用信号连接线( 两端均为单声道耳机插头) 分别连接相应插座。
3.1.4 接通电源检查实验箱上 220V 电源插座( 箱体左侧) 中保险管是否完好,在连接电源线以后,
检查各模块供电连线是否正确连接,打开实验箱上的电源总开关( 位于实验箱底板左上角),使开关位于“开”的位置,实验箱底板上的电源指示灯亮。
3.2 ICETEK DSP教学实验箱使用注意事项
? 拆卸各模块时请务必将实验箱总电源关闭;
? 不使用显示/控制模块时将相关电源开关关闭;
? 3.220V 交流电源线连接须牢靠,勿使发生虚接或接触不良,并保证良好地连接地线;
? 实验箱底板上标称值不同的直流电源不能直接跨接;
? 实验箱底板上直流电源不能直接跨接地线;
? 不要直接连接电源和信号插座;
? 显示/控制模块上的两个电源插座不要连接错误,上边插座为+12V,下面的为
+5V;
? 连接不同类型的插座时,请再三确认无误后进行;
? 不要带电拔插各模块;
? 不要带电拔插仿真器和DSP评估板上JTAG插头的连接电缆;
? 如无特殊情况,请勿打开实验箱底板;
? 不要带电拔插键盘插头;
? 如遇实验箱冒烟等异常现象请立即关闭总电源,并查找原因。
3.3 ICETEK DSP教学实验箱故障判断及排除
3.3.1无法接通电源
请检查外接电缆是否完好;电缆是否与实验箱边插座连接妥当;电缆是否与外接插座连接紧密;检查实验箱上 220V 电源插座( 箱体左侧) 中保险管是否完好。
3.3.2 信号源没有输出
请确认相应信号源的开关是否打开;检查相应信号源的“幅值微调”旋钮是否处在最小位置;信号连接线是否连接好。
哈尔滨工业大学——DSP 原理与应用实验指导书
II-19
3.3.3 显示/控制模块上步进电机不转
请检查显示/ 控制模块的+12V 电源是否连接,开关是否打开;摸一下电机指针看是否有振动,如有试着拨动一下是否能恢复转动。
3.3.4 显示/控制模块上液晶没有显示
请调节显示/ 控制模块上液晶对比度调节电位器 R2。
3.3.5 直流电机不停转动
如果有的话退出 CCS 启动运行的程序;将显示/ 控制模块的电源开关关闭后再打开。
3.3.6 无法进入CCS软件仿真
? 断掉实验箱电源,拔掉 usb 电缆从仿真器上,重新插 usb 电缆,检查 usb
上的红灯和绿灯是按照先红后绿的次序来亮的。然后再打开实验箱电源。
? 请按照后面的实验一来配置软件和驱动。
? 请用ctrl,alt delete三个键盘键组合进入win2000操作系统的任务管理器,看看“进程”中是否有“CCS_app.exe”的进程,有的话,请先关闭,
然后再点击进入CCS软件。
第四节 教学实验系统技术指标
(型号:ICETEK-LF2407-USB-EDU / ICETEK-LF2407-PP-EDU )
4.1 教学实验箱:ICETEK-EDU
? 实验箱自带双信号发生器,产生10HZ-100K(±10%)信号,包括方波,正弦波和三角波。
? 自带电源转换设计,直接输入220V电源,分别产生多路+5V和+12V电源。
? 设计A/D和D/A的直接输入输出接口,实验连接方便,并可以连接示波器。
特点:双信号发生器设计,更加贴近 DSP 的实际应用。因为许多实际的情况都是需要对两个信号进行相关分析。
4.2 通用DSP开发系统:ICETEK5100-PP或 ICETEK5100-USB
? 开发系统支持C2000/VC33/C5000/C6000 DSP 的开发;
? 并口或USB口连接,适合于目前的各种计算机接口。
特点:通用开发系统和 DSP 控制板分离,有利于将来 DSP 的升级。同时,也可以脱离实验箱单独从事科研开发使用。
4.3 DSP控制板:ICETEK-LF2407-A
? 主处理芯片:TMS320LF2407A,运行速度为40MIPS,128K存储空间;
? 16路10bit 片上A/D接口;
? 片上双重的管理器PWM;
? 4路的DAC7625转换;
? UART串行接口,符合RS232标准;
? 32K片上FLASH;
? CAN总线标准接口;
哈尔滨工业大学——DSP 原理与应用实验指导书
II-20
? 用户开关和测试指示灯;
? 数据、地址、I/O、控制,4处扩展连接器;
? 具有IEEE1149.1相兼容的逻辑扫描电路,该电路仅用于测试和仿真;
? +5V电源输入,内部3.3V电源管理;
? 1带片内加密位。
4.4 通用控制板:ICETEK-CTR
? 液晶:128*64图形显示
? 键盘:17键财务数字键盘(标准PS2接口)
? LED阵列:8*8
? 发光二极管控制:12个(交通灯)
? 蜂鸣器:无源,1个
? 步进电机:12V,四相八拍,>500PPS,1个
? 直流电机:1.5V,0.12A,3050转/分,1个
特点:这是一个通用的控制模块,可以和多种 DSP 控制板连接,如 C2000 系列,
C5000 系列,VC33 系列,C6000 系列等。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-1
第三部分 ICETEK–LF2407-A评估板软件实验指导
实验一 数据存取实验
一.实验目的
了解 TMS320LF2407A 的内部存储器空间的分配及指令寻址方式。
了解 ICETEK-LF2407-A 板扩展存储器空间寻址方法,及其应用。
了解 ICETEK-2407-EDU 实验箱扩展存储器空间寻址方法,及其应用。
学习用 Code Composer Studio 修改、填充 DSP 内存单元的方法。
学习操作 TMS320C2xx 内存空间的指令。
二.实验设备
计算机,ICETEK-LF2407-EDU 实验箱(或 ICETEK 仿真器 +ICETEK-LF2407-A
系统板+ 相关连线及电源)。
三.实验原理
TMS320LF240x DSP 内部存储器资源介绍
TMS320LF240x 系列 DSP 基于增强的哈佛结构,可以通过三组并行总线访问多个存储空间。它们分别 是:程序地址总线( PAB),数据读地址总线( DRAB)和数据写地址总线(DWAB )。由于总线工作是独立的,所以可以同时访问程序和数据空间。
TMS320LF240x 系列 DSP 的地址映象被组织为 3 个可独立选择的空间:程序存储器(64K 字),数据存储器(64K 字),输入/ 输出(I/O )空间(64K 字)。
*程序区,
00- 7FFFh,如DSP工作在MC方式,片内32k FlashMP方式,
片外扩32k展存储器
8000-87FFh,PON位=1,片内2k SARAMPON位=0,片外2k
扩展存储器
8800-FDFFh,片外2k扩展存储器
FE00-FEFFh,CNF位=1,保留空间
CNF位=0,片外扩展存储器
FF00-FFFFh,CNF位=1,为片内DARAM(B0)
CNF位=0,为片外扩展存储器
*数据区,
0000-005Fh,寄存器映射地址,保留区
0060-007Fh,片内DARAM(B2)
0080-00FFh,非法访问区
0100-01FFh,保留区
哈尔滨工业大学——DSP 原理与应用实验指导书
III-2
0200-02FFh,CNF位=0,片内DARAM(B0)
CNF位=1,保留区
0300-03FFh,片内DARAM(B1)
0400-04FFh,保留区
0500-07FFh,非法访问区
0800-0FFFh,DON位=1,片内2k SARAM
DON位=0,保留区
1000-6FFFh,非法访问区
7000-7FFFh,外设寄存器映射地址区
8000-FFFFh,片外扩展存储器
*I/O区,
0000-FEFFh,片外扩展区
FF00-FF0Eh,保留区
FF0F-FF0Fh,Flash控制模式寄存器
FF10-FFFEh,保留区
FFFF-FFFFh,等待状态寄存器
ICETEK-LF2407-A 板对 TMS320LF2407A DSP 存储空间的扩展
程序区:扩展所有片外扩展存储器
数据区:扩展所有片外扩展存储器
I/O区,
0000-0004h,D/A转换控制寄存器
0005-0007h,保留
0008-0008h,板上DIP开关控制寄存器
0009-000Bh,保留
000C-000Ch,板上指示灯控制寄存器
000D-7FFFh,保留
ICETEK-LF2407-EDU 实验箱对 TMS320LF2407A DSP 存储空间的扩展
I/O区,
8001-8001h,读-键盘扫描值,写-液晶控制寄存器
8002-8002h,液晶控制寄存器
8003-8004h,液晶显示数据寄存器
8005-8005h,发光二极管显示阵列控制寄存器
8006-9FFFh,保留
四,实验程序
main()
{
哈尔滨工业大学——DSP 原理与应用实验指导书
III-3
int * pInt;
int * pDes;
int i;
pInt= (int * ) 0x201;
pDes= (int * ) 0x301;
for(i = 0;i<4;i++)
{
* (pInt+i) = i+1;
}
for(i=0;i<4;i++)
{
* (pDes+i) = * (pInt+i);
}
while(1)
{
}
}
五.实验步骤
1,实验准备
⑴,连接设备,
① 关闭计算机和实验箱电源;
② 检查 ICETEK-LF2407-A 板上 JP6 的位置,应连接在 1-2 位置(靠近 DSP
芯片端),即设置DSP工作在MP方式;如使用PP型仿真器则用附带的并口连线连接计算机并口和仿真器相应接口;
③ 关闭实验箱上的三个开关。
⑵,开启设备,
① 打开计算机电源;
② 打开实验箱电源开关,打开 ICETEK-LF2407-A 板上电源开关,注意板上指示灯DS1灭、DS2和DS3亮;
③ 如使用 USB 型仿真器用附带的 USB 电缆连接计算机和仿真器相应接口,
注意仿真器上两个指示灯均亮。
⑶,设置Code Composer Studio为Emulator方式。
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 4
⑷,启动 Code Composer Studio,双击桌面上,,图标,启动 Code Composer
Studio 2.2。
2,打开工程文件
打开菜单,Project”的,Open”项 ;选 择 D:\2407EDULab\Lab1-Memory 目录中的,Memory.pjt” 。
右键单击工程管理窗口中的,GEL Files”,单击,Load GEL…”,选择工程目录中的 init.gel 文件。
3,观察修改程序区
(1) 显示程序,选择菜单,View” 的,Memory…” 项; 在,Title” 中输入 PROG,
在,Address” 项中输入 0x40,选 择,Page”项 为,Program” ;单 击,OK” 按钮;
,PROG” 窗口中显示了从地址 40H 开始的程序内存,由于 ICETEK-LF2407-A
板设置 DSP 工作在 MP 方式,窗口中显示的是片外扩展程序存储单元的内容;根据
cmd 文件中的设置,下载后的机器代码的入口应从 44H 处存放。
(2)改程序区存储单元
程序区单元的内容由 CCS 的下载功能填充,但也能用手动方式修改;双击
,PROG” 窗口地址,0x0040:” 后的第一个数,显示,Edit Memory”窗 口,在,Data”
中输入 0x1234,单 击,Done” 按 钮,观察,PROG” 窗 口中相应地址的数据被修改。
(3)观察修改数据区
① 显示片内数据存储区 B0,选择菜单,View” 的,Memory…” 项; 在,Title”
中输入 DARAM B0,在,Address” 项中输入 0x200; 单击,OK” 按钮;,DARAM
B0” 窗 口 中 显 示 了 从 地 址 200H 开 始 的 数 据 内 存 ; 这 片 地 址 属 于 片 内
DARAM B0。
② 显示片内数据存储区 B1:按照步骤⑴打开“DARAM B1”窗口显示从地址
0x300开始的片内 DARAM B1区的数据单元。
③ 修改数据单元:数据单元也可以单 个进行修改,只需双击想要改变的数据单元即可;选择菜单“Edit”,,Memory”,,Fill…”,在“Address”
项中输入 0x200,在,Length” 中输入 16,在,Fill” 中输入 0x11,单击“OK”按钮,可在 200H 开始的数据区中的头 16 个单元填充统一的数
0x11; 观察,DARAM B0” 窗口的变化; 同样请将 0x300开始的头 16个单元的值用 0填充。
④ 访问未扩展的区域,当访问未扩展的存储单元时,将不能正确修改内容;
选择菜单,View”的,Memory…”项;在“Title”中输 入 NO EXIST,
在,Address” 项中输入 0xA000,选择,Page” 项为,I/O” ; 单 击,OK”
按钮;,NO EXIST” 窗口中显示了未扩展而不存在的 I/O 空间内存;
试着修改其中的单元,可发现无法进行任何改动。
4,运行程序观察结果
⑴ 编译和下载程序,单击菜单,Option”,,Program Load…”,在,Load Program
After Build”之前加上选择符号,单击“OK”按钮,此设置完成在每次编译哈尔滨工业大学——DSP 原理与应用实验指导书
III-5
完成后将程序自动下载到DSP上;选择菜单“Project”、“Build All”,编译、
连结和下载程序;观察“PROG”窗口中的变化。
⑵ 打开 CPU 寄存器观察窗口:选择菜单“View”、“CPU Registers”,“CPU
Register”。
⑶ 单步执行程序并观察结果:按F10键单步运行,直到程序尾部的空循环语句;
观察CPU寄存器窗口中DP、ACCS、ST0、AR0、AR1、AR2的变化;观察“DARAM
B0”和“DARAM B1”中的显示;体会用程序修改数据区语句的使用方法。
六.实验结果
实验程序运行之后,位于数据区地址 201H 开始的 4 个单元的数值被复制到了数据区 300H 开始的 4 个单元中。
* 如果在下载程序的过程中,Code Composer Studio 报告 xxxx 地址出现校验错误,可以使用内存显示和修改的方法,验证一 下是否是该单元不能正确读写,以确定错误原因。
* 在 MC 方式时,程序区前 32k 均为 Flash 存储器区,只读,程序将无法下载。
* 通过改写内存单元的方式,我们可以手工设置 DSP 的一些状态位,从而改变
DSP 工作的状态。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-6
实验二 I/O控制模块实验
一,实验目的
1,了解TMS320LF2407A DSP的数字I/O控制模块的使用方法;
2,学习使用I/O管脚控制外围设备;
3,学会用程序驱动简单外围设备。
二,实验设备
计算机,ICETEK-LF2407-EDU 实验箱(或 ICETEK 仿真器 +ICETEK-LF2407-A
系统板+ 相关连线及电源)。
三,实验原理
1,TMS320LF2407A DSP的数字I/O控制模块介绍
数字输入/ 输出模块是集成在 TMS320LF2407A 片内的外设之一,它主要对芯片的通用、双向的数字 I/O(GPIO )引脚进行控制。这些 I/O 引脚大多数是基本功能和一般 I/O 复用的引脚,数字 I/O 模块采用了一种灵活的方法,以控制专用 I/O 和复用
I/O 引脚的功能,所有 I/O 和复用引脚的功能可通过 9 个 16 位控制寄存器来设置,
这些寄存器可分为两类,
· I/O 口复用控制寄存器(MCRx ):用于控制选择 I/O 口作为基本功能方式或一般 I/O 引脚功能;
·数据和方向控制寄存器(PxDATDIR ):当 I/O 口用作一般 I/O 引脚功能时,
用数据和方向控制寄存器可控制数据和到双向 I/O 引脚的数据方向,这些寄存器直接和双向 I/O 引脚相连。
具体控制寄存器的访问地址、定义请参见有关资料。
2,ICETEK-LF2407-A板引出的I/O管脚及使用方法
ICETEK-LF2407-A 板使用了一些 I/O 管脚对 DSP 进行控制。例如:跳线 JP6 连接 DSP 上 MP/MC 管脚,在 DSP 复位时,DSP 可读回这一管脚的设置,当管脚接高电平时,DSP 采用微处理器(MP )方式工作,否则设置成微控制器(MC )方式。
ICETEK-LF2407-A 板在扩展插头上将未使用的 I/O 引脚接出,提供给用户连接使用。其定义见 ICETEK-LF2407-A 板说明。这些管脚支持 0-3.3V 逻辑电平操作,
用户在进行相应设置后可以在 I/O 管脚上进行输入或输出操作,使用时须注意根据引脚本身的负载能力驱动相关设备。
3,ICETEK-LF2407-EDU实验箱及控制模块使用的I/O管脚
ICETEK-LF2407-EDU 实验箱将引脚 ADCIN00-ADCIN03 连接到了实验箱底板上“A/D 输入”的四个插座上。
ICETEK-LF2407-EDU 实验箱控制模块使用如下引脚,
PWM12/IOPE6--指示灯
PWM11/IOPE5和TDIRB/IOPF4—步进电机
CANTX/IOPC6—蜂鸣器
哈尔滨工业大学——DSP 原理与应用实验指导书
III-7
四,实验程序
实验程序通过相关寄存器设置,使用 PWM12/IOPE6 作为输出,控制实验箱控制模块上指示灯 J5 进行有规律地闪烁。方法是用程序定时地修改 PWM12/IOPE6 引脚的状态。
注:PWM12/IOPE6 引脚未连接驱动设备,通过一个 650Ω电阻限流后,直接连接到指示灯 J5。
源程序及注释,
main()
{
unsigned int uWork;
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa; /* 关闭看门狗 */
*SCSR1=0x81fe; /* DSP运行频率40m */
(*MCRB)=0;
uWork=(*MCRC); /* 将PWM12/IOPE6设置成通用I/O口 */
uWork&=0x0ffbf;
(*MCRC)=uWork;
while ( 1 )
{
uWork=(*PEDATDIR); /* PWM12/IOPE6的控制寄存器 */
uWork|=0x4000; /* 输出 */
uWork^=0x0040; /* 输出状态 */
(*PEDATDIR)=uWork;
Delay(256); /* 延时片刻 */
}
}
五,实验步骤
1.实验准备
⑴ 连接设备,
① 关闭计算机和实验箱电源;
② 检查 ICETEK-LF2407-A 板上 JP6 的位置,应连接在 1-2 位置(靠近 DSP
芯片端),即设置DSP工作在MP方式;如使用PP型仿真器则用附带的并口连线连接计算机并口和仿真器相应接口;
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 8
③关闭实验箱上的三个开关。
⑵ 开启设备,
① 打开计算机电源;
② 打开实验箱电源开关,打开 ICETEK-LF2407-A板上电源开关,注意板上指示灯 DS1灭、DS2 和 DS3亮;打开控制模块电源开关;
③ 如使用 USB型仿真器用附带的 USB电缆连接计算机和仿真器相应接口,
注意仿真器上两个指示灯均亮。
⑶ 设置 Code Composer Studio为 Emulator方式,
参见“Code Composer Studio 入门实验”之四.2。
⑷ 启动 Code Composer Studio
双击桌面上,”图标,启动 Code Composer Studio 2.2。
⑸ 打开工程文件
打开菜单,Project” 的,Open” 项; 选择 D:\2407EDULab\Lab6-IOPin目录中的“IOPin.pjt” 。
2,浏览程序
在项目浏览器中,双击 led.c,激 活 led.c 文件,浏览该文件的内容,理解各语句作用。打开 led.cmd,浏览并理解各语句作用。
3,编译工程
单击,Project”菜单,,Rebuild all”项,编译工程中的文件,生成 IOPin.out 文件。
4,下载程序
单击,File”菜单,,Load program…”项,选择 D:\2407EDULab\Lab6-IOPin 目录中的 IOPin.out 文件,通过仿真器将其下载到 2407A DSP 上。
5,运行程序观察结果
·单击“Debug”菜单,“Run”项,运行程序。
·观察实验箱控制模块上指示灯 J5闪烁情况。
·单击“Debug”菜单,“Halt”项,停止程序运行。
6,修改程序重新运行
适当改变程序中,Delay(256);”语句中的延时参数,重复步骤 3-5,使指示灯约
1 秒闪烁一次。
六,实验结果
实验程序可控制指示灯闪烁。通过 DSP 的通用 I/O 引脚可以输出状态,从而直接控制外围设备。
七,问题与思考
* 如果需要控制较大电流驱动的设备或控制电平大于 3.3V 的设备应如何设计?
* 如果需要精确控制指示灯闪烁的时间,有什么方法?
哈尔滨工业大学——DSP 原理与应用实验指导书
III-9
实验三 定时器实验
一,实验目的
1,通过实验熟悉LF2407A的定时器;
2,掌握LF2407A定时器的控制方法;
3,掌握LF2407A的中断结构和对中断的处理流程;
4,学会运用中断程序控制程序流程。
二,实验设备
计算机,ICETEK-LF2407-EDU 实验箱(或 ICETEK 仿真器 +ICETEK-LF2407-A
系统板+ 相关连线及电源)。
三,实验原理
1,通用定时器介绍及其控制方法
⑴.事件管理器模块(EV)
TMS320LF2407A DSP 片内包括两个事件管理模块 EVA 和 EVB,每个事件管理器模块包括通用定时器(GP ),比较单元以及正交编码脉冲电路。
每个事件管理模块都包含两个通用定时器,用以完成计数、同步,定时启动 ADC、
定时中断等功能。
⑵.通用定时器(GP)
* 每个通用定时器包括,
-一个16位的定时器增/减计数的计数器TxCNT,可读写;
-一个16位的定时器比较寄存器(双缓冲,带影子寄存器)TxCMPR,可读写;
-一个16位的定时器周期寄存器(双缓冲,带影子寄存器)TxPR,可读写;
-一个16位的定时器控制寄存器TxCON,可读写;
-可选择的内部或外部输入时钟;
-用于内部或外部时钟输入的可编程的预定标器(Prescaler);
-控制和中断逻辑,用于4个可屏蔽中断—下溢、溢出、定时器比较和周期中断;
-可选择方向的输入引脚 TDIRx,用于双向计数方式时选择向上或向下计数。
* 通用定时器之间可以彼此独立工作或相互同步工作,完成复杂的任务。
* 通用定时器在中断标志寄存器EVAIFRA,EVAIFRB,EVBIFRA和EVBIFRB
中有12个中断标志位。每个通用定时器可根据以下事件产生4个中断,
-上溢—TxOFINF(x=1,2,3或4);
-下溢—TxUFINF(x=1,2,3或4);
-比较匹配--TxCINT(x=1,2,3或4);
哈尔滨工业大学——DSP 原理与应用实验指导书
III-10
-周期匹配--TxPINT(x=1,2,3或4)。
* 每个通用定时器有4种可选择的操作模式,
-停止/保持模式;
-连续增计数模式;
-定向增/减计数模式;
-连续增/减计数模式。
相应的定时器控制寄存器 TxCON 中的位的形式决定了通用定时器的计数模式。
2,TMS320LF240x中断结构
利用 CPU 支持的 6 个可屏蔽中断,采用集中化的中断扩展设计来满足大量的外设中断需求。
LF240x 内核提供一个不可屏蔽的中断 NMI 和 6 个按优先级获得服务的可屏蔽中断INT1至INT6。而这6个中断级的每一个都可被很多外设中断请求共享。通过中断请求系统中的一个两级中断来扩展系统可响应的中断个数。
为了让 CPU 能区分引起中断的事件,在每个外设中断请求有效时都会产生一个唯一的外设中断向量,保存于外设中断向量寄存器(PIVR )中。实际上有两个中断向量表,CPU 的向量表用于得到一级通用中断服务子程序(GISR);外设向量表指定外设中断子程序(SISR)。GISR 程序根据 PIVR 中的外设中断向量取值决定执行哪个
SISR。
3,中断响应过程
外设事件要引起CPU中断,必须保证:外设事件的中断使能为被使能,CPU内核级的6个可屏蔽中断中,相应中断也被使能。
在外设事件发生时,首先将其在外设中断控制器中的标志位置1,从而引起CPU
内核的INT1—INT6中的一个产生中断。中断服务过程中,其他可屏蔽中断将会自动被屏蔽,直到中断返回。
在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设(如定时器)中断发生时,首先跳转到相应中断高级的服务程序中(如:定时器1
会引起 INT2 中断),在相应 GISR 子程序中,取出 PIVR 的值,根据其值再转向相应的SISR;SISR程序在进行服务操作之后,应将本外设的中断标志位清除以便能继续中断,然后返回。
4,中断程序设计
用C语言设计中断服务程序需要用intterupt关键字修饰定义的中断服务函数,
例如,
void interrupt gptime1(void);
中断服务函数应尽量短小,在中断服务函数中 要注意对中断标志寄存器、中断屏蔽寄存器的设置,避免中断嵌套或中断丢失现象的发生。
四,实验程序
本实验设计的程序是在上一个实验基础上修改 得来,由于上一实验控制指示灯闪烁的延时控制是用循环计算方法得到的,延 时不精确也不均匀,采用中断方式可哈尔滨工业大学——DSP 原理与应用实验指导书
III-11
以实现指示灯的定时闪烁,时间更加准确。
对于定时器的周期寄存器为计数40000次产生1个中断,由于DSP工作在40MHz
主频,正好是 1ms 中断一次,所以在中断服务程序中计算中断 500 次时改变指示灯状态,实现指示灯亮0.5秒,再灭0.5秒,即每秒闪烁1次。
实验程序的工程中包含了两种源代码,主程序采用 C 语言编制利于控制,中断向量表在vector.asm汇编语言文件中,利于直观地控制存储区分配。在工程中只需将它们添加进来即可,编译系统会自动识别分别处理完成整合工作。
实验程序的 C 语言主程序中包含了内嵌汇编语句,提供一种在需要更直接控制
DSP状态的方法,同样的方法也能提高C语言部分程序的计算效率。
实验程序代码,
#include "2407c.h"
ioport unsigned int port000c;
#define T1MS 0x9c3f /* 9c3fH=40000-1 */
void interrupt gptime1(void); /* 中断服务程序,定时器计数T1MS次时中断调用 */
void gp_init(void); /* 定时器初始化 */
unsigned int uWork,nCount,uWork1;
int * pf;
int j = 0;
main()
{
int i;
nCount=0;
asm(" setc INTM"); /* 关中断,进行关键设置时不允许发生中断,以免干扰 */
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa; /* 关闭看门狗中断 */
*SCSR1=0x81fe; /* 设置DSP运行频率40m */
(*MCRB)=0;
uWork=(*MCRC);/*将PWM12/IOPE6设置成通用I/O口,以控制实验箱上指示灯 */
uWork&=0x0ffbf;
(*MCRC)=uWork;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-12
gp_init(); /* 设置定时器 */
*IMR=0x2; /* 使能定时器中断(INT2) */
*IFR=0xffff; /* 清除中断标志 */
asm(" clrc INTM"); /* 开中断 */
while(1)
{
}
}
void interrupt gptime1(void) /* 中断服务程序定义,须使用 interrupt
声 */
{
uWork=(*PIVR); /* 读外设中断向量寄存器*/
switch(uWork)
{
case 0x27 /* T1PINT,0x27为定时器1的周期中断的向量值 */
{
(*EVAIFRA)=0x80; /* 清除中断标志T1PINT */
nCount++;
if ( nCount>=100 ) /* 计数100此100ms=0.1秒*/
{
uWork=(*PEDATDIR); /* 设置指示灯状态翻转一次 */
uWork|=0x4000;
uWork^=0x0040;
(*PEDATDIR)=uWork;
j = !j;
(*PCDATDIR) = j + 0x100;
port000c=uWork1++;
uWork1%=0x100;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-13
nCount=0;
}
break;
}
}
}
void gp_init(void)
{
*EVAIMRA = 0x80; /* 使能T1PINT即通用定时器1周期中断 */
*EVAIFRA = 0xffff; /* 清除中断标志 */
*GPTCONA = 0x0000;
*T1PR = T1MS; /* 周期寄存器=40000 */
*T1CNT = 0; /* 计数初值=0 */
*T1CON = 0x1040; /* 启动计数器 */
}
五,实验步骤
1,实验准备
⑴,连接设备
① 关闭计算机和实验箱电源;
② 检查 ICETEK-LF2407-A 板上 JP6 的位置,应连接在 1-2 位置(靠近
DSP 芯片端),即设置 DSP 工作在 MP 方式;如使用 PP 型仿真器则用附带的并口连线连接计算机并口和仿真器相应接口;
③ 关闭实验箱上的三个开关。
⑵ 开启设备,
① 打开计算机电源
② 打开实验箱电源开关,打开ICETEK-LF2407-A板上电源开关,注意板上指示灯DS1灭、DS2和DS3亮;打开控制模块的电源开关;
③ 如使用 USB 型仿真器用附带的 USB 电缆连接计算机和仿真器相应接口,注意仿真器上两个指示灯均亮。
设置Code Composer Studio为Emulator方式。
⑶ 启动Code Composer Studio
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 14
双击桌面上,”图标,启动 Code Composer Studio 2.2。
2,打开工程文件,浏览程序
打开菜单“Project”的“Open”项;选择 D:\2407EDULab\Lab3-Timer 目录中的“Timer.pjt” 。
在项目浏览器中,双击 led.c,激活 led.c文件,浏览该文件的内容,理解各语句作用。 打开 led.cmd,浏览并理解各语句作用,对照 C源程序学习中断向量表的写法。
3,编译工程
单击,Project” 菜单,“Rebuild all” 项,编译工程中的文件,生成 Timer.out
文件。
4,下载程序
单 击,File”菜单,,Load program…”项,选择 D:\2407EDULab\Lab3-Timer
目录中的 Timer.out文件,通过仿真器将其下载到 2407A DSP上。
5,运行程序观察结果
·单击“Debug”菜单,“Run”项,运行程序。
·观察实验箱控制模块上指示灯 J5闪烁情况。
·单击“Debug”菜单,“Halt”项,停止程序运行。
5,修改程序重新运行
适当改变程序中“#define T1MS 0x9c3f”语句中的延时参数,重复步骤 3-5,
使指示灯约 1秒闪烁两次、三次、四次。
六,实验结果
- 指示灯在定时器的定时中断中按照设计定时闪烁。
- 使用定时器和中断服务程序可以完成许多需要定时完成的任务,比如 DSP 定时启动 A/D转换,日常生活中的计时器计数、空调的定时启动和关闭等。
- 在调试程序时,有时需要指示程序工作的状 态,可以利用指示灯的闪烁来达到,指示灯灵活的闪烁方式可表达多种状态信息。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-15
实验四 模数转换实验
一,实验目的
1,掌握A/D转换的基本过程;
2,熟悉TMS320LF2407A片内A/D转换模块的技术指标和常用方法。
二,实验设备
计算机,ICETEK-LF2407-EDU实验箱(或ICETEK仿真器+ICETEK-LF2407-A系统板+信号源+示波器+相关连线及电源)。
三,实验原理
1,TMS320LF2407A模数转换模块特性
- 带内置采样和保持的10位模数转换模块ADC,最小转换时间为500ns。
- 多达16个的模拟输入通道(ADCIN0—ADCIN15)。
- 自动排序的能力。一次可执行最多16个通道的“自动转换”,而每次要转换的通道都可通过编程来选择。
- 两个独立的最多可选择8个转换通道的排序器可以独立工作,也可以级连后工作。
- 排序控制器可决定模拟通道转换的顺序。
- 可单独访问的16个转换结果寄存器。
- 多个触发源启动转换,
·软件设置启动标志;
·事件管理器(共两个)提供多个事件源;
·外部ADCSOC引脚。
- 灵活的中断控制。
- 采样和保持获取时间窗口有单独的预定标控制。
- 内置校验模式和自测试模式。
2,模数转换工作过程
- 模数转换模块接到启动转换信号后,按照排序器的设置,开始转换第一个通道的数据;
- 经过一个采样时间的延迟后,将采样结果放入转换结果寄存器保存;
- 按顺序进行下一个通道的转换;
- 转换结束,设置标志,也可发出中断;
- 如果为连续转换方式则从新开始转换过程;否则等待下一个启动信号。
3,模数转换的程序控制
模数转换相对于计算机来说是一个较为缓慢的 过程。一般采用中断方式启动转换或保存结果,这样在 CPU 忙于其他工作时可以少占用处理时间。设计转换程序应首先考虑处理过程如何与模数转换的时间相匹 配,根据实际需要选择适当的触发转换的手段,也要能及时地保存结果。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-16
由于 TMS320LF2407A DSP 芯片内的 A/D 转换精度是 10 位的,转换结果的高 10
位为所需数值,所以在保留时应注意将结果的低6位去除,取出高10位有效数字。
四,实验程序
本实验程序设置 DSP 采用连续采集的方式工作,同时采集两个通道(ADCIN0,
ADCIN1)的模拟量输入;使用片内通用定时器 1 产生定时中断,用以定时保存转换数据。
#include "2407c.h"
#define ADCNUMBER 256
void interrupt gptime1(void); /* 中断服务程序,用于设置保存标志 */
void ADInit(void); /* 初始化A/D转换模块和通用定时器1 */
ioport unsigned char port000c; /* I/O 端口用于设置 ICETEK-2407-A 板上指示灯 */
unsigned int uWork,uWork1,nADCount,nLed,*pResult1,*pResult2;
int nNewConvert,nWork;
unsigned int nADCIn0[ADCNUMBER]; /* 存储区1,保存通道ADCIN0的转换结果,
循环保存 */
unsigned int nADCIn1[ADCNUMBER]; /* 存储区2,保存通道ADCIN1的转换结果,
循环保存 */
int *z;
main()
{
asm(" CLRC SXM"); /* 清标志,关中断 */
asm(" CLRC OVM");
asm(" CLRC CNF");
pResult1=RESULT0;
pResult2=RESULT1;
nNewConvert=0;
*WDCR=0x6f;
*WDKEY=0x5555;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-17
*WDKEY=0xaaaa; /* 关闭看门狗中断 */
*SCSR1=0x81fe; /* 打开所有外设,设置时钟频率为40MHz */
uWork=(*WSGR); /* 设置I/O等待状态为0 */
uWork&=0x0fe3f;
(*WSGR)=uWork;
ADInit(); /* 初始化A/D相关设备 */
*IMR=3; /* 使能定时器中断 */
*IFR=0xffff; /* 清所有中断标志 */
asm(" clrc INTM"); /* 开中断 */
while ( 1 )
{
if ( nNewConvert ) /* 如果保存标志置位,以下开始转换和保存转换结果 */
{
nNewConvert=0; /* 清保存标志 */
uWork=(*pResult1); /* 取ADCINT0通道转换结果 */
uWork>>=6; /* 移位去掉低6位 */
nADCIn0[nADCount]=uWork;/* 保存结果 */
uWork=(*pResult2); /* 取ADCINT1通道转换结果 */
uWork>>=6; /* 移位去掉低6位 */
nADCIn1[nADCount]=uWork;/* 保存结果 */
nADCount++;
if ( nADCount>=ADCNUMBER ) /* 缓冲区满后设置指示灯闪烁 */
{
nADCount=0; /* 中断位置 */
nWork++;
if ( nWork>=16 )
{
nWork=0;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-18
nLed++; nLed&=0x0f;
port000c=nLed;
}
}
}
}
}
void ADInit(void) /* 初始化设置 */
{
int i;
for ( i=0;i<ADCNUMBER;i++ ) /* 缓冲区清0 */
nADCIn0[i]=nADCIn1[i]=0;
port000c=0; /* 关指示灯 */
*ADCTRL1= 0x2040; /* 设置连续转换模式 */
*MAXCONV = 0x1; /* 每次完成转换两个通道 */
*CHSELSEQ1=0x10; /* 转换次序,先ADCIN0,再ADCIN1 */
*ADCTRL2= 0x2000; /* 启动转换 */
nADCount=nLed=nWork=0;
/* 以下设置通用定时器参数 */
*EVAIMRA = 0x80; /* 使能T1PINT */
*EVAIFRA = 0xffff; /* 清中断标志 */
*GPTCONA = 0x0100;
*T1PR = 2000; /* 保存结果周期=2000*25ns=50us=20KHz */
*T1CNT = 0; /* 计数器从0开始计数 */
*T1CON = 0x1040; /* 连续增计数方式,启动计数器 */
}
void interrupt gptime1(void)
{
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 19
uWork1=(*PIVR);
switch ( uWork1 )
{
case 0x27,
{
nNewConvert=1; /* 设置保存标志 */
(*EVAIFRA)=0x80; /* 清中断标志位 */
break;
}
}
}
五,实验步骤
1,实验准备
⑴ 连接设备,
① 关闭计算机和实验箱电源;
② 如使用 PP 型仿真器则用附带的并口连线连接计算机并口和仿真器相应接口;
③ 检查 ICETEK-LF2407-A 板上 JP6 的位置,应连接在 1-2 位置(靠近
DSP芯片端),即设置 DSP工作在 MP方式;
④ 用实验箱附带的信号连接线 (两边均为单声道耳机插头) 连接第一信号源的波形输出端到“A/D 输入”的 ADCIN0 插座(位于实验箱底板中部,第二信号源旁边) ; 用信号连线连接第二信号源的输出端到,A/D
输入”的 ADCIN1插座;
⑤ 打开实验箱上三个开关。
⑵ 开启设备,
① 开计算机电源;
② 开实验箱电源开关,打开 ICETEK-LF2407-A板上电源开关,注意板上指示灯 DS1灭、DS2 和 DS3亮;
③ 如使用 USB 型仿真器用附带的 USB 电缆连接计算机和仿真器相应接口,注意仿真器上两个指示灯均亮。
④ 设置 Code Composer Studio为 Emulator方式。
⑶ 启动 Code Composer Studio
双击桌面上,”图标,启动 Code Composer Studio 2.2。
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 20
2,打开工程并浏览程序
- 打开菜单“Project”的“Open”项;选择 D:\2407EDULab\Lab4-AD 目录中的“adc.pjt” 。
- 在项目浏览器中,双击 ad.c,激活 ad.c 文件,浏览该文件的内容,理解各语句作用。打开 ad.cmd,浏览并理解各语句作用。
4,编译工程
单击“Project”菜单,“Rebuild all”项,编译工程中的文件,生成 adc.out
文件。
5,下载程序
单击“File”菜单,“Load program…”项,选择 D:\2407EDULab\Lab4-AD目录中的 adc.out文件,通过仿真器将其下载到 2407A DSP上。
6,打开观察窗口
- 选择菜单,View”,,Graph”,,Time/Frequency…”做如下设置,然后单击“OK”按钮;
- 选择菜单,View”,,Graph”,,Time/Frequency…”做如下设置,然后单击“OK”按钮;
- 在弹出的图形窗口中单击鼠标右键,选择“Clear Display” 。
- 在有,中断位置” 注释的语句上加上软件跟踪断点 (Toggle Breakpoint),
即单击语句后按 F9键;
通过设置,我们打开了两个图形窗口观察两个通道模数转换的结果。
7,设置信号源
由于模数输入信号未经任何转换就进入 DSP,所以必须保证输入的模拟信号的幅度在 0-3.3V之间。 实验箱上信号源输出为 0-3.3V。 但如果使用外接信号源,则必须哈尔滨工业大学——DSP 原理与应用实验指导书
III-21
用示波器检测信号范围,保证最小值0V最大值3.3V,否则容易损坏DSP芯片的模数采集模块。
首先设置一号信号源(上部)开关为“关”。设置实验箱上一号信号源的“频率选择”在“100Hz—1KHz”档,“波形选择”在“三角波”档,“频率微调”选择较大位置靠近最大值,“幅值微调”选择最大。开启一号信号源开关,一号信号源电源指示灯亮。
首先设置二号信号源(下部)开关为“关”。设置实验箱上二号信号源的“频率选择”在“100Hz—1KHz”档,“波形选择”在“正弦波”档,“频率微调”选择适中位置,“幅值微调”选择最大。开启二号信号源开关,二号信号源电源指示灯亮。
8,运行程序观察结果
- 单击“Debug”菜单,“Run”项,运行程序;
- 当程序停在所设置的软件断点上时,观察“ADCIN0”、“ADCIN1”窗口中的图形显示;
- 适当改变信号源的四个调节旋钮的位置,按F5健再次运行到断点位置,观察图形窗口中的显示。注意:输入信号的频率不能大于10KHz,否则会引起混叠失真,
而无法观察到波形,如果有兴趣,可以试着做一下,观察采样失真后的图形。
9,停止运行结束实验
六,实验结果
- 用实验中的设置,我们可以看到如下结果
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 22
- 实验程序使用定时器中断去读取模数转换的结果,这是一种较为简单的方法。
用这种方法,没有考虑到 A/D 转换的精确时钟,必然会造成保存的结果中发生多点
(重复),丢点等不精确的结果。 在要求较高的场合,一般采用使用定时器中断启动
A/D转换,再相应转换完成后的中断信号,将结果保存这种方案。
七,问题与思考
- 请修改实验程序,完成同时采集四路输入信号功能。
- 如何设置能做到用定时器中断启动 A/D 转换,再由 A/D 转换完成后的中断中断 CPU保存结果?
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 23
实验五 数模转换实验
一,实验目的
1,了解数模转换的基本操作;
2,了解 ICETEK-LF2407-A板扩展数模转换方式;
3,掌握数模转换程序设计方法。
二,实验设备
计算机,示波器,ICETEK-LF2407-EDU实验箱 (或 ICETEK仿真器+ICETEK-LF2407-A
系统板+相关连线及电源) 。
三,实验原理
1,数模转换操作
利用专用的数模转换芯片,可以实现将数字信 号转换成模拟量输出的功能。在
ICETEK-LF2407-A板上,使用的是 DAC7625数模芯片,它可以实现同时转换四路模拟信号数出,并有 12 位精度,转换时间 10μs。其控制方式较为简单:首先将需要转换的数值通过数据总线传送到 DAC7625 上相应寄存器,再发送转换信号,经过一个时间延迟,转换后的模拟量就从 DAC7625输出引脚输出。
2,DAC7625与 TMS320LF2407A的连接
由于 TMS320LF2407A DSP 没有数模转换输出设备,采用外扩数模转换芯片的方法。 在 ICETEK-LF2407-A板上选用的是 DAC7625。 DAC7625的转换寄存器被映射到了
DSP的 I/O空间,地址是 0-3,控制转换由 I/O端口 4的写信号控制,这部分在硬件上由译码电路 (GAL 芯片) 完成。 在 DAC7625的输出端,为了增加输出功率,经过一级运放再输出到板上插座上。
硬件原理图
输出波形
P2
C A D
T D A
R D T
L R A
LF2407
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
DAC 7625
模拟信号输出
数字信号输入
E M I F
哈尔滨工业大学——DSP 原理与应用实验指导书
III-24
四,实验程序
#include "2407c.h"
#include "math.h"
void interrupt gptime1 (void);
void gp_init(void);
ioport unsigned int port0000;
ioport unsigned int port0001;
ioport unsigned int port0002;
ioport unsigned int port0003;
ioport unsigned int port0004;
unsigned int data[4][20];
unsigned int cnt,uWork;
main()
{
int i;
cnt = 0;
for (i = 0; i < 20; i ++)
{
data[0][i] = 4096 / 20 * i;
if (i < 10)
{
data[1][i] = 4096 / 10 * i;
data[2][i] = 4095;
}
else
{
data[1][i] = data[1][19 - i];
data[2][i] = 0;
}
data[3][i] = 4096 - data[0][i];
}
asm(" setc INTM"); /* 关中断,进行关键设置时不允许发生中断,以免干扰 */
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa; /* 关闭看门狗中断 */
哈尔滨工业大学——DSP 原理与应用实验指导书
III-25
*SCSR1=0x81fe; /* 设置DSP运行频率40m */
(*MCRB)=0;
uWork=(*MCRC);/*将PWM12/IOPE6设置成通用I/O口,以控制实验箱上指示灯 */
uWork&=0x0ffbf;
(*MCRC)=uWork;
gp_init(); /* 设置定时器 */
*IMR=0x2; /* 使能定时器中断(INT2) */
*IFR=0xffff; /* 清除中断标志 */
asm(" clrc INTM"); /* 开中断 */
while(1)
{
}
}
void gp_init(void)
{
*EVAIMRA = 0x80; //使能 T1PINT
*EVAIFRA = 0xffff; //清中断标志
*GPTCONA = 0x0000;
*T1PR = 2000;
*T1CNT = 0; //计数器从0开始计数
*T1CON = 0x1040;
}
void interrupt gptime1()
{
uWork=(*PIVR); /* 读外设中断向量寄存器*/
switch(uWork)
{
case 0x27,/* T1PINT,0x27为定时器1的周期中断的向量值 */
{
(*EVAIFRA)=0x80; /* 清除中断标志T1PINT */
port0000 = data[0][cnt];
port0001 = data[1][cnt];
port0002 = data[2][cnt];
port0003 = data[3][cnt];
port0004 = 0;
cnt ++;
if (cnt == 20) cnt = 0;
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 26
break;
}
}
}
五,实验步骤
1,实验准备
⑴.连接设备
① 关闭计算机和实验箱电源;如使用 PP 型仿真器则用附带的并口连线连接计算机并口和仿真器相应接口;
② 检查 ICETEK-LF2407-A 板上 JP6 的位置,应连接在 1-2 位置(靠近
DSP芯片端),即设置 DSP工作在 MP方式;
③ 关闭实验箱上三个开关。
⑵.开启设备,
④ 打开计算机电源;
⑤ 打开实验箱电源开关,打开 ICETEK-LF2407-A板上电源开关,注意板上指示灯 DS1灭、DS2 和 DS3亮;
⑥ 如使用 USB 型仿真器用附带的 USB 电缆连接计算机和仿真器相应接口,注意仿真器上两个指示灯均亮。
⑶.设置 Code Composer Studio为 Emulator方式,
参见“Code Composer Studio 入门实验”之四.3。
⑷.启动 Code Composer Studio
双击桌面上,”图标,启动 Code Composer Studio 2.2。
2,打开工程并浏览程序
-打开菜单,Project” 的,Open” 项; 选择 D:\2407EDULab\Lab9-DA目录中的“dac.pjt” 。
-在项目浏览器中,双击 lfdac.asm,激活 lfdac.asm文件,浏览该文件的内容,理解各语句作用。
3,编译工程
单击“Project”菜单,“Rebuild all”项,编译工程中的文件,生成 dac.out
文件。
4,下载程序
单击“File”菜单,“Load program…”项,选择 D:\2407EDULab\Lab9-DA目录中的 dac.out文件,通过仿真器将其下载到 2407A DSP上。
5,连接示波器
用信号线从实验箱底板上右侧“D/A 输出”的四个插座引线到示波器。
也可以用控制模块右侧的测试勾连接示波器。
6,运行并观察结果
- 单击“Debug”菜单,“Run”项,运行程序;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-27
- 观察示波器上的波形。
7,结束运行退出Code Composer Studio 2.2。
六,实验结果
用示波器察看 D/A 四路输出波形,可以看到第一路输出锯齿波,第二路输出三角波,第三路输出方波,第四路输出反锯齿波。
七,问题与思考
程序采用查表法输出波形,这样做的优点是速度快,缺点是占用存储空间较多。
请考虑使用别的方法产生同样波形输出。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-28
实验六 PWM实验
一,实验目的
1,了解 TMS320LF2407A DSP 片内事件管理器模块的脉宽调制电路 PWM 的特性参数;
2,掌握PWM电路的控制方法
3,学会用程序控制产生不同占空比的PWM波形。
二,实验设备
计算机,示波器,ICETEK-LF2407-EDU实验箱(或ICETEK仿真器+ICETEK-LF2407-A
系统板+相关连线及电源)。
三,实验原理
1,脉宽调制电路PWM的特性
每个事件管理器模块(TMS320LF2407A DSP片内有两个)可同时产生多达8路的
PWM波形输出。由3个带可编程死区控制的比较单元产生独立的3对(即6个输出),
以及由通用定时器比较产生的2个独立的PWM输出。
PWM的特性如下,
- 16位寄存器;
- 有从0到16μs的可编程死区发生器控制PWM输出对;
- 最小的死区宽度为1个CPU时钟周期;
- 对PWM频率的变动可根据需要改变PWM的载波频率;
- 在每个PWM周期内和以后可根据需要改变PWM脉冲的宽度;
- 外部可屏蔽的功率驱动保护中断;
- 脉冲形式发生器电路,用于可编程对称、非对称以及4个空间矢量PWM波形产生;
- 自动重装载的比较和周期存器使CPU的负荷最小。
2,PWM电路的设置
在电机控制和运动控制的应用中,PWM电路被设计为减少产生PWM波形的CPU开销和减少用户的工作量。与比较单元相关的 PWM 电路其 PWM 波形的产生由以下器存器控制:对于EVA模块,T1CON、COMCONA、ACTRA和DBTCONA;对于EVB模块,T3CON、
COMCONB、ACTRB和DBTCONB。
产生PWM的器存器设置,
- 设置和装载ACTRx寄存器;
- 如果使能死区,则设置和装载DBTCONx寄存器;
- 设置和装载T1PR或T3PR寄存器,即规定PWM波形的周期;
- 初始化CMPRX寄存器;
- 设置和装载COMCONx寄存器;
- 设置和装载T1CON或T3CON寄存器,来启动比较操作;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-29
- 更新CMPRx寄存器的值,使输出的PWM波形的占空比发生变化。
四,实验程序
#include "regs240x.h"
main()
{
unsigned int uWork;
asm(" setc INTM"); /* 关中断 */
asm(" setc SXM"); /* 符号位扩展有效 */
asm(" clrc OVM"); /* 累加器中结果正常溢出 */
asm(" clrc CNF"); /* B0被配置为数据存储空间 */
WDCR=0x6f;
WDKEY=0x5555;
WDKEY=0xaaaa; /* 关闭看门狗中断 */
SCSR1=0x81fe; /* DSP工作在40MHz */
IMR=0; /* 屏蔽所有可屏蔽中断 */
IFR=0x0ffff; /* 清除中断标志 */
uWork=WSGR; /* I/O引脚0等待 */
uWork&=0x0fe3f;
WSGR=uWork;
MCRA=MCRA|0x0c0; /* IOPA6-7被配置为基本功能方式,PWM1-2 */
ACTRA=0x06; /* PWM2低有效,PWM1高有效 */
DBTCONA=0x00; /* 不使能死区控制 */
CMPR1=0x1000; /* 比较单元1设置 */
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 30
CMPR2=0x3000; /* 比较单元 2设置 */
T1PER=0x6000; /* 设置定时器 1 的周期寄存器,以确定不同的输出占空比 */
COMCONA=0x8200; /* 使能比较操作 */
T1CON=0x1000; /* 定时器 1为连续增计数模式 */
T1CON=T1CON|0x0040; /* 启动定时器 1 */
while ( 1 )
{
}
}
五,实验步骤
1,实验准备
⑴.连接设备
① 关闭计算机和实验箱电源;
② 检查 ICETEK-LF2407-A 板上 JP6 的位置,应连接在 1-2 位置(靠近
DSP 芯片端),即设置 DSP 工作在 MP 方式;如使用 PP 型仿真器则用附带的并口连线连接计算机并口和仿真器相应接口;
③ 关闭实验箱上三个开关。
⑵.开启设备
① 打开计算机电源;
② 打开实验箱电源开关,打开 ICETEK-LF2407-A板上电源开关,注意板上指示灯 DS1灭、DS2 和 DS3亮;
③ 如使用 USB 型仿真器用附带的 USB 电缆连接计算机和仿真器相应接口,注意仿真器上两个指示灯均亮。
设置 Code Composer Studio为 Emulator方式。
⑶.启动 Code Composer Studio
双击桌面上,”图标,启动 Code Composer Studio 2.2。
2,打开工程并浏览程序
- 打开菜单“Project”的“Open”项;选择 D:\2407EDULab\Lab6-PWM 目录中的“pwm.pjt” 。
- 在项目浏览器中,双击 pwm.c,激活 pwm.c文件,浏览该文件的内容,理解各语句作用。
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 31
3,编译工程
单击“Project”菜单,“Rebuild all”项,编译工程中的文件,生成 pwm.out
文件。
4,下载程序
单击“File”菜单,“Load program…”项,选择 D:\2407EDULab\Lab6-PWM 目录中的 pwm.out文件,通过仿真器将其下载到 2407A DSP上。
5,连接示波器
连接示波器探头的地线与实验箱地线输出;测试 ICETEK-LF2407-A 板扩展插座
P1(位于板上复位按钮旁边,未与实验箱连接的插座) 的第 3和 第 4脚,即 PWM1和
PWM2的输出,如图,
P1.3 PWM1
复位按钮
P1.4 PWM2
注:P1 插座的地线为 P1.17和 P1.18。
6,运行并观察结果
- 单击“Debug”菜单,“Run”项,运行程序;
- 观察示波器上的波形。
7,重新设置参数
- 停止运行;
- 修改程序的,T1CON=0x1000;”语句,将计时器设置为“连续增/减计数方式” ;
- 再次运行程序观察示波器上的波形的改变;
- 再次修改程序调整 PWM 的参数:载波频率、占空比,运行并观察得到的波形是否与设计的一致。
8,结束运行退出 Code Composer Studio。
四,实验结果
通过示波器可观察到不同占空比的 PWM 输出波形,其载波频率、占空比与程序中对控制寄存器的设置相关。
五,问题与思考
试设计四路 (PWM1,PWM2,PWM3,PWM4) 输出,载波频率为 8ms,波形关系如下 (一个周期),
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 32
PWM1
PWM2
PWM3
PWM4
1ms
8ms
哈尔滨工业大学——DSP 原理与应用实验指导书
III-33
实验七 外设控制实验—发光二极管阵列显示实验
一,实验目的
通过实验学习使用 2407A DSP 的扩展 I/O 端口控制外围设备的方法,了解发光二极管阵列的控制编程方法。
二,实验设备
计算机,ICETEK-LF2407-EDU实验箱。
三,实验原理
ICETEK-LF2407-A 是一块以 TMS320LF2407ADSP 为核心的 DSP 扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。
发光二极管显示阵列的显示是由I/O扩展端口控制,DSP须将显示的图形按列的顺序存储起来(8×8 点阵,8 个字节,高位在下方,低位在上方),然后定时刷新控制显示。具体方法是,将以下控制字按先后顺序、每两个为一组发送到端口0x8005,
发送完毕后,隔不太长的时间(以人眼观察不闪烁的时间间隔)再发送一遍。由于位值为“0”时点亮,所以需要将显示的数据取反。
0x01,第8列数据取反,0x02,第7列数据取反,
0x04,第6列数据取反,0x08,第5列数据取反,
0x10,第4列数据取反,0x20,第3列数据取反,
0x40,第2列数据取反,0x80,第1列数据取反,
四,实验程序
#include "2407c.h"
ioport unsigned int port8000;
ioport unsigned int port8005;
ioport unsigned int port8007;
void Delay(unsigned int nTime); // 延时子程序
void RefreshLEDArray(); // 刷新显示
void SetLEDArray(int nNumber); // 修改显示内容
unsigned char ledbuf[8],ledx[8];
unsigned char ledkey[10][8]=
{
哈尔滨工业大学——DSP 原理与应用实验指导书
III-34
{0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00},//0
{0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00},//1
{0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00},//2
{0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00},
{0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00},
{0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00},
{0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00},
{0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00},
{0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00},
{0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00}
};
main()
{
int nCount;
asm(" setc INTM"); /* 关中断,进行关键设置时不允许发生中断,以免干扰 */
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa; /* 关闭看门狗中断 */
*SCSR1=0x81fe; /* 设置DSP运行频率40m */
(*MCRB)=0;
port8000=0; // 初始化ICETEK-CTR
port8000=0x80;
port8000=0;
port8007=0; // 关闭东西方向的交通灯
port8007=0x40; // 关闭南北方向的交通灯
哈尔滨工业大学——DSP 原理与应用实验指导书
III-35
port8007=0x0c1;
for ( nCount=0;nCount<8;nCount++ )
{
ledbuf[nCount]=0x0ff; // 显示为空白
ledx[nCount]=(nCount<<4); // 生成显示列控制字
}
RefreshLEDArray();
nCount=0;
for (;;)
{
SetLEDArray(nCount);
Delay(256);
nCount++;
nCount%=10;
}
}
void Delay(unsigned int nDelay)
{
int ii,jj,kk=0;
for ( ii=0;ii<nDelay;ii++ )
{
for ( jj=0;jj<64;jj++ )
{
RefreshLEDArray();
kk++;
}
}
}
哈尔滨工业大学——DSP 原理与应用实验指导书
III-36
void RefreshLEDArray()
{
int i;
for ( i=0;i<8;i++ )
{
port8000=ledx[i];
port8005=ledbuf[i];
}
}
void SetLEDArray(int nNumber)
{
int i;
for ( i=0;i<8;i++ )
ledbuf[i]=~ledkey[nNumber][7-i];
}
五,实验步骤
1,实验准备
⑴.连接设备
① 关闭计算机和实验箱电源;如使用 PP 型仿真器则用附带的并口连线连接计算机并口和仿真器相应接口;
② 检查 ICETEK-LF2407-A 板上 JP6 的位置,应连接在 1-2 位置(靠近
DSP芯片端),即设置DSP工作在MP方式;
③ 关闭实验箱上三个开关;
⑵.开启设备
① 打开计算机电源;
② 打开实验箱电源开关,ICETEK-CTR板上J2、J3灯亮;
③ 打开 ICETEK-LF2407-A 板上电源开关,注意板上指示灯 DS1 灭、DS2
和DS3亮;
④ 如使用 USB 型仿真器用附带的 USB 电缆连接计算机和仿真器相应接口,注意仿真器上两个指示灯均亮。
⑶.设置Code Composer Studio为Emulator方式
哈尔滨工业大学——DSP 原理与应用实验指导书
III-37
⑷.启动Code Composer Studio
2,打开工程并浏览程序,工程目录为D:\2407EDULab\Lab12-LedArray
3,编译并下载程序
4,运行程序,观察结果
如果显示出现乱码,可退出CCS后关闭实验箱,再打开重新做一次。
5,停止程序运行并退出
六,实验结果与分析
实验结果:可以观察到发光二极管阵列显示从0到9的计数。
分析:本程序使用循环延时的方法,如果想实 现较为精确的定时,可使用通用计时器,在通用计时器中断中取得延时,改变显示内容。另外本程序中 DSP 一直在做刷新显示的工作,如果使用通用计时器定时刷新显示,将能减少 DSP 用于显示的操作。适当更新显示可取得动画效果。
七,问题与思考
试设计用定时器定时刷新的程序,并显示秒计数的最低位。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-38
实验八 外设控制实验—液晶显示器控制显示实验
一,实验目的
通过实验学习使用2407ADSP的扩展I/O端口控制外围设备的方法,了解液晶显示器的显示控制原理及编程方法。
二,实验设备
计算机,ICETEK-LF2407-EDU实验箱。
三.实验原理
ICETEK-LF2407-A 是一块以 TMS320LF2407ADSP 为核心的 DSP 扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。
液晶显示模块的访问、控制是由2407ADSP对扩展I/O接口的操作完成。
控制 I/O 口的寻址:命令控制 I/O 接口的地址为 0x8001,数据控制 I/O 接口的地址为0x8003和0x8004,辅助控制I/O接口的地址为0x8002。
显示控制方法,
- 液晶显示模块中有两片显示缓冲存储器,分 别对应屏幕显示的象素,向其中写入数值将改变显示,写入“1”则显示一点,写入“0”则不显示。其地址与象素的对应方式如下,
左侧显示内存 右侧显示内存
Y= 0 1 ··· 62 63 0 1 ··· 62 63 行号
DB0 DB0 DB0 DBO DBO DBO DBO DBO DBO DBO 0
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
X=0 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 7
DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 DB0 8
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 55
X=7 DB0 DBO DBO DBO DBO DBO DBO DBO DBO DBO 56
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 DB7 63
-发送控制命令:向液晶显示模块发送控制命令的方法是通过向命令控制I/O接口写入命令控制字,然后再向辅助控制接口写入0。下面给出的是基本命令字、解释和C语言控制语句举例。
·显示开关:0x3f打开显示;0x3e关闭显示;
·设置显示起始行:0x0c0+起始行取值,其中起始行取值为0至63;
·设置操作页:0x0b8+页号,其中页号取值为0-7;
·设置操作列:0x40+列号,其中列号为取值为0-63;
- 写显示数据:在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写入液晶显示模块的缓存。将数据发送到相应数据控制I/O接口即可。
* 液晶显示器与DSP的连接,
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 39
地址 地址译码 片选
TMS320 控制 液晶显示模块
LF2407A 数据 8 位 数据
其他控制 控制端
* 数据信号的传送:由于液晶显示模块相对运行在 40MHz 主频下的 DSP 属于较为慢速设备,连接时需要考虑数据线上信号的等待问题;
* 电平转换:由于 DSP 为 3.3V 设备,而液晶显示模块属于 5V 设备,所以在连接控制线、数据线时需要加电平隔离和转换设备,如,ICETEK-CTR 板上使用了
74LS245。
四,实验程序
include "2407c.h"
#define LCDDELAY 1
#define LCDCMDTURNON 0x3f
#define LCDCMDTURNOFF 0x3e
#define LCDCMDSTARTLINE 0xc0
#define LCDCMDPAGE 0xb8
#define LCDCMDVERADDRESS 0x40
ioport unsigned int port8001;
ioport unsigned int port8002;
ioport unsigned int port8003;
ioport unsigned int port8004;
void Delay(unsigned int nTime); // 延时子程序
void TurnOnLCD(); // 打开显示
void LCDCLS(); // 清除屏幕显示内容
哈尔滨工业大学——DSP 原理与应用实验指导书
III-40
unsigned char ledkey[10][8]=
{
{0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00},//0
{0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00},//1
{0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00},//2
{0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00},
{0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00},
{0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00},
{0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00},
{0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00},
{0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00},
{0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00}
};
main()
{
int i,nCount=0;
unsigned int uWork;
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa;
*SCSR1=0x81fe;
*IMR=0x0;
*IFR=0xffff;
uWork=(*WSGR);
uWork&=0x0fe3f;
(*WSGR)=uWork;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-41
LCDCLS(); // 清除显示内存
TurnOnLCD(); // 打开显示
port8001=LCDCMDSTARTLINE; // 设置显示起始行
port8002=0;
Delay(LCDDELAY);
for (;;)
{
port8001=LCDCMDPAGE; // 设置操作页=0
port8002=0;
Delay(LCDDELAY);
port8001=LCDCMDVERADDRESS; // 起始列=0
port8002=0;
Delay(LCDDELAY);
for ( i=0;i<8;i++ )
{
port8003=ledkey[nCount][i]; // 屏幕左侧第1至8行第i列赋值
port8002=0; // (赋值后当前操作列自动加1,所以不需设置)
port8002=0;
Delay(LCDDELAY);
}
Delay(2048);
nCount++;
nCount%=10;
}
}
void Delay(unsigned int nDelay)
{
int ii,jj,kk=0;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-42
for ( ii=0;ii<nDelay;ii++ )
{
for ( jj=0;jj<64;jj++ )
{
kk++;
}
}
}
void TurnOnLCD()
{
port8001=LCDCMDTURNON;
port8002=0;
Delay(1024);
port8001=LCDCMDSTARTLINE;
port8002=0;
Delay(LCDDELAY);
}
void LCDCLS()
{
int i,j;
port8001=LCDCMDSTARTLINE;
port8002=0;
Delay(LCDDELAY);
for ( i=0;i<8;i++ )
{
port8001=LCDCMDPAGE+i;
port8002=0;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-43
Delay(LCDDELAY);
port8001=LCDCMDVERADDRESS;
port8002=0;
Delay(LCDDELAY);
for ( j=0;j<64;j++ )
{
port8003=0;
port8002=0;
Delay(LCDDELAY);
}
port8001=LCDCMDPAGE+i;
port8002=0;
Delay(LCDDELAY);
port8001=LCDCMDVERADDRESS;
port8002=0;
Delay(LCDDELAY);
for ( j=0;j<64;j++ )
{
port8004=0;
port8002=0;
Delay(LCDDELAY);
}
}
}
五,实验步骤
1.实验准备
⑴连接设备
① 关闭计算机和实验箱电源;
② 检查 ICETEK-LF2407-A 板上 JP6 的位置,应连接在 1-2 位置(靠近哈尔滨工业大学——DSP 原理与应用实验指导书
III-44
DSP 芯片端),即设置 DSP 工作在 MP 方式;如使用 PP 型仿真器则用附带的并口连线连接计算机并口和仿真器相应接口;
③ 关闭实验箱上三个开关。
⑵开启设备
④ 打开计算机电源;
⑤ 打开实验箱电源开关,ICETEK-CTR板上J2、J3灯亮;
⑥ 打开 ICETEK-LF2407-A 板上电源开关,注意板上指示灯 DS1 灭、DS2
和DS3亮;
⑦ 如使用 USB 型仿真器用附带的 USB 电缆连接计算机和仿真器相应接口,注意仿真器上两个指示灯均亮。
⑶设置Code Composer Studio为Emulator方式。
⑷启动Code Composer Studio
2.打开工程并浏览程序,工程目录为D:\2407EDULab\Lab8-LCD
3.编译并下载程序
4.运行程序,观察结果
5.将内层循环中的“p ort8003=ledkey[nCount][i];,语 句 改 为
“port8004=ledkey[nCount][i];”,重复步骤3-4,实现在屏幕右侧显示。
6.更改程序中对页、列的设置,实现不同位置的显示。
7.自己设计一些控制语句,实现不同显示效果。
8.停止程序运行并退出
六,实验结果与分析
实验结果:可以观察到液晶显示从0到9的计数。
分析:灵活使用控制字,可以实现复杂多变的 显示。当使用点阵图形显示时需要在 DSP 内存中建立图形存储缓冲;适当更新显示可取得动画效果。在实际生活中观察点阵显示的霓虹灯广告、交通指示牌、报站牌等领会这种控制的具体应用。
七,问题与思考
试设计程序在液晶显示屏上显示计时时钟,精 确到秒,形式为“时时:分分:
秒秒”。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-45
实验九 外设控制实验—键盘输入实验
一,实验目的
通过实验学习使用2407ADSP的扩展I/O端口接收外围设备信息的方法,了解键盘的使用原理及编程方法。
二,实验设备
计算机,ICETEK-LF2407-EDU实验箱。
三,实验原理
ICETEK-LF2407-A 是一块以 TMS320LF2407ADSP 为核心的 DSP 扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备,也可以接收外设发送的各种数据、信息。
键盘的扫描码由DSP的I/O扩展地址0x8001给出,当有键盘输入时,读此端口得到扫描码,当无键被按下时读此端口的结果为0。各按键的扫描码排列如下所示。
0x18,0x14,0x12,0x11
0x28,0x24,0x22,0x21
0x48,0x44,0x42,0x41
0x88,0x84,0x82,0x81
四,实验程序
#include "2407c.h"
#include "scancode.h"
ioport unsigned int port8000;
ioport unsigned int port8001;
ioport unsigned int port8002;
ioport unsigned int port8005;
ioport unsigned int port8007;
void Delay(unsigned int nTime); // 延时子程序
void RefreshLEDArray(); // 刷新显示
void SetLEDArray(int nNumber); // 修改显示内容
哈尔滨工业大学——DSP 原理与应用实验指导书
III-46
char ConvertScanToChar(unsigned char cScanCode); // 将键盘扫描码转换为字符
unsigned int nScreenBuffer[1024];
unsigned char ledbuf[8],ledx[8];
unsigned char ledkey[10][8]=
{
{0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00},
{0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00},//1
{0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00},//2
{0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00},
{0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00},
{0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00},
{0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00},
{0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00},
{0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00},
{0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00}
};
unsigned int uPort8000;
main()
{
int nCount,nCursorCount;
unsigned int nScanCode,nKeyCode;
unsigned char cKey;
asm(" setc INTM"); /* 关中断,进行关键设置时不允许发生中断,以免干扰 */
*WDCR=0x6f;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-47
*WDKEY=0x5555;
*WDKEY=0xaaaa; /* 关闭看门狗中断 */
*SCSR1=0x81fe; /* 打开所有外设,设置时钟频率40MHz */
(*MCRB)=0;
port8000=0; // 初始化ICETEK-CTR
port8000=0x80;
port8000=0;
port8007=0; // 关闭东西方向的交通灯
port8007=0x40; // 关闭南北方向的交通灯
port8007=0x0c1;
uPort8000=port8002; // 清键盘缓冲区
for ( nCount=0;nCount<8;nCount++ )
{
ledbuf[nCount]=0x0ff; // 显示为空白
ledx[nCount]=(nCount<<4); // 生成显示列控制字
}
RefreshLEDArray();
nCount=nCursorCount=0;
for (;;)
{
nScanCode=port8001;
nScanCode&=0x0ff;
uPort8000=port8002;
if ( nScanCode!=0 && nScanCode!=0x0ff )
{
if ( nScanCode==SCANCODE_Enter ) break;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-48
else
{
cKey=ConvertScanToChar(nScanCode);
if ( cKey!=0 )
{
nKeyCode=cKey-'0';
SetLEDArray(nKeyCode);
}
}
}
Delay(16);
nCursorCount++; nCursorCount%=4;
if ( nCursorCount==0 ) ledbuf[7]^=0x80;
}
for ( nCount=0;nCount<8;nCount++ )
{
ledbuf[nCount]=0x0ff; // 显示为空白
ledx[nCount]=(nCount<<4); // 生成显示列控制字
}
RefreshLEDArray();
exit(0);
}
void Delay(unsigned int nDelay)
{
int ii,jj,kk=0;
for ( ii=0;ii<nDelay;ii++ )
{
for ( jj=0;jj<64;jj++ )
哈尔滨工业大学——DSP 原理与应用实验指导书
III-49
{
RefreshLEDArray();
kk++;
}
}
}
void RefreshLEDArray()
{
int i;
for ( i=0;i<8;i++ )
{
port8000=ledx[i];
port8005=ledbuf[i];
}
}
void SetLEDArray(int nNumber)
{
int i;
for ( i=0;i<8;i++ )
ledbuf[i]=~ledkey[nNumber][7-i];
}
char ConvertScanToChar(unsigned char cScanCode)
{
char cReturn;
cReturn=0;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-50
switch ( cScanCode )
{
case SCANCODE_0,cReturn='0'; break;
case SCANCODE_1,cReturn='1'; break;
case SCANCODE_2,cReturn='2'; break;
case SCANCODE_3,cReturn='3'; break;
case SCANCODE_4,cReturn='4'; break;
case SCANCODE_5,cReturn='5'; break;
case SCANCODE_6,cReturn='6'; break;
case SCANCODE_7,cReturn='7'; break;
case SCANCODE_8,cReturn='8'; break;
case SCANCODE_9,cReturn='9'; break;
}
return cReturn;
}
五,实验步骤
1.实验准备
⑴连接设备
① 关闭计算机和实验箱电源。
② 检查 ICETEK-LF2407-A 板上 JP6 的位置,应连接在 1-2 位置(靠近
DSP 芯片端),即设置 DSP 工作在 MP 方式。如使用 PP 型仿真器则用附带的并口连线连接计算机并口和仿真器相应接口。
③ 关闭实验箱上三个开关。
④ 设置 ICETEK-CTR 板上拨动开关(位于板子左上角)的第 1 位 BS3 为
“OFF”状态。
⑵开启设备
① 打开计算机电源。
② 打开实验箱电源开关,ICETEK-CTR板上J2、J3灯亮。
③ 打开 ICETEK-LF2407-A 板上电源开关,注意板上指示灯 DS1 灭、DS2
和DS3亮。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-51
④ 如使用 USB 型仿真器用附带的 USB 电缆连接计算机和仿真器相应接口,注意仿真器上两个指示灯均亮。
⑶设置Code Composer Studio为Emulator方式
⑷启动Code Composer Studio
2.打开工程并浏览程序,工程目录为D:\2407EDULab\Lab9-Key
3.编译并下载程序
4.运行程序,观察结果
按下键盘上一些健,观察显示是否正确。
5.停止程序运行并退出
六,实验结果
实验结果:可以观察到发光二极管阵列显示键盘输入字符。
分析:在程序中加入分支语句实现对不同键盘输入值的处理或支持控制型按键;
修改程序中键值查找表可实现按键的重新布局或修改。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-52
实验十 外设控制实验—步进电机控制实验
一,实验目的
通过实验学习使用2407ADSP的扩展I/O端口控制外围设备信息的方法,掌握使用2407ADSP通用计时器的控制原理及中断服务程序的编程方法;了解步进电机的控制方法。
二,实验设备
计算机,ICETEK-LF2407-EDU实验箱。
三,实验原理
ICETEK-LF2407-A 是一块以 TMS320LF2407ADSP 为核心的 DSP 扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。
步进电机是由 DSP 通用 I/O 管脚输出直接控制。步进电机的起动频率大于
500PPS(拍每秒),空载运行频率大于 900PPS。2407A 的通用 I/O 口 PWM11/IOPE5 控制电机的转动频率,TDIRB/IOPF4控制转动方向。
控制的方法是使用 DSP 通用定时器设置 PWM11/IOPE5 以一定的频率改变高低状态,输出方波,设置TDIRB/IOPF4为高电平则顺时针转动,低电平为逆时针转动。
四,实验程序
#include "2407c.h"
#include "scancode.h"
#define T46uS 0x0d40
void gp_init(void);
void Delay(unsigned int nTime);
void interrupt time(void);
char ConvertScanToChar(unsigned char cScanCode);
ioport unsigned int port8000;
ioport unsigned int port8001;
ioport unsigned int port8002;
ioport unsigned int port8007;
unsigned int uWork,nCount;
unsigned int pwm1[8]={ 0x8e,0x8c,0x8d,0x89,0x8b,0x83,0x87,0x86 };
unsigned int pwm2[8]={ 0x86,0x87,0x83,0x8b,0x89,0x8d,0x8c,0x8e };
int nAddStep,nStep;
main()
{
哈尔滨工业大学——DSP 原理与应用实验指导书
III-53
unsigned int nScanCode,uWork1,i;
unsigned char cKey;
asm(" setc INTM"); /* 关中断,进行关键设置时不允许发生中断,以免干扰 */
(*PIRQR0)=0;
(*EVAIFRA)=0x80;
*EVAIFRA = 0xffff;
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa; /* 关闭看门狗中断 */
*SCSR1=0x81fe; /* 设置DSP运行频率40m */
(*MCRB)=0;
nStep=0; nAddStep=1;
port8000=0; // 初始化ICETEK-CTR
port8000=0x80;
port8000=0x0;
port8007=0; // 关闭东西方向的交通灯
port8007=0x40; // 关闭南北方向的交通灯
uWork1=port8002;
port8007=0x0c3;
gp_init();
*IMR=0x3;
*IFR=0xffff;
asm(" clrc INTM");
while ( 1 )
{
if ( nCount>16 )
{
nCount=0;
nScanCode=port8001;
nScanCode&=0x0ff;
uWork=port8002;
if ( nScanCode!=0 )
{
if ( nScanCode==SCANCODE_Enter ) break;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-54
else
{
cKey=ConvertScanToChar(nScanCode);
}
cKey=ConvertScanToChar(nScanCode);
if ( cKey!=0 )
{
if ( cKey=='4' ) nAddStep=1;
else if ( cKey=='6' ) nAddStep=-1;
}
}
}
Delay(10);
}
}
void Delay(unsigned int nDelay)
{
int i,j,k=0;
for ( i=0;i<nDelay;i++ )
for ( j=0;j<64;j++ )
k++;
}
void interrupt gptime1(void)
{
uWork=(*PIVR);
switch(uWork)
{
case 0x27,
{
(*EVAIFRA)=0x80;
port8007=pwm2[nStep];
nStep+=nAddStep;
if ( nStep<0 ) nStep=7;
else if ( nStep>7 ) nStep=0;
nCount++;
break;
}
哈尔滨工业大学——DSP 原理与应用实验指导书
III-55
}
}
void gp_init(void)
{
*EVAIMRA = 0x80;
*EVAIFRA = 0xffff;
*GPTCONA = 0x0100;
*T1PR = T46uS*9/5;
*T1CNT = 0;
*T1CON = 0x1340;
}
char ConvertScanToChar(unsigned char cScanCode)
{
char cReturn;
cReturn=0;
switch ( cScanCode )
{
case SCANCODE_0,cReturn='0'; break;
case SCANCODE_1,cReturn='1'; break;
case SCANCODE_2,cReturn='2'; break;
case SCANCODE_3,cReturn='3'; break;
case SCANCODE_4,cReturn='4'; break;
case SCANCODE_5,cReturn='5'; break;
case SCANCODE_6,cReturn='6'; break;
case SCANCODE_7,cReturn='7'; break;
case SCANCODE_8,cReturn='8'; break;
case SCANCODE_9,cReturn='9'; break;
}
return cReturn;
}
五,实验步骤
1.实验准备
⑴连接设备
① 关闭计算机和实验箱电源。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-56
② 检查 ICETEK-LF2407-A 板上 JP6 的位置,应连接在 1-2 位置(靠近
DSP 芯片端),即设置 DSP 工作在 MP 方式。如使用 PP 型仿真器则用附带的并口连线连接计算机并口和仿真器相应接口。
③ 关闭实验箱上三个开关。
⑵开启设备
① 打开计算机电源。
② 打开实验箱电源开关,ICETEK-CTR板上J2、J3灯亮;打开位于实验箱中部的电机电源开关,ICETEK-CTR板上J4灯亮。
③ 打开 ICETEK-LF2407-A 板上电源开关,注意板上指示灯 DS1 灭、DS2
和DS3亮。
④ 如使用 USB 型仿真器用附带的 USB 电缆连接计算机和仿真器相应接口,注意仿真器上两个指示灯均亮。
⑶设置Code Composer Studio为Emulator方式
⑷启动Code Composer Studio
2.打开工程并浏览程序,工程目录为D:\2407EDULab\Lab16-Motor
3.编译并下载程序
4.运行程序,观察结果
电机转动时按下ICETEK-CTR板上的键盘“4”和“6” 键,控制电机转动方向
5.停止程序运行并退出
六,实验结果
实验结果:可以看到显示/控制模块上的电机指针在转动,使用“4”和“6”键可控制其转动方向。
分析:使用优化的程序可控制电机更平滑地转 动,平滑地改变频率可使马达的摆动减到最小。
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 57
实验十一 直流电机控制实验
一,实验目的
1.学习用 C 语言编制中断程序,控制 LF2407 DSP 的通用 I/O 管脚产生不同占空比的 PWM信号。
2.学习 LF2407DSP的通用 I/O管脚的控制方法。
3.学习直流电机的控制原理和控制方法。
二.实验设备
计算机,ICETEK-LF2407-EDU 实验箱。
三.实验原理
1.TMS320LF2407DSP 的通用 I/O引脚
TMS320LF2407DSP可以提供超过 40个通用 I/O引脚。
每个 IO均有一组控制寄存器设置复用状态,这一组寄存器的访问是通过映射在
DSP数据区的地址进行。
通过设置各管脚的工作方式和状态,可以实现将它们当成通用 I/O引脚使用。
2.直流电机控制
直流电动机是最早出现的电动机,也是最早能 实现调速的电动机。近年来,直流电动机的结构和控制方式都发生了很大的变 化。随着计算机进入控制领域,以及新型的电力电子功率元器件的不断出现,使采 用全控型的开关功率元件进行脉宽调制(Puls Width Modulation,简称 PWM)控制方式已成为绝对主流。
PWM 调压调速原理
直流电动机转速 n的表达式为,
Φ
=
K
IRU
n
其中,U为电枢端电压; I为电枢电流; R为电枢电路总电阻; Φ为每极磁通量;
K为电动机结构参数。
所以直流电动机的转速控制方法可分为两类,对励磁磁通进行控制的励磁控制法和对电枢电压进行控制的电枢控制法。其中 励磁控制法在低速时受磁极饱和的限制,在高速时受换向火花和换向器结构强度的 限制,并且励磁线圈电感较大,动态响应较差,所以这种控制方法用得很少。 现在,大多数应用场合都使用电枢控制法。
绝大多数直流电机采用开关驱动方式。开关驱 动方式是使半导体功率器件工作在开关状态,通过脉宽调制 PWM来控制电动机电枢电压,实现调速。
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 58
上图是利用开关管对直流电动机进行 PWM 调速控制的原理图和输入输出电压波形。 图中,当开关管 MOSFET的栅极输入高电平时,开关管导通,直流电动机电枢绕组两端有电压 Us。 t1秒后,栅极输入变为低电平,开关管截止,电动机电枢两端电压为 0。 t2秒后,栅极输入重新变为高电平,开关管的动作重复前面的过程。 这样,
对应着输入的电平高低,直流电动机电枢绕组 两端的电压波形如图中所示。电动机的电枢绕组两端的电压平均值 Uo为
SS
S
O
UU
T
t
tt
Ut
U α==
+
+
=
1
21
1
0
式中α为占空比,α=t1/T
占空比α表示了在一个周期 T 里,开关管导通的时间与周期的比值。α的变化范围为 0≤α≤1。 由此式可知,当电源电压 Us不变的情况下,电枢的端电压的平均值 Uo取决于占空比α的大小,改变α值就可以改变端电压的平均值,从而达到调速的目的,这就是 PWM调速原理。
PWM 调速方法
在 PWM 调速时,占空比α是一个重要参数。以下 3 种方法都可以改变占空比的值,
(1)定宽调频法:这种方法是保持 t1 不变,只改变 t2,这样使周期 T(或频率)
也随之改变。
(2)调宽调频法:这种方法是保持 t2 不变,只改变 t1,这样使周期 T(或频率)
也随之改变。
(3)定频调宽法:这种方法是使周期 T(或频率)保持不变,而改变 t1和 t2。
前两种方法由于在调速时改变了控制脉冲的周 期(或频率),当控制脉冲的频率与系统的固有频率接近时,将会引起震荡,因 此这两种方法用得很少。目前,在直流电动机的控制中,主要使用定频调宽法。
3.ICETEK-CTR 直流电机模块
原理图
ICETEK-CTR即显示/控制模块上直流电机部分的原理图见下图。
哈尔滨 工业 大 学—— DSP 原 理与应 用实 验 指导书
III- 59
图中 PWM输入对应 ICETEK-LF2407-A板上 P4外扩插座第 26引脚的 IOPE5信号,
DSP 将在此引脚上给出 PWM 信号用来控制 直流电机的转速;图中的 DIR 输入对应
ICETEK-LF2407-A板上 P4外扩插座第 29引脚的 IOPF4信号,DSP将在此引脚上给出高电平或低电平来控制直流电机的方向。 从 DSP输出的 PWM信号和转向信号先经过 2
个与门和 1个非门再与各个开关管的栅极相连。
控制原理
当电动机要求正转时,IOPE5给出高电平信号,该信号分成 3路,第 1路接与门
Y1 的输入端,使与门 Y1 的输出由 PWM 决定,所以开关管 V1 栅极受 PWM 控制;第 2
路直接与开关管 V4 的栅极相连,使 V4 导通;第 3 路 经非门 F1 连 接到与门 Y2 的输入端,使与门 Y2 输出为 0,这样使开关管 V3 截止;从非门 F1 输出的另一路与开关管 V2的栅极相连,其低电平信号也使 V2截止。
同样,当电动机要求反转时,IOPE4给出低电平信号,经过 2个与门和 1个非门组成的逻辑电路后,使开关管 V3受 PWM信号控制,V2 导通,V1、V4 全部截止。
四,实验程序
程序中采用定时器中断产生固定频率的 PWM波,100次中断为一个周期,在每个中断中根据当前占空比判断应输出波形的高低电平。
主程序用轮询方式读入键盘输入,得到转速和方向控制命令。
在改变电机方向时为减少电压和电流的波动采用先减速再反转的控制顺序。
#include "2407c.h"
#include "scancode.h"
#define T46uS 0x0d40
ioport unsigned int port8000;
ioport unsigned int port8007;
void Delay(unsigned int nTime);
void interrupt none(void);
void interrupt gptime1(void);
哈尔滨工业大学——DSP 原理与应用实验指导书
III-60
void gp_init(void);
unsigned int uWork,nCount,uN,nCount1;
unsigned int cnt = 0;
unsigned int datacnt = 0,data[2]={10,30};
main()
{
asm(" setc INTM"); //关中断
port8000=0;
port8000=0x80;
port8000=2;
port8000=1; //使能直流电机
port8007=0; // 关闭东西方向的交通灯
port8007=0x40; // 关闭南北方向的交通灯
uN=10; nCount=nCount1=0; //cKey=cOldKey=0;
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa; //关闭看门狗中断
*SCSR1=0x81fe; //打开所有外设,设置时钟频率为40MHz
uWork=(*MCRC);
uWork&=0x0efdf; /* 将PWM11/IOPE5,TDIR2/IOPF4 设置成通用I/O口 */
(*MCRC)=uWork;
gp_init();
*IMR=0x2; //使能定时器中断
*IFR=0xffff; //清所有中断标志
uWork=(*WSGR); //(以下三句)设置I/O等待状态为0
uWork&=0x0fe3f;
(*WSGR)=uWork;
uWork=(*PFDATDIR);//(以下三句)将direct置为0
uWork|=0x1000;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-61
uWork&=0xffef;
(*PFDATDIR)=uWork;
asm(" clrc INTM"); //开中断
Delay(128);
*T1PR=T46uS; //保存结果周期=0xd40*25ns
for(;;)
{
if ( nCount>50 )
{
nCount=0;
}
}
port8000=0;
port8000=0x80;
port8000=0;
exit(0);
}
void interrupt gptime1(void)
{
uWork=(*PIVR);
switch(uWork)
{
case 0x27,
{
(*EVAIFRA)=0x80;/////////////////////here:)
uWork=(*PEDATDIR);
uWork|=0x2000;
if ( nCount>uN )
哈尔滨工业大学——DSP 原理与应用实验指导书
III-62
uWork|=0x20;
else
uWork&=0x0ffdf;
(*PEDATDIR)=uWork;
nCount++;
nCount1++; nCount1%=100;
cnt++;
if(cnt>10000)
{
cnt = 0;
datacnt ++;
if (datacnt > 1)
datacnt = 0;
uN=data[datacnt];
}
break;
}
}
}
void gp_init(void)
{
*EVAIMRA = 0x80; //使能 T1PINT
*EVAIFRA = 0xffff; //清中断标志
*GPTCONA = 0x0000; //setting of period interrupt flag starts ADC
*T1PR = T46uS*9/5; //保存结果周期=0xd40*200*9/5ns=1.22ms=820Hz
*T1CNT = 0; //计数器从0开始计数
*T1CON = 0x1340;
}
void Delay(unsigned int nDelay)
哈尔滨工业大学——DSP 原理与应用实验指导书
III-63
{
int i,j,k;
for ( i=0;i<nDelay;i++ )
for ( j=0;j<16;j++ )
k++;
}
void interrupt none(void)
{}
五,实验步骤
1.实验准备
(1)连接设备
① 关闭计算机和实验箱电源。
② 检查ICETEK-LF2407-A板上跳线JP6(MP/MC)的位置,应设置在“1
-2”位置,即设置 DSP 工作在 MP 方式。如使用 PP 型仿真器则用附带的并口连线连接计算机并口和仿真器相应接口。
③ 关闭实验箱上三个开关。
④ 将小键盘接头插入显示/控制模块上相应插座P8。
⑵开启设备
① 打开计算机电源。
② 打开实验箱全部电源开关,包括两个信号源及ctr控制模块的电源。
③ 注意:ICETEK-LF2407-A 板上指示灯 D1 和 D2 亮,ICETEK-CTR 板上
J2、J3灯亮。
④ ICETEK-LF2407-A板上指示灯D1、D2亮。
⑤ 如使用 USB 型仿真器用附带的 USB 电缆连接计算机和仿真器相应接口,注意仿真器上两个指示灯均亮。
⑶设置Code Composer Studio为Emulator方式。
⑷启动Code Composer Studio 2.0
2.打开工程并浏览程序,工程目录为D:\ICETEK-LF2407-EDULab\Lab21-DCMotor
3.编译并下载程序
4.运行并观察程序运行结果
开始运行程序后,电机以较高的转速转动,经过大概5s后,电机转速变慢,再经过5s电机转速又加快,依次循环下去。
5.停止运行
如果程序退出或中断时电机不停转动,可以将控制ICETEK-CTR模块的电源开关关闭再开启一次。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-64
六.实验结果
通过实验可以发现,直流电机可以程控的改变转速和方向。
七.问题与思考
电动机是一个电磁干扰源。电动机的启停还会 影响电网电压的波动,它周围的电器开关也会引发火花干扰。因此,除了采用 必要的隔离、屏蔽和电路板合理布线等措施外,看门狗的功能就会显得格外重要。 看门狗在工作时不断地监视程序运行的情况,一旦程序“跑飞”,会立刻使DSP复位。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-65
实验十二 异步串口通信实验
一,实验目的
1,了解TMS320LF2407A DSP片内串行通信接口(SCI)的特点。
2,学会设置SCI接口进行通信。
3,了解ICETEK-LF2407-A板上对SCI接口的驱动部分设计。
4,学习设计异步通信程序。
二,实验设备
计算机,ICETEK-LF2407-EDU实验箱(或ICETEK仿真器+ICETEK-LF2407-A系统板+相关连线及电源)。
三,实验原理
1,TMS320LF2407A DSP串行通信接口模块
TMS320LF240x 器件包括串行通信接口 SCI 模块。SCI 模块支持 CPU 与其他使用标准格式的异步外设之间的数字通信。SCI接收器和发送器是双缓冲的,每一个都有它自己单独的使能和中断标志位。两者都可以 独立工作,或者在全双工的方式下同时工作。
2,ICETEK-LF2407-A板异步串口设计
由于 DSP 内部包含了异步串行通信控制模块,所以在板上只需加上驱动电路部分即可。驱动电路主要完成将SCI输出的0-3.3V电平转换成异步串口电平的工作。
转换电平的工作由 MAX232 芯片完成,但由于它是 5V 器件所以它同 DSP 间的信号线必须有电平转换,此板采用的是74LS245。
3,串行通信接口设置
* CPU进行串行通信时可以采用两种方式,一种是轮询方式,即CPU不断查询串口状态进行接收和发送,缺点是占用CPU时间太多;另一种是中断方式,SCI的接收和发送都可以产生中断信号,这样 CPU 可以在完成其他一些工作的同时进行串行通信。
* 串行通信接口波特率计算
内部生成的串行时钟由系统时钟SYSCLK频率和波特率选择寄存器决定。串行通信接口使用16位波特率选择寄存器,数据传输的速度可以被编程为65000多种不同的方式。
不同通信模式下的串行通信接口异步波特率由下列方法决定,
- BRR=1—65535时的串行通信接口异步波特率,
SCI异步波特率=SYSCLK/ [( BRR+1)*8]
其中,BRR=SYSCLK/(SCI异步波特率*8)-1;
- BRR=0时的串行通信接口异步波特率,
SCI异步波特率=SYSCLK/16
这里BRR等于波特率选择寄存器的16位值。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-66
四,实验程序
/* 2407A板:将JP11和JP14短接到2-3;
使用直连的串口通信电缆;
启动串口调试助手.exe;
PC机发送一个"."为结束标志*/
#include "2407c.h"
void wait(int nWait);
char cString[17]={"Hello PC!,Over|" },cReceive,cBuffer[17],cAnswer[16]
= {"Oh,you say"};
int bReceive,nLen;
main()
{
unsigned int uWork;
int i,k;
bReceive=0;
asm(" setc INTM");
asm(" clrc SXM");
asm(" clrc OVM");
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa; /*关闭看门狗中断*/
*SCSR1=0x81fe; /* 打开所有外设,设置时钟频率为40MHz */
uWork=(*MCRA);
uWork|=0x03; /* use SCITXD,SCIRXD */
哈尔滨工业大学——DSP 原理与应用实验指导书
III-67
(*MCRA)=uWork;
(*SCICCR)=0x07; /* 8位字符,1停止位,无校验*/
(*SCICTL1)=0x03; /* 使能发送和接收 */
(*SCICTL2)=0x00; /* 禁止接收和发送中断 */
(*SCIHBAUD)=0x02; /* 波特率=208H,40MHz */
(*SCILBAUD)=0x08; /* 208h=40*10^6/(9600*8)-1 */
(*SCICTL1)=0x23; /* 使能发送和接收,复位SCI */
while ( 1 )
{
if ( bReceive==0 )
{
for ( i=0;i<16;i++ )
{
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
(*SCITXBUF)=cString[i];
wait(1024);
}
}
else
{
for ( i=0;i<10;i++ )
{
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
哈尔滨工业大学——DSP 原理与应用实验指导书
III-68
(*SCITXBUF)=cAnswer[i];
wait(1024);
}
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
(*SCITXBUF)='\"';
for ( i=0;i<nLen;i++ )
{
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
(*SCITXBUF)=cBuffer[i];
wait(1024);
}
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
(*SCITXBUF)='\"';
wait(1024);
for ( i=9;i<16;i++ )
{
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
哈尔滨工业大学——DSP 原理与应用实验指导书
III-69
(*SCITXBUF)=cString[i];
wait(1024);
}
}
k=0; bReceive=0;
while ( 1 )
{
do
{
uWork=(*SCIRXST);
} while ( (uWork&0x40)==0 );
cReceive=(*SCIRXBUF);
cBuffer[k]=cReceive;
if ( cReceive=='.' )
{
cBuffer[k+1]='\0';
nLen=k+1;
bReceive=1;
break;
}
k++; k%=16;
}
}
}
void wait(int nWait)
{
int i,j,k=0;
for ( i=0;i<nWait;i++ )
哈尔滨工业大学——DSP 原理与应用实验指导书
III-70
for ( j=0;j<64;j++ )
k++;
}
五,实验步骤
1,实验准备
⑴.连接设备
① 关闭计算机和实验箱电源;
② 检查 ICETEK-LF2407-A 板上 JP6 的位置,应连接在 1-2 位置(靠近
DSP芯片端),即设置DSP工作在MP方式;
③ 关闭实验箱上三个开关;如使用 PP 型仿真器则用附带的并口连线连接计算机并口和仿真器相应接口;
④ 用附带的串行通信电缆连接计算机COM端口和ICETEK-LF2407-A板上
P6九针接头。
⑵.开启设备
① 打开计算机电源;
② 打开实验箱电源开关,打开ICETEK-LF2407-A板上电源开关,注意板上指示灯DS1灭、DS2和DS3亮;
③ 如使用 USB 型仿真器用附带的 USB 电缆连接计算机和仿真器相应接口,注意仿真器上两个指示灯均亮。
⑶.设置Code Composer Studio为Emulator方式,
参见“Code Composer Studio入门实验”之四.3。
⑷.启动Code Composer Studio
2,打开工程,浏览程序,工程目录为D:\2407EDULab\Lab20-SCI
3,编译并下载程序
4,运行“串口调试助手”
利用桌面上“我的电脑”,找到D:\2407EDULab\Lab20-SCI目录中的程序“串口调试助手 V2.0B.exe”,双击它启动;设置“串口调试助手”的串行端口为实际连接的计算机 COM 端口,设置波特率为 9600,设置传输方式为 8 位、无校验、1 个停止位。
5,运行程序观察结果
运行程序后,切换窗口到“串口调试助手”;在“串口调试助手”的接收窗口中可看到 DSP 通过 SCI 发送来的“Hello PC!,Over|”字样;在“发送的字符/数据”
栏中输入一些要发送到DSP的字符串,以“.”字符结尾;然后单击“手动发送”按钮;DSP在接收到PC机的信息后会自动进行回答。
6,结束程序运行退出。
六,实验结果
哈尔滨工业大学——DSP 原理与应用实验指导书
III-71
通过DSP传送到PC机上的信息,可以看出:SCI正确工作。
七,问题与思考
请考虑用中断方式设计程序完成异步串行通信。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-72
实验十三 快速傅立叶变换(FFT)算法实验
一,实验目的
1.掌握用窗函数法设计FFT快速傅里叶的原理和方法。
2.熟悉FFT快速傅里叶特性。
3.了解各种窗函数对快速傅里叶特性的影响。
二,实验设备
计算机,ICETEK-LF2407-EDU实验箱(或ICETEK仿真器+ICETEK-LF2407-A系统板+相关连线及电源)。
三,实验原理
1.FFT快速傅里叶基础理论。
2.FFT快速傅里叶确定方法。
四,实验程序
#include "math.h"
#include "2407c.h"
float pi=3.1415926;
int r=4;
int N=16;
int k,i,j,bfsize,p,t;
float u_real,u_imag,v_real,v_imag;
float x1_real[16],x1_imag[16],x2_real[16],x2_imag[16];
float wk_real[16],wk_imag[16];
float y_real[16],y_imag[16],z_imag[16],z_real[16],x_real[16],x_imag[16];
void interrupt none(void)
{}
main()
{
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa; /* 关闭看门狗中断 */
*SCSR1=0x81fe; /* 打开所有外设,设置时钟频率为40MHz */
for(i=0;i<N/2;i++)
{
wk_real[i]=cos(-2*pi*i/N);
哈尔滨工业大学——DSP 原理与应用实验指导书
III-73
wk_imag[i]=sin(-2*pi*i/N);
}
for(i=0;i<N;i++)
{
x1_real[i]=exp(-i);
x1_imag[i]=0;
}
for(i=0;i<N;i++)
{
y_real[i]=x1_real[i];
y_imag[i]=x1_imag[i];
z_real[i]=x2_real[i];
z_imag[i]=x2_imag[i];
}
for(k=0;k<r;k++)
{
for(j=0;j<1<<k;j++)
{
bfsize=1<<(r-k);
for(i=0;i<bfsize/2;i++)
{
p=j*bfsize;
t=i*(1<<k);
u_real=y_real[i+p]-y_real[i+p+bfsize/2];
u_imag=y_imag[i+p]-y_imag[i+p+bfsize/2];
v_real=u_real*wk_real[t]-u_imag*wk_imag[t];
v_imag=u_real*wk_imag[t]+u_imag*wk_real[t];
z_real[i+p]=y_real[i+p]+y_real[i+p+bfsize/2];
z_imag[i+p]=y_imag[i+p]+y_imag[i+p+bfsize/2];
z_real[i+p+bfsize/2]=v_real;
z_imag[i+p+bfsize/2]=v_imag;
}
}
for(i=0;i<N;i++)
{
哈尔滨工业大学——DSP 原理与应用实验指导书
III-74
x_real[i]=y_real[i];
x_imag[i]=y_imag[i];
y_real[i]=z_real[i];
y_imag[i]=z_imag[i];
z_real[i]=x_real[i];
z_imag[i]=x_imag[i];
}
}
for(j=0;j<N;j++)
{
p=0;
for(i=0;i<r;i++)
{
if(j&(1<<i))
p+=1<<(r-i-1);
}
x2_real[j]=y_real[p];
x2_imag[j]=y_imag[p];
}
for(i=0;i<N;i++)
x1_real[i]=sqrt(pow(x2_real[i],2)+pow(x2_imag[i],2));
i = i;
while (1)
{}
}
五,实验步骤
1,实验准备
(1) 连接设备
① 关闭计算机和实验箱电源;
② 检查 ICETEK-LF2407-A 板上 JP6 的位置,应连接在 1-2 位置(靠近
DSP芯片端),即设置DSP工作在MP方式;
③ 关闭实验箱上三个开关。
(2) 开启设备
① 打开计算机电源;
② 打开实验箱电源开关,打开ICETEK-LF2407-A板上电源开关,注意板上指示灯DS1灭、DS2和DS3亮;
③ 使用USB型仿真器用附带的USB电缆连接计算机和仿真器相应接口,
注意仿真器上两个指示灯均亮。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-75
(3) 设置Code Composer Studio为Emulator方式,
(4) 启动Code Composer Studio
2,打开工程,浏览程序,工程目录为D:\2407EDULab\Lab18-FFT
3,编译并下载程序
六,实验结果
双击变量 x1_real,单击右健,点击“add to watch window”,察看数组
x1_real[16]的值,在屏幕下方显示运行结果。如下所示,
x1_real[16]={1.58,1.48,1.28,1.08,0.93,0.84,0.78,0.74,0.73,0.74,
0.78,0.84,0.93,1.08,1.27,1.48}
七,问题与思考
试选用不同点数的fft运算法则来运算。