一、PWM原理:PWM连接到了TOUT1端口。
PWM使用端口F的GPFCON寄存器进行控制。该寄存器在Linux内核中对应的宏是S3C64XX_GPFCON,该宏表示GPFCON寄存器的虚拟地址。GPFCON只用了最高两位(30和31位)来控制PWM。当最高两位为10时,打开PWM。为00时停止PWM。所以只需通过iowrite32函数为GPFCON寄存器设置不同的值即可。
PWM驱动的三个文件:
Pwm.c 驱动主程序
Pwm_fun.h 引用了相应的头文件,以及定义了一些宏
Pwm_fun.c 文件包含了打开和停止PWM的两个函数(pwm_start和pwm_stop)
从Makefile编译器看出,首先将pwm.c和pwm_fun.c文件编译成pwm.o和pwm_fun.o,然后将这两个*.o文件链接成pwm_driver.o,最后生成pwm_driver.ko
二、Linux驱动代码的重用
静态重用:
例如:main.c fun.c product.c product.h四个文件。其中,main.c是Linux驱动的主程序。在fun.c和product.c、product.h中定义和实现了在main.c中使用的函数。在main.c中通过extern关键字使用fun.c中的函数,通过包含(include)product.h文件使用product.c中的函数。
需要注意的是,在Main.c文件中多了两个宏(_init和_xit),这两个宏分别用来标识Linux驱动初始化函数(main_init)和(main_exit)。并不是必须使用,但使用它们会提高Linux驱动的运行效率。因为这两个宏是编译指令,如果用他们来标识main_init和main_exit函数,Linux就会认为main_init和main_exit函数是专门用来初始化和卸载Linux驱动的,会使这两个函数单独放在某个内存区域,从而提高效率。