您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 河南理工DSPandMCU
1DSPandMCU(MicroControllerUnit)DSP采用的哈佛结构(HarvardArchitecture),数据空间和存储空间是分开的,通过独立的数据总线在程序空间和数据空间同时访问。而MCU采用的冯·诺伊曼结构(VonNeumannArchitecture),数据空间和存储空间共用一个存储器空间,通过一组总线(地址总线与数据总线)连接到CPU。显然,运算能力上MCU不如DSP;但MCU价格便宜,对性能要求不高的场合MCU具有很大的优势。1.2ThecharacteristicsofDSP数字信号处理不同于普通的科学计算与分析,它强调运算的实时性。除了具备普通微处理所强调的高速运算和控制能力外,针对实时数字信号处理的特点,在处理器的结构、指令系统、指令流程上作了很大的改进,其主要特点如下:�程序空间和数据空间分开,CPU可以同时访问指令和数据;��在一个指令周期内可以完成一次乘法和一次加法运算;�片内具有快速RAM,通常可以通过独立的数据总线在程序空间和数据空间同时访问;�具有低开销或无开销循环及跳转的硬件支持;�具有快速的中断处理和硬件I/O支持;��可以并行执行多个操作;�支持流水线操作,使得取址、译码和执行等操作可以重叠执行。DSPandARMARM面向低成本预算市场微处理器。ARM具有较强的事务管理能力,适合用来跑界面、操作系统等,其优势体现在控制方面,像手持设备90%左右的市场份额均被其占有。而DSP优势是强大的数据处理能力和较高的运行速度,所以多用于数据处理,例如加密/解密、调制/解调等。但是TI公司的C2000系列的DSP除了具有强大的运算能力,在控制领域也是佼佼者。DSPandFPGAFPGA是在PAL、GAL、PLD等可编程器件的基础上发展而来的,是专用集成电路中集成度最高的一种。FPGA采用了逻辑单元LCA的概念。FPGA能够进行方便的编程、除错、再编程和重复操作,可以充分地进行设计开发和验证,其现场可编程能力可以延长产品在市场上的寿命。但是其价格比较昂贵,这是限制其应用的主要原因。选择DSP芯片时应考虑如下因素。.运算量运算量是确定DSP处理能力的基础.运算速度价格硬件资源运算精度:一般的定点DSP芯片的字长为16位,浮点芯片的字长一般为32位。开发工具功耗其他..哈佛结构处理器有两个的特点:(1)使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存;(2)使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径,而这两条总线之间毫无关联。该结构采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理DSP技术将会有以下一些发展趋势:(1)DSP的内核结构将进一步改善(2)DSP和微处理器的融合(3)DSP和高档CPU的2融合(4)DSP和SOC的融合(5)DSP和FPGA的融合(6)实时操作系统RTOS与DSP的结合(7)DSP的并行处理结构(8)功耗越来越低第3章CMD文件又分成两种。一种是分配RAM空间的,用来将程序load到RAM内进行调试,因为我们大部分时间都是在调试程序,所以多用这类CMD,gpio工程中的sram.cmd就是用于分配RAM空间的,另一种是分配FLASH空间的,当程序调试完毕后,需要将其烧写到FLASH内部进行固化,这个时侯我们就需要使用这类CMD文件了。上电顺序:在系统没有加电的情况下将仿真器和F28335的JTAG口连接好,然后将+5V的电源插到电源插座,接着把仿真器的USB口连接到电脑的USB口上,仿真器红色的POWER灯亮,打开CCS3.3,点击“Debug”菜单,然后点击“Connect”,仿真器绿色的TARGET灯亮,说明CCS3.3已经和DSP通过仿真器连接成功。下电顺序:和上电时的顺序正好完全相反,点击“Debug”菜单,然后点击“Disconnect”,断开CCS3.3和DSP的连接,然后关闭CCS3.3,接着将仿真器的USB口从电脑的USB口拔下,仿真器红色的POWER灯灭,再将+5V电源拔出,最后可以将仿真器的JTAG口和F28335的JTAG口拔开。菜单栏——和CCS所有功能相关的菜单都在这里面。•编译工具栏——编译程序时常用的一些工具。•调试工具栏——调试程序时常用的一些工具。•工程文件框——打开的工程所有文件会按类别放在这里,便于我们编程时在各个文件之间的切换。•代码编辑区——顾名思义,代码都是在这里编辑完成的了,是我们最主要的工作区域。•编译信息输出区——编译时产生的信息会在这个区域内输出,能让我们直观的了解到正在编译哪个文件,编译过程中是否产生了错误,而这些错误是哪些,由于什么原因引起的,这些内容都会显示在这里。单步调试在调试程序的时候经常会遇到一些需要逐行运行、逐行分析的情况,只有这样才能定位到问题的所在,这时候就需要使用单步调试的功能了。CCS3.3的单步调试工具有两种,一种是针对C语言源程序单步调试的,一种是针对反汇编程序单步调试的。•添加、移除断点Run和Animate的时候,我们就提到了断点,顾名思义,“断点”就是使程序运行中断的点。我们有时候要看看某一行代码是否被执行,或者执行前后某些变量的状态变化情况,就需要在这一行代码前设置一个断点。添加断点的方法很简单,您可以在需要添加断点的这行代码前双击,这行代码前就会出现一个红色圆圈,这就是断点了。添加断点的另外一种方法是将光标移动到需要添加的这行代码前面,然后点击工具栏上的小手按钮,就能给这一行添加断点了。在volume.c文件中“puts(“hellodsp!\n”)”这一行添加断点,如图所示。重新载入可执行文件,点击Run按钮,程序运行到断点处就停了下来,断点所在这一行的功能就是输出“hellodsp!”这个字符串,由于断点处,这一句代码还没有被执行,因此图所示的stdout窗口内是空白的。当再点击Run按钮,断点所在这一行的代码被执行,这时候,如图所示,stdout窗口内显示字符串“hellodsp!”使用watchwindow观察变量一个程序里通常会有许多变量,而常常希望在调试的时候能够看到某个或者某些变量的值,以便于判断程序运行是否正常,是否符合既定的要求。可以使用watchwindow的功能来查看变量的值。例如,想看volume.c中数组inp_buffer中元素的值。先在dataIO()这一行设3置一个断点,然后点击“Run”按钮,程序运行到断点处停止。然后用鼠标选择inp_buffer数组,右键点击,选择弹出菜单中的“AddtoWatchWindow”,就可以将inp_buffer数组添加到WatchWindow的窗口。统计代码的运行时间•在工程实际项目中,通常会对程序的执行时间有所要求,例如在电力自动化保护装置内,通常要对电压电流等数据进行FFT变换,而这些处理的过程是有时间要求的,这就需要学会在CCS3.3中统计代码的运行时间。•首先,重新将可执行文件下载到RAM中,然后点击菜单栏中的“View”菜单,接着点击“MixedSource/ASM”将窗口浏览模式切换到源程和汇编程序同时显示的模式。点击菜单栏中的“Debug”菜单,在下拉菜单中点击“GOMain”,会看到代表源程序的黄色小箭头指向了main函数的入口处,代表汇编程序的绿色小箭头也指向了main函数开始的地方。在Main函数内的第一行代码前设置断点,这样前期的准备工作就差不多完成了。位域定义•位域也是C语言中的一种数据结构,因此需要遵循先声明后使用的原则。前面例中,声明了bs1,说明bs1是bs型的变量,共占2个字节,其中位域a占8位,位域b占2位,位域c占6位。•关于位域的几点说明:–位域的定义必须按从右往左的顺序,也就是得从最低位开始定义。–一个位域必须存储在同一个字节中,不能跨两个字节。如果一个字节所剩余空间不够放另一位域时,应该从下一个单元起存放该域,如structbs//定义位域bs{inta:4;int:0;//空域intb:5;//从第二个字节开始存放intc:3;};在这个位域定义中,第1个位域a占第1个字节的4位,而第2个位域b占5位,很显然第1个字节剩下的4位不能够完全容纳位域b,所以第1个字节的后4位写为0,定义为空域,b从第2个字节开始存放。位域的长度不能大于一个字节的长度,也就是说一个位域不能超过8位。位域可以无位域名,这时,他只用作填充或调整位置。无名的位域不能使用,例如:structbs//定义位域bs{inta:4;int:2;//这两位不能使用intb:2;intc:5;intd:3;};ADCTRL1的共同体定义结构体是为每一位分配空间;共同体是共用一个存储空间,同一时间只有一个在用。定义结构体、对变量进行声明为结构体、对声明的变量进行整体操作或是按位操作unionADCTRL1_REG{Uint16all;structADCTRL1_BITSbit;4};unionADCTRL1_REGADCTRL1;ADCTRL1.all=0x00E0;ADCTRL1bitCONTRUN=1(先定义了一个共同体;ADCTRL1REG,然后声明了一个ADCTRL1_REG变量ADCTRL1,接下来变量ADCTRL1就可以对寄存器实现整体操作或进行位操作。)寄存器文件的空间分配这个工作需要两步来完成:•使用DATA_SECTION方法将寄存器文件分配到数据空间中的某个数据段;•在CMD文件中,将这个数据段直接映射到这个外设寄存器所占的存储空间。MEMORY伪指令语法如下:MEMORY{PAGE0:name0[(attr)]:origin=constant,length=constantPAGE1:namen[(attr)]:origin=constant,length=constant}MEMORY、PAGE0大写,PAGE表明是分页制,同一页内不能取相同存储器名字。PAGE:用来标识存储空间的关键字,其中PAGE0为程序空间,PAGE1数据空间。name代表某一属性或地址范围的存储空间名称。名称可以是1-8个字符,在同一页内名称不能相同,不同页内名称能相同。attr用来规定存储空间的属性。共有4个属性,分别用四个字母来表示。只读R,只写W,该空间可包含可执行代码X,该空间可以被初始化I。实际使用时,为了简化起见,通常忽略此选项,表示存储空间具有所有的属性。origin用来定义存储空间的起始地址;length用来定义存储空间的长度。SECTIONS伪指令语法如下:name:[property,property,property,…]name:[property,property,property,…]……}name为输出段的名称;property为输出段的属性,常用的属性有:1.load:定义输出段将被装载到哪里的关键字:load=allocation或allocation或>allocationallocation可以是绝对地址,例如“load=0x000400”#pragmaDATA_SECTION(AdcRegsFile)#else#pragmaDATA_SECTION(AdcRegs,AdcRegsFile);#endifltilttADCAdR上面语句的作用就是将AdcRegs分配到名字为AdcRegsFile的数据volatilestructADC_REGSAdcRegs;段。CMD文件会将每个数据段直接映射到相应的存储空间中。由于ADCREGS寄存器映射到起始地址为0x007100的存储空间。使用分配好的数据段,变量AdcRegs就会分配到起始地址为0x007100的存储空间.MEMORY{PAGE0:/*ProgramMemory*/5FLASH:origin=0x300000,length=0x40000PAGE1:/*
本文标题:河南理工DSPandMCU
链接地址:https://www.777doc.com/doc-2254371 .html