ImageVerifierCode 换一换
格式:DOCX , 页数:66 ,大小:578.64KB ,
资源ID:5843136      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5843136.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DSP考试资料.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DSP考试资料.docx

1、DSP考试资料考点:1.P6567中断向量表地址(填空)IPVD(高16位)+行列号(中间五位)+000 2.n个引脚定时控制n个灯,要求n个灯依次点亮,延时时间按老师给的设置(类似题)要会画图 3.P298MTYPE域(填空)看手册 4.三种擦除方式要知道怎么编程,程序中涉及到 5.P336、P277 CPU时钟频率=(mult/div+1)程序中涉及到 6.P373 图9-29 7.画出DSP与存储器原理图(注意双向/单向通信)一DSP结构1. TMS320C55x的硬件结构CPU结构图 P21 C55x有1条32位的程序数据总线(PB),5条16位数据总线(BB、CB、DB、EB、FB)

2、和1条24位的程序地址总线及5条23位的数据地址总线,12条独立总线,这些总线分别与CPU相连。总线通过存储器接口单元(M)与外部程序总线和数据总线相连,实现CPU对外部存储器的访问。这种并行的多总线结构,使CPU能在一个CPU周期内完成1次32位程序代码读、3次16位数据读和两次16位数据写。C55x根据功能的不同将CPU分为4个单元,即指令缓冲单元(I)、程序流程单元(P)、地址流程单元(A)和数据计算单元(D)。 C55x的CPU组成1) 指令缓冲单元(I单元):书上P23图2-2:组成: 3216位指令缓冲队列;指令译码器。功能: 接收程序代码并放入指令缓冲队列;由指令译码器解释指令,

3、再把指令流传给其它的工作单元1.指令缓冲队列: 每个机器周期,PB从程序空间传送32位的程序代码至I单元的指令缓冲队列;最大可以存放64个字节的待译码指令,可以执行块循环指令,具有对于分支、调用和返回指令的随机处理能力。2.指令解码器: 当CPU准备译码时,6个字节的代码从队列发送到I单元的指令译码器;能够识别指令边界, 译码8、16、24、32、40和48位的指令,决定2条指令是否并行执行,将译码结果和立即数送至P单元、A单元、D单元 2) 程序流单元(P单元)组成: 程序地址发生器;程序控制逻辑功能: 产生所有程序空间地址,并送到PAB总线1. P单元:产生程序空间地址,并加载地址到PAB

4、;控制指令流顺序2. 程序地址产生逻辑:产生24位的程序空间取指的地址;可产生顺序地址;也可以I单元的立即数或D单元的寄存器值作为地址3. 程序控制逻辑: 接收来自I单元的立即数,并测试来自A单元或D单元的结果从而执行如下动作:测试条件执行指令的条件是否成立,把测试结果送程序地址发生器; 当中断被请求或使能时,初始化中断服务程序;控制单一指令重复或块指令重复;管理并行执行的指令 3) 地址-数据流单元(A单元):图2-4组成: 数据地址产生电路 (DAGEN);附加16位ALU和1组寄存器功能: 产生读/写数据空间地址,并送到BAB、CAB、DAB总线1. A单元算术逻辑电路:ALU可接收来自

5、I单元的立即数或与存储器、I/O空间、A单元寄存器、D单元寄存器和P单元寄存器进行双向通信。可完成如下动作:加法、减法、比较、布尔逻辑、符号移位、逻辑移位和绝对值计算; 测试、设置、清空、求补A单元寄存器位或存储器位域;改变或转移寄存器值,循环移位寄存器值,从移位器向一个A单元寄存器送特定值。2. 数据地址产生器单元: DAGEN产生所有读写数据空间的地址。可接收来自I单元的立即数或来自A单元的寄存器值;根据P单元指示,对间接寻址方式时选择使用线性寻址还是循环寻址。4)数据运算单元(D单元) 组成: 1个40位的筒形移位寄存器(barrel shifter); 2个乘加单元(MAC);1个40

6、位的ALU;若干寄存器。 功能: CPU中最主要的部分,是主要的数据处理部件 1. 存储器接口单元(M单元):是CPU和数据空间或I/O空间 2.移位器:图2-5 接收来自I单元的立即数, 与存储器、I/O空间、D单元寄存器、P单元寄存器、A单元寄存器进行双向通信;把移位结果送至D单元的ALU或A单元的ALU;实现40位累加器值最大左移31位或最大右移32位;实现16位寄存器、存储器或I/O空间数据最大左移31位或最大右移32位; 实现16位立即数最大左移15位; 提取或扩张位域,执行位计数; 对寄存器值进行循环移位;在累加器的值存入数据空间之前,对它们进行取整/饱和处理。3. D单元ALU:

7、 可从I单元接收立即数,或与存储器、I/O空间、D单元寄存器、P单元寄存器、A单元寄存器进行双向通信,还可接收移位器的结果;加法、减法、比较、取整、饱和、布尔逻辑以及绝对值运算; 在执行一条双16位算术指令时,同时进行两个算术操作;测试、设置、清除以及求D单元寄存器的补码;对寄存器的值进行移动。4. 两个MAC:可支持乘法和加/减法。在单个机器周期内,每个MAC可以进行一次1717位小数或整数乘法运算和一次带有可选的32或40位饱和处理的40位加/减法运算。MAC的结果送累加器; MAC接收来自I单元的立即数,或来自存储器、I/O空间、A单元寄存器的数据,和D单元寄存器、P单元寄存器进行双向通

8、信;MAC的操作会影响P单元状态寄存器的某些位。指令流水线:见书本P25页DSP器件的六个特点:哈佛结构,多总线结构,流水线技术,硬件乘法器,多处理单元结构,嵌入式功能。冯诺依曼结构: 程序和数据共用同一套总线,对程序和数据需要分时读写,执行速度慢,数据吞吐量低,计算机结构简单,不适于进行高速度的数字信号处理。哈佛结构: 程序、数据具有独立的存储空间,有独立的程序总线和数据总线,可同时对程序和数据进行寻址和读写访问,执行速度高, 数据吞吐量大,计算机结构复杂,非常适于进行高速的数字信号处理。流水线技术,4级流水线分别为:取指令,译码,取数,执行。DSP复位后程序指针指向FF8000H放置着bo

9、otloader(引导程序)数据空间为128页每页64k在DSP中有符号,无符号,短整型,整型都是16位。Ioport类型的指针只有16位C_int00为c/c+的程序入口地址中断物理地址模型:IVPD(16位):ISP(5位):000(保留)IVPD(16位):中断指针地址+ISP(5位):中断序列号(32个中断)复位后IVPD(16位)=FFFF00H32个中断分为:不可屏蔽中断如:软件中断(指令),硬件中断(NMI,RESET) 可屏蔽中断INIM 全局中断位 IER局部中断位ISR中断服务程序; IFR中断标志程序CPU中有96个寄存器C55x的存储(数据/程序)空间统一编址,CPU读

10、取程序代码时,使用24位地址访问相关字节,CPU读写数据时,使用23位地址访问相关字,两种情况下地址总线上均为24位,只是数据寻址时地址总线上的最低位强制填充0C55x存储空间(总共为16M字节或8M字)的划分:128个主页面(0127),每个主页面为64K字,主页面0的前192个字节或96个字(00 0000h00 00BFh)被MMR所占用CPU使用字地址访问数据空间 字地址为23位的,寻址16位的数据,地址线为24位的,当CPU读/写数据空间时,23位的字地址最低位补一个0成为总地址。例:字地址:00000000000000100000010 地址线:000000000000001000

11、000100I/O空间和程序/数据空间是分开的,只能用来访问DSP外设上的寄存器I/O空间里的字地址宽度是16位,可以访问64K个地址对于I/O空间的读写是通过数据读总线DAB和数据写总线EAB进行的,读写时要在16位地址前补0例。设一条指令从16位地址0102h处读取一个字,则DAB传输的24位地址为00 0102h。汇编语言的设计:COFF目标文件通常包括3个默认段,即.text段,通常包含可执行代码.data段,通常包含初始化数据.bss段,通常为未初始化变量保留存储空间汇编器通过段伪指令自动识别各个段,并将段名相同的语句汇编在一起;汇编器有5条伪指令可以识别汇编语言程序的各个不同段.t

12、ext、.data、.sect创建初始化段.bss和.usect创建未初始化段.sect与.usect创建自定义段和子段C编译器生成的段C编译器生成的段有两种基本的类型:初始化段和未初始化段初始化段有:.cinit段:包含初始化数据表格和常数.pinit段:包含实时运行时调用的数据表格.const段:包含用const定义(不能同时被volatile定义)的字符串常量和数据.switch段:包含switch语句所用表.text段:包含所有可执行代码未初始化段保留了存储器空间,一段程序可以在运行期间使用这个空间来生成和存储变量:.bss段:为全局和静态变量保留了空间。在启动和装载的时候,C启动程序

13、或装载程序从.cinit段(通常在ROM中)复制数据并用这些数据来初始化.bss段中的变量.stack段:为C系统堆栈分配存储地址。这个存储地址用来传递变量和局部存储.sysmem段:为动态存储分配保留空间。这个空间被malloc、calloc和realloc函数调用。如果C程序不使用这些函数,编译器就不会创建.sysmem段.cio段:支持C I/O。这个空间用来作为标签为_CIOBUF_缓冲区。当任何类型的C I/O被执行(如printf和scanf),就会建立(a) C程序:在c代码中访问汇编函数/*声明汇编函数*/extern int asmfunc(int,int *);int gv

14、ar ;/*定义全局变量*/main() int i; i=asmfunc(i,&gvar) ;/*调用函数*/(b)汇编程序:_asmfunc: ADD *AR0,T0,T0 ; T0+gvar=i,i=T0 RET;访问.bss段或.usect段中没有初始化的变量:使用.bss或.usect指令来定义变量使用.global指令来定义为外部变量在汇编语言中的变量前加下划线“_”在C代码中声明变量为外部变量并正常地访问它从程序中访问定义在.bss段的变量(a)C程序:在c代码中访问汇编变量extern int var ; /* 外部变量 */var = 1; /* 使用变量 */(b)汇编语言

15、程序:.bss var,1 ;定义变量.gloabal bar ;声明变量为外部变量当变量不是被存放在.bss段时,比如用汇编语言定义的查找表并不希望放在RAM中,这时应该定义一个指向该变量的指针并从C语言中对其间接访问。首先,要定义变量其次,声明一个指向该变量起始地址的全局指针,这个变量就可以被链接到存储空间的任何地方最后,在程序中访问时,必须先声明该对象为extern型,并且不能在其名称前面加下划线,然后就可以正常访问它了 在C代码中访问没有在 .bss段中声明的变量。(a)C程序:在C代码中访问汇编语言常数extern float sine ; /*这就是对象*/float *sine_

16、p=sine; /*声明指针指向它*/f=sine_p2; /*正常访问该对象*/(b)汇编程序:.global _sine;声明变量为外部变量.sect ”sine_tab” ;创建单独的段_sine: ;表从此开始.float 0.0.float 0.015987.float 0.022145 (a)语言程序:extern int table_size;/* 声明table_size为外部参数*/#define TABLE_SIZE (int)(&table_size) For(i=0;iTABLE_SIZE;+i)/*象使用普通符号一样使用该常数*/(b) 汇编语言程序:嵌入汇编语言_t

17、able_size .set 10000 ;定义常量.global _table_size ;定义该常量为全局常量#pragma CODE_SECTION(func_name, ”section_name”)作用:把C函数func_name的代码配置到由section_name定义的程序段中#pragma DATA_SECTION(var_name,”section_name”)作用: var_name是包含在C函数内的变量名称,该指令将数据var_name配置到由section_name定义的数据段。 .INTM位*如果INTM0,C55x使能所有可屏蔽中断*如果INTM1,C55x禁止所有

18、可屏蔽中断*使用INTM位需要注意的要点:INTM位能够全局使能或禁止可屏蔽中断,但是它对不可屏蔽中断无效。在使用INTM位时,要使用状态位清零和置位指令来修改INTM位。其它能影响INTM位的,只有软件中断指令和软件置位指令。 * CPU响应中断请求时,自动保存INTM位。特别地,CPU把ST1_55保存到数据堆栈时,INTM位也被保存起来。 *执行中断服务子程序(ISR)之前,CPU自动置位INTM位,禁止所有的可屏蔽中断。ISR可以通过清零INTM位,来重新开放可屏蔽中断。 *中断返回指令,从数据堆栈恢复INTM位的值。 *在调试器实时仿真模式下,CPU暂停时,忽略INTM位,CPU只处

19、理临界时间中断。 二LED闪烁(延时函数显示)#include #include #include #include void delay() int i,j; for(i = 0;i 0x00ff;i+) for(j = 0;j 0xFFFF;j+);void main() CSL_init(); PLL_setFreq(1, 0xF, 0, 1, 3, 3, 0); GPIO_RSET(IODIR,0x80); for(;) GPIO_RSET(IODATA,0x0f); CHIP_FSET(ST1_55,XF,0); delay(); GPIO_RSET(IODATA,0x8f); CH

20、IP_FSET(ST1_55,XF,1); delay(); 三LED灯的闪烁(定时器做延时)1)中断初始化函数: Extern void VECSTAR(void)Void INTconfig() IRQ_setVecs(Uint32)(&VECSTART); / 修改IVPH/IVPD Old_intm= IRQ_globalDisable(); /禁止可屏蔽中断源 EventId0 = IRQ_EVT_INT0;/获取外部中断ID号 IRQ_clear(EventId0); /* 清除中断标志位 */ IRQ_plug(EventId0,&int1); /为外部中断设置服务程序 IRQ_

21、enable(EventId0); /* 中断使能 */ IRQ_globalEnable();/* 全局中断使能 */ 对于int1有一个中断服务程序 interrupt void int1() INTconfig();调用Timer Counter Registers (CNT14)The timer counter register (Figure 24) is a 64-bit wide register consisting of four 16-bit count registers (Figure 25): CNT1, CNT2, CNT3, and CNT4.#_In the

22、general-purpose timer mode, the 64-bit timer counter increments when it is enabled to count. The timer counter register is cleared to 0 at reset.# _In the enabled continuous mode (ENAMODE = 10), the 64-bit timer count-er increments until the value in the timer counter matches the timer period.The ti

23、mer counter register resets to 0 and continues to increment on the next clock after the value in the timer counter matches the timer period.#_In the dual 32-bit timers mode, the 64-bit timer counter register is divided into two pairs of 16-bit registers: CNT2:CNT1 and CNT4:CNT3. These two register p

24、airs can be configured as chained or unchained。代码:定义段在汇编中.sect .vectors2) 定时器控制灯的闪烁:#include #include #include #include #include #include GPT_Config MyGptConfig = 0, /Emulation management register0, /GPIO interrupt control register0, /GPIO enable register0, /GPIO direction register0, /GPIO data regi

25、ster0xB9EF, / 0x05F5, /0, /0, /GPT_GPTCTL1_RMK( / GPT_GPTCTL1_TIEN_NOT_GATED,/Timer没选通 GPT_GPTCTL1_CLKSRC_VBUS,/外部时钟源驱动TINP引脚 GPT_GPTCTL1_ENAMODE_CONTINUOUS,/定时器不断激活模式 GPT_GPTCTL1_PWID_INACTIVE_1CYCLE,/定时器到达周期后TSTAT停止计数时钟 GPT_GPTCTL1_CP_CLOCK_MODE, /时钟模式 GPT_GPTCTL1_INVIN_DONT_INVERT_OUTPUT,/不反相TINP

26、驱动定时器 GPT_GPTCTL1_INVOUT_DONT_INVERT_OUTPUT/不反相的TSTAT驱动TOUT ), GPT_GPTCTL2_RMK( / GPT_GPTCTL2_TIEN_NOT_GATED, GPT_GPTCTL2_CLKSRC_VBUS, GPT_GPTCTL2_ENAMODE_CONTINUOUS, GPT_GPTCTL2_PWID_INACTIVE_1CYCLE, GPT_GPTCTL2_CP_CLOCK_MODE, GPT_GPTCTL2_INVIN_DONT_INVERT_OUTPUT, GPT_GPTCTL2_INVOUT_DONT_INVERT_OUT

27、PUT ), GPT_GPTGCTL1_RMK( /全局控制寄存器 GPT_GPTGCTL1_TDDR34_DEFAULT, GPT_GPTGCTL1_PSC34_DEFAULT, GPT_GPTGCTL1_TIMMODE_DEFAULT,/64比特普通模式 GPT_GPTGCTL1_TIM34RS_NOT_IN_RESET, GPT_GPTGCTL1_TIM12RS_NOT_IN_RESET ) ;interrupt void Timer0Isr(void);extern void VECSTART(void);GPT_Handle hGpt;Uint16 EventId0; / 定时器0所

28、对应的事件ID号/ 通过定义宏来控制两个外围存储器映射的寄存器,从而实现对GPIO口的控制#define GPIODIR (*(volatile ioport Uint16*)(0x3400)#define GPIODATA (*(volatile ioport Uint16*)(0x3401)void main(void) CSL_init(); PLL_setFreq(1, 0xF, 0, 1, 3, 3, 0); IRQ_setVecs(Uint32)(&VECSTART); /设置IVPH/IVPD 开始中断向量表 IRQ_globalDisable(); /*禁止中断 */ hGpt

29、 =GPT_open(GPT_DEV0, GPT_OPEN_RESET); EventId0 = GPT_getEventId(hGpt); IRQ_clear(EventId0); /*清除中断溢出标志 */ IRQ_plug(EventId0,&Timer0Isr); GPT_config(hGpt, &MyGptConfig); IRQ_enable(EventId0); /* 中断使能 */ IRQ_globalEnable();/* 使能所有标志性中断*/ GPT_start(hGpt); /* 开始定时器*/ GPIODIR = 0x80; for(;) if(LEDMARK=0)

30、 /CHIP_FSET(ST1_55,XF,0);/* 关闭指示灯D5 */ /LEDMARK = 1; /*在此行设置短点*/ / /else / /CHIP_FSET(ST1_55,XF,1);/* 打开指示灯D5 */ /LEDMARK = 0;/*在此行设置短点*/ / /* 进入系统循环,等待中断t */ interrupt void Timer0Isr(void) /*定时器0的中断程序*/if(LEDMARK=0) GPIODATA = 0x00;/* 关闭指示灯D5 */ LEDMARK = 1; /*在此行设置短点*/ else GPIODATA = 0x80;/* 打开指示灯D5 */ LEDMARK = 0;/*在此行设置短点*/ /GP

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1