




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DSP学习心得笔记(更新XX0717) DSP学习心得笔记-白建成.baijc.icekoor引言学习DSP的时间有两个多月了,收获很多新知识,我们要每天都有进步才行,以下内容没有特别的顺序,跟具自己的学习情况写的,如果有不对的地方希望指出来,如果有不懂得也可以问我,大家相互交流很重要,我的一个邮箱baijc163.欢迎联系!建立新工程过程中问题1GPIO_Study.c,line61:fatal error:could notopen sourcefileDSP280x_Device.h1fatal errordetected inthe pilationofGPIO_Study.c.解决方法因为project?build options?piler?preprocessor中,要包含的头文件的地址没有加进去,你可以找到头文件的地址,然后加进去。 问题2undefined firstreferenced symbolin file-_c_int00D:DSP studytest3DebugDSP280x_CodeStartBranch.obj FS$MPY D:DSP studytest3DebugDSP280x_CpuTimers.obj FS$TOL D:DSP studytest3DebugDSP280x_CpuTimers.objerror:symbol referencingerrors-./Debug/test3.outnot built或者下面的问题undefined firstreferenced symbolin file-_c_int00D:DSP studyGPIO_StudyDebugDSP280x_CodeStartBranch.objerror:symbol referencingerrors-./Debug/GPIO_Study.outnot built解决办法都是下面这个问题是因为没有加在库文件,请在project?build options?linker?libraries中加入rts2800.lib。 问题3warning:creating.stack sectionwith defaultsize of400(hex)words.Use-stack optionto change the defaultsize.error:cant allocate.stack,size00000400(page1)in RAMM1(avail:00000380)error:errors ininput-./Debug/GPIO_Study.out not built解决办法这个问题是关于堆栈存储大小的问题,他是说,创建堆栈段使用与设置400个字,并建议在“堆栈操作”中改变这个与设置。 这时,需要进行如下修改就可通过project?build options?Linker?basic,在Stack Size(-stack):填入800或者其他小于1024的数值。 调试程序在编译完成之后,要来下载程序并进行功能调试。 File?Load Program,在工程文件夹下面的Debug文件夹下,选中*.out文件,点击打开,便开始下载程序了。 将*.out文件下载到目标板上2812的RAM中。 注意,这里是调试,所以将程序下载到RAM。 等到最后您要固化程序的时候,就得下载到FLASH了,因为断电之后,RAM里面所有的数据都会消失。 (Run和Animate的区别,Run是如果遇到断点的话它就停下来了。 而Animate就算遇到断点时先停止DSP内核,刷新窗口,然后接着继续启动运行,常用来连续刷新变量窗口和生成graph图形等)知识储备。 添加断点加上断点的方法很简单,只要在该行代码前双击就行。 双击之后,这行代码前面会出现一个红色圆块。 另外一种添加断点的方法,就是在刚才的编译工具栏上,点一下那个小手图形的按钮,前提是你要把光标移动到想要设置断点的哪一行上。 使用watch windowWatch window的作用是来观察程序运行过程中的各个变量的值。 调用watch window的方法是点击菜单栏的View,watch window,这时watch window就会显示在CCS下方的信息区域;选中所要观察的变量,然后右键,在右键菜单中选择add towatch window。 调试代码观察我们在调试程序的时候经常想让程序从Main函数开使运行,点Debug?Go main。 1、line257:warning:last lineof fileends withouta newline;解决方法点击出现的问题条,看光标定位在哪里,然后一点点删除,直到把编程的文字删除,最后把删除的写出来,回车就行了,因为回车的格式要在状态哈哈!28016的定时器笔记学过2812的人会知道,2812的定时器和28016的定时器的寄存器很不一样。 但是从功能上将差不多。 关于28016定时器的时钟的讨论;定时器的时钟是由SYSCLKOUT经过TBCTL中的CLKDIV和HSPCLKDIV进行配置;和主要说明,我们应该记得SYSCLKOUT和HSPCLK之间还可以分频,但是在这里这个寄存器不影响。 关于28016定时器的时钟同步的讨论;如果我们想使每个PWM模块具有同步时钟,我们可以通过软件强制各个模块之间同步,设定步骤如下EPwm1Regs.TBCTL.bit.SYNCOSEL=0/Pass throughEPwm2Regs.TBCTL.bit.SYNCOSEL=0;/Pass throughEPwm3Regs.TBCTL.bit.SYNCOSEL=0;/Pass throughEPwm1Regs.TBCTL.bit.SWFSYNC=1;EPwm2Regs.TBCTL.bit.SWFSYNC=1;EPwm3Regs.TBCTL.bit.SWFSYNC=1;以上程序是设定PWM1/2/3同步,我们由于我们只采用向上计数,所以不需要设定计数方向位。 接下来如果我们想PWM1与PWM2输出相位不一样,保持某个相位差,我们可以通过寄存器设定;EPwm1Regs.TBCTL.bit.PHSEN=TB_ENABLE;EPwm2Regs.TBCTL.bit.PHSEN=TB_ENABLE;EPwm3Regs.TBCTL.bit.PHSEN=TB_ENABLE;EPwm1Regs.TBPHS.half.TBPHS=0;EPwm2Regs.TBPHS.half.TBPHS=250;EPwm3Regs.TBPHS.half.TBPHS=500;首先使能,然后赋予值;关于一些其他的配置如下EPwm3Regs.TBPRD=PWM3_TIMER_TBPRD;EPwm3Regs.TBCTL.bit.CTRMODE=TB_COUNT_UP;/Count upEPwm3Regs.ETSEL.bit.INTSEL=ET_CTR_ZERO;/Enable INTon Zeroevent EPwm3Regs.ETSEL.bit.INTEN=PWM3_INT_ENABLE;/Enable INTEPwm3Regs.ETPS.bit.INTPRD=ET_1ST;/Generate INTon3rd event关于28016PWM配置的讨论PWM1的A/B的独立配置;除了counter-pare比较寄存器,CMPA,CMPB,主要还是配置控制寄存器CMPCTL,对于影子寄存器的配置,还有影子寄存器的装载模式。 这里主要讲关于PWM中action qualifier的配置;模式1/Setup shadowregister loadon ZEROEPwm1Regs.CMPCTL.bit.SHDWAMODE=CC_SHADOW;EPwm1Regs.CMPCTL.bit.SHDWBMODE=CC_SHADOW;EPwm1Regs.CMPCTL.bit.LOADAMODE=CC_CTR_ZERO;EPwm1Regs.CMPCTL.bit.LOADBMODE=CC_CTR_ZERO;/Set Comparevalues EPwm1Regs.CMPA.half.CMPA=EPWM1_MIN_CMPA;/Set pareA valueEPwm1Regs.CMPB=500;/Set CompareB value/Set actionsEPwm1Regs.AQCTLA.bit.ZRO=AQ_CLEAR;/Set PWM1A on Zero EPwm1Regs.AQCTLA.bit.CAU=AQ_SET;/Clear PWM1A onevent A,up counEPwm1Regs.AQCTLB.bit.ZRO=AQ_SET;/Set PWM1B onZero EPwm1Regs.AQCTLB.bit.CBU=AQ_CLEAR;/Clear PWM1B onevent B,up count/Interrupt wherewe willchangetheCompare ValuesEPwm1Regs.ETSEL.bit.INTSEL=ET_CTR_ZERO;/Select INTonZeroevent EPwm1Regs.ETSEL.bit.INTEN=1;/Enable INTEPwm1Regs.ETPS.bit.INTPRD=ET_3RD;/Generate INTon3rd event其中红色的为PWM的输出方式配置,当PWM1.A在counter=0时,输出为0,在counter=CMPA时,且在向上计数,输出为1;而PWM1.B相反。 模式二/Set actionsEPwm2Regs.AQCTLA.bit.PRD=AQ_CLEAR;/Clear PWM2A onPeriod EPwm2Regs.AQCTLA.bit.CAU=AQ_SET;/Set PWM2A onevent A,up countEPwm2Regs.AQCTLB.bit.PRD=AQ_CLEAR;/Clear PWM2B onPeriod EPwm2Regs.AQCTLB.bit.CBU=AQ_SET;/Set PWM2B onevent B,up count其中红色的为PWM的输出方式配置,当PWM1.A在counter=period时,输出为0,在counter=CMPA时,且在向上计数,输出为1;而PWM1.B相同;模式三/Set ActionsEPwm3Regs.AQCTLA.bit.CAU=AQ_SET;/Set PWM3A onevent B,up countEPwm3Regs.AQCTLA.bit.CBU=AQ_CLEAR;/Clear PWM3A onevent B,up count其中红色的为PWM的输出方式配置,当PWM1.A在counter=CMPA时,输出为1,在counter=CMPB时,且在向上计数,输出为0,也就是计数在CMPA与CMPB之间时输出为1;模式四EPwm3Regs.AQCTLB.bit.ZRO=AQ_TOGGLE;/Toggle EPWM3B onZero此模式强制整个周期输出高或者输出地,与CMPA与CMPB无关,关于28016PWM死区时间配置的讨论主要与死区有关的是三个寄存器Dead-Band GeneratorControl Register(DBCTL);Dead-Band GeneratorRising EdgeDelay Register(DBRED);Dead-Band GeneratorRising EdgeDelay Register(DBRED)Field Descriptions;首先清楚延时时间的计算为DBRED*TBCLK;然后弄懂DBCTL就可以了。 注意理解下图弄懂3个控制位什么意思;OUT_MODE,POLSEL,IN_MODE注意第二位,这位通常用在输入为同一个通道时,也就是IN_MODE=0X00/0X03时。 简单看一些deadband的配置EPwm1Regs.DBCTL.bit.OUT_MODE=DB_FULL_ENABLE;输出之前,输入上升沿下降沿都被延时;EPwm1Regs.DBCTL.bit.POLSEL=DB_ACTV_HI;没有取反过程;EPwm1Regs.DBCTL.bit.IN_MODE=DBA_ALL;输入全部为A,此为习惯性的配置;EPwm1Regs.DBRED=1000;EPwm1Regs.DBFED=500;一周解决的为题我的sin()函数能够正常执行,cos()函数也能正常执行,但是当sin()计算完再计算cos(),仿真环境就会进入逻辑错误中断,请问怎么解决,是不是该重装CCS。 原因之前一直把程序烧到RAM里,总是只能执行一个sin()和cos()函数,然后RAM的空间就不够了,由于也不会改RAM空间的大小,所以就把程序直接下到flash里面,结果就好了。 遇到CCS和仿真器连不上的问题;Error connectingto thetarget:Error0x80000240/134Fatal Errorduring:Initialization,OCS UnknownError SequenceID:0Error Code:134Error Class:0x80000240I/O Port=240解决办法我也试着解决这个问题,重装了一次,结果没有用。 想着觉得是USB驱动的问题,然后就在设备管理器中,把USB的驱动删除了,有重新装了一遍,结果没问题了。 原因应该是以前用的USB口安装的驱动,又被用于安装其他的驱动,结果以前的USB驱动不能用了。 xx.1.19我在用dsp中的cos()与sin()函数时,对他们的结果做验证,发现他们有的计算出来的结果,和我用计算器计算出来的结果不一样,还差不少。 解决办法首先坚信CCS的函数计算不会轻易的出错,然后我就去查程序的问题,查不好长时间觉得没问题,就继续看程序运行的结果,结果发现有些计算正确,有些不正确,就在想执行过程中难道有随机性,结果突然想到中断的问题,我是在中断中作了个旋转矢量,通过中断来使它旋转,而直接把中断中的值,拿来在每个sin,cos中用,所以才出问题的。 结果改动了一点就行了,将中断中的值,在用的地方,重新付给另一个变量,这样就能解决了。 因为sin,cos执行需要时间较长,而普通的赋值却不是。 Flash APIError#65535:The deviceis inlimp mode,operation failed。 以前一直没有问题,不知道怎么突然就这样了。 解决办法烧写的插件(网上这么叫)没有装好的原因,我觉得就是仿真器第一次没连接好,拔掉再连接几次就行了。 xx.1.20fatal error:fileD:DSP studyADC_StudyDebugADC_Study.objhas aTag_Memory_Model attributevalue of2that isdifferent thanone previouslyseen(1);bining inpatiblefiles解决办法问题的出现可能是你lib下的库有所改变引起的,project-built options-linker-libraries-rts2800_ml.lib,因为之前一直用它,后来改成rts2800.lib就出现这个问题了,改回去就可以了。 data verificationfailed ataddress0x8000Please verifytarget memoryand memorymap解决方法可能是gel的问题,重新载入几次,如果不行的话,就把仿真器重新接几次,问题就应该没有了,多数是硬件的问题。 针对CCS的图像显示,一个方式为对程序中的某些变量画图,另一种方式是对DSP采集的数据画图,两者在方法上有所不同。 首先声明画图很简单,只要把重要的记住就可以了,其他的尝试怎么用就OK了,不用刻意去学,浪费时间;至于这张图中各个栏代表什么,你随便找个资料就给你说得很清楚,但是没有一份资料教你怎么用的,这就是网上资料的弊端。 你只要把右图画绿线的看懂就总够了,其他的试着改变参数,看看结果你就明白了。 接下来给你看看我的配置Dual time和single time的区别在于显示几个波形Svpwm_Time1和Svpwm_Time0是我程序内部的两个变量,也就是SVPWM的t1,t0,记得前面加&,不然结果不对,Acquisition BufferSize设为1,因为我想通过中断来调试,每次中断,然后刷新一次数据,这样很方便,找点资料看,这里不详细说明了,还有采样时间,根据你的要求来定。 波形如下是不是很matlab中一样哈!另一种方式,不能采用中断了,因为中断时间太长,影响采样速度。 建议在程序中建一个大的数组,然后运行一段时间,再将数组显示在CCS中,Acquisition BufferSize此时不能为1了,要和你的数组一样长,Display DataSize等于Acquisition BufferSize就可以,显示出来就可以了。 如下图这是我AD采样的波形,采集一个正弦波形,采用两个通道。 CCS显示图形续(xx/8/1) (3)起始地址(Start Address)A当监控的为数组时,一般我们用数组来存变量的值,也就是自己做了个变量的缓冲区,缓冲区的长度即为数组的长度,变量的值先存到数组形式的缓冲区中。 这个时候Address处写数组名就可以,学过C语言的大家都清楚,数组名即为首地址是个地址常量,不同于指针。 B当监控的为变量时,变量的地址如何获得呢?大家当然想到了取地址符&,对就用它就可以了,&变量名,如我要监控的变量为out,那么此处为什么呢?当然是&out了。 (5)采用缓冲区尺寸(Acquisition BufferSize)用户可以根据所需定义采样缓冲区的尺寸.例如当一次显示一帧数据时,则缓冲区尺寸为帧的大小.若用户希望观察串行数据,则定义缓冲区尺寸为1,同时允许左移数据显示.这个要与第3点结合才能理解清楚,A当是数组时(数组存的是一个变量的不同时刻的值),设置为数组的大小n,当然你也可以设置为1-数组大小n之间的数值,但很显然你会丢失一部分数据了,我们不会这么做吧我觉得,呵呵。 B当是变量时,那就是1了,而且我觉得只能是1(也就是当前的意思) (10)采样频率(Sampling Rate(Hz)对时域图形,此参数指明在每个采样时刻定义对同一数据的采样数.假定采样频率为xx,则一个采样数据对应xx个显示缓冲区单元.由于显示缓冲区尺寸固定,因此时间轴取值范围为0(显示缓冲区尺寸/采样频率).对时域图形,此参数定义频率分析的样点数.频率范围为0采样率/2.其中 (5)与 (10)配合决定了时间轴的取值范围;其中 (5)显示区域内的点数;xx.01.24error:symbol_mainredefined:first definedinD:DSP studyDSP_PerfectDsp_Perfect_110121WPerfectDebugPerfect.obj;redefined inD:DSP studyDSP_PerfectDsp_Perfect_110121WPerfectDebugSCI_485.obj解决办法这个问题是系统编译以后,在perfect.c和SCI_485.c中分别有main();结果编译会报错。 xx.01.22D:DSP studyDSP_PerfectDsp_Perfect_110121WcmdF28016.cmd,line125:error:run placementfails forobject.ebss,size0x3ba(page1).Available ranges:RAMM1size:0x380unused:0x380max hole:0x380error:errors encounteredduring linking;./Debug/Perfect.outnot built解决办法双击错误提示,进入错误的地方,原因是我们申明的变量数,超过了RAMM1的声明的大小,所以找过RAMM1,然后把size扩大就可以了,RAMM1:origin=0x000480,length=0x000400/*on-chip RAMblock M1*/,注意但是不能超过1024,也就是说最大是0x000400。 同时也把project?build options?Linker?basic,在Stack Size(-stack):填入800或者其他小于1024的数值。 以免以后有出些不明的问题。 DSP学习心得笔记(续)-白建成.baijc.icekoorxx.10.21C:/CCStudio_v3.3/bios_5_41_10_36/packages/ti/bios/lib/lnkrtdx.a28FPspecifies ISArevisionC28FPU32,which isnot patiblewith ISArevisionC2800specified ina previousfile oron themand line解决办法build option里面设置将no改为fu32xx.10.21undefined firstreferenced symbolin file-_ADC_cal C:UsersicekoorDesktopDSP_01DSP01DebugDSP2833x_SysCtrl.obj error:unresolved symbolsremain error:errors encounteredduring linking;./Debug/DSP01.outnotbuilt解决办法DSP2833x_SysCtrl.c中包含了ADC_cal()函数。 xx.10.22warning:entry-point symbolother than_c_int00specified:code_start解决办法这个问题我觉得是程序入口的问题,可以修改build options-code entrypoint为_c_int00;DSP学习心得笔记(续I)-白建成.baijc.icekoor为了实现DSP程序从一处到另一处的任意转移,这里需要建立的文件夹如下构建分离式的文件夹Cmd文件夹包含CMD文件CPS_PRCA_V1_DI文件夹包含工程文件,需要开发的c文件,以及debug文件夹中的out文件与obj文件;Gel文件夹;Include h文件夹;Lib各种库文件;Source文件DSP自带的各种库文件;Note文件笔记文件;-Include h文件配置方法上一级文件夹设定为.include;Lib库文件配置方法.lib,加载所需要的lib文件;针对lib文件的问题specifies ISArevisionC28FPU32,which isnot patiblewith ISArevisionC2800specified ina previousfile oronthemand line的解决方法。 解决方案1.在build options里pile标签下Advanced选项下的floating pointsupport的设置,将none改为fpu32。 2.直接在pjt文件里面改float_support=fpu32DSP/BIOS与其他文件的关系?假设,你用CCS并利用DSPBIOS建立一个test.pjt工程,bios配置文件命名为test.cdb或者test.tcf。 当你把test.cdb配置文件添加到工程之后,编译时候CCS就会自动产生testcfg.cmd文件,里面包含了内存分配和中断向量等。 所有DSPBIOS简易操作系统所能够包含的模块和内容,具体参考DSPBIOS的API技术文档,所以,问题1是否需要cmd文件中分配存储空间CCS会自动根据你DSPBIOS的默认配置,生成一个默认的testcfg.cmd文件,里面包含了内存配置,如果你还需要自定义一些内存配置,那么就需要再定义,如果不需要就用默认的cmd文件也可以。 问题2是否需要中断向量ASMDSPBIOS是TI DSP开发的简单操作系统,方便用户开发,里面包含了内存管理,线程任务管理,以及中断管理和时钟管理等等操作系统的核心基础功能,学会配置和使用DSPBIOS,能够提高开发效率如何下载TI的DSP例程以我3.3版本的CCS里,在C:CCStudio_v3.3docsPDFmanuals_s_full_c2000.html文件,直接找就OK了。 eCAN总线学习问题DSP配置寄存器的时候为什么都需要一个影子寄存器?ECanbShadow.CANTIOC.all=ECanbRegs.CANTIOC.all;ECanbShadow.CANTIOC.bit.TXFUNC=1;ECanbRegs.CANTIOC.all=ECanbShadow.CANTIOC.all;答书上说32位寄存器只能允许32位访问,对32位寄存器进行16位的访问会破坏寄存器内容,或者返回错误的数据;对程序中常出现的EINT、DINT、ERTM、DRTM的理解? 一、参考DSP281x_Device.h#define EINTasm(clrc INTM)/INTM置0,开中断#define DINTasm(setc INTM)/INTM置1,关中断#define ERTMasm(clrc DBGM)/使能调试事件#define DRTMasm(setc DBGM)/禁止调试事件 二、参考TMS320C28x DSPCPU和指令集参考指南中对INTM和DBGM的解释(译的不好,凑合看吧。 ) 1、DBGM Bit1调试启用屏蔽位。 当DBGM置位时,仿真器无法在实时状态下访问内存或寄存器。 调试器无法更新其窗口。 在实时调试模式中,若DBGM=1,则CPU忽略停止请求或硬件断点,直到DBGM清零。 DBGM并不阻止CPU停止在软件断点。 这点的一个影响可以在实时调试模式中看到。 如果你在实时调试模式中单步执行一个指令,并且这条指令置位DBGM,CPU继续执行指令,直到DBGM被清零。 当你给TI调试器“实时”命令时(进入实时模式),DBGM强制为0。 令DBGM=0确保了允许调试和测试直接内存访问(DT-DMAs);内存和寄存器的值可传递到主处理器,用于更新调试器窗口。 CPU在执行中断服务程序(ISR)之前将DBGM置位。 当DBGM=1时,主处理器和硬件断点的停止请求被忽略。 如果你想要单步执行程序或在对时间要求不严格的ISR中设置断点,那么你必须在ISR的开始处增加一条CLRC DBGM指令。 DBGM主要用在时间要求严格的程序代码部分的仿真,来阻止调试事件。 DBGM使能或禁止调试事件,如下0调试事件使能。 1调试事件禁止。 当CPU响应中断时,DBGM的当前值存储到堆栈中(当ST1存储在堆栈中时),然后DBGM置位。 当由中断返回时,DBGM由堆栈中恢复。 此位可分别由SETC DBGM指令和CLRC DBGM指令复位和清零。 DBGM在中断操作期间目录下,打开被自动置位。 复位时,DBGM置位。 执行ABORTI(中止中断)指令也可以将DBGM置位。 2、INTM Bit0中断全局屏蔽位。 此位从全局上使能或禁止所有可屏蔽CPU中断(那些可由软件阻止的中断):0可屏蔽中断被全局使能。 为了被CPU认可,则可屏蔽中断也必须被中断使能寄存器(IER)局部使能。 1可屏蔽中断被全局禁止。 即使一个可屏蔽中断被IER局部使能,也不会被CPU认可。 INTM对非可屏蔽中断没有影响,包括硬件复位或软件复位中断NMI。 此外,当CPU在实时仿真模式下被停止时,由IER和DBGIER使能的中断将被响应,即使INTM设置为禁止可屏蔽中断。 当CPU响应中断时,INTM的当前值存储到堆栈中(当ST1存储在堆栈中时),然后INTM置位。 当由中断返回时,INTM由堆栈中恢复。 此位可分别由SETC INTM指令和CLRC INTM指令复位和清零。 复位时,INTM置位。 INTM的值不会引起中断标志寄存器(IFR)、中断使能寄存器(IER)或调试中断使能寄存器(DBGIER)的改变。 TMS320LF2407的CAN模块特点TMS320LF2407的CAN的屏蔽寄存器TMS320LF2407调试的一些问题DSP2407板的SD4引脚,仅仅针对DI板。 Enable管脚决定LED(SD4)的亮灭,但是对系统上电不影响;PADATDIR=PADATDIR&0xffdf;/PA5置0,led灯变灭;PADATDIR=PADATDIR|0x0020;/PA5置1,led灯变亮;MAX706上电复位芯片的特性WDI正常时;WDO为高;WDI不正常时;WDO为低,此时MR为低,RESET复位,WDO为高;SCSR2.WD:该位禁止通过软件(WDCR.WDDIS=1)禁止看门狗;该位上电复位后,默认为1;该位仅是清除位,向该位写1,清除该位将要使能看门狗;该位为1时,允许禁止看门狗;该位一旦被清除,就不能被保护;仅当(SCSR2.WD=1)时,才能配置看门狗;当禁止看门狗后,清除SCSR2.WD时,看门狗被使能;看门狗程序测试WDCR.WDFLAG位置1时,清除了上电引起的的复位;上电复位后使得程序重新从main()运行;注意向WDCR写数据是,保证WDCHK2,WDCHK1,WDCHK0=101;如果没有内部看门狗,DSP2407系统上电后,很容易出现死机。 加上看门狗程序后,系统上电几乎不出现死机情况。 xx年07月16日DSP编程算法研究标志位定义方法(SL-StateLabel)1.定义标志位变量unsigned intflag15;2.定义标志位(总共可定义256个标志位)/flag0#define SL_FLAG000x00#define SL_FLAG010x01.#define SL_FLAG000x0f/flag1#define SL_FLAG100x10#define SL_FLAG110x11.#define SL_FLAG100x1f/flag2./flag15#define SL_FLAGf00xf0#define SL_FLAGf10xf1.#define SL_FLAGf00xff3.对标志位置位操作#define M_SetFlag(x)(flag(x&0xF0)4|=(Uint16)0x0001)4&=(Uint16)0x0001)4&(Uint16)0x0001)(x&0x0F)6.应用举例M_SetFlag(SL_FLAG21);if(M_ChkFlag(SL_FLAG21)!=0)LEDOn;else LEDoff;M_ClrFlag(SL_FLAG21);if(M_ChkFlag(SL_FLAG21)=0)LEDOn;else LEDOff;以上程序都会执行LEDOn;xx年07月29日TMS320C6713学习笔记TMS320C6713需外接Flash存储器,根据情况用EMIF连接SDRAM,SBRAM,EEPROM等S29AL032D70TFI04是什么?32Mb CMOS3.0Flash Memory通用名词解释;EMIF:External MemoryInterface VLIW:Advanced VeryLong InstructionWord HPI:Host-Port InterfaceDIT:Digital AudioInterface TransmitterMcBSPs:Multichannel BufferedSerial PortsMcASP0:Multichannel AudioSerial Port0EXTPOL:External interruptpolarity CPU的统一编制和外设独立编址在内存映射中看到了我们的GPIO模块映射到内存的地址,为0x01B0_0000到0x01B0_3FFF的地址。 在此我多说一点,一般的CPU分成统一编址和IO编址,统一编址的意思就是把外围的每一个模块当成内存单元,读写操作和读写内存操作一样的指令集,比如我这个DSP就是这样的。 这样我就很方便的使用外设,但是他占用了我们的内存地址空间。 大家已经看到了GPIO模块占用了我们的内存地址16K。 那么IO编址的哈,就是把外设单元和我们的内存单元分开编址。 比如我同样的地址只要指令集不一样,那么读写操作的对象就不一样了!TMS320C6713的GPIO功能应用GPIO地址为0x01B0_0000到0x01B0_3FFF6713reg.h文件的宏定义如下#define GPEN*(volatile Uint32*)0x01B00000/GPIO EnableRegister#define GPDIR*(volatile Uint32*)0x01B00004/GPIO DirectionRegister#define GPVAL*(volatile Uint32*)0x01B00008/GPIO ValueRegister#define GPDH*(volatile Uint32*)0x01B00010/GPIO DeltaHigh Register#define GPHM*(volatile Uint32*)0x01B00014/GPIO HighMask Register#define GPDL*(volatile Uint32*)0x01B00018/GPIO DeltaLow Register#define GPLM*(volatile Uint32*)0x01B0001C/GPIO LowMask Register#define GPGC*(volatile Uint32*)0x01B00020/GPIO GlobalControl Register#define GPPOL*(volatile Uint32*)0x01B00024/GPIO InterruptPolarity Register使能GPIO13为GPIO功能GPEN|=113;定义GPIO13为输出端口GPDIR|=113;使得GPIO13输出为0GPVAL&=(113);TMS320C6713的2个32位定时计数器/*Timer0*/*Timer0*/*Timer0*/*Timer0*/#define TIMER0CTL*(volatile Uint32*)0x01940000/Timer Control#define TIMER0PRD*(volatile Uint32*)0x01940004/Timer Period#define IMER0*(volatile Uint32*)0x01940008/Timer Counter一旦定时器的值与设定的定时器周期寄存器(PRD)相等时,定时器在下个CPU周期被置0,因此计数器是从0到N的。 考虑到这一种情况,周期为2时,定时器时钟源为1/4CPU时钟,定时器计数为0,(0,0,0,1,1,1,1,2,)(0,0,0,1,1,1,1,2,)0,0,0?周期是8个CPU时钟周期(2x4),而不是12个CPU时钟周期(3x4),所以用户在向下计数周期寄存器中设置的值应该是Timer Period。 定时器的时钟为1/2of SYSCLK2;SYSCLK2is mustexactly halfof sysclk1;That isTimerclk is1/4of sysclk1;xx年07月31日TMS320C6713中断便于以后查找当启动EDMA中断,需要配置EDMA的中断,还要配置全局中断,常常会让人迷乱,这里以XINT4中断为例介绍。 EDMA的中断寄存器简介CIPR EDMA中断事件将要发生寄存器,写1清除即将迫近的事件CIER EDMA通道中断使能寄存器,写1使能通道中断ER事件捕获寄存器(只读),读1表示捕获到事件EER事件使能寄存器,写1使能EDMA ECR事件清除寄存器,写1清除发生的事件ESR事件置位寄存器,写1置位事件?暂时没有明白其用途。 全局中断相关寄存器简介CSR CPU控制和状态寄存器,其中GIE位为全局中断使能控制位,写1使能全局中断IER全局各个中断使能寄存器,写1使能相应中断IFR中断发生标志位ICR中断清除标志位xx年08月01日DSP的FIR(有限长脉冲响应滤波算法)滤波算法研究设FIR滤波器单位脉冲响应h(n)长度为N,其系统函数H(z)为H(z)?h(n)z?nn?0?1N?1H(z)是z的(N-1)次多项式,它在z平面上有(N-1)个零点,原点z=0是(N-1)阶重极点。 因此,H(z)永远稳定,它可以在幅度特性随意设计的同时,保证精确、严格的线性相位。 数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列,FIR滤波器的差分方程为y(n)?a kx(n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高级会计实务试题及答案
- 肿瘤靶向药管理办法
- 社会团体管理办法
- pdca企业管理办法
- 老旧散小区管理办法
- 箱包厂管理办法规定
- 规范监狱资产管理办法
- 贸易交通走廊管理办法
- 不良事件资料管理办法
- 自动化物料管理办法
- 2024吉林省农村信用社联合社招聘笔试历年典型考题及考点剖析附带答案详解
- 大众内部购车协议书
- 2025新人教版英语八上单词默写单(先鸟版)
- 公证处考试历年试题
- 《电子商务基础(第二版)》课件 第五章 电子商务物流
- 语言分析面试题及答案
- 社区社会组织备案申请表
- 授权委托押车协议书
- 买卖合同法律知识及风险防范培训课件
- 广东2025年03月珠海市市直机关事业单位公开招考合同制职员笔试历年参考题库考点剖析附解题思路及答案详解
- 铝合金门窗安装与质量控制
评论
0/150
提交评论