|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
有沒(méi)有用過(guò)LPC2104的捕獲啊!我怎么捕獲的數(shù)值跳變很大啊 |
| 作者:usbfd 欄目:ARM技術(shù) |
這是初始化 /**************************************************************************** 【功能說(shuō)明】Time捕獲初始化 ****************************************************************************/ void Time0_cap(void) { T0PR =2; T0CCR =0; T0EMR =0; //無(wú)匹配輸出 T0MCR =3; //匹配中斷,復(fù)位,HOLD T0IR =0xff; T0TCR =1; T0MR0 =3125; //匹配625uS T1PR =2; // (Fpclk/4)3分頻 15M/3 5M/0.2us T1CCR =6; // 上升!沿捕獲,事件中斷 T1EMR =0; // 無(wú)匹配輸出 T1MCR =1; // 匹配中斷 T1IR =0xff; T1TCR =1; // E T0 T1MR0 =0xffffffff; //溢出中斷 } 這是中斷程序,匹配一次都沒(méi)發(fā)生過(guò) /*************************************************** ** 周期計(jì)數(shù) ***************************************************/ void __irq IRQ_T1cap(void) // T1捕獲中斷到向量中斷1(5) { uint32 i;//,bakVIC; //bakVIC = VICIntEnable; // 備份當(dāng)前VICIntEnable的值 //VICIntEnClr = (1<<4); // 禁止當(dāng)前優(yōu)先級(jí)中斷及低優(yōu)先級(jí)中斷 i =T1IR; T1IR =0xff; if((i&0x1)==1) { WattInp++; T1MR0 +=freq_sample; //U0THR ='M'; } if((i&0x10)==0x10) { freqcount &=0x7; freqtime[freqcount] =T1CR0;//50Hz/200k freqcount++; if((freqcount%2)==1) IOCLR =(1<<9);//TEST else IOSET =(1<<9);//TEST } //VICIntEnable = bakVIC; VICVectAddr = 0x00; } 一開(kāi)始我輸入的是50HZ,測(cè)p0.9是25HZ很準(zhǔn),但數(shù)值跳變大! 然后我用T0中斷信號(hào)直接給t1.0捕獲,數(shù)值還是跳變 |
| 2樓: | >>參與討論 |
| 作者: robinsun 于 2005/1/18 10:38:00 發(fā)布:
我的程序 /******************************************************************************** 文件: timer.c 說(shuō)明:將跟timer相關(guān)的脈沖輸入驅(qū)動(dòng)函數(shù)寫在本文件中 原理:定時(shí)器有2個(gè)32位定時(shí)器,分別具有4路捕獲輸入÷4路比較匹配輸出。定時(shí)器是增量計(jì)數(shù)的,但 上溢時(shí)不會(huì)產(chǎn)生中斷標(biāo)志,而只能通過(guò)比較匹配或者捕獲輸入產(chǎn)生中斷標(biāo)志。 脈沖輸入的頻率測(cè)量方法:測(cè)量一定脈沖所用的時(shí)間。 常用數(shù)字頻率測(cè)量方法有M法、T法和M/T法。M法是在給定的閘門時(shí)間內(nèi)測(cè)量被測(cè)信號(hào)的脈沖個(gè)數(shù), 進(jìn)行換算得出被測(cè)信號(hào)的頻率。這種測(cè)量方法的測(cè)量精度取決于閘門時(shí)間和被測(cè)信號(hào)頻率。 當(dāng)被測(cè)信號(hào)頻率較低時(shí)將產(chǎn)生較大誤差,除非閘門時(shí)間取得很大。所以這種方法比較適合測(cè)量 高頻信號(hào)的頻率。T法是通過(guò)測(cè)量被測(cè)信號(hào)的周期然后換算出被測(cè)信號(hào)的頻率。這種測(cè)量方法的 測(cè)量精度取決于被測(cè)信號(hào)的周期和計(jì)時(shí)精度,當(dāng)被測(cè)信號(hào)頻率較高時(shí),對(duì)計(jì)時(shí)精度的要求就很高。 這種方法比較適合測(cè)量頻率較低的信號(hào)。M/T法具有以上兩種方法的優(yōu)點(diǎn),它通過(guò)測(cè)量被測(cè)信號(hào) 數(shù)個(gè)周期的時(shí)間然后換算得出被測(cè)信號(hào)的頻率,可兼顧低頻與高頻信號(hào),提高了測(cè)量精度。 編寫者: robinsun 版本控制: ---------------------------------------------------------------------------- 版本號(hào) 日期 修改內(nèi)容 修改者 ---------------------------------------------------------------------------- 1.0 2004.12.30 初稿 robinsun ---------------------------------------------------------------------------- ********************************************************************************/ //定義是否打印調(diào)試語(yǔ)句,定義了就打印 //#define _PRINT_DEBUG 1 #define _TIMER_C #include "config.h" #include "include\timer.h" #include "include\serial.h" /****************************************** * 名稱 : void Timer_Init(void) * 功能描述: 脈沖輸入部分的初始化,一開(kāi)始設(shè)置為輸入捕獲,同步測(cè)量脈沖 * 輸入?yún)⒘? 無(wú) * 輸出參量: 無(wú) * 調(diào)用子程: 無(wú) * 使用方法: --------------—*/ void Timer0_Init(void) { T0PR=99; //設(shè)定定時(shí)器0的分頻為100分頻,的10592HZ //采用11.0592M.html">11.0592M晶振,采用PLL部件,F(xiàn)cclk=Fosc×4,外圍時(shí)鐘采用復(fù)位默認(rèn)的Fpclk/4 //計(jì)數(shù)時(shí)鐘頻率=Fpclk/(N+1) T0MCR=0x03; //匹配通道0匹配中斷并復(fù)位T0TC T0MR0=11.0592; T0TCR=0x03; T0TCR=0x01; //啟動(dòng)復(fù)位 } /****************************************** * 名稱 : void Timer_Init(void) * 功能描述: 定時(shí)器0中斷服務(wù)程序 * 輸入?yún)⒘? 無(wú) * 輸出參量: 無(wú) * 調(diào)用子程: 無(wú) * 使用方法: 最后將脈沖的數(shù)據(jù)輸出到全局變量 --------------—*/ void __irq IRQ_Timer1(void) { uint32 TempCapTime; PluseNum++; if( (IO0SET&LEDCON) == 0 ) IO0SET = LEDCON; //進(jìn)行LED4的取反控制 控制LED4點(diǎn)亮 else IO0CLR = LEDCON; // 控制LED4熄滅 /* Prints("PUSH "); Puthexbyte(PluseNum>>8); Puthexbyte(PluseNum); Prints("\r\n");*/ if(PluseNum==PULSE_TEST_NUM) //如果脈沖的的個(gè)數(shù)到了規(guī)定的5個(gè) { TempCapTime=T1CR3; //暫存輸入捕獲時(shí)鐘 TempCapTime=TempCapTime-CapTime; //計(jì)算出5個(gè)脈沖的間隔時(shí)間 Puthexbyte(TempCapTime>>8); Puthexbyte(TempCapTime); PluseFreq=5*110592/TempCapTime; Prints("\r\n"); Puthexbyte(PluseFreq); Prints("\r\n"); T1CCR |= (1<<9); //cap1.3上上升沿跳變將TC內(nèi)容裝入CR3 T1CCR &= (0xFFFF-(1<<10)); PluseNum=0; T1TC=0; DISABLE_TIMER_INT; } else { CapTime=T1CR3; //將輸入捕獲寄存器的數(shù)據(jù)讀出來(lái) /* Puthexbyte(CapTime>>24); Puthexbyte(CapTime>>16); Puthexbyte(CapTime>>8); & |
|
| 3樓: | >>參與討論 |
| 作者: usbfd 于 2005/1/18 10:48:00 發(fā)布:
謝謝! 謝謝!我現(xiàn)在發(fā)現(xiàn)了,原來(lái)定時(shí)器時(shí)間問(wèn)題 T1PR =2; // (Fpclk/4)3分頻 15M/3 5M/0.2us T1CCR =6; // 上升!沿捕獲,事件中斷 T1EMR =0; // 無(wú)匹配輸出 T1MCR =1; // 匹配中斷 T1IR =0xff; T1TCR =1; // E T0 T1MR0 =0xffffffff; //溢出中斷 我設(shè)的應(yīng)該是多長(zhǎng)時(shí)間計(jì)數(shù)器加一。『孟癫粚(duì)哦 Fcclk/60M Fpclk/15M |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |