日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

s5pv210——定时器理论与操作

發布時間:2023/12/20 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 s5pv210——定时器理论与操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下內容源于朱有鵬《物聯網大講壇》課程的學習,如有侵權,請告知刪除。


一、定時器簡介

1、定時器是SoC中常見外設

(1)定時器與計數器。

  • 計數器每隔一個固定時間會計一個數;
  • 計數值 * 計數時間周期 = 一段時間。
  • 這個時間段就是我們定的時間。

(2)定時器/計數器作為SoC的外設,主要用來實現定時執行代碼的功能。

  • 定時器相對SoC而言,就像鬧鐘相對于人的意義一樣。

2、定時器作用

(1)通過定時器的計時功能,計時結束后,定時器會產生中斷提醒CPU。

  • 此時CPU會去處理中斷,并執行定時器中斷的ISR,從而去執行預先設定好的事件。

(2)定時器就好比CPU的秘書,這個秘書專門用來計時,并到時間后提醒CPU做某件事情。

3、定時器的原理

(1)定時器通過計數來實現定時。

  • 定時器內部有一個計數器。
  • 計數器的時鐘,由ARM的APB總線時鐘,經過時鐘模塊內部的分頻器的分頻得到
  • 每隔一個時鐘周期,計數器就計數一次,定時器的時間就是計數器計數值×時鐘周期。
  • 定時器內部有1個寄存器TCNT。
  • 計時開始時,把總的計數值放入TCNT寄存器中,然后每隔一個時鐘周期TCNT中的值會自動減1(硬件自動完成,不需要CPU軟件去干預);
  • 直到TCNT中減為0的時候,TCNT就會觸發定時器中斷。

(2)由此可知,定時時間是由2個東西共同決定的:一個是TCNT中的計數值,一個是時鐘周期。

4、定時器和看門狗、RTC、蜂鳴器的關系

(1)這幾個東西都是和時間有關的部件。

(2)看門狗其實就是一個定時器,只不過定時時間到了之后不只是中斷,還可以復位CPU

(3)RTC是實時時鐘,它和定時器的差別就好象鬧鐘(定時器)和鐘表(RTC)的差別一樣。

(4)蜂鳴器是一個發聲設備,在ARM里面蜂鳴器是用定時器模塊來驅動的。


二、S5PV210中的定時器

在S5PV210內部,一共有4類定時器件。這4類定時器件的功能、特征是不同的。

1、PWM定時器

(1)這種是最常用的,平時所說的定時器一般指的是這個。像簡單單片機(譬如51單片機)中的定時器也是這類。

(2)為什么叫PWM定時器?因為一般SoC中產生PWM信號都是靠這類定時器器件的。

2、系統定時器

(1)系統(指的是操作系統)定時器,也是用來產生固定時間間隔(TCNT×時鐘周期)信號的,稱為systick,這個systick用來給操作系統提供tick信號。

(2)產生systick作為操作系統的時間片(time slice)的。

(3)一般做操作系統移植的時候,這里不會由我們自己來做,一般原廠提供的基礎移植部分就已經包含了,所以幾乎不需要研究。

3、看門狗定時器

(1)看門狗定時器本質上也是一個定時器,和上面2個沒有任何本質區別。

(2)看門狗定時器可以設置在時間到了的時候產生中斷,也可以選擇發出復位信號復位CPU。

(3)看門狗定時器在實踐中應用很多,尤其是工業領域(環境復雜、干擾多)機器容易出問題,而且出問題后后果很嚴重,此時一般都會用看門狗來進行系統復位。

4、實時時鐘RTC(real time clock)

(1)區分時間段和時間點。

  • 時間段是相對的,兩個時間點相減就會得到一個時間段;
  • 時間點是絕對的,是絕無僅有的一個時間點。

(2)定時器關注的是時間段,定時器計時從開啟定時器的那一刻開始,到定的時間段結束為止產生中斷;而RTC中工作用的是時間點(xx年x月x日……)。

(3)RTC和定時器的區別,就相當于是鐘表和鬧鐘的區別。



三、S5PV210的PWM定時器

1、為什么叫PWM定時器?

  • 本質上是定時器;
  • 用來產生PWM波形。

2、PWM定時器介紹

(1)S5PV210有5個PWM定時器。

  • 其中0、1、2、3各自對應一個外部GPIO,可以通過這些對應的GPIO產生PWM波形信號并輸出;
  • Timer4沒有對應的外部GPIO(它不是為了生成PWM波形而設計的,而是為了產生內部定時器中斷而設計的);

(2)S5PV210的5個PWM定時器的時鐘源為PCLK_PSYS

  • timer0和timer1共同使用一個預分頻器,timer2、3、4共同使用一個預分頻器;
  • 每個timer有一個專用的獨立的分頻器;
  • 預分頻器和分頻器構成了2級分頻系統,將PCLK_PSYS兩級分頻后生成的時鐘供給timer模塊作為時鐘周期。

3、S5PV210的PWM定時器框圖簡介

關鍵點:時鐘源、預分頻器、分頻器、TCMPB&TCNTB、dead zone

(1)預分頻器與分頻器

  • 兩級分頻是串聯(級聯)的,所以兩級分頻的分頻數是相乘的
  • 兩級分頻的分頻系數分別在TCFG0和TCFG1兩個寄存器中設置。
  • 預分頻器有2個,prescaler0為timer0&timer1共用,prescaler1為timer2、3、4共用;
  • 兩個prescaler都是8個bit位,因此prescaler value范圍為0~255,因此預分頻器的分頻值范圍為1~256(注意實際分頻值為prescaler value + 1)。
  • 分頻器實質上是一個MUX開關,多選一開關決定了走哪個分頻系數路線。可以選擇的有1/1,1/2,1/4,1/8,1/16等。
  • 計算一下,兩級分頻下來,分頻最小為1/1(也可能是1/2),最大分頻為1/256×16(1/4096)。
  • 在PCLK_PSYS為66MHz的情況下(默認時鐘設置就是66MHz的),此時兩級分頻后的時鐘周期范圍為0.03us到62.061us;
  • 再結合TCNTB的值的設置(范圍為1~2的32次方),可知能定出來的時間最長為266548.27s(折合74小時多,遠遠夠用)。

(2)TCNT&TCMP、TCNTB&TCMPB、TCNTO

  • TCNT和TCNTB是相對應的;TCNTB是有地址的寄存器,供程序員操作;TCNT在內部和TCNTB相對應,它沒有寄存器地址,程序員不能編程訪問這個寄存器。
  • TCNT寄存器功能就是用來減1的,它是內部的不能讀寫;我們向TCNT中寫數值要通過TCNTB往進寫,讀取TCNT寄存器中的值要通過讀取相對應的TCNTO寄存器。
  • 工作流程:事先算好TCNT寄存器中開始減的那個數(譬如300),然后將之寫入TCNTB寄存器中,在啟動timer前,將TCNTB中的值刷到TCNT寄存器中(有一位寄存器專門用來操作刷數據過去的),之后就可以啟動定時器開始計時;在計時過程中如果想知道TCNT寄存器中的值減到多少了,可以讀取相應的TCNTO寄存器。
  • 定時功能只需要TCNT、TCNTB兩個即可;TCNTO寄存器用來做一些捕獲計時;TCMPB用來生成PWM波形。

4、自動重載和雙緩沖(auto-reload and double buffering)

(1)定時器工作的時候,一次定時算一個工作循環。

  • 定時器默認是單個循環工作的,也就是說定時一次,計時一次,到期中斷一次就完了。下次如果還要再定時中斷,需要另外設置。
(2)現實中用定時器來做的時候往往是循環的

  • 可以寫代碼反復重置定時器寄存器的值(在每次中斷處理的isr中再次給TCNTB中賦值,再次刷到TCNT中再次啟動定時器),早期的單片機定時器就是這樣的;
  • 高級SoC中的定時器已經默認內置這種循環定時工作模式,就叫自動裝載(auto-reload)機制。

(3)自動裝載機制就是當定時器初始化好開始計時后再不用管了,一個周期到了之后,自動從TCNTB中再次裝載值到TCNT中,再次啟動定時器開始下個循環。

5、什么是PWM?

(1)PWM(pulse wide modulation,脈寬調制)

  • PWM波形是一個周期性波形,周期為T,在每個周期內波形是完全相同的。
  • 每個周期內由一個高電平和一個低電平組成。
(2)PWM波形的2個重要參數

  • 一個是周期T,另一個是占空比duty(占空比就是一個周期內高電平的時間除以周期時間的商)。

(3)PWM波形的用處

  • 譬如通信上用PWM來進行脈寬調制對基波進行載波調制;
  • 在發光二極管LED照明領域可以用PWM波形來調制電流進行調光;
  • 用來驅動蜂鳴器等設備。

6、PWM波形的生成原理

(1)早期的簡單單片機里(譬如51單片機)沒有專用的PWM定時器

  • 需要自己結合GPIO和定時器模塊來生產PWM波形;
  • 流程:先將GPIO引腳電平拉高,同時啟動定時器定T*duty時間,時間到了在isr中將電平拉低,然后定時T*(1-duty)后再次啟動定時器,然后時間到了后在isr中將電平拉高,然后再定時T*duty時間再次啟動定時器……

(2)因為定時器經常和PWM的產生有關,所以設計SoC的時候就直接把定時器和一個GPIO引腳內部綁定起來

  • 然后在定時器內部給設置了PWM產生的機制,可以更方便的利用定時器產生PWM波形。
  • 利用PWM定時器來產生PWM波形時,就可以不用中斷,而是直接生成PWM。
  • 綁定之后壞處就是GPIO引腳是固定的、死板的、不能隨便換的。
(3)在S5PV210中,PWM波形產生有2個寄存器很關鍵,一個是TCNTB、一個是TCMPB。

  • TCNTB決定PWM波形的周期,TCMPB決定PWM波形的占空比。
  • 最終生成的PWM波形的周期是:TCNTB×時鐘周期(PCLK_PSYS經過兩極分頻后得到的時鐘周期)。
  • 最終生成的PWM波形的占空比是:TCMPB/TCNTB

7、輸出電平翻轉器

(1)PWM定時器可以規定:當TCNT>TCMPB時為高電平,當TCNT<TCMPB時為低電平。也可以規定:當TCNT>TCMPB時為低電平,當TCNT<TCMPB時為高電平。在這兩種規定下,計算時TCMP寄存器的值會變化。

(2)基于上面講的,當duty從30%變到70%時,我們TCMPB寄存器中的值就要改(譬如TCNTB中是300時,TCMPB就要從210變化到90)。這樣的改變可以滿足需要,但是計算有點麻煩。于是乎210的PWM定時器幫我們提供了一個友好的工具叫做電平翻轉器。

(3)電平翻轉器在電路上的實質就是一個電平取反的部件,在編程上反映為一個寄存器位。寫0就關閉輸出電平反轉,寫1就開啟輸出電平反轉。開啟后和開啟前輸出電平剛好高低反轉。(輸出電平一反轉30%的duty就變成70%了)

(4)實戰中到底是TCNT和TCMPB誰大誰小時高電平還是低電平,一般不用理論分析,只要寫個代碼然后用示波器實際看一下出來的波形就知道了;如果反了就直接開啟電平翻轉器即可。

8、死區生成器

(1)PWM有一個應用就是用在功率電路中用來對交流電壓進行整流。整流時2路整流分別在正電平和負電平時導通工作,不能同時導通(同時導通會直接短路,瞬間的同時導通都會導致電路燒毀)。大功率的開關電源、逆變器等設備廣泛使用了整流技術。特別是逆變器,用SoC的GPIO輸出的PWM波形來分別驅動2路整流的IGBT。

(2)PWM波形用來做整理時要求不能同時高或低,因為會短路。但是實際電路是不理想的,不可能同時上升/下降沿,所以比較安全的做法是留死區。

(3)死區這東西離不了也多不了。死區少了容易短路,死區多了控制精度低了不利于產品性能的提升。

(4)S5PV210給大家提供了自帶的死區生成器,只要開啟死區生成器,生產出來的PWM波形就自帶了死區控制功能,用戶不用再自己去操心死區問題。

(5)大部分人工作是用不到這個的,直接關掉死區生成器即可。



四、蜂鳴器和PWM定時器編程實踐

1、蜂鳴器的工作原理

(1)蜂鳴器里面有2個金屬片,離的很緊但沒挨著;沒電的時候兩個片在彈簧本身張力作用下分開彼此平行;有電的時候兩邊分別充電,在異性電荷的吸力作用下兩個片挨著;

(2)我們只要以快速的頻率給蜂鳴器的正負極:供電、斷電。進行這樣的循環,蜂鳴器的兩個彈簧片就會挨著分開挨著分開……,從而敲擊發出聲音。

(3)因為人的耳朵能聽見的聲音頻率有限制(20Hz-20000Hz),我們做實驗時一般給個2KHz的頻率。

(4)頻率高低會影響聲音的音頻,一般是音頻越低聲音聽起來越低沉、音頻越高聽起來越尖銳。

(5)只要用PWM波形的電壓信號來驅動蜂鳴器,把PWM波形的周期T設置為要發出的聲音信號的1/頻率即可;PWM的占空比只要確保能驅動蜂鳴器即可(驅動能力問題,一般引腳驅動能力都不夠,所以蜂鳴器會額外用三極管來放大流來供電)。

2、原理圖和硬件信息

(1)查閱原理圖可知,開發板底板上的蜂鳴器通過GPD0_2(XpwmTOUT2)引腳連接在SoC上。

(2)GPD0_2引腳通過限流電阻接在三極管基極上,引腳有電蜂鳴器就會有電(三極管導通);引腳沒電蜂鳴器就會沒電(三極管關閉)。這些都是硬件問題,軟件工程師不用管,軟件工程師只要寫程序控制GPD0_2引腳的電平產生PWM波形即可。

(3)GPD0CON(0xE02000A0),要把bit8~bit11設置為0b0010(功能選擇為TOUT_2,就是把這個引腳設置為PWM輸出功能)。

(4)從GPD0_2引腳可以反推出使用的是timer2這個PWM定時器。

3、PWM定時器的主要寄存器詳解

相關的寄存器有TCFG0、TCFG1、CON、TCNTB2、TCMPB2、TCNTO2

4、蜂鳴器和PWM定時器編程實踐

(1)基于uart_stdio項目源碼來添加PWM定時器驅動蜂鳴器實驗;

(2)PWM定時器來產生PWM波形時是不需要中斷干預的。



五、看門狗定時器

1、什么是看門狗、有什么用?

(1)看門狗定時器和普通的定時器并無本質區別。定時器可以設定一個時間,在這個時間完成之前定時器不斷計時,時間到的時候定時器會復位CPU(重啟系統)。

(2)系統正常工作的時候當然不希望被重啟,但是系統受到干擾、極端環境等可能會產生異常工作或者不工作,這種狀態可能會造成不良影響(至少是不工作),此時解決方案就是重啟系統。

(3)普通設備重啟不是問題,但是有些設備人工重啟存在困難。這時候我們希望系統能夠自己檢驗自己是否已經跑飛,并且在意識到自己跑飛的時候,可以很快的(幾個ms或者更短)自我重啟。這個功能就要靠看門狗定時器來實現。

(4)典型應用的情景是:我們在應用程序中打開看門狗設備,初始化好給它一個時間,然后應用程序使用一個線程來喂狗,這個線程的執行時間安全短于看門狗的復位時間。當系統(或者應用程序)異常后,喂狗線程自然就不工作了,然后到時候看門狗就會復位。

(5)補充:實戰中有時候為了絕對的可靠,我們并不會用SoC中自帶的看門狗,而是使用專門的外置的看門狗芯片來實現看門狗。

2、S5PV210看門狗定時器的結構框圖

(1)PCLK_PSYS經過兩級分頻后生成WDT(watchdog timer)的時鐘周期,然后把要定的時間寫到WTDAT寄存器中,刷到WTCNT寄存器中去減1,減到0時(定時時間到)產生復位信號或中斷信號。

(2)典型應用中是配置為產生復位信號,我們應該在WTCNT寄存器減到0之前給WTDAT寄存器中重新寫值以喂狗。

3、看門狗定時器的主要寄存器

WTCON WTDAT WTCNT WTCLRINT

4、看門狗定時器的編程實踐

(1)產生中斷信號

(2)產生復位信號

六、實時時鐘RTC

1、何為實時時鐘?

(1)real time clock,真實時間,即xx年x月x日x時x分x秒;

(2)RTC是SoC中一個內部外設,擁有獨立的晶振提供RTC時鐘源(32.768KHz),內部有一些寄存器用來記錄時間(年月日時分秒星期)。

  • 一般情況下為了在系統關機時時間仍然在走,還會給RTC提供一個電池供電。

2、S5PV210實時時鐘的結構框圖

(1)時間寄存器7個;

(2)鬧鐘發生器;

3、鬧鐘發生器

(1)可以定鬧鐘時間,到時間會產生RTC alarm interrupt,通知系統鬧鐘定時到了。

(2)鬧鐘定時是定的時間點,而timer定時是定的時間段。

4、S5PV210實時時鐘的主要寄存器

(1)INTP,中斷掛起寄存器

(2)RTCCONRTC控制寄存器

(3)RTCALM ALMxxx鬧鐘功能有關的寄存器

(4)BCDxxx,時間寄存器

5、BCD碼

(1)RTC中所有的時間(年月日時分秒星期,包括鬧鐘)都是用BCD碼編碼的。

(2)BCD碼本質上是對數字的一種編碼,用4位二進制數表示1位十進制數字,比如十進制的56被編碼成0x56。

(3)BCD碼的作用

  • 將十進制數拆成組成這個十進制數的各個數字的編碼,變成編碼后就沒有位數的限制了。
  • 譬如123456789123456789,如果這個數純粹當數字肯定超出了int的范圍,計算機無法直接處理。
  • 想讓計算機處理這個數,計算機首先得能表達這個數,表達的方式就是先把這個數轉成對應的BCD碼(123456789123456789)。

(4)BCD碼在計算機中可以用十六進制的形式來表示。也就是說十進制的56轉成BCD碼后是0x56,在計算機中用0x56來表達(暫時存儲與運算)。

(5)需要寫2個函數,一個是bcd轉十進制,一個是十進制轉bcd。

  • 當要設置時間的時候(譬如要設置為23分),需要將這個23轉成0x23,然后再賦值給相應的寄存器BCDMIN;
  • 當從寄存器BCDMIN中讀取一個時間時(譬如讀取到的是0x59),需要轉成十進制再去顯示(0x59當作BCD碼就是59,轉成十進制就是59,所以顯示就是59分)。

七、RTC實戰

1、設置時間與讀取顯示時間

(1)為了安全,默認情況下RTC讀寫是禁止的,此時讀寫RTC的時間是不允許的;當我們要更改RTC時間時,應該先打開RTC的讀寫開關,然后再進行讀寫操作,操作完了后立即關閉讀寫開關。

(2)讀寫RTC寄存器時,一定要注意BCD碼和十進制之間的轉換。

(3)年的問題。

  • BCDYEAR寄存器存的并不是完整的年數,而是基于2000年的偏移量來存儲的;
  • 譬如今年2015年,實際存的就是15(2015-2000);
  • 還有些RTC芯片是以1970年為基點的。

2、鬧鐘實驗














總結

以上是生活随笔為你收集整理的s5pv210——定时器理论与操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。