DSP复习资料

合集下载

DSP复习资料

DSP复习资料
6、片内ROM里面包含引导装载程序(Bootloader)
7、简答SARAM和DARAM的联系和区别
区别前者1个机器周期内只能被访问1次后者1个机器周期内能被访问2次,可同时进行读操作和写操作。
联系都可当数据存储器和程序存储器使用
第三章
1、数的定标是指定点DSP芯片处理小数时,由程序员来确定一“小数点”的位置。
SXM的中文名称是符号扩展模式位;当SXM=1时,设置符号扩展模式,即高24位扩展为符号位。用指令表示SSBXSXM;当SXM=0时,设置符号不扩展模式,即高24位用0填充;用指令表示RSBXSXM
4、DSP芯片的乘法运算,常需要用到舍入处理方法书上p47
方法是在低16位的最高位加1,然后将低16位清除,将高16位作为结果。(将该数加0.5,之后再将小数部分去除,即舍入处理方法,也称上取整。)
{*SWWSR=0X2000

(3)P108为什么要用volatile类型的数据?
答:对程序进行编译时,代码优化器会避免存储区访问而删除一些语句,为了保留这些语句,可以使用volatile关键字可确保编译器不会对这些变量进行优化。
3、P112申明一个函数是中断函数,要使用中断关键字interrupt(怎么考??)
5、简答C语言程序代码优化有几种方法?其中并行指令属于那种优化方法?并举一例并行指令
算法优化编译优化函数优化属于编译优化ST||LD特点:单字单周期
第六章
1、小题DSP的内部存储器类型可分为随机存取存储器(RAM)和只读存储器(ROM)。其中RAM又可以分为两种类型:单寻址RAM(SARAM)和双寻址RAM(DARAM)。
中断程序没有参数传递,即使说明,也将被忽略
4、小题pragma指令告诉编译器如何处理函数。常用的pragma指令有

DSP复习资料

DSP复习资料

DSP复习资料1、DSP 芯⽚的结构?答:DSP 是改进的哈佛结构 (80C51是哈佛结构)。

冯.诺依曼结构与哈佛结构的区别是地址空间和数据空间分开与否。

冯诺依曼结构数据空间和地址空间不分开,哈佛结构数据空间和地址空间是分开的。

哈佛结构的特点:使⽤两个独⽴的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存;使⽤独⽴的两条总线,分别作为CPU 与每个存储器之间的专⽤通信路径,⽽这两条总线之间毫⽆关联。

改进的哈佛结构,其结构特点为:使⽤两个独⽴的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存,以便实现并⾏处理;具有⼀条独⽴的地址总线和⼀条独⽴的数据总线,利⽤公⽤地址总线访问两个存储模块(程序存储模块和数据存储模块),公⽤数据总线则被⽤来完成程序存储模块或数据存储模块与CPU 之间的数据传输,改进的哈佛结构在哈佛结构的基础上⼜加以改进,即使得程序代码和数据存储空间之间也可以进⾏数据的传送。

TMS320LF2407A 采⽤改进的哈佛结构,芯⽚内部具有六条16位总线,即程序地址总线(PAB )、数据读地址总线(DRAB )、数据写地址总线(DWAB )、程序读总线(PRDB )、数据读总线(DRDB )、数据写总线(DWEB ),其程序存储器总线和数据存储器总线相互独⽴,⽀持并⾏的程序和操作数寻址,因此CPU 的读/写可在同⼀周期内进⾏,这种⾼速运算能⼒使⾃适应控制、卡尔曼滤波、神经⽹络、遗传算法等复杂控制算法得以实现。

结构⽰意图如下:2、什么是流⽔线技术?DSP 是不是具有流⽔线技术(pipeline) ?答:流⽔线技术是将各指令的各个步骤重叠起来执⾏,⽽不是⼀条指令执⾏完成之后,才开始执⾏下⼀条指令。

计算机在执⾏⼀条指令时,总要经过取指、译码、取数、执⾏运算等步骤,需要若⼲个指令周期才能完成。

流⽔线技术是将各指令的各个步骤重叠起来执⾏,⽽不是⼀条指令执⾏完成之后,才开始执⾏下⼀条指令。

DSP复习资料

DSP复习资料

DSP 复习资料 第一章:● 数字信号处理系统组成:x (t ) x(n ) y (n) y(t )● DSP 芯片的特点:(1)采用哈佛结构(2)采用多总线结构(3)采用流水线结构(4)配有专用的硬件乘法——累加器(5)具有特殊的寻址方式和指令(6)支持并行指令操作(7)硬件配置强,具有较强的接口功能(8)支持多处理器结构● DSPD 的分类:(1)按分类标准的不同,DSP 分为定点DSP 芯片和浮点DSP 芯片(2)按照字长大小的不同,DSP 芯片划分为16位,24位,32位(3)按照生产厂家的不同,有TI 公司的TMS320系列,ADI 公司的Blackfin ,SHARC ,TigerSHARC 系列,飞思卡尔公司的MSC 系列● TMS320C55X 芯片的组成:CPU,存储空间,片内外设● C55XCPU 的内部总线结构:(1)程序地址总线(PAB):1组,24位 (2)程序数据总线(PB):1组,32位(3)数据读地址总线(BAB,CAB,DAB):3组,24位(4)数据读总线(BB ,CB,DB ):3组,16位(5)数据写地址总线(EAB,FAB):2组,24位(6)数据写总线(EB,FB):2组,16位C55X的CPU包含:指令缓冲单元(I单元),程序流单元(P单元),地址--数据流单元(A单元)数据运算单元(D单元),存储器接口单元(M 单元)和内部数据总线和数据总线●C55X的CPU包含几个累加器:AC0--AC3每个累加器分为:低字节(ACxL),高字节(ACxH)和8个保护位(ACxG)39~32 31~16 15~0AC0AC1AC2AC3●C54的兼容模式:(1)C54x兼容模式c54xcm_on和c54cm_off指令来自C54x的代码(2)CPL模式影响直接寻址方式(3)ARMS 模式影响间接寻址模式●C55x的寻址方式:(1)绝对寻址方式:通过在指令中指定一个常数地址完成寻址。

DSP 复习资料

DSP 复习资料

1、DSP与通用CPU的主要差异2、TMS320C6000系列DSP的主要特征答案:1.采用哈弗架构:数据和程序存储空间之间相互独立,数据和程序总线分开,能够同时取操作数和指令。

内存访问速度快。

2.流水线技术:在一个周期同时进行多条指令,取指令和执行指令同时进行,减少指令执行时间。

3.多总线结构:可以在一个周期内多次访问程序和数据空间。

4.多处理单元:同时进行运算,大大提高DSP并行树立能力。

5.采用硬件乘法器:节省运算时间。

6.寻址方式:地址的计算由专门的硬件完成,无需额外时间。

7.支持多处理结构。

3、TMS320C6000系列存储系统中的Cache作用答案:作为高速缓存使用,并分为LEVEL1和LEVEL2两级,程序Cache和数据Cache共享二级存储器,以及Cache是程序缓存,只能做缓存,不能设置为映射存储器,也没有冻结和直通模式。

4、TMS320C6000的C语言开发调试流程答案:新建工程—向工程项目文件中添加文件—编写代码—编译、链接、生成.OUT文件—下载文件、执行程序(使用断点、设观察窗口)5、CCS中的Simulator与Emulator的差异答案:Simulator:软件仿真,在CCS软件上进行仿真Emulator:硬件仿真,现在到芯片上进行仿真6、CCS中可以导入系统的数据文件格式(答案不太准确,可以自己查查)答案:1.文件后缀名必须是.OUT;2.第一行为 1651 1 82000000 0 0x40000首地址个数7、CCS中查看图像数据的方法答案:View——Graph——Image——Color space:选择YUV 或RGB——start address 写入三个数据的起始地址——lines per line 改为512——pixles per line 改为512——点击确定即可8、CCS查看程序运行时钟数的设置方法9、运行次数统计与优化概念Profile ——选择setup——点击右边出现的方框中的custom,将cpu、system、cycle选中,并点击上方的时钟标志——Profile ——选择viewer ,然后将.out文件下载,将disabled里的函数全部拖进Enabled 里面,执行程序,运行结束后即可看到个函数运行时间。

DSP复习资料

DSP复习资料

DSP复习资料1、什么是数字信号处理器(DSP)?DSP 可以分为哪两类?a、数字信号处理器是一种专门用于实现各种数字信号处理算法的微处理器,通常可分为专用DSP和通用DSP两类。

b、用于实现某些特定数字信号处理功能的DSP 属于专用DSP。

什么是DSP?DSP:Digtal Signal Processing 数字信号处理技术典型的微处理器系统根据CPU特点,可以分为:1)通用单片机(Micro-controller) 8/16bit优点:成本低、体积小。

缺点:运算与扩展能力较弱。

编程:汇编、C语言。

2)PC及其兼容机(Micro-processor)缺点:成本高、体积大、实时性差。

优点:运算与扩展能力强,软件资源丰富。

编程:汇编及多种高级语言。

3)DSP(Digital Signal Processor)16/32bit特点:运算能力相当强、实时性、体积小、成本较低、功耗较低编程:汇编、C、C++。

4)专用微处理器特点:使用简单,灵活性差,主要用于一些批量生产的产品。

如家用电器的智能控制、工业控制。

DSP: Digtal Signal Processor 数字信号处理器TI公司从80代初推出了全球第一款“数字信号处理器”TMS320C010,从此引发了一场“数字信号处理”革命。

我们现在所说的DSP,如果没有特殊说明,一般均指“数字信号处理器”。

2、DSP 芯片的主要特点有哪些?DSP 从结构上进行了优化,使其更适合于哪类运算,从而可以高速实现多种不同的数字信号处理算法?DSP的特点:在一个指令周期内可完成一次乘法和一次加法运算程序和数据空间分开,可以同时访问指令空间和数据空间片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问具有低开销或无开销循环及跳转的硬件支持快速的中断处理和硬件I/O支持具有在单周期内操作的多个硬件地址产生器可以并行执行多个操作支持流水线操作,使取指令、译码、取操作数和执行指令等可以重叠执行。

DSP复习资料

DSP复习资料
应用。 2. 什么是流水线作业?P1
答:流水线作业就是使取址、译码、取操作数和执行指令等操作重叠执行。 3. 什么是哈佛总线?P1
答:哈佛总线就是程序空间和数据空间分开,分别由各自的地址总线和数据总线; 它可以同时完成获取指令和数据读取操作。 4. 2812 的 SPI 和 SCI 接口的主要异同?
EALLOW; PieVectTable.TINT0=&cpu_timer0_isr; GpioMuxRegs.GPAMUX.all=0x0000; GpioMuxRegs.GPADIR.all|=0x0001; EDIS; InitCpuTimers(); ConfigCpuTIMER(&CpuTimer0,100,2000000); StartCpuTimer0; IER|=M_INT1; PieCtrlRegs.PIEIER1.bit.INTx7=1; EINT; ERTM; for(;;) { GpioDataRegs,GPATOGGLE.bit.GPIOA0=1; CpuTimer0.InterruptCount==CpuTimer0.InterruptCount ; } } interrupt void cpu_timer0_isr(void) { CpuTimer0.InterruptCount++; PieCtrlRegs.PIEACK.all= PIEACK_GROUP1; } 15. 拨码键盘地址 0x88000,LED 显示器地址 0x88001,编程实现:拨码为 1,相应灯亮;反 之则灭。 答:#include “DSP2812x_Device.h” #include “DSP2812x_Examples.h” void InitsysCtrl(void); void main(void) { InitsysCtrl(); DINT; IER=0x0000; IFR=0x0000; unsigned int temp; while(1) { temp=*(int*)0x88000; *(int*)0x88001=temp; } } void InitsysCtrl(void) { EALLOW;

DSP复习资料

DSP复习资料

第一章概述、第三章存储空间第四章DSP系统设计入门第五章DSP的时钟与系统控制Chap 6 中断与中断控制第7章通用输入输出GPIO总结第8章DSP的捕获单元第9章:增强型脉宽调制器ePWM第10章模数转换器(ADC实验代码:实验一:#include"DSP28x_Project.h"#include"LED_TM1638.h"interrupt void cpu_timer0_isr(void); //timer0 interrupt void myXint1_isr(void); //xint1// interrupt void EPWM4Int_isr(void); //EPWM4 // interrupt void Ecap1Int_isr(void); //ECAP1 // interrupt void MyAdcInt1_isr(void); //ADCINT1//初始化变量int hourH =0 ;int hourL =0;int minH = 0;int minL = 0;int secH = 0;int secL =0; int TenmS =0;int HorseType = 0;//跑马灯的类型int keyDLTime = 0;//设置去抖动int LedFlashCtr = 0 ;//用于数码管的显示int NewLedEn = 0;int Begin =1;void HorseRunning(int16 no);#define Led0Blink() GpioDataRegs.GPACLEAR.bit.GPIO0 = 1 #define Led1Blink() GpioDataRegs.GPACLEAR.bit.GPIO1 = 1 #define Led2Blink() GpioDataRegs.GPACLEAR.bit.GPIO2 = 1 #define Led3Blink() GpioDataRegs.GPACLEAR.bit.GPIO3 = 1 #define Led0Blank() GpioDataRegs.GPASET.bit.GPIO0 = 1 #define Led1Blank() GpioDataRegs.GPASET.bit.GPIO1 = 1 #define Led2Blank() GpioDataRegs.GPASET.bit.GPIO2 = 1 #define Led3Blank() GpioDataRegs.GPASET.bit.GPIO3 = 1void Xint1_Init(){EALLOW;GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;GpioCtrlRegs.GPADIR.bit.GPIO12 = 0;GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12;XIntruptRegs.XINT1CR.bit.POLARITY = 0;//下降沿XIntruptRegs.XINT1CR.bit.ENABLE = 1;EDIS;}void HorseIO_Init(){EALLOW;GpioDataRegs.GPASET.bit.GPIO0 = 1;GpioDataRegs.GPASET.bit.GPIO1 = 1;GpioDataRegs.GPASET.bit.GPIO2 = 1;GpioDataRegs.GPASET.bit.GPIO3 = 1;GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;EDIS;}void DelaymS(int tm){int i;unsigned int j;for(i = 0;i < tm ;i++){j = 60000;while(j != 0)j--;}}void main(void){InitSysCtrl(); //初始化系统时钟,选择内部晶振1,10MHZ,12倍频,2分频,初始化外设时钟,低速外设,4分频DINT; //关总中断IER = 0x0000; //关CPU中断使能IFR = 0x0000; //清CPU中断标志InitPieCtrl(); //关pie中断InitPieVectTable(); //清中断向量表EALLOW; //配置中断向量表PieVectTable.TINT0 = &cpu_timer0_isr;PieVectTable.XINT1 = &myXint1_isr;// PieVectTable.ECAP1_INT = &Ecap1Int_isr;// PieVectTable.EPWM4_INT = &EPWM4Int_isr;// PieVectTable.ADCINT1 = &MyAdcInt1_isr;PieCtrlRegs.PIEIER1.bit.INTx7 = 1;PieCtrlRegs.PIEIER1.bit.INTx4 = 1;IER |= 1;EDIS;// MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);InitFlash();HorseIO_Init();Xint1_Init();TM1638_Init(); //初始化LEDInitCpuTimers(); // 初始化定时器ConfigCpuTimer(&CpuTimer0, 60, 10000);//设置时钟的响应时间为0.01sEALLOW;CpuTimer0Regs.TCR.bit.TRB = 1;CpuTimer0Regs.TCR.bit.TSS = 0;EDIS;EINT;//中断总使能ERTM;while(1){//if(NewLedEn == 0){LED_Show(1,(TenmS % 10),0); LED_Show(2,(TenmS / 10),0); LED_Show(3,secL,1);LED_Show(4,secH,0);LED_Show(5,minL,1);LED_Show(6,minH,0);LED_Show(7,hourL,1);LED_Show(8,hourH,0);NewLedEn = 1;}}}void HorseRunning(int no){if(no & 0x1)Led0Blink();else Led0Blank();if(no & 0x2)Led1Blink();else Led1Blank();if(no & 0x4)Led2Blink();else Led2Blank();if(no & 0x8)Led3Blink();else Led3Blank();}void HorseRunning1(int no){if(no & 0x1) Led0Blink();else Led0Blank();if(no & 0x2){Led0Blink();Led1Blink();} else{Led0Blank();Led1Blank();} if(no & 0x4){Led2Blink();Led1Blink();}else{Led2Blank();Led1Blank();}if(no & 0x8){Led3Blink();Led2Blink();}else{Led3Blank();Led2Blank();}}interrupt void myXint1_isr(void){Begin = 1;if((HorseType == 0)&&(keyDLTime>20)){HorseType = 1; keyDLTime = 0;}else if((HorseType == 1)&&(keyDLTime>20)){HorseType = 0; keyDLTime = 0;}PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;//手动清楚这里的中断标志 all=0x0001也行EALLOW;CpuTimer0Regs.TCR.bit.TRB = 1;CpuTimer0Regs.TCR.bit.TSS = 0;EDIS;}interrupt void cpu_timer0_isr(void) {keyDLTime++;LedFlashCtr++;if((LedFlashCtr & 0xf)==0) NewLedEn = 0;if(Begin == 1){TenmS ++;if(TenmS == 100){TenmS = 0; secL++;}if(secL == 10){secL = 0; secH++;}if(secH == 6){secH = 0; minL++;}if(minL == 10){minL = 0; minH++;}if(minH == 6){minH = 0; hourL++;}if(hourH == 2 && hourL ==4){hourH = 0; hourL =0;}else if(hourL == 10){hourL = 0; hourH++;}}if(HorseType == 0 && Begin == 1){HorseRunning((LedFlashCtr&0xf0)>>4);}else if(HorseType == 1 && Begin ==1){HorseRunning1((LedFlashCtr&0xf0)>>4);}PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;}实验二:#include"DSP28x_Project.h"#include"LED_TM1638.h"#include"DSP2802x_ECap.h"// interrupt void EPWM4Int_isr(void); //EPWM4 interrupt void Ecap1Int_isr(void); //ECAP1//初始化变量int t1 = 0; int t2 = 0;int t3 = 0;int t4 = 0;int DutyOnTime = 0;int DutyOffTime = 0;int Period = 0;float rate = 0;void Gpio_Init(void);void InitPWM4(void);void InitCap1(void);void DelaymS(int tm);void DelaymS(int tm){int i;unsigned int j;for(i = 0;i < tm ;i++){j = 60000;while(j != 0)j--;}}void InitCap1(void){ECap1Regs.ECEINT.all = 0x0000;//中断向量初始化 ECap1Regs.ECCLR.all = 0xFFFF;ECap1Regs.ECCTL1.bit.PRESCALE = 0;//1分频ECap1Regs.ECCTL1.bit.CAP1POL = 0;//上下沿均触发 ECap1Regs.ECCTL1.bit.CAP2POL = 1;ECap1Regs.ECCTL1.bit.CAP3POL = 0;ECap1Regs.ECCTL1.bit.CAP4POL = 1;ECap1Regs.ECCTL1.bit.CTRRST1 = 1;//差分模式ECap1Regs.ECCTL1.bit.CTRRST2 = 1;ECap1Regs.ECCTL1.bit.CTRRST3 = 1;ECap1Regs.ECCTL1.bit.CTRRST4 = 1;ECap1Regs.ECCTL1.bit.CAPLDEN = 1;//允许装载ECap1Regs.ECCTL2.bit.CAP_APWM = 0;//用于捕获ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0;//连续ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0;ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;//自由运行ECap1Regs.ECEINT.bit.CEVT4 = 1;//设置中断}void InitPWM4(void){int PWMPRD,DeadTime;//周期和死区时间EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;//设置epwm同步暂停 EDIS;PWMPRD = 3750;DeadTime = 180;EPwm4Regs.TBPRD = PWMPRD;EPwm4Regs.TBPHS.half.TBPHS = 0;//忽略同步事件EPwm4Regs.TBCTL.bit.CLKDIV = 0;//预分频为1EPwm4Regs.TBCTL.bit.HSPCLKDIV = 0;EPwm4Regs.TBCTL.bit.PRDLD = 0;//使用映射寄存器EPwm4Regs.TBCTL.bit.CTRMODE = 2;//对称模式EPwm4Regs.TBCTL.bit.PHSEN = 0;//不从时基相位寄存器进行装载 EPwm4Regs.TBCTL.bit.SYNCOSEL = 1;//EPwm4Regs.CMPCTL.bit.SHDWAMODE = 0;//使用映射寄存器EPwm4Regs.CMPCTL.bit.SHDWBMODE = 0;EPwm4Regs.CMPCTL.bit.LOADAMODE = 2;//计数器=0或T时候装载 EPwm4Regs.CMPCTL.bit.LOADBMODE = 2;EPwm4Regs.CMPA.half.CMPA = (PWMPRD / 2);//脉冲占比50%EPwm4Regs.CMPB = (PWMPRD / 2);EPwm4Regs.AQCTLA.bit.CAU = 2;//配置动作EPwm4Regs.AQCTLA.bit.CAD = 1;EPwm4Regs.AQCTLA.bit.CBU = 0;EPwm4Regs.AQCTLA.bit.CBD = 0;EPwm4Regs.DBCTL.bit.HALFCYCLE = 0;//全周期EPwm4Regs.DBCTL.bit.IN_MODE = 0;//A是源EPwm4Regs.DBCTL.bit.POLSEL = 2;EPwm4Regs.DBCTL.bit.OUT_MODE = 3;EPwm4Regs.DBFED = DeadTime;EPwm4Regs.DBRED = DeadTime;EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;//设置epwm同步暂停EDIS;}void Gpio_Init(){EALLOW;GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; //设置为输出GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0;//上拉GpioCtrlRegs.GPAPUD.bit.GPIO6 = 1;GpioCtrlRegs.GPAPUD.bit.GPIO7 = 1;GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 3;//设置外设功能GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 1;GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 1;GpioDataRegs.GPACLEAR.bit.GPIO5 =1;//初始化数值GpioDataRegs.GPACLEAR.bit.GPIO6 =1;GpioDataRegs.GPACLEAR.bit.GPIO7 =1;EDIS;}void main(void){InitSysCtrl(); //初始化系统时钟,选择内部晶振1,10MHZ,12倍频,2分频,初始化外设时钟,低速外设,4分频DINT; //关总中断IER = 0x0000; //关CPU中断使能IFR = 0x0000; //清CPU中断标志InitPieCtrl(); //关pie中断InitPieVectTable(); //清中断向量表EALLOW; //配置中断向量表PieVectTable.ECAP1_INT = &Ecap1Int_isr;PieCtrlRegs.PIEIER4.bit.INTx1 = 1;IER |= 8;EDIS;// MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);InitFlash();Gpio_Init();InitPWM4();InitCap1();TM1638_Init(); //初始化LEDEINT;//中断总使能ERTM;while(1){DelaymS(2000);LED_Show(1,(DutyOnTime % 10),0);LED_Show(2,((DutyOnTime / 10) % 10),0);LED_Show(3,((DutyOnTime / 100) % 10),1);LED_Show(4,((DutyOnTime / 1000) ),0);LED_Show(5,(Period % 10),0);LED_Show(6,((Period / 10) % 10),0);LED_Show(7,((Period / 100) % 10),1);LED_Show(8,((Period / 1000) ),0);DelaymS(2000);}}interrupt void Ecap1Int_isr(void){t1 = ECap1Regs.CAP2;t2 = ECap1Regs.CAP3;t3 = ECap1Regs.CAP4;t4 = ECap1Regs.CAP1;Period = t1 + t2;DutyOnTime = t1;DutyOffTime = t2;rate = DutyOnTime/DutyOffTime;ECap1Regs.ECCLR.bit.CEVT4 = 1;ECap1Regs.ECCLR.bit.INT = 1;PieCtrlRegs.PIEACK.all = 8;实验三#include"DSP28x_Project.h"#include"LED_TM1638.h"#include"DSP2802x_Adc.h"#define ADC_usDELAY 1000Linterrupt void MyAdcInt1_isr(void); //ADCINT1void Init_Adc(void);void InitPWM4(void);void DelaymS(int tm);//初始化变量int High = 0;int Low = 0;int Derta = 0;float high = 0; float low = 0;float derta = 0;int ADCSampT = 12;void Init_Adc(void){extern void DSP28x_usDelay(Uint32 Count);EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;(*Device_cal)();EDIS;DELAY_US(ADC_usDELAY);EALLOW;AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // Power ADC BGAdcRegs.ADCCTL1.bit.ADCREFPWD = 1; // Power referenceAdcRegs.ADCCTL1.bit.ADCPWDN = 1; // Power ADCAdcRegs.ADCCTL1.bit.ADCENABLE = 1; // Enable ADCAdcRegs.ADCCTL1.bit.ADCREFSEL = 0; // Select interal BG使用内部参考电压EDIS;DELAY_US(ADC_usDELAY);AdcOffsetSelfCal();//自矫正DELAY_US(ADC_usDELAY);EALLOW;AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;AdcRegs.INTSEL1N2.bit.INT1CONT = 0;//不连续中断AdcRegs.INTSEL1N2.bit.INT1E = 1;//中断使能AdcRegs.INTSEL1N2.bit.INT1SEL = 7;//7次转换后结束AdcRegs.ADCSAMPLEMODE.all = 0;//顺序采样AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC3CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC7CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC0CTL.bit.CHSEL = 1;//前四个通道实现对ADA1过采样 AdcRegs.ADCSOC1CTL.bit.CHSEL = 1;AdcRegs.ADCSOC2CTL.bit.CHSEL = 1;AdcRegs.ADCSOC3CTL.bit.CHSEL = 1;AdcRegs.ADCSOC4CTL.bit.CHSEL = 9;//后四个通道实现对ADB1过采样 AdcRegs.ADCSOC5CTL.bit.CHSEL = 9;AdcRegs.ADCSOC6CTL.bit.CHSEL = 9;AdcRegs.ADCSOC7CTL.bit.CHSEL = 9;AdcRegs.ADCSOC0CTL.bit.ACQPS = ADCSampT;//设置采样周期AdcRegs.ADCSOC1CTL.bit.ACQPS = ADCSampT;AdcRegs.ADCSOC2CTL.bit.ACQPS = ADCSampT;AdcRegs.ADCSOC3CTL.bit.ACQPS = ADCSampT;AdcRegs.ADCSOC4CTL.bit.ACQPS = ADCSampT;AdcRegs.ADCSOC5CTL.bit.ACQPS = ADCSampT;AdcRegs.ADCSOC6CTL.bit.ACQPS = ADCSampT;AdcRegs.ADCSOC7CTL.bit.ACQPS = ADCSampT;EDIS;}void InitPWM4(void){int PWMPRD,DeadTime;//周期和死区时间EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;//设置epwm同步暂停EDIS;PWMPRD = 3000;DeadTime = 120;EPwm4Regs.TBPRD = PWMPRD;EPwm4Regs.TBPHS.half.TBPHS = 0;//忽略同步事件EPwm4Regs.TBCTL.bit.CLKDIV = 0;//预分频为1EPwm4Regs.TBCTL.bit.HSPCLKDIV = 0;EPwm4Regs.TBCTL.bit.PRDLD = 0;//使用映射寄存器EPwm4Regs.TBCTL.bit.CTRMODE = 2;//对称模式EPwm4Regs.TBCTL.bit.PHSEN = 0;//不从时基相位寄存器进行装载 EPwm4Regs.TBCTL.bit.SYNCOSEL = 1;//EPwm4Regs.CMPCTL.bit.SHDWAMODE = 0;//使用映射寄存器EPwm4Regs.CMPCTL.bit.SHDWBMODE = 0;EPwm4Regs.CMPCTL.bit.LOADAMODE = 2;//计数器=0或T时候装载 EPwm4Regs.CMPCTL.bit.LOADBMODE = 2;EPwm4Regs.CMPA.half.CMPA = (PWMPRD / 2);//脉冲占比50%EPwm4Regs.CMPB = (PWMPRD / 2);EPwm4Regs.AQCTLA.bit.CAU = 2;//配置动作EPwm4Regs.AQCTLA.bit.CAD = 1;EPwm4Regs.AQCTLA.bit.CBU = 0;EPwm4Regs.AQCTLA.bit.CBD = 0;EPwm4Regs.DBCTL.bit.HALFCYCLE = 0;//全周期EPwm4Regs.DBCTL.bit.IN_MODE = 0;//A是源EPwm4Regs.DBCTL.bit.POLSEL = 2;EPwm4Regs.DBCTL.bit.OUT_MODE = 3;EPwm4Regs.DBFED = DeadTime;EPwm4Regs.DBRED = DeadTime;EPwm4Regs.ETSEL.bit.SOCAEN = 1;EPwm4Regs.ETSEL.bit.SOCASEL = 1;EPwm4Regs.ETPS.bit.SOCAPRD = 1;EPwm4Regs.ETCLR.bit.SOCA = 1;EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;//设置epwm同步暂停 EDIS;}void DelaymS(int tm){int i;unsigned int j;for(i = 0;i < tm ;i++){j = 60000;while(j != 0)j--;}}void main(void){High = AdcResult.ADCRESULT0 + AdcResult.ADCRESULT1;High += AdcResult.ADCRESULT2;InitSysCtrl(); //初始化系统时钟,选择内部晶振1,10MHZ,12倍频,2分频,初始化外设时钟,低速外设,4分频DINT; //关总中断IER = 0x0000; //关CPU中断使能IFR = 0x0000; //清CPU中断标志InitPieCtrl(); //关pie中断InitPieVectTable(); //清中断向量表EALLOW; //配置中断向量表PieVectTable.rsvd10_1 = &MyAdcInt1_isr;PieCtrlRegs.PIEIER10.bit.INTx1 = 1;IER |= 0x0200;EDIS;// MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); InitFlash();TM1638_Init(); //初始化LEDInit_Adc();InitPWM4();EINT;//中断总使能ERTM;while(1){}}interrupt void MyAdcInt1_isr(void) {High = AdcResult.ADCRESULT0 + AdcResult.ADCRESULT1;High += AdcResult.ADCRESULT2 + AdcResult.ADCRESULT3;Low = AdcResult.ADCRESULT4 + AdcResult.ADCRESULT5;Low += AdcResult.ADCRESULT6 + AdcResult.ADCRESULT7;Derta = High - Low;high = High/(4*4096*1.0) * 3.30;low = Low/(4*4096*1.0) * 3.30;derta = Derta/(4*4096*1.0) * 3.30;if (derta < 0){derta = -derta;}AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;PieCtrlRegs.PIEACK.all = PIEACK_GROUP10;//EPwm4Regs.ETCLR.bit.SOCA = 1;LED_Show(1,(int)(high*100)%10,0);//high即为0.037 LED_Show(2,(int)(high*10)%10,0);LED_Show(3,(int)(high*1)%10,0);LED_Show(4,(int)(low*100)%10,0);LED_Show(5,(int)(low*10)%10,0);LED_Show(6,(int)(low)%10,0);LED_Show(7,(int)(derta*10) % 10,0);LED_Show(8,(int)(derta*1) % 10,0);DelaymS(300);}实验四://homework4#include"DSP28x_Project.h"#include"LED_TM1638.h"#include"DSP2802x_Adc.h"#define ADC_usDELAY 1000Linterrupt void MyAdcInt1_isr(void); //ADCINT1void Init_Adc(void);void InitPWM4(void);void DelaymS(int tm);//初始化变量int Target = 0;int Now = 0;float target = 0; float now = 0;int ADCSampT = 12;int Derta = 0;//记录偏差int CMPA;void Init_Adc(void){extern void DSP28x_usDelay(Uint32 Count);EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;(*Device_cal)();EDIS;DELAY_US(ADC_usDELAY);EALLOW;AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // Power ADC BGAdcRegs.ADCCTL1.bit.ADCREFPWD = 1; // Power referenceAdcRegs.ADCCTL1.bit.ADCPWDN = 1; // Power ADCAdcRegs.ADCCTL1.bit.ADCENABLE = 1; // Enable ADCAdcRegs.ADCCTL1.bit.ADCREFSEL = 0; // Select interal BG使用内部参考电压EDIS;DELAY_US(ADC_usDELAY);AdcOffsetSelfCal();//自矫正DELAY_US(ADC_usDELAY);EALLOW;AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;AdcRegs.INTSEL1N2.bit.INT1CONT = 0;//不连续中断AdcRegs.INTSEL1N2.bit.INT1E = 1;//中断使能AdcRegs.INTSEL1N2.bit.INT1SEL = 7;//7次转换后结束AdcRegs.ADCSAMPLEMODE.all = 0;//顺序采样AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC3CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC7CTL.bit.TRIGSEL = 11;AdcRegs.ADCSOC0CTL.bit.CHSEL = 1;//前四个通道实现对ADA1过采样AdcRegs.ADCSOC1CTL.bit.CHSEL = 1;AdcRegs.ADCSOC2CTL.bit.CHSEL = 1;AdcRegs.ADCSOC3CTL.bit.CHSEL = 1;AdcRegs.ADCSOC4CTL.bit.CHSEL = 9;//后四个通道实现对ADB1过采样AdcRegs.ADCSOC5CTL.bit.CHSEL = 9;AdcRegs.ADCSOC6CTL.bit.CHSEL = 9;AdcRegs.ADCSOC7CTL.bit.CHSEL = 9;AdcRegs.ADCSOC0CTL.bit.ACQPS = ADCSampT;//设置采样周期AdcRegs.ADCSOC1CTL.bit.ACQPS = ADCSampT;AdcRegs.ADCSOC2CTL.bit.ACQPS = ADCSampT;AdcRegs.ADCSOC3CTL.bit.ACQPS = ADCSampT;AdcRegs.ADCSOC4CTL.bit.ACQPS = ADCSampT;AdcRegs.ADCSOC5CTL.bit.ACQPS = ADCSampT;AdcRegs.ADCSOC6CTL.bit.ACQPS = ADCSampT;AdcRegs.ADCSOC7CTL.bit.ACQPS = ADCSampT;EDIS;}//Epwm4产生ADC触发信号void InitPWM4(void){int PWMPRD,DeadTime;//周期和死区时间EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;//设置epwm同步暂停 EDIS;PWMPRD = 3000;DeadTime = 120;EPwm4Regs.TBPRD = PWMPRD;EPwm4Regs.TBPHS.half.TBPHS = 0;//忽略同步事件EPwm4Regs.TBCTL.bit.CLKDIV = 0;//预分频为1EPwm4Regs.TBCTL.bit.HSPCLKDIV = 0;EPwm4Regs.TBCTL.bit.PRDLD = 0;//使用映射寄存器EPwm4Regs.TBCTL.bit.CTRMODE = 2;//对称模式EPwm4Regs.TBCTL.bit.PHSEN = 0;//不从时基相位寄存器进行装载 EPwm4Regs.TBCTL.bit.SYNCOSEL = 1;//EPwm4Regs.CMPCTL.bit.SHDWAMODE = 0;//使用映射寄存器EPwm4Regs.CMPCTL.bit.SHDWBMODE = 0;EPwm4Regs.CMPCTL.bit.LOADAMODE = 2;//计数器=0或T时候装载 EPwm4Regs.CMPCTL.bit.LOADBMODE = 2;EPwm4Regs.CMPA.half.CMPA = (PWMPRD / 2);//脉冲占比50%EPwm4Regs.CMPB = (PWMPRD / 2);EPwm4Regs.AQCTLA.bit.CAU = 2;//配置动作EPwm4Regs.AQCTLA.bit.CAD = 1;EPwm4Regs.AQCTLA.bit.CBU = 0;EPwm4Regs.AQCTLA.bit.CBD = 0;EPwm4Regs.DBCTL.bit.HALFCYCLE = 0;//全周期EPwm4Regs.DBCTL.bit.IN_MODE = 0;//A是源EPwm4Regs.DBCTL.bit.POLSEL = 2;EPwm4Regs.DBCTL.bit.OUT_MODE = 3;EPwm4Regs.DBFED = DeadTime;EPwm4Regs.DBRED = DeadTime;EPwm4Regs.ETSEL.bit.SOCAEN = 1;EPwm4Regs.ETSEL.bit.SOCASEL = 1;EPwm4Regs.ETPS.bit.SOCAPRD = 1;EPwm4Regs.ETCLR.bit.SOCA = 1;EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;//设置epwm同步暂停 EDIS;}//Epwm1产生DAC 生成和target差不多的模拟信号并且void InitPWM1(void){//配置PWM输出 GPIO0EALLOW;GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; //设置为输出GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1;//上拉GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;//设置外设功能GpioDataRegs.GPACLEAR.bit.GPIO0 =1;//初始化数值EDIS;int PWMPRD;//周期和死区时间EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;//设置epwm同步暂停 EDIS;PWMPRD = 3000;EPwm1Regs.TBPRD = PWMPRD;EPwm1Regs.TBPHS.half.TBPHS = 0;//忽略同步事件EPwm1Regs.TBCTL.bit.CLKDIV = 0;//预分频为1EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;EPwm1Regs.TBCTL.bit.PRDLD = 0;//使用映射寄存器EPwm1Regs.TBCTL.bit.CTRMODE = 2;//对称模式EPwm1Regs.TBCTL.bit.PHSEN = 0;//不从时基相位寄存器进行装载 EPwm1Regs.TBCTL.bit.SYNCOSEL = 1;//EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;//使用映射寄存器EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;EPwm1Regs.CMPCTL.bit.LOADAMODE = 2;//计数器=0或T时候装载EPwm1Regs.CMPCTL.bit.LOADBMODE = 2;EPwm1Regs.CMPA.half.CMPA = (int)((1-(target/3.3))*3000);//脉冲占比50% EPwm1Regs.CMPB = (int)((1-(target/3.3))*3000);;EPwm1Regs.AQCTLA.bit.CAU = 1;//配置动作EPwm1Regs.AQCTLA.bit.CAD = 2;EPwm1Regs.AQCTLA.bit.CBU = 0;EPwm1Regs.AQCTLA.bit.CBD = 0;EPwm1Regs.DBCTL.bit.HALFCYCLE = 0;//全周期EPwm1Regs.DBCTL.bit.IN_MODE = 0;//A是源EPwm1Regs.DBCTL.bit.POLSEL = 0;EPwm1Regs.DBCTL.bit.OUT_MODE = 0;//直接生成需要的模拟信号// EPwm1Regs.ETSEL.bit.INTEN = 1;// EPwm1Regs.ETSEL.bit.INTSEL = 1;// EPwm1Regs.ETPS.bit.INTPRD = 1;// EPwm1Regs.ETCLR.bit.INT = 1;EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;//设置epwm同步暂停EDIS;}void DelaymS(int tm){int i;unsigned int j;for(i = 0;i < tm ;i++){j = 60000;while(j != 0)j--;}}void main(void){InitSysCtrl(); //初始化系统时钟,选择内部晶振1,10MHZ,12倍频,2分频,初始化外设时钟,低速外设,4分频DINT; //关总中断IER = 0x0000; //关CPU中断使能IFR = 0x0000; //清CPU中断标志InitPieCtrl(); //关pie中断InitPieVectTable(); //清中断向量表EALLOW; //配置中断向量表PieVectTable.rsvd10_1 = &MyAdcInt1_isr;PieCtrlRegs.PIEIER10.bit.INTx1 = 1;IER |= 0x0200;EDIS;// MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);InitFlash();TM1638_Init(); //初始化LEDInit_Adc();InitPWM4();InitPWM1();EINT;//中断总使能ERTM;while(1){{// LED_Show(1,(int)(high*100)%10,0);// LED_Show(2,(int)(high*10)%10,0);// LED_Show(3,(int)(high)%10,0);//// LED_Show(4,(int)(low*100)%10,0);// LED_Show(5,(int)(low*10)%10,0);// LED_Show(6,(int)(low)%10,0);//// LED_Show(7,(int)(derta*10) % 10,0);// LED_Show(8,(int)(derta) % 10,0);}}}interrupt void MyAdcInt1_isr(void) {Target = AdcResult.ADCRESULT0 + AdcResult.ADCRESULT1;Target += AdcResult.ADCRESULT2 + AdcResult.ADCRESULT3;target = Target/(4*4096*1.0) * 3.30;Now = AdcResult.ADCRESULT4 + AdcResult.ADCRESULT5;Now += AdcResult.ADCRESULT6 + AdcResult.ADCRESULT7;now = Now/(4*4096*1.0) * 3.30;// EALLOW;// SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;//设置epwm同步暂停// EDIS;Derta += (int)((((target - now) /3.3))*3000);CMPA += ((int)(0*Derta) + (int)((((target - now) /3.3))*3000));if (CMPA < 0){CMPA = 0;}else if (CMPA > 3000){CMPA = 3000;}EPwm1Regs.CMPA.half.CMPA = CMPA;//根据差值进行改变//EPwm1Regs.CMPA.half.CMPA += (int)((((target - now) /3.3))*3000);//根据差值进行改变// EALLOW;// SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;//设置epwm同步暂停// EDIS;AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;PieCtrlRegs.PIEACK.all = PIEACK_GROUP10;//EPwm4Regs.ETCLR.bit.SOCA = 1;LED_Show(1,(int)(target*1000)%10,0);//LED_Show(2,(int)(target*100)%10,0);LED_Show(3,(int)(target*10)%10,0);LED_Show(4,(int)(target)%10,0);LED_Show(5,(int)(now*1000)%10,0);//LED_Show(6,(int)(now*100)%10,0);LED_Show(7,(int)(now*10)%10,0);LED_Show(8,(int)(now)%10,0);DelaymS(200);}。

DSP复习资料

DSP复习资料

DSP最新考纲1、CPU总线结构基本概念。

2、直接寻址模式的基本寻址方法。

3、存储器映像寄存器包括的主要内容及地址。

4、CCS生成可执行文件的过程及载入可执行文件的方法。

5、片上ROM固化的内容及地址。

6、DSP系统的结构框图。

7、软件等待状态发生器的设置。

8、C语言中I/O端口的访问方法及插入汇编命令的方法。

9、自举的概念。

10、中断向量表地址的计算方法。

11、多路缓冲串口的发送和接收过程。

12、上电复位电路及手动复位电路设计方法。

13、定时器定时时间计算方法:定时周期 = CLKOUT×(TDDR+1)×(PRD+1)14、中断编程过程及方法。

15、布置的作业。

复习:1-01.数字信号处理:答:数字信号处理是利用计算机或专用处理设备,以数字的形式对信号进行分析、采集、合成、变换、滤波、估算、压缩、识别等加工处理,以便提取有用的信息并进行有效的传输与应用。

1-02.DSP系统的构成:1-03.数字信号处理器的特点:答:数字信号处理器(DSP)是一种特别适合于进行数字信号处理运算的微处理器,主要用于实时快速实现各种数字信号处理的算法。

哈弗结构;多总线结构;流水线结构;多处理单元;特殊的dsp指令;指令周期短;运算精度高;硬件配置高。

1-04.定点DSP:数据采用定点格式工作的DSP芯片。

浮点DSP:数据采用浮点格式工作的DSP芯片。

1-05.54x的特点:答:(1) 改进哈佛结构;(2) 8条总线(1条程序总线,3条数据总线,4条地址总线);(3) 高度专业指令系统;(4) 内核供电电压低。

优点:(1)功耗低;(2)高度并行性。

1-06.1. 总线结构:8条16位总线(1条程序,3条数据,4条地址)(1)PB:传送程序存储器的指令代码和操作数;(2)CB、DB:传送来自数据存储器的操作数;(3)EB传送写入数据存储器操作数;(4)PAB、CAB、DAB、EAB:传送地址信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二章习题答案:2.2题:哈佛结构DSP芯片内部采用的是多总线结构,‘c54x内部有四条数据总线,四条程序总线,他的数据存储空间和程序存储空间是分开的,独立编址,CPU可以同时访问数据存储空间和程序存储空间。

冯。

诺伊曼结构程序空间和数据空间是和在一起的,统一编址,取指令和取操作数都是通过同一条总线分时进行的。

2.4题:IFR中INT3位=1,IMR中INT3位=1,使能中断。

2.5题:PMST中IPTR=(000000011)b,int3中断向量号为24H,做移量为后变为60H,则中断响应时程序计数器指针PC=01E0H.2.6题:MP/MC和DROM为1或0,OVLY为1。

2.7题:流水线共分为六级;预取程序地址(Prefetch):将下一条要执行的指令地址提供给程序地址总线PAB。

取程序指令(Fetch):从程序总线PB上取程序指令,并放入指令寄存器IR中。

指令译码(Decode):指令寄存器IR的内容被译码,并决定在CPU和数据地址产生单元DAGEN中,产生什么样的操作类型和控制顺序。

存取准备(Access):数据地址产生单元输出要存取数据的地址到数据地址总线DAB和CAB上。

读操作(Read):从数据总线DB和CB上读数据同时把将要写的数据地址提供给写地址总线EAB。

执行/写操作(Execute/write):指令被执行同时通过数据写总线EB完成写操作。

2.8题:DSP响应中断的条件是:对于软件中断和非屏蔽中断,遵循最高优先级的条件;对于可屏蔽中断响应的条件是:(1)状态寄存器ST1的INTM位=0,使能所有可屏蔽中断;(2)终端屏蔽寄存器IMR的相应位=0;(3)遵循最高优先级。

响应中断时DSP自动进行的操作是:⑴保存程序计数器(PC)值(返回地址)到数据存储器的堆栈顶部;⑵将中断向量的地址加载到PC;⑶获取位于向量地址的指令(分支转移被延时。

并且用户也存储了一个2字指令或两个1字指令,则CPU也会获取这两个字);⑷执行分支转移,转到中断服务程序(ISR)地址(如果分支转移被延时,则在分支转移之前会执行额外的指令);⑸执行ISR直到一个返回指令中止ISR;⑹从堆栈中弹出返回地址到PC中。

⑺继续执行主程序;2.9题:算术运算指令若带后缀R,就对运算结果进行取整操作,对运算结果加215,并将目的累加器的低16位清零。

若ST1寄存器的OVM位=1,则若是正的最大溢出,则用32位最大正数007FFFFFFFH 加载累加器,若是负的最小溢出,则用32位最小负数FF80000000H加载累加器.2.10题:软件可编程等待状态发生器可以将外部总线周期扩展到7个机器周期,以使’C54x 能与低速外部设备接口。

而需要多于7个等待周期的设备,可以用硬件READY线来接口。

2.12题:McBSP通过一系列存储器映射控制寄存器来进行配置和操作,采用子地址寻址方式。

McBSP通过复接器将一组子地址寄存器复接到存储器映射的一个位置上。

复接器由子块地址寄存器(SPSAx)控制。

子块数据寄存器(SPSDx)用于指定子地址寄存器中数据的读/写。

2.14题:XF信号可以由软件控制。

通过对STl中的XF位置1得到高电平,清除而得到低电平。

对状态寄存器置位的指令SSBX和对状态寄存器复位的指令RSBX可以用来对XF置位和复位。

同时XF 引脚为高电平和低电平,亦即CPU 向外部发出1和0信号。

程序可以根据BIO 的输入状态有条件地跳转,可用于替代中断。

条件执行指令(XC)是在流水线的译码阶段检测BIO 的状态,其它条件指令(branch 、call 和return)是在流水线的读阶段检测BIO 的状态的。

第三章作业答案: 或者 3.2题:GND3.3题:DSP 芯片JTAG 逻辑测试口和14脚的仿真座距离大于6 inch 的连接图DSP 芯片JTAG 逻辑测试口和14脚的仿真座距离小于6 inch 的连接图GND3.4题 并行总线用于DSP 和外扩的并行器件进行数据传递,串行口是DSP 和外扩的串行器件进行数据传递。

3.5题:第四章习题答案 4.1助记符指令格式:[标号][:] 助记符 [操作数列表] [;注释] 代数指令格式:[标号][:] 代数指令 [;注释] 应遵循下列规则:①语句的开头只能是标号、空格、星号或分号。

②标号是可选项,如果使用,必须从第一列开始。

③每个域之间必须由一个或多个空格来分开。

制表符等同于空格的作用。

④注释是可选项。

开始于第一列的注释用星号或分号(*或;)来标明,开始于其它列的注释必须由分号开头。

⑤ 源语句的字符数每行不能超过200个。

4.2寻址方式有七种;他们是:①立即数寻址;②绝对地址寻址;③累加器寻址;④直接寻址;⑤间接寻址;⑥存储器映射寄存器寻址;⑦堆栈寻址;4.3绝对地址寻址有:1.数据存储器地址(dmad )寻址2.*(lk )寻址3.端口地址(PA )寻址:访问I/O 空间4.程序存储器地址(pmad )寻址:访问程序存储空间特点:绝对地址寻址方式的指令中包含的是所寻找操作数的16位单元地址,可以是单元地址或16位符号常数。

绝对地址总是16位,所以绝对地址寻址指令的指令代码至少是两个字。

4.4(1)直接寻址中,操作数是一个数据页内的偏移地址,而所在的数据页由数据页指针DP或SP决定,该偏移地址与DP和SP的值决定了在数据存储器中的实际地址;(2)位于状态寄存器ST1中的编译方式位(CPL)(bit14)决定选择采用哪种方式来产生实际地址。

CPL=0 偏移地址与9bits的DP域相结合形成16bits的数据存储器地址。

CPL=1 偏移地址加上SP的值形成16bits的数据存储器地址。

(3)当CPL=0时,寻址的是数据存储空间的0125h地址单元;当CPL=1时,寻址的是数据存储空间的2025h地址单元;4.54.6缓冲区大小寄存器的值为64或40h,缓冲区首地址低7位必须为0。

4.7(1)用子程序调用实现•. title "example1.asm"•. mmregs•STACK . usect “STK”,10H•. bss y , 8•. bss Z , 4•. def start•. data•X:. word 1,2,3,4•. text•start:STM # STACK+10H,SP•STM # Z,AR2STM #4,BK•RPT #3•MVPD X,*AR2+%•CALL MCOPY•end: B end•MCOPY:STM # Y,AR3•STM #1,AR0•RPT # 7•Loop: MVDD *AR2+0%,*AR3+•RET•. end(2)不用子程序调用实现•. title "example1.asm"•. mmregs••. bss y , 8•. bss Z , 4•. def start•. data•X:. word 1,2,3,4•. text•start:STM # STACK+10H,SP•STM # Z,AR2STM #4,BK•RPT #3•MVPD X,*AR2+%••MCOPY:STM # Y,AR3•STM #1,AR0•RPT # 7•Loop: MVDD *AR2+0%,*AR3+•RET•. end4.8实数FFT时,位倒序寻址索引(AR0存放的整数N)是FFT点数的一半;复数FFT时,位倒序寻址索引(AR0存放的整数N)是FFT点数。

4.9STM #2000H,AR1RPT 80HMVPD 1000H,*AR1+4.114.12汇编伪指令是汇编语言程序的一个重要组成内容,它给程序提供数据并且控制汇编过程。

用户可以用它们来完成以下任务:①将代码和数据汇编进特定的段②为未初始化的变量保留存储器空间③控制展开列表的形式④存储器初始化⑤汇编条件块⑥定义全局变量⑦指定汇编器可以获得宏的特定库⑧检查符号调试信息段定义伪指令和链接命令文件内容有关系。

4.13 未初始化的段占用’C54x DSP的存储空间,它通常被分配在RAM中。

这些段在目标文件中并没有实际的内容,只是保留一定的存储空间,程序运行时可以使用这些空间来产生或存储变量。

已初始化的段包括可执行的代码或已初始化的数据。

装载程序时这些在目标文件里的段被放在’C54x的存储空间中。

未初始化段定义伪指令有.bss和.usect指令;已初始化的段定义伪指令有.text、.data、.sect 指令4.14宏定义:DELAY .macro COUNTSTM COUNT,BRCRPTB delay?NOPNOPNOPNOPdelay?: NOP.endm宏调用:DELAY #FFFFH4.15通过MEMORY伪指令定义和产生存储器模型来构成系统存储器,SECTIONS伪指令确定输出各段放在存储器的什么位置4.16 见书P171~P1724.17 STM #8,AR0STM#3000H,AR3RPT #16MVPD 2000H,*AR3+0B定时器0初始化程序片断ORM #0010h,TCR ;停止定时器0STM #1599,TIM0STM #1599,PRD0STM #0269H,TCT0 ;启动定时器0中断,TCR0=0269HST #0FFFFh,IFR ;初始化中断ORM #0008h,IMRRSBX INTM选择题(每题可能有多个选项是正确的)1.用于双操作数寻址的辅助寄存器有( )A. AR0;B. AR1;C. AR6;D. AR5。

2. 不能用于双操作数寻址的操作数类型有( )A. *AR2;B. *AR2+;C. *AR2+0%;D. *AR2+0B。

3.单片机与DSP的本质区别是( )A. 指令集不同B.CPU组成不同C. 采用的结构不同D.CPU处理速度不同。

4.TMS320C5402采用的流水线是( )A. 4级;B. 6级;C. 8级。

5. 块重复操作影响的寄存器是( )A. ST0 RSA REA;B. ST1 REA RSA;C. BK;D. AR0。

6. 一条语句包含一个立即数,该操作数所寻址空间是( )A. 程序存储空间;B. 数据存储空间;C. I/O空间。

7. 汇编语言程序中,一条汇编语言指令前的标号代表的是( )A. 一个常数值;B. 该语句生成的指令代码在数据空间的地址;C. 该语句生成的指令代码在程序空间的地址;D. 就是一个符号,无实际的意义。

8. 多缓冲串口寄存器包含有15个字地址寄存器,对于他们的描述正确的是( )A. 他们在数据存储空间有映射的地址;B. 可以用宏定义和宏调用的方式实现他们的初始化;C. 使用多缓冲串口时,初始化程序只需要对他们初始化;、D. 子地址寄存器初始化必须通过SPSDX和SPSAX两个寄存器来实现。

相关文档
最新文档