ch4 DSP系统设计入门_第1页
ch4 DSP系统设计入门_第2页
ch4 DSP系统设计入门_第3页
ch4 DSP系统设计入门_第4页
ch4 DSP系统设计入门_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.1DSPC语言程序设计4.1.1C语言优势4.1.2基于C2000的C语言简介4.2CCS5入门4.2.1CCS5简介4.2.2新建工程4.3DSP试验系统4.3.1最小系统简介4.3.2外设实验板简介第四章DSP系统设计入门4.1.1C语言优势C语言是高级语言,相对于汇编易学易用;C语言的编程效率极高,易于调试;C++运行效率不如C,且面向对象编程占用更多资源;Java同C++,且Java运行依赖于Java虚拟机;汇编语言依赖于计算机硬件,程序的可读性和可移植性较差。高级语言具有很好的可移植性,但是难以实现汇编语言的某些功能(如对内存地址的操作、位操作等)。C语言作为一种高级语言,既可以访问物理地址又可以进行位操作,能直接对硬件进行操作,适合用于DSP所以,嵌入式编程多用C语言,或C语言与汇编混合编程。F20827亦是如此。4.1.2基于C2000的C语言简介C语言中的代码段编译器中的段名存储器中不同段的分配链接器的命令(CMD)文件MEMORY{PAGE0:

/*ProgramMemory*/FLASH:origin=0x3F0000,length=0x8000PAGE1:

/*DataMemory*/M0SARAM:origin=0x000000,length=0x400M1SARAM:origin=0x000400,length=0x400}SECTIONS{.text:>FLASHPAGE=0.ebss:>M0SARAMPAGE=1.cinit:>FLASHPAGE=0.stack:>M1SARAMPAGE=1}#defineADCTRL1(volatileunsignedint*)0x00007100

...voidmain(void){*ADCTRL1=0x1234;//writeentireregister*ADCTRL1|=0x4000;//enableADCmodule}传统编程风格-简单、快速且易于键入-变量名称与寄存器名称精确匹配(易于记忆)-需要生成专门的掩码以操控个别位-不能很容易地在观察窗口中显示位字段-在许多场合中将生成效率低下的代码优点缺点voidmain(void){AdcRegs.ADCTRL1.all=0x1234;

//writeentireregisterAdcRegs.ADCTRL1.bit.ADCENABLE=1;

//enableADCmodule}新编程风格-易于操控个别位。-易于在调试窗口观察寄存器位的值-可生成最高效的代码(利用C28x)-结构名称会难以记忆(编辑器自动完成功能)-需要键入的内容更多(编辑器自动完成功能)优点缺点结构体定义规则F2802x头文件定义了:所有的外设结构体所有的寄存器名称所有的位字段名称所有的寄存器地址PeripheralName.RegisterName.all

//访问整个16位或32位寄存器PeripheralName.RegisterName.half.LSW

//访问32位寄存器的16个低位PeripheralName.RegisterName.half.MSW

//访问32位寄存器的16个高位PeripheralName.RegisterName.bit.FieldName

//访问寄存器的指定位字段注:[1]“PeripheralName”由TI指定并载于F2802x标准头文件。它们由大写字母和小写字母组合成(如:CpuTimer0Regs)。[2]“RegisterName”与数据表中使用的名称相同,它们始终用大写字母表示(如:TCR、TIM、TPR,...)[3]“FieldName”与数据表中使用的名称相同,它们始终用大写字母表示(如:POL、TOG、TSS,...)F2802x头文件包(,文献编号:SPRC832)包含了使用结构体法所需的一切资源定义了所有的外设寄存器位和寄存器地址头文件包包括:\DSP2802x_headers\include.hfiles\DSP2802x_headers\cmd

linker.cmdfiles\DSP2802x_headers\gel

.gelfilesforCCS\DSP2802x_examples

2802xexamples\doc

documentation外设结构体头(.h)文件#include“DSP2802x_Device.h”VoidInitAdc(void){/*ResettheADCmodule*/AdcRegs.ADCTRL1.bit.RESET=1;/*configuretheADCregister*/AdcRegs.ADCTRL1.all=0x00E4;};C语言源文件(例如:Adc.c)//ADCIndividualRegisterBitDefinitions:structADCCTL1_BITS{//bitsdescriptionUint16TEMPCONV:1;//0TemperaturesensorconnectionUint16VREFLOCONV:1;//1VSSAconnectionUint16INTPULSEPOS:1;//2INTpulsegenerationcontrolUint16ADCREFSEL:1;//3Internal/externalreferenceselectUint16rsvd1:1;//4reservedUint16ADCREFPWD:1;//5ReferencebufferspowerdownUint16ADCBGPWD:1;//6ADCbandgappowerdownUint16ADCPWDN:1;//7ADCpowerdownUint16ADCBSYCHN:5;//12:8ADCbusyonachannelUint16ADCBSY:1;//13ADCbusysignalUint16ADCENABLE:1;//14ADCenableUint16RESET:1;//15ADCmasterreset};//Allowaccesstothebitfieldsorentireregister:unionADCCTL1_REG{Uint16all;structADCCTL1_BITSbit;};//ADCExternalReferences&FunctionDeclarations:externvolatilestructADC_REGSAdcRegs;头文件包含有一个用于器件中每个外设的.hDSP2802x_Adc.h

DSP2802x_BootVars.h

DSP2802x_Comp.h

DSP2802x_CpuTimers.h

DSP2802x_DevEmu.h

DSP2802x_Device.hDSP2802x_ECap.h

DSP2802x_EPwm.h

DSP2802x_Gpio.h

DSP2802x_I2c.hDSP2802x_NmiIntrupt.h

DSP2802x_PieCtrl.hDSP2802x_PieVect.h

DSP2802x_Sci.hDSP2802x_Spi.hDSP2802x_SysCtrl.h

DSP2802x_XIntrupt.hDSP2802x_Device.h件主要的包括头文件的将包括所有其他的.h文件在每个源文件中包括此文件::#include“DSP2802x_Device.h”4.1.2基于C2000的C语言简介全局变量定义文件DSP2802x_GlobalVariableDefs.c定义每个外设寄存器结构体变量每个结构体使用一个DATA_SECTION宏指令来强制结构体的存储位置,以实现至正确的地址链接4.1.2基于C2000的C语言简介用于结构体的链接器命令文件

DSP2802x_nonBIOS.cmd针对每个外设应用的项目范例可帮助使用者快速启动开发工作•TI嵌入式处理器的集成开发环境(IDE)–包括调试器,编译器,编辑器,操作系统,等等–IDE基于Eclipse开源软件框架(v4+)–融合了TI设备的支持与功能•CCSv5是基于原版的Eclipse–CCS使用未修改的Eclipse版本•TI将直接向开源社区提交改进–用户可以随意的将各种其他厂商的Eclipse插件或TI的工具拖放到现有的Eclipse环境–用户可以享受到Eclipse中所有最新的改进所带来的便利•集成额外的工具–操作系统的应用程序开发工具(Linux操作系统,Android...)–代码分析,源代码控制...4.2.1CCS5简介CodeComposerStudioCodeComposerStudio集成型开发环境(IDE)集成了能编辑,代码生成和调试功能使用按钮的问单击访问功能强大的图绘图/分析具工具使用脚本务的自动化任务内置的BIOS功能访问基于Eclipse开源软件框架项目文件包含:文件清单:源文件(C语言、汇编语言)库文件DSP/BIOS配置文件链接器命令文件项目设置:生成选项(编译器

汇编器

链接器和DSP/BIOS)新建工程点击File->New->CCSProject或者Project->NewProject如下图所示:4.2.2新建工程添加项目名称、芯片、仿真器等。选择对应芯片型号;4.2.2新建工程如图所示:新建文件:可以新建源文件,头文件,类等等添加文件添加现有源文件到工程中。右击工程名->AddFiles…4.2.2新建工程添加头文件目录:一右击工程名->Properties,选择Build->IncludeOptions,有个#include搜索路径,添加上路径即可。最有效的方法:

拷贝一个现有的工程

然后加以裁剪和添加编译工程

选择Project->BuildprojectDebug跟编译工程类似的方法可以进行工程的Debug,最简单的方式就是点击如下图所示的小虫子。在Debug之前,一定要选择和设置目标配置文件(TargetConfigurations)。新建目标配置文件(TargetConfigurationFile),如下图所示。如下图所示,选择仿真器,选择平台,完成后可以点击TestConnection,进行仿真器连接测试,如果成功,说明硬件没有问题。4.3.1DSP实验设备–最小系统简介TI公司提供的最小系统最小系统供电方式最小系统启动模式选择最小系统引脚分配最小系统原理图最小系统PCB正面映射外设实验板示意图外设实验板基本相关模块功能红外对管模块温度传感器模块外设实验板基本相关模块功能数码管显示模块外设实验板扩展相关模块功能L298电机驱动模块外设实验板扩展相关模块功能TFT彩屏模块PWM_DA模块作业:以一个例子来说明,C2000的C语言中有哪些代码段?一般的C2000工程中会有两个CMD文件,它们各起什么作用?安装CCS5,建立一个自己的工程文件,并完成实验一

知识点:DSP的总体架构--改进的哈佛结构DSP的存储空间分配和应用—F28027.cmdDSP的时钟配置--DSP2802x_SysCtrl.cDSP的WatchDog--DSP2802x_SysCtrl.cDSP的CPUTimer--DSP2802x_CpuTimers.cDSP的GPIO与AIO--DSP2802x_Gpio.cDSP的外部中断DSP的中断系统DSP的应用程序开发

第一部分总结1.2.2DSP芯片的结构特征为了适应快速数字信号处理运算的要求,DSP芯片普遍采用了特殊的硬件和软件结构,以提高其数字信号处理的运算速度DSP芯片的主要结构特征有:采用了哈佛结构、流水线技术、硬件乘法器和特殊DSP指令等471.哈佛结构哈佛结构是一种并行体系结构,主要特点是将程序和数据存储在不同的存储器空间,对程序和数据独立编址,独立访问。而且在DSP中设置了数据和程序两套总线,使得取指令和执行能完全重叠运行,提高数据吞吐量48哈佛结构—改进为了进一步提高速度和灵活性,TMS320系列产品中,在哈佛结构上作了改进:一是允许程序存储在高速缓存中,提高指令读取速度;二是允许数据存放在程序存储器中,并被算术运算指令直接使用,增强芯片的灵活性。另外DSP中的双口RAM(DARAM)及独立读写总线使数据存取速度提高492.流水线技术DSP芯片广泛采用流水线技术,增强了处理器的处理能力。TMS320系列流水线深度为2~6级不等,也就是说,处理器在一个时钟周期可并行处理2~6条指令,每条指令处于流水线的不同阶段。图1.2为三级流水线操作的例子。在三级流水线操作中,取指令、指令译码和执行可以独立地处理,这样DSP可以同时处理多条指令,只是每条指令处于不同处理阶段503.硬件乘法器在数字信号处理的许多算法中,需要做大量的乘法和加法。DSP芯片一般都有一个硬件乘法器,在TMS320系列中,一次乘累加最少可在一个时钟周期完成4.特殊DSP指令

DSP芯片的另一个特点就是采用了特殊的寻址方式和指令。比如,TMS320系列的位反转寻址方式,LTD、MPY、RPTK等特殊指令。采用这些适合于数字信号处理的寻址方式和指令,进一步减少了数字信号处理的时间512.1.1DSP存储空间分配2.1.1DSP存储空间分配设计一个计时器,显示精确到0.01秒分析:1,用到的外设:CPUTimer0,外部中断和GPIO,2,CPUTimer0完成计时功能,外部中断完成控制功能,GPIO完成显示功能3,中断考虑:定时器0中断和外部中断应用程序举例:硬件资源:1)CPUTimer02)外部中断GPIO343)显示:GPIO12(Data),GPIO33(Clk),GPIO32(CS)应用程序举例:系统初始化:1)WD初始化,关掉2)时钟源初始化,四选一3)PLL初始化,12,2,60M4)外设时钟初始化5)FLASH初始化,2,2,2应用程序举例:Watchdog计数器操作方式0X55&0XAA序列的顺序写入WDDIS位的置一(WDOVERRIDE=1)Flash&OTP相关寄存器FOTPWAITOTP等待寄存器配置输入时钟源&XCLKOUT寄存器(XCLK)位域值描述(1)15-7保留保留。6XCLKINSEL01XCLKIN源选择位:这个位选择XCLKIN输入源。GPIO38是XCLKIN输入源(这也是JTAG端口的TCK源)。GPIO19是XCLKIN输入源。5-2保留保留0-0XCLKOUTDIV00011011XCLKOUT分频比:这两个位选择XCLKOUT频率相对于SYSCLKOUT的比率。比率是:XCLKOUT=SYSCLKOUT/4XCLKOUT=SYSCLKOUT/2XCLKOUT=SYSCLKOUTXCLKOUT=OffXCLK寄存器的XCLKINSEL位由复位引脚复位XCLK寄存器用来选择XCLKIN输入的GPIO引脚和配置XCLKOUT引脚的频率。配置器件时钟域(CLKCTL)

CLKCTL寄存器用来选择时钟源,也用来配置时钟故障期间器件的行为位域值描述15NMIRESETSEL01NMI复位选择位:该位在检测到一个缺少时钟条件时直接产生

信号和使用

复位两者之间进行选择:没有任何延迟地直接驱动

(复位时的默认状态)。NMI看门狗复位(

)启动

。注:不管作何选择,都会产生

信号。位域值描述14XTALOSCOFF01晶体振荡器关闭位:如果晶体振荡器不使用,可以使用该位将其关闭。晶体振荡器开启(复位时的默认状态)。晶体振荡器关闭。13XCLKINOFF01XCLKIN关闭位:该位关闭外部XCLKIN振荡器输入XCLKIN振荡器输入启用(复位时的默认状态)。XCLKIN振荡器输入关闭。注:你需要通过XCLK寄存器的XCLKINSEL位选择XCLKIN的GPIO引脚。更详细的信息请见XCLK寄存器的描述。如果使用XCLKIN,XTALOSCOFF就必须置位。12WDHALTI01看门狗停机模式忽略位:该位选择是否通过停机模式自动开启/关闭看门狗。这个特性可以在停机模式有效时用来允许所选的WDCLK源继续计时看门狗。这可以允许看门狗周期性地唤醒器件。看门狗自动通过停机模式开启/关闭(复位时的默认状态)。看门狗忽略停机模式。11INTOSC2HALTI01内部振荡器2停机模式忽略位:该位选择是否通过停机模式自动开启/关闭内部振荡器2。这个特性可以在停机模式有效时用来允许内部振荡器继续计时。这将使能器件更快地从停机模式中唤醒。内部振荡器2自动通过停机模式开启/关闭(复位时的默认状态)。内部振荡器2忽略停机模式。10INTOSC2OFF01内部振荡器2关闭位:该位关闭振荡器2内部振荡器2开启(复位时的默认状态)。内部振荡器2关闭。如果内部振荡器2不被使用,用户可以使用该位将其关闭。这个选择不受缺少时钟检测电路影响。9INTOSC1HALTI01内部振荡器1停机模式忽略位:该位选择是否通过停机模式自动开启/关闭内部振荡器1。内部振荡器1自动通过停机模式开启/关闭(复位时的默认状态)。内部振荡器1忽略停机模式。这个特性可以在停机模式有效时用来允许内部振荡器继续计时。这将使能器件更快地从停机模式中唤醒。位域值描述8INTOSC1OFF01内部振荡器1关闭位:该位关闭振荡器1内部振荡器1开启(复位时的默认状态)。内部振荡器1关闭。如果内部振荡器1不被使用,用户可以使用该位将其关闭。这个选择不受缺少时钟检测电路影响。7-5TMR2CLKPRESCALE000001010011100101110111CPUTimer2时钟预分频值:这些位为所选的CPUTimer2时钟源选择预分频值。这个选择不受缺少时钟检测电路影响。/1(复位时的默认状态)/2/4/8/16保留保留保留4-3TMR2CLKSRCSEL00011011CPUTimer2时钟源选择位:该位为CPUTimer2选择时钟源选择SYSCLKOUT(复位时的默认状态,绕过预分频器)。选择外部振荡器(XOR输出)。选择内部振荡器1。选择内部振荡器2。这个选择不受缺少时钟检测电路影响。2WDCLKSRCSEL01看门狗时钟源选择位:该位选择看门狗的时钟源。在

为低时和

变为高之后,默认选择内部振荡器1。用户需要在初始化过程中选择外部振荡器或内部振荡器2。如果缺少时钟检测电路检测到缺少时钟,那么该位被强制为0,并选择内部振荡器1。用户更改该位不影响PLLCR值。选择内部振荡器1(复位时的默认状态)。选择外部振荡器或内部振荡器2。位域值描述1OSCCLKSRC2SEL01振荡器2时钟源选择位:这个位用来在内部振荡器2或外部振荡器两者之间作选择。这个选择不受缺少时钟检测电路影响。选择外部振荡器(复位时的默认状态)。选择内部振荡器2。0OSCCLKSRCSEL01振荡器时钟源选择位。这个位选择振荡器的时钟源。在

为低时和

变为高之后,默认选择内部振荡器1。用户需要在初始化过程中选择外部振荡器或内部振荡器2。只要用户使用这些位来改变时钟源,PLLCR寄存器将被自动强制为零。这阻止了潜在的PLL过冲。然后,用户必须写PLLCR寄存器来配置合适的分频比。如果必要,用户也可以使用PLLLOCKPRD寄存器来配置PLL锁定周期以缩短锁定时间。如果缺少时钟检测电路检测到缺少时钟,那么这个位被自动强制为0,并选择内部振荡器1作为时钟。PLLCR寄存器也将自动强制为0来防止所有潜在的过冲。选择内部振荡器1(复位时的默认状态)。选择外部振荡器或内部振荡器2。注:如果用户希望使用振荡器2或外部振荡器来计时CPU,必须应该先配置这个位,然后再写OSCCLKSRCSEL位。PLL状态寄存器(PLLSTS)PLL控制寄存器(PLLCR)基于PLL的配置模式PLL模式注释PLLSTS[DIVSEL](1)CLKIN和SYSCLKOUT(2)PLL关闭由用户通过置位PLLSTS寄存器的PLLOFF位来激活。在这种模式下PLL模块禁用。这对于降低系统噪声和低功率操作很有用。在进入这个模式之前,PLLCR寄存器必须先被设置成0x0000(PLL旁路)。CPU时钟(CLKIN)直接从X1/X2,X1或XCLKIN上的输入时钟获得。0,123OSCCLK/4OSCCLK/2OSCCLK/1PLL旁路PLL旁路是上电时或一次外部复位(

)后默认的PLL配置。当PLLCR寄存器被设置成0x0000,或者,在PLLCR寄存器被修改之后PLL锁定到一个新的频率时,这个模式被选择。在这个模式下,PLL本身被旁路,但PLL未关闭。0,123OSCCLK/4OSCCLK/2OSCCLK/1PLL启用该模式通过将一个非零值n写入PLLCR寄存器来实现。当写PLLCR时,器件将切换到PLL旁路模式,直至PLL锁定。0,12OSCCLK*n/4OSCCLK*n/2PLLSTS[DIVSEL]在写PLLCR之前必须为零,并且,应该只有在PLLSTS[PLLLOCKS]=1之后才能被修改选择的输入时钟和PLLCR[DIV]位应该使PLL(VCOCLK)的输出频率是最小值50MHz。PLL控制寄存器(PLLCR)Flash&OTP相关寄存器FOPT确定是否开启flash流水线模式寄存器FBANKWAITflash等待寄存器FBANKWAITflash等待寄存器GPIO初始化:1)上拉设置2)MUX设置3)方向设置4)初始值设置5)特殊引脚的设置应用程序举例:多路复用MUXGPIOMUXGPIOMUXGPIOMUX数字I/O控制GPIO的配置步骤:Step1.Planthedevicepin-out

--安排器件引脚输出Step2.Enableordisableinternalpull-upresistor--使能或禁能内部上拉电阻Step3.Selectinputqualification--选择输入时钟同步Step4.Selectthepinfunction--选择引脚功能Step5.FordigitalgeneralpurposeI/O,selectthedirectionofpin--为数字通用I/O选择引脚的方向输入或者输出Step6.Selectlowpowermodewake-upsources--选择低功率模式唤醒源(是否作为唤醒源)Step7.Selectexternalinterruptsources--选择外部中断源GPIO相关寄存器(GPIOXINTnSEL)CPUTimer0初始化:1)关时钟2)周期设置3)预分频设置4)初始值设置5)中断使能6)使能时钟或?应用程序举例:定时器原理32位CPU计数器相关寄存器32位CPU计数器寄存器(TIMERxTIM

)TIMERxTIMH与之类似32位CPU周期寄存器(TIMERxPRD

)TIMERxPRDH与之类似TIMERxTCR寄存器描述_续TIMERxTCR寄存器描述_续TIMERxTPR寄存器描述(TIMERxTPRH寄存器与之类似)Xint1初始化:1)Xint1引脚选择2)外部中断极性选择3)中断使能应用程序举例:3.6外部中断控制寄存器:支持3个外部中断,XINT1-XINT3。每个外部中断可以选择负边沿或正边沿触发,也可以被使能或禁能。屏蔽的中断还包含一个16位自由运行的递增计数器,在检测到一个有效的中断沿时复位为0。这个计数器可以用来精确地计时中断。表3.14中断控制和计数器寄存器(不受EALLOW保护)图3.13外部中断n控制寄存器(XINTnCR)表3.15外部中断n控制寄存器(XINTnCR)的域描述对于XINT1/XINT2/XINT3来说,还有一个16位的计数器,只要检测到一个中断边沿,计数器就复位为0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论