linux-2.2.12内核之clk_get()函数浅析

clk_get(NULL,"adc")可以获得adc时钟,每一个外设都有自己的工作频率,

PRSCVL是A/D转换器时钟的预分频功能时A/D时钟的计算公式

A/D时钟  = PCLK / (PRSCVL+1),

注意:AD时钟最大为2.5MHZ并且应该小于PCLK的1/5



clk_get从一个时钟list链表中以字符id名称来查找一个时钟clk结构体并且返回,最后调用clk.enable(),来时能对应的外设时钟源。

clk_get(NULL,"adc"),函数的第二个参数adc是在内核2.2.12中的arch/arm/mach-s3c2410/clock.c文件中定义的

/* clock definitions */


static struct clk init_clocks[] = {
{ .name    = "nand",
 .id   = -1,
 .parent  = &clk_h,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_NAND
},
{ .name    = "lcd",
 .id   = -1,
 .parent  = &clk_h,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_LCDC
},
{ .name    = "usb-host",
 .id   = -1,
 .parent  = &clk_h,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_USBH
},
{ .name    = "usb-device",
 .id   = -1,
 .parent  = &clk_h,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_USBD
},
{ .name    = "timers",
 .id   = -1,
 .parent  = &clk_p,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_PWMT
},
{ .name    = "sdi",
 .id   = -1,
 .parent  = &clk_p,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_SDI
},
{ .name    = "uart",
 .id   = 0,
 .parent  = &clk_p,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_UART0
},
{ .name    = "uart",
 .id   = 1,
 .parent  = &clk_p,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_UART1
},
{ .name    = "uart",
 .id   = 2,
 .parent  = &clk_p,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_UART2
},
{ .name    = "gpio",
 .id   = -1,
 .parent  = &clk_p,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_GPIO
},
{ .name    = "rtc",
 .id   = -1,
 .parent  = &clk_p,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_RTC
},
{ .name    = "adc",
 .id   = -1,
 .parent  = &clk_p,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_ADC
},
{ .name    = "i2c",
 .id   = -1,
 .parent  = &clk_p,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_IIC
},
{ .name    = "iis",
 .id   = -1,
 .parent  = &clk_p,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_IIS
},
{ .name    = "spi",
 .id   = -1,
 .parent  = &clk_p,
 .enable  = s3c24xx_clkcon_enable,
 .ctrlbit = S3C2410_CLKCON_SPI
},
{ .name    = "watchdog",
 .id   = -1,
 .parent  = &clk_p,
 .ctrlbit = 0
}
};




你可能感兴趣的:(C,linux——ARM)