学习DSP遇到的问题.docx_第1页
学习DSP遇到的问题.docx_第2页
学习DSP遇到的问题.docx_第3页
学习DSP遇到的问题.docx_第4页
学习DSP遇到的问题.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1,什么是分页机制?2,typedef interrupt void(*PINT)(void); 这句话完成了一个类型的定义,以后使用 PINT 将定义一个函数的地址。 再来看 TINT0 的位置,它位于该结构体的第 39 个字节处,对照 PIE 中断向量表,第39 个字节处正好是 CPU 定时器 0 的中断向量,因此完成了的定义之后,当 CPU 定时器 0的中断发生后,CPU从中断向量表 0x00000D4C处取中断向量,0x00000D4C 处正好放的是中断函数 interrupt void ISRTimer0(void)的地址,因为 interrupt 关键字的定义,执行该中断函数之前先保护寄存器,然后执行函数功能,执行完后弹出保护寄存器,实现了 CPU 定时器 0 的中断响应。 上面以 CPU定时器 0 的中断为例进行了详细的介绍,其他的中断可以参考以上的描述。3,什么是双缓冲结构?4,0欧姆电阻指阻值为零的电阻。电路板设计中两点不能用印刷电路连接,常在正面用跨线连接,这在普通板中经常看到,为了让自动贴片机和自动插件机正常工作,用零电阻代替跨线5,RPT #10 |NOP是否可以等价为RPT #10NOP;NOP;这样就是12个周期因|为双目运算符,从左至右执行,执行完RPT #10后还要再执行一次NOP不知我的理解是否正确,求指导6,在程序的末尾都要加入一段看门狗复位的死循环,这样做的作用是什么?解决 :防止程序跑飞,保留当前输出结果7,what are the meanings of the non-BIOS project and BIOS project?解决:BIOS是TI公司专为DSP设计的实时操作系统。为TI的DSP编程时,可以采用BIOS,也可以不采用BIOS。non-BIOS project 就是不采用BIOS的工程文件。8,我看到dsp2812中有这几个cmd文件:F2812.cmd2812_EzDSP_RAM_lnk.cmdF2812_XintfBoot.cmdDSP281x_Headers_nonBIOS.cmdDSP281x_Headers_BIOS.cmd不知道这几个cmd文件有什么别,到底用哪两个?解决:F2812.cmd: F2812 memory linker command file. Include all FLASH,OTP and CSM password protected memory locations, this linker command file is valid for F2811 as well.2812_EzDSP_RAM_lnk.cmd: memory map that only allocates SARAM locations. No Flash,OTP,or CSM password protected locations are used.F2812_XintfBoot.cmd:F2812 boot from XINTF Zone 7.DSP281x_Headers_nonBIOS.cmd:Linker .cmd file to assign the header file variables in a non-BIOS project. This file must bu include in an non-BIOS project that use the header files.DSP281x_Headers_BIOS.cmd: Linker .cmd file to assign the header file variables in a BIOS project. This file must bu include in an BIOS project that use the header files.In most cases, we used 2812_EzDSP_RAM_lnk.cmd and DSP281x_Headers_nonBIOS.cmd for debug or F2812.cmd and DSP281x_Headers_nonBIOS.cmd for Flash if in a non-BIOS project. That all.9,什么是强制高和强制低?解决:如果你设置为强制高,那么PWM的输出始终为高电平,同理,如果你设置为强制低,那PWM的输出始终为低电平。10,什么是双刷新PWM模式?11,数据预读机制解决:微软采用的一种全新系统后台数据预读机制,它可以提高系统性能,加快Windows XP/2003的启动速度,经过预读的程序全部存放在系统所在文件夹下的prefetcher目录中(图1),文件名格式类似于下面这个样子: FOXMAIL.EXE-2B721FDE.pf(这是Foxmail的预读文件)。Windows XP/2003虽然采用了预读取机制,但是默认设置下比较保守,我们可以自己来定义程序的预读取方式,大幅度提高系统的性能。12,PID参数整定的方法解决:曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积分时间往下降 曲线波动周期长,积分时间再加长 曲线振荡频率快,先把微分降下来 动差大来波动慢。微分时间应加长第一句:当振荡曲线,频率高的时候,应当放大比例系数K。 第二句:当振荡曲线,频率低的时候,应当减小比例系数K。 第三句:当振荡曲线,趋向于稳态的时候,如果比率小,则应减小积分的时间。 第四句:当振荡曲线,趋向于稳态的时候,如果比率大,则应当增加积分的时间。 第五句:当振荡曲线,固有振荡频率高的话,则应当减小微分时间。 第六句:当振荡曲线,振荡幅值大,固有频率低的话,则应当增加微分时间。13,PID 参数整定的一般原则与一般步骤解决:(1)一般原则 a.在输出不振荡时,增大比例增益P。 b.在输出不振荡时,减小积分时间常数Ti。 c.在输出不振荡时,增大微分时间常数Td。(2)一般步骤 a.确定比例增益P 确定比例增益P 时, 首先去掉PID的积分项和微分项,一般是令 Ti=0、 Td=0,使 PID 为纯比例调节。输入设定为系统允许的最大值的 60%70%,由 0 逐渐加大比例增益P,直至系统出现振荡;再反过来,从此时的比例增益P 逐渐减小,直至系统振荡消失,记录此时的比例增益P,设定PID的比例增益 P为当前值的60%70%。比例增益 P调试完成。 b.确定积分时间常数Ti 比例增益 P 确定后,设定一个较大的积分时间常数 Ti的初值,然后逐渐减小Ti,直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的 150%180%。积分时间常数Ti调试完成。 c.确定积分时间常数Td 积分时间常数Td一般不用设定,为 0即可。若要设定,与确定 P 和Ti的方法相同,取不振荡时的30%。 d.系统空载、带载联调,再对PID 参数进行微调,直至满足要求。 我个人认为 PID 参数的设置的大小,一方面是要根据控制对象的具体情况而定;另一方面是经验。P 是解决幅值震荡,P大了会出现幅值震荡的幅度大,但震荡频率小,系统达到稳定时间长;I 是解决动作响应的速度快慢的,I 大了响应速度慢,反之则快;一般D设置都比较小,而且对系统影响比较小。 对于你的系统来说,要求“快”的话,可以增大 Kp、Ki值 要求“准”的话,可以增大 Ki值 要求“稳”的话,可以增大 Kd 值,可以减少输出波动 14,中断服务函数同传统的单片机中断处理方式类似,DSP中断的处理也有两种方式:(1)查询法:可以更好地对程序进程进行控制,对中断的处理可以完全按照程序预定的方式进行,一般不会出现中断丢失或中断嵌套的问题,但由于中断发生时不会暂停当前正在执行的程序,而程序可能正处于复杂的处理或运算状态,只有结束当前处理才会去检查中断标志,因此中断实时性不容易保证。(2)回调法:程序结构更为清晰,而且当有中断发生的时候会暂停当前正在执行的程序,中断实时性可以得到保证,但如果中断处理函数实现不当容易造成中断丢失或中断嵌套问题,影响系统的正常运行。采用回调法处理DSP中断需要定义中断服务函数,有两种方法:(1)用关键字intterupt(中断)来实现。它的用法是:interrupt void isr(void);(2)任何具有名为c_intd的函数(d为0到9的数),都被假定为一个中断程序。如:void c_int1 (void); 无论用哪种方法定义中断服务函数,都须注意以下问题:(1)中断处理函数必须是void类型,而且不能有任何输入参数。(2)进入中断服务函数,编译器将自动产生程序保护所有必要的寄存器,并在中断服务函数结束时恢复运行环境。(3)进入中断服务函数,编译器只保护与运行上下文相关的寄存器,而不是保护所有的寄存器。中断服务函数可以任意修改不被保护的寄存器,如外设控制寄存器等。(4)要注意IMR、INTM等中断控制量的设置。通常进入中断服务程序要设置相应寄存器将中断屏蔽,退出中断服务程序时再打开,避免中断嵌套。(5)中断处理函数可以被其他C程序调用,但是效率较差。(6)多个中断可以共用一个中断服务函数,除了c_int0。c_int0是DSP软件开发平台CCS提供的一个保留的复位中断处理函数,不会被调用,也不需要保护任何寄存器。(7)使用中断处理函数和一些编译选项冲突,注意避免对包含中断处理函数的C程序采用这些编译选项。(8)中断服务函数可以和一般函数一样访问全局变量、分配局部变量和调用其它函数等。(9)要利用中断向量定义将中断服务函数入口地址放在中断向量处以使中断服务函数可以被正确调用。(10)中断服务函数要尽量短小,避免中断丢失、中断嵌套等问题。15,动态分配内存TMS320C2000 C语言程序中可以调用malloc、calloc或realloc函数来动态分配内存。unsigned int*data;data =(unsigned int*) malloc(100 * sizeof(unsigned int);动态分配的内存将分配在.system段。动态分配的内存只能通过指针进行访问。将大数组通过这种方式来分配可以节省.bss段的空间。通过链接器的-heap选项可以定义.system段的大小。16,C编译器使用软件堆栈的作用?C编译器使用软件堆栈进行如下工作:分配局部变量、向函数传递参数、保存处理器状态、保存函数的返回地址、保存暂时的结果、保存寄存器。 堆栈从较低地址向较高地址生长,编译器使用两个寄存器管理堆栈:AR1:堆栈指针(SP, stack pointer),指向当前堆栈顶。AR2:帧指针(FP, frame pointer),指向当前帧的起始点。每一个函数都会在堆栈顶部建立一个新的帧,用来保存局部的或临时的变量。 C语言环境自动操作这两个寄存器。如果编写用到堆栈的汇编语言程序,一定要注意正确使用这两个寄存器。 用-stack连接选项可以指定软件堆栈的大小,用C编写DSP程序一定注意保留足够的堆栈空间! 注意:编译器不会检查堆栈溢出情况,堆栈溢出会破坏DSP运行环境,导致程序失败。编写DSP程序和配置DSP存储器资源要注意防止堆栈溢出的发生。17,寄存器使用规则TMS320C2x/C2xx/C5x运行环境对寄存器的使用有严格的规则,如果编写涉及到寄存器的汇编程序,必须严格遵守这些规则,否则可能造成系统工作异常。寄存器规则规定了编译器如何使用寄存器,和寄存器在函数调用的过程中如何进行保护。 寄存器按照保护方式分为两种: 调用保存(save on call),调用其它函数的函数负责保存这些寄存器的内容。 入口保存(save on entry),被调用的函数负责保存这些寄存器的内容。注:无论是否使用优化编译,都必须遵守这些寄存器规则。寄存器的使用和保护状态寄存器(ST0、ST1)单元对于有假定值(为0或为1)的状态寄存器单元,在进行函数调用和函数返回时必须保证其值为假定值。 3个寄存器堆栈指针(SP)、帧指针(FP)和局部变量指针(LVP)管理堆栈和局部帧。 AR6和AR7作为寄存器变量的寄存器。AR6被分配给第一个变量,AR7分配给第二个变量。 编译器使用不用于寄存器变量的寄存器来计算表达式的值并保存临时结果。当函数的返回值是一个标量类型(整型、指针或浮点型)时,该值在函数返回时被放入累加器中。 16位的数据类型(字符型、短整型、整型或指针型)连同正确的符号扩展被装载到累加器中。18,函数结构和调用规则C编译器对函数的调用有一系列严格的规定。除了特殊的运行支持函数外,任何调用者函数和被调用函数都要遵守这些规则,否则可能会破坏C环境并导致程序失败。 (1)函数如何产生调用 一个函数(调用者函数)在调用其他函数(子函数)时执行以下任务。注意,ARP必须设置为1。a. 调用者函数将参数以颠倒的顺序压入堆栈(最右边声明的参数第一个压入堆栈,最左边的参数最后一个压入堆栈)。即函数调用时,最左边的参数放在栈顶单元。b. 调用者函数调用子函数。c. 调用者函数假定当子函数执行完成返回时,ARP将被置为1。d. 完成调用后,调用者函数将参数弹出堆栈。(2)被调用函数如何响应a. 将返回地址从硬件堆栈中弹出,压入软件堆栈。b. 将FP压入软件堆栈。c. 分配局部帧。d. 如果函数修改了AR6和AR7,则将它们压入堆栈,其他的任何寄存器可以不用保存,任意修改。e. 实现函数功能。f. 如果函数返回标量数据,将它放入累加器。g. 将ARP设定为AR1。h. 如果保护了AR6、AR7,恢复这两个寄存器。i. 删除局部帧。j. 恢复FP。k. 从软件堆栈中弹出返回地址并压入硬件堆栈。l. 返回。 (3)被调用函数的特殊情况 被调用的函数有三种特殊情况:a. 返回的是一个结构体:当函数的返回值为一个结构时,调用者函数负责分配存储空间,并将存储空间地址作为最后一个输入参数传递给被调用函数。被调用函数将要返回的结构拷贝到这个参数所指向的内存空间。b. 不将返回地址移到软件堆栈中:当被调用函数不再调用其它函数,或者确定调用深度不会超过8级,可以不用将返回地址移动到软件堆栈。c. 不分配局部帧:如果函数没有输入参数,不使用局部变量,就不需要修改AR0(FP),因此也不需要对其进行保护。19,排电阻的作用(1),限流,常态是输入电流很小有可能是用不到限流,其作用是在所有情况下的限流(2),去抖,不能只是理解为在按键下的正常抖动,也可以是幅度大的尖脉冲。20,express dsp解决:eXpressDSP是一种实时DSP软件技术,它是一种DSP编程的标准,利用它可以加快你开发DSP软件的速度。以往DSP软件的开发没有任何标准,不同的人写的程序一般无法连接在一起。DSP软件的调试工具也非常不方便。使得DSP软件的开发往往滞后于硬件的开发。eXpressDSP集成了CCS(Code Composer Studio)开发平台,DSP BIOS实时软件平台,DSP算法标准和第三方支持四部分。利用该技术,可以使你的软件调试,软件进程管理,软件的互通及算法的获得,都变得容易。这样就可以加快你的软件开发进程。21,如何判断 DSP 能正常的工作 ?解决:最简单的办法是测量它的 clkout 脚输出是否正常 ?22,时钟电路选择原则1, 系统中要求多个不同频率的时钟信号时,首选可编程时钟芯片 ;2, 单一时钟信号时,选择晶体时钟电路 ;3, 多个同频时钟信号时,选择晶振 ;4, 尽量使用 DSP 片内的 PLL ,降低片外时钟频率,提高系统的稳定怿5,C6000 、 C5510 、 C5409A 、 C5416 、 C5420 、 C5421 和 C5441 等 DSP 片内无振荡电路,不能用晶体时钟电跿6,VC5401 、 VC5402 、 VC5409 和 F281x 等 DSP 时钟信号的电平为 1.8V ,建议采用晶体时 钟电跿 23,静态库文件.lib 文件和动态库文件.dll 文件解决:两种库的区别在于静态库被调用时直接加载到内存,而动态库则是在需要的时候加载到内存,不使用的时候再从内存释放。(1)lib 是编译时需要的,

温馨提示

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

评论

0/150

提交评论