資源描述:
《由TIMER1地比較模塊輸出一個PWM波形,.doc》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、//該程序用于測試DSP的CAPTURE模塊,由TIMER1的比較模塊輸出一個PWM波形,//此波形輸入CAP4引腳,待CAP4捕捉該PWM的10次上升沿后,停止捕捉,并把10//次捕捉值存于數(shù)組result[10]中#include"register.h"http://初始化子程序intresult[10];//定義一個存儲結果的數(shù)組intk=0;//定義的中斷次數(shù)值//系統(tǒng)初始化子程序intinitial(){asm("setcINTM");//禁止所有中斷asm("setcSXM");//抑制符號位擴展asm("clrcOVM");//累加器中結
2、果正常溢出asm("clrcCNF");//B0被配置為數(shù)據(jù)存儲空間*SCSR1=0x81FE;//CLKIN=6M,CLKOUT=4*CLKIN=24M*WDCR=0x0E8;//不使能看門狗,因為SCSR2中的WDOVERRIDE//即WD保護位復位后的缺省值為1,故可以用//軟件禁止看門狗*IMR=0x0000;//禁止所有中斷*IFR=0x0FFFF;//清除全部中斷標志,"寫1清0"}//捕獲單元4初始化子程序intCAP4INT(){*T3PER=0X0FFFF;//通用定時器3的周期寄存器為0XFFFF*T3CON=0X1400
3、;//通用定時器3為連續(xù)增計數(shù)模式*T3CNT=0X00;//計數(shù)器清0WSGR=0x0000;//禁止所有等待狀態(tài)*CAPCONB=0X0A440;//設置捕獲單元4為檢測上升沿,且選擇TIMER3為時鐘asm("clrcINTM");//開總中斷*IMR=0X08;//允許中斷優(yōu)先級4的中斷*EVBIMRC=*EVBIMRC
4、0X0001;//允許CAPTURE4中斷*EVBIFRC=*EVBIFRC
5、0X0FFFF;}//定時器1初始化子程序,使其比較單元輸出一個PWM波形inttimer1int(){*MCRA=*MCRA
6、0X100
7、0;//配置IOPB4口為定時器1的比較輸出*MCRC=*MCRC
8、0X0080;//配置IOPE7口為捕捉功能*GPTCONA=*GPTCONA
9、0X0042;*T1PER=0X1FE;//給定時器1的周期寄存器賦值*T1CON=0X1442;//允許TIMER1比較輸出,并且TIMER1為連續(xù)增計數(shù)//模式,立即啟動*T1CNT=0X00;//定時器1的計數(shù)器清0*T1CMP=0X0FF;//給定時器1的比較寄存器賦值}//主程序main(){initial();//系統(tǒng)初始化timer1int();//定時器1初始化,使其輸出一個PWM
10、波形供捕捉CAP4INT();//捕獲單元4初始化*T3CON=*T3CON
11、0X0040;//啟動定時器3while(1){if(k==10)break;//k保存中斷次數(shù)值,是全局變量}asm("setcINTM");//捕捉10次后,禁止再中斷}//若是由于干擾引起其它中斷,則執(zhí)行此子程序voidinterruptnothing(){asm("clrcINTM");//返回前開中斷return;}//捕捉中斷服務程序voidinterruptcapint(){intflag;flag=*EVBIFRC&0X01;//判斷是否是CAP4中
12、斷if(flag!=0x01){asm("clrcINTM");//返回前開中斷return;//如果不是CAP4中斷,則直接返回}load();//如果是CAP4中斷,則裝載捕捉值*EVBIFRC=*EVBIFRC
13、0x01;//寫"1"清除CAP4中斷標志asm("clrcINTM");//返回前開中斷return;//中斷返回}//裝載捕捉值子程序intload(){result[k]=*CAP4FIFO;//讀取捕捉值,存于相應的數(shù)組k++;}問題補充:請問CAP4FIFO里面裝的是什么東西呢?是捕獲脈沖的時間嗎?那要是我要計算兩個脈
14、沖之間的時間改如何修改呢?#includeintresult[10];//存儲結果的數(shù)組intk=0;//中斷次數(shù)voidinlinedisable(){?asm("setcINTM");//屏蔽中斷程序}intinitial(){?asm("setcINTM");//禁止所有中斷?asm("setcSXM");//符號位擴展有效?asm("clrcOVM");//累加器中結果正常溢出?asm("clrcCNF");//B0被配置為數(shù)據(jù)存儲空間??*SCSR1=0x81FE;//CLKIN=6M,CLKOUT=4*CL
15、KIN=24M系統(tǒng)控制和狀態(tài)寄存器SCSR1???*WDCR=0x0E8;//禁止看門狗??*IMR=0x0000;//禁止所有中斷????????IMR中斷屏蔽寄