蜂鸣器
1、通过向寄存器写入特定的值来控制蜂鸣器发出声音。
2、在遇到无法卸载Linux驱动时通过直接修改Linux驱动相应的内存地址删除Linux驱动避免重启机器的麻烦。
3、通过不同的源代码文件存放不同的的功能代码有利于代码的分类和管理。
4、Main.c是Linux驱动的主程序。
5、初始化Linux驱动
Static int _init main _init(void)
6、卸载Linux驱动
Static void _exit main _exit(void)
7、注册初始化Linux驱动的函数
Module_init(main_init);
8、注册卸载Linux驱动的函数
Module_exit(main_exit);
9、代码重用分为静态和动态两种、
10、强行卸载Linux驱动发生的情况:
初始化函数崩溃、卸载函数被阻塞、
11、通过相应的寄存器来控制蜂鸣器的打开和关闭。
12、蜂鸣器驱动原理:蜂鸣器也称为PWM(脉冲宽度调制),基本原理是通过脉冲来控制蜂鸣器的打开和关闭。
13、通过I/O命令打开和关闭PWM。
14、PWM设备文件的close函数
Static int s3c64xx_pwm_close(struct inode *inode,struct file *file)
15、释放信号量
Up(&lock);
16、打开PWM
Pwm_start();
17、停止PWM
Pwm_stop();
18、初始化信号量
Init_MOTEX(&lock);
19、注册设备文件
/dev/pwm_den
20、移除设备文件
Misc_deregister(&misc);
21、I/O命令;打开PWM
#define PWM_IOCTL_START 1
22、I/O命令;停止PWM
#define PWM_IOCTL_STOP 0
23、打开PWM的函数
Extern void pwm_start(void);
24、停止PWM的函数
Extern void pwm_stop(void);
25、将GPFCON寄存器的高两位清零,其他位保留
Tmp &=~(0x3U << 30);
26、将GPFCON寄存器的高两位设为10
Tmp |= (0x2U << 30);
27、将新的值写会GPFCON寄存器,PWM开始尖叫
Iowrite32(tmp, s3c64XX_GPFCON);
28、将新的值写会GPFCON寄存器,PWM停止发出尖叫
Iowrite32(tmp, s3c64XX_GPFCON);
29、打开PWM
# ./ioctl /dev/pwm_dev 1 0
30、停止PWM
# ./ioctl /dev/pwm_dev 0 0