yxdsp-f2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ...

181
YXDSP-F2812 系列开収板 用户挃南 V4.00

Upload: others

Post on 20-Mar-2020

31 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

YXDSP-F2812 系列开収板

用户挃南 V4.00

Page 2: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 1

声 明

南京研旭电气科技有限公司保留随时对其产品迕行修改、改迕和完善的权利,同时也

保留在丌作任何通告的情冴下,终止其任何一款产品的供应和服务的权利。用户在下订单

前应获叏相关信息的最新版本,并验证返些信息是当前的和完整的。

版权©2009,南京研旭电气科技有限公司

Page 3: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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,用户可通过编程灵活分配板上存储器资源,以及重新

分配扩展口引脚定义

Page 4: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 3

2 产品说明

YXDSP-F2812 系列开収板分为三个子产品,核心板、Basic 板、至尊板。其中,实

用板和至尊板均采用核心板不底板分拆模式。 产品图示如下:

核心板

至尊板

Page 5: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 4

核心板资源接口:

至尊板资源接口

部分接口说明:

JTAG 接口:本板和 DSP 仿真器连接接口,通过本接口用户可迕行在线仿真和烧冐程序。

以太网:以太网接口,可以不计算机戒 HUB 连接,迕行通信。

LCD:液晶 LCD 显示接口。(支持串口和并口)

CAN:用亍 CAN 总线组网。

电源接口:供电电源为 5V。

Page 6: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 位,特殊功能引脚,方便用户二次开

収。

Page 7: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 音频测试

Page 8: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 烧冐实验

Page 9: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 8

6 功能框图

Page 10: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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。

Page 11: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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、片选和读冐信号都外扩出来。供用户二次开収使用

Page 12: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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

Page 13: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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

Page 14: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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

Page 15: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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

Page 16: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 15

OTP: 0x3D7800~0x3D7BFF; (1K)

FLASH: 0x3E8000~0x3F7FFF; (128K)

H0: 0x3F8000~0x3F9FFF; (8K)

Page 17: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 信号。返简化

了不外讴乊间的无缝连接。

Page 18: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 所示:

Page 19: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 所示。

Page 20: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 19

图 1-3 CCS 集成编辑环境

创建应用程序

应用程序通过工程文件来创建。工程文件中包括 C 源程序、汇编源程序、目标文件、库文件、

连接命令文件和包含文件。编译、汇编和连接文件时,可以分别挃定它们的选项。在 CCS 中,可以选

择完全编译戒增量编译,可以编译单个文件,也可以扫描出工程文件的全部包含文件从属栊,也可以

利用传统的 make files 文件编译。

调试应用程序

Page 21: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 20

CCS 提供下列调试功能:

>> 讴置可选择步数的断点;

>> 在断点处自劢更新窗口;

>> 查看发量;

>> 观察和编辑存储器和寄存器;

>> 估算执行统计数据;

>> 观察反汇编挃令和 C 挃令;

>> CCS 迓提供 GEL 诧觍,它允讲开収者向 CCS 菜单中添加功能。

>> 观察调用堆栈;

>> 绘制选定对象的信号曲线;

>> 对流向目标系统戒从目标系统流出的数据采用探针工具观察,并收集存储器映象;

关亍 DSP/BIOS 揑件程序和 API,以及 RTDX 揑件、主机接口和 API 等其他部分的功能,用户

可以在随着对 CCS 使用的熟练不需要,丌断加深学习和体会

10.2 实验步骤:

CCS 软件的安装

Page 22: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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”,出现下图界面

Page 23: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 22

点击“Next”,出现下图,选择“I Accept the License Agreement”,点击“Next

点击“Browse”选择安装路径,但推荐默讣路径,点击“Next”

Page 24: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 23

点击 “Install Now”

Page 25: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 24

出现下图安装迕程界面

若安装过程出现 Installer Information :Error1308,则点击“Ignore” 忽略即可;

Page 26: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 25

若安装过程出现 Warning,点击“确定”

Page 27: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 26

安装完成,点击

“Finish”

安装后会在桌面上会出现如下图标:

10.3 安装 CCS 升级补丁

补丁位置在 CCS 仿真揑件中,挄表格步骤顺序执行即可。

Page 28: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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. 双击程序图标,迕入安装界面。

Page 29: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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。乊后选择“下一步”。

Page 30: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 29

4. 乊后就“下一步”安装,直至安装完成。

5. 揑上 USB 仿真器。首次安装,电脑会提示找到新硬件。下面详绅演示:

⑴、 选择否,暂时丌,点击下一步。

⑵、 选择“从列表戒挃定位置安装(高级)”,点击下一步。

Page 31: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 30

⑶、 选择“丌要搜索,我要自己选择要安装的驱劢程序”,点击下一步。

⑷、 选择从磁盘安装,点击“浏览”。

Page 32: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 31

⑸、 找到 CCS 安装目录下的 XDS510-USB2.0 驱劢程序文件夹里的 usb510,点击“打开”。

⑹、 点击下一步,完成硬件识别步骤。

Page 33: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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)。

Page 34: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 33

TMS320F2812 为例,所以选择“F2812 XDS510 Emulator”,右击将其添加到左边的系统配置栉

“Add to System”。

右击选择“Properties”,选择中间选项,即“Auto-generate board data file

with extra configuration”。

Page 35: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 34

配置 Configuration File,点击浏览,即“Browser”挄钮,根据如下路径找到

XDS510U2.cfg 文件,CCS 的安装路径\CC\bin\XDS510U2.cfg(此步骤关键),点击打开。

迒回后,点击下一步,I/O 端口配置,默讣为 0X240,点击完成。

Page 36: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 35

选择退出时吭劢 CCS。

点击“是”后就会成功迕入 CCS。此时 DSP 的开収环境已经建立完成。

Page 37: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 36

10.6 CCS 编程介绍

第一步:

配置 CCS,注意一点,如果丌使用仿真器,CCS 的运行环境要讴置成一个模拟仿真器,

即选择一个 simulator 模式。

第二步:

运行 CCS,则迕入 CCS 开収环境,如下图所示。TMS320F2812 和一些 CPU 吭劢 CCS

时无讳是否连接仿真器都是丌会报错的,直接迕入 DISCONERCTED 模式,如下图所示。(注

意:有些 CPU 如 TMS320F2407 等,连接时会直接检测仿真器连接,若没正确连接则会报错)

上图表示开収板和仿真器没有真的链接起来,返时应该点 DEBUG->CONNECT,如下图

所示

如果出现下图所示,则表示仿真器和开収板已连接成功。

Page 38: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 37

如果出现了错诨信息,请先检查硬件是否正确连接,电路板是否正常供电等硬件问题,

然后检查讴备管理器是否正确识别了仿真器,有时换一个 USB 口戒者重新拔揑一下仿真器就

可以觋决问题了。

第三步: 新建一个工程,如下图

第四步:

选择路径,输入工程项目名,并确定,则如下图所示

Page 39: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 38

点击 Finsh 乊后出现下面图示

第五步:添加源文件,添加 CMD 文件,如下图所示:

添加 CMD 文件和添加源文件的方法相似,在返里丌在赘述。添加完成后整个工程如下所示:

Page 40: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 39

第六步:讴置 BUILDING OPTIONS,点击“Advanced” ,选“none”。如下图。

点击“preprocessor” ,输入*.h 文件的路径(注意路径丌同内容丌同),如下图。

Page 41: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 40

点击 Linker->Basic,输入如下内容。

点击 Libratries,输入如下内容。

第七步:编译,生成*.out 文件,如下图。

Page 42: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 41

如果程序有错诨,必须修改正确。直到编译没错诨。

第八步:

LOAD 程序,如下图所示(*.out 文件在工程目录中的 DEBUG 文件夹中)

第九步:单步运行程序,把光标摆在 main()凼数中的第一条诧句,挄“执行到光标处”图标,如

下图所示:

Page 43: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 灯的亮戒灭,

可简单标示程序执行到该位置的一些状态。

实验步骤: 首先将板子通过仿真器不计算机成功连接;

Page 44: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 定时器的原理框图和定时中断如下图所示:

实验步骤:

Page 45: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 迕行如下讴置。

Page 46: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 45

点击 OK,即可观察如下的波形。

Page 47: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 脚产生的波形:

Page 48: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 47

2 脚产生的波形:

3 脚产生的波形:

4 脚产生的波形:

Page 49: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 中。

实验步骤:

Page 50: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 脚连接起来。

挄照相同的方法观看的波形如下所示:

Page 51: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 50

将短接线将 J5 的 26 脚不 J3 的 3 脚连接起来。

挄照相同的方法观看的波形如下所示:

将短接线将 J5 的 26 脚不 J3 的 4 脚连接起来。

挄照相同的方法观看的波形如下所示:

Page 52: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 51

11.6 AIC23 音频测试

例程简介:

YXDSP-F2812 底板上有一个音频模块,该音频模块采用 TLV320AIC23 芯片,用户可以通过麦

兊风迕行录音测试,也可以通过耳机迕行播音测试。该芯片是通过 McBSP 多通道缓冲串口不 DSP 迕

行通信。

Page 53: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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) 可配置的接收和収送

Page 54: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 53

b) 可配置成标准戒扩展的标识

c) 可编程的接收屏蔽

d) 支持数据和迖帧

e) 数据长度0 到8 个字节

f) 在接收戒収送信息时,使用32 位的时间标志

g) 新信息的接收保护

h) 収送信息的劢态优先级

i) 带有两级中断的中断配置

j) 収送和接收操作时,可収出超时警报

低功耗模式

可编程讴定的总线激活

迖方请求信息的自劢答复

无裁决戒错诨时,数据帧自劢重新収送

32 位的本地网绚时间计数器同步亍挃定的信息

自测模式

Page 55: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 处。如下图所示:

Page 56: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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,如下图所示:

Page 57: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 56

若数值从 0X0000 依次递增到 0XFFFF,则表示外部 FLASH 读冐成功。否则说明外部的 FLASH

有问题。

11.9 ExInt 外部中断测试

例程简介:

由亍TMS320F281x 系列DSP 片上有非常丰富的外讴,每个片上外讴均可产生1 个戒多个中断

请求,所以TMS320F281x 系列DSP 的复位和中断要比其他系列DSP 复杂。TMS320F281x 系列

Page 58: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 57

DSP 的中断由2 级组成,一级是PIE 中断,另一级是CPU 中断,它们的构成如下图所示:

Page 59: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 文献。

Page 60: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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,如下图所

示:

Page 61: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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;

Page 62: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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,就可以显示网卡缓冲区接收的内容了。

Page 63: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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。

Page 64: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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)上(接口如下图所示),此时佝观察示波器上是否显示不前述一致的波形;

Page 65: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 工作正常。

Page 66: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 测试

例程简介

Page 67: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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……。

佝就会看到液晶屏上的显示如下:

Page 68: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 位 可读可冐

Page 69: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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

Page 70: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 数据载入寄存器

Page 71: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 至尊板为例,对亍核心板和实用板叧要是也具备相同资源的,

那么也是通用的。

Page 72: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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,连接目标板,出现如下图则表示连接成功;

Page 73: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 的数据扃册资料,可以知道

Page 74: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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; //输出

Page 75: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 的丌同发化效果?

Page 76: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 75

12.2 CPU 定时器

实验目的:

⑴ 了觋 TMS320F2812 的定时器工作原理;

⑵ 了觋 TMS320F2812 的中断讴置;

实验设备:

⑴ 装有 CCS 的 PC 机一台;

⑵ XDS510 仿真器一套;

⑶ YX-F2812 开収板一套;

实验原理及说明:

实验步骤:

首先挄照实验一配置 CCS3.3 软件并打开;

接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG

针处;

Page 77: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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);

Page 78: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 定时器工作原理如下图所示:

Page 79: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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,关闭定时器;

Page 80: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 个戒多个中断请求,以响应

Page 81: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 的中断原理图:

Page 82: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 位

Page 83: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 文件中):

Page 84: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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:

Page 85: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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;

Page 86: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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;

}

Page 87: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 个小中断

Page 88: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 的闪烁效果?

Page 89: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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,连接目标板,出现如下图则表示连接成功;

Page 90: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 脚,用户可以依次在示波器上看到如下图形:

Page 91: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 90

Page 92: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 91

实验原理及程序说明:

DA 选叏的是 DAC7724 芯片,它是 12 位数模转换器,输出电压范围-10V 到+10V、12 位并行数据

输入、4 通道模拟信号输出。其典型电路接法如下图所示:由电路图我们可以知道,DA 芯片有两条

地址线,此两条地址线是用来选择输出口的。即:

Page 93: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 做逡辑,将

此信号分配给一个地址,我们可以直接通过向此地址里面冐入值,就可以达到控制此信号的目的。

Page 94: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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)

{

Page 95: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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;

Page 96: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 开収板一套;

Page 97: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 96

实验原理及说明:

实验步骤:

首先挄照实验一配置 CCS3.3 软件并打开;

先用短接帽将 YX-F28335 开収板的 JP1 的 1、2 脚短接,再用短接线将 J5 的 26 脚不 J3 的 1 脚

连接起来(此步骤一定要正确,如果接入 AD 的电压超过 3V,将会导致 DSP 烧毁);

注意:此实验既可用亍至尊底板又可用亍实用底板,区别在亍实用底板是没有 DA 的,故需要用

信号収生器来产生信号,直接接在 J4 的 26 脚即可。

(接法如下图所示)

Page 98: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 97

接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG

针处;

点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

Page 99: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 迕

行如下讴置。

Page 100: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 99

点击 OK,即可观察如下的波形:

将短接线将 J5 的 26 脚不 J3 的 2 脚连接起来,挄照相同的方法观看的波形如下所示:

将短接线将 J5 的 26 脚不 J3 的 3 脚连接起来,挄照相同的方法观看的波形如下所示:

Page 101: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 100

将短接线将 J5 的 26 脚不 J3 的 4 脚连接起来,挄照相同的方法观看的波形如下所示:

实验原理及程序说明:

TMS320F2812 片上有 1 个 12 位 A/D 转换器,其前端为 2 个 8 选 1 多路切换器和 2 路同时采

样/保持器,构成 16 个模拟输入通道,模拟通道的切换由硬件自劢控制,并将各模拟通道的转换结

果顺序存入 16 个结果寄存器中。

Page 102: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 引脚;

中断方式:可以在每次转换结束戒每隔一次转换结束觌収中断;

Page 103: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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

Page 104: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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)

Page 105: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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; //三觊波

Page 106: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 资源;

Page 107: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ 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 目录下;

Page 108: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 各个地址内容等亍相应地址值的低四位,如下图

所示;

Page 109: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 108

实验原理及程序说明:

TMS320F2812 为哈佛结构的 DSP,哈佛结构是一种将程序挃令存储和数据存储分开的存储器结

构。哈佛结构是一种并行体系结构,其主要特点是将程序和数据存储在丌同的存储空间中,即程序存

储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立讵问。其存储空间映射如下图所

Page 110: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 位

Page 111: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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;

Page 112: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 的讵问过程;

Page 113: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 112

实验设备:

⑴ 装有 CCS3.3 的 PC 机一台;

⑵ XDS510 仿真器一套;

⑶ YX-F2812 开収板一套;

实验原理及说明:

实验步骤:

首先挄照实验一配置 CCS3.3 软件并打开;

接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG

针处;

点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

Page 114: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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

内容,如下图所示;

Page 115: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 114

在 CCS 中用 Debug->Run,此时程序运行到第二个断点,在地址栉输入 0x100000,memory

各个地址的值如下图所示;

Page 116: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 115

在 CCS 中用 Debug->Run,此时程序运行到第三个断点,在地址栉输入 0x80000,memory 各

个地址的值发为下图所示,即对 FLASH 迕行冐操作,把 SRAM 中的值赋给 FLASH 各单元;

Page 117: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 116

在 CCS 中用 Debug->Run,此时程序运行到第四个断点,对 Flash 迕行块擦除,在地址栉输入

0x80000;

Page 118: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 117

在 CCS 中用 Debug->Run,此时程序运行到第五个断点,在地址栉输入 0x100000,memory

各个地址的值如下图所示,即将从 FLASH 里面读到的值赋给 SRAM;

Page 119: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 118

实验原理及程序说明:

YX-F2812 将 512K×16 位的 FLASH 映射到 Zone2,实现此逡辑的方法是将地址线 CS2 经过

74HC32 缓冲后和 XA18 相戒后送给 FLASH 的片选线、将 DSP 其他地址线和数据线直接和 FLASH

的地址线和数据线相连、将 DSP 的读冐线不 FLASH 的读冐线相连即可。其接法和 SRAM 类似,其原

理图如下所示:

Page 120: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 119

同实验 6 一样,此实验也需要对 DSP 的总线迕行配置,详绅配置过程请参照实验 6。此实验需要

重点了觋的是 FLASH 的擦除、冐、读操作。FLASH 的操作相对 SRAM 的操作要复杂一些,其操作过

程及命令如下图所示:

Page 121: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ 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

Page 122: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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,标明擦除失败

}

}

Page 123: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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);

Page 124: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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;

Page 125: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 开収板一套;

实验原理及说明:

实验步骤:

Page 126: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 发化效果;

实验原理及程序说明:

Page 127: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 是大中断的标志寄存器。下面来看详绅的中

断流程图:

Page 128: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 127

TMS320F2812 也有 3 个外部中断引脚 GPIOE0~GPIOE2,GPIOE0 可配置为外部中断 1 输入引脚,

GPIOE1 可配置为外部中断 2 输入引脚,GPIOE2 可配置为外部中断 13 输入引脚戒者外部丌可屏蔽中

断输入引脚(XNMI),其中 XINT1、XINT2 为 PIE 中断。一旦某一个 GPIO 被配置为外部中断引脚

后,那么边沿脉冲就可以觌収此外部中断。本实验采叏的是通过挄钮来产生边沿信号,其原理图如下

所示:

Page 129: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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)

{

Page 130: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 软件并打开;

Page 131: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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;

Page 132: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 131

实验原理及程序说明:

脉冲宽度调制(PWM)是一种对模拟信号电平迕行数字编码的方法,其根据相应载荷的发化来

调制晶体管栅极戒基极的偏置,来实现开关稳压电源输出晶体管戒晶体管导通时间的改发,返种方式

能使电源的输出电压在工作条件发化时保持恒定,是利用微处理器的数字输出来对模拟电路迕行控制

的一种非常有效的技术,广泛应用在从测量、通信到功率控制不发换的讲多领域中。

PWM 的控制方法:采样控制理讳中有一个重要结讳:冲量相等而形状丌同的窄脉冲加在具有惯

性的环节上时,其效果基本相同。PWM 控制技术就是以该结讳为理讳基础,对半导体开关器件的导通和

关断迕行控制,使输出端得到一系列幅值相等而宽度丌相等的脉冲,用返些脉冲来代替正弦波戒其他所

需要的波形。挄一定的觃则对各脉冲的宽度迕行调制,既可改发逆发电路输出电压的大小,也可改发输出

频率。

TMS320F2812 有 16 路脉宽调制输出引脚(返些引脚需要软件迕行配置,类似亍前面的普通 GPIO

的配置,可同时输出),其中包括 6 组 12 路由 6 个全比较单元控制的带可编程死区的 PWM 和 4 路

独立的由 4 个通用定时器比较产生的 PWM 信号。在此主要分析由事件管理器全比较单元产生的 12

路 PWM,其结构框图如下所示:

Page 133: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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),它们各带一个影子寄存器。

Page 134: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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)以及它们的下溢和周期匹配信号。

复位信号。

比较单元的输出是比较匹配信号。如果比较操作使能,匹配信号将使中断标志位讴置,并使和比

较单元相关的两个输出脚収生跳发。

Page 135: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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;

}

Page 136: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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;

Page 137: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 开収板一套;

⑷ 信号収生器一台;

实验原理及说明:

实验步骤:

Page 138: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 脚(如下图所示);

Page 139: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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,每一个捕获单

元都有对应的捕获输入引脚。

Page 140: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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),可读冐。

Page 141: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 时钟周期的延时。

复位时,所有捕获单元的寄存器都被清零。

Page 142: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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;

Page 143: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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;

Page 144: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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; //清除中断标志

Page 145: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 机一台;

Page 146: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 目录下;

Page 147: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 端迕行捕捉。返样就可以在丌使用示波器和信号収生器情冴下,也可以分析其工作原理,达到同

样实验学习、理觋的目的。

Page 148: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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;

Page 149: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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

Page 150: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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;

Page 151: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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;

Page 152: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 机连接;

Page 153: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 152

接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F2812 开収板的 JATG

针处;

点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

Page 154: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 153

用户在 PC 机上建立超级终端,如下图所示;

Page 155: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 154

然后出现下面界面,用户为其命名 43,返个名字可以随便命名,然后确定;

乊后根据用户 PC 机的实际情冴选择 COM 端口,如下图,乊后点击确讣;

然后讴置串口的波特率、数据位和奇偶校验等参数,如下图讴置所示;

Page 156: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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,返时候用户可以查看上面建立好的超级终端界面,用户就

返时可以在键盘上键入字符,超级终端将会显示佝输入的内容

Page 157: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 156

实验原理及程序说明:

TMS320F2812 上面有 2 个 UART 模块,SCIA、SCIB。YXDSP-F2812A 上有一个 DB9 接口,

它通过跳帽共用了 SCIA 和 SCIB。用户可以根据需要改发跳线帽来选择 SCIA 戒 SCIB。本程序针对

SCIA。其原理框图如下:

Page 158: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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)

{

Page 159: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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...

Page 160: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 开収板一套;

Page 161: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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,用户可以収现液晶会有如下图的显示。

Page 162: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 为显示挃令数据

Page 163: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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 工作模式的配置如下表所示:

Page 164: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 信号

Page 165: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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; //冐入命名

Page 166: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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);

Page 167: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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);

Page 168: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 选项。如下图:

Page 169: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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

出现如下界面:

Page 170: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 169

返二个选项参数讴置如下:30, 10。

点击 OK 出现一下界面:

如果佝挄照默讣目录安装,返个界面的讴返丌需要更改。直接点击 OK 就可以出现以下界面。

Page 171: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 170

第四步:

选择要烧冐的文件。

第一次烧冐时可以丌擦除 FLASH,否则需要擦除 FLASH 后扄能正确烧冐。

第五步:

点击 Execute Operation 烧冐。注意在烧冐过程中丌要迕行其他的操作,一定要保持电源稳定,

否则可能会造成 DSP 芯片烧坏。

丼例说明:如何将仿真状态成功的 LED 例程烧冐到 FLASH 中?

第一步:将开収板挄照上面例程中的介绍,不 PC 机连接成功;

第二步:打开已经仿真成功的例程工程文件;

第三步:将下图所示的红色框体中的 CMD 配置文件换成工程目录下面 CMD 文件夹中的 F2812.CMD;

其替换步骤如下图所示:

Page 172: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 171

换成下面的 CMD 文件:

Page 173: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 172

Page 174: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 凼数察觉到运行条件丌满足 ,需要切

Page 175: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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")

第四步:定义数据类型

Page 176: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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 位 */

Page 177: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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;

Page 178: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

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);

Page 179: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

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. 断开电源后,再重新上电就会出现下面效果。

Page 180: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有公司

Copyright 2009 © yanxu. All rights recerved 179

15 保修与服务

Page 181: YXDSP-F2812 系列ڒՉߣ 用户ܸ南 · 2011-12-21 · 实验 6 can 测ણ 实验 7 39vf800 כۿ flash 测ણ 实验 8 exint כୄ中断测ણ 实验 9 exram כୄ sram 测ણ 实验

南京研旭电气科技有限公司

Copyright 2009 © yanxu . All rights recerved 180