DSP原理与应用TheTechnology&ApplicationsofDSPs北京交通大学电气工程学院夏明超郝瑞祥万庆祝mchxia@bjtu.edu.cnhaorx@bjtu.edu.cnqzhwan@bjtu.ed.cnDSP原理与应用2020年2月29日2第二章:DSP系统开发第2.1节概述第2.2节DSP汇编语言概述及汇编程序设计第2.3节DSPC语言程序设计第2.4节DSPC与汇编混合编程第2.5节DSP程序烧写习题DSP原理与应用2020年2月29日3第2.1节概述汇编语言:开发的效率高,程序执行速度快,而且可以合理利用芯片的硬件资源开发难度较大,开发周期长,可读性和可移植性差。C语言开发:具有兼容性和可移植的优点,有利于缩短开发周期和减少开发难度在运算量较大的情况下,C代码的效率还是无法和手工编写的汇编代码的效率相比,比如FFT运算,C和汇编的混合编程则可以充分利用前两者的优点,以达到最佳利用DSP资源的目的。C和汇编语言混合编程必须遵循相关函数调用规则和寄存器调用规则,否则会带来意想不到的问题。DSP原理与应用2020年2月29日4第2.1节概述CCS开发实例演示DSP原理与应用2020年2月29日5第二章:DSP系统开发第2.1节概述第2.2节DSP汇编语言概述及汇编程序设计第2.3节DSPC语言程序设计第2.4节DSPC与汇编混合编程第2.5节DSP程序烧写习题DSP原理与应用2020年2月29日6第2.2节DSP汇编语言概述及汇编程序设计汇编语言:累加,算术计算和逻辑运算辅助寄存器和数据页操作TREG,PREG和乘法指令直接内存访问指令(DMA)和IO操作指令程序空间访问指令跳转指令、寄存器操作指令浮点运算指令汇编程序设计:生成可执行代码过程示例文件DSP原理与应用2020年2月29日7第2.2.1累加,算术计算和逻辑运算DSP原理与应用2020年2月29日8第2.2.1累加,算术计算和逻辑运算DSP原理与应用2020年2月29日9第2.2.1累加,算术计算和逻辑运算DSP原理与应用2020年2月29日10第2.2.1累加,算术计算和逻辑运算DSP原理与应用2020年2月29日11第2.2.2辅助寄存器和数据页操作DSP原理与应用2020年2月29日12第2.2.2辅助寄存器和数据页操作DSP原理与应用2020年2月29日13第2.2.3TREG,PREG和乘法指令DSP原理与应用2020年2月29日14第2.2.3TREG,PREG和乘法指令DSP原理与应用2020年2月29日15第2.2.3TREG,PREG和乘法指令DSP原理与应用2020年2月29日16第2.2.4直接内存访问(DMA)和IO操作指令DSP原理与应用2020年2月29日17第2.2.5程序空间访问指令DSP原理与应用2020年2月29日18第2.2.6跳转指令DSP原理与应用2020年2月29日19第2.2.7寄存器操作指令DSP原理与应用2020年2月29日20第2.2.7寄存器操作指令DSP原理与应用2020年2月29日21第2.2.7寄存器操作指令DSP原理与应用2020年2月29日22第2.2.8浮点运算指令浮点数简介(IEEE754)单精度浮点数:1位符号位,8位指数,23位有效数IEEE754-IEEEStandard754forBinaryFloatingPointArithmetic127)...(2)1(2210EebbbeSSEM3130……………2322………………………………0符号指数尾数单精度浮点数范围:±3.4028235*1038在此范围内也无法精确表述所有浮点数精度:1.19209290*10-38可精确表述的数必须可以用2的指数幂次组合描述DSP原理与应用2020年2月29日23第2.2.8浮点运算指令浮点数简介(IEEE754)单精度浮点数:1位符号位,8位指数,23位有效数IEEE754-IEEEStandard754forBinaryFloatingPointArithmetic例:0011111101100110011001100110011016进制为:0X3F666666整形数为1063675494单精度下:符号位0(+)指数位E(01111110)2=126,e=-1尾数1100110011001100110011021.799999952316284179687510实际值0.89999997615814208984375DSP原理与应用2020年2月29日24第2.2.8浮点运算指令浮点数简介(IEEE754)单精度浮点数:1位符号位,8位指数,23位有效数IEEE754-IEEEStandard754forBinaryFloatingPointArithmetic单精度运算精度:加、减、乘、除、平方根、余数、将浮点格式的数舍入为整数值、在不同浮点格式之间转换、在浮点和整数格式之间转换以及比较。四种舍入方向:向最近数方向,向负无穷大,向正无穷大以及向0。五种类型的浮点异常是:无效运算、被零除、上溢、下溢和不精确。*常犯错误:f==0,应该为-efe。DSP原理与应用2020年2月29日25第2.2.8浮点运算指令8个浮点结果寄存器(RnH)浮点状态寄存器(STF)重复块寄存器TMS320C28xFloatingPointUnitandInstructionSetReferenceGuideDSP原理与应用2020年2月29日26第2.2.8浮点运算指令算术运算ABSF32:32位浮点数绝对值运算ADDF32:32位浮点数加法运算SUBF32:32位浮点数减法运算MPYF32:32位浮点数乘法运算,MACF32:32位浮点数乘加运算EINVF32:32位浮点数倒数运算(1/X)EISQRTF32:32位浮点数开方倒数运算(1/sqrt(x))NEGF32:32位浮点数取反CMPF32,MAXF32,MINF32:32位浮点数比较、最大、最小值DSP原理与应用2020年2月29日27第2.2.8浮点运算指令整数浮点数转换F32TOI16,F32TOI16R:32位浮点数转为16位整数F32TOI32:32位浮点数转为32位整数F32TOUI16,F32TOUI16R:32位浮点数转为16位无符号整数F32TOUI32:32位浮点数转为32位无符号数整数I16TOF32:16位整数转为32位浮点数I32TOF32:32位整数转为32位浮点数UI16TOF32:16位无符号整数转为32位浮点数UI32TOF32:32位无符号整数转为32位浮点数DSP原理与应用2020年2月29日28第2.2.8浮点运算指令寄存器操作MOV16:16位浮点数内存操作MOV32:32位浮点数内存操作MOVD32:32位浮点数内存操作及复制MOVF32:32位浮点数立即数内存操作MOVI32:32位浮点数立即数(16进制)内存操作MOVIZ32.MOVIZF32:浮点寄存器高16位操作MOVXI:浮点寄存器低16位操作MOVST0:STF内容放至ST0DSP原理与应用2020年2月29日29第2.2.8浮点运算指令寄存器操作TESTTF:测试STF中标志位SETFLAG:STF中标志位置位SAVEFLAG:保存STF寄存器内容ZERO,ZEROA:浮点寄存器清零SWAPF:浮点寄存器内容交换PUSH:压栈POP:出栈RESTORE:恢复RPTB:重复执行DSP原理与应用2020年2月29日30第2.2.9汇编程序设计-生成可执行代码DSP原理与应用2020年2月29日31第2.2.9汇编程序设计-示例文件.cmd文件:链接控制文件,用于定义目标的程序,数据,I/O存储映射.MEMEORY{PAGE0:/*ProgramMemory*/ZONE0:origin=0x004000,length=0x001000/*XINTFzone0*/RAML0:origin=0x008000,length=0x001000/*on-chipRAMblockL0*/RAML1:origin=0x009000,length=0x001000/*on-chipRAMblockL1*/RAML2:origin=0x00A000,length=0x001000/*on-chipRAMblockL2*/RAML3:origin=0x00B000,length=0x001000/*on-chipRAMblockL3*/ZONE6A:origin=0x100000,length=0x00FC00/*XINTFzone6-programspace*/ZONE7:origin=0x200000,length=0x100000/*XINTFzone7*/FLASHH:origin=0x300000,length=0x008000/*on-chipFLASH*/……}DSP原理与应用2020年2月29日32第2.2.9汇编程序设计-示例文件.cmd文件:链接控制文件,用于定义目标的程序,数据,I/O存储映射.SECTIONS{/*Allocateprogramareas:*/.cinit:FLASHAPAGE=0.pinit:FLASHA,PAGE=0.text:FLASHAPAGE=0codestart:BEGINPAGE=0ramfuncs:LOAD=FLASHD,RUN=RAML0,LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),PAGE=0csmpasswds:CSM_PWLPAGE=0csm_rsvd:CSM_RSVDPAGE=0/*Allocateuninitalizeddatasections:*/.stack:RAMM1PAGE=1.ebss:RAML4PAGE=1.esysmem:RAMM1PAGE=1……}DSP原理与应用2020年2月29日33第2.2.9汇编程序设计-示例文件.h文件:标号,地址,中断向量等定义;Filename:280x.hIMR.set0004h;InterruptMaskRegisterIFR.set0006h;InterruptFlagRegister;SystemconfigurationandinterruptregistersSCSR1.set7018h;SystemControl&Statusregister.1SCSR2.set7019h;SystemControl&Statusregister.2DINR.set701Ch;DeviceIdentificationNumberregister.PIVR.set701Eh;PeripheralInterruptVectorregister.PIRQR0.set7010h;PeripheralInterruptRequestregister0PIRQR1.set7011h;PeripheralInterruptRequestregister1PIRQR2.set7012h;PeripheralInterruptRequestregister2PIACKR0.set7014h;PeripheralInterruptAcknowledgeregister0PIACKR1.set7015h;PeripheralInterruptAcknowledgeregister1PIACKR2.set7016h;PeripheralInterruptAcknowledgeregister2;Filename:vector.h.sectvectorsRSVECTBSTART;ResetVectorINT1BGISR1;Inte