在嵌入式系統(tǒng)中,對(duì)外部信號(hào)的時(shí)序特性(如周期、脈沖寬度)進(jìn)行精準(zhǔn)測(cè)量是眾多應(yīng)用的核心需求,從電機(jī)轉(zhuǎn)速檢測(cè)、紅外遙控信號(hào)解碼,到超聲波測(cè)距、通信協(xié)議同步,都需要實(shí)時(shí)獲取外部信號(hào)的時(shí)間維度信息。而定時(shí)器的輸入捕獲模式,正是通過硬件級(jí)別的信號(hào)檢測(cè)與時(shí)間鎖存,實(shí)現(xiàn)對(duì)外部信號(hào)邊沿(上升沿、下降沿或雙邊沿)的精準(zhǔn)捕捉,為后續(xù)時(shí)序分析提供高可靠性的時(shí)間數(shù)據(jù),其底層邏輯圍繞 “信號(hào)觸發(fā) - 硬件鎖存 - 時(shí)間計(jì)算” 展開,是嵌入式系統(tǒng)中實(shí)現(xiàn)高精度時(shí)序測(cè)量的關(guān)鍵技術(shù)之一。
輸入捕獲模式的本質(zhì),是利用定時(shí)器的計(jì)數(shù)功能與外部引腳的信號(hào)檢測(cè)能力,將外部信號(hào)的特定邊沿與定時(shí)器的當(dāng)前計(jì)數(shù)值進(jìn)行 “綁定”—— 當(dāng)外部信號(hào)出現(xiàn)預(yù)設(shè)的邊沿(如上升沿)時(shí),硬件電路會(huì)立即將定時(shí)器的當(dāng)前計(jì)數(shù)值鎖存到專用的捕獲寄存器中,同時(shí)可觸發(fā)中斷通知 CPU 讀取該值。這種硬件級(jí)別的鎖存機(jī)制,避免了軟件查詢方式帶來的延遲誤差,確保捕獲到的計(jì)數(shù)值能真實(shí)反映信號(hào)邊沿發(fā)生的時(shí)刻,從而為時(shí)間差計(jì)算提供精準(zhǔn)依據(jù)。從硬件架構(gòu)來看,支持輸入捕獲模式的定時(shí)器通常包含外部信號(hào)輸入引腳(如 TIMx_CH1~CH4)、邊沿檢測(cè)電路、捕獲寄存器(如 TIMx_CCR1~CCR4)、計(jì)數(shù)器(TIMx_CNT)以及中斷生成邏輯:外部信號(hào)通過輸入引腳進(jìn)入后,首先經(jīng)過邊沿檢測(cè)電路,該電路可通過寄存器配置選擇檢測(cè)上升沿、下降沿或雙邊沿;當(dāng)檢測(cè)到預(yù)設(shè)邊沿時(shí),觸發(fā)信號(hào)會(huì)直接控制捕獲邏輯,將計(jì)數(shù)器當(dāng)前值 “凍結(jié)” 并寫入捕獲寄存器,整個(gè)過程無需 CPU 干預(yù),響應(yīng)延遲僅為幾個(gè)時(shí)鐘周期,遠(yuǎn)低于軟件層面的信號(hào)處理速度。
要理解輸入捕獲模式的完整工作流程,需結(jié)合具體的時(shí)序測(cè)量場(chǎng)景展開。以測(cè)量外部信號(hào)的脈沖寬度(高電平持續(xù)時(shí)間)為例,其底層邏輯可分為三個(gè)關(guān)鍵階段:首先是模式配置階段,CPU 需通過寄存器配置定時(shí)器的工作參數(shù) —— 設(shè)定定時(shí)器的計(jì)數(shù)時(shí)鐘頻率(如由 APB 總線時(shí)鐘分頻得到),確保計(jì)數(shù)精度滿足測(cè)量需求;配置輸入捕獲引腳對(duì)應(yīng)的通道(如 TIM2_CH1),并選擇捕獲邊沿為 “上升沿”;同時(shí)使能捕獲中斷,以便信號(hào)邊沿到來時(shí) CPU 能及時(shí)讀取捕獲值。當(dāng)配置完成后,定時(shí)器開始自由計(jì)數(shù),計(jì)數(shù)器數(shù)值從 0 開始隨時(shí)鐘周期遞增(或遞減,具體取決于計(jì)數(shù)模式)。
第二階段是上升沿捕獲階段,當(dāng)外部信號(hào)從低電平變?yōu)楦唠娖綍r(shí),邊沿檢測(cè)電路檢測(cè)到上升沿,立即觸發(fā)捕獲操作,將此時(shí)計(jì)數(shù)器的當(dāng)前值(記為 CNT1)鎖存到捕獲寄存器 TIMx_CCR1 中,同時(shí)生成捕獲中斷。CPU 響應(yīng)中斷后,讀取 CNT1 的值并存儲(chǔ),隨后通過寄存器重新配置該通道的捕獲邊沿為 “下降沿”,為后續(xù)捕獲信號(hào)的下降沿做準(zhǔn)備 —— 這一步的核心是通過切換捕獲邊沿,實(shí)現(xiàn)對(duì)同一信號(hào)高電平起始與結(jié)束時(shí)刻的分別捕獲。
第三階段是下降沿捕獲與時(shí)間計(jì)算階段,當(dāng)外部信號(hào)從高電平變?yōu)榈碗娖綍r(shí),邊沿檢測(cè)電路檢測(cè)到下降沿,再次觸發(fā)捕獲操作,將此時(shí)計(jì)數(shù)器的當(dāng)前值(記為 CNT2)鎖存到捕獲寄存器中,并再次生成中斷。CPU 響應(yīng)中斷后讀取 CNT2 的值,此時(shí)需判斷計(jì)數(shù)器在兩次捕獲之間是否發(fā)生 “溢出”—— 若 CNT2 大于 CNT1,說明計(jì)數(shù)器未溢出,脈沖寬度對(duì)應(yīng)的計(jì)數(shù)差值為 ΔCNT=CNT2 - CNT1;若 CNT2 小于 CNT1,說明計(jì)數(shù)器在兩次捕獲之間已溢出(即數(shù)值從最大值重置為 0 后繼續(xù)計(jì)數(shù)),此時(shí)需通過溢出中斷記錄的溢出次數(shù)(記為 N)計(jì)算總差值,即 ΔCNT=(N× 計(jì)數(shù)器最大值) + CNT2 - CNT1。最后,結(jié)合定時(shí)器的計(jì)數(shù)周期(T=1 / 計(jì)數(shù)頻率),即可計(jì)算出脈沖寬度的實(shí)際時(shí)間:脈沖寬度 =ΔCNT×T。例如,若定時(shí)器計(jì)數(shù)頻率為 1MHz(計(jì)數(shù)周期 1μs),ΔCNT=1000,則脈沖寬度為 1000×1μs=1ms。
在實(shí)際應(yīng)用中,輸入捕獲模式的底層邏輯還需處理一些關(guān)鍵細(xì)節(jié),以確保測(cè)量精度與可靠性。首先是計(jì)數(shù)器溢出問題,由于定時(shí)器計(jì)數(shù)器的位數(shù)有限(如 16 位定時(shí)器最大值為 65535),當(dāng)測(cè)量的信號(hào)周期或脈沖寬度超過計(jì)數(shù)器的最大計(jì)數(shù)值對(duì)應(yīng)的時(shí)間時(shí),必然會(huì)發(fā)生溢出,若未及時(shí)處理會(huì)導(dǎo)致計(jì)數(shù)差值計(jì)算錯(cuò)誤。因此,需同時(shí)使能定時(shí)器的溢出中斷,在中斷服務(wù)函數(shù)中記錄溢出次數(shù),確保兩次捕獲之間的總計(jì)數(shù)差值能準(zhǔn)確反映實(shí)際時(shí)間。其次是信號(hào)噪聲濾波問題,外部信號(hào)可能因干擾產(chǎn)生毛刺(如短時(shí)間的虛假邊沿),若被誤檢測(cè)為有效邊沿,會(huì)導(dǎo)致捕獲值錯(cuò)誤。為此,部分定時(shí)器外設(shè)集成了 “輸入濾波” 功能,可通過配置濾波系數(shù),讓邊沿檢測(cè)電路僅識(shí)別持續(xù)時(shí)間超過一定時(shí)鐘周期的邊沿,過濾掉高頻毛刺,例如配置濾波系數(shù)為 8,意味著只有當(dāng)外部信號(hào)的邊沿持續(xù) 8 個(gè)時(shí)鐘周期以上時(shí),才會(huì)被判定為有效邊沿,從而提升捕獲的抗干擾能力。
此外,輸入捕獲模式還支持 “雙邊沿捕獲” 與 “多通道同步捕獲” 等擴(kuò)展功能,進(jìn)一步豐富其應(yīng)用場(chǎng)景。雙邊沿捕獲模式下,無需軟件切換邊沿,硬件可自動(dòng)捕獲信號(hào)的上升沿與下降沿,并分別鎖存對(duì)應(yīng)的計(jì)數(shù)值,適用于需要快速測(cè)量信號(hào)周期(一次上升沿與一次下降沿的時(shí)間差為半周期)的場(chǎng)景;多通道同步捕獲則利用定時(shí)器的多個(gè)輸入通道,同時(shí)捕獲多個(gè)外部信號(hào)的邊沿,例如在電機(jī)控制中,通過兩個(gè)通道分別捕獲電機(jī)編碼器的 A、B 相脈沖,結(jié)合輸入捕獲值計(jì)算電機(jī)的轉(zhuǎn)速與轉(zhuǎn)向,其底層邏輯是通過硬件同步確保兩個(gè)通道的捕獲時(shí)刻具有嚴(yán)格的時(shí)間關(guān)聯(lián)性,避免軟件延遲導(dǎo)致的相位偏差。
從本質(zhì)來看,輸入捕獲模式的底層邏輯是 “硬件實(shí)時(shí)響應(yīng)” 與 “軟件精準(zhǔn)計(jì)算” 的協(xié)同 —— 通過硬件電路實(shí)現(xiàn)對(duì)外部信號(hào)邊沿的無延遲捕獲,將時(shí)間信息轉(zhuǎn)化為計(jì)數(shù)器的數(shù)值,再通過軟件處理溢出、計(jì)算差值,最終還原為實(shí)際的時(shí)間數(shù)據(jù)。這種機(jī)制既發(fā)揮了硬件的高速響應(yīng)優(yōu)勢(shì),又借助軟件的靈活性解決了計(jì)數(shù)溢出、噪聲過濾等問題,使其在需要高精度時(shí)序測(cè)量的嵌入式場(chǎng)景中不可或缺。無論是工業(yè)領(lǐng)域的轉(zhuǎn)速監(jiān)測(cè)、消費(fèi)電子的遙控解碼,還是汽車電子的傳感器信號(hào)處理,輸入捕獲模式都以其高可靠性與低 CPU 占用率,成為連接外部信號(hào)與嵌入式系統(tǒng)的關(guān)鍵橋梁,深刻體現(xiàn)了嵌入式技術(shù)中 “硬件為基、軟件賦能” 的核心思想。