s3c2410時鐘信號:FCLK、HCLK和PCLK
s3c2410 有三個時鐘FLCK 、HCLK 和PCLK (這3個時針都是核心時針)
s3c2410 芯片有這么一段話:
FCLKis used by ARM920T ,內(nèi)核時鐘,主頻。
HCLKis used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt controller, the LCD controller, the DMA and USB host block. 也就是為AHB總線上的外設(shè)提供時鐘信號,包括USB時鐘。 AHB總線用于連接高速外設(shè)。
PCLKis used for APB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMC interface,ADC, UART, GPIO, RTC and SPI. 也就是為APB總線上的外設(shè)提供時鐘信號,即IO接口時鐘,串口的時鐘設(shè)置就是從PCLK來的。APB總線用于連接低速外設(shè)。
The S3C2410X supports selection of Dividing Ratio between FCLK, HLCK and PCLK. This ratio is determined by HDIVN and PDIVN of CLKDIVN control register.
s3c2410可通過設(shè)置CLKDIVN控制寄存器的HDIVN位(第1位)和PDIVN位(第0位)來改變FCLK, HLCK 和 PCLK的比率。
那么如何獲取FCLK, HLCK 和 PCLK的時針頻率呢?
可先通過clk_get獲取一個clk結(jié)構(gòu)體
de>/* clk_get獲取一個名為id的時針
* 輸入?yún)?shù)dev: 可以為NULL
* 輸入?yún)?shù)id: 時針名稱,如fclk、hclk、pclk等
* 返回值: 返回該時鐘的clk結(jié)構(gòu)體
*/de>
de>struct clk *clk_get(struct device *dev, const char *id)
struct clk {
struct list_head list;
struct module *owner;
struct clk *parent;
const char *name; /* 該時針名稱 */
int id;
int usage;
unsigned long rate; /* 時鐘頻率 */
unsigned long ctrlbit;
int (*enable)(struct clk *, int enable);
int (*set_rate)(struct clk *c, unsigned long rate);
unsigned long (*get_rate)(struct clk *c);
unsigned long (*round_rate)(struct clk *c, unsigned long rate);
int (*set_parent)(struct clk *c, struct clk *parent);
};
de>
再將clk_get返回的clk結(jié)構(gòu)體傳遞給clk_get_rate,獲取該時鐘的頻率
de>unsigned long clk_get_rate(struct clk *clk)de>
一個例子:
de>printk(KERN_DEBUG"fclk = %d, pclk = %d, hclk = %d, uclk = %dn",
clk_get_rate(clk_get(NULL, "fclk")),
clk_get_rate(clk_get(NULL, "hclk")),
clk_get_rate(clk_get(NULL, "pclk")),
clk_get_rate(clk_get(NULL, "uclk")));de>
這里出現(xiàn)了另一個時針uclk,專門給usb供給時針信號。uclk是外部時針源,由s3c2410芯片的gph8/uclk管腳引入,給uart提供外部時針信號,以獲取更精確地時針頻率。
關(guān)于AMBA片上總線
AMBA(Advanced Microcontroller Bus Architecture)是由ARM公司提出的片上總線規(guī)范。AMBA 2.0規(guī)范包括四個部分:AHB(AMBA高性能總線)、ASB(AMBA系統(tǒng)總線)、APB(AMBA外設(shè)總線)和Test Methodology。
the Advanced High-performance Bus(AHB)應(yīng)用于連接高性能、高時鐘頻率的系統(tǒng)模塊(如CPU、DMA和DSP等)它構(gòu)成了高性能的系統(tǒng)骨干總線( back-bone bus )。AHB bus上的外設(shè)有LCD controller(CONT代表controller,控制器)、USB Host CONT、ExtMaster、Nand CONT和nand flash boot loader、bus CONT、interrupt CONT、power management、memory CONT(sram/nor/sdram等)。
the Advanced System Bus(ASB)是第一代AMBA系統(tǒng)總線,同AHB相比,它數(shù)據(jù)寬度要小一些,它支持的典型數(shù)據(jù)寬度為8位、16位、32位。
the Advanced Peripheral Bus(APB)是本地二級總線(local secondary bus ),通過橋和AHB/ASB相連。它主要是為了滿足不需要高性能流水線接口或不需要高帶寬接口的設(shè)備的互連。APB bus上的外設(shè)有UART、USB device、SDI/MMC、Watch Dog Timer、bus CONT、spi、iic、iis、gpio、rtc、adc、timer/pwm。