初步概念: 看datasheet的關於時鐘與定時器的部分,
fclk供給cpu,
hclk供給ahb匯流排裝置(儲存器控制器,中斷控制器、lcd控制器、dma、usb主機控制器等),
pclk供給apb匯流排上的裝置(watchdog、iis、i2c、 pwm、定時器、adc、uart、gpio、rtc、spi)
上電時 fclk的時鐘等於外部時鐘fin, 然後等待locktime後, 依照mpllcon暫存器的設定,倍頻到高頻。
upllcon專用於usb同於mpllcon。
關於分頻: clkdivn暫存器設定fclk、hclk、pclk的分頻比。
時鐘控制暫存器clock control register (clkcon)
暫存器的每一位大部分控制乙個硬體模組的時鐘源,這個功能將被用於核心控制硬體模組的方式,首先核心定義了
static struct clk
init_clocks = , ,,
}(其中的每一項為clock結構體)
結構體,其中ctrlbit項
對應於clkcon的每一位,其中每一項的編號是通過 name來識別, 操作函式都為s3c24xx_clkcon_enable, 其中parent項表示該模組的時鐘**。
在核心裡面有時候我們需要自己手動的開啟硬體模組,方法如下:
static struct clk *adc_clock;
定義乙個clock時鐘,這個結構體代表乙個時鐘的抽象。
adc_clock = clk_get(null, "adc");
if (!adc_clock)
獲取相應模組所對應的clock結構體(存於static struct clk init_clocks中), clk_get函式是通過 name去 init_clocks結構體中遍歷找到相應的clock,進而獲得了硬體模組相應的clock結構體。
clk_enable(adc_clock);
使能clock,即使能clkcon中硬體模組相對應的位,從而實現了硬體模組的時鐘源使能。clk_enable函式使用遞迴方式使能相應的clkcon位,這個意思也就是說這個函式呼叫同時也會將這個時鐘源的上一級時鐘源同樣使能,一直往上推保證這條時鐘線ok,這個是主要的意思,具體涉及到上級時鐘源的設定還需要另外的機制控制,可以參照原始碼分析。
Linux時鐘管理透徹分析
硬體資源越來越龐大和複雜,核心的另乙個挑戰就是要便捷的管理這些資源。同時,面對如此之多的平台不同的cpu 管理機制需要統一適用,這就需要對資源的管理抽象 到更加通用的層次。cpu中各個模組都需要時鐘驅動,核心需 要一種機制能通用所有的 平台,方便的管理cpu上所有的clk資源。這裡分析linux對c...
CC2530之時鐘源
系統時鐘 相關暫存器 32 mhz 晶振 16 mhzrc振盪器 注意 2mhz晶振啟動時間對一些應用程式來說可能比較長 16mhzrc振盪器功耗低於晶振,但是由於不像晶振那麼精確,不能用於rf收發器操作 32 khz 晶振 32 khzrc振盪器 注意 相對於32 khzxosc解決方案32 kh...
fqueue初步分析
fqueue是國產的乙個類似memcacheq,kestrel這樣的支援memcached協議的輕量級開源mq。它的專案主頁 介紹和特點都可以看主頁,我就不廢話了。今天老大提到,co了原始碼看了下,寫個初步分析報告。首先是它的儲存層,主要是乙個fqueue這麼乙個抽象佇列,內部實現是fsqueue,...