编写Linux标准的PWM驱动
2015-11-23 15:25
585 查看
编写Linux标准的PWM驱动,需要定义一个结构体 struct pwm_device ,实现五个个PWM函数(include/linux/pwm.h),如下所示:
struct pwm_device;
/*
* pwm_request - request a PWM device
*/
struct pwm_device *pwm_request(int pwm_id, const char *label);
/*
* pwm_free - free a PWM device
*/
void pwm_free(struct pwm_device *pwm);
/*
* pwm_config - change a PWM device configuration
*/
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);
/*
* pwm_enable - start a PWM output toggling
*/
int pwm_enable(struct pwm_device *pwm);
/*
* pwm_disable - stop a PWM output toggling
*/
void pwm_disable(struct pwm_device *pwm);
其中, struct pwm_device 必须包含以下的内容:
struct pwm_device {
struct list_head list;
struct platform_device *pdev;
const char *label;
unsigned int period_ns;
unsigned int duty_ns;
unsigned char running;
unsigned char use_count;
unsigned char pwm_id;
};
代码的实现可以参考下面的文件:
arch/arm/plat-s3c/pwm.c
总结(以arm为例):
1. 编写文件 arch/arm/mach-xxxx/pwm.c
2. 修改 arch/arm/mach-xxxx/Makefile ,在最后一行加入下面的内容
obj-y += pwm.c
3. 修改arch/arm/Kconfig,找到 config ARCH_XXXX ,在下面添加
select H***E_PWM
struct pwm_device;
/*
* pwm_request - request a PWM device
*/
struct pwm_device *pwm_request(int pwm_id, const char *label);
/*
* pwm_free - free a PWM device
*/
void pwm_free(struct pwm_device *pwm);
/*
* pwm_config - change a PWM device configuration
*/
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);
/*
* pwm_enable - start a PWM output toggling
*/
int pwm_enable(struct pwm_device *pwm);
/*
* pwm_disable - stop a PWM output toggling
*/
void pwm_disable(struct pwm_device *pwm);
其中, struct pwm_device 必须包含以下的内容:
struct pwm_device {
struct list_head list;
struct platform_device *pdev;
const char *label;
unsigned int period_ns;
unsigned int duty_ns;
unsigned char running;
unsigned char use_count;
unsigned char pwm_id;
};
代码的实现可以参考下面的文件:
arch/arm/plat-s3c/pwm.c
总结(以arm为例):
1. 编写文件 arch/arm/mach-xxxx/pwm.c
2. 修改 arch/arm/mach-xxxx/Makefile ,在最后一行加入下面的内容
obj-y += pwm.c
3. 修改arch/arm/Kconfig,找到 config ARCH_XXXX ,在下面添加
select H***E_PWM
相关文章推荐
- linux block IO open的顺序图
- VMware安装RedHat Linux系统时出现该光盘无法被挂载错误怎么办?
- linux中删除指定日期之前的文件
- Linux vim利用ctags进行自动补全的问题
- Linux用户空间与内核空间,进程上下文与中断上下文
- Linux下查看操作系统信息、内存情况及cpu信息:cpu个数、核心数、线程数
- Linux之模块机制
- LINUX下C++编译器GCC
- linux centos目录结构(二)
- centos 安装 protobuf
- linux centos目录结构(一)
- linux 上传文件 rz命令 提示command not found 解决方法
- linux设备驱动归纳总结(四):5.SMP下的竞态和并发
- linux下软件安装包讲解
- Linux下查看文件和文件夹大小
- 【Linux】Linux下JDK合理的安装位置
- linux常见命令用法之(一)
- linux 进程学习笔记-进程退出/终止进程
- linux 进程学习笔记-暂停进程
- linux 进程学习笔记-进程跟踪