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代表正常極性![](https://pic.w3help.cc/ef5/5e4f79fd4cf20b1349c8e6c971bf3.jpeg)
圖中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檔案裡定義了 當然下面使用哪個要看一下。...