天天看點

[ARM7--LPC23xx]LPC23xx定時器學習

問題描述:LPC是ARM7架構的通用型嵌入式處理器,适用于各種嵌入式裝置應用。當然,其出現時間較早,與之後的ARM9,ARM10,ARM-Cortex系列相比在處理速度上是相對較慢的,但在價格上是有優勢的,如果不是做很複雜的高端應用系統,ARM7在工業控制領域等許多方面都還是勝任的。LPC有四個定時器,定時器在應用中的作用很重要,比如常見的定時、計數功能,可以準确控制執行動作的間隔,控制發送資料的速率等方面都很有用,用作系統程式設計中的延時也是非常重要的一個應用。以下簡單記錄下LPC23xx定時器的一些用法等。

LPC23xx定時器:

Timer0/1/2/3的配置用到的寄存器有:PCONP寄存器的PCTIM0/1/2/3位,用于定時器的開關(對應位為1為開,0為關)。複位後,定時器0/1可用,定時器2/3禁用。與硬體時鐘有關的寄存器,PCLK_SELO寄存器(對應的PCLK_TIMER0/1位),PCLK_SEL1寄存器(對應的PCLK_TIMER2/3位)。引腳複用配置,由于幾乎每個引腳都複用幾個功能,是以在寄存器PINSELn和PINMODEn中配置定時器引腳功能。定時器中斷的設定,對于比對與捕獲事件在寄存器T0/1/2/3MCR和T0/1/2/3CCR寄存器中,對于定時器中斷使能在VICIntEnable寄存器。

四個32位定時器的功能是相同的,可用于計數内部事件,脈寬調制,定時器應用。定時器的機理是計算硬體時鐘或者是從外部提供的時鐘的周期數。

具體寄存器設定:

IR寄存器:即中斷寄存器,有8位,4位用于比對中斷,4位用于捕獲中斷。中斷發生時,對應的IR寄存器的位就自動置1。向IR寄存器的位寫1可以複位中斷(應當就是清除中斷标志位的意思了),寫0是沒有作用的。

TC寄存器:即定時計數寄存器,當prescale計數器(把時鐘周期擴大計數,即可以設定成時鐘周期的整數倍進行一次計數)到最後一個計數值時,TC寄存器就加1。如果中途沒有複位,TC寄存器會一直計數到0xFFFFFFFF,然後又回到0x00000000。這個計數溢出事件不會導緻中斷,但可以用一個比對寄存器來檢測這個計數溢出事件。

MCR寄存器:即比對控制寄存器,用來控制當一個比對寄存器比對TC時如何進行操作。具體操作(以Timer0為例):MR0I位,為1時,當MR0比對TC值時産生中斷。MR0R位,為1時,當MR0比對TC時TC将複位。MR0S位,為1時,當MR0比對TC時,TC和PC将停止,且TCR[0]将清零。

MR0-MR3:即四個比對寄存器,這個寄存器的值将不斷和TC寄存器的值進行比較,當兩者相等時,将會自動觸發動作。動作可能是産生中斷、複位TC、停止定時器等(動作在上面的MCR寄存器設定)。