DSP学习笔记
- 格式:doc
- 大小:127.01 KB
- 文档页数:52
Knowledge问题谁在DSP的汇编语言中加入了NOP指令?NOP指令加入的条件是什么?About DSP1.DSP是实时数字信号处理的核心和标志。
2.DSP分为专用和通用两种类型。
专用DSP一般采用定点数据结构(一般不支持小数),数据结构简单,处理速度快;通用DSP灵活性好,但是处理速度有所降低。
3.DSP采用取指、译码、执行三个阶段的流水线(Pipeline)技术,缩短了执行时间,提高了运行速率。
DSP具有8个Functional unit,如果并行处理的话,以600MHz的时钟计算,如果执行的指令是single cycle指令,则可以4800MIPS(指令每秒)。
4.DSP的8个functional Unit,具有独特的功能,对滤波、矩阵运算、FFT(傅里叶变换)具有哈弗结构把指令空间与数据空间隔离的存储方式。
这样实现是为了实现指令的连续读取,而实现pipeline流水线结构。
传统哈弗结构:两个独立的存储空间,还使用独立总线。
让取指与执行存储独立,加快执行速度。
改进型哈弗结构:指令与数据的存储空间还是独立的。
但是使用公共的总线(地址总线与数据总线)。
这样实现的原因是因为出现了CACHE,数据的存储动作大部分被内部的CACHE 总线承接了,所以总线冲突的情况会大大减少。
同时让总线的结构与控制变得简单,CACHE 存储的速度也明显快于外设存储器。
冯诺依曼结构:是指令空间与数据空间共享的存放方式。
它不能实现pipeline的执行过程。
Pipeline(流水线)技术是把指令的取指-译码和指令的执行独立开来的技术。
虽然每条指令的过程还是要经过取指-译码-执行三个阶段最少3个CPU Cycle。
但是多个指令同时并行先后进行,保证总体的指令吞吐速率理想情况下可以保证在每个指令只要一个CPU CYCLE。
Pipeline技术必须要有哈弗结构支持,即必须把指令空间与数据空间隔离存放。
流水线阻断流水线中阻断现象也十分普遍,下面就各种阻断情况下的流水线性能进行详细分析。
dsp知识点总结一、DSP基础知识1. 信号的概念信号是指用来传输信息的载体,它可以是声音、图像、视频、数据等各种形式。
信号可以分为模拟信号和数字信号两种形式。
在DSP中,我们主要研究数字信号的处理方法。
2. 采样和量化采样是指将连续的模拟信号转换为离散的数字信号的过程。
量化是指将信号的幅度离散化为一系列离散的取值。
采样和量化是数字信号处理的基础,它们决定了数字信号的质量和准确度。
3. 傅里叶变换傅里叶变换是一种将时域信号转换为频域信号的方法,它可以将信号的频率分量分解出来,从而可以对信号进行频域分析和处理。
傅里叶变换在DSP中有着广泛的应用,比如滤波器设计、频谱分析等。
4. 信号处理系统信号处理系统是指用来处理信号的系统,它包括信号采集、滤波、变换、编解码、存储等各种功能。
DSP技术主要用于设计和实现各种类型的信号处理系统。
二、数字滤波技术1. FIR滤波器FIR滤波器是一种具有有限长冲激响应的滤波器,它的特点是结构简单、稳定性好、易于设计。
FIR滤波器在数字信号处理中有着广泛的应用,比如音频处理、图像处理等。
2. IIR滤波器IIR滤波器是一种具有无限长冲激响应的滤波器,它的特点是频率选择性好、相位延迟小。
IIR滤波器在数字信号处理中也有着重要的应用,比如通信系统、控制系统等。
3. 数字滤波器设计数字滤波器的设计是数字信号处理的重要内容之一,它包括频域设计、时域设计、优化设计等各种方法。
数字滤波器设计的目标是满足给定的频率响应要求,并且具有良好的稳定性和性能。
4. 自适应滤波自适应滤波是指根据输入信号的特性自动调整滤波器参数的一种方法,它可以有效地抑制噪声、增强信号等。
自适应滤波在通信系统、雷达系统等领域有着重要的应用。
三、数字信号处理技术1. 数字信号处理器数字信号处理器(DSP)是一种专门用于数字信号处理的特定硬件,它具有高速运算、低功耗、灵活性好等特点。
DSP广泛应用于通信、音频、图像等领域,是数字信号处理技术的核心。
1.DSP选型:主要考虑处理速度、功耗、程序存储器和数据存储器的容量、片内的资源,如定时器的数量、I/O 口数量、中断数量、DMA通道数等。
DSP的主要供应商有TI,ADI,Motorola,Lucent和Zilog等,其中TI占有最大的市场份额。
选择DSP可以根据以下几方面决定:1)速度:DSP速度一般用MIPS或FLOPS表示,即百万次/秒钟。
根据您对处理速度的要求选择适合的器件。
一般选择处理速度不要过高,速度高的DSP,系统实现也较困难。
2)精度:DSP芯片分为定点、浮点处理器,对于运算精度要求很高的处理,可选择浮点处理器。
定点处理器也可完成浮点运算,但精度和速度会有影响。
3)寻址空间:不同系列DSP程序、数据、I/O 空间大小不一,与普通MCU不同,DSP在一个指令周期内能完成多个操作,所以DSP的指令效率很高,程序空间一般不会有问题,关键是数据空间是否满足。
数据空间的大小可以通过DMA的帮助,借助程序空间扩大。
4)成本:一般定点DSP的成本会比浮点DSP的要低,速度也较快。
要获得低成本的DSP系统,尽量用定点算法,用定点DSP。
5)实现方便:浮点DSP的结构实现DSP系统较容易,不用考虑寻址空间的问题,指令对C语言支持的效率也较高。
6)内部部件:根据应用要求,选择具有特殊部件的DSP。
如:C2000适合于电机控制;OMAP适合于多媒体等。
1)C5000系列(定点、低功耗):C54X,C54XX,C55X相比其它系列的主要特点是低功耗,所以最适合个人与便携式上网以及无线通信应用,如手机、PDA、GPS等应用。
处理速度在80MIPS--400MIPS之间。
C54XX和C55XX一般只具有McBSP同步串口、HPI并行接口、定时器、DMA等外设。
值得注意的是C55XX提供了EMIF外部存储器扩展接口,可以直接使用SDRAM,而C54XX则不能直接使用。
两个系列的数字IO 都只有两条。
2)C2000系列(定点、控制器):C20X,F20X,F24X,F24XX ,C28x该系芯片具有大量外设资源,如:A/D、定时器、各种串口(同步和异步),WATCHDOG、CAN总线/PWM 发生器、数字IO 脚等。
1GPIO作为通用I/O口使用a)EALLOW;//防止私自写或覆盖寄存器的内容,加了这句,接下来可以操作寄存器了b)GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为普通I/O功能c)GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // 1,设置为输出;0设置为输入d)EDIS;//加了这句,接下来不可以操作寄存器注:EALLOW,EDIS总是成对出现2中断过程(代码以配置SCIB模块的接收中断为例,LSPCLK是37.5MHz)中断共分三级,1,外设级;2,PIE级;3,CPU级;外设级的中断标志必须手动清零;PIE级和CPU级的中断标志位由硬件自动清零。
中断响应例程:第一步,配置中断源,即允许产生什么类型点中断。
例如,定时器中断,串口中断,外部中断等。
ScibRegs.SCICTL2.bit.RXBKINTENA =1;允许接收中断第二步,配置PIE(外部中断扩展)a) InitPieCtrl();//初始化Pie控制b) InitPieVectTable();//初始化Pie向量表控制c) EALLOW;d) PieVectTable.SCIRXINTB=&scibreceive;//指定中断服务程序地址e) EDIS;f) PieCtrlRegs.PIECTRL.bit.ENPIE=1;//使能从PIECTRL中读取中断向量g) PieCtrlRegs.PIEIER9.bit.INTx3=1;//使能SCIB的接收中断h) IER |= M_INT9;//允许外部中断i) EINT;j) ERTM;第三步,中断响应在中断服务程序里,必须用PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;//清楚中断已响应标识,再写自己等程序代码3串口配置InitScibGpio();scib_echoback_init();4AD转换InitAdc();//允许ADC时钟,带隙和参考电路上电,核中模拟电路上电AdcRegs.ADCTRL2.all = 0x2000;//ADC模块开始转换程序在FLASH运行时,需要加如下两句代码:(不知道具体原因)MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);InitFlash();。
1.数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。
输入信号可以是语音信号、传真信号,也可以是视频信号,还可以是传感器(如温度传感器)的输出信号。
输入信号经过带限滤波后,通过A/D转换器将模拟信号转换成数字信号。
根据采样定理,采样频率至少是输入带限信号最高频率的2倍,在实际应用中,一般为4倍以上。
数字信号处理一般是用DSP芯片和在其上运行的实时处理软件对输入数字信号按照一定的算法进行处理,然后将处理后的信号输出给D/A转换器,经D/A转换、内插和平滑滤波后得到连续的模拟信号。
3.数字信号处理的实现方法一般有以下几种:(1) 在通用型计算机上用软件实现。
一般采用C语言、MA TLAB语言等编程,主要用于DSP算法的模拟与仿真,验证算法的正确性和性能。
优点是灵活方便,缺点是速度较慢。
(2) 在通用型计算机系统中加上专用的加速处理器实现。
专用性强,应用受到很大的限制,也不便于系统的独立运行。
(3) 在通用型单片机(如MCS-51、MCS-96系列等)上实现。
只适用于简单的DSP算法,可用于实现一些不太复杂的数字信号处理任务,如数字控制。
(4) 用通用型可编程DSP芯片实现。
与单片机相比,DSP芯片具有更加适合于数字信号处理的软件和硬件资源,可用于复杂的数字信号处理算法。
特点是灵活、速度快,可实时处理。
(5) 用专用型DSP芯片实现。
在一些特殊的场合,要求信号处理速度极高,用通用型DSP芯片很难实现,例如专用于FFT、数字滤波、卷积、相关等算法的DSP芯片,这种芯片将相应的信号处理算法在芯片内部用硬件实现,无须进行编程。
处理速度极高,但专用性强,应用受到限制。
在上述几种实现方法中,(1)~(3)和(5)都有使用的限制,只有(4)才使数字信号处理的应用打开了新的局面。
4.DSP系统的特点基于通用DSP芯片的数字信号处理系统与模拟信号处理系统相比,具有以下优点:(1) 精度高,抗干扰能力强,稳定性好。
1、cj431电压基准芯片,2.5v2、电平标准3、驱动器74HC245(为增强PWM的驱动负载能力)4、增加输入端的抗干扰能力:在芯片的输入端加上拉电阻加电源或者下拉电阻接地,没有用到的采样端口尽量不要悬空。
5、D/A电路方案通用扩展语言GEL和c相似,但是有所不同。
GEL语言是C语言的一个子集。
与c语言不同的是gel不需要指定函数返回值的类型。
Gel中的while语句和c中的while语句相同,gel不支持标准c的break和continue语句6、一个完整的dsp工程包括头文件(.h),库文件(.lib),源文件(.c),以及配置文件.Cmd使用关键字MENUITEM可以在gel菜单下选择用户自定义的菜单项,然后用hotmenu、dialog或slider等关键字,在这个新的下拉菜单中添加新的菜单项。
7、关于添加文件遇到的问题8、变量查找:edit→find:Ctrl+f9、调试时,添加断点的快捷方法如下点击图上的小手即可10、单步调试第一个的意思是单击一步走一步,第二个的意思是指在单步运行时遇到子函数不进入子函数内部进行而是把它当成一步来执行,第三个的意思是当执行到子函数内部时使用这个按钮就可以执行完剩下的部分返回上一层函数。
如果想在一个窗口内同时看到c和汇编,则有操作View→mixed source/asm 11、观察变量右击变量→add to watch window 可以得到变量的值、类型、地址等。
12、位域定义、结构体以及共同体的知识结构体先定义再声明Union SCIFFCT_REG {Uint16 all;Struct SCIFFCT_BITS bit;};//---------------------------------------------------------------------------// SCI Register File://Struct SCI_REGS {Union SCICCR_REG SCICCR; // Communications control register Union SCICTL1_REG SCICTL1; // Control register 1Uint16 SCIHBAUD; // Baud rate (high) registerUint16 SCILBAUD; // Baud rate (low) registerUnion SCICTL2_REG SCICTL2; // Control register 2Union SCIRXST_REG SCIRXST; // Receive status registerUint16 SCIRXEMU; // Receive emulation buffer registerUnion SCIRXBUF_REG SCIRXBUF; // Receive data bufferUint16 rsvd1; // reservedUint16 SCITXBUF; // Transmit data bufferUnion SCIFFTX_REG SCIFFTX; // FIFO transmit registerUnion SCIFFRX_REG SCIFFRX; // FIFO receive registerUnion SCIFFCT_REG SCIFFCT; // FIFO control registerUint16 rsvd2; // reservedUint16 rsvd3; // reservedUnion SCIPRI_REG SCIPRI; // FIFO Priority control};//---------------------------------------------------------------------------// SCI External References & Function Declarations://Extern volatile struct SCI_REGS SciaRegs;Extern volatile struct SCI_REGS ScibRegs;由于scihbaud和scilbaud定义时为unit16型的,所以不能用.all或者.bit 的方式来访问,只能直接给寄存器整体进行赋值。
DSP学习心得笔记---------------- 白建成.baijc.icekoor引言:学习DSP的时间有两个多月了,收获很多新知识,我们要每天都有进步才行,以下内容没有特别的顺序,跟具自己的学习情况写的,如果有不对的地方希望指出来,如果有不懂得也可以问我,大家相互交流很重要,我的一个邮箱:baijc@欢迎联系!建立新工程过程中:问题1:"GPIO_Study.c", line 61: fatal error: could not open source file "DSP280x_Device.h"1 fatal error detected in the compilation of "GPIO_Study.c".解决方法:因为project →build options→compiler→preprocessor中,要包含的头文件的地址没有加进去,你可以找到头文件的地址,然后加进去。
问题2:undefined first referencedsymbol in file--------- ----------------_c_int00 D:\DSP study\test3\Debug\DSP280x_CodeStartBranch.objFS$$MPY D:\DSP study\test3\Debug\DSP280x_CpuTimers.objFS$$TOL D:\DSP study\test3\Debug\DSP280x_CpuTimers.obj>> error: symbol referencing errors - './Debug/test3.out' not built或者下面的问题:undefined first referencedsymbol in file--------- ----------------_c_int00 D:\DSPstudy\GPIO_Study\Debug\DSP280x_CodeStartBranch.obj>> error: symbol referencing errors - './Debug/GPIO_Study.out' not built解决办法都是下面:这个问题是因为没有加在库文件,请在project →build options→linker→libraries 中加入rts2800.lib。
GPIO寄存器一共分为两大类:一类是控制寄存器:主要由功能控制寄存器GPxMUX,方向控制寄存器GPxDIR,输入限定控制寄存器GPxQUAL组成。
另一类是数据寄存器:主要由数据寄存器GPxDAT,置位寄存器GPxSET,清除寄存器GPxCLEAR和取反寄存器GPxTOGGLE 组成。
假设已经设置为数字I/O口,那么输入输出又是怎么定义的呢?如下所示:输入限定控制寄存器、可以通过这个寄存器对输入信号进行量化限制、改善输入信号从而去除不希望的噪声污染。
连续采样到多个相同的电平时才认为是该电平、滤除了干扰信号。
LED闪烁实验系统初始化函数、GPIO初始化函数、主函数、延时子函数在寄存器中结构体的运用Struct GPADIR_BITS { // bits descriptionUint16 GPIOA0:1; // 0Uint16 GPIOA1:1; // 1Uint16 GPIOA2:1; // 2Uint16 GPIOA3:1; // 3Uint16 GPIOA4:1; // 4Uint16 GPIOA5:1; // 5Uint16 GPIOA6:1; // 6Uint16 GPIOA7:1; // 7Uint16 GPIOA8:1; // 8Uint16 GPIOA9:1; // 9Uint16 GPIOA10:1; // 10Uint16 GPIOA11:1; // 11Uint16 GPIOA12:1; // 12Uint16 GPIOA13:1; // 13Uint16 GPIOA14:1; // 14Uint16 GPIOA15:1; // 15};Union GPADIR_REG {Uint16 all;Struct GPADIR_BITS bit;};第10章 CPU定时器32位定时器周期寄存器、32位计数器寄存器、16位定时器分频器寄存器(决定了每一步的时间)、16位的预定标计数器寄存器只有定时器0是能用的第11章中断系统可屏蔽中断、不可屏蔽中断中断使能寄存器IER某一位为1则屏蔽该对应中断高两位保留、低14位对应着相应的14个中断中断标志寄存器IFR:说明CPU中断提出了相应中断请求若相对应位为0、则说明没有未处理的对应中断若相对应位为1、则说明至少有一个对应中断没有处理INTM 总开关PIE中断控制器组的概念:被分布在不同的组里μC/OS-II由Micrium公司提供,是一个可移植、可固化的、可裁剪的、占先式多任务实时内核,它适用于多种微处理器,微控制器和数字处理芯片(已经移植到超过100种以上的微处理器应用中)。
一、三相电压源变换器的结构1.1 自励式三相电压源变换器的原理图图1 自励式三相电压源变换器的原理结构图1.1.1 原理结构图(如图1所示)1.1.2 各元件的作用与选择:交流侧连接电感L :滤波,减小高次谐波电压造成的脉动,同时起到将变换器和交流电网隔离的作用。
直流侧的电容C :整流时,保持输出直流电压稳定,并滤出输出电压的低次谐波成分;逆变时,为逆变的正常工作提供电压支撑,相当于电压源,保证电压基本无脉动;当交流侧为阻感负载时,需要提供无功功率,直流电容起到缓冲无功能量的作用,反并联的二极管,起到将交流侧到直流侧反馈的无功能量提供通道的作用。
往往该二极管选择快速关断二极管。
1.1.3 何谓自励与他励?自励时直流电压如何建立或控制的?自励:不借助于外部其他辅助电路的激励,由该电路自身的特点,完成对直流侧电压的建立。
自励时直流侧电压建立过程如下:在第一阶段,关断所有的IGBT 器件,利用反向并联的二极管对直流电容进行充电, 这时相当于三相全桥整流。
一般而言, 经过第一阶段的充电,直流侧电压可达520V 左右。
待直流电压稳定后,进行第二阶段的充电,即斩波升压。
任选一支IGBT ,在适当时刻进行开关操作。
如图1所示,以系统线电压AB U 作为同步参考信号,当AB U 为负时,开通VT1,这时有电流流经VT1和VD3经过一段时间后,La 和Lb 中积聚了一定的能量,关断VT1,该回路电流突变,于是电感La 和Lb 中的磁场能转化为电场能而产生过电压。
该过电压与系统电压一起通过二极管对直流电容充电,这时还是相当于三相全桥整流,只不过三相电压幅值更高而已。
重复上述操作,直至直流电压满足要求。
采用这种方法可以做到直流侧电压升压无超调。
直流侧电压达到要求之后,打开所有PWM 脉冲,变换器即并入电网。
他励:就是借助于外部辅助电路,一般为整流器,来为逆变器建立直流侧电压的过程。
充电达到并网的条件即可并网。
逆变器输出电压如何与电网电压实现同步,这是并网变换器的共性问题。
R4.3 软件开发语言(1)汇编语言高效指令,代码效率高,底层控制灵活,实时性好;指令集掌握困难,程序可读性,可维护性可移植性差,流程控制困难,开发周期长;适用于运算量大、实时性要求高的场合。
(2)C语言程序可读性、可维护性、可移植性好,修改、升级方便,流程控制容易,开发周期短;某些硬件控制不便,实时性不好;适用于运算量小,实时性要求不高的场合。
(3)汇编与C混合编程。
综合利用两种语言的优越性,用C语言实现流程控制,用汇编语言实现时序或效率要求严格的核心程序。
三者各有所长,技术的发展使得DSP、通用计算机、单片机相互借鉴对方的优点,互相取长补短。
现在,PC机及部分单片机内部都有硬件乘法器;单片机内部也有了通用计算机和DSP内部才有的流水线作业(但规模小些);而DSP内部也有了一定规模的高速缓存。
吸收Intel的嵌入式系统芯片和系统软件的优点。
有的DSP内部集成了高速运行的的DSP内核及控制功能丰富的嵌入式处理器内核。
例如,内部集成有TI公司的C54xCPU内核和ARM公司的ARM7TDMIE内核的DSP,既具有高速的数据处理能力,又有各种类型的外设接口和位控能力,大大拓宽DSP在控制领域的应用。
DSP在注重高速的同时,也在发展自己的低价位控制芯片。
美国Cygnal公司的C8051F020 8位单片机,内部采用流水线结构,大部分指令的完成时间为1或2个时钟周期,峰值处理能力为25MIPS。
片上集成有8通道A/D,两路D/A,两路电压比较器,内置温度传感器、定时器、可编程数字交叉开关和64个通用I/O口、电源监测、看门狗、多种类型的串行总线(两个UART、SPI等)。
DSP工程工程是指编译dsp程序时的结构。
所有第VisualDSP++的开发都出现在工程内,工程文件(.DPJ)存储着程序的编译信息。
工程开发工程开发的步骤一个典型的工程包括模拟、评估、仿真3个阶段。
模拟:在没有真正的硬件支持的条件下也可以编译、编辑和调试DSP程序。
DSP学习笔记1——工程的建立作者:鲁春阳QQ:674289525 email:lcydusk@ 说明:此文档只用于学习与交流,切勿用于其它用途,否则后果自负。
1.双击桌面启动图标,打开CCS4开发环境。
2.进入启动界面,等待程序运行。
3.出现工作区存储路径选择的界面,选择自己的工作区目录,点击OK按钮。
4.进入IDE编辑环境,首先要对编译环境进行配置。
5.首先要配置一个Target,建立步骤为:(1)点击Target按钮,选择下拉列表中的New Target Configuration…(2)为Target 配置文件命名后点击Finish。
(3)设置仿真类型,若采用软件仿真,则Connection选择Texas Instruments Simulator,下面的Device选择F283x CPU Cyde Accurate Simulator;若使用硬件仿真则选择相应的调试器型号和CPU Device型号。
选好后点击Save按钮保存Target配置文件。
(4) 保存后可以在,Target Configuration中查看刚才新建的配置文件,并可以双击修改。
当有多个配置文件时,可以在某个配置文件上右键点击,然后选择Set as Default 设为默认配置。
6.工程的建立,点击菜单栏C/C++ Project 一栏,下面开始新建一个工程。
方法1:(1)在下面的空白方框区域,单击鼠标右键,选择New——CCS Project 方法2:(1)选择菜单栏中File——New——CCS Project(2)为新建的工程命名后点击Next按钮。
(3)Project Type 栏下选择C2000,点击Next。
(4)继续点击下一步Next。
(5)进行项目相关的配置。
Output Type 选择Executable(通常不用选择为Static library),Device Variant 栏选择TMS320F28335,Linker Command File 栏选择相应的CMD文件,可以选择automatic ,或者点击Browse 选择自己配置好的CMD文件,点击Next按钮。
第一章绪论(大题20分)1-1 DSP的概念与主要特点一.Dsp概念数字信号处理(器)二。
Dsp主要特点(考10分)1,改进的哈佛结构(早期的)冯诺依曼结构:数据和程序空间合二为一,执行过程:串行哈佛结构:程序和数据空间独立分开,执行过程:并行2,流水线技术程序执行过程:取指(令)译码执行(串行或并行:3-8级深度)3,硬件乘法器32位数字运算4,多处理单元辅助算术单元ARAU 产生操作数地址5,特殊DPS指令6,片内存储器和硬件配置硬件模块:GPIO模块7,JTAG标准测接口1-2DSP芯片的发展及应用一,发展二,分类1,按数据格式:定点DSP,浮点DSP2,按用途:通用型DSP,专用型DSP三,DSP的应用(考10分)1,数字信号处理:滤波,FFT,波形产生2,通信:调制解调,扩频通信,传真3,图像处理:图形变换,压缩,动画4,语音处理:语音编码,语音合成,语音识别5,仪器仪表:频谱分析,函数发生,数据采集6,军事:保密通信,全球定位,跟踪导航7,自动控制:引擎控制,自动驾驶,机器人控制,磁盘控制8,医疗:助听,超声设备,诊断工具,病人监护9,家用电器:高保真音响,音乐合成,音调控制,电视,数字电话1-3 TMS 320系列DSP1-4 性能工作电压3.3v(低功耗1.8v)(1分)第二章F2812的总体结构,最小系统及程序开发2-1 F2812总体结构5,时钟与系统控制单元包括:1,时钟与锁相环PLL 2,看门狗3,低功耗模式控制7,外设中断扩展模块PIE9,事件管理器模块EV(考20或15分)10,模数转换器分辨率12位总16路:2个8路A/D11,串口外设{同步串行外设接口(SPI)1个(考10分){异步串行通信接口(SCI)2个增强型的区域网络控制器(ecan)1个多通道缓冲串行接口(mcb-sp)1个12,通用输入/输出接口(GPIO)第五章F2812的控制单元及中断控制5-1 F2812的时钟时钟和系统控制单元的控制和状态寄存器HISPCP高速时钟定标寄存器LOSPCP低速外设时钟定标寄存器PCLKCR外设时钟控制寄存器LPMCR0低功耗模式控制寄存器0LPMCR1低功耗模式控制寄存器1PLLCR锁相环控制寄存器SCSR系统控制与状态寄存器WDCNTR看门狗计数器寄存器WDKEY看门狗复位密钥寄存器WDCR看门狗控制寄存器5-4 F2812的看门狗模块WDCNTR加法8位在工作时定时复位WDKEY 写入0x55h+0xaah Clk=(512Xoscclk)-》再分频WDPS WDCR D2-D0第六章F2812的定时器,GPIO及外部存储器扩展6-1 CPU定时器的结构和原理3个32位的CPU定时器6-2 F2812的GPIO1,GPIO的通用接口模块GPIOA GPIOB GPIOD GPIOE GPIOF GPIOG专用I/O口(16位)GPIO控制寄存器:GPAMUX控制GPIOA功能选择(MUX多路选择)GPAMUX =1专用外设功能=0通用数字I/O口GPADIR GPIOA 的方向控制寄存器=1输出=0输入只有A,B,D,E 4个口的《-GPAQVAL GPIOA的输入信号质量控制寄存器分频用QUAKPRD 寄存器2,数据寄存器(不受EALLOW保护)以A组为例GPADAT GPIOA的数据寄存器GPASET 的设定寄存器置1GPACLEAR 的清除寄存器清零GPATOGGLE 的触发寄存器取反第七章模数转换器(ADC)F2812的12位AD共16路分成2组A,B组每组8路时钟由HISPCLK 做(PLL旁路)可以再分频单次转换频率25MHZ 输入电压0-3V7-1 ADC模块的特点1,12位内置2个采样保持器S/H-A,A组ADCINA0-ADCINA7S/H-B,B组ADCINB0-ADCINB7共有2种采样模式:顺序采样模式,并序采样模式2,有2个排序器SEQ1和SEQ2,用来确定要转换的通道(和个数)SEQ1 8个状态SEQ2 8个状态双排序并序SEQ1,SEQ2串联形成级联16个状态单排序3,ADC采用HISPCLK做为时钟输入,经分频做ADC时钟频率4,ADC排序器有2种工作模式:启动/停止连续模式5,ADC启动:S/W软件启动触发EVA EVB启动触发外部引脚GPIO/XIN T2-ADCSPC6,ADC 具有转换完成中断请求机制每个序列转换完成后向CPU中清中断ADCTRL1 ADC控制寄存器1ADCMAXCONV ADC最大转换通道寄存器ADCCHSELSEQ1 ADC通道选择排序控制器寄存器1ADCASEQSR ADC自动排序状态寄存器ADCRESULT0 ADC结果寄存器0ADCST ADC状态寄存器8-2 通用定时器GPTX (X-1,2,3,4)每个GPTX包括:1,1个可逆计数器(可加可减)2,比较寄存器(带影子寄存器)-TxCMPR 可读写3,周期寄存器TxPR(带影子寄存器)可读写4,控制寄存器TxCON 可读写5,可选择内部或者外部时钟输入6,每个T,包括上溢/下溢中断,周期中断,比较中断通用定时器计数模式:1,停止/保持2,连续增计数模式不对称波形3,定向增/减计数模式6-1 寄存器的C语音访问(10分)SCICCR 串行通讯接口的通讯控制寄存器SCICTLI 串行通讯控制寄存器1SCIHBAUD baud波特SCILBAUDSCIRXBUF BUF缓冲寄存器SCITXBUF TX发送RX接收位域定义Stnllt bs 11定义位域bs #9#事件管理器模块(EV):TI整个2000系列DSP的一个{int a:8; 重要应用是进行电机的控制或者开关电源的控制,Int b:2; 因此事件管理器模块是2000系列DSP最有特色的外Int c:6;}; 设。
dsp基础学习总结笔记1、cj431电压基准芯⽚,2.5v2、电平标准3、驱动器74HC245(为增强PWM的驱动负载能⼒)4、增加输⼊端的抗⼲扰能⼒:在芯⽚的输⼊端加上拉电阻加电源或者下拉电阻接地,没有⽤到的采样端⼝尽量不要悬空。
5、D/A电路⽅案通⽤扩展语⾔GEL和c相似,但是有所不同。
GEL语⾔是C语⾔的⼀个⼦集。
与c语⾔不同的是gel不需要指定函数返回值的类型。
Gel中的while语句和c中的while语句相同,gel不⽀持标准c的break和continue语句6、⼀个完整的dsp⼯程包括头⽂件(.h),库⽂件(.lib),源⽂件(.c),以及配置⽂件.Cmd使⽤关键字MENUITEM可以在gel菜单下选择⽤户⾃定义的菜单项,然后⽤hotmenu、dialog或slider等关键字,在这个新的下拉菜单中添加新的菜单项。
7、关于添加⽂件遇到的问题8、变量查找:edit→find:Ctrl+f9、调试时,添加断点的快捷⽅法如下点击图上的⼩⼿即可10、单步调试第⼀个的意思是单击⼀步⾛⼀步,第⼆个的意思是指在单步运⾏时遇到⼦函数不进⼊⼦函数内部进⾏⽽是把它当成⼀步来执⾏,第三个的意思是当执⾏到⼦函数内部时使⽤这个按钮就可以执⾏完剩下的部分返回上⼀层函数。
如果想在⼀个窗⼝内同时看到c和汇编,则有操作View→mixed source/asm 11、观察变量右击变量→add to watch window 可以得到变量的值、类型、地址等。
12、位域定义、结构体以及共同体的知识结构体先定义再声明Union SCIFFCT_REG {Uint16 all;Struct SCIFFCT_BITS bit;};//---------------------------------------------------------------------------// SCI Register File://Struct SCI_REGS {Union SCICCR_REG SCICCR; // Communications control register Union SCICTL1_REG SCICTL1; // Control register 1Uint16 SCIHBAUD; // Baud rate (high) registerUint16 SCILBAUD; // Baud rate (low) registerUnion SCICTL2_REG SCICTL2; // Control register 2Union SCIRXST_REG SCIRXST; // Receive status registerUint16 SCIRXEMU; // Receive emulation buffer registerUnion SCIRXBUF_REG SCIRXBUF; // Receive data bufferUint16 rsvd1; // reservedUint16 SCITXBUF; // Transmit data bufferUnion SCIFFTX_REG SCIFFTX; // FIFO transmit registerUnion SCIFFRX_REG SCIFFRX; // FIFO receive registerUnion SCIFFCT_REG SCIFFCT; // FIFO control registerUint16 rsvd2; // reservedUint16 rsvd3; // reservedUnion SCIPRI_REG SCIPRI; // FIFO Priority control};//---------------------------------------------------------------------------// SCI External References & Function Declarations://Extern volatile struct SCI_REGS SciaRegs;Extern volatile struct SCI_REGS ScibRegs;由于scihbaud和scilbaud定义时为unit16型的,所以不能⽤.all或者.bit 的⽅式来访问,只能直接给寄存器整体进⾏赋值。
新手的DSP学习笔记本人也是几天前才开始打算接触dsp的,对八位单片机入门了之后就对32位的dsp好奇了,现把本人的dsp2407学习笔记献上,望跟我一样的新手一起交流,也希望高手们能给点指导!现在先把第一章的东西写出来吧,交流一下。
(现在我的教材也就是网上的一些电子文档,哈工大的讲义,图书馆暑假不开,所以还没有很好的教材),希望各位能推荐一下,小弟感激了第一章虽然真正的知识不多,但看完还是很兴奋的,马上就要接触到很前沿的东西了,真的很激动啊!现在把知识梳理一下吧:一 dsp的定义,基本结构(弄清楚哈佛结构和冯诺伊曼不同),流水线的原理,dsp的特殊的 地方(乘加),以及它的功能,适用范围。
(相信这些看了一遍书是肯定没问题了)二 现在说说它的分类(主要分为三大系列):1.2000系列,主要用于控制(小弟就是自动化专业的,所以应该对我是最重要的系列吧!)2.5000系列,主要用于通信3.6000系列,主要用于图象处理(要很高的运算速度才行啊)接下来才是真正的开始了三 该看它的片内外设及存储器等资源:(有些模块不懂事正常的,要是懂了后面不就没东西学了嘛)1.A/D转换器2.很多I/O脚3.PLL时钟模块4.看门狗定时器模块5.串行通信和外设接口SCI,SPI6.两个事件管理器7.8个16位PWM通道(我是看不出哪里有这么多)8.5个外部中断(下一章一定会让你懂的)9.CAN 2.0B模块(不认识它??)10.JTEG接口.11.片内存储器:32k闪存,2.5k字RAM(觉得很多东西吧,确实比单片机的东西多多了,所以功能才会这么强大啊)四 看到了DSP的144个引脚吗,现在看得懂几个就几个吧五 1.DSP的存储器映射分为:flash映射,存储器映射,片外映射。
我只知道这么多,现在是不知道到底有什么用处2.对于各个存储器外设的容量大小还是了解一下吧六 到核心模块了,了解一下CPU的各个模块吧1.CPU的组成:a.输入定标移位器:调整数据位数。
第一章 绪论1、哈佛结构:采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字数字信号处理。
2、冯。
诺依曼结构:采用单存储空间,即程序和数据公用一个存储空间,使用单一的地址和数据总线,取指令和取操作数都是通过一条总线分时完成的。
当进行高速运算时,不但不能同时进行取指令和取操作数,而且还会造成数据传输通道的瓶颈现象。
3、流水线技术每条指令可通过片内多功能单元完成取址、译码、取操作数和执行等多个步骤,实现多条指令的并行执行,从而在不提高系统时钟频率的条件下减少每条指令的执行时间。
4、DSP 的分类1)、按基础特性分类:静态DSP 芯片和一致性DSP 芯片2)、按用途分:通用型芯片和专用型芯片3)、按数据格式分(即按精度或动态范围):定点DSP 和浮点DSP (大多数定点DSP 芯片都采用16bit 定点运算,只有少数DSP 芯片为24bit 定点运算)5、DSP 系统的构成抗混叠滤波器、数据采集A/D 转换器、数字信号处理器DSP 、D/A 转换器和低通滤波器等6、DSP 系统的处理过程1)将输入信号x (t )进行抗混叠滤波,滤掉高于折叠频率的分量,以防止信号频谱的混叠。
2)经采样和A/D 转换器,将滤波后的信号转换为数字信号x (n )3)数字信号处理器对x (n )进行处理,得到数字信号y (n )4)经D/A 转换器,将y (n )转换成模拟信号5)经低通滤波器,滤除高频分量,得到平滑的模拟信号y (t )第二章 TMS320C54x 的硬件结构1、TMS320C54x 的结构是以8组16位总线为核心,8组总线分为1组程序总线、3组数据总线和4组地址总线2、程序总线PB :主要用来传送取自程序存储器的指令代码和立即操作数。
DSP学习总结(共5则)第一篇:DSP学习总结DSP学习总结根据一学期以来对DSP这门课程的学习,学到了很多DSP相关的知识。
了解了如何根据实际需求选择DSP芯片,也知道了C54x的汇编和链接过程,还掌握了C54x的寻址方式。
对于老师的授课方法也有一定的见解。
开始学DSP的时候比较着急,因为也感觉什么都不会,不知道从哪里下手。
手上的资料只有书,后来去图书馆看了两本,一本是《DSP原理与开发》,除了有详细的理论说明之外,还会在每个章节之后配上一个例程,缺点就是错误也不少,估计时间太仓促,校对没做好。
另一本书是清华大学出版社的《TMS320C28X系列DSP的CPU与外设》,是从TI的英文的技术手册翻译过来的,分上、下两册,可以作为工具书,很实用,缺点是没有例子。
书看了一两遍,觉得还是一头雾水。
后来有相应的实验开课,慢慢对DSP有点了解了,刚开始都不知道怎么建PROJECT,后来问了同学,然后再看TI的例程,仿照它的程序框架,边看例程,边对着实验指导书,看得主要是如何初始化,需要对每个外设进行哪些寄存器的初始化,寄存器为什么这样设置,程序如何进中断,如何出中断等等。
边看书边做实验,效率会高很多,也就能慢慢理解了。
对于刚学DSP的新手我觉得掌握一些初级知识就差不多了。
第一步:硬件入门。
1.先学习DSP的硬件基础:了解CPU结构、中断、EMIF、HPI、GPIO、SPI、Timer、供电方式、时钟;2.了解DSP互连的存储器:SDRAM、FLASH、FIFO、双口RAM、SDSRAM 等不需深入研究;3.了解CPLD/FPGA的硬件结构、连接原理、VerilogHDL编程语言需深入研究;4.了解DSP Bootloader不需深入研究;5.了解DSP和外部通信的接口:PCI、USB、LAN、UART等,有时间可以看看DM642的VideoPort第二步:工具入门。
1.学习数字电路、模拟电路、电路分析的知识;2.学好一种PCB绘制软件如Protel DXP2006;3.学习信号完整性、学习传输线理论,特性阻抗知识;关于老师上课的方式我认为:1.太多的理论知识枯燥乏味,因为有实验课,我觉得老师可以根据实验要做的内容在课堂上深入讲解,这样在讲述的同时能让同学们认真听,认真记以便于实验课程的顺利完成,比纯理论效果会好点。
一、如何开始DSP的学习以下为各网友学习DSP的一些经验fxw451:大家先大体上看一遍书,把大体的知识了解一下。
其次就是看例子了,例子是关键,例子里有你学的所有的东西,这次你再拿出一本书来看,这次是有针对性的看,比如你做的spi的,你就直接看spi那张,一边看例子一边看书,这样你就可以把一些重要的寄存器给记住了。
对于初学者来说,一直好奇的就是ccs的使用,拿我第一次使用ccs来说,当我把ccs 和板子连载一起时,我相当高兴,成功感油然升起,接下来就是用ccs里的看自带的例子了,看完后你就会发现,这些是什么东东哦,什么都不会,这就对了,你要是看一开始看会了你就是神仙了,dsp不像单片机那么容易上手,所以你要花费点功夫吃透它,好东西不是那么容易就可以搞定的。
到了自己编程的时候了,这个时候不要要求自己能编一个什么样的程序,你要仿着例子里的东西全部搞定就可以了,这就是你编程的第一步,当然也是成功的一步,在这成功下,我相信你的积极性肯定被调到起来,对dsp越来越热爱了。
suary:1)把存储器映射结构搞清楚----说的具体点就是dsp内到底有那些存储器(ram,rom,flash,etc),这些存储器到底是如何分配的,这个可以参考相关的.cmd文件的写法,它定义了存储器映射和输入输出段的位置2)编译器的堆栈操作---有关这点我还是没有具体弄清楚,就是中断或是子程序调用时,系统自己的堆栈操作。
2407有一个8级硬件堆栈,而2812没有,这个区别比较大,所以在编一边针对堆栈操作的程序(eg. rtos)时就要特别注意了。
3) 中断系统----每个mcu的中断系统搞清楚了,会给编程带来很大的便利,所以一定要对所用的mcu的中断过程了解的清清楚楚。
4)数据结构---设计好的,适合的数据结构会使自己的程序编写变得结构清楚而且“容易”。
dsp31:我的经验是:DSP不管是软件和硬件开发一定要多思考,多比较。
软件人员一定要会调试和定位硬件电路的问题点。
硬件人员一定要考虑接口设计,电平转换,电源稳定性,还有ESD防护等等。
cysmwander:首先得对C熟悉,但会C语言并不能说明你会编程,编程有结构设计的问题,C 语言只是工具,看不懂的就好好去想,想通了就发现自己又上了一个台阶;在学习DSP之前,我觉得应该需要去明白DSP能干什么,所以你一定要先看看DATASHEET,看看DSP的外设和资源,看看你能做啥。
开发环境建立完了你要熟悉开发流程,就是说你有一个IDEA,怎么把这个IDEA在目标板上实现,先做什么后做什么,这个一定要想清楚。
这些都准备好了,你就可以开始干了,千万别犹豫,古人说:临渊慕鱼,不如退而结网。
千万别怕。
一定要立即动手,毫无顾忌,不要想着,这个东西这么复杂,我从哪里动手阿,万事开头难,你就从你认为对的开始做,做错了重头来。
我和我们公司新来的同事都说:多动手,烧掉几块板子和几个MCU都是小事,关键是你要动手。
我不建议大家直接拿例程来做试验,因为那样你MCU的结构没有把握,你把例程跑得再好,那也不是你的东西,一定要自己写,例程只能作为参照,一定要一个字母一个字母地去写程序。
yangyansky:1、看书,这是必要的,也是基础。
第一遍,不用太详细,不过要让自己大概知道书里都有些什么内容。
2、重点了解2812的片内资源的分配情况,尤其是存储器的映射,知道了这个你就明白了你写的哪部分内容是具体存到哪里去了。
掌握bootload的工作原理,知道程序是在哪里,怎么启动的运行的。
至于spi、sci这些外设,我觉得等到具体运用的时候再看不迟。
结合具体的运用还比较容易理解。
3、看例程,在自己编写自己需要功能的代码时要看看已有的例程,看看例程里的各种寄存器是怎么配置的,配置时又是怎么实现的,根据看懂的编写自己想要的,然后跑跑自己的程序看和已有的例程有什么异同,是不是自己想要的。
当然,调试环节是最难的一个环节,这个过程中会出现很多意想不到的问题,只能慢慢摸索慢慢前进了。
4、重点理解中断、定时器、系统时钟的工作过程,这对程序里的时间分配问题很重要。
5、我觉得写程序要规范,这会简便很多操作,使编译得以优化,比如相关的文件定义要放在相应的头文件里,全局变量等的定义最好放在GlobalVariableDefs.c里,相应的中断程序要放在DefaultIsr.c里,等等。
最后是自己的一些感悟:开发板,仿真器是必要的,它能带给我们更加直观的感受,有空去TI官网转转,里面东西还是挺多的,另外坚持不懈的等待TI--MM拒绝我的芯片申请。
囧......资料书推荐清华的那个《tms320c28x系列dsp的cpu与外设》可当工具书查,还就是一本关于例程详解的,两本配合看。
另外一个好的程序模板也是很关键的,TI官网上2812例程,结构严谨并且最大的发挥了CCS的功能,建议先搞懂后再依据此创建自己的模板程序.还有就是芯片的DATASHEET,由于大多数都是英文的看起来比较痛苦,但确都是必须的....想我,四级都还没过来着。
关键还是耐心...最后友情提点下谷歌金山词霸。
我汗...~二、完整工程的构成首先那些最基本的仿真驱动安装,CCS配置等我就不在此累赘了...一个完整工程文件的构成总的说一个完整的工程需要由库文件(.lib),头文件(.h),源文件(.c)和CMD文件(.CMD)组成,缺一不可。
至于各文件内容将在以后中详细说明2812的库文件--文件夹地址C:\CCStudio_v3.3\C2000\cgtools\lib\rts2800.librts2800_ml.lib --- 大存储器模式头文件头文件的作用是定义了2812内部寄存器的数据结构。
头文件一般情况下不需要修改,如果你需要定义一些在整个工程内都具有作用域的全局变量的时候,可以在头文件中定义这些变量,具体的方法我们以后在例程或项目实践中应该会有介绍。
C文件(主函数)ADC.C ——外设AD的初始化函数,与外设AD相关CodeStartBranch.asm——引导过程中屏蔽看门狗定时器。
DSP28_CpuTimers.C——CPU定时器的初始化和配置函数,与CPU的定时器相关DefaultIsr_nonBIOS.C——包含了2812所有的中断函数,写中断时,只要将程序写在对应的函数内就可以,大大保证了中断的成功率。
DelayUs.asm——延时微秒DSP28x_GlobalVariableDefs.C——全局变量的定义,定义了2812的寄存器,中断向量表等内容。
Ev.C——外设EV的初始化函数,与外设EV相关。
Gpio.C——GPIO的初始化函数,只和GPIO相关。
Main_nonBIOS.c——主函数PieCtrl_nonBIOS.C——PIE初始化函数,和中断相关,很重要。
PieVect_nonBIOS.C——PIE中断向量表定义以及初始化,很重要。
SetDBGIER.asm——real time仿真SysCtrl.C——系统初始化,主要对开门狗,时钟等模块进行初始化,以保证2812正常工作,非常重要。
Watchdog.C——看门狗初始化Xintf.C——外部接口的初始化函数。
通过上面的分析我们可以看到几个文件非常重要,因此大家每次新建工程的时候,就把这些未编辑过的文件复制过来。
其他的外设相关的文件,您这个工程中涉及到哪个外设,您就把这个外设相关的源文件复制过来,一起加入工程。
CMD文件以.CMD为扩展名的文件,这个文件的作用是用来分配存储空间的。
由于DSP编译器的编译结果是未定位的,DSP也没有操作系统来定位执行代码,DSP系统的配置需求也不尽相同,因此我们根据实际的需求,自己定义代码的存储位置。
打个通俗的比喻,就是我们有一个仓库,现在需要把货物存放到仓库里面去,为了便于日后取用货物,我们将货物分门别类,然后把它们存放到指定的位置去。
把哪些货物放到哪个位置的规则,就是我们的CMD文件的内容。
CMD文件又分成两种。
一种是分配RAM空间的--微计算机模式(仿真模式)---XMP/MC`=0,用来将程序load到RAM内进行调试,因为我们大部分时间都是在调试程序,所以多用这类CMD,另一种是分配FLASH空间;微处理器模式---XMP/MC`=1,当程序调试完毕后,需要将其烧写到FLASH内部进行固化,这个时侯我们就需要使用这类CMD文件了。
其中DSP281x_Headers_nonBIOS.cmd---用于分配编译产生的各个段至存储器F2812_EzDSP_RAM_lnk.cmd ---用于将281x的外设寄存器结构产生的数据段映射至对应的存储器空间以上2个CMD文件均为仿真模式下无BIOS的CMD文件,CMD文件内容将在以后详细解释第二课课后1.什么是GEL文件?GEL文件的作用是什么呢?答:GEL是通用扩展语言(GeneralExte;2.Lib文件内部究竟是什么内容,我们自己能编辑;答:.lib是库文件,rts.lib是TI提供的;我们也可以添加自己的库,可在newproject;三、CCS的操作;中国有句古话叫“磨刀不误砍柴工”,如果您将CCS;1、CCS的布局和结构;菜单栏——和CCS所有功能相关的菜单都在这里面;编译工具栏——编译程答:GEL是通用扩展语言(General Extension Language)是一种解释语言,类似于C语言。
GEL函数可以用来扩展CC的功能,方便用户调试程序。
CCS提供丰富的内嵌GEL函数,用户也可以定义自己的GEL函数。
在处理器属性的GEL文件窗内为每个处理器选择用户的GEL文件(扩展名为 .gel) GEL文件用于初始化DSP。
GEL在CCS下有一个菜单,可以根据DSP的对象不同,可以用gel来调用一些菜单命令,对DSP的存储器进行配置,设置不同的初始化程序。
2. Lib文件内部究竟是什么内容,我们自己能编辑LIB文件吗答:.lib是库文件,rts.lib是TI提供的运行时支持库,如果是C代码写的源程序,必须要包含该库。
该库由TI公司做好了,放在CCS的\cgtools\lib中,源代码TI网站可以下载。
但是我们无法查看.编辑TI所提供的库文件内容我们也可以添加自己的库,可在newproject中新建三、CCS的操作中国有句古话叫“磨刀不误砍柴工”,如果您将CCS这把常用的利刃磨锋利了,那么我相信为您的DSP开发过程节省不少的工夫。
1、CCS的布局和结构菜单栏——和CCS所有功能相关的菜单都在这里面。
编译工具栏——编译程序时常用的一些工具。
调试工具栏——调试程序时常用的一些工具。
工程文件框——打开的工程所有文件会按类别放在这里代码编辑区——代码都是在这里编辑完成的了,最主要的工作区域。