第八章蜂鸣器驱动

一、PWM原理:PWM连接到了TOUT1端口。

PWM使用端口FGPFCON寄存器进行控制。该寄存器在Linux内核中对应的宏是S3C64XX_GPFCON,该宏表示GPFCON寄存器的虚拟地址。GPFCON只用了最高两位(3031位)来控制PWM。当最高两位为10时,打开PWM。为00时停止PWM。所以只需通过iowrite32函数为GPFCON寄存器设置不同的值即可。

PWM驱动的三个文件:

Pwm.c 驱动主程序

Pwm_fun.h 引用了相应的头文件,以及定义了一些宏

Pwm_fun.c 文件包含了打开和停止PWM的两个函数(pwm_startpwm_stop

Makefile编译器看出,首先将pwm.cpwm_fun.c文件编译成pwm.opwm_fun.o,然后将这两个*.o文件链接成pwm_driver.o,最后生成pwm_driver.ko

二、Linux驱动代码的重用

静态重用:

例如:main.c  fun.c  product.c  product.h四个文件。其中,main.cLinux驱动的主程序。在fun.cproduct.cproduct.h中定义和实现了在main.c中使用的函数。在main.c中通过extern关键字使用fun.c中的函数,通过包含(includeproduct.h文件使用product.c中的函数。

需要注意的是,在Main.c文件中多了两个宏(_init_xit),这两个宏分别用来标识Linux驱动初始化函数(main_init)和(main_exit)。并不是必须使用,但使用它们会提高Linux驱动的运行效率。因为这两个宏是编译指令,如果用他们来标识main_initmain_exit函数,Linux就会认为main_initmain_exit函数是专门用来初始化和卸载Linux驱动的,会使这两个函数单独放在某个内存区域,从而提高效率。

原文地址:https://www.cnblogs.com/BJBLOG/p/5651397.html