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