DSP学习笔记
- 格式:docx
- 大小:345.43 KB
- 文档页数:14
Knowledge问题谁在DSP的汇编语言中加入了NOP指令?NOP指令加入的条件是什么?About DSP1.DSP是实时数字信号处理的核心和标志。
2.DSP分为专用和通用两种类型。
专用DSP一般采用定点数据结构(一般不支持小数),数据结构简单,处理速度快;通用DSP灵活性好,但是处理速度有所降低。
3.DSP采用取指、译码、执行三个阶段的流水线(Pipeline)技术,缩短了执行时间,提高了运行速率。
DSP具有8个Functional unit,如果并行处理的话,以600MHz的时钟计算,如果执行的指令是single cycle指令,则可以4800MIPS(指令每秒)。
4.DSP的8个functional Unit,具有独特的功能,对滤波、矩阵运算、FFT(傅里叶变换)具有哈弗结构把指令空间与数据空间隔离的存储方式。
这样实现是为了实现指令的连续读取,而实现pipeline流水线结构。
传统哈弗结构:两个独立的存储空间,还使用独立总线。
让取指与执行存储独立,加快执行速度。
改进型哈弗结构:指令与数据的存储空间还是独立的。
但是使用公共的总线(地址总线与数据总线)。
这样实现的原因是因为出现了CACHE,数据的存储动作大部分被内部的CACHE 总线承接了,所以总线冲突的情况会大大减少。
同时让总线的结构与控制变得简单,CACHE 存储的速度也明显快于外设存储器。
冯诺依曼结构:是指令空间与数据空间共享的存放方式。
它不能实现pipeline的执行过程。
Pipeline(流水线)技术是把指令的取指-译码和指令的执行独立开来的技术。
虽然每条指令的过程还是要经过取指-译码-执行三个阶段最少3个CPU Cycle。
但是多个指令同时并行先后进行,保证总体的指令吞吐速率理想情况下可以保证在每个指令只要一个CPU CYCLE。
Pipeline技术必须要有哈弗结构支持,即必须把指令空间与数据空间隔离存放。
流水线阻断流水线中阻断现象也十分普遍,下面就各种阻断情况下的流水线性能进行详细分析。
dsp知识点总结一、DSP基础知识1. 信号的概念信号是指用来传输信息的载体,它可以是声音、图像、视频、数据等各种形式。
信号可以分为模拟信号和数字信号两种形式。
在DSP中,我们主要研究数字信号的处理方法。
2. 采样和量化采样是指将连续的模拟信号转换为离散的数字信号的过程。
量化是指将信号的幅度离散化为一系列离散的取值。
采样和量化是数字信号处理的基础,它们决定了数字信号的质量和准确度。
3. 傅里叶变换傅里叶变换是一种将时域信号转换为频域信号的方法,它可以将信号的频率分量分解出来,从而可以对信号进行频域分析和处理。
傅里叶变换在DSP中有着广泛的应用,比如滤波器设计、频谱分析等。
4. 信号处理系统信号处理系统是指用来处理信号的系统,它包括信号采集、滤波、变换、编解码、存储等各种功能。
DSP技术主要用于设计和实现各种类型的信号处理系统。
二、数字滤波技术1. FIR滤波器FIR滤波器是一种具有有限长冲激响应的滤波器,它的特点是结构简单、稳定性好、易于设计。
FIR滤波器在数字信号处理中有着广泛的应用,比如音频处理、图像处理等。
2. IIR滤波器IIR滤波器是一种具有无限长冲激响应的滤波器,它的特点是频率选择性好、相位延迟小。
IIR滤波器在数字信号处理中也有着重要的应用,比如通信系统、控制系统等。
3. 数字滤波器设计数字滤波器的设计是数字信号处理的重要内容之一,它包括频域设计、时域设计、优化设计等各种方法。
数字滤波器设计的目标是满足给定的频率响应要求,并且具有良好的稳定性和性能。
4. 自适应滤波自适应滤波是指根据输入信号的特性自动调整滤波器参数的一种方法,它可以有效地抑制噪声、增强信号等。
自适应滤波在通信系统、雷达系统等领域有着重要的应用。
三、数字信号处理技术1. 数字信号处理器数字信号处理器(DSP)是一种专门用于数字信号处理的特定硬件,它具有高速运算、低功耗、灵活性好等特点。
DSP广泛应用于通信、音频、图像等领域,是数字信号处理技术的核心。
1.DSP选型:主要考虑处理速度、功耗、程序存储器和数据存储器的容量、片内的资源,如定时器的数量、I/O 口数量、中断数量、DMA通道数等。
DSP的主要供应商有TI,ADI,Motorola,Lucent和Zilog等,其中TI占有最大的市场份额。
选择DSP可以根据以下几方面决定:1)速度:DSP速度一般用MIPS或FLOPS表示,即百万次/秒钟。
根据您对处理速度的要求选择适合的器件。
一般选择处理速度不要过高,速度高的DSP,系统实现也较困难。
2)精度:DSP芯片分为定点、浮点处理器,对于运算精度要求很高的处理,可选择浮点处理器。
定点处理器也可完成浮点运算,但精度和速度会有影响。
3)寻址空间:不同系列DSP程序、数据、I/O 空间大小不一,与普通MCU不同,DSP在一个指令周期内能完成多个操作,所以DSP的指令效率很高,程序空间一般不会有问题,关键是数据空间是否满足。
数据空间的大小可以通过DMA的帮助,借助程序空间扩大。
4)成本:一般定点DSP的成本会比浮点DSP的要低,速度也较快。
要获得低成本的DSP系统,尽量用定点算法,用定点DSP。
5)实现方便:浮点DSP的结构实现DSP系统较容易,不用考虑寻址空间的问题,指令对C语言支持的效率也较高。
6)内部部件:根据应用要求,选择具有特殊部件的DSP。
如:C2000适合于电机控制;OMAP适合于多媒体等。
1)C5000系列(定点、低功耗):C54X,C54XX,C55X相比其它系列的主要特点是低功耗,所以最适合个人与便携式上网以及无线通信应用,如手机、PDA、GPS等应用。
处理速度在80MIPS--400MIPS之间。
C54XX和C55XX一般只具有McBSP同步串口、HPI并行接口、定时器、DMA等外设。
值得注意的是C55XX提供了EMIF外部存储器扩展接口,可以直接使用SDRAM,而C54XX则不能直接使用。
两个系列的数字IO 都只有两条。
2)C2000系列(定点、控制器):C20X,F20X,F24X,F24XX ,C28x该系芯片具有大量外设资源,如:A/D、定时器、各种串口(同步和异步),WATCHDOG、CAN总线/PWM 发生器、数字IO 脚等。
1GPIO作为通用I/O口使用a)EALLOW;//防止私自写或覆盖寄存器的内容,加了这句,接下来可以操作寄存器了b)GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为普通I/O功能c)GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // 1,设置为输出;0设置为输入d)EDIS;//加了这句,接下来不可以操作寄存器注:EALLOW,EDIS总是成对出现2中断过程(代码以配置SCIB模块的接收中断为例,LSPCLK是37.5MHz)中断共分三级,1,外设级;2,PIE级;3,CPU级;外设级的中断标志必须手动清零;PIE级和CPU级的中断标志位由硬件自动清零。
中断响应例程:第一步,配置中断源,即允许产生什么类型点中断。
例如,定时器中断,串口中断,外部中断等。
ScibRegs.SCICTL2.bit.RXBKINTENA =1;允许接收中断第二步,配置PIE(外部中断扩展)a) InitPieCtrl();//初始化Pie控制b) InitPieVectTable();//初始化Pie向量表控制c) EALLOW;d) PieVectTable.SCIRXINTB=&scibreceive;//指定中断服务程序地址e) EDIS;f) PieCtrlRegs.PIECTRL.bit.ENPIE=1;//使能从PIECTRL中读取中断向量g) PieCtrlRegs.PIEIER9.bit.INTx3=1;//使能SCIB的接收中断h) IER |= M_INT9;//允许外部中断i) EINT;j) ERTM;第三步,中断响应在中断服务程序里,必须用PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;//清楚中断已响应标识,再写自己等程序代码3串口配置InitScibGpio();scib_echoback_init();4AD转换InitAdc();//允许ADC时钟,带隙和参考电路上电,核中模拟电路上电AdcRegs.ADCTRL2.all = 0x2000;//ADC模块开始转换程序在FLASH运行时,需要加如下两句代码:(不知道具体原因)MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);InitFlash();。
1.数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。
输入信号可以是语音信号、传真信号,也可以是视频信号,还可以是传感器(如温度传感器)的输出信号。
输入信号经过带限滤波后,通过A/D转换器将模拟信号转换成数字信号。
根据采样定理,采样频率至少是输入带限信号最高频率的2倍,在实际应用中,一般为4倍以上。
数字信号处理一般是用DSP芯片和在其上运行的实时处理软件对输入数字信号按照一定的算法进行处理,然后将处理后的信号输出给D/A转换器,经D/A转换、内插和平滑滤波后得到连续的模拟信号。
3.数字信号处理的实现方法一般有以下几种:(1) 在通用型计算机上用软件实现。
一般采用C语言、MA TLAB语言等编程,主要用于DSP算法的模拟与仿真,验证算法的正确性和性能。
优点是灵活方便,缺点是速度较慢。
(2) 在通用型计算机系统中加上专用的加速处理器实现。
专用性强,应用受到很大的限制,也不便于系统的独立运行。
(3) 在通用型单片机(如MCS-51、MCS-96系列等)上实现。
只适用于简单的DSP算法,可用于实现一些不太复杂的数字信号处理任务,如数字控制。
(4) 用通用型可编程DSP芯片实现。
与单片机相比,DSP芯片具有更加适合于数字信号处理的软件和硬件资源,可用于复杂的数字信号处理算法。
特点是灵活、速度快,可实时处理。
(5) 用专用型DSP芯片实现。
在一些特殊的场合,要求信号处理速度极高,用通用型DSP芯片很难实现,例如专用于FFT、数字滤波、卷积、相关等算法的DSP芯片,这种芯片将相应的信号处理算法在芯片内部用硬件实现,无须进行编程。
处理速度极高,但专用性强,应用受到限制。
在上述几种实现方法中,(1)~(3)和(5)都有使用的限制,只有(4)才使数字信号处理的应用打开了新的局面。
4.DSP系统的特点基于通用DSP芯片的数字信号处理系统与模拟信号处理系统相比,具有以下优点:(1) 精度高,抗干扰能力强,稳定性好。
1、cj431电压基准芯片,2.5v2、电平标准3、驱动器74HC245(为增强PWM的驱动负载能力)4、增加输入端的抗干扰能力:在芯片的输入端加上拉电阻加电源或者下拉电阻接地,没有用到的采样端口尽量不要悬空。
5、D/A电路方案通用扩展语言GEL和c相似,但是有所不同。
GEL语言是C语言的一个子集。
与c语言不同的是gel不需要指定函数返回值的类型。
Gel中的while语句和c中的while语句相同,gel不支持标准c的break和continue语句6、一个完整的dsp工程包括头文件(.h),库文件(.lib),源文件(.c),以及配置文件.Cmd使用关键字MENUITEM可以在gel菜单下选择用户自定义的菜单项,然后用hotmenu、dialog或slider等关键字,在这个新的下拉菜单中添加新的菜单项。
7、关于添加文件遇到的问题8、变量查找:edit→find:Ctrl+f9、调试时,添加断点的快捷方法如下点击图上的小手即可10、单步调试第一个的意思是单击一步走一步,第二个的意思是指在单步运行时遇到子函数不进入子函数内部进行而是把它当成一步来执行,第三个的意思是当执行到子函数内部时使用这个按钮就可以执行完剩下的部分返回上一层函数。
如果想在一个窗口内同时看到c和汇编,则有操作View→mixed source/asm 11、观察变量右击变量→add to watch window 可以得到变量的值、类型、地址等。
12、位域定义、结构体以及共同体的知识结构体先定义再声明Union SCIFFCT_REG {Uint16 all;Struct SCIFFCT_BITS bit;};//---------------------------------------------------------------------------// SCI Register File://Struct SCI_REGS {Union SCICCR_REG SCICCR; // Communications control register Union SCICTL1_REG SCICTL1; // Control register 1Uint16 SCIHBAUD; // Baud rate (high) registerUint16 SCILBAUD; // Baud rate (low) registerUnion SCICTL2_REG SCICTL2; // Control register 2Union SCIRXST_REG SCIRXST; // Receive status registerUint16 SCIRXEMU; // Receive emulation buffer registerUnion SCIRXBUF_REG SCIRXBUF; // Receive data bufferUint16 rsvd1; // reservedUint16 SCITXBUF; // Transmit data bufferUnion SCIFFTX_REG SCIFFTX; // FIFO transmit registerUnion SCIFFRX_REG SCIFFRX; // FIFO receive registerUnion SCIFFCT_REG SCIFFCT; // FIFO control registerUint16 rsvd2; // reservedUint16 rsvd3; // reservedUnion SCIPRI_REG SCIPRI; // FIFO Priority control};//---------------------------------------------------------------------------// SCI External References & Function Declarations://Extern volatile struct SCI_REGS SciaRegs;Extern volatile struct SCI_REGS ScibRegs;由于scihbaud和scilbaud定义时为unit16型的,所以不能用.all或者.bit 的方式来访问,只能直接给寄存器整体进行赋值。
GPIO寄存器一共分为两大类:一类是控制寄存器:主要由功能控制寄存器GPxMUX,方向控制寄存器GPxDIR,输入限定控制寄存器GPxQUAL组成。
另一类是数据寄存器:主要由数据寄存器GPxDAT,置位寄存器GPxSET,清除寄存器GPxCLEAR和取反寄存器GPxTOGGLE 组成。
假设已经设置为数字I/O口,那么输入输出又是怎么定义的呢?如下所示:输入限定控制寄存器、可以通过这个寄存器对输入信号进行量化限制、改善输入信号从而去除不希望的噪声污染。
连续采样到多个相同的电平时才认为是该电平、滤除了干扰信号。
LED闪烁实验系统初始化函数、GPIO初始化函数、主函数、延时子函数在寄存器中结构体的运用Struct GPADIR_BITS { // bits descriptionUint16 GPIOA0:1; // 0Uint16 GPIOA1:1; // 1Uint16 GPIOA2:1; // 2Uint16 GPIOA3:1; // 3Uint16 GPIOA4:1; // 4Uint16 GPIOA5:1; // 5Uint16 GPIOA6:1; // 6Uint16 GPIOA7:1; // 7Uint16 GPIOA8:1; // 8Uint16 GPIOA9:1; // 9Uint16 GPIOA10:1; // 10Uint16 GPIOA11:1; // 11Uint16 GPIOA12:1; // 12Uint16 GPIOA13:1; // 13Uint16 GPIOA14:1; // 14Uint16 GPIOA15:1; // 15};Union GPADIR_REG {Uint16 all;Struct GPADIR_BITS bit;};第10章 CPU定时器32位定时器周期寄存器、32位计数器寄存器、16位定时器分频器寄存器(决定了每一步的时间)、16位的预定标计数器寄存器只有定时器0是能用的第11章中断系统可屏蔽中断、不可屏蔽中断中断使能寄存器IER某一位为1则屏蔽该对应中断高两位保留、低14位对应着相应的14个中断中断标志寄存器IFR:说明CPU中断提出了相应中断请求若相对应位为0、则说明没有未处理的对应中断若相对应位为1、则说明至少有一个对应中断没有处理INTM 总开关PIE中断控制器组的概念:被分布在不同的组里μC/OS-II由Micrium公司提供,是一个可移植、可固化的、可裁剪的、占先式多任务实时内核,它适用于多种微处理器,微控制器和数字处理芯片(已经移植到超过100种以上的微处理器应用中)。
一、三相电压源变换器的结构1.1 自励式三相电压源变换器的原理图图1 自励式三相电压源变换器的原理结构图1.1.1 原理结构图(如图1所示)1.1.2 各元件的作用与选择:交流侧连接电感L :滤波,减小高次谐波电压造成的脉动,同时起到将变换器和交流电网隔离的作用。
直流侧的电容C :整流时,保持输出直流电压稳定,并滤出输出电压的低次谐波成分;逆变时,为逆变的正常工作提供电压支撑,相当于电压源,保证电压基本无脉动;当交流侧为阻感负载时,需要提供无功功率,直流电容起到缓冲无功能量的作用,反并联的二极管,起到将交流侧到直流侧反馈的无功能量提供通道的作用。
往往该二极管选择快速关断二极管。
1.1.3 何谓自励与他励?自励时直流电压如何建立或控制的?自励:不借助于外部其他辅助电路的激励,由该电路自身的特点,完成对直流侧电压的建立。
自励时直流侧电压建立过程如下:在第一阶段,关断所有的IGBT 器件,利用反向并联的二极管对直流电容进行充电, 这时相当于三相全桥整流。
一般而言, 经过第一阶段的充电,直流侧电压可达520V 左右。
待直流电压稳定后,进行第二阶段的充电,即斩波升压。
任选一支IGBT ,在适当时刻进行开关操作。
如图1所示,以系统线电压AB U 作为同步参考信号,当AB U 为负时,开通VT1,这时有电流流经VT1和VD3经过一段时间后,La 和Lb 中积聚了一定的能量,关断VT1,该回路电流突变,于是电感La 和Lb 中的磁场能转化为电场能而产生过电压。
该过电压与系统电压一起通过二极管对直流电容充电,这时还是相当于三相全桥整流,只不过三相电压幅值更高而已。
重复上述操作,直至直流电压满足要求。
采用这种方法可以做到直流侧电压升压无超调。
直流侧电压达到要求之后,打开所有PWM 脉冲,变换器即并入电网。
他励:就是借助于外部辅助电路,一般为整流器,来为逆变器建立直流侧电压的过程。
充电达到并网的条件即可并网。
逆变器输出电压如何与电网电压实现同步,这是并网变换器的共性问题。
R4.3 软件开发语言(1)汇编语言高效指令,代码效率高,底层控制灵活,实时性好;指令集掌握困难,程序可读性,可维护性可移植性差,流程控制困难,开发周期长;适用于运算量大、实时性要求高的场合。
(2)C语言程序可读性、可维护性、可移植性好,修改、升级方便,流程控制容易,开发周期短;某些硬件控制不便,实时性不好;适用于运算量小,实时性要求不高的场合。
(3)汇编与C混合编程。
综合利用两种语言的优越性,用C语言实现流程控制,用汇编语言实现时序或效率要求严格的核心程序。
三者各有所长,技术的发展使得DSP、通用计算机、单片机相互借鉴对方的优点,互相取长补短。
现在,PC机及部分单片机内部都有硬件乘法器;单片机内部也有了通用计算机和DSP内部才有的流水线作业(但规模小些);而DSP内部也有了一定规模的高速缓存。
吸收Intel的嵌入式系统芯片和系统软件的优点。
有的DSP内部集成了高速运行的的DSP内核及控制功能丰富的嵌入式处理器内核。
例如,内部集成有TI公司的C54xCPU内核和ARM公司的ARM7TDMIE内核的DSP,既具有高速的数据处理能力,又有各种类型的外设接口和位控能力,大大拓宽DSP在控制领域的应用。
DSP在注重高速的同时,也在发展自己的低价位控制芯片。
美国Cygnal公司的C8051F020 8位单片机,内部采用流水线结构,大部分指令的完成时间为1或2个时钟周期,峰值处理能力为25MIPS。
片上集成有8通道A/D,两路D/A,两路电压比较器,内置温度传感器、定时器、可编程数字交叉开关和64个通用I/O口、电源监测、看门狗、多种类型的串行总线(两个UART、SPI等)。
DSP工程工程是指编译dsp程序时的结构。
所有第VisualDSP++的开发都出现在工程内,工程文件(.DPJ)存储着程序的编译信息。
工程开发工程开发的步骤一个典型的工程包括模拟、评估、仿真3个阶段。
模拟:在没有真正的硬件支持的条件下也可以编译、编辑和调试DSP程序。
DSP学习笔记引言:学习DSP的时间有两个多月了,收获很多新知识,我们要每天都有进步才行,以下内容没有特别的顺序,跟具自己的学习情况写的,如果有不对的地方希望指出来,如果有不懂得也可以问我,大家相互交流很重要,我的一个邮箱:baijc@欢迎联系!建立新工程过程中:问题1:"GPIO_Study.c", line 61: fatal error: could not open source file "DSP280x_Device.h"1 fatal error detected in the compilation of "GPIO_Study.c".解决方法:因为project →build options→compiler→preprocessor中,要包含的头文件的地址没有加进去,你可以找到头文件的地址,然后加进去。
问题2:undefined first referencedsymbol in file--------- ----------------_c_int00 D:\DSPstudy\test3\Debug\DSP280x_CodeStartBranch.objFS$$MPY D:\DSPstudy\test3\Debug\DSP280x_CpuTimers.objFS$$TOL D:\DSPstudy\test3\Debug\DSP280x_CpuTimers.obj>> error: symbol referencing errors - './Debug/test3.out' not built或者下面的问题:undefined first referencedsymbol in file--------- ----------------_c_int00 D:\DSPstudy\GPIO_Study\Debug\DSP280x_CodeStartBranch.obj>> error: symbol referencing errors - './Debug/GPIO_Study.out' not built解决办法都是下面:这个问题是因为没有加在库文件,请在project →build options→linker→libraries 中加入rts2800.lib。
问题3:>> warning: creating .stack section with default size of 400 (hex) words.Use-stack option to change the default size.>> error: can't allocate .stack, size 00000400 (page 1) in RAMM1 (avail:00000380)>> error: errors in input - ./Debug/GPIO_Study.out not built解决办法:这个问题是关于堆栈存储大小的问题,他是说,创建堆栈段使用与设置400个字,并建议在“堆栈操作”中改变这个与设置。
这时,需要进行如下修改就可通过:project→ build options→Linker→basic,在Stack Size(-stack):填入800或者其他小于1024的数值。
调试程序:在编译完成之后,要来下载程序并进行功能调试。
File→Load Program,在工程文件夹下面的Debug文件夹下,选中**.out文件,点击打开,便开始下载程序了。
将**.out文件下载到目标板上2812的RAM中。
注意,这里是调试,所以将程序下载到RAM。
等到最后您要固化程序的时候,就得下载到FLASH了,因为断电之后,RAM里面所有的数据都会消失。
(Run和Animate的区别,Run是如果遇到断点的话它就停下来了。
而Animate 就算遇到断点时先停止DSP内核,刷新窗口,然后接着继续启动运行,常用来连续刷新变量窗口和生成graph图形等)——知识储备。
添加断点:加上断点的方法很简单,只要在该行代码前双击就行。
双击之后,这行代码前面会出现一个红色圆块。
另外一种添加断点的方法,就是在刚才的编译工具栏上,点一下那个小手图形的按钮,前提是你要把光标移动到想要设置断点的哪一行上。
使用watch window:Watch window的作用是来观察程序运行过程中的各个变量的值。
调用watch window的方法是点击菜单栏的"View ","watch window",这时watch window就会显示在CCS下方的信息区域;选中所要观察的变量,然后右键,在右键菜单中选择add to watch window。
调试代码观察:我们在调试程序的时候经常想让程序从Main函数开使运行,点Debug→Go main。
既能看到源文件中代码的执行情况,又能看到汇编指令的执行情况View→Mixed Source/Asm;关于F2812中用C语言来实现中断的说明1.首先在.cmd中定位系统中断表:MEMORY{PAGE 0 : ......................................PAGE 1 : ......................................PIE_VECT : origin = 0x000D00, length = 0x000100 ......................................}SECTIONS{ ...................................PieVectTable : > PIE_VECT, PAGE = 1 .....................................}2.在C中制定该中断的结构体:#pragma DATA_SECTION(PieVectTable,"PieVectTable");struct PIE_VECT_TABLE PieVectTable;(在DSP28_GlobalVariableDefs.C中初始化)3.用一组常数(按照中断向量的顺序)初始化该名字为PIE_VECT_TABLE的表:typedef interrupt void(*PINT)(void);这里有些一问,一下应该为函数名??// Define Vector Table:struct PIE_VECT_TABLE {// Reset is never fetched from this table.// It will always be fetched from 0x3FFFC0 in either// boot ROM or XINTF Zone 7 depending on the state of// the XMP/MC input signal. On the F2810 it is always// fetched from boot ROM.PINT PIE1_RESERVED;PINT PIE2_RESERVED;PINT PIE3_RESERVED;PINT PIE4_RESERVED;PINT PIE5_RESERVED;PINT PIE6_RESERVED;PINT PIE7_RESERVED;PINT PIE8_RESERVED;PINT PIE9_RESERVED;PINT PIE10_RESERVED;PINT PIE11_RESERVED;PINT PIE12_RESERVED;PINT PIE13_RESERVED;// Non-Peripheral Interrupts:PINT XINT13; // XINT13PINT TINT2; // CPU-Timer2PINT DATALOG; // Datalogging interruptPINT RTOSINT; // RTOS interruptPINT EMUINT; // Emulation interruptPINT XNMI; // Non-maskable interruptPINT ILLEGAL; // Illegal operation TRAPPINT USER0; // User Defined trap 0PINT USER1; // User Defined trap 1PINT USER2; // User Defined trap 2PINT USER3; // User Defined trap 3PINT USER4; // User Defined trap 4PINT USER5; // User Defined trap 5PINT USER6; // User Defined trap 6PINT USER7; // User Defined trap 7PINT USER8; // User Defined trap 8PINT USER9; // User Defined trap 9PINT USER10; // User Defined trap 10PINT USER11; // User Defined trap 11// Group 1 PIE Peripheral Vectors:PINT PDPINTA; // EV-APINT PDPINTB; // EV-BPINT rsvd1_3;PINT XINT1;PINT XINT2;PINT ADCINT; // ADCPINT TINT0; // Timer 0PINT WAKEINT; // WD ..........................// Group 12 PIE Peripheral Vectors:PINT rsvd12_1;PINT rsvd12_2;PINT rsvd12_3;PINT rsvd12_4;PINT rsvd12_5;PINT rsvd12_6;PINT rsvd12_7;PINT rsvd12_8;};然后在使我们在.cmd文件中定义的表有以上属性:extern struct PIE_VECT_TABLE PieVectTable;(在.h文件中)4.初始化该表(在.c文件中)使之能够为主程序所使用:const struct PIE_VECT_TABLE PieVectTableInit = {PIE_RESERVED, // Reserved spacePIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,// Non-Peripheral InterruptsINT13_ISR, // XINT13 or CPU-Timer 1INT14_ISR, // CPU-Timer2DATALOG_ISR, // Datalogging interruptRTOSINT_ISR, // RTOS interruptEMUINT_ISR, // Emulation interruptNMI_ISR, // Non-maskable interruptILLEGAL_ISR, // Illegal operation TRAPUSER0_ISR, // User Defined trap 0USER1_ISR, // User Defined trap 1USER2_ISR, // User Defined trap 2USER3_ISR, // User Defined trap 3USER4_ISR, // User Defined trap 4USER5_ISR, // User Defined trap 5USER6_ISR, // User Defined trap 6USER7_ISR, // User Defined trap 7USER8_ISR, // User Defined trap 8USER9_ISR, // User Defined trap 9USER10_ISR, // User Defined trap 10USER11_ISR, // User Defined trap 11// Group 1 PIE VectorsPDPINTA_ISR, // EV-APDPINTB_ISR, // EV-Brsvd_ISR,XINT1_ISR,XINT2_ISR,ADCINT_ISR, // ADCTINT0_ISR, // Timer 0WAKEINT_ISR, // WD ..........................// Group 12 E Vectorsrsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,};//---------------------------------------------------------------------------// InitPieVectTable://---------------------------------------------------------------------------// This function initializes the PIE vector table to a known state. // This function must be executed after boot time.//void InitPieVectTable(void){int16 i;Uint32 *Source = (void *) &PieVectTableInit;Uint32 *Dest = (void *) &PieVectTable;EALLOW;for(i=0; i < 128; i++)*Dest++ = *Source++;EDIS;// Enable the PIE Vector TablePieCtrl.PIECRTL.bit.ENPIE = 1;}5.中断服务程序:让以上的数值指向你所要的服务程序,例如:PieVectTable.TINT2 = &ISRTimer2;那么,ISRTimer2也就成了中断服务程序,×××切记:一定要在主程序的开始先声明该程序:interrupt void ISRTimer2(void);..........................然后按照您的需要编制该程序:interrupt void ISRTimer2(void){CpuTimer2.InterruptCount++;}编程中遇到的问题:1、line 257: warning: last line of file ends without a newline;解决方法:点击出现的问题条,看光标定位在哪里,然后一点点删除,直到把编程的文字删除,最后把删除的写出来,回车就行了,因为回车的格式要在编辑状态哈哈!28016的定时器笔记学过2812的人会知道,2812的定时器和28016的定时器的寄存器很不一样。