本文描述基于mini6410平臺(tái)的time.c中的相關(guān)代碼,主要描述下對(duì)部分代碼的理解。
先貼上代碼:
1 /* we use the shifted arithmetic to work out the ratio of timer ticks
2 * to usecs, as often the peripheral clock is not a nice even multiple
3 * of 1MHz.
4 *
5 * shift of 14 and 15 are too low for the 12MHz, 16 seems to be ok
6 * for the current HZ value of 200 without producing overflows.
7 *
8 * Original patch by Dimitry Andric, updated by Ben Dooks
9 */
10
11 /* timer_mask_usec_ticks
12 *
13 * given a clock and divisor, make the value to pass into timer_ticks_to_usec
14 * to scale the ticks into usecs
15 */
16 static inline unsigned long
17 timer_mask_usec_ticks(unsigned long scaler, unsigned long pclk)
18 {
19 unsigned long den = pclk / 1000;
20
21 return ((1000 << TIMER_USEC_SHIFT) * scaler + (den >> 1)) / den;
22 }
該函數(shù)主要的功能為換算出在某個(gè)時(shí)鐘頻率下,每個(gè)時(shí)鐘周期所對(duì)應(yīng)的微秒數(shù),且該微秒數(shù)經(jīng)過(guò)放大處理。
首先第19行代碼將時(shí)鐘頻率由MHZ轉(zhuǎn)換為KHZ,當(dāng)然前提是pclk以MHZ為單位計(jì)算。
分析下一行代碼前,先看下頻率轉(zhuǎn)換為微秒的計(jì)算公式:t = (10^6)/(pclk/scaler),上述公式表示在分頻后的時(shí)鐘頻率下一個(gè)時(shí)鐘周期對(duì)應(yīng)的微秒數(shù)。顯然上述公式可能出現(xiàn)小數(shù)部分,在計(jì)算機(jī)中我們用整型變量來(lái)保存數(shù)據(jù)時(shí),為了不減小精度,一般會(huì)將數(shù)據(jù)放大處理,因此將上述公式放大一定的倍數(shù),在得到最后結(jié)果前,再縮小相應(yīng)的倍數(shù)得到最后結(jié)果。在這里將上述公式放大了2^16倍,得到公式:
t = (10^6)*(2^16)/(pclk/scaler),
對(duì)上述公式變量替換并推導(dǎo):t = ((10^6)/1000)*(2^16)/((pclk/1000)/scaler)
= ((10^3)<<16)/(den/scaler)
= ((1000<<16)*scaler)/den。
為了減小誤差,對(duì)上述公式進(jìn)行四舍五入則得到公式:
((1000<<16)*scaler)/den + (1/2) = ((1000<<16)*scaler)/den + (den/2den)
= ((1000<<16)*scaler+den/2)/den
= ((1000<<16)*scaler+(den>>1))/den。
TIMER_USEC_SHIFT宏定義為16,由此第21行代碼便不言而喻了。
關(guān)于第5、6行注釋的理解:12MHZ轉(zhuǎn)換為微秒為(10^6)/(12*10^6)=1/12=0.08333333333 將其放大保存在整型變量里,這里是說(shuō)放大系數(shù)為2^15或2^14顯得太低,精度不夠。因此設(shè)置放大系數(shù)為2^16,并且2^16不會(huì)導(dǎo)致200HZ的頻率上溢。200HZ頻率表示5毫秒產(chǎn)生一個(gè)中斷,假設(shè)時(shí)鐘頻率就是12M,則5毫秒需要12*(10^6)*(5/1000)=60000個(gè)時(shí)鐘周期。((10^6)/(12*10^6))*(2^16)=5462(約等于), 5462*60000=0x13889C40,沒(méi)有造成溢出。個(gè)人理解,如有錯(cuò)誤之處,還請(qǐng)多多提點(diǎn)。
接下來(lái)再看另一段代碼:
1 /* timer_ticks_to_usec
2 *
3 * convert timer ticks to usec.
4 */
5
6 static inline unsigned long timer_ticks_to_usec(unsigned long ticks)
7 {
8 unsigned long res;
9
10 res = ticks * timer_usec_ticks;
11
12 res += 1 << (TIMER_USEC_SHIFT - 4); /* round up slightly */
13
14 return res >> TIMER_USEC_SHIFT;
15 }
該函數(shù)的主要功能是將時(shí)鐘周期數(shù)轉(zhuǎn)換為微秒數(shù),第10行代碼中全局變量timer_usec_ticks為由timer_mask_usec_ticks函數(shù)返回得到的值。該值乘以具體時(shí)鐘周期數(shù)便得到該時(shí)鐘周期數(shù)對(duì)應(yīng)的微秒數(shù)。后面第12行又加上了一個(gè)值,該值目的是進(jìn)行向上取整處理,以提高精度。第14行代碼右移處理便是將上面進(jìn)行放大倍數(shù)處理后的值還原為實(shí)際的結(jié)果值。
1<<(TIMER_USEC_SHIFT - 4) = 2^12, (2^12/2^16) 小于 1,因此起到向上取整的作用。
上一篇:ARM11 S3C6410 硬件浮點(diǎn)(VFP)實(shí)現(xiàn)
下一篇:玩轉(zhuǎn)S3C6410之一 交叉工具鏈制作(gcc4.5.1-armv6-vfp)
推薦閱讀最新更新時(shí)間:2025-06-30 12:55



設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來(lái)
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問(wèn)外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 使用 MaxLinear, Inc 的 SPX385AN-1.2/TR 的參考設(shè)計(jì)
- LTC4089,通用鋰離子電池充電器可在僅 2cm2 的面積內(nèi)從 USB 和 6V 至 36V 輸入供電
- LTC3425 的典型應(yīng)用 - 5A、8MHz、4 相同步升壓型 DC/DC 轉(zhuǎn)換器
- LT1934ES6 3.3V降壓轉(zhuǎn)換器典型應(yīng)用電路
- 使用 Analog Devices 的 LT1764AEFE-1.5 的參考設(shè)計(jì)
- EVAL-ADUC7039QSPZ,用于汽車系統(tǒng)的 ADUC7039 集成精密電池傳感器的評(píng)估板
- ADP1612-BL1-EVZ,用于 ADP1612 升壓轉(zhuǎn)換器的空白評(píng)估板
- DI-132 - 1.75W高效率線性充電器替代品
- 使用 MaxLinear, Inc 的 XRP7618IGB-F 的參考設(shè)計(jì)
- 基于STM32的貪吃蛇游戲設(shè)計(jì)(程序、PCB)
- Bourns 發(fā)布全新大功率金屬片電流檢測(cè)電阻, 采用 SMD 2010 緊湊型封裝
- 意法半導(dǎo)體推出先進(jìn)的 1600 V IGBT,面向高性價(jià)比節(jié)能家電市場(chǎng)
- EDPF-NT+分散控制系統(tǒng)網(wǎng)絡(luò)防護(hù)解決方案
- 基于PLC控制的易驅(qū)變頻器在布袋除塵器上的應(yīng)用
- 如何利用伺服自動(dòng)化實(shí)現(xiàn)成本降低和產(chǎn)能最大化?
- 壓力傳感器有哪些抗干擾措施?
- 破局!補(bǔ)盲dToF固態(tài)激光雷達(dá)輪番“出手”,禾賽FT120也要靠邊
- 利用正壓送風(fēng)壓力傳感器自動(dòng)控制火災(zāi)風(fēng)口壓力
- 多個(gè)傳感器間相互位置關(guān)系校準(zhǔn)方法
- 樓宇自控BA系統(tǒng)傳感器有哪些?
- 國(guó)內(nèi)外多個(gè)買家團(tuán)蒞臨,助力Medtec2019
- 蘋果將于秋季推出59款emoji表情,應(yīng)對(duì)打字累
- 魅族官宣:與三大運(yùn)營(yíng)商達(dá)成合作,20年上半年發(fā)布5G產(chǎn)品
- 紫光展銳攜手是德科技完成了26GHz頻段5G毫米波測(cè)試
- 紅米Note7系列推出全新配色鏡花水月,開(kāi)售在即
- 美股市再次以大幅下跌收盤,制定內(nèi)部計(jì)劃保障重要公司
- 可手動(dòng)也可自動(dòng) 寶馬旋轉(zhuǎn)屏專利通過(guò)審批
- 充電不用尋找充電樁,愛(ài)馳發(fā)布全新移動(dòng)充電專利,最高可充60度電
- 想要造車的蘋果終于傳來(lái)消息!已開(kāi)始申請(qǐng)驅(qū)動(dòng)電機(jī)專利
- 國(guó)內(nèi)最先進(jìn)衛(wèi)星通信“實(shí)踐二十號(hào)”成功完成各項(xiàng)核心實(shí)驗(yàn)
- 教你27招,讓你在社交,職場(chǎng)上人人對(duì)你刮目相看
- MAX32630FTHR開(kāi)發(fā)板到論壇啦,大賽報(bào)名還有6天,想要參與的小伙伴們不要錯(cuò)過(guò)!
- 艾默生意欲引領(lǐng)UPS 市場(chǎng)“立體戰(zhàn)”
- jlink V8 掉固件如何恢復(fù)
- 某美資芯片公司急聘Application Engineer
- PIC1939 關(guān)于I/O口配置及優(yōu)先級(jí)如何配置
- 請(qǐng)問(wèn)目前 SDI YPBPR S-Video等接口芯片有哪些?
- 2014年Microchip開(kāi)發(fā)工具5月促銷,最高55折優(yōu)惠!
- 做PCB飛針測(cè)試要不要做?
- Fuel Tank BoosterPack