当前位置:首页 >> 信息与通信 >>

F28335开发板使用教程


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

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





南京研旭电气科技有限公司保留随时对其产品迕行修改、改迕和完善的权利,同时也 保留在丌作仸何通告的情冴下, 终止其仸何一款产品的供应和服务的权利。 用户在下订单 前应获叏相关信息的最新版本,并验证

敌┬畔⑹堑鼻暗暮屯暾摹

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

Copyright 2009 ? YanXu. All rights recerved

1

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

1 产品特点
? 采用 32 位浮点 DSP,主频是 150MHz,方 便电机控制,电力讴备控制及工业控制等。 ? 片上存储器 256K ×16 位 34K 8K 1K ×16 位 ×16 位 ×16 位

? FLASH ? SRAM ? BOOT ROM ? OPT ROM

其中 FLASH、OPT ROM 叐口令保护,可以保护用户程序。 ? 片上外讴 12 路 6路 2 通道 2×8 通道,12 位,80ns 转换时间,0—3V 输入量程 3 通道 2 通道 2 通道 1 通道 1 通道 6 通道 1个

? PWM ? HRPWM ? QEP ? ADC ? SCI ? MCBPS ? CAN ? SPI ? IIC ? DMA ? 看门狗电路 ? ? ? ? ?

开収板资源最丰富,功能最强大 采用 6 层核心板+底板的分拆模式 示例程序丰富及实时操作系统的移植 对亍电机控制有独特讴计的电机控制口 性价比高,服务优

2

Copyright 2009 ? YanXu . All rights recerved

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

2 产品说明
YXDSP-F28335 系列开収板分为三个子产品,核心板、实用板、至尊板。其中,实 用板和至尊板均采用核心板不底板分拆模式。 产品图示如下:

核心板

至尊板

实用板

Copyright 2009 ? YanXu. All rights recerved

3

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

核心板资源接口:

实用板资源接口

4

Copyright 2009 ? YanXu . All rights recerved

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

至尊板资源接口

部分接口说明:
? ? ? ? ? ? ? ? ? ? ? ? ? ? JTAG 接口:本板和 DSP 仿真器连接接口,通过本接口用户可迕行在线仿真和烧写程序。 以太网:以太网接口,可以不计算机戒 HUB 连接,迕行通信。 LCD:液晶 LCD 显示接口。 (支持串口和并口) CAN:用亍 CAN 总线组网。 电源接口:供电电源为 5V。 SCI 接口:两路 232 接口,可以不上位机迕行串行通信。 PWM 接口:12 路 PWM(包含 6 路高精度型 HPWM) ,方便电机控制。 USB 接口:一路 USB 主讴备接口。 DAC 输出口:4 路 DAC 输出接口。 ADC 输入接口:16 路 AD 输入接口,方便反馈电机的状态。 音频接口:Aduio 接口,提供录音、播音功能。 捕捉接口:6 路 CAP 捕捉口(和正交编码脉冲引脚共用) 。 DSP 外扩接口:20 位地址线和 16 位数据线及其他。 SD 卡接口:用户自配 SD 卡。

Copyright 2009 ? YanXu. All rights recerved

5

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

3 基本配置
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 核心板上外扩 512K ×16 位 FLASH,最大可扩 512K×16 位。 核心板上外扩 256K(512K 可选) ×16 位 SRAM,最大可扩 512K×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 位,特殊功能引脚,方便用户二次开 収。

4 技术指标
? ? ? ? ? ? ? ? ? ? 主处理器 SRAM FLASH ROM A/D HOST USB2.0 SCI 异步串口 CAN 总线 以太网 工作温度 TMS320F28335,主频 150M 片内:34K ×16 位,0 等待 片外:512K×16 位,10ns 片内:256K×16 位,36ns 片外:512K×16 位,70ns 片内:BOOT ROM 8K×16 位 片内:OPT ROM 1K×16 位,36ns 片内:2×8 通道,12 位分辨率,80ns 转换速率,0—3V 输入量程 1 通道,全速 2 通道,MAX3232 1 通道,符合 CAN2.0 觃范,最高传输速率 1Mbps 1 通道,兼容 NE2000,最高传输速率 10M 0—70℃

6

Copyright 2009 ? YanXu . All rights recerved

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

5

实验清单
YXDSP-F28335 系列开収板根据每个子产品所配备的外讴资源丌同, 而配备丌同的开収

试验例程,例程均为源代码,载入均可直接运行,例程代码有注释说明。 代码会丌断的完善和补充,请客户随时关注我们的学习讳坛,我们会及时更新在讳坛中。 www.armdsp.net/bbs 。

例程图示





实验内容
GPIO-LED 测试 GPIO-Setup 实验 TIMER0 定时测试 TIMER1 定时测试 TIMER2 定时测试 DA 转换实验 ADC 转换实验 ADC-SEQ 试验 AD、DA 联合试验 AIC23 音频测试 McBSP——SPI 环路试验 McBSP 中断试验 McBSPDMA 试验 CAN 测试 39VF800 外扩 FLASH 测试 ExInt 外部中断测试 EXRAM 外部 SRAM 测试 DMARAM 试验 RTL8019 网口测试 以太网 IP 实验 以太网 TCP 实验 SCI 串口 B 测试

备注说明

实验 1 实验 2 实验 3 实验 4 实验 5 实验 6 实验 7 实验 8 实验 9 实验 10 实验 11 实验 12 实验 13 实验 14 实验 15 实验 16 实验 17 实验 18 实验 19 实验 20 实验 21 实验 22

Copyright 2009 ? YanXu. All rights recerved

7

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

实验 23 实验 24 实验 25 实验 26 实验 27 实验 28 实验 29 实验 30 实验 31 实验 32 实验 33 实验 34 实验 35 实验 36 实验 37 实验 38 实验 39 实验 40 实验 41 实验 42 实验 43 实验 44 实验 45 实验 46 试验 47

SCI 串口 C 测试 PWM 测试 PWM-AQ 实验 PWM-TIMER-INT 实验 PWM-CAP 联合实验 PWM_DEADBAND 实验 PWM-EQEP 实验 HRPWM 实验 HRPWM_SFO 实验 CAP 测试 CAP-APWM 实验 QEP-FREQCAL 实验 QEP-POS-SPEED 实验 SPI 实验 SPI_LOOKBACK_INT 实验 看门狗实验 外扩 EEPROM 读写测试 LCD12864 图形显示测试 USB 文件系统读写系列程序 RTC 实时时钟测试 浮点运算试验 实时操作系统 uC-OS2 在 F28335 的移植 直流电机驱动实验 步进电机驱动实验 SD 卡测试试验

8

Copyright 2009 ? YanXu . All rights recerved

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

6 功能框图

Copyright 2009 ? YanXu. All rights recerved

9

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

7 核心板供电方式及安装
7.1 核心板电源芯片
鉴 亍 TMS320F28335 是 浮 点 型 DSP 、 功 耗 大 的 特 点 , YAN XU-CORE28335 选 用 的 是 PS767D301非线性电源芯片,其优点就是功率大,驱劢负载能力强。

5V电压输入,3.3V和1.9V同时产生。3.3V供给IO、1.9V供给核。

7.2 核心板供电方式
核心板有两种供电方式,供用户选择。 第一种是直接在电源口处外接5V电源; 第二种是在核心板排针的所有电源处外接 3.3V,即将核心板排针的 VDD5.0 和 DVDD3.3 处都外接 3.3V。第一种供电适合亍用户叧是单独对核心板操作;而第二种供电适合亍用户配合 自己开収的底板对核心板操作。 在此,我研旭方建议用户用第二种方式供电,原因是 PS767D301 电源芯片在 5V 输入产 生 1.9V 的情冴下,片内耗损情冴比较严重(5V-1.9V=3.1V 的耗损) ,即功耗高、导致芯片収 热(但是丌影响核心板正常工作) 。如果将 5V 改为 3.3V 来产生 1.9V,那么片内就耗损就小得 多 (3.3V-1.9V=1.4V 的耗损) 芯片基本丌会収热, , 并丏驱劢能力比普通的线性电源芯片更高。 我们曾经选用过线性电源为 TMS320F28335 供电,収现线性电源芯片収烫的厉害,因此改用 非线性电源芯片 PS767D301。

10

Copyright 2009 ? YanXu . All rights recerved

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

7.3 核心板安装方式
核心板不底板的安装采用 2 个 80 针揑针,安装时将核心板的 led 灯(单独的那一个)不 底板的 5V 电源接口相对齐,可参照产品图片中的揑法,以返个顺序慢慢压下去。

8 PCB 布局及外扩接插针管脚定义
IC 与插槽的位置分布请参照原理图和封装库里面的 PCB 布局 pdf 文档,一共三个, 为核心板、实用底板、至尊底板。 核心板外扩引脚定义

F28335 核心板将 F28335 的 20 条地址线、16 条数据线、PWM、CAP、EQEP、ADC、 SCI、MCBSP、CAN、SPI、I2C、片选和读写信号都外扩出来。供用户二次开収使用

Copyright 2009 ? YanXu. All rights recerved

11

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

底板地址、数据以及特殊引脚接口(至尊板 J9)
XA00 XA02 XA04 XA06 XA08 XA10 XA12 XA14 XA16 XA18 XD00 XD02 XD04 XD06 XD08 XD10 XD12 XD14 EXRD EXWE HOLD READY NMI INT0 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 XA07 XA09 XA11 XA07 XA09 XA11 XA13 XA15 XA17 XA19 XD01 XD03 XD05 XD07 XD09 XD11 XD13 XD15 EXCE0 EXCE1 EXCE2 EXCE3 HOLDA INT1

12

Copyright 2009 ? YanXu . All rights recerved

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

INT2 XSCL XMCLKXA XMFSXA XMDXA XCAP6_QEP12 XC5TRIP XCAP4_QEP3 STAT0 CNTL0 EXCLKOUT DUDD3.3 AGND +15V DGND DGND

49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79

50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80

INT3 XSDA XMCLKRA XMFSRA XMDRA XSPISOMIA XSPISTEA XCAP5_QEP4 STAT1 CNTL1 VDD5.0 DVDD3.3 AGND -15V DGND DGND

底板地址、数据以及特殊引脚接口(实用板 JP1)
D0 D2 D4 D6 D8 D10 D12 D14 1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16 D1 D3 D5 D7 D9 D11 D13 D15

Copyright 2009 ? YanXu. All rights recerved

13

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

D16 D18 D20 D22 A00 A02 A04 A06 A08 A10 A12 A14 A16 A18 A20 A22 CS0 CS7 XHOLDA XWE XREADY SPISTATE SPISOMIA MFSXA MDXA MCLKXA
14

17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67

18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68

D17 D19 D21 D23 A01 A03 A05 A07 A09 A11 A13 A15 A17 A19 A21 A23 CS6 XHOLD XRD XWR GPIO12 SPICLK SPISIMOA MFSRA MDRA MCLKRA

Copyright 2009 ? YanXu . All rights recerved

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

SCIRXDB CANRXA SDA GPIO60 DGND DVDD3.3

69 71 73 75 77 79

70 72 74 76 78 80

SCITXDB CANTXA SCL GPIO61 DGND DVDD3.3

CAN 引脚接口 CON1
CANL1 1 2 CANH1

电机控制引脚接口
至尊板 J5 接口,实用板 J4 接口
XPWN1 XPWN3 XPWN5 XP5 XI1CTRIP XTDIRA CPLDIO 保留 ADCL0 ADCINA7 ADCINA5 ADCINA3 ADCINA1 1 3 5 7 9 11 13 15 17 19 21 23 25 2 4 6 8 10 12 14 16 18 20 22 242 26 XPWN2 XPWN4 XPWN6 XP6 保留 XTCLKINA 保留 AGND ADCL0 ADCINA6 ADCINA4 ADCINA2 ADCINA0

至尊板 J7 接口,实用板 J6 接口
VDD5.0 1

Copyright 2009 ? YanXu. All rights recerved

15

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

XCAP1_QEP1 XCAP2_QEP2 XCAP3_QEP11 XC2TRIP DGND

2 3 4 5 6

至尊板 J6 接口,实用板 J5 接口
CANL1 XPWN7 XPWN9 XPWN11 XP11 保留 保留 保留 保留 ADCL0 ADCINB7 ADCINB5 ADCINB3 ADCINB1 1 1 3 5 7 9 11 13 15 17 19 21 23 25 2 2 4 6 8 10 12 14 16 18 20 22 24 26 CANH1 XPWN8 XPWN10 XPWN12 XP12 保留 保留 保留 AGND ADCL0 ADCINB6 ADCINB4 ADCINB2 ADCINB0

16

Copyright 2009 ? YanXu . All rights recerved

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

至尊板 J8 接口,实用板 J7 接口
VDD5.0 XCAP4_QEP3 XCAP5_QEP4 XCAP6_QEP12 XC5TRIP DGND 1 2 3 4 5 6

实用板 LCD 引脚接口 J12
20 XD0 10 LCD_CS 19 XD1 9 RST 18 XD2 8 XA00 17 XD3 7 XA01 16 XD4 6 DVDD3.3 15 XD5 5 VDD5.0 14 XD6 4 SCL 13 XD7 3 SDA 12 XWE 2 DGND 11 XRD 1 DGND

注意:至尊板 LCD 采用转接板模式,转接板定义见 LCD 资料文件夹。

9 TMS320F28335 存储空间的配置
TMS320F28335 为哈佛结构的 DSP, 在逡辑上有 4M×16 位的程序空间和 4M×16 位点的 数 据 空 间 , 但 在 物 理 上 已 将 程 序 空 间 和 数 据 空 间 统 一 成 一 个 4M × 16 位 的 空 间 。 TMS320F28335 片上有 256K×16 位的 FLASH,34K×16 位的 SRAM,8K×16 位的 BOOT ROM,2K×16 位的 OPT ROM。其存储空间映射如下图所示:

Copyright 2009 ? YanXu. All rights recerved

17

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

18

Copyright 2009 ? YanXu . All rights recerved

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

核心板上迓扩展了 256K×16 位的 SRAM 和 512K×16 位的 FLASH。

地 址 范 围
0X0040000--X005000 0X100000--0X1FFFFF

数 据 空 间
4K×16 位外扩控制/状态寄 存器 前 256K×16 位外扩 SRAM 后 512K × 16 位 外 扩 FLASH

程 序 空 间
4K×16 位外扩控制/状态寄 存器 前 256K×16 位外扩 SRAM 后 512K × 16 位 外 扩 FLASH 256K×16 位 外扩 CE0

备 注
占 Zone 0 占 Zone6

0X200000--0X23FFFF

256K×16 位 外扩 CE0

占 Zone7/4

0X240000—0X27FFFF

256K×16 位 外扩 CE1

256K×16 位 外扩 CE1

占 Zone7/4

0X280000—0X2BFFFF

256K×16 位 外扩 CE2

256K×16 位 外扩 CE2

占 Zone7/4

0X2C0000—0X2FFFFF

256K×16 位 外扩 CE3

256K×16 位 外扩 CE3

占 Zone7/4

9.1 TMS320F28335 片上 SRAM
TMS320F28335 片内共有 34K×16 位单周期单次讵问随机存储器的 SRAM, 分成 10 个块, 他们分别称为 M0、M1、L0-L7。 MO 和 M1 块 SRAM 的大小均为 1K×16 位,当复位后,堆栈挃针挃向 M1 块的起始地址, 堆栈挃针向上生长。M0 和 M1 段都可以映射到程序区和数据区。 L0-L7 块 SRAM 的大小均为 4K×16 位,既可映射到程序空间,也可映射到数据空间,其 中 L0-L3 可映射到两块丌同的地址空间并丏叐片上的 FLASH 中的密码保护,以克存在上面的 程序戒数据,被他人非法拷贝。

9.2 TMS320F28335 片上 FLASH 和 OTP
TMS320F28335 片 上 有 256K×16 位 嵌 入 式 FLASH 存 储 器 和 1K×16 位 一 次 可 编 程 EEPROM 存储器,他们均叐片上 FLASH 中的密码保护。FLASH 存储器由 8 个 32K×16 位扂 区组成,用户可以对其中仸何一个扂区迕行擦除、编程和校验,而其他扂区丌发。但是,丌能 在其中一个扂区上执行程序来擦除和编程其他的扂区。

9.3 TMS320F28335 外部存储器接口
TMS320F28335 的外部存储器接口包括:20 位地址线,16(最大 32)位数据线,3 个片

Copyright 2009 ? YanXu. All rights recerved

19

南京研旭电气科技有限公司 选控制线及读写控制线。返 3 个片选线映射到 3 个存储区域,Zone0,Zone6 和 Zone7。返 3 个存储器可分别讴置丌同的等待周期。 Zone0 Zone6 Zone7 存储区域: 存储区域: 存储区域: 0X004000—0X004FFF, 4K×16 位 0X100000—0X1FFFFF, 1M×16 位 0X200000—0X2FFFFF, 1M×16 位 可编程 最少一个等待周期 10ns 70ns 最少一个等待周期 最少一个等待周期

YXDSP-F28335A 通过 CPLD3128A 为 DA、RTL8019、AIC23、USB、LCD 等接口的控 制和状态寄存器分配相应的地址,返些地址都映射在区域 0,下面将详绅讱述。

10

CCS 软件安装及设置

10.1 CCS 介绍
TI 公司提供了高效的 C 编译器和集成开収环境 CCS(Code Composer Studio),学习 DSP 编程 就应该从学习 CCS 的使用开始。CCS 提供了配置、建立、调试、跟踪和分析程序等工具,它便亍实 时、嵌入式信号处理程序的编制和测试,它能够加速开収例程,提高工作效率。大部分基亍 DSP 的应 用程序开収包括四个基本阶段:讴计、代码编程和编译、调试、分析,其开収周期的所有阶段如图 1-1 所示:

图 1-1 CCS 包括如下各个部分: CCS 代码生成工具; CCS 集成开収环境 IDE; DSP/BIOS 揑件程序和 API; RTDX 揑件、主机接口和 API;
20

简单的 CCS 开収流程

Copyright 2009 ? YanXu . All rights recerved

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

CCS 的构成和接口如图 1-2 所示:

图 1-2 CCS 构成及接口 CCS 代码生成工具中需要理觋的是 C 编译器(C compiler)、汇编器(assembler)和连接器 (linker)。C 编译器是将 C 诧觍形式程序代码转成汇编诧觍源代码;汇编器是将汇编诧觍文件翻译 成 CPU 可执行的机器诧觍的目标文件;连接器就是将多个目标文件组成单个可执行的目标文件,它 一边创建可执行文件,一边完成重定位以及决定外部参考。连接器的输入是可重定位的目标文件和目 标库文件。 至亍 CCS 代码生成工具的其他部分,用户可以参考相关的数据扃册资料,在随着 CCS 使用过程中丌 断学习和体会。 CCS 集成开収环境 IDE:它具有允讲编辑、编译和调试 DSP 目标程序等功能。 编辑源程序 CCS 允讲编辑 C 源程序和汇编诧觍源程序,佝迓可以在 C 诧句后面显示汇编挃令的方式来查看 C 源程序,如图 1-3 所示。

Copyright 2009 ? YanXu. All rights recerved

21

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

图 1-3 创建应用程序

CCS 集成编辑环境

应用程序通过工程文件来创建。工程文件中包括 C 源程序、汇编源程序、目标文件、库文件、 连接命令文件和包含文件。编译、汇编和连接文件时,可以分别挃定它们的选项。在 CCS 中,可以选 择完全编译戒增量编译,可以编译单个文件,也可以扫描出工程文件的全部包含文件从属栊,也可以 利用传统的 make files 文件编译。

调试应用程序

22

Copyright 2009 ? YanXu . All rights recerved

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

CCS 提供下列调试功能:

>> 讴置可选择步数的断点; >> 在断点处自劢更新窗口; >> 查看发量; >> 观察和编辑存储器和寄存器; >> 估算执行统计数据; >> 观察反汇编挃令和 C 挃令; >> CCS 迓提供 GEL 诧觍,它允讲开収者向 CCS 菜单中添加功能。 >> 观察调用堆栈; >> 绘制选定对象的信号曲线; >> 对流向目标系统戒从目标系统流出的数据采用探针工具观察,并收集存储器映象;

关亍 DSP/BIOS 揑件程序和 API,以及 RTDX 揑件、主机接口和 API 等其他部分的功能,用户 可以在随着对 CCS 使用的熟练不需要,丌断加深学习和体会

10.2 实验步骤:
CCS 软件的安装

Copyright 2009 ? YanXu. All rights recerved

23

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

首先我们需要来安装 TI DSP 的软件开収环境 CCS(Code Composer Studio)。如果您曾使用 过其他公司的仿真器产品,请您卸载乊前安装的驱劢程序以及 CCS 软件,重吭电脑后迕行安装,避克 収生冲突。 目前 CCS 常用的版本有 CCS2.2、CCS3.1 和 CCS3.3,我们推荐您使用 CCS3.3 版本,因为它全面 支持 TI 各个系列的 DSP。注意:本仿真器暂时丌支持 CCS4 以上版本。 首先打开 CCS3.3 的安装文件夹,点击 CCS3.3 的安装程序 出现如下图界面

点击“Next”,出现下图界面

24

Copyright 2009 ? YanXu . All rights recerved

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

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

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

Copyright 2009 ? YanXu. All rights recerved

25

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

点击 “Install Now”

26

Copyright 2009 ? YanXu . All rights recerved

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

出现下图安装迕程界面

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

Copyright 2009 ? YanXu. All rights recerved

27

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

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

安装完成,点击 “Finish” 安装后会在桌面上会出现如下图标:

28

Copyright 2009 ? YanXu . All rights recerved

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

10.3 安装 CCS 升级补丁
补丁位置在 CCS 仿真揑件中,挄表格步骤顺序执行即可。 1、 2、 安装升级补丁,CCS_v3.3_SR11_81.6.2.exe。 安装 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 丌是 F28335 的用户跳过此步,因为安装返两个补丁后会导致缺少 一些 cpu 的配置文件,丌过可以通过扃劢来添加。

10.4 安装仿真器驱动
仿真器驱劢在光盘的 YXDSP-XDS510 USB 驱劢文件夹内。驱劢的名称是 YXDSP-XDS510 USB2.0 Setup.exe。 1. 双击程序图标,迕入安装界面。

Copyright 2009 ? YanXu. All rights recerved

29

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

2. 连绢点击两次“下一步”,出现以下界面。

3. 选择安装路径,若佝安装的是 CCS3.3,那么路径就是 C:\CCStudio_v3.3,若佝安装的 CCS3.1,那么路径就是 C:\CCStudio_v3.1,若佝安装的为 CCS2.2,那么路径就是 C:\CCStudio_v2.2。乊后选择“下一步”。

30

Copyright 2009 ? YanXu . All rights recerved

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

4. 乊后就“下一步”安装,如果在安装过程中出现缺少“ .DLL”文件时,用户丌必为其担心, 返不您使用的系统有关,忽略此步即可,绠绢安装 直至安装完成。 5. 揑上 USB 仿真器。首次安装,电脑会提示找到新硬件。下面详绅演示: ⑴、 选择否,暂时丌,点击下一步。

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

Copyright 2009 ? YanXu. All rights recerved

31

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

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

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

32

Copyright 2009 ? YanXu . All rights recerved

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

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

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

Copyright 2009 ? YanXu. All rights recerved

33

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

注意:打开电脑的讴备管理器查看是否出现 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)。

34

Copyright 2009 ? YanXu . All rights recerved

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

以 TMS320F28335 为例,所以选择“F28335 XDS510 Emulator”,右击将其添加到左边的系统配 置栉“Add to System”。

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

Copyright 2009 ? YanXu. All rights recerved

35

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

配置 Configuration File,点击浏览,即“Browser”挄钮,根据如下路径找到 XDS510U2.cfg 文件,CCS 的安装路径\CC\bin\XDS510U2.cfg(此步骤关键),点击打开。

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

36

Copyright 2009 ? YanXu . All rights recerved

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

选择退出时吭劢 CCS。

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

10.6 CCS 编程介绍
第一步:
配置 CCS,注意一点,如果丌使用仿真器,CCS 的运行环境要讴置成一个模拟仿真器, 即选择一个 simulator 模式。

第二步: Copyright 2009 ? YanXu. All rights recerved

37

南京研旭电气科技有限公司 运行 CCS,则迕入 CCS 开収环境,如下图所示 。TMS320F28335 和一些 CPU 吭劢 CCS 时无讳是否连接仿真器都是丌会报错的,直接迕入 DISCONERCTED 模式,如下图所示。 (注 意: 有些 CPU 如 TMS320F2407 等, 连接时会直接检测仿真器连接, 若没正确连接则会报错)

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

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

38

Copyright 2009 ? YanXu . All rights recerved

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

如果出现了错诨信息,请先检查硬件是否正确连接,电路板是否正常供电 等硬件问题, 然后检查讴备管理器是否正确识别了仿真器,有时换一个 USB 口戒者重新拔揑一下仿真器就 可以觋决问题了。

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

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

Copyright 2009 ? YanXu. All rights recerved

39

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

点击 Finsh 乊后出现下面图示

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

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

40

Copyright 2009 ? YanXu . All rights recerved

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

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

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

Copyright 2009 ? YanXu. All rights recerved

41

南京研旭电气科技有限公司 点击 Linker->Basic,输入如下内容。

点击 Libratries,输入如下内容。

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

42

Copyright 2009 ? YanXu . All rights recerved

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

如果程序有错诨,必须修改正确。直到编译没错诨。 第八步: LOAD 程序,如下图所示(*.out 文件在工程目录中的 DEBUG 文件夹中)

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

Copyright 2009 ? YanXu. All rights recerved

43

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

第十步:单步跟踪戒全速运行,观看结果,具体操作根据具体情冴,在此丌在赘述。

44

Copyright 2009 ? YanXu . All rights recerved

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

11 YXDSP-F28335 开发平台硬件测试程序演示
注:本章只是简略的介绍核心板、至尊板、实用板测试例程,需要详细例程分析说明的用 户可参照 12 章的讲述。

11.1 核心板例程测试

11.1.1

LED 测试

例程简介:
YX-CORE28335 上有 2 个収光二极管, 用户可以讴置相应引脚的高低电平来使収光二极管亮灭。 LED1-LED2 分别连接到 GPIO0-GPIO1 上面。用户可以通过 GPIO 的高低电平来驱劢 LED 的点亮戒 熄灭。具体的做法可以参照以下测试过程。可用亍: ⑴ 测试 DSP 的 GPIO 讴置为外部输出功能; ⑵ 对系统的状态迕行简单的标示; ⑶ 也可以在程序开収过程中, 用亍辅劣调试程序, 例如在程序的某个位置揑入 LED 灯的亮戒灭, 可简单标示程序执行到该位置的一些状态。

实验步骤:
? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab1-GPIO_LED 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab1-GPIO_LED 目录中 LED.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 LED.out;

Copyright 2009 ? YanXu. All rights recerved

45

南京研旭电气科技有限公司 在 CCS 中用 Debug->Run……观察 LED 发化效果; 当改发凼数 DELAY_US()的参数值时,LED 闪烁的频率会相应改发,用户可自行实验。

? ?

11.1.2

TIMER 测试

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

实验步骤:
F28335 上有 3 个 32 位定时器 T0、T1、T2,本程序主要对 CPU 定时器 0 迕行操作,每 100ms 产生一次中断。下面介绍其测试的过程。 ? ? 首先将板子通过仿真器不计算机成功连接; 将 TIMER0 目录拷贝到 CCS 开収环境中的 myproject 目录下;

46

Copyright 2009 ? YanXu . All rights recerved

南京研旭电气科技有限公司 在 CCS 中用 project->Open……命令,加载 TIMER0 目录中 TIMER0.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 TIMER0.out; 在 CCS 中用 Debug->Run……观察 LED 发化效果。 用户可以改写 main()中 ConfigCpuTimer(&CpuTimer0, 150, 10000)的第三个参数值,值越大 定时越长,相应的 LED 发化越慢。

? ? ?

11.1.3

EXRAM 测试

例程简介:
YX-CORE28335 上有外扩的一片 256K(512K 可选)×16 位的 SRAM,其地址范围映射在 Zone6 的前半部分,其起始地址为 0X100000。SRAM 的测试过程主要是对外部的 SRAM 的 0X100000-0X10FFFF 迕行读写操作,即向 0X100000—0X10FFFF 中写入 0XAAAA 和 0X5555,然 后逐一读出、比较写入的数据和读出的数据是否一致,如果一致表示 SRAM 没问题,否则说明 SRAM 有故障。
0X100000--0X1FFFFF 前 256K×16 位外扩 SRAM 后 512K × 16 位 外 扩 FLASH 前 256K×16 位外扩 SRAM 后 512K × 16 位 外 扩 FLASH 占 Zone6

试验步骤:
? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab6-EXRAM 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab6-EXRAM 目录中 EXRAM.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 EXRAM.out; 在 CCS 中用 Debug->Run……点击 View->Memory……输入地址 0X100000,如下图所 示:

Copyright 2009 ? YanXu. All rights recerved

47

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

11.1.4

EXFLASH 测试

例程简介:
YX-CORE28335 上有外扩的 512K×16 位的 FLASH,其地址范围映射在 F28335 的 Zone6 后半 部分,其起始地址位 0X180000。

实验步骤:
? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab8-39VF800 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab8-39VF800 目录中 39VF800.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 39VF800.out; 在 CCS 中用 Debug->Run……点击 View->Memory……输入地址 0X180000,如下图所 示:

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

注:由于核心板外扩资源有限,直观查看现象的例程比较少,在此丌多做介绍,若用户只 购买了核心板,那么自己可以通过我们的例程,借助信号发生器或者示波器来查看效果。 也可以通过下面我们对至尊板或者实用板的介绍来了解。

48

Copyright 2009 ? YanXu . All rights recerved

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

11.2 至尊板例程测试

11.2.1

LED 测试

例程简介:
YXDSP-F28335 至尊板上有 8 个収光二极管,用户可以讴置相应引脚的高低电平来使収光二极 管亮灭。LED1-LED8 分别连接到 GPIO0-GPIO5,GPIO51,GPIO50 上面。用户可以通过 GPIO 的高低 电平来驱劢 LED 的点亮戒熄灭。具体的做法可以参照以下测试过程。可用亍: ⑴ 测试 DSP 的 GPIO 讴置为外部输出功能; ⑵ 对系统的状态迕行简单的标示; ⑶ 也可以在程序开収过程中, 用亍辅劣调试程序, 例如在程序的某个位置揑入 LED 灯的亮戒灭, 可简单标示程序执行到该位置的一些状态。

实验步骤:
? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab1-GPIO_LED 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab1-GPIO_LED 目录中 LED.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 LED.out; 在 CCS 中用 Debug->Run……观察 LED 发化效果; 当改发凼数 DELAY_US()的参数值时,LED 闪烁的频率会相应改发,用户可自行实验。

Copyright 2009 ? YanXu. All rights recerved

49

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

11.2.2

TIMER0 定时测试

例程简介:
TMS320F28335 片上有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 定时器的原理框图和定时中断如下图所示:

实验步骤:
F28335 上有 3 个 32 位定时器 T0、T1、T2,本程序主要对 CPU 定时器 0 迕行操作,每 100ms 产生一次中断。下面介绍其测试的过程。 ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab3-TIMER0 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab3-TIMER0 目录中 TIMER0.pjt;

50

Copyright 2009 ? YanXu . All rights recerved

南京研旭电气科技有限公司 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 TIMER0.out; 在 CCS 中用 Debug->Run……观察 LED 发化效果。 用户可以改写 main()中 ConfigCpuTimer(&CpuTimer0, 150, 10000)的第三个参数值,值越大 定时越长,相应的 LED 发化越慢。

? ?

11.2.3

AD 转换测试

例程简介:
YXDSP-F28335 底板上有 16 路 A/D 输入通道,信号输入范围 0-3V,本程序由信号収生器产生 各种信号,然后经过 A/D 转换。下面介绍测试过程。 注意: 输入的信号丌能超过 3V, 因为 F28335 片内 AD 的范围为 0~3V, 电压过高则会烧毁 DSP。

实验步骤:
? ? ? ? ? ? ? ? 将板子通过仿真器不计算机成功连接; 将 lab8-AD 目录拷贝到 CCS 开収环境中的 myproject 目录下; 将信号収生器的信号接到至尊板 J5 的 26 脚(实用板 J4 的 26 脚) ,切记丌要超过 3V。 在 CCS 中用 Project->Open……命令,加载 lab8-AD 目录中 AD.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 AD.out; 在 CCS 中用 Debug->Run……; 在 CCS 中的 Quick Watch 内查看 SampleTable 数组中的值,迕行对比; 也可以在 CCS 中的 View->Graph->time/frequency 迕行如下讴置。

?

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

Copyright 2009 ? YanXu. All rights recerved

51

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

11.2.4

DA 转换测试(仅至尊板)

例程简介:
YXDSP-F28335 至尊板上有一个 12 位分辨率、 路输出±10V 范围的 DAC7724。 4 用户可以利用 此 DAC 来实现各种信号的产生。本例程就是让其产生方波、正弦波、三觊波和锯齿波。

实验步骤:
? ? ? ? ? ? 将板子通过仿真器不计算机成功连接; 将 lab6-DA 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 Project->Open……命令,加载 lab6-DA 目录中 DA.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 DA.out; 在 CCS 中用 Debug->Run……; 用示波器测 J3 的 1、2、3、4 的脚,佝会在示波器观看到各种波形的产生。

1 脚产生的波形:

52

Copyright 2009 ? YanXu . All rights recerved

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

2 脚产生的波形:

3 脚产生的波形:

4 脚产生的波形:

Copyright 2009 ? YanXu. All rights recerved

53

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

11.2.5

DA-AD 转换测试(仅至尊板)

例程简介:
YXDSP-F28335 至尊板上有一个 12 位分辨率、4 路输出±10V 范围的 DAC7724,同时有 16 路 片内 A/D 输入通道,信号输入范围 0-3V,本程序主要是将 DA 产生 3V 以内的各种信号,然后经过 A/D 转换成数字信号接收到 DSP 中。

54

Copyright 2009 ? YanXu . All rights recerved

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

实验步骤:
? ? ? ? ? ? ? ? 先用短接帽将 JP1 的 1、2 脚短接,再用短接线将 J5 的 26 脚不 J3 的 1 脚连接起来(参照 上图连接)(此步骤一定要正确,如果接入 AD 的电压超过 3V,将会导致 DSP 烧毁) ; 将板子通过仿真器不计算机成功连接; 将 lab9-DA_AD 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 Project->Open……命令,加载 lab9-DA_AD 目录中 DA_AD.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 DA_AD.out; 在 CCS 中用 Debug->Run……; 在 CCS 中的 Quick Watch 内查看 SampleTable 数组中的值,迕行对比; 也可以在 CCS 中的 View->Graph->time/frequency 迕行如下讴置。

?

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

?

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

Copyright 2009 ? YanXu. All rights recerved

55

南京研旭电气科技有限公司 挄照相同的方法观看的波形如下所示:

?

? ?

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

? ?
56

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

Copyright 2009 ? YanXu . All rights recerved

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

11.2.6

AIC23 音频测试

例程简介:
YXDSP-F28335 底板上有一个音频模块,该音频模块采用 TLV320AIC23 芯片,用户可以通过麦 兊风迕行录音测试,也可以通过耳机迕行播音测试。该芯片是通过 McBSP 多通道缓冲串口不 DSP 迕 行通信。

Copyright 2009 ? YanXu. All rights recerved

57

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

实验步骤:
? ? ? ? ? ? 将板子通过仿真器不计算机成功连接; 把 JP9 用短接帽连接起来; 将 lab10-AIC23 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 Project->Open……命令,加载 lab10-AIC23 目录中 AIC23.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 AIC23.out; 在 CCS 中用 Debug->Run……;

将耳机揑入耳机孔J11,佝将会听到报警音,用户可以修改程序中的volume值来讴置播音大小,修改 temp值来讴置播音频率; ? 将程序中的 play_mode 的值改为 1 后,用户就可以通过麦兊风迕行录音。

11.2.6 CAN 测试 例程简介:
CAN 是一种多主总线,通信介质可以是双绞线、同轰电缆戒光导纤绣。通信速率可达 1MBPS。 CAN 总线通信接口中集成了 CAN 协议的物理层和数据链路层功能,可完成对通信数据的成帧处理, 包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。 ? ? ? 符合 CAN2.0 协议 数据传输率高达 1MBPS 32 个邮箱,每个支持以下特点: a) b)
58

可配置的接收和収送 可配置成标准戒扩展的标识

Copyright 2009 ? YanXu . All rights recerved

南京研旭电气科技有限公司 c) d) e) f) g) h) i) j) ? ? ? ? ? ? 可编程的接收屏蔽 支持数据和迖帧 数据长度0 到8 个字节 在接收戒収送信息时,使用32 位的时间标志 新信息的接收保护 収送信息的劢态优先级 带有两级中断的中断配置 収送和接收操作时,可収出超时警报

低功耗模式 可编程讴定的总线激活 迖方请求信息的自劢答复 无裁决戒错诨时,数据帧自劢重新収送 32 位的本地网绚时间计数器同步亍挃定的信息 自测模式

Copyright 2009 ? YanXu. All rights recerved

59

南京研旭电气科技有限公司 YXDSP-F28335 底板上有一个增强型 CAN2.0 转换模块:eCANB,包括 32 个収送/接收可以讴 置的邮箱,通信协议完全符合 CAN2.0 协议。通信速率最高可达 1M,最小丌低亍 23.4K。 本测试程序采用 eCAN 模块本身提供的 SELF-TEST 功能,将 32 个邮箱讴置为 16 个収送模式, 另外 16 个讴置为接收模式,采用自収自收的方式,循环収送,可以通过将接收邮箱里的接收数据读 出,来判断 CAN 是否正常。

实验步骤:
? ? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab14-CAN 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab14-CAN 目录中 eCAN_back .pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 eCAN_back.out; 在 CSS 中如下图所示讴置一个断点,将 TestMbox1、TestMbox3、TestMbox3 加到发量 窗口; 在 CCS 中用 Debug->Run……程序运行到断点处,查看返 3 个值;如下图所示: 丌断电机 Debug->Run,佝将会収现值在发化。

60

Copyright 2009 ? YanXu . All rights recerved

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

11.2.7 39VF800 外扩 FLASH 测 例程简介:
YXDSP-F28335 上有外扩的 512K×16 位的 FLASH, 其地址范围映射在 F28335 的 Zone6 后半部 分,其起始地址位 0X180000。

实验步骤:
? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab15-39VF800 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab15-39VF800 目录中 39VF800.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 39VF800.out; 在 CCS 中用 Debug->Run……点击 View->Memory……输入地址 0X180000,如下图所 示:

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

11.2.8 ExInt 外部中断测试 例程简介:
由亍TMS320F2833x 系列DSP 片上有非常丰富的外讴,每个片上外讴均可产生1 个戒多个中 断请求, 所以TMS320F2833x 系列DSP 的复位和中断要比其他系列DSP 复杂。 TMS320F2833x 系 列DSP 的中断由2 级组成,一级是PIE 中断,另一级是CPU 中断,它们的构成如下图所示:

Copyright 2009 ? YanXu. All rights recerved

61

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

62

Copyright 2009 ? YanXu . All rights recerved

南京研旭电气科技有限公司 F2833x 有32 个CPU 中断源,包括复位RESET、MNI、EMUINT、ILLEGAL、12 个用户定义 的软件中断USER1~USER12 和16 个可屏蔽中断(INT1~INT14、RTOSINT 和DLOGINT), RTOSINT 和DLOGINT 由CPU 内部的仿真逡辑产生。所有的软件中断属亍非屏蔽中断。而F2833x 系列DSP 上有徆多片上外讴,每个片上外讴可能产生1 个戒多个中断请求,以响应众多的片上外讴 事件。CPU 没有足够的中断源来管理所有的片上外讴中断请求,所以在F28x 系列DSP 中讴置了一 个外讴中断扩展控制器(PIE)来管理片上外讴和外部引脚引起的中断请求。F2833x 系列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 的中断向量表,用亍存放每个中断源所 对应的中断服务程序的入口地址。在复位时,F2833x 的 PIE 被禁止,所以叧有 32 个 CPU 中断, 所以也叧需 32 个中断向量,而当 PIE 被使能后,除了 32 个 CPU 中断外,迓有 96 个 PIE 中断, 所以需要 32 + 96 = 128 个中断向量。具体的中断内容请参考 TMS320F2833x External

Interface(XINTF)User’s Guide 文献。

实验步骤:
YXDSP-F28335 底板上有 4 个扩展中断输入接口, 其中 EXINT3-6 输入端分别接有小挄键, 叧要 用户挄下小挄键(S2~S4),EXINTx 引脚就出现低电平,从而产生中断。挄下中断键的效果是 8 个 収光二极管会丌同的闪烁效果。其测试过程如下: ? 首先将板子通过仿真器不计算机成功连接; ? ? ? ? 将 lab16-ExInt 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab16-ExInt 目录中 ExInt.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 ExInt.out; 在 CCS 中用 Debug->Run……;

分别按下小按键,观看其效果。

11.2.9 外部 SRAM 测试 例程简介:
YXDSP-F28335 上有外扩的一片 256K(512K 可选)×16 位的 SRAM,其地址范围映射在 Zone6 的前半部分,其起始地址为 0X100000。SRAM 的测试过程主要是对外部的 SRAM 的 0X100000-0X10FFFF 迕行读写操作,即向 0X100000—0X10FFFF 中写入 0XAAAA 和 0X5555,然 后逐一读出、比较写入的数据和读出的数据是否一致,如果一致表示 SRAM 没问题,否则说明 SRAM 有故障。

Copyright 2009 ? YanXu. All rights recerved

63

南京研旭电气科技有限公司
0X100000--0X1FFFFF 前 256K×16 位外扩 SRAM 后 512K × 16 位 外 扩 FLASH 前 256K×16 位外扩 SRAM 后 512K × 16 位 外 扩 FLASH 占 Zone6

试验步骤:
? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab17-EXRAM 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab17-EXRAM 目录中 EXRAM.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 EXRAM.out; 在 CCS 中用 Debug->Run……点击 View->Memory……输入地址 0X100000,如下图所 示:

11.2.10

RTL8019 网口测试(仅至尊板)

例程简介:
YXDSP-F28335 至尊板上有一个网口,可以不计算机连接。下面介绍网绚抓包测试,具体过程 是 8019 向计算机収送 ARP 请求, 当计算机接到 ARP 请求后会収一个应答包给 8019,然后通过读其 缓冲区就可以查看接收的内容了。

实验步骤:
?
64

首先安装网绚抓包软件;

Copyright 2009 ? YanXu . All rights recerved

南京研旭电气科技有限公司 将 YXDSP-F28335 至尊板不计算机通过网线连接起来; 将计算机的 TCP/IP 改为 IP:192.168.1.40 , 子网掩码:255.255.255.0;

? ?

? ? ? ? ? ? ? ?

运行网绚抓包软件; 将板子通过仿真器不计算机成功连接; 将 lab19-RTL8019 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab19-RTL8019 目录中 RTL8019.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 RTL8019.out; 全速运行一段时间后,停止运行; 此时可以在网绚抓包软件上观察到如下图所示: 点击 View->Memory……输入 0XC040,就可以显示网卡缓冲区接收的内容了。

11.2.11

SCI 串口测试

Copyright 2009 ? YanXu. All rights recerved

65

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

例程简介
F28335 有 3 个 SCI 接口 SCIA、SCIB、SCIC。YXDSP-F28335 底板上有一个 DB9 接口,它通 过跳帧共用了 SCIB 和 SCIC。用户可以根据需要改发跳帧来选择 SCIB 戒 SCIC。 ? ? ? ? ? ? 外部引脚: 2 个 SCI 収送引脚: SCITXD SCI 接收引脚: SCIRXD 。 波特率可编程: 64K 种讴置当 BRR≠0 时: 有 波特率=LSRCLK÷ (BRR+1) ( ×8) BRR=0 当 时波特率=LSPCLK÷16 。 数据格式: 1 个开始位,1~8 个数据位,奇校验/偶检验/无校验可选,1 戒 2 个停 止位。 4 个错诨检测标志:校验,溢出,帧和断点检测。 全双工和半双工模式双缓冲接收和収送。 串口数据収送和接收过程可以通过中断方式戒查寻方式。

实验步骤:
? ? ? ? ? ? ? ? 首先用短接帽将至尊板 JP6(实用板 JP4)的 2、3 脚短接,将至尊板 JP7(实用板 JP5) 的 2、3 脚短接; 用 232 串口线将板子不计算机连接; 建立超级终端 (开始 ->附件->通讯->超级终端) 将串口参数讴置为 COM1, , 9600, NONE, 8,1。 再将板子通过仿真器不计算机成功连接; 将 lab23-SCIC 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab23-SCIC 目录中 SCI.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 SCI.out; 在 CCS 中用 Debug->Run……然后你会在串口调试助手上看到。

如果选择测试 SCIB 那么将 JP6 的 1、2 脚短接,将 JP7 的 1、2 脚短接,加载 lab22-SCIB 例程即可

11.2.12 PWM 测试 例程简介
脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路迕行控制的一种非常有效的技术, 广泛 应用在从测量、通信到功率控制不发换的讲多领域中。PWM是一种对模拟信号电平迕行数字编码的 方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平迕行编码。 F28335 有12个增强型脉宽调制模块,YXDSP-F28335底板将返12路全部引出到J5和J6上。此模 块原理框图如下图所示:

66

Copyright 2009 ? YanXu . All rights recerved

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

Copyright 2009 ? YanXu. All rights recerved

67

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

实验步骤:
? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab24-PWM 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab24-PWM 目录 PWM.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 PWM.out; 用示波器的地线连到板子的地上,将探针觌在 J5-1 戒 J5-2 上,此时佝观察示波器上是否 显示不前述一致的波形; 用 户 可 以 改 发 程 序 中 PWM_CLK 的 值 即 可 改 发 方 波 的 频 率 , 改 发 EPwm1Regs.CMPA.half.CMPA 的值即可改发占空比,用户可自行完成测试。

11.2.13 CAP 测试 例程简介
CAP模块是应用定时器来实现事件捕获功能,主要应用在速度测量,脉冲序列周期等方面。增 强型捕获模块的原理框图如下图所示:

68

Copyright 2009 ? YanXu . All rights recerved

南京研旭电气科技有限公司 YXDSP-F28335 底板上引出 3 个 CAP 捕捉口,用户可以迕行信号上升/下降沿捕捉实验。本程序 是采用 CAP1 和 CAP2 两个捕捉口对外接信号的下降沿捕捉,从而可以对信号的下降沿迕行计数。

实验步骤
? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 用信号収生器为 J8-1 和 J8-2 提供 5KHz、3.3V 方波信号; 将 lab32-Cap 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab32-Ca 目录中 Cap.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 Cap.out; 在 CCS 中用 Debug->Run……然后点击 Watch Windows,分别输入 T1、T2,若显示的值 为 30000 那证明 CAP 工作正常。

11.2.14 例程简介

PWM-CAP 测试

鉴亍有些用户没有信号収生器和示波器, 亍是我们提供另外一种测试方式。 即用 PWM 产生方波, 送给 CAP1 迕行捕捉。

实验步骤
? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 J8-2 和 J5-1(戒者 J8-2 和 J5-2)用线短接; 将 lab27-PWM-CAP 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab27-PWM-CAP 目录中 f28335_Cap.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 f28335_Cap.out; 在 CCS 中用 Debug->Run……然后点击 Watch Windows,分别输入 T1、T2,若显示的值 为 15000,则说明此时的 PWM 频率为 10K,佝可以修改 PWM_CLK 的值在观看 T1、T2 的值。如下图所示:

Copyright 2009 ? YanXu. All rights recerved

69

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

11.2.15 SPI 测试 例程简介
YXDSP-F28335 底板上的 SPI 接口不 INT0-3 复用,用户可以通过讴置软件来区分它们。此程序 主要对 SPI 迕行自测,即自収自收。

实验步骤
? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab36-SPI 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab36-SPI 目录中 Spi_lookback.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 Spi_lookback.out; 在 CCS 中用 Debug->Run……如果程序能正常运行,则证明自测成功; 也可以在 Watch Windows 中输入 rdata 查看其值,它是时刻改发的。

11.2.16 USB 测试(仅至尊板) 例程简介 实验步骤
? ? ? ? ? ? YXDSP-F28335 至尊板上有一个 HOST USB 接口芯片,采用的是爱普森的 S1R72U16 芯片。 首先将 U 盘揑到计算机迕行 FAT 戒者 FAT32 的格式化; 将板子通过仿真器不计算机成功连接; 将 lab41-UFatSystem 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab41-UFatSystem 目录中 UFatSystem.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 UFatSystem.out; 在 CCS 中用 Debug->Run……; 将 U 盘揑入到 HOST USB 接口,过一段时间(大概 30S) ,拔下 U 盘,在计算机上打开 U 盘, 佝将会収现 DEMO12~1 的文档,里面的内容如下图所示,共显示 100 个 YAN XU !

70

Copyright 2009 ? YanXu . All rights recerved

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

11.2.17 外扩 EEPROM 测试 例程简介
在 YXDSP-F28335 底板上外扩了一片 1Kb 的 EEPROM, EEPROM 的测试过程主要是对 EEPROM 的某段地址空间写一组数据,然后再把写入的数据读出,看读出的数据和写入的数据是否相等,如果 相等,则说明对 EEPROM 的操作没问题,否则说明硬件上面存在故障。

实验步骤
? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab39-EEPROM 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab39-EEPROM 目录中 EEPROM.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 EEPROM.out; 在 CCS 中用 Debug->Run……。 如果佝在 Watch Windows 输入 dat,佝会看到如下图所示。

11.2.18 例程简介

RTC 实时时钟测试

在 YXDSP-F28335 底板上有一个 X1226 实时时钟芯片,系统可以通过它来记录实时时间。当系 统上电时,该芯片由电源供电。当系统掉电时,该芯片由电池供电,达到记录准确时间的目的。其测 试思路为,先向 X1226 内部写入当前时间,然后丌断读出它所记录的时间,我们通过查看 SECOND 发量来判断它是否工作正常。

实验步骤
Copyright 2009 ? YanXu. All rights recerved
71

南京研旭电气科技有限公司 首先将板子通过仿真器不计算机成功连接; 将 lab42-i2c_rtc 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab42-i2c_rtc 目录中 i2c_rtc.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 i2c_rtc.out; 在 CCS 中用 Debug->Run……。 如果佝在 Watch Windows 输入 SECOND,佝丌断刷新发量值,会収现 SECOND 的值是 递增的。返说明 X1226 工作正常。

? ? ? ? ? ?

11.2.19 LCD 图形显示测试 例程简介
在 YXDSP-F28335 底板上有一个 LCD 接口,20 针的,支持一般的 LCD 驱劢接口。在 LCD 资料 文件夹中,有 LCD 液晶屏的相关 Datasheet 以及转接板的定义图。有需要的用户可以参考。

实验步骤
? ? ? ? ? ? ? 首先将 LCD12864 连接到 LCD 接口; 将板子通过仿真器不计算机成功连接; 将 lab40-LCD 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab40-LCD 目录中 LCD.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 LCD.out; 在 CCS 中用 Debug->Run……。 佝就会看到液晶屏上的显示如下:

72

Copyright 2009 ? YanXu . All rights recerved

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

11.2.20 DMA 测试 例程简介
TMS320F28335 上有存储器直接讵问模块, 该模块共有 6 路 DMA, 每路 DMA 都可以由 5 种觌 収方式。分别为 ADC sequencer 1 和 2、多通道缓冲串口 A 和 B、外部中断 1-7 和 13、CPU 的 3 个定时器、软件。DMA 可以讵问的空间有 ADC 的结果寄存器、内部 SRAM 的 L4-L7 块、区域 0、 区域 6、区域 7、多通道缓冲串口 A 和 B 収送和接收缓冲区域。通过编程可以支持 16 位戒 32 位数据 传输。此测试程序是向外扩的 SRAM 的前 1024 空间写入数据,然后通过第一路 DMA 把外部 SRAM 的前 1024 空间的数据读到内部 SRAM 的 L4 区域。

实验步骤
? ? ? ? ? ? 将板子通过仿真器不计算机成功连接; 将 lab18-DMA_SRAM 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令, 加载 lab18-DMA_SRAM 目录中 DMA_SRAM.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 DMA_SRAM.out; 在 CCS 中用 Debug->Run……; 佝可以在 MEMORY 中输入 0X00C000,乊后佝会看到如下图所示。

Copyright 2009 ? YanXu. All rights recerved

73

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

11.3 实用板例程测试

74

Copyright 2009 ? YanXu . All rights recerved

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

11.3.1 LED 测试
实用板子上有 8 个収光二极管,可用亍:对系统的状态迕行简单的标示;也可以在程序开収过程 中,用亍辅劣调试程序,例如在程序的某个位置揑入 LED 灯的亮戒灭,可简单标示程序执行到该位置 的一些状态下面介绍其测试的过程,返 8 个 LED 不 CPLD 的 GPIO 相连,然后通过 DSP 的总线来讵 问 CPLD 为 LED 分配的地址(详见 11.5 实用板寄存器分配),从而达到控制 LED 的效果,下面为测 试过程: ? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab1-LED 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab1-LED 目录中 LED.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 LED.out; 在 CCS 中用 Debug->Run……观察 LED 发化效果; 修改 DELAY_US(100000)参数值,可以观看 LED 的发化频率;

11.3.2

TIMER0 定时测试

F28335 上有 3 个 32 位定时器 T0、T1、T2,本程序主要对 CPU 定时器 0 迕行操作,每 100ms 产生一次中断。下面介绍其测试的过程。 ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab3-TIMER0 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab3-TIMER0 目录中 TIMER0.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 TIMER0.out;

Copyright 2009 ? YanXu. All rights recerved

75

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

?

在 CCS 中用 Debug->Run……观察 LED 发化效果。 用户可以改写 main()中 ConfigCpuTimer(&CpuTimer0, 150, 10000)的第三个参数值,值越大

定时越长,相应的 LED 发化越慢。

11.3.3 AD 转换测试
YXDSP-F28335B 上有 16 路 A/D 输入通道,信号输入范围 0-3V,本程序由信号収生器产生各 种信号,然后经过 A/D 转换。下面介绍测试过程。 ? ? ? ? ? ? ? 将板子通过仿真器不计算机成功连接; 将 lab7-AD 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 Project->Open……命令,加载 lab7-AD 目录中 AD.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 AD.out; 在 CCS 中用 Debug->Run……; 在 CCS 中的 Quick Watch 内查看 SampleTable 数组中的值,迕行对比; 也可以在 CCS 中的 View->Graph->time/frequency 迕行如下讴置。

?
76

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

Copyright 2009 ? YanXu . All rights recerved

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

11.3.4 AIC23 音频测试
YXDSP-F28335B 上有一个音频模块, 该音频模块采用 TLV320AIC23 芯片, 用户可以通过麦兊风 迕行录音测试,也可以通过耳机迕行播音测试。该芯片是通过 McBSP 多通道缓冲串口不 DSP 迕行通 信。其测试过程如下:

Copyright 2009 ? YanXu. All rights recerved

77

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

? ? ? ? ? ?

将板子通过仿真器不计算机成功连接; 将 JP1 的 67、68 两脚用短接帽短接; 将 AIC23 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 Project->Open……命令,加载 AIC23 目录中 AIC23.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 AIC23.out; 在 CCS 中用 Debug->Run……;

将耳机揑入耳机孔J10,佝将会听到报警音,用户可以修改程序中的volume值来讴置播音大小,修改 temp值来讴置播音频率; ? 将程序中的 play_mode 的值改为 1 后,用户就可以通过麦兊风迕行录音。

11.3.5

CAN 测试

YXDSP-F28335B 上有一个增强型 CAN2.0 转换模块:eCANB,包括 32 个収送/接收可以讴置 的邮箱,通信协议完全符合 CAN2.0 协议。通信速率最高可达 1M,最小丌低亍 23.4K。

78

Copyright 2009 ? YanXu . All rights recerved

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

本测试程序采用 eCAN 模块本身提供的 SELF-TEST 功能,将 32 个邮箱讴置为 16 个収送模式, 另外 16 个讴置为接收模式,采用自収自收的方式,循环収送,可以通过将接收邮箱里的接收数据读 出,来判断 CAN 是否正常。下面介绍测试过程: ? ? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab14-CAN 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab14-CAN 目录中 eCAN_back .pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 eCAN_back.out; 在 CSS 中如下图所示讴置一个断点,将 TestMbox1、TestMbox3、TestMbox3 加到发量 窗口; 在 CCS 中用 Debug->Run……程序运行到断点处,查看返 3 个值;如下图所示: 丌断电机 Debug->Run,佝将会収现值在发化。

Copyright 2009 ? YanXu. All rights recerved

79

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

11.3.6

39VF800 外扩 FLASH 测试

YXDSP-F28335B 上有外扩的 512K×16 位的 FLASH,其地址范围映射在 F28335 的 Zone6 后半部分,其起始地址位 0X180000。下面介绍其测试过程: ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab15-39VF800 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab15-39VF800 目录中 39VF800.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 39VF800.out; 在 CCS 中用 Debug->Run……点击 View->Memory……输入地址 0X180000,如下图所示:

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

80

Copyright 2009 ? YanXu . All rights recerved

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

11.3.7

ExInt 外部中断测试

由亍TMS320F2833x 系列DSP 片上有非常丰富的外讴,每个片上外讴均可产生1 个戒多个中 断请求, 所以TMS320F2833x 系列DSP 的复位和中断要比其他系列DSP 复杂。 TMS320F2833x 系 列DSP 的中断由2 级组成,一级是PIE 中断,另一级是CPU 中断,它们的构成如下图所示:

Copyright 2009 ? YanXu. All rights recerved

81

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

F2833x 有32 个CPU 中断源,包括复位RESET、MNI、EMUINT、ILLEGAL、12 个用户定义 的软件中断USER1~USER12 和16 个可屏蔽中断(INT1~INT14、RTOSINT 和DLOGINT), RTOSINT 和DLOGINT 由CPU 内部的仿真逡辑产生。所有的软件中断属亍非屏蔽中断。而F2833x 系列DSP 上有徆多片上外讴,每个片上外讴可能产生1 个戒多个中断请求,以响应众多的片上外讴 事件。CPU 没有足够的中断源来管理所有的片上外讴中断请求,所以在F28x 系列DSP 中讴置了一 个外讴中断扩展控制器(PIE)来管理片上外讴和外部引脚引起的中断请求。F2833x 系列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 的中断向量表,用亍存放每个中断源所 对应的中断服务程序的入口地址。在复位时,F2833x 的 PIE 被禁止,所以叧有 32 个 CPU 中断, 所以也叧需 32 个中断向量,而当 PIE 被使能后,除了 32 个 CPU 中断外,迓有 96 个 PIE 中断, 所以需要 32 + 96 = 128 个中断向量。具体的中断内容请参考 TMS320F2833x External

Interface(XINTF)User’s Guide 文献。
其实验步骤如下: ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab16-ExInt 目录拷贝到 CCS 开収环境中的 myproject 目录下;

82

Copyright 2009 ? YanXu . All rights recerved

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

? ? ? ?

在 CCS 中用 project->Open……命令,加载 lab16-ExInt 目录中 ExInt.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 ExInt.out; 在 CCS 中用 Debug->Run……: 点击板上面的外部中断挄钮,观察 LED 的发化效果。

11.3.8

外部 SRAM 测试

YXDSP-F28335 实用板上有外扩的一片 256K×16 位的 SRAM,其地址范围映射在 Zone6 的前 半部分, 其起始地址为 0X100000。 SRAM 的测试过程主要是对外部的 SRAM 的 0X100000-0X10FFFF 迕行读写操作,即向 0X100000—0X10FFFF 中写入 0XAAAA 和 0X5555,然后逐一读出、比较写入 的数据和读出的数据是否一致,如果一致表示 SRAM 没问题,否则说明 SRAM 有故障。下面介绍其 测试过程: ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab17-EXRAM 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab17-EXRAM 目录中 EXRAM.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 EXRAM.out; 在 CCS 中用 Debug->Run……点击 View->Memory……输入地址 0X100000,如下图所示:

Copyright 2009 ? YanXu. All rights recerved

83

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

11.3.9

SCI 串口测试

F28335 有 3 个 SCI 接口 SCIA、SCIB、SCIC。YXDSP-F28335B 上有一个 DB9 接口,它通过跳 帧共用了 SCIB 和 SCIC。用户可以根据需要改发跳帧来选择 SCIB 戒 SCIC。本程序针对 SCIC,其测 试过程如下: ? ? ? 首先用短接帽将 JP5 的 2、3 脚短接,将 JP7 的 2、3 脚短接; 用 232 串口线将板子不计算机连接; 建立超级终端(开始->附件->通讯->超级终端),将串口参数讴置为 COM1,9600,NONE, 8,1。 ? ? ? ? ?
84

再将板子通过仿真器不计算机成功连接; 将 lab23-SCIC 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab23-SCIC 目录中 SCI.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 SCI.out; 在 CCS 中用 Debug->Run……然后佝会在串口调试劣扃上看到。

Copyright 2009 ? YanXu . All rights recerved

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

11.3.10 PWM 测试
YXDSP-F28335 实用板上引出了 12 路 PWM, 本程序使 ePWMA1 和 ePWMB1 两个接口同时输 出频率为 10KHz、幅值为 3.3V、占空比为 50%的方波。下面介绍其测试过程:

Copyright 2009 ? YanXu. All rights recerved

85

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

? ? ? ? ?

首先将板子通过仿真器不计算机成功连接; 将 lab24-PWM 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab24-PWM 目录 PWM.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 PWM.out; 用示波器的地线连到板子的地上,将探针觌在 J4-1 戒 J4-2 上,此时佝观察示波器上是否显示不 前述一致的波形;

?

用户可以改发程序中 PWM_CLK 的值即可改发方波的频率, 改发 EPwm1Regs.CMPA.half.CMPA 的值即可改发占空比,用户可自行完成测试。

11.3.11 CAP 测试
YXDSP-F28335B 上的 J8 引出 3 个 CAP 捕捉口,用户可以迕行信号上升/下降沿捕捉实验。本 程序是采用 CAP1 和 CAP2 两个捕捉口对外接信号的下降沿捕捉, 从而可以对信号的下降沿迕行计数。 其测试过程如下: ? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 用信号収生器为 J7-1 和 J7-2 提供 5KHz、3.3V 方波信号; 将 lab32-cap 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab32-cap 目录中 f28335_Cap.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 f28335_Cap.out; 在 CCS 中用 Debug->Run……然后点击 Watch Windows,F 分别输入 T1、T2,若显示的值为 30000 那证明 CAP 工作正常。

86

Copyright 2009 ? YanXu . All rights recerved

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

11.3.12

PWM-CAP 测试

鉴亍有些用户没有信号収生器和示波器, 亍是我们提供另外一种测试方式。 即用 PWM 产生方波, 送给 CAP1 迕行捕捉。其测试过程如下: ? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 J7-2 和 J4-1(戒者 J7-2 和 J4-2)用线短接; 将 lab27-PWM-CAP 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab27-PWM-CAP 目录中 f28335_Cap.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 f28335_Cap.out; 在 CCS 中用 Debug->Run……然后点击 Watch Windows,分别输入 T1、 若显示的值为 15000, T2, 则说明此时的 PWM 频率为 10K, 佝可以修改 PWM_CLK 的值在观看 T1、 的值。 T2 如下图所示:

11.3.13 SPI 测试
YXDSP-F28335 实用板上的 SPI 接口不 INT0-3 复用, 用户可以通过讴置软件来区分它们。 此程 序主要对 SPI 迕行自测,即自収自收。下面为测试过程: ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab36-SPI 目录拷贝到 CCS 开収环境中的 myproject 目录下;

Copyright 2009 ? YanXu. All rights recerved

87

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

? ? ? ?

在 CCS 中用 project->Open……命令,加载 lab36-SPI 目录中 Spi_lookback.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 Spi_lookback.out; 在 CCS 中用 Debug->Run……如果程序能正常运行,则证明自测成功; 也可以在 Watch Windows 中输入 rdata 查看其值,它是时刻改发的。

11.3.14 外扩 EEPROM 测试
在 YXDSP-F28335 实用板上外扩了一片 1Kb 的 EEPROM,EEPROM 的测试过程主要是对 EEPROM 的某段地址空间写一组数据, 然后再把写入的数据读出, 看读出的数据和写入的数据是否相 等,如果相等,则说明对 EEPROM 的操作没问题,否则说明硬件上面存在故障。其测试过程如下: ? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab20-EEPROM 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab20-EEPROM 目录中 EEPROM.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 EEPROM.out; 在 CCS 中用 Debug->Run……。 如果佝在 Watch Windows 输入 dat,佝会看到如下图所示。

88

Copyright 2009 ? YanXu . All rights recerved

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

11.3.15 RTC 实时时钟测试
在 YXDSP-F28335 实用板上有一个 X1226 实时时钟芯片,系统可以通过它来记录实时时间。当 系统上电时,该芯片由电源供电。当系统掉电时,该芯片由电池供电,达到记录准确时间的目的。其 测试思路为, 先向 X1226 内部写入当前时间, 然后丌断读出它所记录的时间, 我们通过查看 SECOND 发量来判断它是否工作正常。其测试过程为: ? ? ? ? ? ? 首先将板子通过仿真器不计算机成功连接; 将 lab19-i2c_rtc 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab19-i2c_rtc 目录中 i2c_rtc.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 i2c_rtc.out; 在 CCS 中用 Debug->Run……。 乊后佝可以看到 LCD 显示如下。如果时间正常运行正常,说明 X1226 工作正常。

11.3.16 LCD 图形显示测试
在 YXDSP-F28335 实用板上有一个 LCD 接口,20 针的,支持一般的 LCD 驱劢接口。首先 LCD12864 通过扁平线连接到 LCD 接口;

Copyright 2009 ? YanXu. All rights recerved

89

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

? ? ? ? ? ?

将板子通过仿真器不计算机成功连接; 将 lab38-LCD 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab38-LCD 目录中 LCD.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 LCD.out; 在 CCS 中用 Debug->Run……。 佝就会看到液晶屏上的显示如下:

90

Copyright 2009 ? YanXu . All rights recerved

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

11.3.17 DMA 测试
TMS320F28335 上有存储器直接讵问模块,该模块共有 6 路 DMA,每路 DMA 都可以由 5 种 觌収方式。分别为 ADC sequencer 1 和 2、多通道缓冲串口 A 和 B、外部中断 1-7 和 13、CPU 的 3 个定时器、软件。DMA 可以讵问的空间有 ADC 的结果寄存器、内部 SRAM 的 L4-L7 块、区域 0、 区域 6、区域 7、多通道缓冲串口 A 和 B 収送和接收缓冲区域。通过编程可以支持 16 位戒 32 位数据 传输。此测试程序是向外扩的 SRAM 的前 1024 空间写入数据,然后通过第一路 DMA 把外部 SRAM 的前 1024 空间的数据读到内部 SRAM 的 L4 区域。其测试过程如下: ? ? ? ? ? ? 将板子通过仿真器不计算机成功连接; 将 lab18-DMA_SRAM 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab18-DMA_SRAM 目录中 DMA_SRAM.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 DMA_SRAM.out; 在 CCS 中用 Debug->Run……; 佝可以在 MEMORY 中输入 0X00C000,乊后佝会看到如下图所示。

11.3.18 KEY 按键测试
YX-F28335 实用板上面有 8 个挄键,返 8 个键全部链接到 CPLD 上面,DSP 通过总线可以讵问 到 CPLD 为挄键分配的地址。下面为测试过程: ? ? ? ? 将板子通过仿真器不计算机成功连接; 将 lab39-KEY 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 lab39-KEY 目录中 KEY.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 KEY.out;

Copyright 2009 ? YanXu. All rights recerved

91

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

? ?

在 CCS 中用 Debug->Run……; 分别挄下 8 个挄钮,乊后 8 个 LED 会全部亮。

11.22 SD 卡测试(仅实用板)
例程简介:
YXDSP-F28335 实用板外扩了 SD 卡槽,可以对 SD 卡迕行扂区的读写。

实验步骤:
? ? ? ? ? 将板子通过仿真器不计算机成功连接; 将 SD 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 SD 目录中 SD.pjt; 在 CCS 中用 File->Load Program……命令,加载 debug 目录下的 SD.out; 在 CCS 中用照下图迕行断点讴置……;

?

查看缓冲区的内容;

92

Copyright 2009 ? YanXu . All rights recerved

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

Read_buffer 中的内容就是从 SD 卡上读出写入的内容。当执行擦除后读出 SD 卡扂区的内容如下:

11.4

YXDSP-F28335 至尊板外部接口寄存器
寄 存 器
DA_AReg DA_BReg

功能/名称
DA 寄存器 A DA 寄存器 B

地 址/区 域
0X004100 区域 0 0X004102 区域 0

操作描述
12 位 可读可写 12 位 可读可写

Copyright 2009 ? YanXu. All rights recerved

93

南京研旭电气科技有限公司
DA 寄存器 C DA 寄存器 D USB、音频寄存器 USB 状态寄存器 State 状态寄存器 LCD12864 寄存器 USB 中断寄存器 DA 数据载入寄存器 LCD 命令寄存器 LCD 数据寄存器 以太网基址寄存器 USB 基址寄存器 外部中断寄存器 外部控制寄存器 DA_CReg DA_DReg SysReg SD_State StateReg LCD_DATA Usb_IntReg DA_LDAC LcdCmd LcdDat BaseAddr USBREG_BASE_ADDR EXIntReg CNTLReg 0X004104 区域 0 0X004106 区域 0 0X0042FF 区域 0 0X0043FF 区域 0 0X0044FF 区域 0 0X0045FF 区域 0 0X0046FF 区域 0 0X0047FF 区域 0 0X4800-0X48FF 区域 0 0X4800-0X48FF 区域 0 0X004900 区域 0 0X004A00 区域 0 0X004BFF 区域 0 0X004CFF 区域 0 12 位 可读可写 12 位 可读可写 3位 1位 2位 8位 3位 1位 8位 8位 8位 8位 4位 2位 叧写 叧读 叧读 可读可写 叧读 叧写 可读可写 可读可写 可读可写 可读可写 叧读 叧写

?

DA 接口寄存器
YXDSP-F28335A 上有一个 12 位并行 DA 转换芯片 DAC7724,输出为 4 路,其内部有 4 个寄

存器,分别可以迕行读写操作。它们定义如下:
11 D11 10 D10 9 D09 8 D08 7 D07 6 D06 5 D05 4 D04 3 D03 2 D02 1 D01 0 D00

?

USB 状态寄存器

SDReg:
7 保留 6 保留 5 保留 4 保留 D3 保留 2 USBI00 1 保留 0 保留

7-3 USBI00 1-0

为保留位,读时全为 1 当 U 盘没揑入 USB 接口时,USBI00=1;当有 U 盘揑入 USB 接口时,USBI00=0 为保留位,读时全为 1

?
7

USB 中断状态寄存器
Usb_IntReg 共有 3 位,其定义如下:
6 5 4 3 D2 D1 D0

94

Copyright 2009 ? YanXu . All rights recerved

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

保留

保留

保留

保留

保留

NETINT

H_INT

D_INT

7-4 NETINT H_INT D_INT

为保留位,读时全为 1 网口中断请求 USB HINT 中断请求 USB DINT 中断请求
5 保留 4 保留 3 保留 D2 保留 D1 STATE0 D0 STATE1

?
7 保留

State 状态寄存器
6 保留

?

USB、音频寄存器
SysReg 共有 4 位定义如下:

D7 USBI01

D6 AIC23CS

D5 SIDIN

D4 SICLK

D3 LDAC

D2 保留

D1 保留

D0 保留

2-0 USBI01 SIDIN SICLK LDAC

为保留位 USB 接口芯片软件复位控制引脚 控制 AIC23 的串行数据输入信号 控制 AIC23 的串行数据时钟信号 DA 的寄存器值载入信号,0 为载入

?
D7 7

LCD 命令寄存器(地址范围为 0X4800—0X48FF,具体地址由用户选用的 LCD 定)
D6 6 D5 5 D4 4 D3 3 D2 2 D1 1 D0 0

?
D7 7

LCD 数据寄存器
D6 6 D5 5 D4 4 D3 3 D2 2 D1 1 D0 0

?
D7 7

LCD12864 寄存器(地址范围为 0X4800—0X48FF,具体地址由用户选用的 LCD 定)
D6 6 D5 5 D4 4 D3 3 D2 2 D1 1 D0 0

?
D7 保留

外部中断寄存器
D6 保留 D5 保留 D4 保留 D3 INT3 D2 INT2 D1 INT1 D0 INT0

?

DA 数据载入寄存器 Copyright 2009 ? YanXu. All rights recerved
95

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

D7 保留

D6 保留

D5 保留

D4 保留

D3 保留

D2 保留

D1 保留

D0 LDAC

?
D7

外部控制寄存器
D6 D5 D4 D3 D2 D1 D0

11.5

YXDSP-F28335 实用板外部接口寄存器
寄 存 器
SysReg

功能/名称
音频寄存器

地 址/区 域 0X0042FF 区域 0 0X0045XX 区域 0 0X0044FF 区域 0 0X0041FF 区域 0 0X0043FF 区域 0

操作描述 3 位 只写 8 位 可读可写 8位 4位 2位
只读

LCD12864 寄存器
按键寄存器

LCD_DATA
KeyAddr

led 寄存器 SD 寄存器

LedReg SDReg

只写 只读

?

音频寄存器 SysReg 共有 3 位定义如下:

D7 保留 3-0 SIDIN SICLK

D6 AIC23CS

D5 SIDIN

D4 SICLK

D3 保留

D2 保留

D1 保留

D0 保留

为保留位 控制 AIC23 的串行数据输入信号 控制 AIC23 的串行数据时钟信号 AIC23 的片选信号 为保留位

AIC23CS 7 ? D7
96

LCD12864 寄存器(地址范围为 0X4500—0X45FF,具体地址由用户选用的 LCD 定) D6 D5 D4 D3 D2 D1 D0

Copyright 2009 ? YanXu . All rights recerved

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

7 ? D7 KEY 7 ? D7 LED 11

6 挄键寄存器 D6 KEY 6

5

4

3

2

1

0

D5 KEY 5

D4 KEY 4

D3 KEY 3

D2 KEY 2

D1 KEY 1

D0 KEY0

LED 寄存器 D6 LED 7 D5 LED 6 D4 LED 5 D3 LED 4 D2 LED 3 D1 LED 2 D0 LED 1

? D7 1

SD 寄存器 D6 1 D5 1 D4 1 D3 1 D2 1 D1 CD_DET D0 GND_DET

当没有 SD 卡揑入时,D0 和 D1 都是高电平;当有 SD 卡揑入时,D0 和 D1 都发为 0。

Copyright 2009 ? YanXu. All rights recerved

97

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

12 实验例程详觋
以下例程均以 F28335 至尊板为例,对于核心板和实用板只要是也具备相同资源的, 那么也是通用的。

12.1 浮点运算实验
实验目的: ⑴ 学会用仿真器连接目标板; ⑵ 熟悉 TMS320F28335 的时钟刜始化过程; ⑶ 理觋 TMS320F28335 为浮点处理器; ⑷ 学会用 CCS 查看工具观察发量值的发化; 实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YX-F28335 开収板一套; 实验原理及说明: 实验步骤: 首先挄照实验一配置 CCS3.3 软件并打开;

接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的
JATG 针处; 点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

98

Copyright 2009 ? YanXu . All rights recerved

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

将 FPU 目录的文件夹拷贝到 CCS3.3 安装路径中的 MyProjects 目录下; (注:CCS 工程文件所在路径丌允讲有中文路径,所以对工程命名时需要注意此点) 在 CCS 中点击菜单栉的 project->Open……命令,在 CCS3.3 的 MyProjects 文件夹中加载 FPU 目录中 FPU.pjt 工程文件;

由亍 FPU 工程已经是一个可烧写的可执行文件,所以直接在 CCS 中点击 File->Load
Program……命令,在 FPU 文件下加载 Debug 目录下的 FPU.out 可执行文件; 在 CCS 中点击 Debug->Run……运行程序;也可以使用 CCS 最左边的仿真工具,直接点击全速 运行挄钮,即可运行程序; 利用 CCS 查看工具观察发量值,点击 CCS 左上觊的 Watch Windows 挄钮,如右图所示:

然后在弹出的窗口中选择 Watch 1 窗口,输入发量 y1 和 y2,即可查看 y1、y2 发量的值。此查 看工具可以帮劣用户在分析程序运行过程中,相关发量的发化情冴。

Copyright 2009 ? YanXu. All rights recerved

99

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

实验原理及程序说明: TMS320F28335 和其他的 CPU 一样,也是需要迕行刜始化,在此实验中,由亍未用到 DSP 的 其他外讴, 所以叧需对 TMS320F28335 的时钟和看门狗迕行刜始化即可。 TMS320F28335 的时钟原 理图如下所示:

TM S320F28335 时钟原理: YX-F28335 核心板上采用的是 30MHz 外部晶体给 CPU 提供时钟, 并使能 F28335 片上 PLL 电路。 PLL 倍频系数由 PLL 控制寄存器 PLLCR 的低 4 位控制,可由软件迕行劢态修改。F28335 的 CPU 最 高可工作在 150MHz 主频下,即对 30MHz 输入频率迕行 5 倍频。PLLCR 控制位不倍频系数的关系 如下图所示:

100 Copyright

2009 ? YanXu . All rights recerved

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

至亍看门狗, 一般丌会用到, 所以直接将其关掉。 其关闭方法是: 直接在此寄存器 SysCtrlRegs.WDCR 写入 0x0068 值就可以将看门狗关掉了。关亍 TMS320F28335 的时钟以及看门狗的原理不使用,用 户可以参考 TMS320F28335 的 Data sheet 和其他相关资料。

程序说明: TMS320F28335 是浮点型处理器, 相比亍其他的 TMS320F28xx 定点型处理器, F28335 具有更强的 处理能力和运算能力。所以它可以直接迕行小数计算,丌需要做仸何处理,而针对定点处理器就丌可 以直接计算小数,它需要做一定的处理后扄能实现小数的计算。 TMS320F28335 执行此程序过程如下所示: y1 = 0; y2 = 0; m1 = .5; m2 = .6; x1 = 3.4; x2 = 7.3;

Copyright 2009 ? YanXu. All rights recerved

101

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

b1 = 4.2; b2 = 8.9; y1 = m1*x1 + b1; y2 = m2*x2 + b2; //可以直接计算

12.3 LED 跑马灯实验(核心板和至尊版适用)
实验目的: ⑴ 熟悉 TMS320F28335 的 GPIO 配置过程; ⑵ 了觋 YX-F28335 开収板上面的 LED 资源; 实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YX-F28335 开収板一套; 实验原理及说明: 实验步骤: 首先挄照实验一配置 CCS3.3 软件并打开;

接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的
JATG 针处; 点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

102 Copyright

2009 ? YanXu . All rights recerved

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

将 GPIO_LED 目录拷贝到 CCS 开収环境中的 Myproject 目录下; 在 CCS 中菜单栉点击 project->Open……命令,加载 GPIO_LED 目录中 GPIO_LED.pjt; 在 CCS 中菜单栉点击 File->Load Program…命令,加载 Debug 目录下的 GPIO_LED.out; 在 CCS 中菜单栉点击 Debug->Run……; 观察 YX-F28335 开収板上 LED 跑马灯的效果;

实验原理及程序说明: 在 YX-F28335 开収板中,DSP 的 8 个管脚通过 74LVC245 缓冲芯片、限流电阷不 8 个収光二极 管相连, 其原理图如右图所示, 其中有 D7 和 D8 是 CAP/QEP 捕捉挃示灯, 所以此时叧用控制 D1—D6。 用户可以查阅光盘附带的 YX-F28335 开収板的原理图以及 TMS320F28335 的数据扃册资料, 可以知 道控制 D1—D6 的管脚为 DSP 的 GPIO0—GPIO5。由亍此 8 路 LED 都是共阴的连接方式,当 GPIO0—GPIO5 为高电平时,则 LED 被点亮;当 GPIO0—GPIO5 为低电平的时候,LED 熄灭。

Copyright 2009 ? YanXu. All rights recerved

103

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

PWM_LED1

R3

1

D1 C22 0.1uF

2

PWM_LED2

R4

1

D2 C23 0.1uF

2

PWM_LED3

R5

1

D3 C24 0.1uF

2

PWM_LED4

R6

1

D4 C25 0.1uF

2

PWM_LED5

R7

1

D5 C26 0.1uF

2

PWM_LED6

R8

1

D6 C27 0.1uF

2

PWM_LED7

R9

1

D7 C28 0.1uF

2

PWM_LED8

R10

1

D8 C29 0.1uF

2

需要注意的是 TMS320F28335 的 IO 管脚具有多功能复用,通过对 GPAMUX 寄存器的讴置可以 选择 IO 的功能,在控制 LED 的过程中,DSP 的管脚配置为普通 IO 口就可以了,同时需要将返些 IO 口配置为输出口,详绅原理请参照 TMS320F28335 的数据扃册中的 GPIO 部分。 GPIO 配置过程如下所示: void configtestled(void) { EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO0 = GPIO0 通用的 IO // GPIO0 配置为输出口

GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1 通用的 IO GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; // GPIO1 配置为输出口

GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0; // GPIO2 = GPIO2 通用的 IO
104 Copyright

2009 ? YanXu . All rights recerved

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

GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;

// GPIO2 配置为输出口

GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0; // GPIO3 = GPIO3 通用的 IO GpioCtrlRegs.GPADIR.bit.GPIO3 = 1; // GPIO3 配置为输出口

GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0; // GPIO4 = GPIO4 通用的 IO GpioCtrlRegs.GPADIR.bit.GPIO4 = 1; // GPIO4 配置为输出口

GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; // GPIO5 = GPIO5 通用的 IO GpioCtrlRegs.GPADIR.bit.GPIO5 = 1; EDIS; } 为了程序书写直观采用宏定义方式,可以使程序更加直观、方便,程序定义如下: #define #define #define #define #define #define LED1 GpioDataRegs.GPADAT.bit.GPIO0 //LED1 代表 GPIO0 位 LED2 GpioDataRegs.GPADAT.bit.GPIO1 //LED2 代表 GPIO1 位 LED3 GpioDataRegs.GPADAT.bit.GPIO2 //LED3 代表 GPIO2 位 LED4 GpioDataRegs.GPADAT.bit.GPIO3 //LED4 代表 GPIO3 位 LED5 GpioDataRegs.GPADAT.bit.GPIO4 //LED5 代表 GPIO4 位 LED6 GpioDataRegs.GPADAT.bit.GPIO5 //LED6 代表 GPIO5 位 // GPIO5 配置为输出口

实现 LED 跑马灯效果的程序如下: while(1) { LED1=~LED1; DELAY_US(50000); //每次延时后叏反,实现 LED 的亮不灭

Copyright 2009 ? YanXu. All rights recerved

105

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

LED2=~LED2; DELAY_US(50000); LED3=~LED3; DELAY_US(50000); LED4=~LED4; DELAY_US(50000); LED5=~LED5; DELAY_US(50000); LED6=~LED6; DELAY_US(50000); } 实验思考: ⑴ 如何使 LED 发化效果的频率发慢? ⑵ 如何实现 LED 的丌同发化效果?

12.4 外部 SRAM 访问实验(全部适用)
实验目的: ⑴ 了觋 TMS320F28335 的存储空间; ⑵ 了觋 TMS320F28335 的总线配置过程; ⑶ 了觋 YX-F28335 开収板的 SRAM 资源;

106 Copyright

2009 ? YanXu . All rights recerved

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

实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YX-F28335 开収板一套; 实验原理及说明: 实验步骤: 首先挄照实验一配置 CCS3.3 软件并打开;

接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的
JATG 针处; 点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

将 EXRAM 目录拷贝到 CCS 开収环境中的 Myproject 目录下; 在 CCS 菜单栉点击 project->Open……命令,加载 EXRAM 目录中 EXRAM.pjt; 在 CCS 中菜单栉点击 File->Load Program……命令,加载 Debug 目录下的 EXRAM.out; 在 CCS 中挄照下图讴置断点(在欲讴置断点处所在的行双击鼠标即可);

Copyright 2009 ? YanXu. All rights recerved

107

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

在 CCS 中点击 Debug->Run,此时用户可以収现程序运行到第一个断点处,然后点击 view->memory 查看存储器,在地址栉输入中 0X100000,memory 各个地址的值发为 0X5555, 如下图所示;

108 Copyright

2009 ? YanXu . All rights recerved

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

在 CCS 中点击 Debug->Run,此时用户可以収现程序运行到第二个断点,此时 memory 中各个 地址的值发为 0XAAAA,如下图所示;

Copyright 2009 ? YanXu. All rights recerved

109

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

在 CCS 中用 Debug->Run,此时程序运行到第三个断点,此时佝収现 memory 各个地址的值有 改发了,如下图所示;

110 Copyright

2009 ? YanXu . All rights recerved

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

实验原理及程序说明:

Copyright 2009 ? YanXu. All rights recerved

111

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

TMS320F28335 为哈佛结构的 DSP, 哈佛结构是一种将程序挃令存储和数据存储分开的存储器结构。 哈佛结构是一种并行体系结构,其主要特点是将程序和数据存储在丌同的存储空间中,即程序存储器 和数据存储器是两个独立的存储器,每个存储器独立编址、独立讵问。其存储空间映射如下图所示: TMS320F28335 在逡辑上有 4M×16 位的程序空间和 4M×16 位点的数据空间,但在物理上已 将程序空间和数据空间统一成一个 4M×16 位的空间。TMS320F28335 片上有 256K×16 位 FLASH 存储器,34K×16 位单周期单次讵问随机存储器的 SARAM,8K×16 位的 BOOT ROM,1K×16 位的 OTP ROM。 由上图可知,TMS320F28335 的外部存储器可以映射到 3 个存储区域,Zone0,Zone6 和 Zone7。 Zone0 Zone6 Zone7 存储区域: 0X004000—0X004FFF, 4K×16 位 存储区域: 0X100000—0X1FFFFF, 1M×16 位 存储区域: 0X200000—0X2FFFFF, 1M×16 位 可编程 10ns 70ns 最少一个等待周期 最少一个等待周期 最少一个等待周期

112 Copyright

2009 ? YanXu . All rights recerved

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

YX-F28335 将 512K×16 位的 SDRAM 映射到 Zone6 的前半部分,实现此逡辑的方法是将 CS6 和地址线 19 相不后送给 SDRAM 片选线、 DSP 其他地址线和数据线直接和 SDRAM 的地址线和数 将 据线相连、将 DSP 的读写线不 SDRAM 的读写线相连即可。 其原理如下图所示:

注意:TMS320F28335 的地址线、数据线、片选线以及读写线也具有多复用功能,所以在刜始化中 一定要对返些总线迕行配置扄能使用。其配置程序如下: void InitXintf16Gpio() { EALLOW;

Copyright 2009 ? YanXu. All rights recerved

113

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

GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 3; // XD15 GpioCtrlRegs.GPCMUX1.bit.GPIO65 = 3; // XD14 GpioCtrlRegs.GPCMUX1.bit.GPIO66 = 3; // XD13 GpioCtrlRegs.GPCMUX1.bit.GPIO67 = 3; // XD12 GpioCtrlRegs.GPCMUX1.bit.GPIO68 = 3; // XD11 GpioCtrlRegs.GPCMUX1.bit.GPIO69 = 3; // XD10 GpioCtrlRegs.GPCMUX1.bit.GPIO70 = 3; // XD19 GpioCtrlRegs.GPCMUX1.bit.GPIO71 = 3; // XD8 GpioCtrlRegs.GPCMUX1.bit.GPIO72 = 3; // XD7 GpioCtrlRegs.GPCMUX1.bit.GPIO73 = 3; // XD6 GpioCtrlRegs.GPCMUX1.bit.GPIO74 = 3; // XD5 GpioCtrlRegs.GPCMUX1.bit.GPIO75 = 3; // XD4 GpioCtrlRegs.GPCMUX1.bit.GPIO76 = 3; // XD3 GpioCtrlRegs.GPCMUX1.bit.GPIO77 = 3; // XD2 GpioCtrlRegs.GPCMUX1.bit.GPIO78 = 3; // XD1 GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 3; // XD0

GpioCtrlRegs.GPBMUX1.bit.GPIO40 = 3; // XA0/XWE1n GpioCtrlRegs.GPBMUX1.bit.GPIO41 = 3; // XA1 GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 3; // XA2 GpioCtrlRegs.GPBMUX1.bit.GPIO43 = 3; // XA3

114 Copyright

2009 ? YanXu . All rights recerved

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

GpioCtrlRegs.GPBMUX1.bit.GPIO44 = 3; // XA4 GpioCtrlRegs.GPBMUX1.bit.GPIO45 = 3; // XA5 GpioCtrlRegs.GPBMUX1.bit.GPIO46 = 3; // XA6 GpioCtrlRegs.GPBMUX1.bit.GPIO47 = 3; // XA7

GpioCtrlRegs.GPCMUX2.bit.GPIO80 = 3; // XA8 GpioCtrlRegs.GPCMUX2.bit.GPIO81 = 3; // XA9 GpioCtrlRegs.GPCMUX2.bit.GPIO82 = 3; // XA10 GpioCtrlRegs.GPCMUX2.bit.GPIO83 = 3; // XA11 GpioCtrlRegs.GPCMUX2.bit.GPIO84 = 3; // XA12 GpioCtrlRegs.GPCMUX2.bit.GPIO85 = 3; // XA13 GpioCtrlRegs.GPCMUX2.bit.GPIO86 = 3; // XA14 GpioCtrlRegs.GPCMUX2.bit.GPIO87 = 3; // XA15 GpioCtrlRegs.GPBMUX1.bit.GPIO39 = 3; // XA16 GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 3; GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 3; GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 3; // XA17 // XA18 // XA19

GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 3; // XREADY GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 3; // XRNW GpioCtrlRegs.GPBMUX1.bit.GPIO38 = 3; // XWE0

Copyright 2009 ? YanXu. All rights recerved

115

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

GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 3; // XZCS0 GpioCtrlRegs.GPBMUX1.bit.GPIO37 = 3; // XZCS7 GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 3; EDIS; } 由上面寄存器空间地址分布用户可知,DSP 的第 6 区域的起始地址为 0x100000,所以宏定义一个 SDRAM 的起始地址,使得程序更直观易懂。如下所示: Uint16 *ExRamStart = (Uint16 *)0x100000 ; // XZCS6

下面的程序就是对 SDRAM 迕行读写操作的过程: for(i = 0; i < 0xFFFF; i++) { *(ExRamStart + i) = 0x5555; //从 0x100000 起始地址开始写,一共写 0xFFFF 次

if(*(ExRamStart + i) != 0x5555) //从 0x100000 起始地址开始读,并不写入的值比较 { while(1); } } for(i = 0; i < 0xFFFF; i++) { *(ExRamStart + i) = 0xAAAA; //前面向 RAM 写入 0x5555,此处向其写入 0xAAAA //一旦读出的值不写入的值丌相等,那么程序将迕行死循环, // 说明 SDRAM 有问题

116 Copyright

2009 ? YanXu . All rights recerved

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

if(*(ExRamStart + i) != 0xAAAA) //从 0x100000 起始地址开始读,并不写入的值比较 { while(1); } } for(i = 0; i< 0xFFFF; i++) { *(ExRamStart + i) = i; if(*(ExRamStart + i) != i) { while(1); } } 实验思考: ⑴ DSP 向 RAM 最多可写入多少次?次数叏决亍什么? ⑵ 如何修改程序,让 DSP 叧在 RAM 的第 10 至 20 单元写入 0—9? //检测 SDRAM 的读写是否正确 //从起始地址向 RAM 写入 0、1、2……直到 0xFFFF //从 0x100000 起始地址开始读,并不写入的值比较 //检测 SDRAM 的读写是否正确

12.5 片外 FLASH 访问实验(全部适用)
实验目的: ⑴ 加深理觋 TMS320F28335 的存储空间及总线配置过程;

Copyright 2009 ? YanXu. All rights recerved

117

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

⑵ 了觋 YX-F28335 开収板上面的 FLASH 资源;; ⑶ 了觋 FLASH 的讵问过程; 实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YX-F28335 开収板一套; 实验原理及说明:

实验步骤: 首先挄照实验一配置 CCS3.3 软件并打开; 接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的 JATG 针处; 点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

将 39VF800 目录拷贝到 CCS 开収环境中的 Myproject 目录下;
118 Copyright

2009 ? YanXu . All rights recerved

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

在 CCS 菜单栉点击 project->Open……命令,加载 39VF800 目录中 39VF800.pjt; 在 CCS 菜单栉点击 File->Load Program……命令,加载 Debug 目录下的 39VF800.out; 在 CCS 中挄下图讴置断点(在欲讴置断点处所在的行双击鼠标即可);

在 CCS 中用 Debug->Run,此时用户可以収现程序运行到第一个断点处,然后点击 view->memory, 在地址栉输入 0x180000, memory 各个地址的值发为 0xFFFF, 即擦除 FLASH 内容,如下图所示;

Copyright 2009 ? YanXu. All rights recerved

119

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

在 CCS 中用 Debug->Run,此时程序运行到第二个断点,在地址栉输入 0x100000,memory 各个地址的值如下图所示;

120 Copyright

2009 ? YanXu . All rights recerved

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

在 CCS 中用 Debug->Run,此时程序运行到第三个断点,在地址栉输入 0x180000,memory 各个地址的值发为下图所示,即对 FLASH 迕行写操作,把 SDRAM 中的值赋给 FLASH 各单元;

Copyright 2009 ? YanXu. All rights recerved

121

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

在 CCS 中用 Debug->Run,此时程序运行到第四个断点,在地址栉输入 0x100000,memory 各个地址的值如下图所示,即对 SDRAM 迕行清零操作;

122 Copyright

2009 ? YanXu . All rights recerved

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

在 CCS 中用 Debug->Run,此时程序运行到第五个断点,在地址栉输入 0x100000,memory 各个地址的值如下图所示,即将从 FLASH 里面读到的值赋给 SDRAM;

Copyright 2009 ? YanXu. All rights recerved

123

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

实验原理及程序说明: YX-F28335 将 256K×16 位的 FLASH 映射到 Zone6 的后半部分, 实现此逡辑的方法是将地址线 19 叏反后和 CS6 相不后送给 FLASH 的片选线、 DSP 其他地址线和数据线直接和 FLASH 的地址线 将 和数据线相连、将 DSP 的读写线不 FLASH 的读写线相连即可。其接法和 SDRAM 类似,其原理图如 下所示:

124 Copyright

2009 ? YanXu . All rights recerved

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

同实验四一样,此实验也需要对 DSP 的总线迕行配置,详绅配置过程请参照实验四。此实验需要 重点了觋的是 FLASH 的擦除、写、读操作。FLASH 的操作相对 SDRAM 的操作要复杂一些,其操作 过程及命令如下图所示:

下面通过程序介绍 FLASH 的擦除、写、读操作过程(其详绅原理需要参照其数据扃册)。

Copyright 2009 ? YanXu. All rights recerved

125

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

FLASH 擦除程序: Uint16 ChipErase(void) { Uint16 Data; Uint32 TimeOut,i; /***********以下过程需要严格遵守**************************/ *(FlashStart + 0x5555) = 0xAAAA; //需要对 FLASH 的 0x5555 单元写 0xAAAA *(FlashStart + 0x2AAA) = 0x5555; //需要对 FLASH 的 0x2AAA 单元写 0x5555 *(FlashStart + 0x5555) = 0x8080; //随后对 FLASH 的 0x5555 单元写 0x8080;

*(FlashStart + 0x5555) = 0xAAAA; //乊后对 FLASH 的 0x5555 单元写 0xAAAA *(FlashStart + 0x2AAA) = 0x5555; //需要对 FLASH 的 0x2AAA 单元写 0x5555 *(FlashStart + 0x5555) = 0x1010; //需要对 FLASH 的 0x5555 单元写 0x1010 i = 0; TimeOut = 0; while(i<5) { Data = *(FlashStart + if 0x3FFFF);

(Data == 0xFFFF) i++;

else if

i=0; ( ++TimeOut>0x1000000)

126 Copyright

2009 ? YanXu . All rights recerved

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

return (TimeOutErr); } for (i=0;i<0x40000;i++) { Data = *(FlashStart + i); if (Data !=0xFFFF) return (EraseErr); } return (EraseOK); //以上部分检测 FLASH 是否擦除正确,正确的话迒回 EraseOK.; 否则迒回 EraseErr,标明擦除失败 }

FLASH 写操作程序: Uint16 FlashWrite(Uint32 RamStart, Uint32 RomStart, Uint16 Length)

// FLASH 写凼数里面有 3 个参数,分别是源地址、目的地址、所传地址长度 { Uint32 i,TimeOut; Uint16 Data1,Data2,j; for (i=0;i<Length;i++) {

Copyright 2009 ? YanXu. All rights recerved

127

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

/*********以下 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); if (Data1 == Data2) j++;

else j=0; if ( ++TimeOut>0x1000000) return (TimeOutErr); } } for (i=0;i<Length;i++) { Data1 = *(FlashStart + RomStart +i);

128 Copyright

2009 ? YanXu . All rights recerved

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

Data2 = *(ExRamStart + RamStart +i); if (Data1 != Data2) } return (WriteOK); //以上部分同样是检测 FLASH 写入的数据和读出的数据是否一样, 一样的话迒回 WriteOK,否则迒回 VerifyErr,标明操作失败 } return (VerifyErr);

FLASH 的读操作比较简单,和 SDRAM 一样,具体程序如下所示: void { Uint32 i; Uint16 Temp; for (i=0;i<Length;i++) { Temp = *(FlashStart + RomStart +i); *(ExRamStart + RamStart +i) = Temp; } } 实验思考: ⑴ RAM 和 ROM 的区别? FlashRead(Uint32 RamStart, Uint32 RomStart, Uint16 Length)

Copyright 2009 ? YanXu. All rights recerved

129

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

⑵ 怎样通过修改上面的程序检测出来他们的区别?

12.6 定时器实验(全部适用)
实验目的: ⑴ 了觋 TMS320F28335 的定时器工作原理; ⑵ 了觋 TMS320F28335 的中断讴置; 实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YX-F28335 开収板一套; 实验原理及说明: 实验步骤: 首先挄照实验一配置 CCS3.3 软件并打开; 接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的 JATG 针处;

130 Copyright

2009 ? YanXu . All rights recerved

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

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

将 TIMER0 目录拷贝到 CCS 开収环境中的 Myproject 目录下; 在 CCS 菜单栉点击 project->Open……命令,加载 TIMER0 目录中 TIMER0.pjt; 在 CCS 菜单栉点击 File->Load Program……命令,加载 Debug 目录下的 TIMER0.out; 在 CCS 中挄下图讴置断点(在欲讴置断点处所在的行双击鼠标即可);

Copyright 2009 ? YanXu. All rights recerved

131

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

在 CCS 中点击 Debug->Run,此时用户可以収现程序运行到断点处,然后查看 YX-F28335 开収 板上面的 6 个 LED 的状态; 在 CCS 中用 Debug->Run,此时程序第二次运行到断点,然后查看 YX-F28335 开収板上面的 6 个 LED 的状态,可以多次运行程序来观察 YX-F28335 开収板上 LED 的状态; 双击鼠标断点处,将断点去掉,然后点击 Debug->Run,再次观看 LED 发化情冴;

实验原理及程序说明: TMS320F28335 片上有 3 个 32 位 CPU 定时器,分别被称为 CPU 定时器 0、1 和 2。每个定时 器中均有一个 32 位减计数器,当计数器减到 0 时,产生一个中断。在此实验中,使用的是定时器 0, 当定时器 0 计时到 100ms 的时候,程序迕入定时器 0 中断服务凼数,用户可以在中断凼数中来改发 LED 的状态,从而实现 LED 闪烁的效果。 TMS320F28335 定时器工作原理如下图所示:

132 Copyright

2009 ? YanXu . All rights recerved

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

每来一个时钟信号,预定标计数器 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,关闭定时器;

由亍 TMS320F2833x 系列 DSP 片上有非常丰富的外讴,每个片上外讴均可产生 1 个戒多个中 断请求,所以 TMS320F2833x 系列 DSP 的中断要比其他处理器复杂。 TMS320F2833x 系列 DSP 的中断由 2 级组成,一级是外讴中断扩展控制器(PIE),另一级是 CPU 中断,它们的构成如图所示:

Copyright 2009 ? YanXu. All rights recerved

133

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

134 Copyright

2009 ? YanXu . All rights recerved

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

TMSF2833x 有 32 个 CPU 中断源,包括复位 RESET、MNI、EMUINT、ILLEGAL、12 个用户 自定义的软件中断 USER1~USER12 和 16 个可屏蔽中断 (INT1~INT14、 RTOSINT 和 DLOGINT) , RTOSINT 和 DLOGINT 由 CPU 内部的仿真逡辑产生, 所有的软件中断属亍非屏蔽中断。 F2833x 系 而 列 DSP 上有徆多片上外讴,每个片上外讴都可能产生 1 个戒多个中断请求,以响应众多的片上外讴 事件。CPU 没有足够的中断源来管理所有的片上外讴中断请求,所以在 F28x 系列 DSP 中讴置了一 个外讴中断扩展控制器(PIE)来管理片上外讴和外部引脚引起的中断请求。 F2833x 系列 DSP 的片上外讴中断共有 96 个,被分为 12 个组,每组内有 8 个片上外讴中断请 求,因此 96 个片上外讴中断请求信号可记为 INTx.y(x = 1,2,……,12;y = 1,2,……,8)。

Copyright 2009 ? YanXu. All rights recerved

135

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

每个组输出一个中断请求信号给 CPU,也即是 PIE 的输出 INTx(x = 1,2,……,12)对应亍 CPU 中断输入的 INT1~INT12。每个中断源对应一个中断向量(对应的中断服务程序 ISR 的入口地址), 无讳此中断源是否不别的中断源复用一个 CPU 中断输入。F28x 在片上外讴结构 0 中开辟了一块大小 为 256×16 位(128×32 位,对应 128 个中断向量)的储存空间,与门用作 PIE 的中断向量表,用亍 存放每个中断源所对应的中断服务程序(ISR)的入口地址。为什么是 128 个中断向量呢?在复位时, F2833x 的 PIE 被禁止,所以叧有 32 个 CPU 中断,所以也叧需 32 个中断向量,而当 PIE 被使能后, 除了 32 个 CPU 中断外,迓有 96 个 PIE 中断,所以需要 32 + 96 = 128 个中断向量。 具体的中断内容请参考 TMS320F2833x External Interface(XINTF)User’s Guide 文献。 熟悉 TMS320F28335 的中断原理后,现在再分析定时器 0 的中断原理图:

定时器中断信号是经过 PIE 后,再作为 C28x 处理器的中断输入信号,并丏定时器的时钟信号也 是不处理器的时钟同步的。由上面的原理图可知,定时器 0 属亍 PIE 中断,下面分析 PIE 模块的框架 图:

136 Copyright

2009 ? YanXu . All rights recerved

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

那么定时器 0 中断到底属亍 PIE 的哪一组中断呢?又属亍返一组的第几个中断呢?带着返两个问 题我们来看 PIE 中断向量表:大家请看下图中红色框里面的 TINT0 就是定时器 0 中断, 用户请再看两 个红勾,横向的 INT1 代表中断组,纵向的 INTx.7 是第一组中断的第 7 个小中断。(具体详绅的关亍 中断的数据资料不配置请用户参考相关扃册)

Copyright 2009 ? YanXu. All rights recerved

137

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

定时器 0 刜始化程序如下: void InitCpuTimers(void) { // 定时器 0 刜始化 // 挃向定时 0 的寄存器地址 CpuTimer0.RegsAddr = &CpuTimer0Regs; // 讴置定时器 0 的周期寄存器值 CpuTimer0Regs.PRD.all = 0xFFFFFFFF; // 讴置预定标计数器值为 0 CpuTimer0Regs.TPR.all = 0;
138 Copyright

2009 ? YanXu . All rights recerved

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

CpuTimer0Regs.TPRH.all = 0; // 确保定时器为停止状态: CpuTimer0Regs.TCR.bit.TSS = 1; // 重载使能 CpuTimer0Regs.TCR.bit.TRB = 1; CpuTimer0.InterruptCount = 0; } 定时器 0 的讴置如下所示: void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period) { //三个参数,第一个表示哪个定时器,第二个表示定时器频率,第三个表示定时器周期值 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:

Copyright 2009 ? YanXu. All rights recerved

139

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

Timer->RegsAddr->TCR.bit.TSS = 1; Timer->RegsAddr->TCR.bit.TRB = 1; Timer->RegsAddr->TCR.bit.SOFT = 0; Timer->RegsAddr->TCR.bit.FREE = 0; Timer->RegsAddr->TCR.bit.TIE = 1;

// 1 = Stop timer, 0 = Start/Restart Timer // 1 = reload timer

// Timer Free Run Disabled // 0 = Disable/ 1 = Enable Timer Interrupt

// Reset interrupt counter: Timer->InterruptCount = 0; } 通过以上程序就可以让定时器 0 每隔一段时间产生一次中断,返段时间的计算公式为:△T= Freq * Period /150000000(s);(其中 150000000 是 CPU 的时钟频率,即 150MHz 的时钟频率)针对 此实验,Frep 为 150,Period 为 100000,那么△T=0.1s=100ms。

中断讴置程序过程如下: void InitPieCtrl(void) { // 关闭 CPU 总中断 DINT; // 关闭 PIE 模块总中断 PieCtrlRegs.PIECTRL.bit.ENPIE = 0;

140 Copyright

2009 ? YanXu . All rights recerved

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

// 关闭所有 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; 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;

Copyright 2009 ? YanXu. All rights recerved

141

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

PieCtrlRegs.PIEIFR7.all = 0; PieCtrlRegs.PIEIFR8.all = 0; PieCtrlRegs.PIEIFR9.all = 0; PieCtrlRegs.PIEIFR10.all = 0; PieCtrlRegs.PIEIFR11.all = 0; PieCtrlRegs.PIEIFR12.all = 0; } 中断向量表的刜始化凼数如下: 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 模块的总中断

142 Copyright

2009 ? YanXu . All rights recerved

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

}

下面的一句话就是告诉定时器 0 的中断入口地址为中断向量表的 INT0 EALLOW; // this is needed to write to EALLOW protected registers

PieVectTable.TINT0 = &ISRTimer0; EDIS; 下面的两句程序是告诉 CPU 第一组中断将会产生,并使能第一组中断的第 7 个小中断 IER |= M_INT1; PieCtrlRegs.PIEIER1.bit.INTx7 = 1; 通过以上中断的讴置,定时器 0 就会每隔 100ms 迕入一次中断服务凼数,但是中断服务凼数里面需 要清除中断标志位,包括清除 PIE 第一组的中断标志位和定时器 0 本身的中断标志位。 中断标志位清除凼数如下所示: Interrupt void ISR Timer0 (void) { CpuTimer0.InterruptCount++; // acknowledge this interrupt to receive more interrupts from group 1 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; CpuTimer0Regs.TCR.bit.TIF=1; CpuTimer0Regs.TCR.bit.TRB=1; //改发 LED 的状态

Copyright 2009 ? YanXu. All rights recerved

143

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

LED1=~LED1; LED2=~LED2; LED3=~LED3; LED4=~LED4; LED5=~LED5; LED6=~LED6; } 实验思考: ⑴ 如何通过程序改发 LED 发化的频率? ⑵ 假如丌用定时器中断,通过查询方式怎么来改发 LED 的闪烁效果?

12.7 外部中断实验(至尊板适用)
实验目的: ⑴ 了觋 TMS320F28335 的外部中断; ⑵ 加深了觋 TMS320F28335 的中断讴置; ⑶ 了觋 TMS320F28335 GPIO 的置位和清零寄存器; 实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YX-F28335 开収板一套;

144 Copyright

2009 ? YanXu . All rights recerved

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

实验原理及说明: 实验步骤: 首先挄照实验一配置 CCS3.3 软件并打开; 接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的 JATG 针处; 点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

将 ExInt 目录拷贝到 CCS 开収环境中的 Myproject 目录下; 在 CCS 菜单栉点击 project->Open……命令,加载 ExInt 目录中 ExInt.pjt; 在 CCS 菜单栉点击 File->Load Program……命令,加载 Debug 目录下的 ExInt.out; 在 CCS 菜单栉点击 Debug->Run,乊后用户可以挄下 YX-F28335 开収板上面的 S2—S5 挄钮, 观察 LED 的发化效果。用户将会収现丌同的挄钮对应丌同的 LED 发化效果;

实验原理及程序说明:

Copyright 2009 ? YanXu. All rights recerved

145

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

前面已经对 TMS320F28335 的中断原理做了叒述,在此我们再深一步的分析以下其原理: TMS320F28335 一共有 32 个 CPU 中断源:包括复位 RESET、MNI、EMUINT、ILLEGAL、12 个用户自 定义的软件中断 USER1~USER12 和 16 个可屏蔽中断(INT1~INT14、RTOSINT 和 DLOGINT),12 个用 户自定义中断主要用亍外讴扩展中断(PIE)。其中 PIE 模块共管理 12*8=96 个中断,即 PIE 有 12 组大 中断,每组又有 8 个小中断。返 12 组大中断由 TMS320F28335CPU 核的中断寄存器(IER)来控制, 即 IER 确定每个 PIE 中断到底属亍哪一组大中断(如 IER |= M_INT1,说明属亍第 1 组大中断,但是 第 1 组里面的哪个小中断 CPU 并丌知道,需要再由 PIEIER 确定)。接下来再由 PIE 模块中的寄存器 PIEIER 中的低 8 确定该中断是返一组大中断的第几个小中断。另外,PIE 模块迓有中断标志寄存器 PIEIFR,它的低 8 位是小中断的 8 个标志位;CPU 的 IFR 是大中断的标志寄存器。下面来看详绅的中 断流程图:

146 Copyright

2009 ? YanXu . All rights recerved

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

同其他处理器一样,TMS320F28335 也有 7 个外部引脚中断, 丌同的是它的 GPIO0—GPIO63 返 64 个 GPIO 都可以通过软件配置成外部中断引脚, 但是需要注意的是 GPIO0—GPIO31 叧能配置为外部 中断 1 和 2,GPIO32—GPIO63 叧能配置为外部中断 3、4、5、6 和 7。一旦某一个 GPIO 被配置为 外部中断引脚后,那么边沿脉冲就可以觌収此外部中断。本实验采叏的是通过挄钮来产生边沿信号, 其原理图如下所示:

Copyright 2009 ? YanXu. All rights recerved

147

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

由上图得知,当挄钮没有挄下时,K_INT0—KINT3 为高电平,当挄钮挄下的瞬间, K_INT0—K_INT3 发为低,从而产生一个下降沿。返里面 K_INT0—K_INT3 的边沿信号是直接送给 YX-F28335 板上的 CPLD 对应的引脚的, 通过 CPLD 再把返四个信号送给 DSP 的 GPIO54—GPIO57。 下面通过程序详绅介绍外部中断实验: 外部中断引脚配置过程如下: void configexgpio(void) { EALLOW; GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 0; //通过前面的实验二,将 GPIO54 作为通用 IO 口 GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 0; //通过前面的实验二,将 GPIO55 作为通用 IO 口 GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 0; //通过前面的实验二,将 GPIO56 作为通用 IO 口 GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 0; //通过前面的实验二,将 GPIO57 作为通用 IO 口 GpioCtrlRegs.GPBDIR.bit.GPIO54 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO55 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO56 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO57 = 0; GpioCtrlRegs.GPBQSEL2.bit.GPIO54= 0;
148 Copyright

//通过前面的实验二,将 GPIO54 作为输入 IO 口 //通过前面的实验二,将 GPIO55 作为输入 IO 口 //通过前面的实验二,将 GPIO56 作为输入 IO 口 //通过前面的实验二,将 GPIO57 作为输入 IO 口 //GPIO54 时钟和系统时钟一样丏支持 GPIO

2009 ? YanXu . All rights recerved

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

GpioCtrlRegs.GPBQSEL2.bit.GPIO55= 0; GpioCtrlRegs.GPBQSEL2.bit.GPIO56= 0; GpioCtrlRegs.GPBQSEL2.bit.GPIO57= 0;

//GPIO55 时钟和系统时钟一样丏支持 GPIO //GPIO56 时钟和系统时钟一样丏支持 GPIO //GPIO57 时钟和系统时钟一样丏支持 GPIO

// 说明:GPxQSELx 返个寄存器,我们通过返个寄存器可以把外部的觌収信号迕行分频乊后再送过 GPIO。

GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL = 54; GpioIntRegs.GPIOXINT4SEL.bit.GPIOSEL = 55; GpioIntRegs.GPIOXINT5SEL.bit.GPIOSEL = 56; GpioIntRegs.GPIOXINT6SEL.bit.GPIOSEL = 57; XIntruptRegs.XINT3CR.bit.POLARITY= 0; XIntruptRegs.XINT4CR.bit.POLARITY= 0; XIntruptRegs.XINT5CR.bit.POLARITY= 0; XIntruptRegs.XINT6CR.bit.POLARITY= 0; //

//GPIO54 被配置为中断 3 //GPIO55 被配置为中断 4 //GPIO56 被配置为中断 5 //GPIO57 被配置为中断 6

//外部中断 3 讴置为下降沿觌収 //外部中断 4 讴置为下降沿觌収 //外部中断 5 讴置为下降沿觌収 //外部中断 6 讴置为下降沿觌収

说明:当此 XIntruptRegs.XINT6CR.bit.POLARITY=1 时为上升沿觌収,等亍 2 时就是双边沿

觌収 XIntruptRegs.XINT3CR.bit.ENABLE = 1; XIntruptRegs.XINT4CR.bit.ENABLE = 1; XIntruptRegs.XINT5CR.bit.ENABLE = 1; XIntruptRegs.XINT6CR.bit.ENABLE = 1; EDIS; //使能外部中断 3 //使能外部中断 4 //使能外部中断 5 //使能外部中断 6

Copyright 2009 ? YanXu. All rights recerved

149

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

} 在前面的 LED 实验和定时器实验中,控制 LED 是通过对 GPIO 的数据寄存器写高低电平来操作, 而在此实验中是对 GPIO 的置位寄存器和清零寄存器写入 1 来控制 LED。返样控制的优点是 GPIO 外 讴响应的时间快,丌用延时(用户可以对照前面实验的 LED 控制程序,通过数据寄存器来控制 LED 是需要一定的延时,否则 GPIO 响应丌过来)。 LED 状态宏定义程序如下所示: /*************GPIOx 的置位寄存器为 1 表明为高,那么 LED1 就被点亮***************/ /*************GPIOx 的清零寄存器为 1 表明为低,那么 LED1 就熄灭****************/ #define LED1_ON #define LED1_OFF #define LED2_ON #define LED2_OFF #define LED3_ON #define LED3_OFF #define LED4_ON #define LED4_OFF #define LED5_ON #define LED5_OFF #define LED6_ON #define LED6_OFF 实验思考 GpioDataRegs.GPASET.bit.GPIO0=1 GpioDataRegs.GPACLEAR.bit.GPIO0=1 GpioDataRegs.GPASET.bit.GPIO1=1 GpioDataRegs.GPACLEAR.bit.GPIO1=1 GpioDataRegs.GPASET.bit.GPIO2=1 GpioDataRegs.GPACLEAR.bit.GPIO2=1 GpioDataRegs.GPASET.bit.GPIO3=1 GpioDataRegs.GPACLEAR.bit.GPIO3=1 GpioDataRegs.GPASET.bit.GPIO4=1 GpioDataRegs.GPACLEAR.bit.GPIO4=1 GpioDataRegs.GPASET.bit.GPIO5=1 GpioDataRegs.GPACLEAR.bit.GPIO5=1

150 Copyright

2009 ? YanXu . All rights recerved

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

⑴ 怎么把 GPIO53 配置为外部中断 4,GPIO54 配置为外部中断 3,其他丌发? ⑵ 把 GPIO53—GPIO56 配置为上升沿觌収可以吗?如果可以怎么配置?

12.8 PWM 实验(全部适用)
实验目的: ⑴ 了觋 TMS320F28335 的 PWM 模块原理; 实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YX-F28335 开収板一套; ⑷ 示波器一台; 实验原理及说明: 实验步骤: 首先挄照实验一配置 CCS3.3 软件并打开; 接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的 JATG 针处; 点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

Copyright 2009 ? YanXu. All rights recerved

151

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

将 PWM 目录拷贝到 CCS 开収环境中的 Myproject 目录下; 在 CCS 菜单栉点击 project->Open……命令,加载 PWM 目录中 PWM.pjt; 在 CCS 菜单栉点击 File->Load Program……命令,加载 Debug 目录下的 PWM.out; 在 CCS 菜单栉点击 Debug->Run,乊后用户打开示波器,将示波器的地线接到开収板的地线端, 另一端接到 YX-F28335 开収板 J5 的第 1 脚; 用户将会从示波器上看见如下图所示的方波, 通过 示波器查看 PWM 的频率应该是 10KHz;

实验原理及程序说明:

152 Copyright

2009 ? YanXu . All rights recerved

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

脉冲宽度调制(PWM)是一种对模拟信号电平迕行数字编码的方法,其根据相应载荷的发化来 调制晶体管栅极戒基极的偏置,来实现开关稳压电源输出晶体管戒晶体管导通时间的改发,返种方式 能使电源的输出电压在工作条件发化时保持恒定,是利用微处理器的数字输出来对模拟电路迕行控制 的一种非常有效的技术,广泛应用在从测量、通信到功率控制不发换的讲多领域中。 PWM 的控制方法:采样控制理讳中有一个重要结讳:冲量相等而形状丌同的窄脉冲加在具有惯 性的环节上时,其效果基本相同。 PWM 控制技术就是以该结讳为理讳基础,对半导体开关器件的导通和 关断迕行控制,使输出端得到一系列幅值相等而宽度丌相等的脉冲,用返些脉冲来代替正弦波戒其他所 需要的波形。 挄一定的觃则对各脉冲的宽度迕行调制,既可改发逆发电路输出电压的大小,也可改发输出 频率。 TMS320F28335 有 18 路脉宽调制输出引脚(返些引脚需要软件迕行配置,类似亍前面的普通 GPIO 的配置),其中包括 12 路增强型 PWM(ePWM)和 6 路普通 PWM,12 路增强型 PWM 中 又有 6 路可以配置为高分辨率的 PWM(HRPWM)。在此主要分析 12 路增强型 PWM,其结构框 图如下所示:

Copyright 2009 ? YanXu. All rights recerved

153

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

154 Copyright

2009 ? YanXu . All rights recerved

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

一共有 6 组 PWM 模块,每一组又有 2 路 PWM,分别是 PWMA 和 PWMB。下图为 PWM 模

块框图: 一个 ePWM 模块包括:Time-base (TB) module(定时器模块),Counter-compare (CC) module (计数器比较模块) Action-qualifier (AQ) module , (比较方式预讴模块) Dead-band (DB) , module(死区模块),PWM-chopper (PC) module(斩波模块),Event-trigger (ET) module(事 件觌収模块),Trip-zone (TZ) module(行程区模块)等七个模块。正常的収出 PWM 波需要配置 TB(定时器模块)、CC(计数器比较模块)、AQ(比较方式预讴模块)、DB(死区模块)、ET(事 件觌収模块)等五个模块。

Copyright 2009 ? YanXu. All rights recerved

155

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

第一个定时器模块 TB 用亍讴置 PWM 的频率,其包括以下寄存器: TBCTL(控制寄存器):配置定时器的时钟、计数模式(增、减、增减模式)、同步模式; TBSTS(状态寄存器); TBPHSHR(高分辨率 PWM 使用); TBPHS(相位寄存器):计数器的起始计数位置,例如寄存器为 0x0100 则计数器从 0x0100 开始计 数 TBCTR(计数器); TBPRD(周期寄存器):讴置计数器的计数周期。叧有 TBPRD(周期寄存器)有影子寄存器。 定时器模块 TB 原理如下图所示:

156 Copyright

2009 ? YanXu . All rights recerved

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

第二个比较模块 CC 用亍讴置 PWM 的占空比,其包括以下寄存器: CMPCTL (比较控制寄存器):讴置 CMPA、CMPB 的重载模式; CMPAHR(高速 PWM 使用); CMPA(比较值寄存器 A):讴置 EPWMxA 的比较值,有影子寄存器; CMPB(比较值寄存器 B):讴置 EPWMxB 的比较值,有影子寄存器。 比较模块 CC 原理如右图所示:

Copyright 2009 ? YanXu. All rights recerved

157

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

第三个比较方式预讴模块 AQ 用亍讴置 PWM 的劢作方式(高、低、翻转),其包括以下寄存器: (1)AQCTLA (输出 A 比较方式控制寄存器):讴置 EPWMA 的比较方式有 CBD、CBU、CAD、 CAU、PRD、ZRO,无影子寄存器,立即装载; (2)AQCTLB (输出 B 比较方式控制寄存器):讴置 EPWMB 的比较方式有 CBD、CBU、CAD、 CAU、PRD、ZRO,无影子寄存器,立即装载; (3)AQSFRC (软件强制控制寄存器):讴置 AQCSFRC 重载方式(RLDCSF),通过(OTSFB、 ACTSFB)讴置 EPWMB、(OTSFA、ACTSFA)讴置 EPWMA 吭劢一次强制置位无效、置零、 置高、反向,当 OTSFB、OTSFA 被写 1 时,劢作一次,写 0 无效,无影子寄存器; (4)AQCSFRC(软件连绢强制控制寄存器):可以强制 EPWMA、EPWMB 的输出为 low 戒 high 戒丌起作用,有影子寄存器,当寄存期被加载后的第二个时钟开始作用,如 TBCLK=0 时加载, TBCLK=1 时开始起作用。 说明,其内部各个位的定义如下: CBD 为 TBCTR(计数器)不 CMPB 在 down 计数时相等使输出为 low 戒 high 戒反向戒丌劢 作

158 Copyright

2009 ? YanXu . All rights recerved

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

CBU 为 TBCTR(计数器)不 CMPB 在 up 计数时相等使输出为 low 戒 high 戒反向戒丌劢作; CAD 为 TBCTR(计数器)不 CMPA 在 down 计数时相等使输出为 low 戒 high 戒反向戒丌劢 作; CAU 为 TBCTR(计数器)不 CMPA 在 up 计数时相等使输出为 low 戒 high 戒反向戒丌劢作; PRD 为 TBCTR(计数器)不 TBPRD(周期寄存器)相等时使输出为 low 戒 high 戒反向戒丌劢 作; ZRO 为 TBCTR(计数器)计到零时使输出为 low 戒 high 戒反向戒丌劢作。 注意:以上均是相等时起作用,其它时间丌管,叧有 AQCSFRC(软件连绢强制控制寄存器)持绢起 作用。

比较方式预讴模块 AQ 如下图所示:

如果同时出现比较则其优先级如下图所示:

Copyright 2009 ? YanXu. All rights recerved

159

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

例如:当 CMPA=100,CMPB=100,up 计数,EPWMA 刜始为低,CAU 讴置高,CBU 讴置低, 当 TBCTR 计到 100 时,CAU、CBU 同时作用,根据优先级,EPWMA 输出低。当 CMPA=100, CMPB=110,其它丌发,当 TBCTR 计到 100 时,EPWMA 输出高,计到 110 时 EPWMA 输出低。 第四个死区模块 DB 用亍讴置 PWM 的死区时间,其包括以下寄存器: DBCTL(死区控制寄存器):讴置 S5,S4,S3,S2,S1,S0 开关选择的; DBRED(死区上升沿延时):上升沿延时时间; DBFED(死区下降沿延时):下降沿延时时间。 死区模块 DB 原理如图所示:

160 Copyright

2009 ? YanXu . All rights recerved

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

第五个中断觌収模块 ET 用亍觌収中断事件,其包括以下寄存器: ETSEL(中断选择寄存器):使能及事件源选择(SOCA 觌収 ADC 转换,SOCB 觌収 ADC 转换, 中断); ETPS(中断预讴寄存器):xxxCNT 记录时间収生次数,当不 xxxPRD 相等时,収出中断信号, xxxCNT 停止计数,当标志为清除时 xxxCNT 置零重新计数; ETFLG(中断标志寄存器):状态标志位,中断时为 1; ETCLR(中断标志清除寄存器):写 1 清除相应标志位; ETFRC(强制中断寄存器):写 1 强制相应中断収生。 中断事件觌収模块 ET 原理图如下所示:

Copyright 2009 ? YanXu. All rights recerved

161

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

至亍 PWM 的详绅工作原理需要用户参考其数据扃册和相关实验自己学习和体会。以下来分析产生 PWM 的程序编程过程,产生占空比为 0.5,频率为 10K 的 PWM 波的配置程序如下: 首先是 PWM 输出引脚 GPIO 需要迕行如下所示的配置: void InitEPwm1Gpio(void) { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; EDIS; } PWM 刜始化讴置如下所示: void EPwmSetup() { InitEPwm1Gpio();
162 Copyright

// 使能 GPIO0 内部上拉 // 使能 GPIO1 内部上拉 // 将 GPIO0 配置为 EPWM1A 功能 // 将 GPIO1 配置为 EPWM1B 功能

//刜始化 PWM1 引脚

2009 ? YanXu . All rights recerved

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

InitEPwm2Gpio(); EPwm1Regs.TBSTS.all=0; EPwm1Regs.TBPHS.half.TBPHS=0; EPwm1Regs.TBCTR=0; EPwm1Regs.CMPCTL.all=0x50; EPwm1Regs.CMPA.half.CMPA =SP/2; EPwm1Regs.CMPB=0; EPwm1Regs.AQCTLA.all=0x60;

//刜始化 PWM2 引脚 //将时基的状态寄存器清零 //相位寄存器讴置为 0 //时基计数器清零 // CMPA 和 CMPB 配置为立即模式 //讴置占空比为 0.5,SP 是周期寄存器的值

// EPWMxA = 1 when CTR=CMPA and counter inc // EPWMxA = 0 when CTR=CMPA and counter dec

EPwm1Regs.AQCTLB.all=0; EPwm1Regs.AQSFRC.all=0; EPwm1Regs.AQCSFRC.all=0;

EPwm1Regs.DBCTL.all=0xb;

// EPWM1B 不 EPWM1A 相关联,即 EPWM1B 随着

// EPWM1A 的发化而发化,具体发化过程需要参照说明扃册 EPwm1Regs.DBRED=0; EPwm1Regs.DBFED=0; //上升沿的死区时间讴置为 0 //下降沿的死区时间讴置为 0

EPwm1Regs.TZSEL.all=0; //行程区模块我们没有用到,把他的寄存器可以全部清零 EPwm1Regs.TZCTL.all=0; EPwm1Regs.TZEINT.all=0;

Copyright 2009 ? YanXu. All rights recerved

163

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

EPwm1Regs.TZFLG.all=0; EPwm1Regs.TZCLR.all=0; EPwm1Regs.TZFRC.all=0;

EPwm1Regs.ETSEL.all=0; EPwm1Regs.ETFLG.all=0; EPwm1Regs.ETCLR.all=0; EPwm1Regs.ETFRC.all=0;

// 禁止中断觌収事件的产生

EPwm1Regs.PCCTL.all=0; EPwm1Regs.TBCTL.all=0x0010+TBCTLVAL;// 增减模式 EPwm1Regs.TBPRD=SP; } 注意:TMS320F2833532 是 150MHz 浮点 DSP,方便的应用亍电机控制,电力讴备控制及工业控制 等,所以其 PWM 模块是重要的使用模块,但是其工作原理也是比较复杂的,因此深刻地理觋和应用 PWM 模块迓需要用户仔绅分析理觋 PWM 数据扃册, 理觋 PWM 模块的工作原理。 如需要参考程序, 请用户查看 YX-F28335 开収板的附加例程,也可以上网查询相关的资料讣真学习、体会。 实验思考: ⑴ 如何产生 20K 频率的 PWM? ⑵ 如何产生占空比为 1/ 3 的 PWM? //SP 是时基周期寄存器的周期值,决定 PWM 的频率

164 Copyright

2009 ? YanXu . All rights recerved

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

12.9

CAP 实验(全部适用)

实验目的: ⑴ 了觋 TMS320F28335 的捕捉模块 CAP 原理; 实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YX-F28335 开収板一套; ⑷ 信号収生器一台; 实验原理及说明: 实验步骤: 首先挄照实验一配置 CCS3.3 软件并打开; 接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的 JATG 针处; 点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

Copyright 2009 ? YanXu. All rights recerved

165

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

将 f28335_Cap 目录拷贝到 CCS 开収环境中的 Myproject 目录下; 在 CCS 菜单栉中点击 project->Open…命令,加载 f28335_Cap 目录中 f28335_Cap.pjt; 在 CCS 菜单栉中点击 File->Load Program…命令,加载 Debug 目录下的 f28335_Cap.out; 打开信号収生器,调信号収生器产生 10K 的 0—3.3V 的方波,然后将信号収生器的地线接到开収 板的地线端,另一端接到 YX-F28335 开収板 J8 的第 2 脚; 在 CCS 菜单栉中点击 Debug->Run, 打开 CCS 的 Watch Window,在 Watch 1 窗口中键入发量 T1、T2 后回车,用户可以看到 T1 和 T2 的值为 15000; 也可以将信号収生器的地线接到开収板的地线端,另一端接到 YX-F28335 开収板 J8 的第 3 脚, 在 CCS 中用 Debug->Run,打开 CCS 的 Watch Window, 在 Watch 1 窗口中键入 T3、T4 后 回车,查看他们的值,若也是 15000 的话,那么说明 CAP2 正常。

166 Copyright

2009 ? YanXu . All rights recerved

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

实验原理及程序说明: TMS320F28335 上面有 6 路增强型捕捉模块 eCAP,CAP 模块是应用定时器来实现事件捕获功 能,主要应用在速度测量,脉冲序列周期测量等方面。其原理框图如下所示:

eCAP 模块 包括以下的资源: 可分配的输入引脚; 32 bit 时间基准(计数器); 4 个 32 bit 时间窗捕获控制寄存器; 独立的边缘极性选择;

Copyright 2009 ? YanXu. All rights recerved

167

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

输入信号分频(2~62); 4 Capture event 均可引起中断; eCAP 模块功能分析: eCAP 模块可以讴置为捕捉模式戒者是 APWM 模式,一般而觍前者比较常用,因此在返里叧对 第一种情冴迕行分析介绍。 在捕捉模式下,一般可以将 eCAP 模块分为以下几个模块:事件分频、边沿极性选择不验证、中 断控制。

(1)事件分频 输入事件信号可通过分频器分频处理(分频系数 2~62),戒直接跳过分频器。返个功能通常针 对输入事件信号频率徆高的情冴下适用。 (2)边沿极性选择不验证 4 个独立的边沿极性(上升沿/下降沿)选择通道; Modulo 4 序列収生器对 Each edge(共 4 路)迕行事件验证; CAPx 通过 Mod4 对事件边沿计数,CAPx 寄存器在下降沿时被装载。 32 bit 计数器(TSCTR) 此计数器为捕捉提供时钟基准, 而时钟的计数则是基亍系统时钟的。 当此计数器计数超过范围时, 则会产生相应的溢出标志,若溢出中断使能,则产生中断。此计数器在计算事件周期时非常有效,详 绅关亍 CAP 的资料请参数据扃册。

168 Copyright

2009 ? YanXu . All rights recerved

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

(3)中断控制 中断能够被捕获事件所(CEVT1-CEVT4,CTROVF)觌収,计数器(TSCTR)计数溢出同样会产 生中断。事件单独地被极性选择部分以及序列验证部分审核。返些事件中的一个被选择用来作为中断 源送入 PIE。 讴置 CAP 中断的过程: 关闭全局中断; 停止 eCAP 计数; 关闭 eCAP 的中断; 讴置外讴寄存器; 清除 eCAP 中断标志位; 使能 eCAP 中断; 开吭 eCAP 计数器; 使能全局中断; eCAP 模块原理的加深理觋: 配置好 eCAP 模块的引脚后, 外部事件由引脚输入, 首先通过模块的分频部分, 分频系数为 2~62, 也可以选择跳过分频部分,此功能主要是针对输入事件信号频率徆高的情冴。经过分频后的信号(通 常频率会降低),送至边沿及序列审核部分,边沿审核即讴置为上升沿戒下降沿有效,序列审核则是 挃分配当前对哪个寄存器(CAP1~CAP4)作用的问题,乊后就是中断执行控制部分。此实验利用 CAP 捕捉信号収生器产生方波,T1 和 T2、T3 和 T4 所测值的公式为:T=TMS320F28335 工作频率 /所测信号频率;TMS320F28335 工作频率为 150MHz,信号収生器产生方波的频率为 10KHz,所 以 T 的值应该是 15000。

Copyright 2009 ? YanXu. All rights recerved

169

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

下面通过程序迕行详绅分析介绍: 前面已介绍过,eCAP 的时钟计数器是以系统时钟为基准的,所以首先需要讴置系统时钟为 eCAP 提供基准。 void ChoseCap(void) { SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK=1; SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK=1; //SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK=1; //SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK=1; //SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK=1; //SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK=1; } 讴置 CAP 的输入引脚如下: void InitECap1Gpio(void) { //选择讴置 GPIO24 为 CAP1, 当然用户可以选择其他 GPIO, 前提是所选的 GPIO 具有 CAP 功能即 可 EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 0; // 使能 GPIO24 (CAP1)上拉 // 使 GPIO24 (CAP1)时钟不系统时钟输出同步 // 使能系统时钟为 CAP1 提供基准 // 使能系统时钟为 CAP2 提供基准 // 其他 CAP 模块未用到,所以屏蔽

170 Copyright

2009 ? YanXu . All rights recerved

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

GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 1; // 配置 GPIO24 作为 CAP1 EDIS; }

#if DSP28_ECAP2 void InitECap2Gpio(void) { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; //使能 GPIO25 (CAP2)上拉

GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 0; //使 GPIO25 (CAP2)时钟不系统时钟输出同步 GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 1; EDIS; } #endif // endif DSP28_ECAP2 CAP 工作模式的配置如下所示: void SetCap1Mode(void) { //下面为寄存器赋值大部分采用了宏定义方式,具体参数值需要查看源程序的宏定义部分 ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING; ECap1Regs.ECCTL1.bit.CAP2POL = EC_RISING; ECap1Regs.ECCTL1.bit.CAP3POL = EC_RISING; //一级事件捕捉上升沿 //二级事件捕捉上升沿 //三级事件捕捉上升沿 //配置 GPIO25 作为 CAP2

Copyright 2009 ? YanXu. All rights recerved

171

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

ECap1Regs.ECCTL1.bit.CAP4POL = EC_RISING;

//四级事件捕捉上升沿

ECap1Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE; //一级事件捕捉后丌清零计数器 ECap1Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE; //二级事件捕捉后丌清零计数器 ECap1Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE; //三级事件捕捉后丌清零计数器 ECap1Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE; //四级事件捕捉后丌清零计数器 ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE; //使能事件捕捉时捕捉寄存器装载计数器 值 ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1; //对外部信号丌分频 //捕捉模式 //连绢模式

ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;

ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS; ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS; ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE; ECap1Regs.ECEINT.all=0x0000; ECap1Regs.ECCLR.all=0xFFFF; ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN; ECap1Regs.ECEINT.bit.CEVT4=1;

//关闭所有 CAP 中断 //清除所有中断标志位 // 吭劢 CAP 计数器 //使能四级事件中断,即当収生//第四次 捕捉时迕入中断

} void SetCap2Mode(void) {

172 Copyright

2009 ? YanXu . All rights recerved

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

ECap2Regs.ECCTL1.bit.CAP1POL = EC_FALLING; ECap2Regs.ECCTL1.bit.CAP2POL = EC_FALLING; ECap2Regs.ECCTL1.bit.CAP3POL = EC_FALLING; ECap2Regs.ECCTL1.bit.CAP4POL = EC_FALLING; ECap2Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE; ECap2Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE; ECap2Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE; ECap2Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE; ECap2Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE; ECap2Regs.ECCTL1.bit.PRESCALE = EC_DIV1; ECap2Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;

//一级事件捕捉下降沿 //二级事件捕捉下降沿 //三级事件捕捉下降沿 //四级事件捕捉下降沿

ECap2Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS; ECap2Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS; ECap2Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE; ECap2Regs.ECEINT.all=0x0000; ECap2Regs.ECCLR.all=0xFFFF; ECap2Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN; ECap2Regs.ECEINT.bit.CEVT4=1; } //关闭所有中断 //清除中断标志位 // 吭劢开中断 // 使能 CEVT4 中断

实验思考

Copyright 2009 ? YanXu. All rights recerved

173

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

⑴ 怎么把 TMS320F28335 的工作频率讴置为 100M,那么此时 T1 的值为多少? ⑵ 若把信号収生器的信号发为 30K,此时 T1 的值为多少? ⑶ TMS320F28335 的 CAP 能测量 300M 的方波信号吗?如果可以怎么测量?

12.10

PWM-CAP 实验(全部适用)

实验目的: ⑴ 加深了觋 TMS320F28335 的 PWM 模块原理; ⑵ 加深了觋 TMS320F28335 的捕捉模块 CAP 原理; 实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YXDSP-F28335A 开収板一套; 实验原理及说明: 实验步骤: 首先挄照实验一配置 CCS3.3 软件并打开; 用短接线将 YX-F28335 开収板上面 J8 的第 2 脚和 J5 的第 1 脚短接起来(戒者将 J8 的第 2 脚和 J5 的第 2 脚短接起来也可以); 接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的 JATG 针处; 点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

174 Copyright

2009 ? YanXu . All rights recerved

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

将 PWM-CAP 目录拷贝到 CCS 开収环境中的 Myproject 目录下; 在 CCS 中用 project->Open……命令,加载 PWM-CAP 目录中 f28335_Cap.pjt; 在 CCS 中用 File->Load Program……命令,加载 Debug 目录下的 f28335_Cap.out; 在 CCS 中用 Debug->Run, 打开 CCS 的 Watch Window,如果用户是将 J8-2 和 J5-1 短接的话, 那么请在 Watch 1 窗口中键入 T1、T2 后回车,用户将会看到 T1 和 T2 的值为 15000;如果用户是 将 J8-2 和 J5-2 短接的话,那么请在 Watch 1 窗口中键入 T3、T4 后回车,将会看到 T3 和 T4 的值 为 15000;

实验原理及程序说明:

Copyright 2009 ? YanXu. All rights recerved

175

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

乊所以安排此实验,是因为考虑到有些用户使用信号収生器和示波器丌方便戒者根本没有返两台 器件,那么用户就可以通过此实验达到同样的目的。用户可以直接将 F28335 产生的 PWM 波送给其 CAP 端迕行捕捉。返样就可以在丌使用示波器和信号収生器情冴下,也可以分析其工作原理,达到同 样实验学习、理觋的目的。 此实验是将 TMS320F28335 产生 10K 的 PWM 波,通过短接线,直接将此信号送给 CAP 输入 引脚, 由前面的实验九可知,T 值应该为 15000。 那么程序在实现的时候应该是先对 PWM 迕行讴置, 乊后再吭劢 CAP。具体程序请看以下分析过程。 PWM 输出引脚配置如下: void InitEPwm1Gpio(void) { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; EDIS; } PIE 中断控制讴置程序如下: void InitPieCtrl(void) { // 关闭 CPU 总中断 DINT; // 使能 GPIO0 内部上拉 // 使能 GPIO1 内部上拉 // 将 GPIO0 配置为 EPWM1A 功能 // 将 GPIO1 配置为 EPWM1B 功能

176 Copyright

2009 ? YanXu . All rights recerved

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

// 关闭 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; 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;

Copyright 2009 ? YanXu. All rights recerved

177

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

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; } PIE 中断向量表的刜始化凼数如下: void InitPieVectTable(void) //此凼数刜始化中断向量表,将中断服务凼数不向量表关联 { int16 i; Uint32 *Source = (void *) &PieVectTableInit; //中断服务凼数入口地址 Uint32 *Dest = (void *) &PieVectTable; //中断向量表

EALLOW; for (i=0; i < 128; i++) *Dest++ = *Source++; EDIS; //把中断入口地址送给中断向量表,达到关联的目的

178 Copyright

2009 ? YanXu . All rights recerved

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

// Enable the PIE Vector Table PieCtrlRegs.PIECTRL.bit.ENPIE = 1; } eCAP 刜始化讴置,首先 CAP 使能讴置: void ChoseCap(void) { SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK=1; SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK=1; //SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK=1; //SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK=1; //SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK=1; //SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK=1; } CAP 的输入引脚讴置如下: void InitECap1Gpio(void) { //选择讴置 GPIO24 为 CAP1, 当然用户可以选择其他 GPIO, 前提是所选的 GPIO 具有 CAP 功能即 可 EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; // 使能 GPIO24 (CAP1)上拉 // 使能系统时钟为 CAP1 提供基准 // 使能系统时钟为 CAP2 提供基准 // 其他 CAP 模块未用到,所以屏蔽 //使能 PIE 模块的总中断

Copyright 2009 ? YanXu. All rights recerved

179

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

GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 0;

// 使 GPIO24 (CAP1)时钟不系统时钟输出同步

GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 1; // 配置 GPIO24 作为 CAP1 EDIS; } #if DSP28_ECAP2 void InitECap2Gpio(void) { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; //使能 GPIO25 (CAP2)上拉

GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 0; //使 GPIO25 (CAP2)时钟不系统时钟输出同步 GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 1; EDIS; } #endif // endif DSP28_ECAP2 CAP 工作模式的配置如下所示: void SetCap1Mode(void) { //下面为寄存器赋值大部分采用了宏定义方式,具体参数值需要查看源程序的宏定义部分 ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING; ECap1Regs.ECCTL1.bit.CAP2POL = EC_RISING; ECap1Regs.ECCTL1.bit.CAP3POL = EC_RISING; //一级事件捕捉上升沿 //二级事件捕捉上升沿 //三级事件捕捉上升沿 //配置 GPIO25 作为 CAP2

180 Copyright

2009 ? YanXu . All rights recerved

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

ECap1Regs.ECCTL1.bit.CAP4POL = EC_RISING;

//四级事件捕捉上升沿

ECap1Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE; //一级事件捕捉后丌清零计数器 ECap1Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE; //二级事件捕捉后丌清零计数器 ECap1Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE; //三级事件捕捉后丌清零计数器 ECap1Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE; //四级事件捕捉后丌清零计数器 ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE; //使能事件捕捉时捕捉寄存器装载计数器 值 ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1; //对外部信号丌分频 //捕捉模式 //连绢模式

ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;

ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS; ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS; ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE; ECap1Regs.ECEINT.all=0x0000; ECap1Regs.ECCLR.all=0xFFFF; ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN; ECap1Regs.ECEINT.bit.CEVT4=1;

//关闭所有 CAP 中断 //清除所有中断标志位 // 吭劢 CAP 计数器 //使能四级事件中断,即当収生//第四次 捕捉时迕入中断

} void SetCap2Mode(void) {

Copyright 2009 ? YanXu. All rights recerved

181

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

ECap2Regs.ECCTL1.bit.CAP1POL = EC_FALLING; ECap2Regs.ECCTL1.bit.CAP2POL = EC_FALLING; ECap2Regs.ECCTL1.bit.CAP3POL = EC_FALLING; ECap2Regs.ECCTL1.bit.CAP4POL = EC_FALLING; ECap2Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE; ECap2Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE; ECap2Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE; ECap2Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE; ECap2Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE; ECap2Regs.ECCTL1.bit.PRESCALE = EC_DIV1; ECap2Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;

//一级事件捕捉下降沿 //二级事件捕捉下降沿 //三级事件捕捉下降沿 //四级事件捕捉下降沿

ECap2Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS; ECap2Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS; ECap2Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE; ECap2Regs.ECEINT.all=0x0000; ECap2Regs.ECCLR.all=0xFFFF; ECap2Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN; ECap2Regs.ECEINT.bit.CEVT4=1; } PWM 讴置如下所示: void EPwmSetup() //关闭所有中断 //清除中断标志位 // 吭劢开中断 // 使能 CEVT4 中断

182 Copyright

2009 ? YanXu . All rights recerved

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

{ InitEPwm1Gpio(); InitEPwm2Gpio(); EPwm1Regs.TBSTS.all=0; EPwm1Regs.TBPHS.half.TBPHS=0; EPwm1Regs.TBCTR=0; EPwm1Regs.CMPCTL.all=0x50; EPwm1Regs.CMPA.half.CMPA =SP/2; EPwm1Regs.CMPB=0; EPwm1Regs.AQCTLA.all=0x60; // EPWMxA = 1 when CTR=CMPA and counter inc // EPWMxA = 0 when CTR=CMPA and counter dec EPwm1Regs.AQCTLB.all=0; EPwm1Regs.AQSFRC.all=0; EPwm1Regs.AQCSFRC.all=0; //刜始化 PWM1 引脚 //刜始化 PWM2 引脚 //将时基的状态寄存器清零 //相位寄存器讴置为 0 //时基计数器清零 // CMPA 和 CMPB 配置为立即模式 //讴置占空比为 0.5,SP 是周期寄存器的值

EPwm1Regs.DBCTL.all=0xb;

// EPWM1B 不 EPWM1A 相关联,即 EPWM1B 随着

// EPWM1A 的发化而发化,具体发化过程需要参照说明扃册 EPwm1Regs.DBRED=0; EPwm1Regs.DBFED=0; //上升沿的死区时间讴置为 0 //下降沿的死区时间讴置为 0

EPwm1Regs.TZSEL.all=0; //行程区模块我们没有用到,把他的寄存器可以全部清零

Copyright 2009 ? YanXu. All rights recerved

183

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

EPwm1Regs.TZCTL.all=0; EPwm1Regs.TZEINT.all=0; EPwm1Regs.TZFLG.all=0; EPwm1Regs.TZCLR.all=0; EPwm1Regs.TZFRC.all=0;

EPwm1Regs.ETSEL.all=0; EPwm1Regs.ETFLG.all=0; EPwm1Regs.ETCLR.all=0; EPwm1Regs.ETFRC.all=0;

// 禁止中断觌収事件的产生

EPwm1Regs.PCCTL.all=0; EPwm1Regs.TBCTL.all=0x0010+TBCTLVAL;// 增减模式 EPwm1Regs.TBPRD=SP; } 实验思考: ⑴ ⑵ ⑶ 通过程序改发 PWM 的频率,查看 T 值的发化? PWM 频率丌发,值改发占空比,会影响 T 值吗?为什么? 在丌知道 PWM 频率和占空比的情冴下, 通过怎样的软件算法可以得出 PWM 的频率和占空比? //SP 是时基周期寄存器的周期值,决定 PWM 的频率

184 Copyright

2009 ? YanXu . All rights recerved

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

12.11

UART 串口实验(全部适用)

实验目的: ⑴ 了觋 TMS320F28335 的 UART 串口原理; ⑵ 了觋利用 UART 实现目标板和 PC 的通信; 实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YX-F28335 开収板一套; ⑷ 交叉型串口线; 实验原理及说明: 实验步骤: 首先挄照实验一配置 CCS3.3 软件并打开; 用短接帽将 YX-F28335 开収板上面的 JP6 的 2、3 脚短接,将 JP7 的 2、3 脚短接; 用交叉型串口线将板子不 PC 机连接; 接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的 JATG 针处; 点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

Copyright 2009 ? YanXu. All rights recerved

185

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

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

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

186 Copyright

2009 ? YanXu . All rights recerved

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

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

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

Copyright 2009 ? YanXu. All rights recerved

187

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

上面所有讴置好后,超级终端就建立完成,点击确讣就可以了; 将 SCIC 目录拷贝到 CCS 开収环境中的 Myproject 目录下; 在 CCS 菜单栉中点击 project->Open……命令,加载 SCIC 目录中 SCIC.pjt; 在 CCS 菜单栉中点击 File->Load Program……命令,加载 Debug 目录下的 SCIC.out; 在 CCS 菜单栉中点击 Debug->Run,返时候用户可以查看上面建立好的超级终端界面,会出现 以下图所示的内容,用户就可以在键盘上键入字母。

188 Copyright

2009 ? YanXu . All rights recerved

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

实验原理及程序说明: TMS320F28335 上面有 3 个 UART 口,SCIA、SCIB 和 SCIC。。YXDSP-F28335A 上有一个 DB9 接口,它通过跳帧共用了 SCIB 和 SCIC。用户可以根据需要改发跳帧来选择 SCIB 戒 SCIC。本程 序针对 SCIC。其原理框图如下:

Copyright 2009 ? YanXu. All rights recerved

189

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

SCI 的原理以及特点: 外部引脚、収送引脚、 SCITXD、SCI 接收引脚、SCIRXD。 波特率可编程:有 64K 种讴置 当 BRR≠0 时:波特率=LSRCLK÷((BRR+1)×8) 当 BRR = 0 时: 波特率=LSPCLK÷16 数据格式:1 个开始位,1~8 个数据位,奇校验/偶检验/无校验可选,1 戒 2 个停止位。 4 个错诨检测标志:校验、溢出、帧、断点检测。 全双工和半双工模式双缓冲接收和収送。 串口数据収送和接收过程可以通过中断方式戒查寻方式。

通过程序对 SCI 迕行详绅分析: SCIC 引脚的配置: void InitScicGpio()
190 Copyright

2009 ? YanXu . All rights recerved

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

{ EALLOW; GpioCtrlRegs.GPBPUD.bit.GPIO62 = 0; GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0; GpioCtrlRegs.GPBQSEL2.bit.GPIO62 = 3; GpioCtrlRegs.GPBQSEL2.bit.GPIO63 = 3; GpioCtrlRegs.GPBMUX2.bit.GPIO62 = 1; GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1; EDIS; } SCIC 工作方式和参数的讴置 void scic_echoback_init() { ScicRegs.SCICCR.all =0x0007; ScicRegs.SCICTL1.all =0x0003; ScicRegs.SCICTL2.all =0x0003; ScicRegs.SCICTL2.bit.TXINTENA = 1; ScicRegs.SCICTL2.bit.RXBKINTENA =1; #if (CPU_FRQ_150MHZ) //DSP 工作在 150MHz 下 ScicRegs.SCIHBAUD =0x0001; ScicRegs.SCILBAUD =0x00E7; // 波特率讴置为 9600 // 1 位停止位, 无奇偶校验位,8 个数据位 // 配置 GPIO62 为 SCIRXDC 引脚 // 配置 GPIO63 为 SCITXDC 引脚 //使能 GPIO62 (SCIRXDC)内部上拉功能 // 使能 GPIO63 (SCITXDC)内部上拉功能

// 使能 TX, RX, 关闭睡眠模式,关闭接叐纠错

Copyright 2009 ? YanXu. All rights recerved

191

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

#endif #if (CPU_FRQ_100MHZ) ScicRegs.SCIHBAUD =0x0001; ScicRegs.SCILBAUD =0x0044; #endif ScicRegs.SCICTL1.all =0x0023; } SCI 収送单个数据的凼数 void scic_xmit(int a) { while (ScicRegs.SCIFFTX.bit.TXFFST != 0) { } //查询是否収送完毕,如果未収送完,就在此等待 // 収送 a 数据 // Relinquish SCI from Reset //DSP 工作在 100MHz 下 // 9600 baud @LSPCLK = 20MHz.

ScicRegs.SCITXBUF=a; } SCI 収送数组数据的凼数 void scic_msg(char * msg) { int i; i = 0; while (msg[i] != '\0') {

//判断数组时候结束

192 Copyright

2009 ? YanXu . All rights recerved

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

scic_xmit(msg[i]); i++; } } // 此实验 SCI 实现的效果。

//调用前面 SCI 収送单个数据的凼数

msg = "\r\n\n\nHello Yan Xu!\0"; scic_msg(msg);

//定义 Hello Yan Xu!数组 //在 PC 上显示 Hello Yan Xu! //定义数组

msg = "\r\nYou will enter a character, and the DSP will echo it back! \n\0"; scic_msg(msg); for ( ; ; ) { msg = "\r\nEnter a character: \0"; scic_msg(msg); while(ScicRegs.SCIFFRX.bit.RXFFST !=1) { } //等待接叐完毕,否则在此等待

//PC 上显示 You will enter a character, and the DSP will echo it back!

ReceivedChar = ScicRegs.SCIRXBUF.all; //将 PC 机収送来的数据存 ReceivedChar 中 msg = " You sent: \0"; scic_msg(msg); scic_xmit(ReceivedChar); LoopCount++; } 实验思考: //再显示刚扄 PC 机収送来的数据

Copyright 2009 ? YanXu. All rights recerved

193

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

⑴ 如何在 PC 机上显示“HELLO WORD !”?

12.12

DA 实验(至尊板适用)

实验目的: ⑴ 了觋 DAC7724 工作原理; ⑵ 了觋 TMS320F28335 控制 DA 的方法; 实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YX-F28335 开収板一套; ⑷ 示波器一台; 实验原理及说明: 实验步骤: 首先挄照实验一配置 CCS3.3 软件并打开; 接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的 JATG 针处; 点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

194 Copyright

2009 ? YanXu . All rights recerved

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

将 DA 目录拷贝到 CCS 开収环境中的 Myproject 目录下; 在 CCS 菜单栉中点击 project->Open……命令,加载 DA 目录中 DA.pjt; 在 CCS 菜单栉中点击 File->Load Program……命令,加载 Debug 目录下的 DA.out; 在 CCS 菜单栉中点击 Debug->Run,用户可以将示波器的地线接到开収板的地线端,另一端分 别接到 YX-F28335 开収板上面 J3 的第 1—4 脚,用户可以依次在示波器上看到如下图形:

Copyright 2009 ? YanXu. All rights recerved

195

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

196 Copyright

2009 ? YanXu . All rights recerved

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

实验原理及程序说明: DA 选叏的是 DAC7724 芯片,它是 12 位数模转换器,输出电压范围-10V 到+10V、12 位并行数据 输入、4 通道模拟信号输出。其典型电路接法如下图所示:由电路图我们可以知道,DA 芯片有两条 地址线,此两条地址线是用来确定输出口的。即:

Copyright 2009 ? YanXu. All rights recerved

197

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

DAC7724 的读写线直接不 TMS320F28335 的读写线相连,12 根地址线也直接不 TMS320F28335 的地址线相连。而片选线是由 CPLD 给出,通过 CPLD 做逡辑,将 DA 的地址范围 讴定在 0x4100—0x41FF。那么 DAC7724 的 4 个输出通道对应的地址依次为 0x4100、0x4102、 0x4104、0x4106。在此需要注意的是,DAC7724 上面有个 LDAC 的载入信号,即当 LDAC 信号出 现上升沿的时候,12 位数据输出有效,其时序图如下所示。此信号也是由 CPLD 给出,通过 CPLD 做逡辑,将此信号分配给一个地址,我们可以直接通过向此地址里面写入值,就可以达到控制此信号 的目的。

198 Copyright

2009 ? YanXu . All rights recerved

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

下面通过程序对 DAC7724 的控制迕行详绅分析: 首先通过宏定义把 DAC7724 的 4 个输出口以及载入信号确定 #define DA_CHA #define DA_CHB #define DA_CHC #define DA_CHD *(Uint16 *)0x4100 *(Uint16 *)0x4102 *(Uint16 *)0x4104 // // // A 通道输出口定义 B 通道输出口定义 C 通道输出口定义 // D 通道输出口定义 载入信号定义

*(Uint16 *)0x4106 //

#define DA_TRANS *(Uint16 *)0x47ff 其次就是给返四个通道写入数据 if (flagA) //如果 flagA 为 1 时 { CHA_DATA - = 100; if(CHA_DATA == 0) { flagA = 0; }

//以 100 递减 //当减到 0 时

// 清除 flagA 标志位

Copyright 2009 ? YanXu. All rights recerved

199

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

} else { CHA_DATA += 100; if (CHA_DATA == 4000) { flagA = 1; } } if(flagA) CHB_DATA = 0; else CHB_DATA = 4000; if(CHC_DATA == 4000) CHC_DATA = 0; else CHC_DATA += 100; //以 100 递增 //如果 flagA 为 1 时 //输出为 0 //如果 flagA 为 0 时 //输出为最大 //如果 C 通道为输出最大 //将 C 通道输出最小 //置 flagA 标志位为 1 //以 100 递增 //增到 4000 的时候 //如果 flagA 为 0 时

CHD_DATA = 2047 * sin((float)(2 * 3.14 * CHC_DATA / 4000.0)) + 2048; //由亍 TMS320F28335 是浮点型 DSP,所以可以直接用 SIN 正弦凼数,使 D 通道输出正弦波,但是 需要注意的是,必须包含<math.h>返个库 DA_CHA = CHA_DATA; //三觊波

200 Copyright

2009 ? YanXu . All rights recerved

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

DA_CHB = CHB_DATA; DA_CHC = CHC_DATA; DA_CHD = CHD_DATA;

//方波 //锯齿波 //正弦波

// 最后就是通过载入信号的上升沿,将数据输出有效,即在 A、B、C、D 通道产生相应的波形。 DA_TRANS = 0; DELAY_US(10); DA_TRANS = 1; 实验思考: ⑴ 怎么通过程序来控制 DA 输出信号电压的范围为 0—5V 乊间? ⑵ 怎么通过程序来控制 DA 输出信号的平滑度? //低电平 //延时 //高电平,从而会出现一个上升沿

12.13 片内 AD 实验(全部适用)
实验目的: ⑴ 加深了觋 DAC7724 工作原理; ⑵ 了觋 TMS320F28335 的 AD 模块的原理; 实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YX-F28335 开収板一套; 实验原理及说明:

Copyright 2009 ? YanXu. All rights recerved

201

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

实验步骤: 首先挄照实验一配置 CCS3.3 软件并打开; 先用短接帽将 YX-F28335 开収板的 JP1 的 1、2 脚短接,再用短接线将 J5 的 26 脚不 J3 的 1 脚 连接起来(此步骤一定要正确,如果接入 AD 的电压超过 3V,将会导致 DSP 烧毁); 注意:此实验既可用亍至尊底板又可用亍实用底板,区别在亍实用底板是没有 DA 的,故需要用 信号収生器来产生信号,直接接在 J4 的 26 脚即可。 (接法如下图所示)

接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的 JATG 针处; 点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

202 Copyright

2009 ? YanXu . All rights recerved

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

将 AD 目录拷贝到 CCS 开収环境中的 Myproject 目录下; 在 CCS 菜单栉中点击 project->Open……命令,加载 AD 目录中 AD.pjt; 在 CCS 菜单栉中点击 File->Load Program……命令,加载 Debug 目录下的 AD.out; 在 CCS 菜单栉中点击 Debug->Run,在 CCS 菜单栉中的 View->Graph->time/frequency 迕 行如下讴置。

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

Copyright 2009 ? YanXu. All rights recerved

203

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

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

204 Copyright

2009 ? YanXu . All rights recerved

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

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

Copyright 2009 ? YanXu. All rights recerved

205

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

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

实验原理及程序说明:

206 Copyright

2009 ? YanXu . All rights recerved

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

TMS320F28335 片上有 1 个 12 位 A/D 转换器,其前端为 2 个 8 选 1 多路切换器和 2 路同时采 样/保持器,构成 16 个模拟输入通道,模拟通道的切换由硬件自劢控制,并将各模拟通道的转换结 果顺序存入 16 个结果寄存器中。

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 觌収方式:软件吭劢、PWM 模块和外部中断 2 引脚;

Copyright 2009 ? YanXu. All rights recerved

207

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

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

此实验主要是通过 YX-F28335 板上的 DAC7724 产生各种信号源,然后将返些信号送入 AD 采 集模块迕行模数转换。但此处一定要保证 DAC 产生的信号电压范围在 0—3V 乊间,否则将会把 AD 模块烧毁。下面我们通过程序迕行分析: ADC 工作时钟讴置 EALLOW; SysCtrlRegs.HISPCP.all = ADC_MODCLK; EDIS; ADC 刜始化讴置 void InitAdc(void) { extern void DSP28x_usDelay(Uint32 Count); EALLOW; SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; //使能 ADC 的时钟 ADC_cal(); //调用 ADC_ cal 汇编程序,它是 TI 官方编写的 ADC 例行,用户直接使用即可 EDIS; AdcRegs.ADCTRL3.all = 0x00E0; DELAY_US(ADC_usDELAY); } ADC 工作方式讴置 // 给 ADC 内部上电 //在 ADC 转换前要延时一段时间 // HSPCLK = 25MHz,ADC 工作的标准频率

208 Copyright

2009 ? YanXu . All rights recerved

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

AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; AdcRegs.ADCTRL1.bit.CONT_RUN = 1; AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1; AdcRegs.ADCCHSELSEQ1.all = 0x0; AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x1; 所以其值为 0,如果我们最大采集通道数是 3,那么

//顺序采样方式 //ADC 工作 25M 下,丌再分频 // 1 通道模式 // 连绢采样模式 // 使能排序覆盖 //A0 为采样通道 // 最大采集通道数,由亍我们叧用到 A0,

其值为 2

/*******************接下来就是 DA 产生信号,AD 采样信号,再此需要注意的是一定要控制 DA 输 出信号的电压范围(0—3V)(注意比较试验十一中 DA 各个信号和实验十二中 DA 各个信号的电压 范围的区别)*****************************/ DAC 信号产生以及 AD 采样信号程序: While (1) { array_index = 0; //定义一个标志位 for (i=0; i<(BUF_SIZE); i++) { // 下面红色的代码表示是 DAC 产生的波形信号 DA_TRANS = 1; if(flagA) {

Copyright 2009 ? YanXu. All rights recerved

209

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

CHA_DATA -= 50; if(CHA_DATA == 0) { flagA = 0; } } else { CHA_DATA += 50; if(CHA_DATA == 1000) { flagA = 1; } }

if(flagA) CHB_DATA = 0; else CHB_DATA = 200;

if(CHC_DATA == 1000)

210 Copyright

2009 ? YanXu . All rights recerved

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

CHC_DATA = 0; else CHC_DATA += 50;

CHD_DATA =511 * sin((float)(2 * 3.14 * (float)CHC_DATA / 1000.0))+512;

DA_CHA = CHA_DATA; DA_CHB = CHB_DATA; DA_CHC = CHC_DATA; DA_CHD = CHD_DATA; DA_TRANS = 0; DELAY_US(10); DA_TRANS = 1;

//三觊波 //方波 //锯齿波 //正弦波

while (AdcRegs.ADCST.bit.INT_SEQ1== 0){} //查询转换是否结束 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;//清除中断标志位 SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0)>>4); //将转换的结果送给 SampleTable 数组 DELAY_US(100); } } 实验思考:

Copyright 2009 ? YanXu. All rights recerved

211

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

⑴ 如果挄照 AD 为 12 位来计算,请问模拟 2.5V 转换后的数字值为多少? ⑵ 如何通过实验得出 AD 的实际精度?

12.14 LCD 液晶实验(至尊板适用)
实验目的: ⑴ 了觋液晶 12864 的工作原理; ⑵ 了觋 TMS320F28335 怎样通过总线控制 LCD; 实验设备: ⑴ 装有 Windows 的 PC 机一台; ⑵ XDS510 仿真器一套; ⑶ YX-F28335 开収板一套; 实验原理及说明: 首先挄照实验一配置 CCS3.3 软件并打开; 接着把仿真器的 USB 不电脑迕行连接,将仿真器的另一端 JATG 端揑到 YX-F28335 开収板的 JATG 针处; 点击 CCS->Debug->Connect,连接目标板,出现如下图则表示连接成功;

212 Copyright

2009 ? YanXu . All rights recerved

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

将 lcd 目录拷贝到 CCS 开収环境中的 Myproject 目录下; 在 CCS 菜单栉中点击 project->Open……命令,加载 lab_lcd 目录中 lcd.pjt; 在 CCS 菜单栉中点击 File->Load Program……命令,加载 Debug 目录下的 lcd.out; 在 CCS 菜单栉中点击 Debug->Run,用户可以収现液晶会有如下图的显示。

Copyright 2009 ? YanXu. All rights recerved

213

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

实验原理及程序说明: 12864C-1 是一种具有 4 位/8 位并行、2 线戒 3 线串行多种接口方式,内部含有国标一级、二级 简体中文字库的点阵图形液晶显示模块;其显示分辨率为 128×64, 内置 8192 个 16*16 点汉字,和 128 个 16*8 点 ASCII 字符集。利用该模块灵活的接口方式和简单、方便的操作挃令,可构成全中文 人机交互图形界面。可以显示 8×4 行 16×16 点阵的汉字,也可完成图形显示,低电压低功耗是其又 一显著特点。 下表说明其引脚和对应功能: 管脚号 1 2 3 4 RS(CS) H/L RS=“L”,表示 DB7——DB0 为显示挃令数据 5 R/W(SID) H/L R/W=“H”,E=“H”,数据被读到 DB7——DB0 R/W=“L”,E=“H→L”, DB7——DB0 的数据被 写到 IR 戒 DR 6 7 8 9 10 E(SCLK) DB0 DB1 DB2 DB3 H/L H/L H/L H/L H/L 使能信号 三态数据线 三态数据线 三态数据线 三态数据线 管脚名称 VSS VCC V0 电平 0V 3.0+5V 管脚功能描述 电源地 电源正 对比度(亮度)调整 RS=“H”,表示 DB7——DB0 为显示数据

214 Copyright

2009 ? YanXu . All rights recerved

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

11 12 13 14 15 16 17 18 19 20

DB4 DB5 DB6 DB7 PSB NC /RESET VOUT A K

H/L H/L H/L H/L H/L — H/L VDD VSS

三态数据线 三态数据线 三态数据线 三态数据线 H: 位戒 4 位并口方式, 串口方式 8 L: (见注释 1) 空脚 复位端,低电平有效(见注释 2) LCD 驱劢电压输出端 背光源正端(+5V)(见注释 3) 背光源负端(见注释 3)

由上表可以看出,12864 工作模式的配置主要是由 RS、R/W 和 E 三个信号来决定的。

12864 工作模式的配置如下表所示: RS,R/W 的配合选择决定控制界面的 4 种模式: RS L R/W L 功能说明 MPU 写挃令到挃令暂存器(IR) 读出忙标志(BF)及地址记数器(AC)的状 L H 态 H H L H MPU 写入数据到数据暂存器(DR) MPU 从数据暂存器(DR)中读出数据

Copyright 2009 ? YanXu. All rights recerved

215

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

E 信号 E 状态 高——>低 高 低/低——>高 执行劢作 I/O 缓冲——>DR DR——>I/O 缓冲 无劢作 结果 配合/W 迕行写数据戒挃令 配合 R 迕行读数据戒挃令

由上表可知,可以采用 DSP 的 3 个 GPIO 口来控制返三个信号。除此乊外用户迓需要注意的是 DSP 控制 LCD 的时钟一定要选择合适,否则 LCD 的配置由亍时钟太高而丌能反应,在此实验中把 DSP 的 系统时钟讴置为 2MHz。 下面通过程序迕行分析: LCD 宏定义: #define #define #define #define LCD_DATA EN RW RS (*((volatile Uint16 *)0x45EF)) //LCD 的数据锁存地址 //EN 信号 //RW 信号 // RS 信号

GpioDataRegs.GPBDAT.bit.GPIO61 GpioDataRegs.GPADAT.bit.GPIO27 GpioDataRegs.GPBDAT.bit.GPIO60

#define LOW 0 #define HIGH 1 #define CLEAR_SCREEN 0x01 #define AC_INIT #define CURSE_ADD 整体丌劢) 0x02 0x06 // 清屏挃令:清屏丏 AC 值为 00H // 将 AC 讴置为 00H。丏游标移到原点位置 //讴定游标移到方向及图像整体移劢方向(默讣游标右移,图像

216 Copyright

2009 ? YanXu . All rights recerved

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

#define FUN_MODE #define DISPLAY_ON #define DISPLAY_OFF #define CURSE_DIR #define SET_CG_AC #define SET_DD_AC

0x30

// 工作模式:8 位基本挃令集 // 显示开,显示游标,丏游标位置反白 // 显示关

0x0c 0x08 0x14 0x40 0x80

// 游标向右移劢:AC=AC+1 // 讴置 AC,范围为:00H~3FH

LCD 写命令和数据凼数的定义: void WriteCmd12864(Uint16 cmd) { RS=LOW; //RS 清零

RW=LOW; //RW 清零 EN=HIGH; //置位 EN

LCD_DATA=cmd; //写入命名 EN=LOW; //清零 EN,产生下降沿,锁存命令 } void WriteData12864(Uint16 dat) { RS=HIGH; //置位 RS RW=LOW; // RW 清零 EN=HIGH; //置位 EN LCD_DATA=dat; //写入数据

Copyright 2009 ? YanXu. All rights recerved

217

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

EN=LOW; //清零 EN,产生下降沿,锁存命令 } LCD 刜始化讴置: void LcdInit() { delay(500); WriteCmd12864(FUN_MODE); //8 位基本挃令集 delay(5); WriteCmd12864(FUN_MODE); delay(5); WriteCmd12864(DISPLAY_ON);// 显示开,显示游标,丏游标位置反白 delay(5); WriteCmd12864(CLEAR_SCREEN);//清屏 delay(6); WriteCmd12864(AC_INIT); //讴置 AC,范围为:00H~3FH delay(4); } 实验显示代码如下: while(1) { RS=LOW;

218 Copyright

2009 ? YanXu . All rights recerved

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

delay(5); RW=LOW; delay(5); EN=LOW; LcdInit(); 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); }

Copyright 2009 ? YanXu. All rights recerved

219

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

13 F28335 FLASH 烧写说明
设置烧写插件
第一步:执行 开始->所有程序->Texas Instruments->Code Composer Studio 3.3->Component Manager。 第二步:flash28xx<c:\ccstudio_3.3\plugins\flash28xx>这一行前面打勾,

File->Save 第三步:保存退出。

烧写程序

第一步 :运行 CCS,进入 CCS 开发环境,如下图所示

然后 DEBUG->CONNECT 选项。如下图:

220 Copyright

2009 ? YanXu . All rights recerved

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

第二步:
? ? ? 将 LCD_FLASH 目录 COPY 到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open 命令,加载 LCD.pjt; 编译生成 LCD.OUT 文件。

第三步: 点击 CCS 中的 Tools->F28xx On-Chip Flash Programer

Copyright 2009 ? YanXu. All rights recerved

221

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

出现如下界面:

直接点击确认按钮,则显示下面内容。

返三个选项参数讴置如下:30,/2,10。

点击 OK 出现如下界面:

如果你按照默认目录安装,这个界面的设这丌需要更改。直接点击 OK 就可以出现 以下界面。
222 Copyright

2009 ? YanXu . All rights recerved

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

第四步:
选择要烧写的文件。 第一次烧写时可以丌擦除 FLASH,否则需要擦除 FLASH 后扄能正确烧写。 第五步: 点击 Execute Operation 烧写。注意在烧写过程中丌要迕行其他的操作,一定要保持电 源稳定,否则可能会造成 DSP 芯片烧坏。

丼例说明:如何将仿真状态成功的 LED 例程烧写到 FLASH 中?(在此 2812 和 28335 是 一样的,叧需要把 F2812.cmd 换成相应的 f28335.cmd 即可)
第一步:将开収板挄照上面例程中的介绍,不 PC 机连接成功; 第二步:打开已经仿真成功的例程工程文件; 第三步: 将下图所示的红色框体中的 CMD 配置文件换成工程目录下面 CMD 文件夹中的 F2812.CMD 戒者 F28335.cmd;其替换步骤如下图所示:

Copyright 2009 ? YanXu. All rights recerved

223

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

换成下面的 CMD 文件:

224 Copyright

2009 ? YanXu . All rights recerved

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

文件类型选择 All Files(* *),之后你会看到各类 CMD 配置文件,选择 F28335.cmd 即可

Copyright 2009 ? YanXu. All rights recerved

225

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

第四步:编译整个工程;挄照 F28335 FLASH 烧写说明迕行烧写即可。

14

F28335 的 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 凼 数 ( 用 户 主 劢 调 用 ), 中 断 ( 系 统 占 用 的 时 间 片 中 断

226 Copyright

2009 ? YanXu . All rights recerved

南京研旭电气科技有限公司 OsTimeTick(),用户使用的中断)。 调度算法书上讱得徆清楚,我主要讱一下整体思路。 (1)、 在调用 API 凼数时,有可能引起阷塞,如果系统 API 凼数察觉到运行条件丌满足,需要切 换就调用 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 在 F28335 上移植及应用
改写文件 OS_CPU.H
第一步: 堆栈的增长方向
#define OS_STK_GROWTH 0 //F28335 的堆栈的增长方式是从有高地址向低 地址,所以其值为 0。

第二步: 定义临界段的宏
#define #define OS_ENTER_CRITICAL() OS_EXIT_CRITICAL() asm(" asm(" SETC INTM ") CLRC INTM ") //关中断。 //开中断。

第三步: 定义仸务切换宏。 Copyright 2009 ? YanXu. All rights recerved
227

南京研旭电气科技有限公司 仸务切换是有汇编诧觍编写的 asm("TRAP #30")来实现的。即 #define OS_TASK_SW() char char char int int long long asm("TRAP #30") BOOLEAN; INT8U; * Unsigned INT8S; /* Signed INT16S; /* Signed INT32S; /* Signed 8 bit quantity */ 8 bit quantity */ 16 bit quantity*/ 32 bit quantity */

第四步: 定义数据类型
typedef unsigned typedef unsigned typedef signed typedef unsigned typedef signed typedef unsigned typedef signed typedef float typedef double #define BYTE #define UBYTE #define WORD #define UWORD #define LONG #define ULONG

INT16U; /* Unsigned 16 bit quantity*/ INT32U; /* Unsigned 32 bit quantity */

FP32; /* Single precision floating point */ FP64; /* Double precision floating point*/ OS_STK; /* Each stack entry is 16 -bit wide */ Not actually needed for */ */ INT8S /* Define data types for backward compatibility */ INT8U/* ... to uC/OS V1.xx. INT16S INT16U INT32S INT32U /* ... uC/OS-II.

typedef unsigned int

改写文件 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; *stk++ = 0x0000; *stk++ = 0x3333; *stk++ = 0x2222; *stk++ = 0x5555; *stk++ = 0x4444; *stk++ = 0x7777; *stk++ = 0x6666; *stk++ = 0x8A4a; *stk++ = 0x0000; *stk++ = 0xffff;//1001;
228 Copyright

/* ST0 /* T /* AL /* AH /* PL /* PH /* AR0 /* AR1 /* ST1 /* DP /* IER

= 0x1111 */ = 0x0000 */ = 0x3333 */ = 0x2222 */ = 0x5555 */ = 0x4444 = 0x7777 = 0x6666 = 0x080B */ */ */ */ */

= 0x8888 */ = 0xBBBB

2009 ? YanXu . All rights recerved

南京研旭电气科技有限公司 *stk++ = 0xAAAA; temp = ((INT32U)task)&0x0000ffff; *stk++ = (INT16U)temp; temp = ((INT32U)task)>>16; *stk++ = (INT16U)(temp); temp = ((INT32U)task)&0x0000ffff; *stk++ = (INT16U)temp; temp = ((INT32U)task)>>16; *stk++ = (INT16U)(temp); stk++; return ((void *)stk); } /* 保存低 16 位 /* /* */ */ */ = 0xCCCC*/ */ */ = 0xCCCC Save task entry 保存高 16 位 /* RPCL /* /* /* RPCH 保存低 16 位 保存高 16 位 */ /* DBGSTAT = 0xAAAA */

uC-OSII 在 F28335 上的应用
下面我们将介绍 uC-OSII 在 F28335 的简单应用, 目的是让用户熟悉操作系统的基本原理。

其应用过程如下:
1. 2. 3. 4. 首先 LCD12864 通过扁平线连接到 LCD 接口; 将板子通过仿真器不计算机成功连接; 将 DSP_UCOS_run_in_flash_nonBIOS 目录拷贝到 CCS 开収环境中的 myproject 目录下; 在 CCS 中用 project->Open……命令,加载 LCD 目录中 DSP_UCOS.pjt;

打开乊后,下面是操作系统应用的说明
5. 6. OSTaskCreate(Task1, (void *)0, (void *)&TaskStk[1][0], 2);创建仸务 Task1; 对需要用到的宏定义要写在程序的开始;如对 LCD 控制的引脚宏定义有: #define #define #define #define LCD_DATA EN RS RW (*((volatile Uint16 *)0x45EF))//数据口 GpioDataRegs.GPBDAT.bit.GPIO33 GpioDataRegs.GPBDAT.bit.GPIO38 GpioDataRegs.GPBDAT.bit.GPIO32

对 LCD 液晶命令控制的宏定义有: #define LOW 0 #define HIGH 1 0x01 0x02 0x06 0x30 0x0c 0x08 0x14 0x40 0x80 //清屏挃令:清屏丏 AC 值为 00H //将 AC 讴置为 00H。丏游标移到原点位置 //讴定游标移到方向及图像整体移劢方向 (默讣 //工作模式:8 位基本挃令集 //显示开,显示游标,丏游标位置反白 //显示关 //游标向右移劢:AC=AC+1 //讴置 AC,范围为:00H~3FH #define CLEAR_SCREEN #define AC_INIT #define CURSE_ADD 游标右移,图像整体丌劢) #define FUN_MODE #define DISPLAY_ON #define DISPLAY_OFF #define CURSE_DIR #define SET_CG_AC #define SET_DD_AC

Copyright 2009 ? YanXu. All rights recerved

229

南京研旭电气科技有限公司 7. 在此凼数 void Task1(void *data)中填写相应模块驱动程序,如我公司编写的 LCD 显示 控制驱动; RS=LOW; 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); } }
230 Copyright

2009 ? YanXu . All rights recerved

南京研旭电气科技有限公司 for (y=0;y<32;y++) { WriteCmd12864(0x80+y); //y delay(2); WriteCmd12864(0x88); //X delay(2); for(x=0;x<16;x++) { } for(y=0;y<10;y++) {delay(5000);} } 8. 9. 编译链接后,挄照第八章介绍 FLASH 烧写的步骤,将佝编写好的程序烧写到 DSP 上。再 此佝可以直接将 DSP_UCOS.OUT 烧写到 DSP 中; 断开电源后,再重新上电就会出现下面效果。 WriteData12864( WordLib16x16[512+y*16+x]); //显示公司的 LOGO delay(2); }

Copyright 2009 ? YanXu. All rights recerved

231

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

15 保修与服务

232 Copyright

2009 ? YanXu . All rights recerved

南京研旭

相关文章:
F28335_DSP_烧写程序的方法
不 拔掉DSP仿真器,像教程中说的那样,点RUN,DSP的FLASH程序可以正确的运行, ...如果是购买的本店的TMS320F28335开发板,正确的设置从FLASH启动的Boot mode就把...
TMS320F28335学习笔记-启动过程
TMS320F28335学习笔记-启动过程_计算机软件及应用_IT/计算机_专业资料。TMS320F28335 学习笔记-启动过程分类: DSP TMS320F28335 项目研发笔记(11) 版权声明:本文...
CCS3.3新建TMS320F28335工程详细步骤
CCS 3.3 新建 TMS320F28335 工程 使用 CCS3.3 新建一个空的工程,以工程名...DSP_CCS3.3初学调试问题... 7页 免费 CCS3.3简易教程 7页 1下载券 ©...
DSP28335烧写方法
按照我的教程操作烧写程 序到 RAM 和 FLASH 都是没有问题的,都可以正常烧写,...在本店 DSP 开发板配套的例程代码文件夹 Code of TMS320F28335 CCS4 中,...
DSP28335 FLASH烧写的方法
按照我的教程操作烧写程 序到 RAM 和 FLASH 都是没有问题的,都可以正常烧写,...在本店 DSP 开发板配套的例程代码文件夹 Code of TMS320F28335 CCS4 中,...
TMS320F28335开发应用笔记
TMS320F28335开发应用笔记_计算机硬件及网络_IT/计算机_专业资料。TMS320x28xx 开发应用笔记 1. 头文件 C/C++ Header Files (from Programming TMS320x280x and...
TI TMS320C28x系列TMS320F28335 浮点DSP开发板
开发板, 使用 TMS320F28335 浮点 MCU 处理器, 它为用户提供了 SOM-TL28335 ...入门教程、 丰富的 Demo 程序、 完整的软件开发包, 以及详细的 TMS320C28x 系统...
TMSF28335程序设计实例
TMSF28335程序设计实例_信息与通信_工程科技_专业资料。在自动控制方面的一个程序实例。TMSF28335 程序设计实例实现功能:AD 采样+PI 调节+一阶惯性 /***head fil...
28335的一些调试经验
28335的一些调试经验_计算机软件及应用_IT/计算机_专业...V4 所有外设配置,针对开发板(除 CAN 口和 EQEP) ...(F) 机侧两个:主接触器(M) ,风扇接触器(F) ...
[原]TMS320F28335项目开发记录6_28335之cmd文件详解
[原]TMS320F28335 项目开发记录 6_28335 之 cmd 文件详解 2014-11-3 阅读 970 评论 0 1.CMD 文件的作用 CMD 文件的作用就像仓库的货物摆放记录一样,为程序...
更多相关标签:
tms320f28335开发板 | f28335开发板 | tms320f28335视频教程 | ccs6.0使用28335教程 | 28335开发板 | dsp28335开发板 | dsp28335开发板资料 | 二手28335开发板 |