linux 驅動之PWM蜂鳴器驅動

2021-10-05 17:43:09 字數 3234 閱讀 6305

table of contents

1、常用pwm函式

2、驅動程式設計例項

3、應用程式設計

4、pwm裝置樹節點配置

5、核心配置

6、測試

//申請乙個pwm裝置

pwm_device *pwm_get(struct device *dev, const char *con_id);

//配置pwm週期和占空比

int pwm_config(struct pwm_device *pwm, int duty_ns,

int period_ns);

//使能pwm

int pwm_enable(struct pwm_device *pwm);

關閉pwm

int pwm_enable(struct pwm_device *pwm);

#include #include #include #include #include #include #include #include #include #define hz_to_nanoseconds(x) (1000000000ul/(x))

struct pwm_beeper ;

struct pwm_beeper *beeper;

static int beep_open(struct inode *inode, struct file *fp)

static ssize_t beep_read (struct file *fp, char __user *user_buf,

size_t count, loff_t *position)

static ssize_t beep_write(struct file *fp, const char __user *user_buf,

size_t count, loff_t *position)

ret = copy_from_user(&beepev, user_buf, sizeof(struct input_event));

if(ret<0)

if (beepev.type != ev_snd || beepev.value < 0)

return -einval;

if (beepev.value == 0)

else

ret = pwm_enable(beeper->pwm);

if(ret)

}

return 0;

}static int beep_close (struct inode *inode, struct file *fp)

return 0;

}const struct file_operations beepfops =;

struct miscdevice beepmisc=;

static int pwm_beeper_probe(struct platform_device *pdev)

misc_register(&beepmisc);

//platform_set_drvdata(pdev, beeper);

return 0;

}static int pwm_beeper_remove(struct platform_device *pdev)

kfree(beeper);

return 0;

}static int __maybe_unused pwm_beeper_suspend(struct device *dev)

static int __maybe_unused pwm_beeper_resume(struct device *dev)

return 0;

}static ******_dev_pm_ops(pwm_beeper_pm_ops,

pwm_beeper_suspend, pwm_beeper_resume);

#ifdef config_of

static const struct of_device_id pwm_beeper_match = ,

,};module_device_table(of, pwm_beeper_match);

#endif

static struct platform_driver pwm_beeper_driver = ,

};module_platform_driver(pwm_beeper_driver);

module_author("lars-peter clausen ");

module_description("pwm beeper driver");

module_license("gpl");

module_alias("platform:pwm-beeper");

#include#include#include#include#include#include#includeint main(int argc, char **ar**)

beep_evn.type = ev_snd;

beep_evn.code = snd_tone;

beep_evn.value = 2000;

while(1)

close(fd);

return 0;

}

beep ;
其中pwms這個屬性名字固定不能變,&pwm 0兩項代表pwmout0同道,4000000代表初始化頻率,0代表正常極性

圖中inverter off代表正常極性,正常極性表示定時器計數值大於比較值同道輸出高電平,否則輸出低電平,反向極性則相反。

&pwm ;
利用pinctrl子系統初始化pwm引腳功能,選擇pwm0_out

ok6410 PWM 驅動蜂鳴器

驅動程式 include include include include include include include include include include include include include include include include include include i...

Linux系統PWM驅動

硬體平台 imx6 核心版本 kernel3.0.35 在linux核心中有乙個規律,linux核心開發者把通用的東西都總結出來,個性化的東西就留出介面,和gpio驅動類似,pwm驅動在核心中也提供了對應的介面函式,核心提供的介面函式宣告在include linux pwm.h中 申請乙個pwm資源...

Linux驅動基礎 platform裝置驅動

以高通平台為例,會在kernel arch arm mach msm下的相應的board c檔案裡邊用 dt machine start 這個巨集定義一系列的晶元。以高通8916為例 在kernel arch arm mach msm board 8916.c檔案裡定義了 當然下面使用哪個要看一下。...