DSP复习资料
DSP 复习资料

DSP 复习资料:1、DSP(digital singnal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。
其工作原理是对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。
它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器,是数字化电子世界中日益重要的电脑芯片。
它的强大数据处理能力和高运行速度,是最值得称道的两大特色。
2、DSP芯片一般具有如下主要特点:在一个指令周期内可以完成一次乘法和一次加法;可以并行执行多个操作;快速的中断处理和硬件I/O支持;存储器采用哈佛结构;主要用于信号处理。
3、一个典型的DSP系统应包括抗混叠滤波器、数据采集A/D转换器、数字信号处理器DSP、D/A转换器和低通滤波器等组成。
4、按数据格式分为定点DSP和浮点DSP两类。
按数据的定点格式工作的DSP芯片称为定点DSP;按数据的浮点格式工作的DSP芯片称为浮点DSP。
其中C2x、C24x称为C2000系列,主要用于数字控制系统; C54x、C55x称为C5000系列,主要用于功耗低、便于携带的通信终端; C62x、C64x和C67x称为C6000系列,主要用于高性能复杂的通信系统,如移动通信基站。
5、链接命令文件(·cmd文件)指定存储器的结构和段的定位,有MEMORY和SECTIONS两条指令。
MEMORY伪指令用来定义目标系统的存储器配置空间,包括对存储器各部分命名,以及规定它们的起始地址和长度。
SECTIONS伪指令用来指定链接器将输入段组合成输出段方式,以及输出段在存储器中的位置,也可用于指定子段。
6、DSP系统中流水线操作是各指令以机器周期为单位相差一个时钟周期,连续并行工作的情况。
其本质是DSP多条总线彼此独立地同时工作,使得同一条指令在不同机器周期内占用不同总线资源。
同时,不同指令在同一机器周期内占用不同总线资源。
DSP复习资料

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复习资料1、DSP 芯⽚的结构?答:DSP 是改进的哈佛结构 (80C51是哈佛结构)。
冯.诺依曼结构与哈佛结构的区别是地址空间和数据空间分开与否。
冯诺依曼结构数据空间和地址空间不分开,哈佛结构数据空间和地址空间是分开的。
哈佛结构的特点:使⽤两个独⽴的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存;使⽤独⽴的两条总线,分别作为CPU 与每个存储器之间的专⽤通信路径,⽽这两条总线之间毫⽆关联。
改进的哈佛结构,其结构特点为:使⽤两个独⽴的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存,以便实现并⾏处理;具有⼀条独⽴的地址总线和⼀条独⽴的数据总线,利⽤公⽤地址总线访问两个存储模块(程序存储模块和数据存储模块),公⽤数据总线则被⽤来完成程序存储模块或数据存储模块与CPU 之间的数据传输,改进的哈佛结构在哈佛结构的基础上⼜加以改进,即使得程序代码和数据存储空间之间也可以进⾏数据的传送。
TMS320LF2407A 采⽤改进的哈佛结构,芯⽚内部具有六条16位总线,即程序地址总线(PAB )、数据读地址总线(DRAB )、数据写地址总线(DWAB )、程序读总线(PRDB )、数据读总线(DRDB )、数据写总线(DWEB ),其程序存储器总线和数据存储器总线相互独⽴,⽀持并⾏的程序和操作数寻址,因此CPU 的读/写可在同⼀周期内进⾏,这种⾼速运算能⼒使⾃适应控制、卡尔曼滤波、神经⽹络、遗传算法等复杂控制算法得以实现。
结构⽰意图如下:2、什么是流⽔线技术?DSP 是不是具有流⽔线技术(pipeline) ?答:流⽔线技术是将各指令的各个步骤重叠起来执⾏,⽽不是⼀条指令执⾏完成之后,才开始执⾏下⼀条指令。
计算机在执⾏⼀条指令时,总要经过取指、译码、取数、执⾏运算等步骤,需要若⼲个指令周期才能完成。
流⽔线技术是将各指令的各个步骤重叠起来执⾏,⽽不是⼀条指令执⾏完成之后,才开始执⾏下⼀条指令。
DSP复习资料.pdf

3、DSP有哪几种分类方式,可将DSP芯片分成哪几类?答:DSP有三种分类方式:按基础特性分类、按数据格式分类和按用途分类。
按基础特性可分为静态DSP芯片和一致性DSP芯片;按数据格式可分为定点DSP芯片和浮点DSP芯片;按照用途可分为通用型DSP芯片和专用型DSP芯片。
7、冯·诺伊曼结构和哈佛结构的主要区别是什么?与前者相比,哈佛结构有何优势?答:1)主要区别:冯·诺伊曼结构采用单存储空间,即程序指令和数据共用一个存储空间,使用单一的地址和数据总线。
哈佛结构采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线。
2)哈佛结构优势哈佛结构可独立编址和访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,极大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理。
8、以四级流水线为例,介绍DSP所采用的流水线技术。
答:计算单元在执行一条多周期指令时,总要经过取指、译码、取数、执行、写结果等步骤,需要若干指令周期才能完成。
流水线技术是将各指令的各个步骤重叠起来执行,而不是一条指令完成后,才开始执行下一条指令。
即在每个指令周期内,几个不同的指令均处于激活状态,每个指令处于不同的阶段。
如下图所示,在第N个指令取指令时,前面一个即第N-1个指令正在译码,而第N-2个指令正在取操作数,第N-3个指令则正在执行指令。
使用流水线技术后,尽管每一条指令的执行仍然要经过这些步骤,需要同样的指令周期数,但将一个指令段综合起来看,其中每一条指令的执行都是在一个指令周期内完成的。
10、数字信号处理的实现方法有哪几种?答:1)在通用的微型计算机(PC机)上用软件(如VB、VC语言)实现。
2)在通用的计算机系统中加上专用的加速处理机实现。
3)用单片机(如MCS-51、96系列等)实现。
4)用FPGA等产品实现数字信号处理算法。
5)用通用的可编程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期末复习资料2.DSP芯片的特点:哈佛结构:将程序空间和数据空间分开,可同时取指令和取操作数;(重要)多总线结构:一个机器周期可以多次访问程序空间和数据空间,其内部有P、C、D、E 4个总线;(重要)流水线结构:DSP执行一条指令需要取指、译码、取操作数和执行等几个阶段;(重要)多处理单元:算术逻辑运算单元、辅助寄存器、累加器、硬件乘法器等;特殊的DSP指令、指令周期短、运算精度高、硬件配置强。
3.TMS320系列DSP可分为:C2000(16位/32位定点DSP,主要运用控制领域)、C5000(16位定点DSP,用于高性能、低功耗的中高档应用场合)、C6000(32位DSP,高性能)系列。
4. TMS320C54X的主要特性:⑴多总线结构(1条程序总线、3条数据总线、4条对应地址总线);⑵192K字节可寻址空间(64K字程序存储器、64K字数据存储器以及64K字I/O空间);⑶片内有单寻址RAM(SRAM)和RAM(DRAM存储器。
5.TMS320VC5416-160有1个CPU、6. C54X的总线结构:C54X片内有8条16位主总线、4条程序/数据总线和4条相应的地址总线。
7.当处理器复位时,复位和中断向量都映像到程序空间的FF80h。
8.累加器A和B的差别在于:累加器A的31~16位可用于乘法器的一个输入。
9.桶形移位器的移位数可用一个立即数、状态寄存器ST1的累加器移位方式ASM或者T寄存器中最低的6位数值来定义。
10.指数编码器可以在单个周期内执行EXP指令,求的累加器中数据的指数值,并以2的补码形式存放在T寄存器中,可以用11.C54XCPU有3个状态寄存器:状态寄存器0(ST0)、状态寄存器1(ST1)、处理工作方式状态寄存器(PMST)。
12.C54X中断可分为可屏蔽中断和非屏蔽中断。
所有的软件中断都是非屏蔽的。
13.定时中断的周期:CLKOUT*(TDDR+1)*(PRD+1)14. C54X片内有一个主机接口(HPI)。
DSP复习资料

答:流水线作业就是使取址、译码、取操作数和执行指令等操作重叠执行。 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的时钟与系统控制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);}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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~0
AC0
AC1
AC2
AC3
●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汇编指令创建的自定义段也是为初始化段。
●伪指令:是汇编语言程序的重要组成部分,包括汇编指令和连接
指令两部分,伪指令用于处理汇编和连接过程,最后产生的目标文件不包括它们
●宏指令:程序中常常包含执行多次的程序段,可以定义一个宏来
代替它,而不必重复写代码,在需要该程序段时只需引用宏(p183) ●C55x的指令流水线:(1)第一阶段为取指阶段(2)第二阶段为执
行阶段
●C55x的堆指针:(1)数据堆栈指针SP(2)系统堆栈指针SSP,(3)一
个相关的扩展寄存器SPH。
●寄存器:(1)XSP:扩展数据堆栈指针(2)SP:数据堆栈指针(3)XSSP:
扩展系统堆栈指针。
(4)SSP:系统堆栈指针(5)SPH:XSP和XSSP 的高位部分
●连接器有两条伪指令:MEMORY和SECTIONS,连接器对程序的重新
定位P177(地址重新定位和运行时间重新定位)
●COFF文件中的符号:外部符号是指在一个模块中定义,而在另一
个模块中使用,它可以用。
def,.ref,。
global来定义
(1)。
def在当前模块中定义,并可在别的模块中引用的符号。
(2)。
ref在当前模块中引用,但在别的模块中定义的符号.
(3).global可以是上面的任何一种情况。
●TMS320C55X可以使用两种指令集:助记符指令集和代数集。
●C55x指令集按操作类型可以分为6种:算术运算指令,位操作指令,
扩展辅助寄存器操作指令,逻辑运算指令,程序操作指令. (1)加法指令ADD(P121)
例题18:(1)ADD*AR3+,T0,T1;AR3间接寻址得到的内容与T0的内容想加,结果装入T1,并将AR3增1
寄存器执行前寄存器执行后
AR3
AR3
T0
T0
T1 T1
CARRY 数据存储器
数据存储器
0302
0302
(2)ADD*AR1,〈〈TO,AC1,AC0
,将AR1寻址得到的内容左移T0位与AC1想加,结果装入AC0
寄存器
执行前
寄存器
执行后 ACO
AC0 AC1
AC1 T0 T0
AR1 AR1
SXMD SXMD
M40 M40
ACOV0 CARRY CARRY
数据存储器 数据存储器 0200 0200
(2)减法指令SUB(p123)
例题19:SUB uns (*AR1),BORROW ,AC0,AC1;将CARRY 位求反,AC0减去由AR1寻址得到的内容以及 ;CARRY 的内容,并将结果装入AC1
寄存器 执行前 寄存器 执行后
AC0
AC0 AC1
AC1
AR1
数据存储器 数据存储器 0302 0302 (3)乘法指令MPYM (P125) 例题22
MPY AC1,AC0 ;AC0=AC0*AC1
执行前 执行后 AC0
AC1
AC1
M40
FART
AC0V1
(4)乘加指令MACM(P127)
例题23:(1)MACMR
*AR1,*CDP,AC2;AC2=AC2+(*AR1)
*(*CDP)执行前
执行后
AC2 AC2
AR1 AR1
CDP CDP
数据存储器数据存储器
0202
(2)MACMR uns(*AR2+),uns(*AR3+),AC3;AC3=(*AR2)*(*AR3)+AC3
;AC3=AR2+1,AR3=AR3+1 执行前 执行后 行前 执行后 AC3
AC3
AR2
AR2 AR3 AR3
M4 M4
SATD
FRCT
数据存储器 数据存储器
0202
(5)乘减指令MASM(P128)
例题24:MASR T1,AC0,AC1;AC1=AC1--AC0*T1
AC0
AC1
AC1
T1
T1
M40
ACOV1 ACOV1
FRCT FACT
●C55x软件开发流程(程序转换成可执行的程序)
C/C++C/C++编译器(。
汇编器COFF目标文件(。
obj)链接器可执行的COFF文件(.out)用户采用C/C++语言或汇编语言编写源文件(。
C或。
asm),经C或C++编辑器,汇编器生成COFF格式的目标文件(.obj),再用链接器进行链接,生成在C55x课执行的目标代码(.out)
●程序阅读题
(1)mov *AR0+,AC0
add *AR0+,AC0
mov AC0,T0
(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)将AR0和AR1指向的数据相乘放到AC1中,同时,AR0加1,
AR1加1
(8)将AC1中的数据与AC0中的数据相加,放到AC0中(9)将AC0中的数据放到寄存器T0中。