131 1300 0010
其他
當(dāng)前位置: 首頁(yè)>> 元件技術(shù)>>其他>>
  • 導(dǎo)航欄目
  • 二極管
  • 整流橋
  • MOS管
  • 其他
  • 單片機(jī)定時(shí)器中斷原理及s3c2440的定時(shí)器使用方法
    單片機(jī)定時(shí)器中斷原理及s3c2440的定時(shí)器使用方法
  • 單片機(jī)定時(shí)器中斷原理及s3c2440的定時(shí)器使用方法
  •   發(fā)布日期: 2019-06-17  瀏覽次數(shù): 1,288

    在程序中,需要延時(shí)的時(shí)候,通常狀況下有兩種方法:1、循環(huán)語(yǔ)句實(shí)現(xiàn),這種方法簡(jiǎn)單易用,但是無(wú)法得到一個(gè)精確的延時(shí)時(shí)間;2、定時(shí)器定時(shí),可達(dá)到精確延時(shí)。

    中斷的概念

    什么是中斷:CPU在處理某一事件A時(shí),發(fā)生的另外某一事件B請(qǐng)求CPU去處理(產(chǎn)生了中斷),隨后CPU暫時(shí)中斷當(dāng)前正在執(zhí)行的任務(wù),去對(duì)事件B進(jìn)行處理,CPU處理完事件B后再返回之前中斷的位置繼續(xù)執(zhí)行原來(lái)的事件A,這一過(guò)程總稱(chēng)為中斷。

     

    中斷流程示意圖

    單片機(jī)定時(shí)器中斷原理及s3c2440的定時(shí)器使用方法

    使CPU中斷的事件稱(chēng)中斷源。中斷源向CPU發(fā)出中斷請(qǐng)求,CPU暫時(shí)中斷原來(lái)執(zhí)行的事件A轉(zhuǎn)去做事件B。事件B處理完畢后繼續(xù)返回原先中斷的地方(該過(guò)程稱(chēng)中斷返回,原先中斷的地方為斷點(diǎn)),繼續(xù)執(zhí)行原先的事件。

    中斷的優(yōu)先級(jí)

    單片機(jī)定時(shí)器中斷原理及s3c2440的定時(shí)器使用方法

    中斷的好處

    (1):提高了CPU的效率

    CPU是計(jì)算機(jī)的指揮中心,它與外圍設(shè)備(如:按鍵,顯示器等)通訊的方法有查詢(xún)和中斷2種

    1:查詢(xún):無(wú)論外圍i/o是否需要服務(wù),CPU每隔一段時(shí)間都要依次查詢(xún)一遍,這種查詢(xún)的方法,CPU需要花費(fèi)一些時(shí)間在做查詢(xún)的服務(wù)工作

    2:中斷:在外圍設(shè)備需要通訊服務(wù)時(shí)主動(dòng)告訴CPU,CPU停下當(dāng)前工作去處理中斷程序,從而提高了CPU的工作效率。

    (2):可以實(shí)現(xiàn)實(shí)時(shí)處理

    外設(shè)任何時(shí)候都可能發(fā)出請(qǐng)求中斷的信號(hào),CPU接到請(qǐng)求后及時(shí)處理,以滿(mǎn)足實(shí)時(shí)系統(tǒng)的需要

    (3):可以及時(shí)處理故障

    計(jì)算機(jī)系統(tǒng)運(yùn)行過(guò)程中難免會(huì)出現(xiàn)故障,eg:電源中斷,存儲(chǔ)器出錯(cuò),外圍設(shè)備工作不正常等,這時(shí)可以通過(guò)中斷系統(tǒng)向中斷源的CPU發(fā)出請(qǐng)求,以便解決故障。

    定時(shí)器的使用步驟

    1.打開(kāi)總中斷:

    EA(ENABLE ALL) = 1;

    2.設(shè)置定時(shí)器工作方式:

    TMOD寄存器:定時(shí)器/計(jì)數(shù)器模式控制寄存器

    其中M1和M0是定時(shí)器工作方式的設(shè)置位,共可設(shè)置4種工作方式。

    方式0(M1M0 = 00):13位定時(shí)/計(jì)數(shù)器

    方式1(M1M0 = 01):16位定時(shí)/計(jì)數(shù)器 //通常采用方式1

    方式2(M1M0 = 10):8位自動(dòng)重裝定時(shí)/計(jì)數(shù)器

    方式3(M1M0 = 11):T0分為兩個(gè)獨(dú)立的8為定時(shí)/計(jì)數(shù)器;T1在此方式停止計(jì)數(shù)

    3.定時(shí)器填裝初值

    填裝初值要點(diǎn):

    單片機(jī)晶振頻率:12M,震蕩周期為1/12us

    ②標(biāo)準(zhǔn)的51單片機(jī)為12T,即12個(gè)時(shí)鐘周期, 12 x 1/12 us = 1us,即加一次1us。

    例如:將定時(shí)器設(shè)置在工作方式1,初值設(shè)為10ms:

    TMOD = 0x01;

    TH0 = (65536 - 10000);//10000代表10000個(gè)1us

    TL0 = (65536 - 10000);

    4.打開(kāi)定時(shí)器中斷

    ET0 = 1:ENABLE TIME0

    ET1 = 1: ENABLE TIME1

    5.打開(kāi)定時(shí)器(開(kāi)始計(jì)數(shù))

    TR0 = 1:打開(kāi)定時(shí)器0

    TR1 = 1:打開(kāi)定時(shí)器1

    6.寫(xiě)中斷服務(wù)函數(shù)(ISR)

    注意:中斷服務(wù)函數(shù)不能有參數(shù)和返回值

    定時(shí)器使用程序

    單片機(jī)定時(shí)器中斷原理及s3c2440的定時(shí)器使用方法

    注意:

    1:定時(shí)器和中斷都屬于單片機(jī)的內(nèi)部資源,在開(kāi)發(fā)板上是沒(méi)有芯片的,同時(shí)定時(shí)器的初始化程序一旦溢出,會(huì)自動(dòng)去執(zhí)行定時(shí)器中斷子程序,而不需要我們自己去調(diào)用,這些都是由硬件直接控制的。

    2:定時(shí)器計(jì)算的是固定脈沖,其定時(shí)時(shí)間是可以計(jì)算出來(lái)的。它比延時(shí)函數(shù)有更好的作用,能提高CPU 的效率,因?yàn)檠訒r(shí)函數(shù)是需要耗費(fèi)CPU去執(zhí)行的,在此期間,CPU是不能執(zhí)行其它功能的,而定時(shí)器是需要用到 的時(shí)候,CPU自動(dòng)調(diào)用。

    s3c2440的定時(shí)器使用方法

    系統(tǒng)時(shí)鐘

    首先,應(yīng)先了解s3c2440的時(shí)鐘系統(tǒng)。MCU的主時(shí)鐘源主要是外部晶振或外部時(shí)鐘,目前用的最多的是外部晶振。MINI2440開(kāi)發(fā)板使用一個(gè)12MHz的外部晶振,如果CPU只工作在12MHz頻率下,開(kāi)發(fā)板的使用效率非常低,所有依賴(lài)系統(tǒng)時(shí)鐘工作的硬件,其工作效率也非常低,如果想提高CPU的工作效率,則需要對(duì)輸入時(shí)鐘進(jìn)行一系列處理,其流程如下:

    晶振頻率通過(guò)PLL(相環(huán))進(jìn)行倍頻處理。s3c2440有兩個(gè)PLL,分別是UPLL和MPLL。UPLL專(zhuān)用于USB模塊,提供48MHz,MPLL提供FCLK、HCLK和PCLK。FCLK是主頻時(shí)鐘,用于ARM920T內(nèi)核;HCLK用于AHB總線(xiàn)設(shè)備,如內(nèi)存控制、中斷控制、LCD控制、DMA以及USB主模塊;PCLK用于APB總線(xiàn)設(shè)備,如外圍設(shè)備的看門(mén)狗,IIS,I2C,PWM,MMC接口ADC,UART,GPIO,RTC以及SPI。

    s3c2440支持FCLK、HCLK和PCLK之間的分頻比例選擇,該比例由CLKDIVN寄存器中的HDIVN和PDIVN來(lái)決定。因此,我們只需確定FCLK,即可通過(guò)設(shè)定HDIVN和PDIVN來(lái)確定HCLK和PCLK。

    FCLK與輸入時(shí)鐘Fin之間的倍數(shù)關(guān)系(即晶振頻率通過(guò)PLL倍頻)是通過(guò)MPLLCON寄存器(如圖1所示)來(lái)設(shè)置的,MPLLCON寄存器中包含3個(gè)參數(shù):MDIV、PDIV、SDIV,公式如下:

    MPLL(FCLK) = (2*m*Fin) / (p*2^s)

    其中:m = MDIV + 8 , p = PDIV + 2 ,s = SDIV

    單片機(jī)定時(shí)器中斷原理及s3c2440的定時(shí)器使用方法

    圖1 MPLLCON寄存器

    總結(jié)一下,時(shí)鐘產(chǎn)生流程為:外部時(shí)鐘源→通過(guò)寄存器MPLLCON得到FCLK→再通過(guò)寄存器CLKDIVN得到HCLK和PCLK。

    定時(shí)器

    s3c2440有5個(gè)16-bit的定時(shí)器,定時(shí)器0、1、2、3具有PWM功能;定時(shí)器4只有一個(gè)內(nèi)部定時(shí)而沒(méi)有關(guān)聯(lián)到輸出管腳上;同時(shí),定時(shí)器0有一個(gè)dead-zeno產(chǎn)生器,用于大電流設(shè)備。

    定時(shí)器的輸入時(shí)鐘頻率信號(hào)跟預(yù)分頻器(prescaler)和分頻器(divider)相關(guān)。如圖2所示。

    預(yù)分頻器:定時(shí)器0和1共享一個(gè)8-bit預(yù)分頻器,定時(shí)器2、3、4共享另一個(gè)8-bit預(yù)分頻器,預(yù)分頻器數(shù)值由TCFG0配置,取值范圍是0~255。

    分頻器:同時(shí),每一個(gè)定時(shí)器都分別有一個(gè)時(shí)鐘分頻器,這樣就可以產(chǎn)生5個(gè)不同的分頻信號(hào),分頻器數(shù)值由TCFG1配置,取值只能是2、4、8、16,或者外部TCLKn。

    單片機(jī)定時(shí)器中斷原理及s3c2440的定時(shí)器使用方法

    圖2 定時(shí)器輸入時(shí)鐘框圖

    具體公式為:

    定時(shí)器輸入時(shí)鐘頻率=PCLK ÷ (prescaler+1) ÷ divider

    比如,已知PCLK=50MHz,我們希望某一個(gè)定時(shí)器的輸入時(shí)鐘頻率為25KHz,那么我們就需要配置prescaler=249,divider=8,則遞減計(jì)數(shù)器每減一次1,時(shí)間就過(guò)去0.04ms(1÷25000×1000)。

    TCONn為定時(shí)器控制寄存器,控制定時(shí)器的開(kāi)啟與關(guān)閉。

    定時(shí)計(jì)數(shù)緩沖寄存器TCNTBn用于存儲(chǔ)定時(shí)器的初始值,當(dāng)定時(shí)器啟動(dòng)時(shí),TCNTBn里的數(shù)值會(huì)被加載到遞減計(jì)數(shù)器TCNTn中。

    定時(shí)比較緩沖寄存器TCMPBn用于存儲(chǔ)定時(shí)器的比較值,TCMPBn的數(shù)值會(huì)被加載到比較寄存器TCMPn里來(lái)跟遞減計(jì)數(shù)器進(jìn)行比較。

    工作原理為:

    (1)將定時(shí)器的初始值和比較值裝入寄存器TCNTBn和TCMPBn中。

    (2)設(shè)置定時(shí)器控制寄存器TCON,啟動(dòng)定時(shí)器。此時(shí),TCMPBn和TCNTBn中的值會(huì)加載到寄存器TCMPn和TCNTn中。

    (3)定時(shí)器會(huì)減1計(jì)數(shù),即TCNTn進(jìn)行減1計(jì)數(shù),當(dāng)TCMPn=TCNTn時(shí),TOUTn引腳輸出取反。

    在通常應(yīng)用中,TCMPBn的值用于PWM,當(dāng)遞減計(jì)數(shù)器和比較計(jì)數(shù)器數(shù)值相等時(shí),電平會(huì)翻轉(zhuǎn),從而達(dá)到改變占空比的目的。如果僅僅是用于定時(shí)中斷,那么將TCMPBn設(shè)置為0,則當(dāng)遞減計(jì)數(shù)器達(dá)到0時(shí),定時(shí)器中斷請(qǐng)求通知CPU定時(shí)器操作已經(jīng)完成。當(dāng)定時(shí)器計(jì)數(shù)器到達(dá)零時(shí), 相應(yīng)的 TCNTBn的值將自動(dòng)被加載到遞減計(jì)數(shù)器以繼續(xù)下一次操作。然而,如果定時(shí)器停止了,例如,在定時(shí)器運(yùn)行模式期間清除TCONn的定時(shí)器使能位, TCNTBn的值將不會(huì)被重新加載到計(jì)數(shù)器中。

    s3c2440的定時(shí)器有一個(gè)雙緩沖功能,保證下次定時(shí)器操作時(shí)重加載的值改變時(shí)無(wú)需停止當(dāng)前的定時(shí)器操作。所以新的定時(shí)器的值設(shè)定,當(dāng)前的定時(shí)器操作也可以成功完成。定時(shí)器的值可以寫(xiě)到TCNTBn中,定時(shí)器的當(dāng)前計(jì)數(shù)值可以從TCNTOn中讀到。TCNTBn被讀取的值,不表明計(jì)數(shù)器的當(dāng)前狀態(tài),而是下一次定時(shí)器持續(xù)期間的重加載值。當(dāng)TCNTn為0,自動(dòng)重加載操作會(huì)復(fù)制TCNTBn到TCNTn中。但是,如果TCNTn為0,而自動(dòng)重加載的使能位為0,那么TCNTn不會(huì)再操作了。

    配置完定時(shí)器相關(guān)內(nèi)容,接下來(lái)是配置中斷,如設(shè)置中斷模式(IRQ或FIQ),將定時(shí)器執(zhí)行函數(shù)對(duì)應(yīng)定時(shí)中斷入口地址等等,這里不多加贅述。


  • ·上一篇:
    ·下一篇:
  • 其他關(guān)聯(lián)資訊
    深圳市日月辰科技有限公司
    地址:深圳市寶安區(qū)松崗鎮(zhèn)潭頭第二工業(yè)城A區(qū)27棟3樓
    電話(huà):0755-2955 6626
    傳真:0755-2978 1585
    手機(jī):131 1300 0010
    郵箱:hu@szryc.com

    深圳市日月辰科技有限公司 版權(quán)所有:Copyright?2010-2023 www.kqne.cn 電話(huà):13113000010 粵ICP備2021111333號(hào)