当前位置: 技术问答>linux和unix
如何理解sturct clk?
来源: 互联网 发布时间:2016-08-28
本文导语: #define TIMER_CR 5 // timer for TIN value analysis #define TIMER_ACT 4 #define __TIMER_CLK_NAME(x) "gpt_clk." # x //what mean for "gpt_clk." #x ? #define TIMER_CLK_NAME(x) __TIMER_CLK_NAME(x) #define IN...
#define TIMER_CR 5
// timer for TIN value analysis
#define TIMER_ACT 4
#define __TIMER_CLK_NAME(x) "gpt_clk." # x //what mean for "gpt_clk." #x ?
#define TIMER_CLK_NAME(x) __TIMER_CLK_NAME(x)
#define INT_CR INT_GPT6 //irq_no
#define INT_ACT INT_GPT5 //irq_no
在模块加载函数里有如下:
问题如注释、:
static int __init sfrir_init(void)
{
struct clk *clk; //如何理解此结构体?
struct sfrir_priv *priv = &devpriv;
// TIMER_CR=5, TIMER_ACT=4;
clk = clk_get(NULL, TIMER_CLK_NAME(TIMER_CR)); //clk_get()什么功能? 返回值是什么?
if (clk) {
clk_enable(clk); //what mean? 像是使能时钟,还是不解。
priv->cap_timer_rate = clk_get_rate(clk); //clk_get_rate什么功能? 同clk_get()有何不同?
clk_put(clk); //what mean?
}
clk = clk_get(NULL, TIMER_CLK_NAME(TIMER_ACT));
if (clk) {
clk_enable(clk);
priv->act_timer_rate = clk_get_rate(clk);
clk_put(clk);
}
priv->freq = SFRIR_FREQ_38KHZ;
init_processing_timer(priv);
// register irq_for INT_GPT5-6, INT_CR and INT_ACT is irq_no; 0 is irq_flag;
if (request_irq(INT_CR, capture_timer_isr, 0, DRVNAME "_cap", priv))
printk(KERN_ERR "Error registering IRQ capturen");
if (request_irq(INT_ACT, process_timer_isr, 0, DRVNAME "_act", priv))
printk(KERN_ERR "Error registering IRQ actionn");
// register sfrir_driver, return major_number
if ((major = register_chrdev(0, DRVNAME, &sfrir_fops))
// timer for TIN value analysis
#define TIMER_ACT 4
#define __TIMER_CLK_NAME(x) "gpt_clk." # x //what mean for "gpt_clk." #x ?
#define TIMER_CLK_NAME(x) __TIMER_CLK_NAME(x)
#define INT_CR INT_GPT6 //irq_no
#define INT_ACT INT_GPT5 //irq_no
在模块加载函数里有如下:
问题如注释、:
static int __init sfrir_init(void)
{
struct clk *clk; //如何理解此结构体?
struct sfrir_priv *priv = &devpriv;
// TIMER_CR=5, TIMER_ACT=4;
clk = clk_get(NULL, TIMER_CLK_NAME(TIMER_CR)); //clk_get()什么功能? 返回值是什么?
if (clk) {
clk_enable(clk); //what mean? 像是使能时钟,还是不解。
priv->cap_timer_rate = clk_get_rate(clk); //clk_get_rate什么功能? 同clk_get()有何不同?
clk_put(clk); //what mean?
}
clk = clk_get(NULL, TIMER_CLK_NAME(TIMER_ACT));
if (clk) {
clk_enable(clk);
priv->act_timer_rate = clk_get_rate(clk);
clk_put(clk);
}
priv->freq = SFRIR_FREQ_38KHZ;
init_processing_timer(priv);
// register irq_for INT_GPT5-6, INT_CR and INT_ACT is irq_no; 0 is irq_flag;
if (request_irq(INT_CR, capture_timer_isr, 0, DRVNAME "_cap", priv))
printk(KERN_ERR "Error registering IRQ capturen");
if (request_irq(INT_ACT, process_timer_isr, 0, DRVNAME "_act", priv))
printk(KERN_ERR "Error registering IRQ actionn");
// register sfrir_driver, return major_number
if ((major = register_chrdev(0, DRVNAME, &sfrir_fops))
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!