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”,其中各项均为空。
  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)。

相关文档
最新文档