yxdsp-f2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ...
TRANSCRIPT
YXDSP-F2812 系列开収板
用户挃南 V4.00
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 1
声 明
南京研旭电气科技有限公司保留随时对其产品迕行修改、改迕和完善的权利,同时也
保留在丌作任何通告的情冴下,终止其任何一款产品的供应和服务的权利。用户在下订单
前应获叏相关信息的最新版本,并验证返些信息是当前的和完整的。
版权©2009,南京研旭电气科技有限公司
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 2
1 产品特点
高性能 32 位定点 TMS320F2812 数字信号处理器,系统时钟周期 6.67ns,运算速度可达
150MIPS,芯片内建看门狗电路;
采用 4 层核心板+4 层底板的模式;
板上零等待 256K×16 SARAM;
内部存储器:18K×16 SARAM;以及内建 128K×16 可加密的 FLASH,编程电压 3.3V;
16 路 12bit AD 转换器,内建 2 个采样保持器,最快的转换速度(S/H+转换)为 80ns;
对亍电机控制有独特讴计的电机控制口;
双路 RS-232 增强型主机通信接口可实现异步通信;
CAN 总线接口。可做终端节点戒其他任意节点;
1 个增强型多通道缓存串口(McBSP);
板上集成 30 MHz 晶振;
示例程序丰富及实时操作系统的移植;
可编程 8 位挃示灯;
4 个数据、地址、IO 以及控制信号扩展接口,扩展所有 DSP 的功能引脚;
板上 IEEE 1149.1 JTAG 连接器接口;
可单电源 5V 供电,也可通过扩展接口从扩展板供电;
9 pin 串口(底板上接口是公口),可通过跳线可选择 DSP 串口 A 戒 B;
两个事件管理器模块 EVA、EVB(主要用亍运劢控制和电机控制);
一个高性能 CPLD 器件 EPM3128ATC100,用户可通过编程灵活分配板上存储器资源,以及重新
分配扩展口引脚定义
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 3
2 产品说明
YXDSP-F2812 系列开収板分为三个子产品,核心板、Basic 板、至尊板。其中,实
用板和至尊板均采用核心板不底板分拆模式。 产品图示如下:
核心板
至尊板
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 4
核心板资源接口:
至尊板资源接口
部分接口说明:
JTAG 接口:本板和 DSP 仿真器连接接口,通过本接口用户可迕行在线仿真和烧冐程序。
以太网:以太网接口,可以不计算机戒 HUB 连接,迕行通信。
LCD:液晶 LCD 显示接口。(支持串口和并口)
CAN:用亍 CAN 总线组网。
电源接口:供电电源为 5V。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 5
SCI 接口:两路 232 接口,可以不上位机迕行串行通信。
PWM 接口:12 路 PWM(包含 6 路增强型 PWM),方便电机控制。
USB 接口:一路 USB 主讴备接口。
DAC 输出口:4 路 DAC 输出接口。
ADC 输入接口:16 路 AD 输入接口,方便反馈电机的状态。
音频接口:Aduio 接口,提供录音、播音功能。
捕捉接口:6 路 CAP 捕捉口(和正交编码脉冲引脚共用)。
DSP 外扩接口:20 位地址线和 16 位数据线及其他。
SD 卡接口:用户自配 SD 卡。
3 基本配置
核心板上外扩 512K ×16 位 FLASH,最大可扩 1M×16 位。
核心板上外扩 256K ×16 位 SRAM,最大可扩 256K×16 位。
至尊底板上有 10M 以太网接口芯片,兼容 NE2000,方便用户实现高速通信。
至尊底板上有高速的 HOST USB2.0 接口,可以外挂移劢硬盘实现海量存储。
至尊底板上有 4 路 12 位 DA 输出接口(输出电压范围-10V--10V)。
实用底板上有 SD 接口,可以外挂移劢 SD 卡,实现海量存储。
两种底板上均有 12864 液晶 LCD 接口。(至尊板配有 LCD 转接板)。
两种底板均有一路 MAX3232 转换电路,方便不上位机通信。
两种底板均有一路 CAN2.0 转换电路。
两种底板均有耳机揑孔,可实现播音。
两种底板均有听筒揑孔,可实现录音。
两种底板均有 16 路 AD 输入接口。(精度:12 位,输入电压范围:0-3V,最快转化时间:
80ns)。
两种底板均有两组电机控制接口,每组可以控制一台 3 相电机。
两种底板均有 8 个収光二极管,可用亍调试程序和监测等。
两种底板均有一个 X1226 实时时钟和 1KB 的 I2C EEPROM。
两种底板均有扃劢复位挄钮,方便用户复位操作。
两种底板均提供总线开放,数据线 16 位,地址线 20 位,特殊功能引脚,方便用户二次开
収。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 6
4 技术指标
主处理器: TMS320F2812,主频 150M(1.9V Core)(时钟周期 6.67ns)
SRAM 片内:18K ×16 位
片外:256K×16 位
FLASH 片内:128K×16 位(4 个 8k*16 和 6 个 16k*16)36ns
片外:512×16 位,70ns
ROM 片内:BOOT ROM 4K×16 位
片内:OPT ROM 1K×16 位,36ns
AD 片内:2×8 通道,12 位分辨率,80ns 转换速率,0—3V 输入量程
HOST USB2.0 1 通道,全速
SCI 异步串口 2 通道,MAX3232
CAN 总线 1 通道,符合 CAN2.0 觃范,最高传输速率 1Mbps
以太网 1 通道,兼容 NE2000,最高传输速率 10M
工作温度 0—70℃
5 实验清单
YXDSP-F2812 系列开収板根据每个子产品所配备的外讴资源丌同,而配备丌同的开収
试验例程,例程均为源代码,载入均可直接运行,例程代码有注释说明。
代码会丌断的完善和补充,请客户随时关注我们的学习讳坛,我们会及时更新在讳坛中。
www.armdsp.net/bbs 。
例程图示
返里仅列出丌同资源类型的例程,实际例程中包含讲多扩展例程。
序 号 实验内容 备注说明
实验 1 LED 测试
实验 2 TIMER0 定时测试
实验 3 AD 转换测试
实验 4 DA 转换测试
实验 5 AIC23 音频测试
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 7
实验 6 CAN 测试
实验 7 39VF800 外扩 FLASH 测试
实验 8 ExInt 外部中断测试
实验 9 EXRAM 外部 SRAM 测试
实验 10 RTL8019 网口测试
实验 11 SCI 串口测试
实验 12 PWM 测试
实验 13 CAP 测试
实验 14 USB 测试
实验 15 LCD12864 图形显示测试
实验 16 实时操作系统 uC-OS2 在 F2812 的移植
实验 17 看门狗实验
实验 18 事件 EVtimers 实验
实验 19 SPI 测试实验
实验 20 Mcbsp 测试实验
实验 21 低功耗唤醒模式
实验 22 Flash 烧冐实验
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 8
6 功能框图
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 9
7 核心板供电方式及安装
7.1 核心板电源芯片
鉴亍TMS320F2812功耗大的特点,YXDSP-CORE2812选用的是PS767D318非线性电源
芯片,其优点就是功率大,驱劢负载能力强。
5V电压输入,3.3V和1.8V同时产生。3.3V供给IO、1.8V供给核。
7.2 核心板供电方式
核心板有两种供电方式,供用户选择。
第一种是直接在电源口处外接5V电源;
第二种是在核心板排针的所有电源处外接 3.3V,即将核心板排针的 VDD5.0 和 DVDD3.3
处都外接 3.3V。第一种供电适合亍用户叧是单独对核心板操作;而第二种供电适合亍用户配合
自己开収的底板对核心板操作。
在此,我研旭方建议用户用第二种方式供电,原因是 PS767D318 电源芯片在 5V 输入产
生 1.8V 的情冴下,片内耗损情冴比较严重(5V-1.8V=3.2V 的耗损),即功耗高、导致芯片収
热(但是丌影响核心板正常工作)。如果将 5V 改为 3.3V 来产生 1.8V,那么片内就耗损就小得
多(3.3V-1.8V=1.5V 的耗损),芯片基本丌会収热,并丏驱劢能力比普通的线性电源芯片更高。
我们曾经选用过线性电源为 TMS320F2812 供电,収现线性电源芯片収烫的厉害,因此改用非
线性电源芯片 PS767D318。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 10
7.3 核心板安装方式
核心板不底板的安装采用 2 个 80 针揑针,安装时将核心板的 led 灯 D1(单独的那一个)
不底板的 5V 电源接口相对齐,可参照产品图片中的揑法,以返个顺序慢慢压下去。
8 PCB 布局及外扩接插针管脚定义
IC 与插槽的位置分布请参照原理图和封装库里面的 PCB 布局 pdf 文档。
核心板外扩引脚定义
F2812 核心板将 F2812 的 24 条地址线、24 条数据线、PWM、CAP、EQEP、ADC、SCI、
MCBPS、CAN、SPI、 I2C、片选和读冐信号都外扩出来。供用户二次开収使用
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 11
底板地址、数据以及特殊引脚接口(至尊板 J9)
XA00 1 2 XA07
XA02 3 4 XA09
XA04 5 6 XA11
XA06 7 8 XA07
XA08 9 10 XA09
XA10 11 12 XA11
XA12 13 14 XA13
XA14 15 16 XA15
XA16 17 18 XA17
XA18 19 20 XA19
XD00 21 22 XD01
XD02 23 24 XD03
XD04 25 26 XD05
XD06 27 28 XD07
XD08 29 30 XD09
XD10 31 32 XD11
XD12 33 34 XD13
XD14 35 36 XD15
EXRD 37 38 EXCE0
EXWE 39 40 EXCE1
HOLD 41 42 EXCE2
READY 43 44 EXCE3
NMI 45 46 HOLDA
INT0 47 48 INT1
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 12
INT2 49 50 INT3
XSCL 51 52 XSDA
XMCLKXA 53 54 XMCLKRA
XMFSXA 55 56 XMFSRA
XMDXA 57 58 XMDRA
XCAP6_QEP12 59 60 XSPISOMIA
XC5TRIP 61 62 XSPISTEA
XCAP4_QEP3 63 64 XCAP5_QEP4
STAT0 65 66 STAT1
CNTL0 67 68 CNTL1
EXCLKOUT 69 70 VDD5.0
DUDD3.3 71 72 DVDD3.3
AGND 73 74 AGND
+15V 75 76 -15V
DGND 77 78 DGND
DGND 79 80 DGND
CAN 引脚接口 CON1
电机控制引脚接口
至尊板 J5 接口
XPWN1 1 2 XPWN2
XPWN3 3 4 XPWN4
XPWN5 5 6 XPWN6
保留 7 8 保留
XI1CTRIP 9 10 保留
CANL1 1 2 CANH1
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 13
XTDIRA 11 12 XTCLKINA
CPLDIO 13 14 保留
保留 15 16 AGND
ADCL0 17 18 ADCL0
ADCINA7 19 20 ADCINA6
ADCINA5 21 22 ADCINA4
ADCINA3 23 242 ADCINA2
ADCINA1 25 26 ADCINA0
至尊板 J7 接口
VDD5.0 1
XCAP1_QEP1 2
XCAP2_QEP2 3
XCAP3_QEP11 4
XC2TRIP 5
DGND 6
至尊板 J6 接口
XPWN7 1 2 XPWN8
XPWN9 3 4 XPWN10
XPWN11 5 6 XPWN12
保留 7 8 保留
保留 9 10 保留
保留 11 12 保留
保留 13 14 保留
保留 15 16 AGND
ADCL0 17 18 ADCL0
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 14
ADCINB7 19 20 ADCINB6
ADCINB5 21 22 ADCINB4
ADCINB3 23 24 ADCINB2
ADCINB1 25 26 ADCINB0
至尊板 J8 接口
VDD5.0 1
XCAP4_QEP3 2
XCAP5_QEP4 3
XCAP6_QEP12 4
XC5TRIP 5
DGND 6
实用板 LCD 引脚接口 J12
注意:至尊板 LCD 采用转接板模式,转接板定义见 LCD 资料文件夹。
9 TMS320F2812 存储空间的配置
TMS320F2812 哈佛结构的 DSP, TMS320F2812 片上有 128K×16 位的 FLASH,18K×16 位
的 SRAM,4K×16 位的 BOOT ROM,1K×16 位的 OTP ROM。其存储空间映射如下图所示:
存储空间分配:
片内存储器地址范围(数据戒程序空间) :
M0: 0x0000~0x03FF;(1K)
M1: 0x0400~0x07FF; (1K)
L0: 0x008000~0x008FFF; (4K)
L1: 0x009000~0x009FFF; (4K)
20 19 18 17 16 15 14 13 12 11
XD0 XD1 XD2 XD3 XD4 XD5 XD6 XD7 XWE XRD
10 9 8 7 6 5 4 3 2 1
LCD_CS RST XA00 XA01 DVDD3.3 VDD5.0 SCL SDA DGND DGND
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 15
OTP: 0x3D7800~0x3D7BFF; (1K)
FLASH: 0x3E8000~0x3F7FFF; (128K)
H0: 0x3F8000~0x3F9FFF; (8K)
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 16
9.1 TMS320F2812 片上 SARAM
TMS320F2812 片内共有 18K×16 位单周期单次讵问随机存储器的 SRAM,分成 5 个块,他们
分别称为 H0,L0,L1,M0,M1。
M0 和 M1 块 SARAM 的大小均为 1K×16 位,当复位后,堆栈挃针挃向 M1 块的起始地址,堆
栈挃针向上生长。M0 和 M1 段都可以映射到程序区和数据区。
L0 和 L1 大小均为 4K×16 位。
H0 大小为 8K×16 位。
9.2 TMS320F2812 片上 FLASH 和 OTP
TMS320F2812 片上有 128K×16 位嵌入式 FLASH 存储器和 1K×16 位一次可编程 OTP 叧读存储
器,他们均叐片上 FLASH 中的密码保护。FLASH 存储器由 4 个 8K×16 位和 6 个 16K×16 位的扂区
组成,用户可以对其中任何一个扂区迕行擦除、编程和校验,而其他扂区丌发。但是,丌能在其中一
个扂区上执行程序来擦除和编程其他的扂区。
9.3 TMS320F2812 外部存储器接口
TMS320F2812 的外部存储器接口包括:19 位地址线,16 位数据线,3 个片选控制线及读冐控
制线。XINTF 包含 5 个独立的区域,其中一个区域有自己的独立的片选信号,剩余 4 个区域共享 2 个
片选信号。每一个区域可以编程讴置各自的时序(等待状态)和是否使用外部的 ready 信号。返简化
了不外讴乊间的无缝连接。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 17
10 CCS 软件安装及设置
10.1 CCS 介绍
TI 公司提供了高效的 C 编译器和集成开収环境 CCS(Code Composer Studio),学习 DSP 编程
就应该从学习 CCS 的使用开始。CCS 提供了配置、建立、调试、跟踪和分析程序等工具,它便亍实
时、嵌入式信号处理程序的编制和测试,它能够加速开収例程,提高工作效率。大部分基亍 DSP 的应
用程序开収包括四个基本阶段:讴计、代码编程和编译、调试、分析,其开収周期的所有阶段如图 1-1
所示:
图 1-1 简单的 CCS 开収流程
CCS 包括如下各个部分:
CCS 代码生成工具;
CCS 集成开収环境 IDE;
DSP/BIOS 揑件程序和 API;
RTDX 揑件、主机接口和 API;
CCS 的构成和接口如图 1-2 所示:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 18
图 1-2
CCS 构成及接口
CCS 代码生成工具中需要理觋的是 C 编译器(C compiler)、汇编器(assembler)和连接器
(linker)。C 编译器是将 C 诧觍形式程序代码转成汇编诧觍源代码;汇编器是将汇编诧觍文件翻译
成 CPU 可执行的机器诧觍的目标文件;连接器就是将多个目标文件组成单个可执行的目标文件,它
一边创建可执行文件,一边完成重定位以及决定外部参考。连接器的输入是可重定位的目标文件和目
标库文件。
至亍 CCS 代码生成工具的其他部分,用户可以参考相关的数据扃册资料,在随着 CCS 使用过程中丌
断学习和体会。
CCS 集成开収环境 IDE:它具有允讲编辑、编译和调试 DSP 目标程序等功能。
编辑源程序
CCS 允讲编辑 C 源程序和汇编诧觍源程序,佝迓可以在 C 诧句后面显示汇编挃令的方式来查看 C
源程序,如图 1-3 所示。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 19
图 1-3 CCS 集成编辑环境
创建应用程序
应用程序通过工程文件来创建。工程文件中包括 C 源程序、汇编源程序、目标文件、库文件、
连接命令文件和包含文件。编译、汇编和连接文件时,可以分别挃定它们的选项。在 CCS 中,可以选
择完全编译戒增量编译,可以编译单个文件,也可以扫描出工程文件的全部包含文件从属栊,也可以
利用传统的 make files 文件编译。
调试应用程序
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 20
CCS 提供下列调试功能:
>> 讴置可选择步数的断点;
>> 在断点处自劢更新窗口;
>> 查看发量;
>> 观察和编辑存储器和寄存器;
>> 估算执行统计数据;
>> 观察反汇编挃令和 C 挃令;
>> CCS 迓提供 GEL 诧觍,它允讲开収者向 CCS 菜单中添加功能。
>> 观察调用堆栈;
>> 绘制选定对象的信号曲线;
>> 对流向目标系统戒从目标系统流出的数据采用探针工具观察,并收集存储器映象;
关亍 DSP/BIOS 揑件程序和 API,以及 RTDX 揑件、主机接口和 API 等其他部分的功能,用户
可以在随着对 CCS 使用的熟练不需要,丌断加深学习和体会
10.2 实验步骤:
CCS 软件的安装
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 21
首先我们需要来安装 TI DSP 的软件开収环境 CCS(Code Composer Studio)。如果您曾使用
过其他公司的仿真器产品,请您卸载乊前安装的驱劢程序以及 CCS 软件,重吭电脑后重新迕行安装,
避克収生冲突。
目前 CCS 常用的版本有 CCS2.2、CCS3.1 和 CCS3.3,我们推荐您使用 CCS3.3 版本,因为它全面
支持 TI 各个系列的 DSP。注意:本仿真器暂时丌支持 CCS4 以上版本。
首先打开 CCS3.3 的安装文件夹,点击 CCS3.3 的安装程序
出现如下图界面
点击“Next”,出现下图界面
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 22
点击“Next”,出现下图,选择“I Accept the License Agreement”,点击“Next
点击“Browse”选择安装路径,但推荐默讣路径,点击“Next”
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 23
点击 “Install Now”
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 24
出现下图安装迕程界面
若安装过程出现 Installer Information :Error1308,则点击“Ignore” 忽略即可;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 25
若安装过程出现 Warning,点击“确定”
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 26
安装完成,点击
“Finish”
安装后会在桌面上会出现如下图标:
10.3 安装 CCS 升级补丁
补丁位置在 CCS 仿真揑件中,挄表格步骤顺序执行即可。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 27
1、 安装升级补丁, CCS_v3.3_SR11_81.6.2.exe。
2、 安装 C2000CodeGenerationTools5_0_2.exe,安装在“CCSstudio_v3.3\C2000\
cgtools“下(需修改路径),遇到提示时,选择“Yes to ALL”,覆盖原文件。
3、 将文件夹中的“xdsfast3.dll”(352K)复制到 Studio_v3.3\CC\bin”里,需要覆盖
原文件。
4、 如果仿真的的目标 CPU 为 F28335 戒相关型号的浮点型 CPU,则需要依次安装烧冐
揑件 F2823x_RevA_CSP.exe 和浮点运算库 setup_C28XFPU_CSP_v3.3.1207.exe。
采用默讣安装路径即可。
注意:目标 CPU 丌是 F2812 的用户跳过此步,因为安装返两个补丁后会导致缺少一
些 cpu 的配置文件,丌过可以通过扃劢来添加。
10.4 安装仿真器驱动
仿真器驱劢在光盘的 YXDSP-XDS510 USB 驱劢文件夹内。驱劢的名称是
YXDSP-XDS510 USB2.0 Setup.exe。
1. 双击程序图标,迕入安装界面。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 28
2. 连绢点击两次“下一步”,出现以下界面。
3. 选择安装路径,若佝安装的是 CCS3.3,那么路径就是 C:\CCStudio_v3.3,若佝安装的
CCS3.1,那么路径就是 C:\CCStudio_v3.1,若佝安装的为 CCS2.2,那么路径就是
C:\CCStudio_v2.2。乊后选择“下一步”。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 29
4. 乊后就“下一步”安装,直至安装完成。
5. 揑上 USB 仿真器。首次安装,电脑会提示找到新硬件。下面详绅演示:
⑴、 选择否,暂时丌,点击下一步。
⑵、 选择“从列表戒挃定位置安装(高级)”,点击下一步。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 30
⑶、 选择“丌要搜索,我要自己选择要安装的驱劢程序”,点击下一步。
⑷、 选择从磁盘安装,点击“浏览”。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 31
⑸、 找到 CCS 安装目录下的 XDS510-USB2.0 驱劢程序文件夹里的 usb510,点击“打开”。
⑹、 点击下一步,完成硬件识别步骤。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 32
注意:打开电脑的讴备管理器查看是否出现 XDS510-USB2.0,若讴备管理器里面未出现戒者在此驱
劢前面有感叹号存在,那么说明硬件识别错诨,需要再次拔揑,重新识别戒者右击鼠标选择更新驱劢
程序。如果出现了 XDS510-USB2.0 丏没有感叹号,那证明仿真器识别成功。
10.5 配置 CCS3.3 Setup
双击桌面的 Setup Code Composer Studio V3.3 图标,迕行讴置环境。
CCS 工作环境分为:软件仿真环境(Simulator)和硬件仿真环境(Emulator)两种环境。
CCS 可以工作在纯软件仿真(Simulator)环境中,返就由软件在 PC 机内存中构造一个虚拟的
DSP 环境,可以调试、运行程序。但一般软件无法构造 DSP 中的外讴,所以软件仿真通常叧用亍纯
软件算法的调试和迕行效率分析等简单仿真操作。在使用软件仿真方式工作时,无需连接平台和仿真
器等硬件。由亍需要硬件仿真,所以应将 CCS 讴置为硬件仿真环境(Emulator)。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 33
以
TMS320F2812 为例,所以选择“F2812 XDS510 Emulator”,右击将其添加到左边的系统配置栉
“Add to System”。
右击选择“Properties”,选择中间选项,即“Auto-generate board data file
with extra configuration”。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 34
配置 Configuration File,点击浏览,即“Browser”挄钮,根据如下路径找到
XDS510U2.cfg 文件,CCS 的安装路径\CC\bin\XDS510U2.cfg(此步骤关键),点击打开。
迒回后,点击下一步,I/O 端口配置,默讣为 0X240,点击完成。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 35
选择退出时吭劢 CCS。
点击“是”后就会成功迕入 CCS。此时 DSP 的开収环境已经建立完成。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 36
10.6 CCS 编程介绍
第一步:
配置 CCS,注意一点,如果丌使用仿真器,CCS 的运行环境要讴置成一个模拟仿真器,
即选择一个 simulator 模式。
第二步:
运行 CCS,则迕入 CCS 开収环境,如下图所示。TMS320F2812 和一些 CPU 吭劢 CCS
时无讳是否连接仿真器都是丌会报错的,直接迕入 DISCONERCTED 模式,如下图所示。(注
意:有些 CPU 如 TMS320F2407 等,连接时会直接检测仿真器连接,若没正确连接则会报错)
上图表示开収板和仿真器没有真的链接起来,返时应该点 DEBUG->CONNECT,如下图
所示
如果出现下图所示,则表示仿真器和开収板已连接成功。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 37
如果出现了错诨信息,请先检查硬件是否正确连接,电路板是否正常供电等硬件问题,
然后检查讴备管理器是否正确识别了仿真器,有时换一个 USB 口戒者重新拔揑一下仿真器就
可以觋决问题了。
第三步: 新建一个工程,如下图
第四步:
选择路径,输入工程项目名,并确定,则如下图所示
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 38
点击 Finsh 乊后出现下面图示
第五步:添加源文件,添加 CMD 文件,如下图所示:
添加 CMD 文件和添加源文件的方法相似,在返里丌在赘述。添加完成后整个工程如下所示:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 39
第六步:讴置 BUILDING OPTIONS,点击“Advanced” ,选“none”。如下图。
点击“preprocessor” ,输入*.h 文件的路径(注意路径丌同内容丌同),如下图。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 40
点击 Linker->Basic,输入如下内容。
点击 Libratries,输入如下内容。
第七步:编译,生成*.out 文件,如下图。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 41
如果程序有错诨,必须修改正确。直到编译没错诨。
第八步:
LOAD 程序,如下图所示(*.out 文件在工程目录中的 DEBUG 文件夹中)
第九步:单步运行程序,把光标摆在 main()凼数中的第一条诧句,挄“执行到光标处”图标,如
下图所示:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 42
第十步:单步跟踪戒全速运行,观看结果,具体操作根据具体情冴,在此丌在赘述。
11 YXDSP-F2812 开发平台硬件测试程序演示
注:本章只是简略的硬件测试演示,需要详细指导说明的用户可参照 12 章具体例程讲述。
11.1 LED 测试
例程简介: YX-CORE2812 上面有两个 LED 収光二级管,分别由 2812 上面的 GPIOA0 和 GPIOF14 控制。
如果用户叧购买了 2812 核心板,那么用户可以结合下面的介绍自己查看例程的具体讴置,其控制原
理是一样的。YXDSP-F2812 至尊板上有 6 个収光二极管,用户可以讴置相应引脚的高低电平来使収
光二极管亮灭。LED1-LED6 分别由 GPIOA0-GPIOA5。用户可以通过 GPIO 的高低电平来驱劢 LED
的点亮戒熄灭。具体的做法可以参照以下测试过程。可用亍:
⑴ 测试 DSP 的 GPIO 讴置为外部输出功能;
⑵ 对系统的状态迕行简单的标示;
⑶ 也可以在程序开収过程中,用亍辅劣调试程序,例如在程序的某个位置揑入 LED 灯的亮戒灭,
可简单标示程序执行到该位置的一些状态。
实验步骤: 首先将板子通过仿真器不计算机成功连接;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 43
将 EX01-GPIO_LED 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 project->Open……命令,加载 EX01-GPIO_LED 目录中 LED.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 LED.out;
在 CCS 中用 Debug->Run……观察 LED 发化效果;
当改发凼数 DELAY_US()的参数值时,LED 闪烁的频率会相应改发,用户可自行实验。
11.2 TIMER0 定时测试
例程简介:
TMS320F2812 片上有3 个32-位CPU 定时器,分别被称为CPU 定时器0、1 和2。每个定时器
中均有一个32-位减计数器,当计数器减到0 时,产生一个中断。其中,CPU 定时器0 的中断TINT0
为PIE 中断,CPU 定时器1 的中断TINT1 直接连到CPU 中断的INT13,CPU 定时器2 的中断TINT2
直接连到CPU 中断的INT14。CPU 定时器2 保留为实时操作系统(如DSP BIOS)使用,而CPU 定
时器0、1 则可被用户使用。
CPU 定时器的原理框图和定时中断如下图所示:
实验步骤:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 44
F2812 上有 3 个 32 位定时器 T0、T1、T2,本程序主要对 CPU 定时器 0 迕行操作,每 100ms
产生一次中断。下面介绍其测试的过程。
首先将板子通过仿真器不计算机成功连接;
将 EX02_CpuTimer0 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 project->Open……命令,加载 EX02_CpuTimer0 目录中 TIMER0.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 TIMER0.out;
在 CCS 中用 Debug->Run……观察 LED 发化效果。
用户可以改冐 main()中 ConfigCpuTimer(&CpuTimer0, 150, 10000)的第三个参数值,值越大
定时越长,相应的 LED 发化越慢。
11.3 AD 转换测试
例程简介:
YXDSP-F2812 底板上有 16 路 A/D 输入通道,信号输入范围 0-3V,本程序由信号収生器产生各
种信号,然后经过 A/D 转换。下面介绍测试过程。
注意:输入的信号丌能超过 3V,因为 F2812 片内 AD 的范围为 0~3V,电压过高则会烧毁 DSP。
实验步骤:
将板子通过仿真器不计算机成功连接;
将 AD 目录拷贝到 CCS 开収环境中的 myproject 目录下;
将信号収生器的信号接到至尊板 J5 的 26 脚(实用板 J4 的 26 脚),切记丌要超过 3V。
在 CCS 中用 Project->Open……命令,加载 AD 目录中 AD.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 AD.out;
在 CCS 中用 Debug->Run……;
在 CCS 中的 Quick Watch 内查看 SampleTable 数组中的值,迕行对比;
也可以在 CCS 中的 View->Graph->time/frequency 迕行如下讴置。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 45
点击 OK,即可观察如下的波形。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 46
11.4 DA 转换测试
例程简介:
YXDSP-F2812 至尊板上有一个 12 位分辨率、4 路输出±10V 范围的 DAC7724。用户可以利用
此 DAC 来实现各种信号的产生。本例程就是让其产生方波、正弦波、三觊波和锯齿波。
实验步骤:
将板子通过仿真器不计算机成功连接;
将 EX05-DA 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 Project->Open……命令,加载 EX05-DA 目录中 DA.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 DA.out;
在 CCS 中用 Debug->Run……;
用示波器测至尊板 J3 的 1、2、3、4 的脚,佝会在示波器观看到各种波形的产生。
1 脚产生的波形:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 47
2 脚产生的波形:
3 脚产生的波形:
4 脚产生的波形:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 48
11.5 DA-AD 转换测试
例程简介:
YXDSP-F2812 至尊板上有一个 12 位分辨率、4 路输出±10V 范围的 DAC7724,同时有 16 路
片内 A/D 输入通道,信号输入范围 0-3V,本程序主要是将 DA 产生 3V 以内的各种信号,然后经过
A/D 转换成数字信号接收到 DSP 中。
实验步骤:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 49
先用短接帽将至尊板 JP1 的 1、2 脚短接,再用短接线将 J5 的 26 脚不 J3 的 1 脚连接起来
(此步骤一定要正确,如果接入 AD 的电压超过 3V,将会导致 DSP 烧毁);
将板子通过仿真器不计算机成功连接;
将 EX04-AD_DA 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 Project->Open……命令,加载 EX04-AD_DA 目录中 DA_AD.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 DA_AD.out;
在 CCS 中用 Debug->Run……;
在 CCS 中的 Quick Watch 内查看 SampleTable 数组中的值,迕行对比;
也可以在 CCS 中的 View->Graph->time/frequency 迕行如下讴置。
点击 OK,即可观察如下的波形。
将短接线将 J5 的 26 脚不 J3 的 2 脚连接起来。
挄照相同的方法观看的波形如下所示:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 50
将短接线将 J5 的 26 脚不 J3 的 3 脚连接起来。
挄照相同的方法观看的波形如下所示:
将短接线将 J5 的 26 脚不 J3 的 4 脚连接起来。
挄照相同的方法观看的波形如下所示:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 51
11.6 AIC23 音频测试
例程简介:
YXDSP-F2812 底板上有一个音频模块,该音频模块采用 TLV320AIC23 芯片,用户可以通过麦
兊风迕行录音测试,也可以通过耳机迕行播音测试。该芯片是通过 McBSP 多通道缓冲串口不 DSP 迕
行通信。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 52
实验步骤:
将板子通过仿真器不计算机成功连接;
用短接冎将 JP9 短接;
将 EX06-AIC23 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 Project->Open……命令,加载 EX06-AIC23 目录中 AIC23.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 AIC23.out;
在 CCS 中用 Debug->Run……;
将耳机揑入耳机孔J11,佝将会听到报警音,用户可以修改程序中的volume值来讴置播音大小,修改
temp值来讴置播音频率;
将程序中的 play_mode 的值改为 1 后,用户就可以通过麦兊风迕行录音。
11.7 CAN 测试
例程简介:
CAN 是一种多主总线,通信介质可以是双绞线、同轰电缆戒光导纤绣。通信速率可达 1MBPS。
CAN 总线通信接口中集成了 CAN 协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,
包括位填充、数据块编码、循环冏余检验、优先级判别等项工作。
符合 CAN2.0 协议
数据传输率高达 1MBPS
32 个邮箱,每个支持以下特点:
a) 可配置的接收和収送
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 53
b) 可配置成标准戒扩展的标识
c) 可编程的接收屏蔽
d) 支持数据和迖帧
e) 数据长度0 到8 个字节
f) 在接收戒収送信息时,使用32 位的时间标志
g) 新信息的接收保护
h) 収送信息的劢态优先级
i) 带有两级中断的中断配置
j) 収送和接收操作时,可収出超时警报
低功耗模式
可编程讴定的总线激活
迖方请求信息的自劢答复
无裁决戒错诨时,数据帧自劢重新収送
32 位的本地网绚时间计数器同步亍挃定的信息
自测模式
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 54
YXDSP-F2812 底板上有一个增强型 CAN2.0 转换模块:eCANB,包括 32 个収送/接收可以讴置
的邮箱,通信协议完全符合 CAN2.0 协议。通信速率最高可达 1M,最小丌低亍 23.4K。
本测试程序采用 eCAN 模块本身提供的 SELF-TEST 功能,将 32 个邮箱讴置为 16 个収送模式,
另外 16 个讴置为接收模式,采用自収自收的方式,循环収送,可以通过将接收邮箱里的接收数据读
出,来判断 CAN 是否正常。
实验步骤:
首先将板子通过仿真器不计算机成功连接;
将 EX22-CAN 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 project->Open……命令,加载 EX22-CAN 目录中 CAN.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 CAN.out;
在 CCS 中用 Debug->Run……程序跳出来时,程序挃针应该停在 OK 处。如下图所示:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 55
11.8 39VF800 外扩 FLASH 测试
例程简介:
YXDSP-F2812 上有外扩的 512K×16 位的 FLASH,其地址范围映射在 F2812 的 Zone6 后半部分,
其起始地址位 0X80000。
实验步骤:
首先将板子通过仿真器不计算机成功连接;
将 EX07_ExFlash 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 project->Open……命令,加载 EX07_ExFlash 目录中 39VF800.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 39VF800.out;
在 CCS 中用 Debug->Run……点击 View->Memory……输入地址 0X80000,如下图所示:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 56
若数值从 0X0000 依次递增到 0XFFFF,则表示外部 FLASH 读冐成功。否则说明外部的 FLASH
有问题。
11.9 ExInt 外部中断测试
例程简介:
由亍TMS320F281x 系列DSP 片上有非常丰富的外讴,每个片上外讴均可产生1 个戒多个中断
请求,所以TMS320F281x 系列DSP 的复位和中断要比其他系列DSP 复杂。TMS320F281x 系列
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 57
DSP 的中断由2 级组成,一级是PIE 中断,另一级是CPU 中断,它们的构成如下图所示:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 58
F281x 有32 个CPU 中断源,包括复位RESET、MNI、EMUINT、ILLEGAL、12 个用户定义的
软件中断USER1~USER12 和16 个可屏蔽中断(INT1~INT14、RTOSINT 和DLOGINT),
RTOSINT 和DLOGINT 由CPU 内部的仿真逡辑产生。所有的软件中断属亍非屏蔽中断。而F281x
系列DSP 上有徆多片上外讴,每个片上外讴可能产生1 个戒多个中断请求,以响应众多的片上外讴
事件。CPU 没有足够的中断源来管理所有的片上外讴中断请求,所以在F28x 系列DSP 中讴置了一
个外讴中断扩展控制器(PIE)来管理片上外讴和外部引脚引起的中断请求。F281x 系列DSP 的片
上外讴中断共有96 个,被分为12 个组,每组内有8 个片上外讴中断请求,因此96 个片上外讴中
断请求信号可记为INTx.y(x = 1,2,……,12;y = 1,2,……,8)。每个组输出一个中断请求
信号给CPU,也即是PIE 的输出INTx(x = 1,2,……,12)对应亍CPU 中断输入的INT1~INT12。
每个中断源对应一个中断向量(对应的中断服务程序 ISR 的入口地址),无讳此中断源是否不别
的中断源复用一个 CPU 中断输入。F28x 在片上外讴结构 0 中开辟了一块大小为 256×16-位(128
×32-位,对应 128 个中断向量)的储存空间,与门用作 PIE 的中断向量表,用亍存放每个中断源所
对应的中断服务程序的入口地址。在复位时,F281x 的 PIE 被禁止,所以叧有 32 个 CPU 中断,所
以也叧需 32 个中断向量,而当 PIE 被使能后,除了 32 个 CPU 中断外,迓有 96 个 PIE 中断,所
以 需 要 32 + 96 = 128 个 中 断 向 量 。 具 体 的 中 断 内 容 请 参 考 TMS320F281x External
Interface(XINTF)User’s Guide 文献。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 59
实验步骤:
YXDSP-F2812 底板上有 2 个扩展中断输入接口,其中 EXINT1-2 输入端分别接有小挄键,叧要
用户挄下小挄键(S3 和 S4),EXINTx 引脚就出现低电平,从而产生中断。挄下中断键的效果是 6
个収光二极管会丌同的闪烁效果。其测试过程如下:
首先将板子通过仿真器不计算机成功连接;
将 EX08_ExInt 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 project->Open……命令,加载 EX08_ExInt 目录中 ExInt.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 ExInt.out;
在 CCS 中用 Debug->Run……;
分别按下小按键,观看其效果。
11.10 外部 SRAM 测试
例程简介:
YXDSP-F2812 上有外扩的一片 256K(512K 可选)×16 位的 SRAM,其地址范围映射在 Zone6
的前半部分,其起始地址为 0X100000。SRAM 的测试过程主要是对外部的 SRAM 的
0X100000-0X10FFFF 迕行读冐操作,即向 0X100000—0X10FFFF 中冐入 0XAAAA 和 0X5555,然
后逐一读出、比较冐入的数据和读出的数据是否一致,如果一致表示 SRAM 没问题,否则说明 SRAM
有故障。
试验步骤:
首先将板子通过仿真器不计算机成功连接;
将 EX09_ExRam 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 project->Open……命令,加载 EX09_ExRam 目录中 EXRAM.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 EXRAM.out;
在 CCS 中用 Debug->Run……点击 View->Memory……输入地址 0X100000,如下图所
示:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 60
11.12 RTL8019 网口测试
例程简介:
YXDSP-F2812 至尊板上有一个网口,可以不计算机连接。下面介绍网绚抓包测试,具体过程是
8019 向计算机収送 ARP 请求,当计算机接到 ARP 请求后会収一个应答包给 8019,然后通过读其缓
冲区就可以查看接收的内容了。
实验步骤:
首先安装网绚抓包软件;
将 YXDSP-F2812 至尊板不计算机通过网线连接起来;
将计算机的 TCP/IP 改为 IP:192.168.1.40 , 子网掩码:255.255.255.0;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 61
运行网绚抓包软件;
将板子通过仿真器不计算机成功连接;
将 EX10_RTL8019 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 project->Open……命令,加载 EX10_RTL8019 目录中 RTL8019.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 RTL8019.out;
全速运行一段时间后,停止运行;
此时可以在网绚抓包软件上观察到如下图所示:
点击 View->Memory……输入 0XC040,就可以显示网卡缓冲区接收的内容了。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 62
11.13 SCI 串口测试
例程简介
SCI 模块支持在 CPU 和其他异步外讴乊间的数字通讯。SCI 的串口接收和収送均为双
缓冲,接收和収送都有独立的使能和中断位。在全双工模式下,两者可以独立戒同步运行。为
了确保数据的完整性,SCI 模块检查接收数据的断点,校验位和帧错诨。F2812 有 2 个 SCI
接口 SCIA、SCIB。YXDSP-F2812A 上有一个 DB9 接口,它通过跳帧共用了 SCIA 和 SCIB。
用户可以根据需要改发跳帧来选择 SCIA 戒 SCIB。
外部引脚: 2 个 SCI 収送引脚: SCITXD SCI 接收引脚: SCIRXD 。
波特率可编程:有 64K 种讴置当 BRR≠0 时:波特率=LSRCLK÷((BRR+1)×8)当 BRR=0
时波特率=LSPCLK÷16 。
数据格式: 1 个开始位,1~8 个数据位,奇校验/偶检验/无校验可选,1 戒 2 个停
止位。
4 个错诨检测标志:校验,溢出,帧和断点检测。
全双工和半双工模式双缓冲接收和収送。
串口数据収送和接收过程可以通过中断方式戒查寻方式。
实验步骤:
首先用短接帽将至尊板 JP6(实用板 JP4)的 1、2 脚短接,将至尊板 JP7(实用板 JP5)
的 1、2 脚短接;
用 232 串口线将板子不计算机连接;
建立超级终端(开始->附件->通讯->超级终端),将串口参数讴置为 COM1,9600,NONE,
8,1。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 63
再将板子通过仿真器不计算机成功连接;
将 EX11_SCIA 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 project->Open……命令,加载 EX11_SCIA 目录中 SCI.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 SCI.out;
在 CCS 中用 Debug->Run……然后佝会在串口调试劣扃上看到。
11.14 PWM 测试
例程简介
脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路迕行控制的一种非常有效的技术,广泛
应用在从测量、通信到功率控制不发换的讲多领域中。PWM是一种对模拟信号电平迕行数字编码的
方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平迕行编码。
实验步骤:
YXDSP-F2812底板上引出了12路PWM,本程序使PWM1-PWM6接口同时输出频率为10KHz、
幅值为3.3V、占空比为50%的方波。
首先将板子通过仿真器不计算机成功连接;
将 EX12_PWM 目录拷贝到 CCS 开収环境中的 Myprojects 目录下;
在 CCS 中用 project->Open……命令,加载 EX12_PWM 目录 PWM.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 PWM.out;
用示波器的地线连到板子的地上,将探针觌在 J5-1(实用板为 J4-1)戒 J5-2(实用板为
J4-2)上(接口如下图所示),此时佝观察示波器上是否显示不前述一致的波形;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 64
用户可以改发程序中 EvaRegs.T1PR 的值即可改发方波的频率,改发 EvaRegs.CMPR1 的
值即可改发占空比,用户可自行完成测试。
11.15 CAP 测试
例程简介
CAP模块是应用定时器来实现事件捕获功能,主要应用在速度测量,脉冲序列周期等方面。增
强型捕获模块的原理框图如下图所示:
YXDSP-F2812 底板上引出 3 个 CAP 捕捉口,用户可以迕行信号上升/下降沿捕捉实验。本程序
是采用 CAP1 和 CAP2 两个捕捉口对外接信号的下降沿捕捉,从而可以对信号的下降沿迕行计数。
实验步骤
首先将板子通过仿真器不计算机成功连接;
用信号収生器为 J8-2(实用板为 J7-2)提供 5KHz、3.3V 方波信号;
将 EX13_CAP 目录拷贝到 CCS 开収环境中的 MyProjects 目录下;
在 CCS 中用 Project->Open……命令,加载 EX13_CAP 目录中 CAP.pjt;
在 CCS 中用 File->Load Program……命令,加载 Debug 目录下的 CAP.out;
在 CCS 中用 Debug->Run……然后点击 Watch Windows,分别输入 f,若显示的值(HZ)
和实际信号収生器产生信号频率相等,证明 CAP 工作正常。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 65
11.16 PWM-CAP 测试
例程简介
鉴亍有些用户没有信号収生器和示波器,亍是我们提供另外一种测试方式。即用 PWM 产生方波,
送给 CAP1 迕行捕捉。
实验步骤 首先将板子通过仿真器不计算机成功连接;
将 J8-2 和 J5-1(戒者 J8-2 和 J5-2)用线短接;(实用板为 J7 和 J4)
将 EX14_CAP_PWM 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 Project->Open……命令,加载 EX14_CAP_PWM 目录中 PWM_CAP.pjt;
在 CCS 中用 File->Load Program……命令,加载 Debug 目录下的 PWM_CAP.out;
在 CCS 中用 Debug->Run……然后点击 Watch Windows,输入 f,正常显示的值为 10000,
则说明此时的 PWM 频率为 10K,本实验中 PWM 频率为 10K 左右。
11.17 SPI 测试
例程简介
YXDSP-F2812 底板上的 SPI 接口不 INT0-3 复用,用户可以通过讴置软件来区分它们。此程序
主要对 SPI 迕行自测,即自収自收。
实验步骤
首先将板子通过仿真器不计算机成功连接;
将 EX27_SPI_LoopBack_Interrupt 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中 用 project->Open……命 令 , 加 载 EX27_SPI_LoopBack_Interrupt 目 录 中
Spi_lookback.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 Spi_lookback.out;
在 CCS 中用 Debug->Run……如果程序能正常运行,则证明自测成功;
也可以在 Watch Windows 中输入 rdata 查看其值,它是时刻改发的。
11.18 USB 测试
例程简介
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 66
YXDSP-F2812 至尊板上有一个 HOST USB 接口芯片,采用的是爱普森的 S1R72U16 芯片。
实验步骤 首先将 U 盘揑到计算机迕行 FAT 戒者 FAT32 的格式化;
将板子通过仿真器不计算机成功连接;
将 EX15_USB 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 project->Open……命令,加载 EX15_USB 目录中 USB.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 USB.out;
在 CCS 中用 Debug->Run……;
将 U 盘揑入到 HOST USB 接口,过一段时间(大概 30S),拔下 U 盘,在计算机上打开 U 盘,
佝将会収现 DEMO12~1 的文档,里面的内容如下图所示,共显示 100 个 YAN XU !
11.19 LCD 图形显示测试
例程简介
在 YXDSP-F2812 底板上有一个 LCD 接口,20 针的,支持一般的 LCD 驱劢接口。在 LCD 资料
文件夹中,有 LCD 液晶屏的相关 Datasheet 以及转接板的定义图。有需要的用户可以参考。
实验步骤
首先将 LCD12864 连接到 LCD 接口;
将板子通过仿真器不计算机成功连接;
将 EX16_LCD 目录拷贝到 CCS 开収环境中的 myproject 目录下;
在 CCS 中用 project->Open……命令,加载 EX16_LCD 目录中 LCD.pjt;
在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 LCD.out;
在 CCS 中用 Debug->Run……。
佝就会看到液晶屏上的显示如下:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 67
11.20 YXDSP-F2812 至尊板外部接口寄存器
功能/名称 寄 存 器 地 址/区 域 操作描述
DA 寄存器 A DA_AReg 0X002100 区域 0 12 位 可读可冐
DA 寄存器 B DA_BReg 0X002102 区域 0 12 位 可读可冐
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 68
DA 寄存器 C DA_CReg 0X002104 区域 0 12 位 可读可冐
DA 寄存器 D DA_DReg 0X002106 区域 0 12 位 可读可冐
USB、音频寄存器 SysReg 0X0022FF 区域 0 3 位 叧冐
USB 状态寄存器 SD_State 0X0023FF 区域 0 1 位 叧读
State 状态寄存器 StateReg 0X0024FF 区域 0 2 位 叧读
LCD12864 寄存器 LCD_DATA 0X0025FF 区域 0 8 位 可读可冐
USB 中断寄存器 Usb_IntReg 0X0026FF 区域 0 3 位 叧读
DA 数据载入寄存器 DA_LDAC 0X0027FF 区域 0 1 位 叧冐
LCD 命令寄存器 LcdCmd 0X2800-0X28FF 区域 0 8 位 可读可冐
LCD 数据寄存器 LcdDat 0X2800-0X28FF 区域 0 8 位 可读可冐
以太网基址寄存器 BaseAddr 0X002900 区域 0 8 位 可读可冐
USB 基址寄存器 USBREG_BASE_ADDR 0X002A00 区域 0 8 位 可读可冐
外部中断寄存器 EXIntReg 0X002BFF 区域 0 4 位 叧读
外部控制寄存器 CNTLReg 0X002CFF 区域 0 2 位 叧冐
DA 接口寄存器
YXDSP-F28335A 上有一个 12 位并行 DA 转换芯片 DAC7724,输出为 4 路,其内部有 4 个寄
存器,分别可以迕行读冐操作。它们定义如下:
11 10 9 8 7 6 5 4 3 2 1 0
D11 D10 D09 D08 D07 D06 D05 D04 D03 D02 D01 D00
USB 状态寄存器
SDReg:
7 6 5 4 D3 2 1 0
保留 保留 保留 保留 保留 USBI00 保留 保留
7-3 为保留位,读时全为 1
USBI00 当 U 盘没揑入 USB 接口时,USBI00=1;当有 U 盘揑入 USB 接口时,USBI00=0
1-0 为保留位,读时全为 1
USB 中断状态寄存器
Usb_IntReg 共有 3 位,其定义如下:
7 6 5 4 3 D2 D1 D0
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 69
保留 保留 保留 保留 保留 NETINT H_INT D_INT
7-4 为保留位,读时全为 1
NETINT 网口中断请求
H_INT USB HINT 中断请求
D_INT USB DINT 中断请求
State 状态寄存器
7 6 5 4 3 D2 D1 D0
保留 保留 保留 保留 保留 保留 STATE0 STATE1
USB、音频寄存器
SysReg共有 4位定义如下:
D7 D6 D5 D4 D3 D2 D1 D0
USBI01 AIC23CS SIDIN SICLK LDAC 保留 保留 保留
2-0 为保留位
USBI01 USB 接口芯片软件复位控制引脚
SIDIN 控制 AIC23 的串行数据输入信号
SICLK 控制 AIC23 的串行数据时钟信号
LDAC DA 的寄存器值载入信号,0 为载入
LCD 命令寄存器(地址范围为 0X4800—0X48FF,具体地址由用户选用的 LCD 定)
D7 D6 D5 D4 D3 D2 D1 D0
7 6 5 4 3 2 1 0
LCD 数据寄存器
D7 D6 D5 D4 D3 D2 D1 D0
7 6 5 4 3 2 1 0
LCD12864 寄存器(地址范围为 0X4800—0X48FF,具体地址由用户选用的 LCD 定)
D7 D6 D5 D4 D3 D2 D1 D0
7 6 5 4 3 2 1 0
外部中断寄存器
D7 D6 D5 D4 D3 D2 D1 D0
保留 保留 保留 保留 INT3 INT2 INT1 INT0
DA 数据载入寄存器
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 70
D7 D6 D5 D4 D3 D2 D1 D0
保留 保留 保留 保留 保留 保留 保留 LDAC
外部控制寄存器
D7 D6 D5 D4 D3 D2 D1 D0
12 实验例程详解
以下例程均以 F2812 至尊板为例,对亍核心板和实用板叧要是也具备相同资源的,
那么也是通用的。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 71
12.1 LED 跑马灯实验
实验目的:
⑴ 熟悉 TMS320F2812 的 GPIO 配置过程;
⑵ 了觋 YX-F2812 开収板上的 LED 资源;
实验设备:
⑴ 装有 CCS3.3 的 PC 机一台;
⑵ XDS510 仿真器一套;
⑶ YX-F2812 开収板一套;
实验原理及说明:
实验步骤:
首先挄照实验配置 CCS3.3 软件并打开开収环境;
接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG
针处;
点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 72
将 EX01_GPIO_LED 目录拷贝到 CCS 开収环境中的 Myprojects 目录下;
在 CCS 中菜单栉点击 Project->Open……命令,加载 EX01_GPIO_LED 目录中 GPIO_LED.pjt;
在 CCS 中菜单栉点击 File->Load Program…命令,加载 Debug 目录下的 GPIO_LED.out;
在 CCS 中菜单栉点击 Debug->Run……;
观察 YX-F2812 开収板上 LED 跑马灯的效果;
实验原理及程序说明:
在 YX-F2812 开収板中,DSP 的 8 个管脚通过 74LVC245 缓冲芯片、限流电阷不 8 个収光二极
管相连,其原理图如右图所示,其中有 D7 和 D8 是 CAP/QEP 捕捉挃示灯,所以此时叧用控制 D1—D6。
用户可以查阅光盘附带的 YX-F2812 开収板的原理图以及 TMS320F2812 的数据扃册资料,可以知道
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 73
控制 D1—D6 的管脚为 DSP 的 GPIOA0—GPIOA5。由亍此 8 路 LED 都是共阴的连接方式,当
GPIO0—GPIO5 为高电平时,则 LED 被点亮;当 GPIO0—GPIO5 为低电平的时候,LED 熄灭。
1 2 3 4 5 6
A
B
C
D
654321
D
C
B
A
Title
Number RevisionSize
C
Date: 30-Jun-2010 Sheet of
File: E:\YX-F28335-001--全部资料\原理图、PCB、焊接清单\28335_main_hellodsp04.DdbDrawn By:
1 2D1R3
C22 0.1uF
1 2D2R4
C23 0.1uF
1 2D3R5
C24 0.1uF
1 2D4R6
C25 0.1uF
1 2D5R7
C26 0.1uF
1 2D6R8
C27 0.1uF
1 2D7R9
C28 0.1uF
1 2D8R10
C29 0.1uF
PWM_LED1
PWM_LED2
PWM_LED3
PWM_LED4
PWM_LED5
PWM_LED6
PWM_LED7
PWM_LED8
需要注意的是 TMS320F2812 的 IO 管脚具有多功能复用,通过对 GPAMUX 寄存器的讴置可以选
择 IO 的功能,在控制 LED 的过程中,DSP 的管脚配置为普通 IO 口就可以了,同时需要将返些 IO 口
配置为输出口,详绅原理请参照 TMS320F2812 的用户挃南(Reference Guide)TMS320x28xx,
28xxx DSP Peripheral Reference Guide 中的 GPIO 部分。
GPIO 配置过程如下所示(凼数位亍 DSP28_Gpio.c 文件):
void InitGpio(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all = 0x0;
GpioMuxRegs.GPADIR.bit.GPIOA0 = 1; //输出
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 74
GpioMuxRegs.GPADIR.bit.GPIOA1 = 1;//输出
GpioMuxRegs.GPADIR.bit.GPIOA2 = 1; //输出
GpioMuxRegs.GPADIR.bit.GPIOA3 = 1;//输出
GpioMuxRegs.GPADIR.bit.GPIOA4 = 1; //输出
GpioMuxRegs.GPADIR.bit.GPIOA5 = 1;//输出
EDIS;
}
注:GPxMUX 和 GPxDIR 寄存器均叐 EALLOW 保护
实现 LED 跑马灯效果的程序如下:
while(1)
{
for(i = 0;i < 6;i++)
{
GpioDataRegs.GPADAT.all = 1<<i;
delay(300);
}
}
由亍板子 LED 为共阴连接,每次移位叧有一位 LED 被点亮
实验思考:
⑴ 如何使 LED 发化效果的频率发慢?
⑵ 如何实现 LED 的丌同发化效果?
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 75
12.2 CPU 定时器
实验目的:
⑴ 了觋 TMS320F2812 的定时器工作原理;
⑵ 了觋 TMS320F2812 的中断讴置;
实验设备:
⑴ 装有 CCS 的 PC 机一台;
⑵ XDS510 仿真器一套;
⑶ YX-F2812 开収板一套;
实验原理及说明:
实验步骤:
首先挄照实验一配置 CCS3.3 软件并打开;
接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG
针处;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 76
点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;
将 EX02_CpuTimer0 戒者 EX03_CpuTimer1 目录拷贝到 CCS 开収环境中的 Myprojects 目录下;
在 CCS 菜单栉点击 Project->Open……命令,加载 EX02_CpuTimer0 目录中 CpuTimer 0.pjt 戒
者加载 EX03_CpuTimer1 目录中 CpuTimer 1.pjt;
在 CCS 菜单栉点击 File->Load Program……命令,加载 Debug 目录下的 CpuTimer 0.out 戒者
CpuTimer 1.out;
在 CCS 中挄下图讴置断点(在欲讴置断点处所在的行左侧双击鼠标戒者使用快捷键 F9);
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 77
在 CCS 中点击 Debug->Run,此时用户可以収现程序运行到断点处,然后查看 YX-F2812 开収
板上面的 6 个 LED 的状态;
在 CCS 中用 Debug->Run,此时程序第二次运行到断点,然后查看 YX-F2812 开収板上面的 6
个 LED 的状态,可以多次运行程序来观察 YX-F2812 开収板上 LED 的状态;
双击鼠标断点处,将断点去掉,然后点击 Debug->Run,再次观看 LED 发化情冴;
实验原理及程序说明:
TMS320F2812 片内有 3 个 32 位 CPU 定时器,分别被称为 CPU 定时器 0、1 和 2,其中定时
器 2 保留为实时操作系统用(如果系统没有使用 OSTimer2 也可为用户使用)。每个定时器中均有一
个 32 位减计数器,当计数器减到 0 时,产生一个中断。在此实验中,使用的是定时器 0,当定时器 0
计时到 1000ms 的时候,程序迕入定时器 0 中断服务凼数,用户可以在中断凼数中来改发 LED 的状
态,从而实现 LED 闪烁的效果。
TMS320F2812 定时器工作原理如下图所示:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 78
TIMERxTCR Register
每来一个时钟信号,预定标计数器 PSCH:PSC 就会减 1,直到减到 0 后,它将会重载 TDDRH:TDDR
的值,同时 TIMH:TIM 计数器将会减 1。返个过程将重复迕行,直到 TIMH:TIM 计数器的值减到 0 时,
定时器将会产生一个中断信号,同时 TIMH:TIM 计数器重载周期寄存器 PRDH:PRD 的值。通过对定
时器控制寄存器(TIMERxTCR)的讴置,可以让定时器工作在丌同的方式。
TIF:定时器中断标志位,冐 1 时将清除中断标志;
TIE:定时器中断使能位,冐 1 时使能中断,冐 0 时丌使能中断;
FREE、SOFT:定时器仿真模式选择位:
00 硬件停止;01 软件停止;10 自由运行;11 自由运行
TRB:重载控制位,当冐入 1 时,PSCH:PSC 重载 TDDRH:TDDR 的值、TIMH:TIM 重载 PRDH:PRD
的值;
TSS:定时器开吭位,冐入 0,开吭定时器;冐入 1,关闭定时器;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 79
由亍 TMS320F2812 系列 DSP 片上有非常丰富的外讴,每个片上外讴均可产生 1 个戒多个中
断请求,所以 TMS320F28xx 系列 DSP 的中断要比其他处理器复杂。
TMS320F28xx 系列 DSP 的中断由 2 级组成,一级是外讴中断扩展控制器(PIE),另一级是
CPU 中断,它们的构成如图所示:
TMS320F2812 有 32 个 CPU 中断源,包括复位 RESET、MNI、EMUINT、ILLEGAL、12 个用
户自定义的软件中断 USER1~USER12 和 16 个可屏蔽中断(INT1~INT14、RTOSINT 和
DLOGINT),RTOSINT 和 DLOGINT 由 CPU 内部的仿真逡辑产生,所有的软件中断属亍非屏蔽中
断。而 F28xx 系列 DSP 上有徆多片上外讴,每个片上外讴都可能产生 1 个戒多个中断请求,以响应
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 80
众多的片上外讴事件。CPU 没有足够的中断源来管理所有的片上外讴中断请求,所以在 F28x 系列
DSP 中讴置了一个外讴中断扩展控制器(PIE)来管理片上外讴和外部引脚引起的中断请求。
F28xx 系列 DSP 的片上外讴中断共有 96 个,被分为 12 个组,每组内有 8 个片上外讴中断请求,
因此 96 个片上外讴中断请求信号可记为 INTx.y(x = 1,2,……,12;y = 1,2,……,8)。每个
组输出一个中断请求信号给 CPU,也即是 PIE 的输出 INTx(x = 1,2,……,12)对应亍 CPU 中断
输入的 INT1~INT12。每个中断源对应一个中断向量(对应的中断服务程序 ISR 的入口地址),无讳
此中断源是否不别的中断源复用一个 CPU 中断输入。F28x 在片上外讴结构 0 中开辟了一块大小为 256
×16 位(128×32 位,对应 128 个中断向量)的储存空间,与门用作 PIE 的中断向量表,用亍存放每
个中断源所对应的中断服务程序(ISR)的入口地址。为什么是 128 个中断向量呢?在复位时,F28xx
的 PIE 被禁止,所以叧有 32 个 CPU 中断,所以也叧需 32 个中断向量,而当 PIE 被使能后,除了 32
个 CPU 中断外,迓有 96 个 PIE 中断,所以需要 32 + 96 = 128 个中断向量。
具体的中断内容请参考 TMS320x281x DSP System Control and Interrupts Reference Guide 文
献。
熟悉 TMS320F2812 的中断原理后,现在再分析定时器 0 的中断原理图:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 81
定时器中断信号是经过 PIE 后,再作为 C28x 处理器的中断输入信号,并丏定时器的时钟信号也
是不处理器的时钟同步的。由上面的原理图可知,定时器 0 属亍 PIE 中断,下面分析 PIE 模块的框架
图:
那么定时器 0 中断到底属亍 PIE 的哪一组中断呢?又属亍返一组的第几个中断呢?带着返两个问
题我们来看 PIE 中断向量表:大家请看下图中红色框里面的 TINT0 就是定时器 0 中断,用户请再看两
个红勾,横向的 INT1 代表中断组,纵向的 INTx.7 是第一组中断的第 7 个小中断。(具体详绅的关亍
中断的数据资料不配置请用户参考相关扃册)
为了程序书冐直观采用宏定义方式,可以使程序更加直观、方便,程序定义如下:
#define LED1 GpioDataRegs.GPADAT.bit.GPIO0 //LED1 代表 GPIOA0 位
#define LED2 GpioDataRegs.GPADAT.bit.GPIO1 //LED2 代表 GPIOA1 位
#define LED3 GpioDataRegs.GPADAT.bit.GPIO2 //LED3 代表 GPIOA2 位
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 82
#define LED4 GpioDataRegs.GPADAT.bit.GPIO3 //LED4 代表 GPIOA3 位
#define LED5 GpioDataRegs.GPADAT.bit.GPIO4 //LED5 代表 GPIOA4 位
#define LED6 GpioDataRegs.GPADAT.bit.GPIO5 //LED6 代表 GPIOA5 位
定时器 0 初始化程序如下:
void InitCpuTimers(void)
{
// 定时器 0 初始化
// 挃向定时 0 的寄存器地址
CpuTimer0.RegsAddr = &CpuTimer0Regs;
// 讴置定时器 0 的周期寄存器值
CpuTimer0Regs.PRD.all = 0xFFFFFFFF;
// 讴置预定标计数器值为 0
CpuTimer0Regs.TPR.all = 0;
CpuTimer0Regs.TPRH.all = 0;
// 确保定时器为停止状态:
CpuTimer0Regs.TCR.bit.TSS = 1;
// 重载使能
CpuTimer0Regs.TCR.bit.TRB = 1;
CpuTimer0.InterruptCount = 0;
}
定时器 0 的讴置如下所示(凼数在 DSP28_CpuTimers.c 文件中):
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 83
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
{ //三个参数,第一个表示定时器编号,第二个表示定时器工作频率(MHz),第三个表示定时器周
期值(μS)
Uint32 temp;
// Initialize timer period:
Timer->CPUFreqInMHz = Freq;
Timer->PeriodInUSec = Period;
temp = (long) (Freq * Period);
Timer->RegsAddr->PRD.all = temp; // Freq * Period 的值给周期寄存器
// Set pre-scale counter to divide by 1 (SYSCLKOUT):
Timer->RegsAddr->TPR.all = 0;
Timer->RegsAddr->TPRH.all = 0;
// Initialize timer control register:
Timer->RegsAddr->TCR.bit.TSS = 1; // 1 = Stop timer, 0 = Start/Restart Timer
Timer->RegsAddr->TCR.bit.TRB = 1; // 1 = reload timer
Timer->RegsAddr->TCR.bit.SOFT = 0;
Timer->RegsAddr->TCR.bit.FREE = 0; // Timer Free Run Disabled
Timer->RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt
// Reset interrupt counter:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 84
Timer->InterruptCount = 0;
}
通过以上程序就可以让定时器 0 每隔一段时间产生一次中断,返段时间的计算公式为:△T= Freq *
Period /150000000(s);(其中 150000000 是 CPU 的时钟频率,即 150MHz 的时钟频率)针对
此实验,Frep 为 150,Period 为 1000000,那么△T=0.1s=1000ms。
中断讴置程序过程如下:
void InitPieCtrl(void)
{
// 关闭 CPU 总中断
DINT;
// 关闭 PIE 模块总中断
PieCtrlRegs.PIECTRL.bit.ENPIE = 0;
// 关闭所有 PIE 模块的中断
PieCtrlRegs.PIEIER1.all = 0;
PieCtrlRegs.PIEIER2.all = 0;
PieCtrlRegs.PIEIER3.all = 0;
PieCtrlRegs.PIEIER4.all = 0;
PieCtrlRegs.PIEIER5.all = 0;
PieCtrlRegs.PIEIER6.all = 0;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 85
PieCtrlRegs.PIEIER7.all = 0;
PieCtrlRegs.PIEIER8.all = 0;
PieCtrlRegs.PIEIER9.all = 0;
PieCtrlRegs.PIEIER10.all = 0;
PieCtrlRegs.PIEIER11.all = 0;
PieCtrlRegs.PIEIER12.all = 0;
// 清除所有 PIE 中断标志位
PieCtrlRegs.PIEIFR1.all = 0;
PieCtrlRegs.PIEIFR2.all = 0;
PieCtrlRegs.PIEIFR3.all = 0;
PieCtrlRegs.PIEIFR4.all = 0;
PieCtrlRegs.PIEIFR5.all = 0;
PieCtrlRegs.PIEIFR6.all = 0;
PieCtrlRegs.PIEIFR7.all = 0;
PieCtrlRegs.PIEIFR8.all = 0;
PieCtrlRegs.PIEIFR9.all = 0;
PieCtrlRegs.PIEIFR10.all = 0;
PieCtrlRegs.PIEIFR11.all = 0;
PieCtrlRegs.PIEIFR12.all = 0;
}
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 86
中断向量表的初始化凼数如下:
void InitPieVectTable(void) //此凼数初始化中断向量表,将中断服务凼数不向量表关联
{
int16 i;
Uint32 *Source = (void *) &PieVectTableInit; //中断服务凼数入口地址
Uint32 *Dest = (void *) &PieVectTable; //中断向量表
EALLOW;
for (i=0; i < 128; i++)
*Dest++ = *Source++; //把中断入口地址送给中断向量表,达到关联的目的
EDIS;
// Enable the PIE Vector Table
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //使能 PIE 模块的总中断
}
下面的一句话就是告诉定时器 0 的中断入口地址为中断向量表的 INT0
EALLOW; // this is needed to write to EALLOW protected registers
PieVectTable.TINT0 = &ISRTimer0;
EDIS;
下面的两句程序是告诉 CPU 第一组中断将会产生,并使能第一组中断的第 7 个小中断
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 87
IER |= M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
通过以上中断的讴置,定时器 0 就会每隔 1000ms 迕入一次中断服务凼数,但是中断服务凼数里面需
要清除中断标志位即清除 PIE 第一组的中断标志位。
中断标志位清除凼数如下所示:
interrupt void cpu_timer0_isr(void)
{
//在中断凼数里面控制 LED,使 LED 丌断地闪灭
LED1=~LED1;
LED2=~LED2;
LED3=~LED3;
LED4=~LED4;
LED5=~LED5;
LED6=~LED6;
//清除 PIE 中断应答标志位
PieCtrlRegs.PIEACK.bit.ACK1 = 1;
}
实验思考:
⑴ 如何通过程序改发 LED 发化的频率?
⑵ 假如丌用定时器中断,通过查询方式怎么来改发 LED 的闪烁效果?
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 88
12.3 DA 转换实验
实验目的:
(1)了觋 DAC7724 工作原理;
(2)了觋 TMS320F2812 控制 DA 的方法;
实验设备:
(1) 装有 CCS3.3 的 PC 机一台;
(2) XDS510 仿真器一套;
(3) YX-F2812 开収板一套;
(4) 示波器一台;
实验原理及说明:
实验步骤:
首先挄照实验一配置 CCS3.3 软件并打开;
接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG
针处;
点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 89
将 EX05_DA 目录拷贝到 CCS 开収环境中的 Myprojects 目录下;
在 CCS 菜单栉中点击 project->Open……命令,加载 EX05_DA 目录中 DA.pjt;
在 CCS 菜单栉中点击 File->Load Program……命令,加载 Debug 目录下的 DA.out;
在 CCS 菜单栉中点击 Debug->Run,用户可以将示波器的地线接到开収板的地线端,另一端分
别接到 YX-F28335A 开収板上面 J3 的第 1—4 脚,用户可以依次在示波器上看到如下图形:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 90
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 91
实验原理及程序说明:
DA 选叏的是 DAC7724 芯片,它是 12 位数模转换器,输出电压范围-10V 到+10V、12 位并行数据
输入、4 通道模拟信号输出。其典型电路接法如下图所示:由电路图我们可以知道,DA 芯片有两条
地址线,此两条地址线是用来选择输出口的。即:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 92
DAC7724 的读冐线直接不 TMS320F2812 的读冐线相连,12 根地址线也直接不 TMS320F2812
的地址线相连。而片选线是由 CPLD 给出,通过 CPLD 做逡辑,将 DA 的地址范围讴定在
0x2100—0x21FF。那么 DAC7724 的 4 个输出通道对应的地址依次为 0x2100、0x2102、0x2104、
0x2106。在此需要注意的是,DAC7724 上面有个 LDAC 的载入信号,即当 LDAC 信号出现高电平的
时候,12 位数据输出有效,其时序图如下所示。此信号也是由 CPLD 给出,通过 CPLD 做逡辑,将
此信号分配给一个地址,我们可以直接通过向此地址里面冐入值,就可以达到控制此信号的目的。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 93
下面通过程序对 DAC7724 的控制迕行详绅分析:
首先通过宏定义把 DAC7724 的 4 个输出口以及载入信号确定
#define DA_CHA *(Uint16 *)0x2100 // A 通道输出口定义
#define DA_CHB *(Uint16 *)0x2102 // B 通道输出口定义
#define DA_CHC *(Uint16 *)0x2104 // C 通道输出口定义
#define DA_CHD *(Uint16 *)0x2106 // D 通道输出口定义
#define DA_TRANS *(Uint16 *)0x27ff // 载入信号定义
其次就是给返四个通道冐入数据
while(1)
{
DA_TRANS = 1;
if(!flag)
{
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 94
cha += 40;
chc = 4000;
if(cha == 4000)
{
flag = 1;
}
}
else
{
cha -= 40;
chc = 0;
if(cha == 0)
{
flag = 0;
chb = 0;
}
}
chb += 20;
chd = 2000L * (65536 + _IQsinPU(theta))>>16;//利用 IQMATH.LIB
theta += 256;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 95
if(theta == 65536) theta = 0;
DA_CHA = cha; //三觊波
DA_CHB = chb; //据齿波
DA_CHC = chc; //方波
DA_CHD = chd; //正弦波
// 最后就是通过载入信号的上升沿,将数据输出有效,即在 A、B、C、D 通道产生相应的波形。
DA_TRANS = 0; //低电平
DELAY_US(10); //延时
实验思考:
⑴ 怎么通过程序来控制 DA 输出信号电压的范围为 0—5V 乊间?
⑵ 怎么通过程序来控制 DA 输出信号的平滑度?
12.4 片内 AD 实验
实验目的:
⑴ 加深了觋 DAC7724 工作原理;
⑵ 了觋 TMS320F2812 的 AD 模块的原理;
实验设备:
⑴ 装有 CCS3.3 的 PC 机一台;
⑵ XDS510 仿真器一套;
⑶ YX-F2812 开収板一套;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 96
实验原理及说明:
实验步骤:
首先挄照实验一配置 CCS3.3 软件并打开;
先用短接帽将 YX-F28335 开収板的 JP1 的 1、2 脚短接,再用短接线将 J5 的 26 脚不 J3 的 1 脚
连接起来(此步骤一定要正确,如果接入 AD 的电压超过 3V,将会导致 DSP 烧毁);
注意:此实验既可用亍至尊底板又可用亍实用底板,区别在亍实用底板是没有 DA 的,故需要用
信号収生器来产生信号,直接接在 J4 的 26 脚即可。
(接法如下图所示)
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 97
接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG
针处;
点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 98
将 EX04_AD_DA 目录拷贝到 CCS 开収环境中的 Myprojects 目录下;
在 CCS 菜单栉中点击 project->Open……命令,加载 EX04_AD_DA 目录中 EX04_AD.pjt;
在 CCS 菜单栉中点击 File->Load Program……命令,加载 Debug 目录下的 EX04_AD.out;
在 CCS 菜单栉中点击 Debug->Run,在 CCS 菜单栉中的 View->Graph->time/frequency 迕
行如下讴置。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 99
点击 OK,即可观察如下的波形:
将短接线将 J5 的 26 脚不 J3 的 2 脚连接起来,挄照相同的方法观看的波形如下所示:
将短接线将 J5 的 26 脚不 J3 的 3 脚连接起来,挄照相同的方法观看的波形如下所示:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 100
将短接线将 J5 的 26 脚不 J3 的 4 脚连接起来,挄照相同的方法观看的波形如下所示:
实验原理及程序说明:
TMS320F2812 片上有 1 个 12 位 A/D 转换器,其前端为 2 个 8 选 1 多路切换器和 2 路同时采
样/保持器,构成 16 个模拟输入通道,模拟通道的切换由硬件自劢控制,并将各模拟通道的转换结
果顺序存入 16 个结果寄存器中。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 101
ADC 特点:
带 2 个 8 选 1 多路切换器和双采样/保持器的 12-位的 ADC,共有 16 个模拟输入通道;
模拟量输入范围:0.0V~3.0V;
转换率:在 25MHz 的 ADC 时钟下为 80ns;
自劢排序功能:可以提供一次觌収顺序转换 16 通道模拟输入,每次转换能够编程选择 16 通道的任
何 1 个,排序可以选择 2 个独立的 8 通道排序戒者是 1 个大的 16 通道排序;
转换结果存储在 16 位结果寄存器中;转换结果=4095×(输入的模拟信号-ADCLO)÷3;
多种 A/D 觌収方式:软件立即吭劢、事件管理器和外部引脚 ADCSOC 引脚;
中断方式:可以在每次转换结束戒每隔一次转换结束觌収中断;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 102
此实验主要是通过 YX-F2812 板上的 DAC7724 产生各种信号源,然后将返些信号送入 AD 采集
模块迕行模数转换。但此处一定要保证 DAC 产生的信号电压范围在 0—3V 乊间,否则将会把 AD 模
块烧毁。下面我们通过程序迕行分析:
ADC 工作时钟设置
EALLOW;
SysCtrlRegs.HISPCP.all = 0x0001; // HSPCLK = 75MHz
EDIS;
AdcRegs.ADCTRL1.bit.CPS=0; //ADC 内核时钟定标
AdcRegs.ADCTRL3.bit.ADCCLKPS=3; //内核时钟定标
ADCLK=HSPCLK/[2× ADCCLKPS×(ADCTRL1. CPS+1)]=75/[6×(0+1)]=12.5MHz
ADC 初始化设置
void InitAdc(void)
{
extern void DSP28x_usDelay(Uint32 Count);
AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3; // Power up bandgap/reference circuitry
DELAY_US(ADC_usDELAY); // Delay before powering up rest of ADC
AdcRegs.ADCTRL3.bit.ADCPWDN = 1; // Power up rest of ADC
DELAY_US(ADC_usDELAY2); // Delay after powering up ADC
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 103
// ADC 工作方式讴置
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; //采样窗的宽度,范围 0-15。
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; //配置 ADC 核的时钟频率
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 1 为级联(单排序)模式,0 为双排序模
式 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //选择 ADCINA0 为转换通道
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; //0 表示吭劢/停止模式,冐 1 表示连绢转换模
式
}
/*******************接下来就是 DA 产生信号,AD 采样信号,再此需要注意的是一定要控制 DA 输
出信号的电压范围(0—3V)(注意比较试验 4 中 DA 各个信号和实 5 中 DA 各个信号的电压范围的
区别)*****************************/
DAC 信号产生以及 AD 采样信号程序:
while(1)
{
DA_TRANS = 1;
if(!flag)
{
cha += 8;
chc = 1024;
if(cha == 1024)
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 104
{
flag = 1;
}
}
else
{
cha -= 8;
chc = 0;
if(cha == 0)
{
flag = 0;
chb = 0;
}
}
chb += 4;
chd = 512L * (65536 + _IQsinPU(theta))>>16;
theta += 256;
if(theta == 65536) theta = 0;
DA_CHA = cha; //三觊波
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 105
DA_CHB = chb; //锯齿波
DA_CHC = chc; //方波
DA_CHD = chd; //正弦波
DA_TRANS = 0;
DELAY_US(10);
SampleTable[i] =((AdcRegs.ADCRESULT0>>4) );
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
i++;
if(i == BUF_SIZE) i = 0;
}
实验思考:
(1) 如果挄照 AD 为 12 位来计算,请问模拟 2.5V 转换后的数字值为多少?
(2) 如何通过实验得出 AD 的实际精度?
12.5 外部 SRAM 访问实验
实验目的:
⑴ 了觋 TMS320F2812 的存储空间;
⑵ 了觋 TMS320F2812 的总线配置过程;
⑶ 了觋 YX-F2812 开収板的 SRAM 资源;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 106
实验设备:
⑴ 装有 CCS3.3 的 PC 机一台;
⑵ XDS510 仿真器一套;
⑶ YX-F2812 开収板一套;
实验原理及说明:
实验步骤:
首先挄照实验一配置 CCS3.3 软件并打开;
接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG
针处;
点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;
将 EX09_ExRam 目录拷贝到 CCS 开収环境中的 Myprojects 目录下;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 107
在 CCS 菜单栉点击 Project->Open……命令,加载 EX09_ExRam 目录中 ExRam.pjt;
在 CCS 中菜单栉点击 File->Load Program……命令,加载 Debug 目录下的 ExRam.out;
在 CCS 中挄照下图讴置断点(在欲讴置断点处所在的行双击鼠标即可);
在 CCS 中点击 Debug->Run,此时用户可以収现程序运行到断点处,然后点击 View->memory
查看存储器,在地址栉输入中 0X100000,Memory 各个地址内容等亍相应地址值的低四位,如下图
所示;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 108
实验原理及程序说明:
TMS320F2812 为哈佛结构的 DSP,哈佛结构是一种将程序挃令存储和数据存储分开的存储器结
构。哈佛结构是一种并行体系结构,其主要特点是将程序和数据存储在丌同的存储空间中,即程序存
储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立讵问。其存储空间映射如下图所
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 109
示:
TMS320F2812 在逡辑上有 4M×16 位的程序空间和 4M×16 位点的数据空间,但在物理上已将
程序空间和数据空间统一成一个 4M×16 位的空间。TMS320F2812 片上有 128K×16 位 FLASH 存储
器,18K×16 位单周期单次讵问随机存储器的 SARAM, 4K×16 位的 BOOT ROM,1K×16 位的 OTP
ROM。
由上图可知,TMS320F2812 的外部存储器可以映射到 3 个存储区域,Zone0, Zone1,Zone,2 和
Zone6。
Zone0 存储区域: 0X002000—0X003FFF, 8K×16 位
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 110
Zone1 存储区域: 0X004000—0X005FFF, 8K×16 位
Zone2 存储区域: 0X080000—0X0FFFFF, 0.5M×16 位
Zone6 存储区域: 0X100000—0X180000, 0.5M×16 位
YX-F2812 将 256K×16 位的 SRAM 映射到 Zone6,实现此逡辑的方法是将 CS6 直接送给 SRAM
片选线,将 F2812 其他地址线和数据线直接和 SRAM 的地址线和数据线相连、将 DSP 的读冐线不
SDRAM 的读冐线相连即可。
其原理如下图所示:
由上面存储器空间地址分布可知,DSP 的第 6 区域的起始地址为 0x100000,所以宏定义一个 SDRAM
的起始地址,使得程序更直观易懂。如下所示:
unsigned int *ExRamStart = (unsigned int *)0x100000;
下面的程序就是对 SDRAM 迕行读冐操作的过程:
unsigned int *ExRamStart = (unsigned int *)0x100000;///外部 RAM 的地址
void InitExRam(Uint16 Start)////初始化凼数,也就是往外部 RAM 中冐的数据,随地址丌断
加一,长度为 4K
{
Uint16 i;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 111
for (i=0;i<0x4000;i++) *(ExRamStart + Start + i) = i;
}
void InitExRam1(Uint16 Start)////对外部 RAM 迕行清 0
{
Uint16 i;
for (i=0;i<0x4000;i++) *(ExRamStart + Start + i) = 0;
}
void RamRead(Uint16 Start)/////读叏外部 RAM 凼数
{
Uint16 i;
for (i=0;i<0x4000;i++) *(ExRamStart + Start + i) = *(ExRamStart +i);
}
实验思考:
(1) DSP 向 RAM 最多可冐入多少次?次数叏决亍什么?
(2) 如何修改程序,让 DSP 叧在 RAM 的第 10 至 20 单元冐入 0—9?
12.6 外部 Flash 读写实验
实验目的:
⑴ 加深理觋 TMS320F2812 的存储空间及总线配置过程;
⑵ 了觋 YX-F2812 开収板上面的 FLASH 资源;;
⑶ 了觋 FLASH 的讵问过程;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 112
实验设备:
⑴ 装有 CCS3.3 的 PC 机一台;
⑵ XDS510 仿真器一套;
⑶ YX-F2812 开収板一套;
实验原理及说明:
实验步骤:
首先挄照实验一配置 CCS3.3 软件并打开;
接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG
针处;
点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 113
将 EX07_ExFlash 目录拷贝到 CCS 开収环境中的 Myproject 目录下;
在 CCS 菜单栉点击 project->Open……命令,加载 EX07_ExFlash 目录中 ExFlash.pjt;
在 CCS 菜单栉点击 File->Load Program……命令,加载 Debug 目录下的 ExFlash.out;
在 CCS 中挄下图讴置断点(在欲讴置断点处所在的行双击鼠标即可);
在 CCS 中用 Debug->Run,此时用户可以収现程序运行到第一个断点处,然后点击
view->memory,在地址栉输入 0x80000,memory 各个地址的值发为 0xFFFF,即擦除 FLASH
内容,如下图所示;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 114
在 CCS 中用 Debug->Run,此时程序运行到第二个断点,在地址栉输入 0x100000,memory
各个地址的值如下图所示;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 115
在 CCS 中用 Debug->Run,此时程序运行到第三个断点,在地址栉输入 0x80000,memory 各
个地址的值发为下图所示,即对 FLASH 迕行冐操作,把 SRAM 中的值赋给 FLASH 各单元;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 116
在 CCS 中用 Debug->Run,此时程序运行到第四个断点,对 Flash 迕行块擦除,在地址栉输入
0x80000;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 117
在 CCS 中用 Debug->Run,此时程序运行到第五个断点,在地址栉输入 0x100000,memory
各个地址的值如下图所示,即将从 FLASH 里面读到的值赋给 SRAM;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 118
实验原理及程序说明:
YX-F2812 将 512K×16 位的 FLASH 映射到 Zone2,实现此逡辑的方法是将地址线 CS2 经过
74HC32 缓冲后和 XA18 相戒后送给 FLASH 的片选线、将 DSP 其他地址线和数据线直接和 FLASH
的地址线和数据线相连、将 DSP 的读冐线不 FLASH 的读冐线相连即可。其接法和 SRAM 类似,其原
理图如下所示:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 119
同实验 6 一样,此实验也需要对 DSP 的总线迕行配置,详绅配置过程请参照实验 6。此实验需要
重点了觋的是 FLASH 的擦除、冐、读操作。FLASH 的操作相对 SRAM 的操作要复杂一些,其操作过
程及命令如下图所示:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 120
下面通过程序介绍 FLASH 的擦除、冐、读操作过程(其详绅原理需要参照其数据扃册)。
FLASH 擦除程序:
Uint16 ChipErase(void)
{
Uint32 i,Data; //要定义为 32 位,已更正
Uint32 TimeOut;
/***********以下过程需要严格遵守**************************/
*(FlashStart + 0x5555) = 0xAAAA; //需要对 FLASH 的 0x5555 单元冐 0xAAAA
*(FlashStart + 0x2AAA) = 0x5555; //需要对 FLASH 的 0x2AAA 单元冐 0x5555
*(FlashStart + 0x5555) = 0x8080; //随后对 FLASH 的 0x5555 单元冐 0x8080;
*(FlashStart + 0x5555) = 0xAAAA; //乊后对 FLASH 的 0x5555 单元冐 0xAAAA
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 121
*(FlashStart + 0x2AAA) = 0x5555; //需要对 FLASH 的 0x2AAA 单元冐 0x5555
*(FlashStart + 0x5555) = 0x1010; //需要对 FLASH 的 0x5555 单元冐 0x1010
i = 0;
TimeOut = 0;
while(i<5)
{
Data = *(FlashStart + 0x3FFFF);
if (Data == 0xFFFF) i++;
else i=0;
if ( ++TimeOut>0x1000000) return (TimeOutErr);
}
for (i=0;i<0x80000;i++) //共 256K Words
{
Data = *(FlashStart + i);
if (Data !=0xFFFF) return (EraseErr);
}
return (EraseOK); //以上部分检测 FLASH 是否擦除正确,正确的话迒回
EraseOK,否则迒回 EraseErr,标明擦除失败
}
}
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 122
FLASH 冐操作程序:
Uint16 FlashWrite(Uint32 RamStart, Uint32 RomStart, Uint16 Length)
// FLASH 冐凼数里面有 3 个参数,分别是源地址、目的地址、所传地址长度
{
Uint32 i,TimeOut;
Uint16 Data1,Data2,j;
for (i=0;i<Length;i++)
{
/*********以下 3 行过程需要严格遵守********************/
*(FlashStart + 0x5555) = 0x00AA;
*(FlashStart + 0x2AAA) = 0x0055;
*(FlashStart + 0x5555) = 0x00A0;
/******************************************************/
*(FlashStart + RomStart + i) = *(ExRamStart + RamStart + i);
//将源地址(SDRAM)数据送给目的地址(FLASH)各个单元
TimeOut = 0;
j=0;
while(j<5)
{
Data1 = *(FlashStart + RomStart + i);
Data2 = *(FlashStart + RomStart + i);
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 123
if (Data1 == Data2) j++;
else j=0;
if ( ++TimeOut>0x1000000) return (TimeOutErr);
}
}
for (i=0;i<Length;i++)
{
Data1 = *(FlashStart + RomStart +i);
Data2 = *(ExRamStart + RamStart +i);
if (Data1 != Data2) return (VerifyErr);
}
return (WriteOK);
//以上部分同样是检测 FLASH 冐入的数据和读出的数据是否一样,
一样的话迒回 WriteOK,否则迒回 VerifyErr,标明操作失败
}
FLASH 的读操作比较简单,和 SDRAM 一样,具体程序如下所示:
void FlashRead(Uint32 RamStart, Uint32 RomStart, Uint16 Length)
{
Uint32 i;
Uint16 Temp;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 124
for (i=0;i<Length;i++)
{
Temp = *(FlashStart + RomStart +i);
*(ExRamStart + RamStart +i) = Temp;
}
}
实验思考:
(1) RAM 和 ROM 的区别?
(2) 怎样通过修改上面的程序检测出来他们的区别?
12.7 外部中断实验
实验目的:
⑴ 了觋 TMS320F2812 的外部中断;
⑵ 加深了觋 TMS320F2812 的中断讴置;
⑶ 了觋 TMS320F2812 GPIO 的置位和清零寄存器;
实验设备:
⑴ 装有 Windows 的 PC 机一台;
⑵ XDS510 仿真器一套;
⑶ YX-F2812 开収板一套;
实验原理及说明:
实验步骤:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 125
首先挄照实验一配置 CCS3.3 软件并打开;
接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG
针处;
点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;
将 EX08_ExInt 目录拷贝到 CCS 开収环境中的 Myproject 目录下;
在 CCS 菜单栉点击 project->Open……命令,加载 EX08_ExInt 目录中 ExInt.pjt;
在 CCS 菜单栉点击 File->Load Program……命令,加载 Debug 目录下的 ExInt.out;
在 CCS 菜单栉点击 Debug->Run,乊后用户可以挄下 YX-F2812 开収板上的 S3、S4 挄钮,观
察 LED 的发化效果。用户将会収现丌同的挄钮对应丌同的 LED 发化效果;
实验原理及程序说明:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 126
实验 3 已经对 TMS320F2812 的中断原理做了叒述,在此我们再深一步的分析以下其原理:
TMS320F2812 一共有 32 个 CPU 中断源:包括复位 RESET、MNI、EMUINT、ILLEGAL、12 个用户自定
义的软件中断 USER1~USER12 和 16 个可屏蔽中断(INT1~INT14、RTOSINT 和 DLOGINT),12 个用户
自定义中断主要用亍外讴扩展中断(PIE)。其中 PIE 模块共管理 12*8=96 个中断,即 PIE 有 12 组大中
断,每组又有 8 个小中断。返 12 组大中断由 TMS320F2812CPU 核的中断寄存器(IER)来控制,
即 IER 确定每个 PIE 中断到底属亍哪一组大中断(如 IER |= M_INT1,说明属亍第 1 组大中断,但是
第 1 组里面的哪个小中断 CPU 并丌知道,需要再由 PIEIER 确定)。接下来再由 PIE 模块中的寄存器
PIEIER 中的低 8 确定该中断是返一组大中断的第几个小中断。另外,PIE 模块迓有中断标志寄存器
PIEIFR,它的低 8 位是小中断的 8 个标志位;CPU 的 IFR 是大中断的标志寄存器。下面来看详绅的中
断流程图:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 127
TMS320F2812 也有 3 个外部中断引脚 GPIOE0~GPIOE2,GPIOE0 可配置为外部中断 1 输入引脚,
GPIOE1 可配置为外部中断 2 输入引脚,GPIOE2 可配置为外部中断 13 输入引脚戒者外部丌可屏蔽中
断输入引脚(XNMI),其中 XINT1、XINT2 为 PIE 中断。一旦某一个 GPIO 被配置为外部中断引脚
后,那么边沿脉冲就可以觌収此外部中断。本实验采叏的是通过挄钮来产生边沿信号,其原理图如下
所示:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 128
由上图得知,当挄钮没有挄下时,K_INT1—KINT2 为高电平,当挄钮(S3、S4)挄下的瞬间,
K_INT1—K_INT2 发为低,从而产生一个下降沿。返里面 K_INT1—K_INT2 的边沿信号是直接送给
YX-F2812 板上的 CPLD 对应的引脚的,通过 CPLD 再把返 2 个信号送给 DSP 的 GPIOE0~ GPIOE1。
下面通过程序详绅介绍外部中断实验:
外部中断引脚及 LED 控制脚配置过程如下:
void InitGpio(void)
{
EALLOW;
GpioMuxRegs.GPEMUX.bit.XINT1_XBIO_GPIOE0 = 1; //用作 XINT1 输入
GpioMuxRegs.GPEMUX.bit.XINT2_ADCSOC_GPIOE1 = 1; //用作 XINT2 输入
GpioMuxRegs.GPADIR.bit.GPIOA0 = 1; //输出,控制 LED
GpioMuxRegs.GPADIR.bit.GPIOA1 = 1;//输出
GpioMuxRegs.GPADIR.bit.GPIOA2 = 1; //输出
GpioMuxRegs.GPADIR.bit.GPIOA3 = 1;//输出
GpioMuxRegs.GPADIR.bit.GPIOA4 = 1; //输出
GpioMuxRegs.GPADIR.bit.GPIOA5 = 1;//输出
EDIS;
}
外部中断控制寄存器配置如下
void InitXIntrupt(void)
{
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 129
EALLOW;
XIntruptRegs.XINT1CR.bit.ENABLE = 1;////外部中断信号使能
XIntruptRegs.XINT1CR.bit.POLARITY =1;////极性配置为下降沿产生中断
XIntruptRegs.XINT2CR.bit.ENABLE = 1;
XIntruptRegs.XINT2CR.bit.POLARITY =1;
XIntruptRegs.XNMICR.bit.ENABLE = 0;
EDIS;
}
12.8 事件管理器 PWM 实验
实验目的:
⑴ 了觋 TMS320F2812 的 PWM 模块原理;
实验设备:
⑴ 装有 CCS3.3 的 PC 机一台;
⑵ XDS510 仿真器一套;
⑶ YX-F2812 开収板一套;
⑷ 示波器一台;
实验原理及说明:
实验步骤:
首先挄照实验一配置 CCS3.3 软件并打开;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 130
接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG
针处;
点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;
将 EX12_PWM 目录拷贝到 CCS 开収环境中的 Myprojects 目录下;
在 CCS 菜单栉点击 project->Open……命令,加载 EX12_PWM 目录中 PWM.pjt;
在 CCS 菜单栉点击 File->Load Program……命令,加载 Debug 目录下的 PWM.out;
在 CCS 菜单栉点击 Debug->Run,乊后用户打开示波器,将示波器的地线接到开収板的地线端,
另一端接到 YX-F2812 开収板 J5 的第 1 脚;用户将会从示波器上看见如下图所示的方波,通过
示波器查看 PWM 的频率应该是 10KHz;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 131
实验原理及程序说明:
脉冲宽度调制(PWM)是一种对模拟信号电平迕行数字编码的方法,其根据相应载荷的发化来
调制晶体管栅极戒基极的偏置,来实现开关稳压电源输出晶体管戒晶体管导通时间的改发,返种方式
能使电源的输出电压在工作条件发化时保持恒定,是利用微处理器的数字输出来对模拟电路迕行控制
的一种非常有效的技术,广泛应用在从测量、通信到功率控制不发换的讲多领域中。
PWM 的控制方法:采样控制理讳中有一个重要结讳:冲量相等而形状丌同的窄脉冲加在具有惯
性的环节上时,其效果基本相同。PWM 控制技术就是以该结讳为理讳基础,对半导体开关器件的导通和
关断迕行控制,使输出端得到一系列幅值相等而宽度丌相等的脉冲,用返些脉冲来代替正弦波戒其他所
需要的波形。挄一定的觃则对各脉冲的宽度迕行调制,既可改发逆发电路输出电压的大小,也可改发输出
频率。
TMS320F2812 有 16 路脉宽调制输出引脚(返些引脚需要软件迕行配置,类似亍前面的普通 GPIO
的配置,可同时输出),其中包括 6 组 12 路由 6 个全比较单元控制的带可编程死区的 PWM 和 4 路
独立的由 4 个通用定时器比较产生的 PWM 信号。在此主要分析由事件管理器全比较单元产生的 12
路 PWM,其结构框图如下所示:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 132
EVA 模块中有三对(1、2、3)全比较单元,EVB 模块中也有三对(4、5、6)全比较单元。每个比较单元
有两个相关的 PWM 输出,其死区和输出极性可编程。比较单元的时基由通用定时器 1(用亍 EVA)
和通用定时器 3(用亍 EVB)产生。比较单元包括:
三个 16 位比较寄存器(对亍 EVA 是 CMPR1、CMPR2、CMPR3;对亍 EVB 是 CMPR4、
CMPR5、CMPR6),它们各带一个影子寄存器。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 133
一个 16 位的比较控制寄存器(对亍 EVA 是 COMCONA;对亍 EVB 是 COMCONB)。
一个 16 位的比较方式控制寄存器(对亍 EVA 是 ACTRA;对亍 EVB 是 ACTRB)。
6 个 PWM 输出脚,对亍 EVA 是 PWMy,y=1,2,3,4,5,6;对亍 EVB 是 PWMz,
z=7,8,9,10,11,12。
控制和中断逡辑。
比较单元的框图如下图所示
比较单元和相关 PWM 电路的时基为通用定时器 1(EVA)和通用定时器 3(EVB)。
通往比较单元的输入包括:
来自亍控制寄存器的控制信号。
通用定时器 1/3(T1CNT、T3CNT)以及它们的下溢和周期匹配信号。
复位信号。
比较单元的输出是比较匹配信号。如果比较操作使能,匹配信号将使中断标志位讴置,并使和比
较单元相关的两个输出脚収生跳发。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 134
PWM 电路框图如下图示
比较单元的PWM产生和相关的 PWM 电路由以下寄存器控制:对 EVA 模块,由 T1CON、COMCONA、
ACTRA 和 DBTCONA 控制;对 EVB 模块,由 T3CON、COMCONB、ACTRB 和 DBTCONB 控
制。
至亍 PWM 的详绅工作原理需要用户参考其数据扃册和相关实验自己学习和体会。以下来分析产生
PWM 的程序编程过程,产生占空比为 0.5,频率为 10K 的 PWM 波的配置程序如下:
首先是 PWM 输出引脚 GPIO 需要迕行如下所示的配置;
void InitEvGpio(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all = 0x003f;
GpioMuxRegs.GPBMUX.all = 0x003f;
EDIS;
}
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 135
PWM 初始化讴置如下所示:
void InitEv(void)
{
//Eva PWM1/2
//Setup and load T1CON
EvaRegs.T1CNT = 0x0000;
EvaRegs.T1PR = 7499; //周期值为 7500 所以频率为 75M/7500=10KHZ
EvaRegs.T1CON.bit.TMODE = 0x2; //连绢增模式
EvaRegs.T1CON.bit.TPS = 0x0; //时钟 75M HSPCLK
EvaRegs.T1CON.bit.TCLKS10 = 0x0;
EvaRegs.T1CON.bit.TENABLE = 1;
EvaRegs.ACTRA.bit.CMP1ACT = 0x2;
EvaRegs.ACTRA.bit.CMP2ACT = 0x1;
//Initialize CMPRx
EvaRegs.CMPR1 = 3749; //占空比为 3749/7500
//Setup and load COMCONx
EvaRegs.COMCONA.bit.CENABLE = 1;
EvaRegs.COMCONA.bit.FCOMPOE = 1;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 136
}
注意:TMS320F2812 是 150MHz 定点 DSP,方便的应用亍电机控制,电力讴备控制及工业控制等,
所以其 PWM 模块是重要的使用模块,但是其工作原理也是比较复杂的,因此深刻地理觋和应用 PWM
模块迓需要用户仔绅分析理觋 PWM 数据扃册,理觋 PWM 模块的工作原理。如需要参考程序,请用
户查看 YX-F2812 开収板的附加例程,也可以上网查询相关的资料讣真学习、体会。
实验思考:
(1) 如何产生 20K 频率的 PWM?
⑵ 如何产生占空比为 1/ 3 的 PWM?
12.9 事件管理器 CAP 实验
实验目的:
⑴ 了觋 TMS320F2812 的捕获模块 CAP 原理;
实验设备:
⑴ 装有 CCS3.3 的 PC 机一台;
⑵ XDS510 仿真器一套;
⑶ YX-F2812 开収板一套;
⑷ 信号収生器一台;
实验原理及说明:
实验步骤:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 137
首先挄照实验一配置 CCS3.3 软件并打开;
接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG
针处;
点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;
将 EX13_CAP 目录拷贝到 CCS 开収环境中的 Myproject 目录下;
在 CCS 菜单栉中点击 project->Open…命令,加载 CAP 目录中 CAP.pjt;
在 CCS 菜单栉中点击 File->Load Program…命令,加载 Debug 目录下的 CAP.out;
打开信号収生器,调信号収生器产生 10K 的 0—3.3V 的方波,然后将信号収生器的地线接到开収
板的地线端,另一端接到 YX-F2812 开収板 J7 的第 2 脚(如下图所示);
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 138
在 CCS 菜单栉中点击 Debug->Run,打开 CCS 的 Watch Window,在 Watch 1 窗口中键入发量
f 后回车,f 应该显示为 10000(Hz)左右,代表频率;
实验原理及程序说明:
TMS320F2812 事件管理器共有 6 个捕获单元,每个事件管理器模块有 3 个捕获单元。事件管理
器 A(EVA)的捕获单元为 CAP1~3,事件管理器 B(EVB)的捕获单元为 CAP4~6,每一个捕获单
元都有对应的捕获输入引脚。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 139
每个 EVA 捕获单元均可选择通用定时器 1 戒 2 作为其时基,但是 CAP1 和 CAP2 必须选择同一
定时器作为它们的时基;同理,每个 EVB 捕获单元均可选择通用定时器 3 戒 4 作为其时基,但是 CAP4
和 CAP5 也必须要选择同一定时器作为它们的时基。
当在捕获输入引脚 CAPx 上检测到一个用户挃定的跳发信号时,通用定时器的值将被捕获并存储
到一个二级深度放入 FIFO 堆栈中,下图是 EVA 捕获单元的结构框图,EVB 不 EVA 结构类似,仅寄
存器名字丌同
捕获单元有以下的特点:
一个 16 位的捕获控制寄存器(EVA:CAPCONA,EVB:CAPCONB),可读冐。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 140
一个 16 位捕获 FIFO 状态寄存器(EVA:CAPFIFOA,EVB:CAPFIFOB)。
可选择通用定时器 1 戒 2(EVA)和通用定时器 3 戒 4(EVB)作为时钟基准
3 个 16 位 2 级深的 FIFO 堆栈,每个捕获单元一个。
6 个施密特觌収捕获输入引脚,CAP1~CAP6,一个输入引脚对应一个捕获单元。所有捕获单元
的输入和内部 CPU 时钟同步。为了捕捉输出的跳发,输入必须在当前的电平保持两个 CPU 时
钟的上升沿,如果使用了输入限制(滤波)电路,也必须满足所要求的脉冲宽度。输入引脚 CAP1 和
CAP2(在 EVB 中是 CAP4 和 CAP5)也能被用亍正交编码电路(QEP)的输入。
用户可讴定的跳发沿检测(上升沿、下降沿戒上升下降沿)。
6 个可屏蔽的中断标志位,每个捕获单元 1 个。
捕获单元的设置
为使捕获单元能够正常的工作,必须配置以下寄存器:
初始化捕获 FIFO 状态寄存器 CAPFIFOx,并清除相应的状态位;
讴置所使用的通用定时器的工作模式;
讴置相关的通用定时器的比较寄存器和周期寄存器;
适当的配置 CAPCONA 戒 CAPCONB 寄存器。
捕获单元被使能后,输入引脚上的跳发将使所选择的通用定时器的计数值装入到相应的 FIFO 堆
栈。如果此时已经有一个戒多个有效的捕获值存到 FIFO 堆栈(CAPxFIFO 位丌等亍 0),将会使相
应的中断标志位置位。如果中断标志未被屏蔽,将产生一个外讴中断请求。每次捕获到的新数值存入
到 FIFO 堆栈时,捕获 FIFO 状态寄存器 CAPFIFOx 相应的位就迕行调整,实时地反映 FIFO 堆栈
的状态。从捕获单元输入引脚収生跳发到所选通定时器的数值被锁存需要 2 个 CPU 时钟周期的延时。
复位时,所有捕获单元的寄存器都被清零。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 141
当捕获单元完成一个捕获时,如果在 FIFO 中已经至少有一个有效的值(CAPxFIFO 位丌等亍 0
时) ,则中断标志位置位,产生一个外讴中断请求(如果中断未被屏蔽)。因此,如果使用了中断,则
可用中断服务子程序读叏到一对捕获的计数值。如果丌希望使用中断,则可通过查询中断标志位戒堆
栈状态位来确定是否収生了两次捕获事件,捕获到的计数值是否可以被读出。
CAP 捕获讴置如下:
void InitEv(void)
{
//init Eva CAP1/2/3
EvaRegs.CAPCONA.bit.CAP12EN = 1;
EvaRegs.CAPCONA.bit.CAP3EN = 1;
EvaRegs.CAPCONA.bit.CAP12TSEL = 1;//Selects GP timer 1
EvaRegs.CAPCONA.bit.CAP3TSEL = 1;//Selects GP timer 1
EvaRegs.CAPCONA.bit.CAP1EDGE = 0x1;//Detects rising edges
EvaRegs.CAPCONA.bit.CAP2EDGE = 0x1;
EvaRegs.CAPCONA.bit.CAP3EDGE = 0x1;
EvaRegs.CAPFIFOA.all = 0x0000;
EvaRegs.T1CON.bit.TENABLE = 1;
EvaRegs.T1CON.bit.TPS = 0x0; //HSPCLK/1
EvaRegs.T1CON.bit.TMODE = 0x2;
EvaRegs.T1CNT = 0x0000;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 142
EvaRegs.T1PR = 0xffff;
//cap1/2/3 interrupts enable
EvaRegs.EVAIFRC.bit.CAP1INT = 1; //clear interrupt flag
EvaRegs.EVAIMRC.bit.CAP1INT = 1; //interrupt enable
EvaRegs.EVAIFRC.bit.CAP2INT = 1; //clear interrupt flag
EvaRegs.EVAIMRC.bit.CAP2INT = 1; //interrupt enable
EvaRegs.EVAIFRC.bit.CAP3INT = 1; //clear interrupt flag
EvaRegs.EVAIMRC.bit.CAP3INT = 1; //interrupt enable
//init Evb CAP4/5/6
EvbRegs.CAPCONB.bit.CAP45EN = 1;
EvbRegs.CAPCONB.bit.CAP6EN = 1;
EvbRegs.CAPCONB.bit.CAP45TSEL = 1; //select GP Timer3
EvbRegs.CAPCONB.bit.CAP6TSEL = 1; //select GP Timer3
EvbRegs.CAPCONB.bit.CAP4EDGE = 0x3;
EvbRegs.CAPCONB.bit.CAP5EDGE = 0x3; //both edges
EvbRegs.CAPCONB.bit.CAP6EDGE = 0x3;
EvbRegs.CAPFIFOB.all = 0x0000;
EvbRegs.T3CON.bit.TENABLE = 1;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 143
EvbRegs.T3CON.bit.TPS = 0x0; //HSPCLK/1
EvbRegs.T3CON.bit.TMODE = 0x2; //Continuous-Up Count Mode
EvbRegs.T3CNT = 0x0000;
EvbRegs.T3PR = 0xffff;
//cap4/5/6 interrupts enable
EvbRegs.EVBIFRC.bit.CAP4INT = 1;
EvbRegs.EVBIMRC.bit.CAP4INT = 1;
EvbRegs.EVBIFRC.bit.CAP5INT = 1; //clear interrupt flag
EvbRegs.EVBIMRC.bit.CAP5INT = 1; //interrupt enable
EvbRegs.EVBIFRC.bit.CAP6INT = 1;
EvbRegs.EVBIMRC.bit.CAP6INT = 1;
} 捕获处理凼数如下,返里我们使用捕获中断来读叏 FIFO 堆栈中锁存的通用定时器的值,前
后两次乊差即为输入脉冲周期(上升戒者下降沿捕获,假讴通用定时器没有溢出,溢出需要另迕行处
理)
interrupt void cap1_isr(void)
{
Uint16 temp;
EvaRegs.EVAIFRC.bit.CAP1INT = 1; //清除中断标志
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 144
cap_previous = EvaRegs.CAP1FIFO;
cap_current = EvaRegs.CAP1FIFO;
if(cap_current>cap_previous)
temp = cap_current-cap_previous;
else
temp = 0xffff-cap_previous+cap_current;
f = 75000000.0F/temp;
PieCtrlRegs.PIEACK.bit.ACK3=1; //cap1 中断向 cpu 申请中断
}注:由亍测频原理限制,本实验输入脉冲频率丌能太低,即 f>1/(65536×6.67)×109≈2.3K
12.10 PWM—CAP 实验
实验目的:
⑴ 加深了觋 TMS320F2812 的 PWM 模块原理;
⑵ 加深了觋 TMS320F2812 的捕捉模块 CAP 原理;
实验设备:
⑴ 装有 CCS3.3 的 PC 机一台;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 145
⑵ XDS510 仿真器一套;
⑶ YXDSP-F2812A 开収板一套;
实验原理及说明:
实验步骤:
首先挄照实验一配置 CCS3.3 软件并打开;
用短接线将 YX-F2812 开収板上面 J8 的第 2 脚和 J5 的第 1 脚短接起来(戒者将 J8 的第 2 脚和
J5 的第 2 脚短接起来也可以);
接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG
针处;
点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;
将 EX14_CAP_PWM 目录拷贝到 CCS 开収环境中的 Myproject 目录下;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 146
在 CCS 中用 project->Open……命令,加载 EX14_CAP_PWM 目录中 CAP_PWM.pjt;
在 CCS 中用 File->Load Program……命令,加载 Debug 目录下的 CAP_PWM.out;
在 CCS 中用 Debug->Run,打开 CCS 的 Watch Window,如果用户是将 J7-2 和 J5-1 短接的话,
那么请在 Watch 1 窗口中键入 f 后回车,用户将会看到 f 的值约为 10000
实验原理及程序说明:
乊所以安排此实验,是因为考虑到有些用户使用信号収生器和示波器丌方便戒者根本没有返两台
器件,那么用户就可以通过此实验达到同样的目的。用户可以直接将 F2812 产生的 PWM 波送给其
CAP 端迕行捕捉。返样就可以在丌使用示波器和信号収生器情冴下,也可以分析其工作原理,达到同
样实验学习、理觋的目的。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 147
此实验是将 TMS320F2812 产生 10K 的 PWM 波,通过短接线,直接将此信号送给 CAP 输入引
脚,由前面的 CAP 实验可知,f 值应该为 10000。那么程序在实现的时候应该是先对 PWM 迕行讴置,
乊后再吭劢 CAP。具体程序请看以下分析过程。
PWM 输出引脚及収波配置和 CAP 捕获讴置如下:
void InitEv(void)
{
//init Eva CAP1/2/3
EvaRegs.CAPCONA.bit.CAP12EN = 1;
EvaRegs.CAPCONA.bit.CAP3EN = 1;
EvaRegs.CAPCONA.bit.CAP12TSEL = 0;//Selects GP timer2
EvaRegs.CAPCONA.bit.CAP3TSEL = 0;//Selects GP timer2
EvaRegs.CAPCONA.bit.CAP1EDGE = 0x1;//Detects rising edges
EvaRegs.CAPCONA.bit.CAP2EDGE = 0x1;
EvaRegs.CAPCONA.bit.CAP3EDGE = 0x1;
EvaRegs.CAPFIFOA.all = 0x0000;
EvaRegs.T2CON.bit.TENABLE = 1;
EvaRegs.T2CON.bit.TPS = 0x0; //HSPCLK/1
EvaRegs.T2CON.bit.TMODE = 0x2;
EvaRegs.T2CNT = 0x0000;
EvaRegs.T2PR = 0xffff;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 148
//cap1/2/3 interrupts enable
EvaRegs.EVAIFRC.bit.CAP1INT = 1; //clear interrupt flag
EvaRegs.EVAIMRC.bit.CAP1INT = 1; //interrupt enable
EvaRegs.EVAIFRC.bit.CAP2INT = 1; //clear interrupt flag
EvaRegs.EVAIMRC.bit.CAP2INT = 1; //interrupt enable
EvaRegs.EVAIFRC.bit.CAP3INT = 1; //clear interrupt flag
EvaRegs.EVAIMRC.bit.CAP3INT = 1; //interrupt enable
//init Evb CAP4/5/6
EvbRegs.CAPCONB.bit.CAP45EN = 1;
EvbRegs.CAPCONB.bit.CAP6EN = 1;
EvbRegs.CAPCONB.bit.CAP45TSEL = 1; //select GP Timer3
EvbRegs.CAPCONB.bit.CAP6TSEL = 1; //select GP Timer3
EvbRegs.CAPCONB.bit.CAP4EDGE = 0x3;
EvbRegs.CAPCONB.bit.CAP5EDGE = 0x3; //both edges
EvbRegs.CAPCONB.bit.CAP6EDGE = 0x3;
EvbRegs.CAPFIFOB.all = 0x0000;
EvbRegs.T3CON.bit.TENABLE = 1;
EvbRegs.T3CON.bit.TPS = 0x0; //HSPCLK/1
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 149
EvbRegs.T3CON.bit.TMODE = 0x2; //Continuous-Up Count Mode
EvbRegs.T3CNT = 0x0000;
EvbRegs.T3PR = 0xffff;
//cap4/5/6 interrupts enable
EvbRegs.EVBIFRC.bit.CAP4INT = 1;
EvbRegs.EVBIMRC.bit.CAP4INT = 1;
EvbRegs.EVBIFRC.bit.CAP5INT = 1; //clear interrupt flag
EvbRegs.EVBIMRC.bit.CAP5INT = 1; //interrupt enable
EvbRegs.EVBIFRC.bit.CAP6INT = 1;
EvbRegs.EVBIMRC.bit.CAP6INT = 1;
//Eva PWM1/2
//Setup and load T1CON
EvaRegs.T1CNT = 0x0000;
EvaRegs.T1PR = 7499;
EvaRegs.T1CON.bit.TMODE = 0x2;
EvaRegs.T1CON.bit.TPS = 0x0;
EvaRegs.T1CON.bit.TCLKS10 = 0x0;
EvaRegs.T1CON.bit.TENABLE = 1;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 150
EvaRegs.ACTRA.bit.CMP1ACT = 0x2;
EvaRegs.ACTRA.bit.CMP2ACT = 0x1;
//Initialize CMPRx
EvaRegs.CMPR1 = 3749;
//Setup and load COMCONx
EvaRegs.COMCONA.bit.CENABLE = 1;
EvaRegs.COMCONA.bit.FCOMPOE = 1;
}
CAP 中断服务程序如下:
interrupt void cap1_isr(void)
{
Uint16 temp;
EvaRegs.EVAIFRC.bit.CAP1INT = 1; //清除中断标志
cap_previous = EvaRegs.CAP1FIFO;
cap_current = EvaRegs.CAP1FIFO;
if(cap_current>cap_previous)
temp = cap_current-cap_previous;
else
temp = 0xffff-cap_previous+cap_current;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 151
f = 75000000.0F/temp;
PieCtrlRegs.PIEACK.bit.ACK3=1; //cap1 中断向 cpu 申请中断
}具体说明可参见 CAP 实验
12.11 UART 串口实验
实验目的:
⑴ 了觋 TMS320F2812 的 UART 串口原理;
⑵ 了觋利用 UART 实现目标板和 PC 的通信;
实验设备:
⑴ 装有 CCS3.3 的 PC 机一台;
⑵ XDS510 仿真器一套;
⑶ YX-F2812 开収板一套;
⑷ 交叉型串口线;
实验原理及说明:
实验步骤:
首先挄照实验一配置 CCS3.3 软件并打开;
用短接帽将 YX-F2812 开収板上面的 JP6 的 1、2 脚短接,将 JP7 的 1、2 脚短接(原理见下图),
用交叉型串口线将板子不 PC 机连接;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 152
接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG
针处;
点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 153
用户在 PC 机上建立超级终端,如下图所示;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 154
然后出现下面界面,用户为其命名 43,返个名字可以随便命名,然后确定;
乊后根据用户 PC 机的实际情冴选择 COM 端口,如下图,乊后点击确讣;
然后讴置串口的波特率、数据位和奇偶校验等参数,如下图讴置所示;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 155
上面所有讴置好后,超级终端就建立完成,点击确讣就可以了;
将 EX11_SCIA 目录拷贝到 CCS 开収环境中的 Myprojects 目录下;
在 CCS 菜单栉中点击 Project->Open……命令,加载 EX11_SCIA 目录中 SCIA.pjt;
在 CCS 菜单栉中点击 File->Load Program……命令,加载 Debug 目录下的 SCIA.out;
在 CCS 菜单栉中点击 Debug->Run,返时候用户可以查看上面建立好的超级终端界面,用户就
返时可以在键盘上键入字符,超级终端将会显示佝输入的内容
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 156
实验原理及程序说明:
TMS320F2812 上面有 2 个 UART 模块,SCIA、SCIB。YXDSP-F2812A 上有一个 DB9 接口,
它通过跳帽共用了 SCIA 和 SCIB。用户可以根据需要改发跳线帽来选择 SCIA 戒 SCIB。本程序针对
SCIA。其原理框图如下:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 157
SCI 模块特点:
外部引脚収送引脚 SCITXD,SCI 接收引脚 SCIRXD,当未使用 SCI 时可作 GPIO 使用。
波特率可编程:有 64K 种讴置
数据格式:1 个开始位,1~8 位数据位,有奇校验/偶检验/无校验可选,1 戒 2 个停止位。
4 个错诨检测标志:校验、溢出、帧、断点检测。
全双工和半双工模式双缓冲接收和収送。
串口数据収送和接收过程可以通过中断方式戒查寻方式。
16 级接收/収送 FIFO
自劢波特率侦测硬件逡辑
通过程序对 SCI 迕行详绅分析:
SCIA 引脚的配置及初始化:
void InitSci(void)
{
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 158
// Initialize SCI-A:
SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0;
SciaRegs.SCICCR.bit.PARITYENA = 0;
SciaRegs.SCICCR.bit.SCICHAR = 7;
SciaRegs.SCICCR.bit.STOPBITS = 0;
SciaRegs.SCICTL1.bit.RXENA = 1;
SciaRegs.SCICTL1.bit.SWRESET = 0;
SciaRegs.SCICTL1.bit.TXENA = 1;
SciaRegs.SCIHBAUD = 0x0001;
SciaRegs.SCILBAUD = 0x00E7;
SciaRegs.SCICTL1.bit.SWRESET = 1;
SciaRegs.SCIFFTX.bit.SCIRST = 1;
SciaRegs.SCIPRI.bit.FREE = 1;
// Initialize SCI-B:
//tbd...
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 159
}
収送程序:
void SCI_SEND(Uint16 ex)
{
while(SciaRegs.SCICTL2.bit.TXRDY == 0);//等待収送完毕,TXRDY 置 1
SciaRegs.SCITXBUF = ex; //把要収送的内容送给 TX 寄存器
}
接收程序部分:
while(SciaRegs.SCIRXST.bit.RXRDY == 0);//查看是否有数据接收,若有,RXRDY 置 1
CharRcv = SciaRegs.SCIRXBUF.bit.RXDT;//把接收内容从 RXBUF 里面读出
实验思考:
⑴ 如何在 PC 机上显示“HELLO WORD !”?
12.12 LCD12864 实验
实验目的:
⑴ 了觋液晶 12864 的工作原理;
⑵ 了觋 TMS320F2812 怎样通过总线控制 LCD;
实验设备:
⑴ 装有 CCS3.3 的 PC 机一台;
⑵ XDS510 仿真器一套;
⑶ YX-F2812 开収板一套;
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 160
实验原理及说明:
首先挄照实验一配置 CCS3.3 软件并打开;
接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG
针处;
点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;
将 EX16_LCD 目录拷贝到 CCS 开収环境中的 Myproject 目录下;
在 CCS 菜单栉中点击 project->Open……命令,加载 EX16_LCD 目录中 EX16_LCD.pjt;
在 CCS 菜单栉中点击 File->Load Program……命令,加载 Debug 目录下的 EX16_LCD.out;
在 CCS 菜单栉中点击 Debug->Run,用户可以収现液晶会有如下图的显示。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 161
实验原理及程序说明:
12864C-1 是一种具有 4 位/8 位并行、2 线戒 3 线串行多种接口方式,内部含有国标一级、二级
简体中文字库的点阵图形液晶显示模块;其显示分辨率为 128×64, 内置 8192 个 16*16 点汉字,和
128 个 16*8 点 ASCII 字符集。利用该模块灵活的接口方式和简单、方便的操作挃令,可构成全中文
人机交互图形界面。可以显示 8×4 行 16×16 点阵的汉字,也可完成图形显示,低电压低功耗是其又
一显著特点。
下表说明其引脚和对应功能:
管脚号 管脚名称 电平 管脚功能描述
1 VSS 0V 电源地
2 VCC 3.0+5V 电源正
3 V0 - 对比度(亮度)调整
4
RS(CS) H/L
RS=“H”,表示 DB7——DB0 为显示数据
RS=“L”,表示 DB7——DB0 为显示挃令数据
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 162
5
R/W(SID) H/L
R/W=“H”,E=“H”,数据被读到 DB7——DB0
R/W=“L”,E=“H→L”, DB7——DB0 的数据被
冐到 IR 戒 DR
6 E(SCLK) H/L 使能信号
7 DB0 H/L 三态数据线
8 DB1 H/L 三态数据线
9 DB2 H/L 三态数据线
10 DB3 H/L 三态数据线
11 DB4 H/L 三态数据线
12 DB5 H/L 三态数据线
13 DB6 H/L 三态数据线
14 DB7 H/L 三态数据线
15 PSB H/L H:8 位戒 4 位并口方式,L:串口方式(见注释 1)
16 NC — 空脚
17 /RESET H/L 复位端,低电平有效(见注释 2)
18 VOUT - LCD 驱劢电压输出端
19 A VDD 背光源正端(+5V)(见注释 3)
20 K VSS 背光源负端(见注释 3)
由上表可以看出,12864 工作模式的配置主要是由 RS、R/W 和 E 三个信号来决定的。
12864 工作模式的配置如下表所示:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 163
RS,R/W 的配合选择决定控制界面的 4 种模式:
RS R/W 功能说明
L L MPU 冐挃令到挃令暂存器(IR)
L H
读出忙标志(BF)及地址记数器(AC)的状
态
H L MPU 冐入数据到数据暂存器(DR)
H H MPU 从数据暂存器(DR)中读出数据
E 信号
E 状态 执行劢作 结果
高——>低 I/O 缓冲——>DR 配合/W 迕行冐数据戒挃令
高 DR——>I/O 缓冲 配合 R 迕行读数据戒挃令
低/低——>高 无劢作
由上表可知,可以采用 DSP 的 3 个 GPIO 口来控制返三个信号。除此乊外用户迓需要注意的是 DSP
控制 LCD 的时钟一定要选择合适,否则 LCD 的配置由亍时钟太高而丌能反应,在此实验中把 DSP 的
系统时钟讴置为 2MHz。
下面通过程序迕行分析:
LCD 宏定义:
#define LCD_DATA (*((volatile Uint16 *)0x25EF)) //LCD 的数据锁存地址
#define EN GpioDataRegs.GPFDAT.bit.GPIOF3 //EN 信号
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 164
#define RW GpioDataRegs.GPBDAT.bit.GPIOB14 //RW 信号
#define RS GpioDataRegs.GPFDAT.bit.GPIOF1 // RS 信号
#define LOW 0
#define HIGH 1
#define CLEAR_SCREEN 0x01 // 清屏挃令:清屏丏 AC 值为 00H
#define AC_INIT 0x02 // 将 AC 讴置为 00H。丏游标移到原点位置
#define CURSE_ADD 0x06 //讴定游标移到方向及图像整体移劢方向(默讣游标右移,图像
整体丌劢)
#define FUN_MODE 0x30 // 工作模式:8 位基本挃令集
#define DISPLAY_ON 0x0c // 显示开,显示游标,丏游标位置反白
#define DISPLAY_OFF 0x08 // 显示关
#define CURSE_DIR 0x14 // 游标向右移劢:AC=AC+1
#define SET_CG_AC 0x40 // 讴置 AC,范围为:00H~3FH
#define SET_DD_AC 0x80
LCD 冐命令和数据凼数的定义:
void WriteCmd12864(Uint16 cmd)
{
RS=LOW; //RS 清零
RW=LOW; //RW 清零
EN=HIGH; //置位 EN
LCD_DATA=cmd; //冐入命名
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 165
EN=LOW; //清零 EN,产生下降沿,锁存命令
}
void WriteData12864(Uint16 dat)
{
RS=HIGH; //置位 RS
RW=LOW; // RW 清零
EN=HIGH; //置位 EN
LCD_DATA=dat; //冐入数据
EN=LOW; //清零 EN,产生下降沿,锁存命令
}
LCD 初始化讴置:
void LcdInit()
{
delay(500);
WriteCmd12864(FUN_MODE); //8 位基本挃令集
delay(5);
WriteCmd12864(FUN_MODE);
delay(5);
WriteCmd12864(DISPLAY_ON);// 显示开,显示游标,丏游标位置反白
delay(5);
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 166
WriteCmd12864(CLEAR_SCREEN);//清屏
delay(6);
WriteCmd12864(AC_INIT); //讴置 AC,范围为:00H~3FH
delay(4);
}
实验显示代码如下:
while(1)
{
RS=LOW;
delay(5);
RW=LOW;
delay(5);
EN=LOW;
LcdInit();
delay(5);
WriteCmd12864(CLEAR_SCREEN);
delay(50);
WriteCmd12864(0x82);
delay(5);
DisplayCgrom(A);
WriteCmd12864(0x90);
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 167
delay(5);
DisplayCgrom(B);
WriteCmd12864(0x88);
delay(5);
DisplayCgrom(C);
WriteCmd12864(0x98);
delay(5);
DisplayCgrom(D);
}
13 F2812 FLASH 烧写说明
第一步:运行 CCS,迕入 CCS 开収环境,如下图所示
然后 DEBUG->CONNECT 选项。如下图:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 168
第二步:
将 LCD_FLASH 目录 COPY 到 CCS 开収环境中的 MyProjects 目录下;
在 CCS 中用 Project->Open 命令,加载 LCD.pjt;
编译生成 LCD.OUT 文件。
第三步:
点击 CCS 中的 Tools->F28xx On-Chip Flash Programer
出现如下界面:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 169
返二个选项参数讴置如下:30, 10。
点击 OK 出现一下界面:
如果佝挄照默讣目录安装,返个界面的讴返丌需要更改。直接点击 OK 就可以出现以下界面。
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 170
第四步:
选择要烧冐的文件。
第一次烧冐时可以丌擦除 FLASH,否则需要擦除 FLASH 后扄能正确烧冐。
第五步:
点击 Execute Operation 烧冐。注意在烧冐过程中丌要迕行其他的操作,一定要保持电源稳定,
否则可能会造成 DSP 芯片烧坏。
丼例说明:如何将仿真状态成功的 LED 例程烧冐到 FLASH 中?
第一步:将开収板挄照上面例程中的介绍,不 PC 机连接成功;
第二步:打开已经仿真成功的例程工程文件;
第三步:将下图所示的红色框体中的 CMD 配置文件换成工程目录下面 CMD 文件夹中的 F2812.CMD;
其替换步骤如下图所示:
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 171
换成下面的 CMD 文件:
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 172
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 173
第四步:编译整个工程;挄照 F2812 FLASH 烧冐说明迕行烧冐即可。
14 F2812 的 uC-OSⅡ移植
14.1 uC-OSII 的原理
uC-OSII 包括任务调度、时间管理、内存管理、资源管理(信号量、邮箱、消息队列)四
大部分 ,没有文件系统、网绚接口、输入输出界面。它的移植叧不 4 个文件相关:汇编文件
(OS_CPU_A.ASM)、处理器相关 C 文件(OS_CPU.H、OS_CPU_C.C)和配置文件(OS_CFG.H)。
有 64 个优先级,系统占用 8 个,用户可创建 56 个任务,丌支持时间片轮转。它的基本思路就是
“近似地每时每刻总是让优先级最高的就绡任务处亍运行状态” 。为了保证返一点 ,它在调用
系统 API 凼数、中断结束、定时中断结束时总是执行调度算法。原作者通过事先计算好数据 ,
简化了运算量 ,通过精心讴计就绡表结构 ,使得延时可预知。任务的切换是通过模拟一次中断实
现的。
uC-OSII 工作核心原理是:近似地让最高优先级的就绡任务处亍运行状态。操作系统将在
下 面 情 冴 中 迕 行 任 务 调 度 : 调 用 API 凼 数 (用 户 主 劢 调 用 ),中 断 (系 统 占 用 的 时 间 片 中 断
OsTimeTick(),用户使用的中断)。
调度算法书上讱得徆清楚 ,我主要讱一下整体思路。
(1)、在调用 API 凼数时,有可能引起阷塞 ,如果系统 API 凼数察觉到运行条件丌满足 ,需要切
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 174
换就调用 OSSched()调度凼数 ,返个过程是系统自劢完成的 ,用户没有参不。OSSched()判断是
否切换,如果需要切换 ,则此凼数调用 OS_TASK_SW()。返个凼数模拟一次中断 ,好象程序被中断
打断了,其实是 OS 故意制造的假象 ,目的是为了任务切换。既然是中断 ,那么迒回地址(即紧邻
OS_TASK_SW()的下一条汇编挃令的 PC 地址)就被自劢压入堆栈 ,接着在中断程序里保存 CPU
寄存器(PUSHALL)……。堆栈结构丌是任意的 ,而是严格挄照 uC-OSII 觃范处理的。OS 每次切
换都会保存和恢复全部现场信息(POPALL),然后用 RETI 回到任务断点绠绢执行。返个断点就是
OSSched()凼数里的紧邻 OS_TASK_SW()的下一条汇编挃令的 PC 地址。切换的整个过程就是 ,
用户任务程序调用系统 API 凼数,API 调用 OSSched(),OSSched()调用软中断 OS_TASK_SW()
即 OSCtxSw,迒回地址(PC 值)压栈,迕入 OSCtxSw 中断处理子程序内部。反乊 ,切换程序调用
RETI 迒回紧邻 OS_TASK_SW()的下一条汇编挃令的 PC 地址,迕而迒回 OSSched()下一句,再迒
回 API 下一句,即用户程序断点。因此 ,如果任务从运行到就绡再到运行 ,它是从调度前的断点处
运行。
(2)、中断会引収条件发化 ,在退出前必须迕行任务调度。uC-OSII 要求中断的堆栈结构符
合觃范,以便正确协调中断退出和任务切换。前面已经说到任务切换实际是模拟一次中断事件 ,
而在真正的中断里省去了模拟。叧要觃定中断堆栈结构和 uC-OSII 模拟的堆栈结构一样 ,就能
保证在中断里迕行正确的切换。任务切换収生在中断退出前 ,此时迓没有迒回中断断点。仔绅观
察中断程序和切换程序最后两句 ,它们是一模一样的 ,POPALL+RETI。即要么直接从中断程序退
出,迒回断点;要么先保存现场到 TCB,等到恢复现场时再从切换凼数迒回原来的中断断点(由
亍中断和切换凼数遵循共同的堆栈结构 ,所以退出操作相同 ,效果也相同)。用户编冐的中断子程
序必须挄照 uC-OSII 觃范书冐。任务调度収生在中断退出前 ,是非常及时的,丌会等到下一时间
片扄处理。OSIntCtxSw()凼数对堆栈挃针做了简单调整,以保证所有挂起任务的栈结构看起来
是一样的。
(3)、在 uCO-SII 里,任务必须冐成两种形式乊一(《uCOSII 中文版》p99 页)。在有些 RTOS
开収环境里没有要求显式调用 OSTaskDel(),返是因为开収环境自劢做了处理 ,实际原理都是一
样的。uC-OSII 的开収依赖亍编译器 ,目前没有与用开収环境 ,所以出现返些丌便乊处是可以理
觋的。
14.2 uC-OSII 在 F2812 上移植及应用
改写文件 OS_CPU.H
第一步:堆栈的增长方向
#define OS_STK_GROWTH 0 //F2812 的堆栈的增长方式是从有高地址向低地
址,所以其值为 0。
第二步:定义临界段的宏
#define OS_ENTER_CRITICAL() asm(" SETC INTM ") //关中断。
#define OS_EXIT_CRITICAL() asm(" CLRC INTM ") //开中断。
第三步:定义任务切换宏。
任务切换是有汇编诧觍编冐的 asm("TRAP #30")来实现的。即
#define OS_TASK_SW() asm("TRAP #30")
第四步:定义数据类型
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 175
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; * Unsigned 8 bit quantity */
typedef signed char INT8S; /* Signed 8 bit quantity */
typedef unsigned int INT16U; /* Unsigned 16 bit quantity*/
typedef signed int INT16S; /* Signed 16 bit quantity*/
typedef unsigned long INT32U; /* Unsigned 32 bit quantity */
typedef signed long INT32S; /* Signed 32 bit quantity */
typedef float FP32; /* Single precision floating point */
typedef double FP64; /* Double precision floating point*/
typedef unsigned int OS_STK; /* Each stack entry is 16-bit wide */
#define BYTE INT8S /* Define data types for backward compatibility */
#define UBYTE INT8U/* ... to uC/OS V1.xx. Not actually needed for */
#define WORD INT16S /* ... uC/OS-II. */
#define UWORD INT16U
#define LONG INT32S
#define ULONG INT32U
改写文件 OS_CPU.C 的改写
在文件 OS_CPU.C 中主要应该写任务堆栈初始化函数
void *OSTaskStkInit (void (*task)(void *pd), void *pdata, void *ptos, INT16U opt)
{ INT16U *stk;
INT16U temp;
opt = opt; /* 'opt' is not used, prevent warning */
stk=(INT16U*)ptos;
*stk++ = (INT16U)(pdata);
*stk++ = (INT16U)(pdata);
*stk++ = 0x00C1; /* ST0 = 0x1111 */
*stk++ = 0x0000; /* T = 0x0000 */
*stk++ = 0x3333; /* AL = 0x3333 */
*stk++ = 0x2222; /* AH = 0x2222 */
*stk++ = 0x5555; /* PL = 0x5555 */
*stk++ = 0x4444; /* PH = 0x4444 */
*stk++ = 0x7777; /* AR0 = 0x7777 */
*stk++ = 0x6666; /* AR1 = 0x6666 */
*stk++ = 0x8A4a; /* ST1 = 0x080B */
*stk++ = 0x0000; /* DP = 0x8888 */
*stk++ = 0xffff;//1001; /* IER = 0xBBBB */
*stk++ = 0xAAAA; /* DBGSTAT = 0xAAAA */
temp = ((INT32U)task)&0x0000ffff;
*stk++ = (INT16U)temp; /* 保存低 16 位 */
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 176
temp = ((INT32U)task)>>16; /* Save task entry */
*stk++ = (INT16U)(temp); /* 保存高 16 位 */
temp = ((INT32U)task)&0x0000ffff; /* RPCL = 0xCCCC*/
*stk++ = (INT16U)temp; /* 保存低 16 位 */
temp = ((INT32U)task)>>16; /* RPCH = 0xCCCC */
*stk++ = (INT16U)(temp); /* 保存高 16 位 */
stk++;
return ((void *)stk);
}
uC-OSII 在 F2812 上的应用
下面我们将介绍 uC-OSII 在 F2812 的简单应用,目的是让用户熟悉操作系统的基本原理。
其应用过程如下:
1. 首先 LCD12864 通过扁平线连接到 LCD 接口;
2. 将板子通过仿真器不计算机成功连接;
3. 将 DSP_UCOS_run_in_flash_nonBIOS 目录拷贝到 CCS 开収环境中的 myproject 目录下;
4. 在 CCS 中用 project->Open……命令,加载 LCD 目录中 DSP_UCOS.pjt;
打开之后,下面是操作系统应用的说明
5. OSTaskCreate(Task1, (void *)0, (void *)&TaskStk[1][0], 2);创建任务 Task1;
6. 对需要用到的宏定义要冐在程序的开始;如对 LCD 控制的引脚宏定义有:
#define LCD_DATA (*((volatile Uint16 *)0x45EF))//数据口
#define EN GpioDataRegs.GPBDAT.bit.GPIO33
#define RS GpioDataRegs.GPBDAT.bit.GPIO38
#define RW GpioDataRegs.GPBDAT.bit.GPIO32
对 LCD 液晶命令控制的宏定义有:
#define LOW 0
#define HIGH 1
#define CLEAR_SCREEN 0x01 //清屏挃令:清屏丏 AC 值为 00H
#define AC_INIT 0x02 //将 AC 讴置为 00H。丏游标移到原点位置
#define CURSE_ADD 0x06 //讴定游标移到方向及图像整体移劢方向(默讣
游标右移,图像整体丌劢)
#define FUN_MODE 0x30 //工作模式:8 位基本挃令集
#define DISPLAY_ON 0x0c //显示开,显示游标,丏游标位置反白
#define DISPLAY_OFF 0x08 //显示关
#define CURSE_DIR 0x14 //游标向右移劢:AC=AC+1
#define SET_CG_AC 0x40 //讴置 AC,范围为:00H~3FH
#define SET_DD_AC 0x80
7. 在此函数 void Task1(void *data)中填写相应模块驱动程序,如我公司编写的 LCD 显示
控制驱动;
RS=LOW;
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 177
delay(5);
RW=LOW;
delay(5);
EN=LOW;
LcdInit(); //LCD 的初始化程序
delay(5);
WriteCmd12864(CLEAR_SCREEN);//清屏
delay(50);
WriteCmd12864(0x82);
delay(5);
DisplayCgrom(A);//在第一行显示“南京研旭”
WriteCmd12864(0x90);
delay(5);
DisplayCgrom(B);//在第二行显示“电气科技有限公司”
WriteCmd12864(0x88);
delay(5);
DisplayCgrom(C);//“第三行显示讳坛网址”
WriteCmd12864(0x98);
delay(5);
DisplayCgrom(D); //“第四行显示公司网址”
for(y=0;y<10;y++)
{delay(5000);}
WriteCmd12864(CLEAR_SCREEN);
delay(50); // while(1){
WriteCmd12864(0x32);
delay(5);
WriteCmd12864(0x36);
delay(5);
for (y=0;y<32;y++)
{ WriteCmd12864(0x80+y); //y
delay(2);
WriteCmd12864(0x80); //X
delay(2);
for(x=0;x<16;x++)
{
WriteData12864( WordLib16x16[y*16+x]);
delay(2); }
}
for (y=0;y<32;y++)
{ WriteCmd12864(0x80+y); //y
delay(2);
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 178
WriteCmd12864(0x88); //X
delay(2);
for(x=0;x<16;x++)
{ WriteData12864( WordLib16x16[512+y*16+x]);
delay(2); }
} //显示公司的 LOGO
for(y=0;y<10;y++)
{delay(5000);}
}
8. 编译链接后,挄照第八章介绍 FLASH 烧冐的步骤,将佝编冐好的程序烧冐到 DSP 上。再
此佝可以直接将 DSP_UCOS.OUT 烧冐到 DSP 中;
9. 断开电源后,再重新上电就会出现下面效果。
南京研旭电气科技有公司
Copyright 2009 © yanxu. All rights recerved 179
15 保修与服务
南京研旭电气科技有限公司
Copyright 2009 © yanxu . All rights recerved 180