資源描述:
《DSP28x定時(shí)器中斷設(shè)置步驟》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、DSP28Xcpu定時(shí)器設(shè)置步驟1.確定中斷向量的入口地址:EALLOW;PieVectTable.TINT0=&cpu_timer0_isr;PieVectTable.TINT1=&cpu_timer1_isr;PieVectTable.TINT2=&cpu_timer2_isr;EDIS;其中,cpu_timer0_isr函數(shù)是針對(duì)TINT0中斷向量的一個(gè)中斷服務(wù)函數(shù),&cpu_timer0_isr()是該函數(shù)的入口地址。2.使能PIE級(jí)及CPU級(jí)中斷向量:這個(gè)步驟由下面4類指令完成:(1)先找出TINT0中斷向量在PIE級(jí)向量表中所在組,及在這組中所處的優(yōu)先級(jí)
2、。例如差的TINT0向量位于PIE向量表中第一組的第7個(gè)中斷。則指令語(yǔ)句為:PieCtrlRegs.PIEIER1.bit.INTx7=1;//使能PIE中的TINT0,第一組第7個(gè)中斷(2)通過(guò)CPU級(jí)的賦值指令使能第一組INT1。IER
3、=M_INT1;//使能CPU級(jí)INT1中斷,CPU—Timer0鏈接到INT1中斷上。(3)通過(guò)以下指令EINT;//使能全局中斷INTMERTM;//使能全局實(shí)時(shí)中斷DBGM(4)使能PIE向量表,由下面一條指令完成:PieCtrlRegs.PIECRTL.bit.ENPIE=1;3.中斷服務(wù)函數(shù)中必須包含的指令:PieCt
4、rlRegs.PIEACK.all=PIEACK_GROUP1;//PIEACK_GROUP1=0x00014.準(zhǔn)備做好后,便開(kāi)始設(shè)置中斷請(qǐng)求周期直接調(diào)用CPU定時(shí)器配置函數(shù)ConfigCpuTimer(structCPUTIMER_VARS*Timer,floatFreq,floaPeriod)CinfigCpuTimer(&CpuTimer0,10,100);//中斷請(qǐng)求周期為16.67us5.啟動(dòng)定時(shí)器中斷CpuTimer0Regs.TCR.all=0x4000;CpuTimer0Regs.TCR.bit.TSS=0;6.在終端服務(wù)函數(shù)中寫所需指令要求:Int
5、erruptvoidcpu_timer0_isr(void){……PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;}7.實(shí)用例程:以1秒的中斷周期,將GPIO0口進(jìn)行點(diǎn)位翻轉(zhuǎn),即產(chǎn)生頻率為1HZ的方波。#include"DSP2802x_Device.h"#include"DSP2802x_GlobalPrototypes.h"interruptvoidcpu_timer0_isr(void);voidgpio_setup(void);intmain(void){InitSysCtrl();DINT;IER=0X0000;IFR=0X000
6、0;InitPieCtrl();InitPieVectTable();gpio_setup();//**********************************************************************InitCpuTimers();MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);InitFlash();EALLOW;PieVectTable.TINT0=&cpu_timer0_isr;EDIS;PieCtrlRegs.PIEIER1.bit.INTx
7、7=1;IER
8、=M_INT1;EINT;ERTM;PieCtrlRegs.PIECTRL.bit.ENPIE=1;ConfigCpuTimer(&CpuTimer0,60,1000000);CpuTimer0Regs.TCR.all=0x4000;CpuTimer0Regs.TCR.bit.TSS=0;//**********************************************************************GpioDataRegs.GPASET.bit.GPIO0=1;GpioDataRegs.GPASET.bit.GPIO1
9、=1;GpioDataRegs.GPASET.bit.GPIO2=1;GpioDataRegs.GPASET.bit.GPIO3=1;while(1){;}}interruptvoidcpu_timer0_isr(void){CpuTimer0.InterruptCount++;GpioDataRegs.GPATOGGLE.bit.GPIO0=1;GpioDataRegs.GPATOGGLE.bit.GPIO1=1;GpioDataRegs.GPATOGGLE.bit.GPIO2=1;GpioDataRegs.GPATOGGLE.bit.GPIO3=1;PieC