2812实验例程

合集下载

F2812实验

F2812实验

; 使能 C28x 目标模式 ; 使能 C28x 寻址模式,AMODE=0 ; 告诉汇编器处于 C28x 寻址模式 ; 使能 M0 和 M1 模块的 C28x 映射 ; XAR2 指针指向 X ; XAR7 指针指向 C ; 设置乘积右移 5 位 ">> 5" ; 清 ACC, P, OVC ; 重复下一条指令 N/2 次 ; ACC = ACC + (X[i+1] * C[i+1]) >> 5 ; P = P + (X[i] * C[i]) >> 5 i++ ADDL ACC,@P ; 执行最后计算 MOVL @sum,ACC ; 保存结果到 sum 试设置数组 X、C 的初始值,并验证实验结果。 按以上例程结构实现以下例程,单步运行观察变量的变化,并验证实验结果。
RPT #15 || ; 重复下一条指令16次 SUBCU ACC,@T ; 用Den16条件减 MOV @Rem16,AH ; 保存余数到Rem16 MOV ACC,@AL << 16 ; AH=Quot16, AL=0 NEGTC ACC ; 若TC=1,则求负 MOV @Quot16,AH ; 保存商到Quot16 .end 打开分子Num16,分母Den16所在的Memory窗口,双击对应的单元设定初始值,然后单步 运行程序,观察各寄存器的变化情况并验证实验结果。 (3)汇编语言程序三 功能:复制数组,复制 Array1 到 Array2。 ; int32 Array1[N]; ; int32 Array2[N]; ; for(i=0; i < N; i++) ; Array2[i] = Array1[i]; Array1 .set 0x8000 Array2 .set 0x8200 N .set 100 .def _c_int00 RESET: .long _c_int00 .text _c_int00: C28OBJ ; 使能 C28x 目标模式 C28ADDR ; 使能 C28x 寻址模式,AMODE=0 .c28_amode ; 告诉汇编器处于 C28x 寻址模式 C28MAP ; 使能 M0 和 M1 模块的 C28x 映射 MOVL XAR2,#Array1 ; XAR2 指针指向 Array1 MOVL XAR3,#Array2 ; XAR3 指针指向 Array2 MOV @AR0,#(N-1) ; 重复 loop 循环 N 次 Loop: MOVL ACC,*XAR2++ ; ACC=Array1[i] MOVL *XAR3++,ACC ; Array2[i]=ACC BANZ Loop,AR0-; 若 AR0!= 0,跳至 Loop,AR0-NOP 可先在原程序中添加对数组 Array1 的初始化,然后重复上例的步骤。 (4)汇编语言程序四 功能:使用双重 16 位乘法计算乘积的和。 ; int16 X[N] ; 定义数据 ; int16 C[N] ; 定义系数(位于低 4M) ; ;数据和系数必须位于偶地址 ; ; N 必须为偶数 ; sum = 0;

dsp2812,AD采样

dsp2812,AD采样

2.1.1 AD采样F2812的ADC模块是一个12位的模/数转换器。

对于16路的AD输入单元,本实验平台为其中的8路AD输入通道确定了功能,配置了相关的单元电路,包括:两路温度信号采集、交流信号采集、温度给定、鼓风机调速给定、力应变片电桥输出信号采集、压电传感器输出信号采集以及流量计输出信号采集。

如图2.1所示:温度给定和鼓风机调速给定是对电位器上直流电压的采样(图a),比较简单不作过多介绍;力应变片电桥输出信号采集、压电传感器输出信号采集(图c)以及流量计输出信号采集(图b)是接口部分,分别与传感器动态试验部分(第四章)和流量仪表部分(第三章)连接。

这里着重介绍温度信号采集和交流信号采集。

图2. 1 AD2~AD6的接口电路2.1.1.1 温度信号采集两路温度信号分别通过F2812的AD0 、AD1通道来采集。

由于两个通道完全一样,这里只介绍一路温度信号(AD0)的采集。

(1)硬件原理温度传感器采用的是NS 公司生产的LM35[5],它具有很高的工作精度和较宽的线性工作范围,它的输出电压与摄氏温度线性成比例,且无需外部校准或微调,可以提供±1/4℃的常用的室温精度。

LM35的输出电压与摄氏温度的线形关系可用下面公式(2.1)表示,0℃时输出为0 V ,每升高1℃,输出电压增加10 mV 。

(2.()T T V OUT ⨯=101)式中,输出电压单位为mV ,温度单位为℃。

OUT V T 其电源供应模式有单电源与正负双电源两种。

正负双电源的供电模式可提供负温度的测量,单电源模式在25℃下电流约为50 mA ,非常省电。

本系统采用的是单电源模式,可测温度范围0~150℃。

温度传感器电路将测量到的温度信号转换成电压信号输出到信号放大电路,与温度值对应的电压信号经放大后输出至A /D 转换电路。

电压信号转换成数字量后DSP 根据显示需要对数字量进行处理,再送数码管进行显示。

关于数码管显示部分的设计在后面“2.2 输出单元”中介绍。

DSP实验指导书(2812)

DSP实验指导书(2812)

目录目录 (1)第一章实验平台说明 (2)§1.1 基本参数 (3)§1.2 使用方法 (4)第二章算法实验 (5)§2.1 基础实验 (5)§2.2 卷积计算 (7)§2.3 相关运算 (9)§2.4 快速傅里叶变换(FFT) 实现 (11)§2.6 有限冲击响应滤波器(FIR) 实现 (15)§2.7 无限冲击响应滤波器(IIR) 实现 (21)§2.8 自适应滤波器(LMS) 实现 (23)第三章外设接口实验 (26)§3.1 数码管控制实验 (26)§3.2 交通灯控制实验 (28)§3.3 液晶显示屏(LCD)实验 (30)§3.4 矩阵键盘扫描实验 (31)§3.5 通用异步串行接口(UART) 实验 (32)§3.6 通用串行总线(USB) 接口实验 (33)§3.7 内置A/D转换实验 (36)§3.8 高速A/D转换实验 (38)§3.9 高速D/A转换实验 (40)§3.10 直流电机控制实验 (42)§3.11 步进电机控制实验 (43)§3.12 以太网卡与TCP/IP协议实验 (45)§3.13 CAN总线实验 (49)第一章实验平台说明随着科学技术的飞速发展,人们对控制模型、控制算法要求越来越高,传统意义上的处理器很难满足发展的需求,而数字信号处理器DSP 经历了20 多年的发展与普及,应用领域几乎涵盖了所有的行业:通信、信息处理、自动控制、雷达、航空航天、医疗、日常消费品等。

德州仪器(TI)占据了整个DSP 市场的50%左右,很多高校、研究所、公司大量采用TI 的方案与芯片进行开发与研究。

DSP 是一门理论与实践并重的技术,在成功掌握了理论知识的同时再配合做一些经典的DSP 实验,从而加深对DSP 软、硬件的理解与掌握,为今后从事独立的开发打下扎实的基础。

DSP实验指导书2812部分

DSP实验指导书2812部分

目录第一章芯片结构及性能概述 (3)1.1 TMS320C28x 系列芯片的结构及性能 (3)1.2 引脚分布及引脚功能 (7)第二章 TMS320F2812基本系统 (9)2.1 TMS320F2812时钟 (9)2.1.1 CPU 时钟 (9)2.1.2 片上外设时钟 (9)2.2 TMS320F2812 存贮空间的配置 (11)2.2.1 F2812 片上SARAM (11)2.2.2 F2812 片上FLASH 和OTP (12)2.2.3 F2812外部存储器接口 (12)2.3 McBSP (12)2.3.1 McBSP 的操作 (13)2.3.2 McBSP的引脚与信号 (13)2.3.3 McBSP通信协议 (13)2.4 SCI (14)2.4.1 SCI特点 (14)2.5 CAN (14)2.5.1 CAN原理框图 (14)2.5.2 CAN特点 (15)2.5.3 CAN引脚和信号 (15)2.6 ADC (15)2.6.1 ADC 特点 (16)2.8 定时器 (18)2.9 复位与中断 (19)2.9.1 F2812 中断的概述 (19)2.9.2 F2812 复位操作 (26)2.10 TMS320F2812 复位工作过程: (28)2.11 JTAG (30)2.12 F2812工作方式的配置 (30)第三章硬件电路详解 (31)3.1 关于电平转换及兼容性问题 (31)3.1.1 各种电平特性 (31)3.1.2 电平的兼容性问题 (31)3.1.3 电平转换常用方法 (31)3.2 LDO电源电路 (32)3.3 MAX811 复位电路 (33)3.4 时钟电路及PLL模块 (33)3.5 AD输入电路 (34)3.6 SPI 串行12 位D/A 转换电路 (34)3.7 SPI 方式的 TF卡接口电路 (35)3.8 SCI 串行通讯电路 (35)3.9 CAN通讯电路 (36)3.10 DSP和PLD的 JTAG 接口电路 (36)3.11 外扩512K字节SRAM电路 (36)3.12 外扩1M字节NOR FLASH电路 (37)3.13 外扩 256M 字节 NAND FLASH 电路 (38)3.14 走马灯与按键电路 (38)3.15 LCD接口电路 (38)3.16 TLV320AIC23音频电路及McBSP多路复用电路 (39)3.17 CPLD电路 (40)3.18 USB接口电路 (40)3.19 Ethernet以太网接口电路 (41)第四章 TMS320F2812硬件实验 (42)实验一汇编指令实验 (42)实验二数值运算 (46)实验三模拟信号发生器 (46)实验四模拟音频处理实验 (48)实验五模拟调制解调实验 (49)实验六流水灯实验 (50)实验七按键实验 (50)实验八外部SRAM实验 (51)实验九 NOR FLASH实验 (52)实验十外部NAND FLASH实验 (55)实验十一串口UART通讯实验 (56)实验十二以太网实验 (57)实验十三音频数据输入输出实验 (61)实验十四 DAC模拟实验 (62)实验十五 AD采样实验 (62)实验十六基于SPI接口的SD卡读写实验 (63)实验十七 CAN总线实验 (68)实验十八 RS485总线通讯实验 (70)实验十九主板流水灯实验 (73)实验二十主板LED数码管实验 (73)实验二十一主板LED阵列实验 (74)实验二十二 LED交通灯实验 (74)实验二十三 4*5按键矩阵实验 (75)实验二十四按键控制数码管实验 (76)实验二十五步进电机实验 (76)实验二十六直流电机实验 (78)实验二十七主板旋钮AD测量实验 (78)实验二十八彩色液晶控制实验 (79)第一章芯片结构及性能概述TMS320C2000 系列是美国TI 公司推出的最佳测控应用的定点DSP芯片,其主流产品分为四个系列:C20x、C24x、C27x和C28x。

dsp课程设计2812

dsp课程设计2812

dsp课程设计2812一、教学目标本课程的教学目标是让学生掌握DSP2812的基本原理、编程方法和应用技巧。

具体包括以下三个方面:1.知识目标:学生需要了解DSP2812的结构、特性、指令集和编程环境。

能够熟练阅读DSP2812的 datasheet 和 reference manual,并掌握常用的数字信号处理算法。

2.技能目标:学生能够使用C语言进行DSP2812的程序设计,熟练使用CCS集成开发环境进行程序的编译、调试和烧写。

能够独立完成基于DSP2812的数字信号处理项目,具备一定的实际操作能力。

3.情感态度价值观目标:培养学生对DSP技术的兴趣和热情,使其认识到DSP技术在现代社会中的广泛应用和重要性。

培养学生独立思考、解决问题和团队协作的能力。

二、教学内容根据教学目标,本课程的教学内容主要包括以下几个部分:1.DSP2812概述:介绍DSP2812的结构、特性、指令集和编程环境。

2.C语言编程基础:讲解C语言在DSP2812上的应用,包括数据类型、运算符、语句等。

3.数字信号处理算法:介绍常用的数字信号处理算法,如FFT、滤波器设计等。

4.中断和定时器:讲解DSP2812的中断系统、定时器及其应用。

5.串口和并口通信:介绍DSP2812的串口和并口通信原理及其应用。

6.实验操作:安排多个实验项目,让学生动手实践,巩固理论知识。

三、教学方法为了实现教学目标,本课程将采用以下教学方法:1.讲授法:讲解基本概念、原理和算法。

2.讨论法:学生针对某一问题进行讨论,培养学生的独立思考能力。

3.案例分析法:分析实际项目案例,让学生了解DSP技术在工程中的应用。

4.实验法:安排多个实验项目,让学生动手实践,提高实际操作能力。

四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:1.教材:选用《DSP2812原理与应用》作为主教材,辅助以相关参考书籍。

2.多媒体资料:制作PPT、实验指导书等教学资料,以便于学生学习和复习。

DSPF2812实验

DSPF2812实验

DSPF2812实验实验1 :CCS环境下的程序设计一.实验目的1.掌握Code Composer Studio 3.3的配置过程;2.掌握DSP开发系统及计算机与目标系统的连接方法;3.了解Code Composer Studio 3.3软件的操作环境和基本功能,了解TMS320F2812软件开发过程;4.学习用标准C语言编制程序,了解常用的C语言程序设计方法和组成部分;5.熟悉使用软件仿真方式调试程序。

二.实验设备1.PC机一台,操作系统为WindowsXP;2.SEED-DEC2812开发板、XDS510PLUS仿真器。

三.实验内容应用CCS集成开发环境在软件仿真方式下,建立、配置、编译、下载和运行一个简单工程:应用C语言编写程序,完成z=x+y功能,并且通过“Memory”窗口观察x、y、z 值的变化。

四.实验原理1.开发TMS320C28xx应用系统一般需要以下几个调试工具来完成:软件集成开发环境(Code Composer Studio 3.3):完成系统的软件开发,进行软件和硬件仿真调试。

它也是硬件调试的辅助手段。

仿真器(XDS510PLUS等):实现硬件仿真调试时与硬件系统的通信,控制和读取硬件系统的状态和数据。

开发板(DEC-F2812等):提供软件运行和调试的平台和用户系统开发的参照。

2.Code Composer Studio3.3主要完成系统的软件开发和调试。

它提供一整套的程序编制、维护、编译、调试环境,能将汇编语言和C语言程序编译连接生成COFF (公共目标文件)格式的可执行文件,并能将程序下载到目标DSP上运行调试。

3.用户系统的软件部分可以由CCS建立的工程文件进行管理,工程一般包含以下几种文件:源程序文件:C语言或汇编语言文件(*.ASM或*.C)头文件(*.H)命令文件(*.CMD)库文件(*.LIB)五.实验步骤1.实验准备:由于本实验采用软仿真模式,可以不用连接仿真器及开发板。

dsp2812实验报告

dsp2812实验报告

实验一CCS 环境认识实验一、实验目的1、了解CCS软件操作环境和基本功能。

2、掌握CCS 软件仿真的配置步骤。

二、实验设备PC 机一台,安装有Code Composer Studio3.3 软件。

三、实验步骤1、软件仿真(Smulator)方式软件仿真是利用CCS软件在PC机中构造DSP的仿真环境,用于调试应用程序。

由于无法构造DSP中的外设,所以软件仿真仅能调试软件的算法和进行效率分析等。

软件仿真方式工作时,无需连接板卡和仿真器等硬件。

设置步骤:(1)单击桌面图标:进入CCS软件设置窗口(2)在出现的窗口中按标号顺序进行如下设置:图1-1-1 ccs设置驱动界面此时CCS已经被设置成Simulator方式(软件仿真TMS320F2812器件的方式)。

2、创建工程⑴选择菜单栏“Project”的“New…”项,在弹出对话框“Project”中输入新建工程名volume;并设置工程所在目录。

⑵选择菜单“Project”的“Add Files to Project…”项将volume.c源程序文件、volume.cmd 命令文件。

注:头文件可以在编译时根据程序中的“include”语句自动加入。

3、查看源程序双击左侧工程管理窗中的“volume.c”文件,可以查看程序内容。

这个程序是一个音频信号采集、处理输出的程序。

其功能是将输入的音频数据扩大volume倍后输出。

4、修改工程设置将程序中的用户堆栈的尺寸设置成 1024 (字):点击菜单栏Project→Build Options,在弹出的Bulid Options for volume.pjt对话框中点击Linker标签,在Category栏中选中Basic项,并在其右侧的Basic设置里将Stack size (-stack)的值改为1024,点确定后保存。

5、编译选择菜单“Project”的“Rebuild All”项,对当前工程中所有文件进行编译链接,形成输出文件,注意编译过程中CCS主窗口下部的“Build”提示窗中显示编译信息,如给出的错误和警告的信息。

TMS2812实验报告五

TMS2812实验报告五
-用户自定义函数。
这个程序是一个音频信号采集、处理输出的程序。程序的主循环中调用自定义的函数read_signals来获得音频数据并存入输入缓存inp_buffer数组;再调用自定义函数write_buffer来处理音频数据并存入输出缓存;output_signals将输出缓冲区的数据送输出设备;最后调用标准C的显示信息的函数printf显示进度提示信息。整个系统可以完成将输入的音频数据扩大volume倍后再输出的功能。
2.了解DSP开发系统和计算机与目标系统的连接方法。
3.了解Code Composer Studio3.1软件的操作环境和基本功能,了解TMS320C55xx软件开发过程。
2、实验原理
*开发TMS3境(Code Composer Studio 3.1):完成系统的软件开发,进行软件和硬件仿真调试。它也是硬件调试的辅助手段。
⑵设置软件调试断点:在项目浏览窗口中,双击volume.c激活这个文件,移动光标到main()行上,单击鼠标右键选择Toggle Breakpoint或按F9设置断点(另外,双击此行左边的灰色控制条也可以设置或删除断点标记)。
⑶利用断点调试程序:选择DebugÆRun或按F5运行程序,程序会自动停在main()函数上。
-开发系统(ICETEK 5100-USB):实现硬件仿真调试时与硬件系统的通信,控制和读取硬件系统的状态和数据。
-评估模块(ICETEK VC5509-A或ICETEK VC5509-C等):提供软件运行和调试的平台和用户系统开发的参照。
*用户系统的软件部分可以由CCS建立的工程文件进行管理,工程一般包含以下几种文件:
弹出下图,按编号顺序操作建立volume.pjt工程文:
展开主窗口左侧工程管理窗口中“Projects”下新建立的“volume.pjt”,其中各项均为空。

2812DSP实验指导书

2812DSP实验指导书

实验指导书数字信号处理E300型教学实验系统Tech_v F2812漆为民、何立言、于军目录第一章实验系统介绍 (3)1.1 EL-DSP-E300型DSP实验系统介绍 (3)1.2 Techv_2812CPU板介绍 (13)第二章调试软件安装说明 ...................................................................... 错误!未定义书签。

2.1 CCS的简介 ............................................ 错误!未定义书签。

2.2 CCS3.1软件的安装 ..................................... 错误!未定义书签。

3.3 CCS3.1软件的设置(以F2812为例) ..................... 错误!未定义书签。

第三章硬件安装说明 .............................................................................. 错误!未定义书签。

3.1 DSP硬件仿真器的安装 .................................. 错误!未定义书签。

3.2 DSP硬件仿真器的使用 .................................. 错误!未定义书签。

E300样例实验说明 ..................................................................................... 错误!未定义书签。

第四章常规实验指导 ................................................................................ 错误!未定义书签。

DSP2812-实验要求以及参考程序

DSP2812-实验要求以及参考程序

实验一DSP数据存取实验实验要求:1、找到main函数入口地址4、观察从地址0x80000到0x80007的存储内容操作步骤:1、打开Setup CCStudio v3.3 ,系统配置为F2812 Device Simultor2、打开CCStudio v3.3,打开工程F2812\DSP281x_examples\Lab0201-Memory\Memory.pjt3、在main函数处设断点(F9),运行程序4、打开反汇编窗口(View>Disassembly),观察入口地址5、修改Memory.c中程序,完成存储区数据修改6、编译通过,加载.out 文件7、设置在变量定义处设置断点,点击运行(F5),单步运行(F11)8、打开观察窗(View>Watch Window)观察自己所设变量在单步运行时变化9、打开存储区窗口(View>Memory)观察地址为0x80000到0x80007的数据变化实验二指示灯与拨码开关实验实验要求:1、熟悉板上指示灯控制寄存器、开关控制寄存器2、指示灯点亮规则:只闭合拨码开关1:全灭;只闭合拨码开关2:全亮;只闭合拨码开关3: 顺序依次点亮;只闭合拨码开关4:反向顺序依次点亮;开关的其它状态:全灭;操作步骤:1、打开Setup CCStudio v3.3 ,系统配置为F2812 XDS510 Emulator_12、打开CCStudio v3.3,打开工程F2812\DSP281x_examples\Lab0201-Memory\led.pjt3、修改led.c,注意板上DIP开关控制寄存器地址为C0001h,板上指示灯控制寄存器地址为:C0000h。

这两个寄存器都是低四位有效。

4、观察实验现象实验三DSP定时器实验要求:1、利用定时器中断代替软件延时函数控制指示灯显示频率,要求1秒闪烁一次2、实物仿真时,通过CCS中的Clock功能统计延时函数的延时时间,与设定值进行比较操作步骤:1、打开Setup CCStudio v3.3 ,系统配置为F2812 XDS510 Emulator_12、打开CCStudio v3.3,打开工程F2812\DSP281x_examples\Lab0201-Memory\time.pjt3、修改time.c程序,写一个由定时器中断产生的以1s为单位的延时函数void delay(int time);4、在菜单中选择profile>Enable\View5、在延时函数前后各设置一个断点6、清零时钟计数器(双击清零),点击Run运行程序7、计算时间t=测得值/150000000(假如系统的时钟工作在150MHZ),与设定值进行比较实验四事件管理器实验实验要求1、利用事件管理器中的16路中的PWM1,输出一段连续变化的PWM波2、驱动扬声器蜂鸣器播放一段音乐声(声音频率文件参考Speaker.pjt)操作步骤1、打开Setup CCStudio v3.3 ,系统配置为F2812 XDS510 Emulator_12、打开CCStudio v3.3,打开工程F2812\DSP281x_examples\Lab0201-Memory\PWM.pjt和F2812\DSP281x_examples\Lab0201-Memory\Speaker.pjt3、在例程Speaker.c中是使用通用定时器TIME0来连续输出频率的方波,这里要求改为用EVA中的PWM1代替之。

DSP2812实验指导书第三部分

DSP2812实验指导书第三部分

第4章实验内容实验一编写一个以C语言为基础的DSP程序一.实验目的1.学习用标准C语言编制程序;了解常用的C语言程序设计方法和组成部分。

2.学习编制连接命令文件,并用来控制代码的连接。

3.学会建立和改变map文件,以及利用它观察DSP内存使用情况的方法。

4.熟悉使用软件仿真方式调试程序。

二.实验设备PC兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000),安装Code Composer Studio 2.0软件。

三.实验原理1.标准C语言程序CCS支持使用标准C语言开发DSP应用程序。

当使用标准C语言编制的程序时,其源程序文件名的后缀应为.c (如:volume.c)。

CCS在编译标准C语言程序时,首先将其编译成相应汇编语言程序,再进一步编译成目标DSP 的可执行代码。

最后生成的是coff格式的可下载到DSP中运行的文件,其文件名后缀为.out。

由于使用C语言编制程序,其中调用的标准C的库函数由专门的库提供,在编译连接时编译系统还负责构建C运行环境。

所以用户工程中需要注明使用C的支持库。

2.命令文件的作用命令文件(文件名后缀为cmd)为链接程序提供程序和数据在具体DSP硬件中的位置分配信息。

通过编制命令文件,我们可以将某些特定的数据或程序按照我们的意图放置在DSP所管理的内存中。

命令文件也为链接程序提供了DSP外扩存储器的描述。

在程序中使用CMD文件描述硬件存储区,可以只说明使用部分,但只要是说明的,必须和硬件匹配,也就是只要说明的存储区必须是存在的和可用的。

3.内存映射(map)文件的作用一般地,我们设计、开发的DSP程序在调试好后,要固化到系统的ROM中。

为了更精确地使用ROM空间,我们就需要知道程序的大小和位置,通过建立目标程序的map文件可以了解DSP 代码的确切信息。

当需要更改程序和数据的大小和位置时,就要适当修改cmd文件和源程序,再重新生成map文件来观察结果。

TMS320F2812外设例程系列之SCI

TMS320F2812外设例程系列之SCI

TMS320F2812外设例程系列之SCI//############################################### ######################//文件: Example_281xSci_FFDLB_int.c//说明: 该程序是SCI中断发送、接收的典型程序,// 采用内部连接的自循环模式,即自发、自接//############################################### ######################//SCI-A 发送的数据流://00 01 02 03 04 05 06 07//01 02 03 04 05 06 07 08//02 03 04 05 06 07 08 09//....//FE FF 00 01 02 03 04 05//FF 00 01 02 03 04 05 06//etc..//SCI-B 发送的数据流://FF FE FD FC FB FA F9 F8//FE FD FC FB FA F9 F8 F7//FD FC FB FA F9 F8 F7 F6//....//01 00 FF FE FD FC FB FA//00 FF FE FD FC FB FA F9//etc..//检查变量:// SCI-A SCI-B// ----------------------// sdataA sdataB //发送的数据// rdataA rdataB //接收的数据// rdata_pointA rdata_pointB //用来检查接收到的数据//############################################### #######################include &quot;DSP281x_Device.h&quot; //F2812头文件#include &quot;DSP281x_Examples.h&quot;#define CPU_FREQ 150E6#define LSPCLK_FREQ CPU_FREQ/4#define SCI_FREQ 100E3#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1//功能函数原型interrupt void sciaTxFifoIsr(void);interrupt void sciaRxFifoIsr(void);interrupt void scibTxFifoIsr(void);interrupt void scibRxFifoIsr(void);void scia_fifo_init(void);void scib_fifo_init(void);void error(void);//全局变量Uint16 sdataA[8]; //SCI-A发送的数据Uint16 sdataB[8]; //SCI-B发送的数据Uint16 rdataA[8]; //SCI-A接收的数据Uint16 rdataB[8]; //SCI-B接收的数据Uint16 rdata_pointA; //用于检查接收到的数据Uint16 rdata_pointB;//主程序void main(void){Uint16 i;//步骤1.初始化系统控制//PLL, 看门狗,使能外设时钟InitSysCtrl();//步骤2.初始化GPIO//InitGpio(); //在这里省略,只需配置以下与SCI有关的GPIO即可EALLOW; //注意,需要EALLOE保护GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4 = 1; GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5 = 1; GpioMuxRegs.GPGMUX.bit.SCITXDB_GPIOG4 = 1; GpioMuxRegs.GPGMUX.bit.SCIRXDB_GPIOG5 = 1; EDIS; //与EALLOW对应使用//步骤3.清除所有的中断并初始化PIE中断向量表DINT; //禁止CPU中断InitPieCtrl(); //初始化PIE控制寄存器IER = 0x0000; //禁止 CPU 中断,并清除所有的CPU 中断标志IFR = 0x0000;InitPieVectTable(); //初始化 PIE 中断向量表,将相应的中断向量指向中断服务程//序,当中断发生时跳转到相应的中断服务程序处EALLOW; //寄存器需要 EALLOE 保护PieVectTable.RXAINT = &sciaRxFifoIsr;PieVectTable.TXAINT = &sciaTxFifoIsr;PieVectTable.RXBINT = &scibRxFifoIsr;PieVectTable.TXBINT = &scibTxFifoIsr;EDIS; //与 EALLOW 对应使用//步骤4.初始化外设//InitPeripherals(); //在本程序中可以省略scia_fifo_init(); //初始化SCI-Ascib_fifo_init(); //初始化SCI-B//步骤5.用户程序段,使能中断//初始化要发送的数据for(i = 0; i<8; i++){sdataA[i] = i;}for(i = 0; i<8; i++){sdataB[i] = 0xFF - i;}rdata_pointA = sdataA[0];rdata_pointB = sdataB[0];//使能所需的中断PieCtrlRegs.PIECRTL.bit.ENPIE = 1; //使能 PIE 模块PieCtrlRegs.PIEIER9.bit.INTx1=1; //PIE Group 9, INT1PieCtrlRegs.PIEIER9.bit.INTx2=1; //PIE Group 9, INT2PieCtrlRegs.PIEIER9.bit.INTx3=1; //PIE Group 9, INT3PieCtrlRegs.PIEIER9.bit.INTx4=1; //PIE Group 9, INT4IER = 0x100; //使能 CPU 中断EINT;//步骤6.空循环for(;;);}void error(void){asm(&quot; ESTOP0&quot;); //Test failed!! Stop! for (;;);}//SCIA 发送中断服务程序interrupt void sciaTxFifoIsr(void){Uint16 i;for(i=0; i< 8; i++){SciaRegs.SCITXBUF=sdataA[i]; //发送数据}for(i=0; i< 8; i++) //要发送的下一个数据{sdataA[i] = (sdataA[i]+1) & 0x00FF;}SciaRegs.SCIFFTX.bit.TXINTCLR=1; //清除 SCI 中断使能位PieCtrlRegs.PIEACK.all|=0x100;}//SCIA 接收中断服务程序interrupt void sciaRxFifoIsr(void){Uint16 i;for(i=0;i<8;i++){rdataA[i]=SciaRegs.SCIRXBUF.all; //读取数据}for(i=0;i<8;i++) //检查接收到的数据{if(rdataA[i] != ( (rdata_pointA+i) & 0x00FF) ) error();}rdata_pointA = (rdata_pointA+1) & 0x00FF; SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; //清除溢出标志位SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; //清除中断标志位PieCtrlRegs.PIEACK.all|=0x100;}//SCIA 初始化函数void scia_fifo_init(){SciaRegs.SCICCR.all =0x0007;//一个停止位,没有奇偶校验位,8位数据位,同步模式//使能发送、接收和内部时钟,禁止RX ERR、SLEEP、TXWAKESciaRegs.SCICTL1.all =0x0003;SciaRegs.SCICTL2.bit.TXINTENA =1;SciaRegs.SCICTL2.bit.RXBKINTENA =1;SciaRegs.SCIHBAUD = 0x0000;SciaRegs.SCILBAUD = SCI_PRD;SciaRegs.SCICCR.bit.LOOPBKENA =1; //使能内部自循环SciaRegs.SCIFFTX.all=0xC028;SciaRegs.SCIFFRX.all=0x0028;SciaRegs.SCIFFCT.all=0x00;SciaRegs.SCICTL1.all =0x0023;SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;SciaRegs.SCIFFRX.bit.RXFIFORESET=1;}//SCIB 发送中断服务程序interrupt void scibTxFifoIsr(void){Uint16 i;for(i=0; i< 8; i++){ScibRegs.SCITXBUF=sdataB[i]; //发送数据}for(i=0; i< 8; i++) //要发送的下一个数据{sdataB[i] = (sdataB[i]-1) & 0x00FF;}ScibRegs.SCIFFTX.bit.TXINTCLR=1; //清除 SCI 中断标志位PieCtrlRegs.PIEACK.all|=0x100;}//SCIB 接收中断服务程序interrupt void scibRxFifoIsr(void){Uint16 i;for(i=0;i<8;i++){rdataB[i]=ScibRegs.SCIRXBUF.all; //读取数据}for(i=0;i<8;i++) //检查接收到的数据{if(rdataB[i] != ( (rdata_pointB-i) & 0x00FF) ) error();}rdata_pointB = (rdata_pointB-1) & 0x00FF; ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1; //清除溢出标志位ScibRegs.SCIFFRX.bit.RXFFINTCLR=1; //清除中断标志位PieCtrlRegs.PIEACK.all|=0x100;}//SCIB 初始化函数void scib_fifo_init(){ScibRegs.SCICCR.all =0x0007;//一个停止位,没有奇偶校验位,8位数据位,同步模式,空闲线模式ScibRegs.SCICTL1.all =0x0003;//使能发送、接收和内部时钟,禁止RX ERR、SLEEP、TXWAKEScibRegs.SCICTL2.bit.TXINTENA =1;ScibRegs.SCICTL2.bit.RXBKINTENA =1;ScibRegs.SCIHBAUD =0x0000;ScibRegs.SCILBAUD =SCI_PRD;ScibRegs.SCICCR.bit.LOOPBKENA =1; //使能内部自循环ScibRegs.SCIFFTX.all=0xC028;ScibRegs.SCIFFRX.all=0x0028;ScibRegs.SCIFFCT.all=0x00;ScibRegs.SCICTL1.all =0x0023;ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1;ScibRegs.SCIFFRX.bit.RXFIFORESET=1;}//############################################### ######################//文件: Example_281xSci_FFDLB.c//说明: 该程序是SCI内部自测试程序,程序首先发送数据0x00到0xFF,// 然后接收数据,并将接收到的数据与发送的数据进行比较//测试变量: ErrorCount:接收数据中错位数据的个数//############################################### #######################include &quot;DSP281x_Device.h&quot;#include &quot;DSP281x_Examples.h&quot;//功能函数原型void scia_loopback_init(void);void scia_fifo_init(void);void scia_xmit(int a);void error(int);interrupt void scia_rx_isr(void);interrupt void scia_tx_isr(void);//全局变量Uint16 LoopCount;Uint16 ErrorCount;//主程序void main(void){Uint16 SendChar;Uint16 ReceivedChar;//步骤1.初始化系统控制(PLL,看门狗,使能外设时钟)InitSysCtrl();//步骤2.初始化GPIO//InitGpio(); //在本例中可以省略,只需配置与SCI 相关的GPIO即可EALLOW;GpioMuxRegs.GPFMUX.all=0x0030; //设置I/O口为SCI口EDIS;//步骤3.初始化中断向量表,禁止并清除所有的 CPU 中断DINT;IER = 0x0000;IFR = 0x0000;//初始化 PIE 控制寄存器到默认状态//InitPieCtrl(); //本例子中不用 PIEInitPieVectTable();EnableInterrupts(); //使能 CPU 和 PIE 中断//步骤4.初始化所有的外设//InitPeripherals(); //SCI测试时跳过此函数//步骤5.用户定义程序段、分配向量、使能中断LoopCount = 0;ErrorCount = 0;scia_fifo_init(); //初始化SCI FIFOscia_loopback_init(); //初始化 SCI 为自循环模式SendChar = 0; //初始化发送变量//步骤6.发送数据并检测接收到的数据for(;;){scia_xmit(SendChar);while(SciaRegs.SCIFFRX.bit.RXFIFST !=1) { } //等待 XRDY =1 (空闲态),即等待数据发送ReceivedChar = SciaRegs.SCIRXBUF.all; //检测接收到的数据if(ReceivedChar != SendChar) error(1);SendChar++; //转移到下一个发送的数据,并重复该操作SendChar &= 0x00FF; //限制发送数据为8位格式 LoopCount++;}}void error(int ErrorFlag){ErrorCount++;//asm(&quot; ESTOP0&quot;); //Uncomment to stop the test here//for (;;);}//测试1, SCIA DLB, 8位数据格式, 波特率为0x000F, default, 1个停止位,没有奇偶校验位void scia_loopback_init(){//注意,如果SCIA的时钟没有打开,那么需要软件打开,用InitSysCtrl()函数SciaRegs.SCICCR.all =0x0007;//1个停止位、无奇偶校验位、8位数据格式、同步模式、空闲线模式SciaRegs.SCICTL1.all =0x0003;//使能发送、接收、和内部时钟,禁止RX EER、SLEEP、TXWAKESciaRegs.SCICTL2.all =0x0003;SciaRegs.SCICTL2.bit.TXINTENA =1;SciaRegs.SCICTL2.bit.RXBKINTENA =1;SciaRegs.SCIHBAUD=0x0000;SciaRegs.SCILBAUD=0x000F;SciaRegs.SCICCR.bit.LOOPBKENA =1; //使能自循环SciaRegs.SCICTL1.all =0x0023;}//发送数据函数void scia_xmit(int a){SciaRegs.SCITXBUF=a;}//初始化SCI FIFOvoid scia_fifo_init(){SciaRegs.SCIFFTX.all=0xE040;SciaRegs.SCIFFRX.all=0x204f;SciaRegs.SCIFFCT.all=0x0;}。

DSP2812实验指导书第二部分_图文(精)

DSP2812实验指导书第二部分_图文(精)

第2章F2812-A评估板硬件使用指导2.1 F2812-A评估板技术指标主处理芯片:TMS320F2812,运行速度为150M;工作速度可达150MIPS;片上RAM 18k*16bit;片上扩展RAM存贮空间64K×16Bit;自带16路12bit A/D,最大采样速率12.5msps;4路的DAC7617转换,100K/S,12Bit;两路UART串行接口,符合RS232标准;16路PWM输出;1路CAN接口通讯;片上128*16bit FLASH,自带128位加密位;设计有用户可以自定义的开关和测试指示灯;4组标准扩展连接器,为用户进行二次开发提供条件;具有IEEE1149.1相兼容的逻辑扫描电路,该电路仅用于测试和仿真; +5V电源输入,内部+3.3V、+1.6V电源管理;4层板设计工艺,工作稳定可靠;具有自启动功能设计,可以实现脱机工作;可以选配多种应用接口板,包括语音板,网络板等。

2.2 F2812 –A 评估板原理图和实物图一. F2812-A 评估板实物图图2.2.2 F2812-A 器件分布图图2.2.1 F2812-A 评估板实物图二. F2812-A 器件分布图图1.2 ICETEK-F2812-A 器件分布图三.F2812-A评估板原理框图图2.2.3 F2812-A评估板原理框图2.3 F2812-A评估板接口说明以下将详细说明这些外围接口的功能和特征定义。

首先,表2-3-1 归纳总结了这些跳线和功能分类,接口位置请参考图2.2.1表2-3-1:接口和功能分类下面将分别介绍这些接口:1. +5v 电源插座: 这个接口用于接入为整个板子供电的电源,电源电压为+5V ,标准配置的电源电流为1A ,如果不使用随板提供的电源,请注意电源的正负极性和电流的大小。

下面是这个接口的插孔示意图:+5V地(GND图2.3.1 电源插孔示意图2. 标准RS-232: 9针D 型连接器,异步串口连接器,符合RS-232规范,输出电平为正负12V .下面是9针连接器的管脚定义:图2.3.2 异步串口连接器示意图3.P1扩展插座:34芯扩展总线接口。

DSP2812-实验要求以及参考程序

DSP2812-实验要求以及参考程序

实验一DSP数据存取实验实验要求:1、找到main函数入口地址4、观察从地址0x80000到0x80007的存储内容操作步骤:1、打开Setup CCStudio v3.3 ,系统配置为F2812 Device Simultor2、打开CCStudio v3.3,打开工程F2812\DSP281x_examples\Lab0201-Memory\Memory.pjt3、在main函数处设断点(F9),运行程序4、打开反汇编窗口(View>Disassembly),观察入口地址5、修改Memory.c中程序,完成存储区数据修改6、编译通过,加载.out 文件7、设置在变量定义处设置断点,点击运行(F5),单步运行(F11)8、打开观察窗(View>Watch Window)观察自己所设变量在单步运行时变化9、打开存储区窗口(View>Memory)观察地址为0x80000到0x80007的数据变化实验二指示灯与拨码开关实验实验要求:1、熟悉板上指示灯控制寄存器、开关控制寄存器2、指示灯点亮规则:只闭合拨码开关1:全灭;只闭合拨码开关2:全亮;只闭合拨码开关3: 顺序依次点亮;只闭合拨码开关4:反向顺序依次点亮;开关的其它状态:全灭;操作步骤:1、打开Setup CCStudio v3.3 ,系统配置为F2812 XDS510 Emulator_12、打开CCStudio v3.3,打开工程F2812\DSP281x_examples\Lab0201-Memory\led.pjt3、修改led.c,注意板上DIP开关控制寄存器地址为C0001h,板上指示灯控制寄存器地址为:C0000h。

这两个寄存器都是低四位有效。

4、观察实验现象实验三DSP定时器实验要求:1、利用定时器中断代替软件延时函数控制指示灯显示频率,要求1秒闪烁一次2、实物仿真时,通过CCS中的Clock功能统计延时函数的延时时间,与设定值进行比较操作步骤:1、打开Setup CCStudio v3.3 ,系统配置为F2812 XDS510 Emulator_12、打开CCStudio v3.3,打开工程F2812\DSP281x_examples\Lab0201-Memory\time.pjt3、修改time.c程序,写一个由定时器中断产生的以1s为单位的延时函数void delay(int time);4、在菜单中选择profile>Enable\View5、在延时函数前后各设置一个断点6、清零时钟计数器(双击清零),点击Run运行程序7、计算时间t=测得值/150000000(假如系统的时钟工作在150MHZ),与设定值进行比较实验四事件管理器实验实验要求1、利用事件管理器中的16路中的PWM1,输出一段连续变化的PWM波2、驱动扬声器蜂鸣器播放一段音乐声(声音频率文件参考Speaker.pjt)操作步骤1、打开Setup CCStudio v3.3 ,系统配置为F2812 XDS510 Emulator_12、打开CCStudio v3.3,打开工程F2812\DSP281x_examples\Lab0201-Memory\PWM.pjt和F2812\DSP281x_examples\Lab0201-Memory\Speaker.pjt3、在例程Speaker.c中是使用通用定时器TIME0来连续输出频率的方波,这里要求改为用EVA中的PWM1代替之。

DSP2812实验(1)

DSP2812实验(1)


编译连接文件:

【Project】【Rebuild All】或者单击工具条图标: 注意编译过程中CCS主窗体下部的“Bulid”提示窗中显示编译信息。 最后会建工程(3)

修改工程文件设置
4. 3 创建工程(2)

编译连接文件:

【Project】【Rebuild All】或者单击工具条 图标: 注意编译过程中CCS主窗体下部的“Bulid”提 示窗中显示编译信息。 最后会给出错误和警告的统计数。
(2)进入CCS设置窗口,按下图标号顺序进行设置:
①Clear②选择【F2812 Device Simulate】③
输入配置④完成保存
(3)在下面出现的窗口选择【否(N)】 (4)设置完成
4.1 设置CCS在软仿真方式下运行(2)
4.1 设置CCS在软仿真方式下运行(3)
4.1 设置CCS在软仿真方式下运行(3)

4.4 基本调试功能(1)



察看工程文件: 查看源文件:双击“volum.c ”
头文件 工作变量定义 子程序调用规则 主函数:变量定义 初始化 主循环 子程序 : int read_signals(int *input); int write_buffer(int *input,int *output,int count); int output_signals(int *output);
TMS320F2812DSP设计实验 ---实验1:CCS入门软件应用实验
一、实验目的



1.掌握CCS的配置步骤过程 2.了解DSP开发系统和计算机与目标系 统的连接方法 3.了解CCS软件的操作环境和基本功能, 了解TMS320F28XX的开发过程

2812实验例程

2812实验例程

§7.2 应用实验例程在这一节里,我们将以TMS320F2812片内外设的应用为主,介绍一部分以F2812 eZdsp TM最小系统为基础的实验例程(部分实验需要进行硬件扩展)。

这些例程源代码的主要部分都是采用C语言编写的。

如果读者需要使用汇编或者C++语言来开发F2812的软件程序,请参考相关的应用手册。

7.2.1 实验例程中的文件安装完CCS,在使用实验例程前,必须先安装好sprc097.zip(TI网站上提供免费下载)压缩包中的DSP28.exe程序,这个软件程序会把包含C281x寄存器声明和定义的C/C++头文件、源文件以及一些外设例程安装到硬盘上。

这些头文件(主要是片内各外设寄存器对应的结构体及共用体类型的声明)、DSP281x_GlobalV ariableDefs.c(寄存器变量的定义)和DSP281x_Headers_nonBIOS.cmd(连接器命令文件)都是下面例程中不可缺少的部分(它们位于….\tidcs\c28\dsp281x\v100\DSP281x_headers\目录下,主要用于片内系统及外设寄存器变量的声明、定义和定位),同时一些通用的系统或者外设初始化源代码文件(比如DSP281x_DefaultIsr.c、DSP281x_PieCtrl.c、DSP281x_PieV ect.c等)也将在一些例程中用到。

一般来说,下面例程的工程中除了主程序源文件外,还包括如下文件:前面提到的用于声明寄存器变量结构的头文件(每部分外设或者系统功能寄存器组都对应一个头文件),使用时只要在程序中包含DSP281x_Device.h就能包含其它所有的系统及外设寄存器头文件。

这里需要注意的是,所有的头文件都不是手工添加的工程中的,只要在源代码文件中加入头文件包含命令,编译连接时会自动添加这些头文件到工程中。

DSP281x_Headers_nonBIOS.cmd:由于同一片内外设模块中的寄存器地址基本上都是连续的,这样这些寄存器变量就能以外设模块为单位配置到一系列输出段,该文件的作用就是根据各寄存器的实际地址将这些段映射到实际的存储器空间中。

2812实验箱实验指导书(精)

2812实验箱实验指导书(精)

DSP(TMS320F2812技术实验指导用书合肥工业大学电气与自动化工程学院DSP实验室目录前言 (3第一部分实验设备软、硬件说明及安装 (4第二部分实验 (9实验1C ODE C OMPOSER使用教程 (9实验2编写一个以C语言为基础的DSP程序 (17实验3编写一个以汇编语言(ASM为基础的DSP程序 (23 实验4编写一个汇编和C混合的DSP程序 (28实验5拨码开关与数字I/O口实验 (32实验6SPI接口与EEPROM存储器读写实验 (34实验7液晶显示器控制显示 (39实验8键盘输入与数码管显示 (43实验9DSP的定时器实验 (46实验10存储器实验 (52实验11AD模数转换实验 (56实验12温度测量实验 (59实验13PWM输出实验 (61实验14频率测量实验 (63实验15有限冲击响应滤波器(FIR滤波实验 (67实验16快速傅立叶变换(FFT频谱分析实验 (74实验17SCI串行接口实验 (81实验18CAN接口通讯自检测实验 (84实验19M C BSP与数模转换实验 (88实验20直流电机调速实验 (90实验21步进电机调速实验 (94实验22USB通信模块实验 (98参考文献 (105前言电气与自动化工程学院为本科生和研究生开设了DSP原理及应用课程、DSP 技术及其应用综合实验。

根据我们学院所设置专业的特点,选择TI公司C2000系列DSP芯片作为主要学习内容,该课程的实践性很强,即实验是该课程的主要内容。

我们针对TI公司C2000系列DSP芯片的工作原理、体系结构、指令系统和应用开发了一套实验平台――TMS320F2812实验箱,该实验箱内容丰富,易于扩展,特别适合综合实验。

为了方便实验教学,我们编写了实验箱的实验指导书。

本实验指导书共分为两部分。

第一部分分是实验设备软、硬件说明及安装。

第二部分介绍在TMS320F2812的实验箱平台上进行的22个实验。

在电气与自动化工程学院DSP实验室的建设中,得到了美国TI公司大学计划的捐赠;得到合肥工业大学实验室自制设备项目的资助;学院领导给予了很大的重视和支持,DSP 实验室的研究生们也做了大量的工作。

2812DSP实验指导书

2812DSP实验指导书

DSP实验在打开实验箱电源的前提下:1、打开CCSStudio3.32、选择debug,选择connect,如果在左下角显示connecting,表示与仿真器连接正常。

实验一、存储器实验。

该实验不用改变硬件,实验内容为在数据存储器的指定地址写上特定数据如0xAAAA,然后将该数据搬移到其他位置。

源程序:(example_dsp281x_mem.c)void main(void){int i;volatile unsigned int *room = (volatile unsigned int *)0x3f9020;volatile unsigned int *room2= (volatile unsigned int *)0x3f902F;建立可变数据类型的两个指针,指向两个地址。

// Initialize System Control:// PLL, WatchDog, enable Peripheral ClocksInitSysCtrl();对看门狗,系统等进行初始化// Disable CPU interruptsDINT;禁止中断// Disable CPU interrupts and clear all CPU interrupt flags:IER = 0x0000;禁止中断IFR = 0x0000;清所有中断标记。

/*将0xAAAA写入从数据空间的地址0x3f9020开始的8个单元中*/for(i=0;i<8;i++){*room=0xAAAA;room指针的地址内填上0xAAAAroom++;}/*从0x3f9020开始的8个空间读出数据依次写入从0x3f9028开始的8个单元中*/for(i=0;i<8;i++){*room2=*(room-1);将room指针减一,然后将其内容填到room2指针的地址内。

room--;room2--;}}InitSysCtrl()函数,在DSP281x_SysCtrl.c中定义。

DSP2812实验指导书第一部分

DSP2812实验指导书第一部分
6.如果无法进入CCS软件仿真请检查:
a.断掉实验箱电源,从仿真器上拔掉usb电缆,重新插usb电缆,检查usb上的红灯和绿灯是按照先红后绿的次序来亮的。然后再打开实验箱电源。
7.显示/控制模块上的两个电源插座不要连接错误,上边插座为+12V,下面的为+5V;
8.连接不同类型的插座时,请再三确认无误后进行;
9.不要带电拔插各模块;
10.不要带电拔插仿真器和DSP评估板上JTAG插头的连接电缆;
11.如无特殊情况,请勿打开实验箱底板;
12.不要带电拔插键盘插头;
13.如遇实验箱冒烟等异常现象请立即关闭总电源,并查找原因。
支持CCS。
通用开发系统和DSP控制板分离,有利于将来DSP的升级。同时,也可以脱离实验箱单独从事科研开发使用。
3、通用控制模块部分:
显示输出:
-液晶显示(LCD):240×128点阵图形显示屏,可调整显示对比度。
-发光二极管。
音频输出:可由DSP I/O脚控制的蜂鸣器;D/A输出提供音频插座,可直接接插耳机。
表1-2-6寄存器CTRLED
Bit7
Bit6
bit5
bit4
bit3
bit2
bit1
bit0
Led11
Led10
Led9
Led8
Led7
Led6
Led5
Led4
该寄存器的地址映射到5416DSP的IO扩展空间Port8004上。DSP通过对该地址的写操作来CTRLED上各位的状态,当寄存器某位取‘0’值时,相应指示灯被点亮,取‘1’值则熄灭。
三.DSP教学实验箱故障判断及排除
1.无法接通电源:请检查外接电缆是否完好;电缆是否与实验箱边插座连接妥当;电缆是否与外接插座连接紧密;检查实验箱上220V电源插座(箱体左侧)中保险管是否完好。
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

§7.2 应用实验例程在这一节里,我们将以TMS320F2812片内外设的应用为主,介绍一部分以F2812 eZdsp TM最小系统为基础的实验例程(部分实验需要进行硬件扩展)。

这些例程源代码的主要部分都是采用C语言编写的。

如果读者需要使用汇编或者C++语言来开发F2812的软件程序,请参考相关的应用手册。

7.2.1 实验例程中的文件安装完CCS,在使用实验例程前,必须先安装好sprc097.zip(TI网站上提供免费下载)压缩包中的DSP28.exe程序,这个软件程序会把包含C281x寄存器声明和定义的C/C++头文件、源文件以及一些外设例程安装到硬盘上。

这些头文件(主要是片内各外设寄存器对应的结构体及共用体类型的声明)、DSP281x_GlobalV ariableDefs.c(寄存器变量的定义)和DSP281x_Headers_nonBIOS.cmd(连接器命令文件)都是下面例程中不可缺少的部分(它们位于….\tidcs\c28\dsp281x\v100\DSP281x_headers\目录下,主要用于片内系统及外设寄存器变量的声明、定义和定位),同时一些通用的系统或者外设初始化源代码文件(比如DSP281x_DefaultIsr.c、DSP281x_PieCtrl.c、DSP281x_PieV ect.c等)也将在一些例程中用到。

一般来说,下面例程的工程中除了主程序源文件外,还包括如下文件:前面提到的用于声明寄存器变量结构的头文件(每部分外设或者系统功能寄存器组都对应一个头文件),使用时只要在程序中包含DSP281x_Device.h就能包含其它所有的系统及外设寄存器头文件。

这里需要注意的是,所有的头文件都不是手工添加的工程中的,只要在源代码文件中加入头文件包含命令,编译连接时会自动添加这些头文件到工程中。

DSP281x_Headers_nonBIOS.cmd:由于同一片内外设模块中的寄存器地址基本上都是连续的,这样这些寄存器变量就能以外设模块为单位配置到一系列输出段,该文件的作用就是根据各寄存器的实际地址将这些段映射到实际的存储器空间中。

DSP281x_GlobalV ariableDefs.c:将所有存储器映射的系统及外设寄存器定义成全局变量(这些变量的数据结构已经在对应的系统及外设头文件中声明过),并将这些变量分配到.cmd文件中对应的输出段中。

F2812_EzDSP_RAM_lnk.cmd:针对在RAM中运行的程序而编写的链接器命令文件,在DSP28.exe的安装目录下可以找到,也可以自己重新编写一个。

rts2800_ml.lib:C语言实时运行库文件。

7.2.1.1 CMD文件简介下面我们以F2812_EzDSP_RAM_lnk.cmd为例,简单介绍一下CMD文件的组成、基本伪指令的含义和用法:CMD文件的内容主要分为以下两部分:MEMORY以伪指令MEMORY开始的部分是用来定义目标板上存储器资源的分布,即有哪些存储器可以用,该文件中的这部分内容如下所示:MEMORY{PAGE 0 :/* 此处, 片内的H0被分成了PAGE 0 和PAGE 1两部分*//* BEGIN区域在“从H0引导”模式下使用*//* 只有在从XINTF区域7中开始引导时,才将复位向量加载到RESET区域中,*/ /* 否则,复位向量会从Boot ROM中取得*/RAMM0 : origin = 0x000000, length = 0x000400BEGIN : origin = 0x3F8000, length = 0x000002PRAMH0 : origin = 0x3F8002, length = 0x000FFERESET : origin = 0x3FFFC0, length = 0x000002PAGE 1 :RAMM1 : origin = 0x000400, length = 0x000400DRAMH0 : origin = 0x3f9000, length = 0x001000}其中,PAGE0代表的是程序存储区,PAGE1指数据存储区,RAMM0和BEGIN等都是程序存储器中各个自定义子区域的名称,数据存储区同理。

每个子区域内的空间是连续的,后面的参数分别指示其起始地址和长度。

区域间可以是离散或者连续(有时为了编程思路的清晰化,对实现不同功能的连续存储区域分别独立取名)。

如果某一段物理存储器没有在MEMORY伪指令后进行配置,则链接器不会将任何程序或者变量定位到那里。

SECTIONS而以伪指令SECTIONS开始的部分则用来控制程序文件中代码和数据输出段在存储器区域(必须是在MEMORY部分定义好的子区域)中的定位,该部分内容如下:SECTIONS{/* 以下是用于“从H0引导”模式的设置:*//* 将codestart (DSP28_CodeStartBranch.asm代码的输出段)定位到H0的起始处*/codestart : > BEGIN, PAGE = 0ramfuncs : > PRAMH0 PAGE = 0.text : > PRAMH0, PAGE = 0.cinit : > PRAMH0, PAGE = 0.pinit : > PRAMH0, PAGE = 0.switch : > RAMM0, PAGE = 0.reset : > RESET, PAGE = 0, TYPE = DSECT /* 没有使用*/.stack : > RAMM1, PAGE = 1.ebss : > DRAMH0, PAGE = 1.econst : > DRAMH0, PAGE = 1.esysmem : > DRAMH0, PAGE = 1}这里.text代表程序中的可执行代码段,后面的指令参数表示此段代码程序将被装载到程序存储器的PRAMH0区域中,而.cinit段的存储器区域定位将紧接着.text段后面。

同理,以.stack和.ebbs为首的指令参数表示的是堆栈和未初始化变量在数据存储器DRAMH0区域中的定位。

MEMORY部分描述的是用户如何给目标存储器进行分类、分区,其描述和定义的对象必须是实际存在的物理存储器;而SECTIONS部分就是规定目标程序代码、变量将被装载或是定位到存储器的哪个区域,其控制的对象是源代码程序的各个输出段,其定位的范围只能是MEMORY部分中定义好的存储器区域。

需要注意:从CCS 2.20开始才允许向一个工程里添加多个CMD文件。

这里仅仅给出了一个CMD文件最简单的应用,并介绍了其中最基本和最常用伪指令的用法,如果读者需要进一步了解CMD文件中的其它伪指令及应用,请参考28x的汇编语言工具使用手册中链接器一章。

7.2.1.2 寄存器变量的声明和定义文件下面我们以通用I/O口数据寄存器变量为例,通过其寄存器变量的声明(.h)和定义文件(.c)简单介绍一下寄存器变量型数据结构的声明、寄存器变量对象的定义、输出段的映射以及寄存器变量成员的访问方法:在DSP281x_Gpio.h中有如下声明:struct GPADA T_BITS {Uint16 GPIOA0:1; //第0位GPIOA0Uint16 GPIOA1:1; //第1位GPIOA1Uint16 GPIOA2:1; //第2位GPIOA2Uint16 GPIOA3:1; //第3位GPIOA3…..//类似地,下面还有12个数据位成员,此处省略,详细请见源程序};上面的代码声明了一个叫GPADA T_BITS的结构体,这个16位结构体中包含16个二进制位成员,这些成员的名称从低到高各位分别对应GPIOA0~GPIOA15。

union GPADA T_REG {Uint16 all;struct GPADA T_BITS bit;};上面的代码声明了一个叫GPADA T_REG的共用体,这个共用体既可以当成一个16位无符号整型数据来用,也可以当成GPADA T_BITS结构体形式的数据。

如果需要当成前者来引用,就要使用all这个成员名,如果是后者,则要用成员名bit。

struct GPIO_DA TA_REGS {union GPADA T_REG GPADA T;union GPASET_REG GPASET;union GPACLEAR_REG GPACLEAR;union GPA TOGGLE_REG GPA TOGGLE;union GPBDA T_REG GPBDA T;union GPBSET_REG GPBSET;union GPBCLEAR_REG GPBCLEAR;union GPBTOGGLE_REG GPBTOGGLE;Uint16 rsvd1[4]; //保留区域…...//下面还有一些寄存器共用体成员的声明,此处省略,详细请参考源程序。

};上面的代码声明了一个叫GPIO_DA TA_REGS的结构体,它是根据通用I/O口各数据寄存器的地址分布(总体上讲,他们在存储器空间中是连续分布的),为这整块存储区域声明一个结构体。

在这块存储区域中,如果遇到保留区域,就根据其大小将这片保留区域声明成16位无符号整型数组,如上面GPIO_DA TA_REGS结构体中的rsvd1数组成员就表示GPBTOGGLE寄存器后面4个字大小的存储区域是被保留的区域。

在DSP281x_GlobalV ariableDefs.c中有如下定义:#ifdef __cplusplus#pragma DA TA_SECTION("GpioDataRegsFile") //针对C++编译器#else#pragma DA TA_SECTION(GpioDataRegs,"GpioDataRegsFile");//针对C编译器#endifvolatile struct GPIO_DA TA_REGS GpioDataRegs;编译指示符DA TA_SECTION的作用是通知编译器将某变量分配到指定的输出段里,上面这段代码的功能就是定义GPIO_DA TA_REGS结构体型的变量GpioDataRegs(寄存器组变量),并将GpioDataRegs变量定位到GpioDataRegsFile输出数据段中。

注意:此处变量定义时使用的volatile关键词非常重要,它能够告诉编译器此变量的内容可能会被硬件修改,因此,编译器就不会对其进行优化。

如果不使用这个关键词,那么编译器有可能将这个变量优化到CPU寄存器中,从而导致不可预见的错误。

在DSP281x_Headers_nonBIOS.cmd中有如下伪指令代码:MEMORY{PAGE 0: /*程序存储空间*/PAGE 1: /*数据存储空间*/GPIODA T : origin = 0x0070E0, length = 0x000020 /* GPIO 数据寄存器组*/….//省略}SECTIONS{…. //省略GpioDataRegsFile : > GPIODA T PAGE = 1…. //省略}通过上面cmd文件中的伪指令,我们又能将数据输出段GpioDataRegsFile指定到实际的数据存储器区域GPIODA T里(该区域起始地址为0x0070E0,长度是0x000020)。

相关文档
最新文档