迅为-4418开发板-驱动-PWM输出实验
本文档介绍了在 iTOP-4418 开发板上用 PWM 控制蜂鸣器输出的测试历程,基于 QtE 系统。4418MCU 共提供了 5 路 PWM 输出,其中一路未引出,所以共有 4 路可用的 PWM 输出。
注意:本文档中提供的例程,没有注册设备和驱动,只是在驱动入口和出口函数中进行了配置。如果用户需要生成设备节点,则需要自行添加剩余部分,这部分可以参考 GPIO 操作的文档。
1 配置 IO
打开底板电路图,搜索“beep”,可以看到 beep 的网络名为“MCU_ISO7816_CLK”,如下图所示。pwm = pwm_request(2, "buzzer");
if ( pwm == NULL ) {
printk("buzzer open error.
");
}
//printk(KERN_EMERG "pwm_request %d ",pwm);
ret=pwm_config(pwm,100000,200000);//设置了 1000Hz 频率的声音
printk("pwm_config %d ",ret);
printk("pwm_config %d ",ret);
ret=pwm_enable(pwm);
printk("pwm_enable %d ",ret);
printk(KERN_EMERG "done2.
") ;
return 0;
}
static void __exit buzzer_exit(void)
{
pwm_config(pwm,0,0); //关闭蜂鸣器输出
pwm_disable(pwm); // 关闭 pwm
pwm_free(pwm); // 释放 pwm 资源
}
module_init(buzzer_init);
module_exit(buzzer_exit);
MODULE_DESCRIPTION("pwm_buzzer driver");
MODULE_LICENSE("GPL");
2.2 编写 Makefile
接下来进行编写 Makefile 文件。
export ARCH=arm
obj-m += 4418x_pwm.o
KDIR := /home/topeet/4418/4G/20170914/android/kernel
PWD = $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o modules.order *.ko *mod.c Module.symvers
脚本中,export ARCH=arm 表示设置目标 CPU 类别为 arm,也就是编译的依赖内核和驱动模块目标 CPU 为 ARM。
obj-m += 4418x_pwm.o 表示编译的源文件为 4418x_pwm.c, 如果源文件名有变化,则需要修改成对应的文件名。
KDIR 参数指向对应的内核源码目录。作者的内核源码是在/home/topeet/4418/4G/20170914/android/kernel 目录下,用户要根据自己的具体情况来修改。
2.3 编译运行
首先设置环境变量,使其在编译时使用源码中的编译器。在源码目录中使用”cdkernel”进入 kernel 目录。然后使用命令“make menuconfig”打开内核缺省配置界面,如下图所示。