DSP复习资料1

合集下载

DSP复习资料

DSP复习资料

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

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

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

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

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

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

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

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

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

DSP复习资料

DSP复习资料

第一章1、DSP,DSP的两层含义:DSP(Digital Signal Processing)----数字信号处理的理论和方法。

DSP(Digital Signal Processor)----用于数字信号处理的可编程微处理器。

2、CPU、MCU、DSP区别与联系:CPU:微型计算机中央处理器。

(如:奔腾等)MCU:单片微型计算机(如MCS-51,MCS-96等)DSP:可编程的数字信号处理器。

3、掌握冯偌伊曼结构、哈佛结构以及改进的哈佛结构的区别及联系?DSP处理器则毫无例外地将程序代码和数据的存储空间分开,各有自己的地址总线与数据总线,这就是所谓的哈弗结构(同时取指令和取操作数,并行的进行指令和数据的处理,大大提高了运算速度)。

改进的哈弗结构,在哈弗结构基础上。

又加以改进,使得程序代码和数据存储空间之间也可以进行数据的传送。

冯·诺依曼体系结构模型:改进的哈弗结构:4、简述数字信号处理与模拟信号处理相比的优越性,(DSP系统的特点):DSP系统的特点(与模拟信号处理系统相比):1)、精度高,抗干扰能力强,稳定性好。

2)、编程方便,易于实现复杂算法(含自适应算法)。

3)、可程控。

4)、接口简单。

5)、集成方便。

5、DSP芯片的结构特点?1)、改进的哈弗结构2)、多总线结构3)、流水线技术4)、多处理单元5)、特殊的DSP 指令6)、指令周期短7)、运算精度高8)、丰富的外设9)、功耗低6、DSP芯片的分类?DSP芯片的分类(1)按用途分类1)、通用型DSP芯片(本课程主要讨论的芯片)2)、专用型DSP芯片(2)、按数据格式分1)、定点DSP 2)、浮点DSP7、了解做DSP方面公司:DSP主要厂商:美国TI、ADI、Motorola、Zilog等公司。

TI公司位居榜首,占全球DSP市场约60%左右。

TI、Lucent、AD、Motorola、ZSPh和NEC公司。

8、DSP应用系统的开发工具?常用的软硬件开发工具:Simulator软件仿真器、Emulator在线仿真器和C编译器等。

DSP复习资料

DSP复习资料

DSP复习资料DSP复习资料填空题:1、TL公司的DSP产品主要有TMS320C2000、TMS320C5000和TMS320C6000系列。

2、程序计数器的值可以通过复位操作、顺序执行指令、分支转移、累加器转移、块重复、子程序调用、从累加器调用子程序,中断操作来改变。

3、COFF目标文件都包含以下三种形式的段,分别是.text文本段、.data数据段、.bass保留空间。

4、DSP的寻址方式有七种分别是立即寻址、绝对寻址、累加器寻址、直接寻址、间接寻址、存储器映像寄存器寻址、堆栈寻址。

5、DSP芯片的开发工具可以分为代码生成工具和代码调试工具两类。

6、子段有两种,用.sect命令建立的是已初始化段,用.usect命令建立的是未初始化段。

7、DROM为1,片内ROM配置程序和存储空间,ST1的CPL为1表示选用堆栈指针SP的直接寻址方式;ST1的C16等于1表示ALU 工作在双精度算式(填0或1)8、DSP具有两个40 位的累加器A和B,累加器A的32-39位是保护位。

9、TMS320C54x DSP的内部总存储空间为192K字,分成了3个可选择的存储空间分别是64K程序存储空间、64K数据存储空间、64K的I/O存储空间。

10、TMS320C54x有4组地址总线分别是PAB、CAB、DAB和EAB总线。

11、链接器对段的处理主要头通过MEMORY 和SECTIONS的两个命令来完成。

12、DSP有3个16位寄存器作为状态控制寄存器,分别是ST0、ST1和PMST。

13、TMS320C54x的三类串行口分别是标准同步串行口、缓冲串行口、时分多路串行口。

14、DSP的内部存储器类型可分为RAM和ROM,其中RAM可以定义为两个类型单寻址RAM(SARAM)和双寻址RAM(DARAM)。

15、在数字信号处理器寻址指令系统中,D mad为16位立即数,表示数据存储器地址,P mad表示程序存储器地址。

最新DSP期末复习资料汇(含题)资料

最新DSP期末复习资料汇(含题)资料

最新DSP期末复习资料汇(含题)资料第⼀章绪论 DSP 与DSP 技术(1)DSP(Digital Signal Processing)---- 数字信号处理的理论和⽅法。

(2)DSP(Digital Signal Processor)----⽤于数字信号处理的可编程微处理器。

(3)DSP 技术(Digital Signal Process)---- 是利⽤专门或通⽤数字信号处理芯⽚,完成数字信号处理的⽅法和技术。

2. DSP 系统的特点(1)精度⾼、抗⼲扰能⼒强,稳定性好。

(2)编程⽅便、易于实现复杂算法(含⾃适应算法)。

(3)可程控。

(4)接⼝简单。

(5)集成⽅便。

3. DSP 芯⽚的结构特点(1)改进的哈佛结构①哈佛结构DSP 处理器将程序代码和数据的存储空间分开,各有⾃⼰的地址总线和数据总线。

(⽬的是为了同时取指令和取操作数,并进⾏指令和数据的处理,从⽽⼤⼤提⾼运算速度)②改进的哈佛结构在哈佛结构的基础上,使得程序代码和数据的存储空间之间也可以进⾏数据的传送。

(2)多总线结构多总线结构可以保证在⼀个机器周期内多次访问程序空间和数据空间。

TMS320C54x 内部有P、C、D、E 4 条总线P:传送取⾃ROM 的指令代码和⽴即数;C、D:传送从RAM 读出的操作数;E:传送写⼊到RAM 中的数据;(3)流⽔线技术将各指令的各个步骤重叠起来执⾏,⽽不是⼀条指令执⾏完成之后,才开始执⾏下⼀条指令。

即第⼀条指令取指后,在译码时,第⼆条指令就取指,第⼀条指令取数时,第⼆条指令译码,⽽第三条指令就开始取指,。

以此类推。

(4)多处理单元;(5)特殊的DSP 指令;(6)指令周期短、功能强;(7)运算精度⾼;(8)丰富的外设;(9)功耗低。

DSP 最重要的特点:特殊的内部结构、强⼤的信息处理能⼒及较⾼的运⾏速度。

4.DSP 芯⽚可以归纳为三⼤系列:①TMS320C2000 系列:适⽤于控制领域②TMS320C5000 系列:应⽤于通信领域③TMS320C6000 系列:应⽤于图像处理第⼆章TMS320C54x 的硬件结构1. TMS320C54x 内部结构( 3 ⼤块)(1)CPU (2)存储器系统(3) ⽚内外设与专⽤硬件电路CPU 部分①先进的多总线结构(1 条程序总线、 3 条数据总线和 4 条地址总线)。

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组程序总线(PB),3组数据总线(CB,DB,EB),4组地址总线(PAB,CAB,DAB,EAB).⑵40位算术逻辑单元alu{C16=0工作在双精度算术运算方式,C16=1工作在双16位方式}ALU 溢出后状态寄存器ST0的OVM=1时,用32位最大正数007FFFFFFFH 或最大负数FF80000000H 加载累加器,溢出后溢出标志位OVA 或OVB=1直到复位!⑶1个40位桶行移位寄存器,⑷2个独立40位ACCA 和ACCB{ACCA 和ACCB 差别在于A 的31~16位可以用途乘法器的一个输入}.⑸17X17并行乘法器与40位的专用加法器相连,用于MAC 运算.⑹比较/选择/存储单元(CSSU)用于加法比较运算,⑺指数单元EXP(40位),⑻有16bit 状态寄存器ST0,ST1和工作方式状态寄存器PMST.二,存储结构:①哈佛结构(ROM 和RAM 分开),②三个独立64kb,ROM,RAM,I/O 空间,程序空间通过PMST 的MP/MC\和OVLY 控制,MP 控制使用内部存储器,MP=0,4000H-EFFFH 程序存储空间定义为外部存储器,FF00H-FEFFH 为内部,FF00H-FFFFH 为内部ROM 存储器,工作方式为微型计算机,MP=1,4000H-FFFFH 全部定义为外部存储器,工作方式为处理器模式.当OVLY=0时,0000H~3FFFH 全部定义为外部程序存储空间,程序空间不使用内部RAM,此时内部RAM 只作为数据存储器使用,OVLY=10000H~007FH 保留,程序无法使用,0080H~3FFFH 定义为内部DARAM,即内部RAM 被映射到程序存储空间和数据存储空间.③片上外设:2个通用I/O,XF(外部标志输出信号.控制外设工作)和BIO(控制分支转移信号,监测外部状态).BIO=0时执行转移指令.④定时器:4位预分频器和16位减法计数器组成,定时设定寄存器TIM(16bit)→0024H,复位/定时TIM 装入PRD(定时寄存器→0025H,存放定时常数)寄存器的值,然后减1计数,TIM 减到0后产生TINT 中断,TCR(定时控制寄存器→0026H)用来控制定时器的控制位和状态位,包括定时分频TDDR,预标定时计数器PSC,控制位TRB 和TSS 等.周期=时钟T*(TDDR+1)*(PRD+1).⑤时钟发生器:内部振荡器和锁相环PLL{⑴硬件配置PLL,通过[CLKMD1,CLKMD2,CLKMD3R 的状态,]⑵软件设置[通过16位的CLKMD →58H 控制]},⑥主机接口HPI:{控制寄存器HPIC,地址寄存器HPIA,数据锁存器HPID,HPI 内存},三,外设接口:软件等待状态寄存器SWWSR →0028H,复位时SWWSR →7FFFH,四,中断:1,可屏蔽中断{INT0-3,串行口中断,定时器中断TINT0-1,DMA 中断(DMAC4,DMAC5).HPINT(HPI 中断)}.2,非可屏蔽中断{外部中断投复位和‾NMI ‾(可用软件中断)}中断标志寄存器IFR 和中断屏蔽寄存器IMR{中断向量地址的计算[中断向量地址是由PMST 寄存器中的IPTR(中断向量指针,9bits)和左移2位后的中断向量序号(中断向量序号为0~31,左移两位后变成7位)所组成]例如INT0的中断序号为16(10H)左移两位后成40H 若IPTR=0001H,则中断地址为00C0H,复位时IPTR 全为1,所以硬件复位后程序总是从0FF80H 执行}.五,指令系统:1,寻址方式{i.立即寻址.[用于初始化(LD#80H,A)].ii.绝对寻址[①数据存储器(dmad)寻址(mvkd exam1,*ar5)②程序存储器(pmad)寻址(mvpd table,*ar2)③端口(pa)寻址(PORTR FIFO,*AR5)④*(1K)寻址(LD *(PN),A))].iii.累加器寻址{是用累加器中的数值作为地址来读写程序存储器,READA Smem,WRITASmen}.iv.直接寻址{ADD @x,A}.v.间接寻址[(寻址范围0~64kb)利用辅助寄存器内容作为地址访问存储器(C54x 有8个16bits 辅助寄存器AR0-AR7)]vi.存储器映像寄存器(MMR))寻址{LDM,MVDM,MVMD,MVMM,POPM,PSHM,STLM,STM}vii.堆栈寻址{PSHD,PSHM,POPD,POPD}.常用缩写{Smem:16位的单寻址操作数,Xmem:16位双寻址操作数,Ymem:16位双寻址操作数,PA:16位立即数,src:源累加器,dst:目的累加器,lk:16位长立即数},六,软件开发过程:.text 文本段,.data 数据段,.bss 保留空间,通常对未初始化变量保存,.sect 建立包含代码和数据的自定义段,.usect 为未初始化变量保留存储空间的自定义段,.word 用来设置一个或多个16位带符号整型常数,.int 设置无符号整型常数.title 后面是双引号的程序名,.end 结束汇编命令,汇编程序举例:㈠堆栈的使用:100单元的堆栈,size .set 100 \stack .usect “stk ”,size\STM #stack+size SP.㈡加减乘,①Z=X+Y-W,SUM:LD @x,A\ADD @y,A\SUB @w,A\STL A,@z.②y=mx+b,ld @m,t\mpy @x,A\add @b,A\stlA,@y.③y=x1*a1+x2*a2,ld @x1,t\mpy @a1,B\ld @a2,t\mpy @x2,b\stlB,@y\sth B,@y+1④y= a i 4i =1x i stm #a,ar1\stm #x,ar2\stm #2,ar3/ld *ar1+,t\mpy *ar2+,A\loopl:ld *ar1+,tMpy *ar2+,b/max A/banz loop,*ar3-㈢数组初始化x[5]=[1,2,3,4,5].data\tbl:.word 1,2,3,4,5\.sect “.vector ”\B START\.bss x,5\.text\START:stm #x,ar5\rpt #4\MVPD TBL,*AR5.㈣设计对称FIR 滤波器(N=8).title “firs5”\.mmregs\.def start\.bss y,1\x_old .usect “data1”,4\x_new .uscet “data2”,A\size .set 4\PA0 .set 0\PA1 .set 1\.data/COEF .word 1*32768/10,2*32768/10\.text/start:ld #y,dp\ssbxfrct\stm #x_new,ar2\stm #x_old+(size-1),ar3\stm #size,bk\stm #-1,ar0\POPTR PA1,#x_new\FIR5: ADD *AR2+0%,*AR3+0%,A\RPTZ B,#(size-1)\FIRS *AR2+0%,*AR3+0%,COEF\STH B,@y\MAR *+AR2(2)%\MAR *AR3+%\MVDD *AR2,*AR3+0%\BD FIR5\POPRTR PA1,*AR2\.end 用线性缓冲法和直接寻址法实现FIR 滤波器:N=5,Y(n)=a0x(n)+a1x(n-1)+a2x(n-2)+a3x(n-3)+a4x(n-4)程序:.title “fir1.asm ”\.mmrges\.def start\.bss y,1\XN .usect “XN ”,1\XNM1 .usect “XNM1”,1\XNM2 .usect “xnm2”,1\xnm3 .Usect “xnm3”,1\xnm4 .usect “xnm4”,1\a0 .usect “a0”,1\a1 .usect “a1”,1\a2 .usect “a2”,1\a3 .usect “a3”,1\a4 .usect “a4”,1\pa0 .set 0\pa1 .set 1\.data\table: .word1*32768/10\.word -3*32768/10\.word 5*32768/10\.word -3*32768/10\.word 1*32768/10\.text\start: ssbxfrct\stm #a0,ar1\rpt #4\mvpd table,ar1+\ld #xn,dp\portr pa1,@xn\fir1:ld @xnm4,t\Mpy @a4,a\ltd @xnm3\mac @a3,a\ltd @xnm2\mac @a2,a\ltd @xnm1,a\mac @a1,a\ltd @xn,a\mac @a0,a\ltha,@y\portw @y,pa0\bd fir1\portrpa1,@xn\.end 循环缓冲区和双操作数寻址方法实现:.title “firs ”\.mmregs\.def start\.bss new_data.1\.bss y,1\xn .usect “xn ”,5\a0 .usect “a0”,5\.data\tsble:.word 1*32768/10\.word 2*32768/10\.word 3*32768/10\.word 4*32768/10\.word 5*32768/10\.text\start:ssbxfrct\stm @a0,ar1\rpt #4\mvpd table,*ar1+\stm #xn+4,ar3\stm #a0+4,ar4\stm 5,bk\stm #-1,ar0\ld ##new_data\fir4:rptz a,#4\mac *ar3+0%,*ar4+0%,a\stha,@y\bd fir4\ldnew_data,bstl b,*ar3+0%\.end。

DSP基础知识专业复习资料(ppt 150页)_252

DSP基础知识专业复习资料(ppt 150页)_252
19
程序总线PB 传送取自程序存储器的指令代码 和立即操作数。
数据总线CB、DB和EB这3条数据总线将内部 各单元(如CPU、数据地址生成电路、程
序地址产生逻辑、在片外围电路以及数据 存储器)连接在一起,其中CB和DB传送读 自数据存储器的操作数,EB传送写到存储 器的数据。 *为什么要用2条数据线(CB、DB)读数?
3
二、选择芯片考虑的因素
1.DSP芯片的运算速度
MAC 时 间 : 一 次 乘 法 和 一 次 加 法 的 时 间 。 大 部 分 DSP芯片可在一个指令周期内完成一次乘法和一次加 法操作。
FFT执行时间:运行一个N点FFT程序所需时间。由
于FFT运算在数字信号处理中很有代表性,因此FFT运 算时间常作为衡量DSP芯片运算能力的一个指标。
MIPS:每秒执行百万条指令。 MOPS:每秒执行百万次操作。 MFLOPS:每秒执行百万次浮点操作。 BOPS:每秒执行十亿次操作。
4
三、系统调试和评价工具 : TMS320有一系 列系统调试工具用于代替或协助目标系统进行 软件评价和开发。
现有的产品有: DSK初学者开发套件(DSP Starter Kit) EVM软件评估模块(Evaluation Module) XDS510硬件仿真器(Extend Development Support Emulators)。 TI公司还提供集成开发工具CCS(Code Composer Studio),CCS可从网上下载,可进 行软、硬件仿真和系统分析,受到广泛应用。
14
2乘法器/加法器
17X17乘法 40位加法
检零 饱和 取整
15
为了使修正系数的量化误差最小,要 进行舍入处理。 C54X的CPU中是一个17×17位的硬件乘 法器,它与一个40位的专用加法器相连。 因此,乘法器可以在一个时钟周期内完成 一次乘法累加(MAC)运算。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DSP复习资料
第一章:
数字信号处理系统组成:
X(t)x(n)y(n)y(t)
抗混叠A/D 微处理D/A 平滑滤波=
滤波器
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,TigerSHAR系列,飞思卡尔公司的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):2fi, 24位(6)数据写总线(EB,FB):2组,16位
C55X的CPU包含:指令缓冲单元(I单元),程序流单元(P单元),地址--数据流单元(A单元)数据运算单元(D单元),存储器接口单元
(M 单元)和内部数据总线和数据总线
C55X 的CPU 包含几个累加器:AC0--AC3每个累加器分为:低字节 (ACxL )高字节(ACxH 和8个保护位(ACxG )
C54的兼容模式:(1)C54x 兼容模式c54xcm_on 和c54cm_off 指 令来自C54x 的代码(2)CPL 模式影响直接寻址方式(3)ARMS 模式影响间接寻址模式
C55x 的寻址方式:(1)绝对寻址方式:通过在指令中指定一个常 数地址完成寻址。

(2)直接寻址方式;使用地址偏移量寻址(3) 间接寻址方式:使用指针完成寻址。

COFF 文件:COFF 文件的基本单位是段,COFF 目标文件有三个默 认段:(1).text 段,通常包括可执行代码(2) .data 段,通常包 括初始化数据(3).bss 段,通常包括未初始化的变量保留存储空 间。

COFF 为文件有两种基本类型的段:(1)初始化段:包括数据或代 码,.text 和.data 段是初始化段,以.sect 汇编指令创建的自定义初 始化段也是初始化段。

(2)给未初始化的数据保留存储空间。

.bss 段是为初始化段,以.uesct 汇编指令创建的自定义段也是为初始化
39~32 31~16 15~0 AC0 AC1 AC2 AC3
段。

伪指令:是汇编语言程序的重要组成部分,包括汇编指令和连接指令两部分,伪指令用于处理汇编和连接过程,最后产生的目标文件不包括它们宏指令:程序中常常包含执行多次的程序段,可以定义一个宏来代替它,而不必重复写代码,在需要该程序段时只需引用宏(p183)
C55x的指令流水线:(1)第一阶段为取指阶段(2)第二阶段为执行阶段
C55x的堆指针:⑴数据堆栈指针SP(2)系统堆栈指针SSP (3)一个相关的扩展寄存器SPH.
寄存器:(1)XSP扩展数据堆栈指针(2)SP数据堆栈指针(3)
XSSP扩展系统堆栈指针。

(4)SSP系统堆栈指针(5)SPH XSP 和XSSP的高位部分
连接器有两条伪指令:MEMOR丫和SECTION连接器对程序的重新定位P177(地址重新定位和运行时间重新定位)
COFF文件中的符号:外部符号是指在一个模块中定义,而在另一个模块中使用,它可以用.def,.ref,.global 来定义
1).def 在当前模块中定义,并可在别的模块中引用的符号。

2).ref 在当前模块中引用,但在别的模块中定义的符号。

3).global 可以是上面的任何一种情况。

TMS320C55X可以使用两种指令集:助记符指令集和代数集。

C55x指令集按操作类型可以分为6种:算术运算指令,位操作指
令,扩展辅助寄存器操作指令,逻辑运算指令,程序操作指令。

(1) 加法指令ADD(P121)
例题18:( 1)ADD*AR3+,T0 T1;AR3间接寻址得到的内容与 TO 的内 容想加,结果装入T1, 寄存器 执行前
T1CARR 0 数据存储器 0302
EFOO
(2) ADD*AR1,v<TO,AC,1AC0,将AR1寻址得到的内容左移 T0位与
AC1想加,结果装入AC0
寄存器 执行前
寄存器 执行后
ACO
00 0000 0000
AC0
00 2330 0000
AC1
00 2300 0000
AC1
00 2300 0000
T0
T0
000C 000C AR1
0200
AR1
0200
SXMD
SXMD
M40
M40
并将AR3增1 寄存器
T0 T1
数据存储器 0302
EFOO
执行后
AR3 CARR Y
(2)减法指令SUB(p123
例题 19: SUB uns(*AR1),BORROW,AQ0AC1 将 CARRY 位求反,AC0 减去由AR1寻址得到的内容以及 ;CARRY 勺内容,并将结果装入 AC1
(3) 乘法指令 MPYM(P125) 例题22 MPY AC1, AC0 ;AC0=AC0*AC1 执行前
ACOV0
ACOV0
CARR Y
CARR Y
1
0200
0200
0300
AC0 02 6000 3400
00 C000 0000
数据存储器 数据存储器 0300
寄存器 执行前
数据存储器
0302
F000 _____
寄存器
执行后
0302
F000
执行后
M40
FART
AC0V1 (4)乘加指令MACM(P127)
例题23: (1) MACMR *AR1,执行前
数据存储器*CDPAC2;AC2二
AC2+(*AR1)*(*CDP)
执行后
AC2 00EC3F 8000
AR1 0302
CDP 0202
ACOV2 ------------------
0302 FE00
数据存储器0302 FE00
0202 0040 0020
0040 (2)MACMR un s(*AR2+),u
ns(*AR3+),AC3;AC3=(*AR2)*(*AR3)+AC3 执行前
行前
AC3 AR2 AR3 00 2300 CE00
0302
;AC3=AR2+1,AR3=AR3+
1
执行后
执行后
AC3 00 9221 0000
AR2 0302
0202
AR3 0202
数据存储器
0020

(5)乘减指令 MASM(P128)
例题 24: MASR T1 AC0, AC1;AC1=AC1--AC0*T1
AC0 00 0000 EC00
AC0
00 0000 EC00
AC1
00 3400 0000
AC1
00 1680 0000
11
11
2000
2000 M40 0
M40
ACOV1
ACOV1
FRCT C55x 软件开发流程(程序转换成可执行的程序) C/C++源文件C/C++编译器(.c )
汇编源文件=汇编器=
ACOV -------
FR 「
0302
FE00
0302 FE00
数据存储器
0202 7000
FACT
COFF目标文件(.obj)链接器=>可执行的COFF文件(.out)
用户米用C/C++语言或汇编语言编写源文件(.C或.asm),经C或C++ 编辑器,汇编器生成COFF格式的目标文件(.obj),再用链接器进行链接,生成在C55x课执行的目标代码(.out)
程序阅读题
(1)mov *AR0+,AC0
add *AR0+,AC0
mov ACO, TO
(2)mppy *AR0+,*AR1,AC0
mpym *AR0+,*AR1+,AC1
add AC1,AC0
mpym *AR0+,*AR1+,AC1
add AC1, AC0
Mov AC0, T0
注释:(1)将AR0指向的数据方向放到累加器AC0中,AC0加1(2)将AR0指向的数据与累加器AC0相加,同时,AC0寄存器加1
(3)将累加器AC0的值写入T0寄存器
(4)将AR0和AR1指向的数据相乘放到AC0中,同时,AR0加1, AR1 加1
(5)将AR0和AR1指向的数据相乘放到AC1中,同时,AR0加1,
AR1 加1
(6)将AC1中的数据和AC0中的数据相加放到AC0中
(7)将ARO和AR1指向的数据相乘放到AC1中,同时,ARO加1, AR1 加1
(8)将AC1中的数据与AC0中的数据相加,放到AC0中
(9)将AC0中的数据放到寄存器TO中。

相关文档
最新文档