long clk_round_rate(struct clk *clk, unsigned long rate) //获取时钟频率 unsigned long clk_get_rate(struct clk *clk) //设置时钟频率 int clk_set_rate(struct clk *clk, unsigned long rate) 准备/使能clk: /* 开时钟前调用,可能会造成休眠,所以把休眠部分放到这里,可以原子操作的放到enable里 */ ...
比如CAN的输入参考时钟频率:freqCAN_REF_CLK = 24MHz 波特率分频值:can.BRPR[BRP] = 29 那么时间份额频率:freqTQ_CLK = 24MHz / (29+1) = 800KHz 设置同步跳转宽度为 3、相位缓冲段1为 2、相位缓冲段2位 15 CAN波特率:freqBIT_RATE = 24MHz / ((29+1)*(3+2+15) = 40kbps 而波特率的分频系...
int clk_enable(struct clk *clk); void clk_disable(struct clk *clk); unsigned long clk_get_rate(struct clk *clk); void clk_put(struct clk *clk); long clk_round_rate(struct clk *clk, unsigned long rate); int clk_set_rate(struct clk *clk, unsigned long rate); int clk_set_parent(...
ret = clk_set_rate(clkp, rounded_rate); 2. 例子:LCD clk 设置 LCD 时钟框图: 从图中可以清晰的看到,LCD functional clk有多个时钟src,实际使用的有PLL1624M,PLL1416M和PLL3,它有两个MUX,外部的MUX由APMU寄存器控制,决定是选择PLL1624M还是PLL1416M,然后通过内部寄存器LCD_SCLK_DIV在外部选择的clk src和...
intclk_set_rate(structclk*clk,unsignedlongrate) 准备/使能clk: /*开时钟前调用,可能会造成休眠,所以把休眠部分放到这里,可以原子操作的放到enable里*/ intclk_prepare(structclk*clk) /*停止clock后的善后工作,可能会睡眠。*/ voidclk_unprepare(structclk*clk) ...
static const struct clk_ops rlx_divider_ops = { .enable = rlx_enable_clk, .disable = rlx_disable_clk, .round_rate = rlx_round_rate, .set_rate = rlx_set_rate, .set_parent = rlx_set_parent, .get_parent = rlx_get_parent,
首先通过clk_get函数,根据clk节点的名字,获取clk节点。然后,使用clk_set_rate() 函数设置clk节点的时钟。clk_set_rate() 函数最终将会调用clk节点对象的成员函数clk->set_rate() 设置时钟。 层次关系如下图所示: 驱动层 1. 驱动层与porting层之间的api 驱动层与porting层之间的api,定义在include/linux/clk.h...
内核使用 struct clk 结构描述一个外设模块的时钟信息: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 struct clk { struct list_head list; struct module *owner; struct clk *parent; const char *name; const char *devname;//设备名,用来查找。 int id; int usage; unsigned long rate; unsigned...
\n", bits_per_pixel); return -1; } of_property_read_u32(display_np, "bus-width", &bus_width); clk_pix = devm_clk_get(&pdev->dev, "pix"); clk_axi = devm_clk_get(&pdev->dev, "axi"); clk_set_rate(clk_pix, dt->pixelclock.typ); clk_prepare_enable(clk_pix); clk_...
|-->__arch_timer_setup(ARCH_TIMER_TYPE_CP15, clk);//注册CP15寄存器类型的定时器。 |-->dev->name = "arch_sys_timer"; |-->clockevents_config_and_register(dev, freq) |-->clockevents_register_device(dev); //向系统注册clockevents设备 ...