前言
這篇主要介紹arm9時(shí)鐘與定時(shí)器方面,根據(jù)s3c2440手冊(cè)第七章的內(nèi)容來看,涉及到不少的知識(shí)點(diǎn),power管理、時(shí)鐘、usb時(shí)鐘、camera等,接下來只介紹時(shí)鐘方面,其余部分以后再說
簡(jiǎn)介
系統(tǒng)時(shí)鐘是整個(gè)電路的心臟,了解系統(tǒng)時(shí)鐘結(jié)構(gòu)對(duì)于后面學(xué)習(xí)定時(shí)器,UART等使用具有非常重要的作用,總體來說,與s3c2440處理器有關(guān)的時(shí)鐘主要有4種: FIN, FCLK, HCLK和PCLK 1.FIN:外部輸入晶振頻率 2.FCLK: 主要用于CPU核 3.HCLK:主要用于與AHB總線互連的設(shè)備(如存儲(chǔ)控制器, LCD控制器, 中斷控制器及DMA等)上 4.PCLK:主要用于與APB總線互連的低速設(shè)備(如定時(shí)器, UART, ADB等)上
圖解時(shí)鐘
s3c2440處理器系統(tǒng)時(shí)鐘分為兩個(gè)部分, 外部有時(shí)鐘輸入引腳,內(nèi)部用2個(gè)鎖相環(huán)將外部輸入時(shí)鐘倍頻到處理器工作說需要的時(shí)鐘, 外部時(shí)鐘頻率太高容易受到外部的干擾,因此一般外部時(shí)鐘頻率比較低, 如下圖:
■CLKDIVN:用于控制FCLK, HCLK和PCLK之間的比例關(guān)系
// LOCKTIME = 0x00ffffff; // 使用默認(rèn)值即可,在下面會(huì)討論CLKDIVN = 0x03; // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1/* 如果HDIVN非0,CPU的總線模式應(yīng)該從“fast bus mode”變?yōu)椤癮synchronous bus mode” */__asm__("mrc p15, 0, r1, c1, c0, 0\n" /* 讀出控制寄存器 */ "orr r1, r1, #0xc0000000\n" /* 設(shè)置為“asynchronous bus mode” */"mcr p15, 0, r1, c1, c0, 0\n" /* 寫入控制寄存器 */); MPLLCON = ((0x5c<<12)|(0x04<<4)|(0x01))
上面代碼注釋中,關(guān)于LOCKTIME的賦值,這個(gè)又是怎么回事兒呢,還是根據(jù)手冊(cè)
1
2
3
4
5
6
7
8
9
10
定時(shí)器 由上面可知,定時(shí)器是ABP總線設(shè)備,在PCLK的時(shí)鐘頻率下工作,s3c2440有5個(gè)16位定時(shí)器,定時(shí)器0,1,2,3有脈沖調(diào)制(PWM)功能, 因此這4個(gè)定時(shí)器也被稱為PWM定時(shí)器,定時(shí)器4是一個(gè)內(nèi)部定時(shí)器,無外部輸出引腳,定時(shí)器的時(shí)鐘源雖然是PCLK,但是還得通過內(nèi)部的兩個(gè)分頻器分頻后, 才能得到想要的工作頻率,然后輸出作為定時(shí)器的工作的時(shí)鐘,定時(shí)器0,1公用一個(gè)分頻器,其他3個(gè)定時(shí)器公用另一個(gè)分頻器,如下圖
定時(shí)器的工作原理描述,以定時(shí)器0為例: 1.首先,將TCMPB0,TCNTB0附初值 2.然后,設(shè)置定時(shí)控制器TCON,將TCON的第1位置1(手動(dòng)更新位), 這樣TCMPB0,TCNTB0賦值給TCMPB0,TCNTB0 3.啟動(dòng)定時(shí)器–>設(shè)置TCON第3位為1(當(dāng)TCNT0的值減到0時(shí),TCMPB0的值會(huì)自動(dòng)加載到寄存器TCMP0和TCNT0中), 第0位為1(開啟定時(shí)器) 4.此時(shí),定時(shí)器會(huì)減1計(jì)數(shù), 即TCNT0進(jìn)行減1計(jì)數(shù), 當(dāng)TCMP0與TCNT0相等時(shí), TOUT0翻轉(zhuǎn) 之后介紹一下相關(guān)的寄存器在手冊(cè)中的定義: ■TCON:對(duì)于定時(shí)器0來講:
定時(shí)器的分頻 前面提到了定時(shí)器0的使用方法,但是沒有提到其最終的工作所需要頻率(1s中能記多少個(gè)數(shù))
void timer0_init(void) { TCFG0 = 99; // 預(yù)分頻器0 = 99 TCFG1 = 0x02; // 選擇8分頻 TCNTB0 = 62500; // 1秒鐘觸發(fā)一次中斷 TCMPB0 = 0; TCON |= (1<<1); ? // 手動(dòng)更新(將TCNTB0,TCMPB0更新入TCNT0, TCMP0) ? ?TCON ? = 0x09; ? ? ?// 自動(dòng)加載,清“手動(dòng)更新”位,啟動(dòng)定時(shí)器0 ?}
PWM功能 對(duì)于定時(shí)器0來講,上面的例子中TCNT0 1s內(nèi)減到0,則TOUT0反轉(zhuǎn)(電平變化), 但是定時(shí)器0還有個(gè)特性,就是如果TCNT0減到與比較值TCMP0相等,則TOUT0也發(fā)生反轉(zhuǎn),也就是說上面的例子將 TCMPB0 改成31250后,則TCNT0從62500減到31250(與TCMP0相等)TOUT0發(fā)生一次反轉(zhuǎn)(用時(shí)0.5s),TCNT0減到0又發(fā)生反轉(zhuǎn)(用時(shí)0.5s),這樣,1s內(nèi)發(fā)生兩次反轉(zhuǎn),如此循環(huán),輸出引腳0.5s反轉(zhuǎn)一次,即占空比50%(波形0.5秒為高電平,0.5秒為低電平這樣循環(huán)的波形)
void timer0_init(void) { TCFG0 = 99; // 預(yù)分頻器0 = 99 TCFG1 = 0x02; // 選擇8分頻 TCNTB0 = 62500; // 1秒鐘觸發(fā)一次中斷 TCMPB0 = 31250; TCON |= (1<<1); ? // 手動(dòng)更新(將TCNTB0,TCMPB0更新入TCNT0, TCMP0) ? ?TCON ? = 0x09; ? ? ?// 自動(dòng)加載,清“手動(dòng)更新”位,啟動(dòng)定時(shí)器0 ?}
注意,如果將上面代碼TCMPB0=31250,改為別的值,比如TCNTB0 /4,則輸出的波形一定發(fā)生變化(比如0.25秒為高電平,0.75s為低電平這樣循環(huán)的波形),即占空比也發(fā)生變化,這就是所謂的PWM功能
-
arm9
+關(guān)注
關(guān)注
2文章
290瀏覽量
55246 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1758瀏覽量
132182 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3259瀏覽量
115884
原文標(biāo)題:深入時(shí)鐘與定時(shí)器
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
stm32基本定時(shí)器介紹
ARM9體系結(jié)構(gòu)的相關(guān)資料分享
構(gòu)造廉價(jià)的Arm9 開發(fā)平臺(tái)
ARM9與ARM7的比較及優(yōu)化

arm9與arm11有何區(qū)別?
學(xué)ARM9入門需要多久_學(xué)ARM9要看的書籍
ARM9入門學(xué)習(xí)心得分享
初學(xué)者是選ARM7還是ARM9?uCOS還是Linux?
Atmel最新的基于ARM9架構(gòu)的微處理器介紹
單片機(jī)MSP430入門理論⑧--定時(shí)器模塊-定時(shí)器A③

STM32定時(shí)器-基本定時(shí)器

五、【中級(jí)篇】時(shí)鐘樹、定時(shí)器、中斷

評(píng)論