Linux系統PWM驅動【轉】
本文轉載自:https://blog.csdn.net/BorntoX/article/details/51879786
硬體平臺:IMX6
核心版本:kernel3.0.35
在linux核心中有一個規律,Linux核心開發者把通用的東西都總結出來,個性化的東西就留出介面,和GPIO驅動類似,PWM驅動在核心中也提供了對應的介面函式,核心提供的介面函式宣告在include/linux/pwm.h中
//申請一個PWM資源
struct pwm_device *pwm_request(int pwm_id, const char *label);
//釋放一個PWM資源
void pwm_free(struct pwm_device *pwm);
//配置PWM
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);
//使能PWM
int pwm_enable(struct pwm_device *pwm);
//不使能PWM
void pwm_disable(struct pwm_device *pwm);
針對核心的框架,IMX6對這些函式的實現位於arch/arm/plat-mxc/pwm.c中,利用這些介面函式我們就可以編寫自己的PWM驅動程式
步驟:
1 新增對PWM埠的初始化(本驅動基於飛思卡爾IMX6,這部分不同的板子會有些許不同)
在arch/arm/mach-mx6/board-mx6q_sabresd.h
在MX6Q_PAD_SD1_DAT3__PWM1_PWMO,後面新增
MX6Q_PAD_SD1_DAT1__PWM3_PWMO,
MX6Q_PAD_SD1_CMD__PWM4_PWMO,
MX6Q_PAD_SD1_DAT2__PWM2_PWMO,
2 使用pwm_request,pwm_free,pwm_config,pwm_enable,pwm_disable五個函式編寫混雜裝置驅動
驅動原始碼及應用程式見下載地址點選開啟連結