歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

ARM M0+各種定時器驅動的編寫

systick

系統滴答時間。這個定時器之前的文章已經講過。這個是一個遞減的定時器,有個模數寄存器。在此不多說。就是一個系統的模塊,這個模塊是集成在ARM M0+內核中的,其實主要是集成在NVIC 中的,NVIC也是ARM 內部模塊,該模塊的定時器,用該模塊的時鐘源來使能該定時器。以及模數計數器。總共只有四個寄存器。控制狀態寄存器:主要包含一個COUNTFLAG 中斷標志位,當計數器計數到0的時候標志該位,CLKSOURCE :可選擇時鐘源,默認為內核始終,有的廠家還會提供其他外設始終。TICKINT中斷使能位,ENABLE計數器使能位。

RVR重載寄存器:每次計數器計數到0 的時候,都重載該值。

CVR計數器的值,記錄當前的值。

CALIB校准寄存器:有的廠家將計算好的10ms的ticks值放入該寄存器。也就是說是廠商決定的,廠商燒入,則有,沒有設置則沒有。

TPM

這個寄存器是遞增的。有三個模塊,

分為主計數器,和通道計數器,也就是相當於一個計數器,分一個主模數,一個次模數。狀態和控制寄存器(SC)中,通過CMOD 可以選計數的模式通過該計數模式可以選擇時鐘,是選擇模塊時鐘還是選擇時鐘失效,還是選擇異步外設時鐘,。再經過PS分頻,2(PS次冪)代表分頻值,即將該時鐘降頻。  CPWMS:中心對齊PWM選擇(即計數器的計數模式,這個也算該計數器的一個特色吧。比如一般來說計數器是1,2,3,4,5, 然後1,2,3,4,5 。通過該位置1,可以設置成1,2,3,4,5,4,3,2,1)。所以置1只能配出中央對齊的PWM.

該定時器有一個總的MOD模數值,該值用來控制該模塊的一個總的中斷請求置狀態寄存器的TOF位,當計數器達到該值時,該請求。當然一定有一個中斷使能位,就是TOIE中斷使能位,。兩個值一並即觸發了中斷服務歷程。

TPM的分通道。每個模塊也有自己的模數寄存器的值。就相當於,主計數器模數是5,從1數到5,通道模數是3,即從1數到3的時候就出發了通道相應的事件。

其實也就是說通過將該模塊的計數值。當前通道通過一定的配置 ,根據計數器來進行相應的處理。通道中分為MSnB:MSnA該位控制模式的。ELSNB:ELSNA該兩位控制的是邊沿和等級。模式有0:輸入捕捉(01上升沿,10下降沿,11上升或下降捕捉),1,輸出比較(在通道的模數值和計數器的值相等的時候,01翻轉電平,10清除電平即置0,11設置電平即置1),2邊沿對其PWM(10重新加載的時候是高電平,匹配的時候是低電平,即先高後低,01或11先低電平後高電平),11輸出比較(10在匹配的時候打出低電平,X1在匹配的是打出高電平)。後面兩種其實是一種,不同的就是在重新加載計數器的時候是否有操作。

每個通道都有一個狀態控制寄存器和模數值,包含一個標志通道的中斷的標志位,該標志位每個通道都有,還有一個中斷使能位,還有就是剛才提到的模式控制和邊沿控制,外加一個DMA使能。

模數值和計數器的模數值一樣都是16位的,

由於一個模塊的通道都比較多,每個通道雖然都有這個中斷標志,但是,模塊中斷只有一個,所以KL25有一個寄存器STATUE將總中斷標志位TOF,和每個通道的中斷標志位,都映射到一個寄存器中,這個標志都是寫1清0的。

有CONFIG配置寄存器,配置計數器的模式,以及時鐘源,以及觸發方式,比如讓計數器不計數,等到輸入捕捉到一個上升沿就開始捕捉。等等。還有在調試模式和在等待模式下用的時間基數。

根據以上寄存器的功能可以配置一下的幾種功能:

輸入捕捉:一般用於編碼器

采集輸入脈沖的上升沿,下降沿或者上升沿下降沿都采集。采樣周期得是計數器時鐘的1/4。這其中還涉及到一個Nyquist定律。輸入捕捉的時候,CnV就沒有用了。

輸出捕捉功能:一般用於打出方波波形,比如步進電機需要的方波波形

即只有在通道值和模塊的計數器的值相等的時候,會操作,可以翻轉,默認高,或者默認低。該脈沖周期是計數器周期的兩倍

邊沿對其的PWM;即在上面的輸出比較功能的基礎上添加在重載計數器的值得時候進行設置。形成方波脈沖波形。

中心對其的PWM:這個就比較復雜了。周期是模數的兩倍。就是1,2,3,4,5,模數是5 ,通道的模數是3 ,當開始和結尾的時候有一次溢出中斷,總中斷,當1數到3的時候觸發一次通道中斷,當3數到5 再從5數到3的時候又觸發一次通道中斷,然後再從3數到1.

Copyright © Linux教程網 All Rights Reserved