版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、蜂鸣器控制一、 确定任务1、 掌握基本的字符设备的驱动程序设计。2、 掌握基本的文件操作。3、 掌握在操作系统下的PWM驱动程序的原理。二、 学习内容 1、 阅读S5PV210数据手册,熟悉PWM的原理。2、 编写PWM输出的应用程序。3、 编写makefile文件4、下载并调试PWM输出的应用程序。三、基础知识1、 硬件原理:a) 原理图:b) 系统框架由该图可知,在选取了PCLK作为时钟源后,需经过8BIT PRESCALER0分频器,而后,经过1/1或1/2或1/4或1/8或1/16分频器后,送到逻辑控制电路(Control LogicX)后,被送到引脚输出。所以,对PWM的操作就是围绕
2、设置时钟分频,得到合适的频率,然后,设置逻辑控制电路得到合适的脉宽。c) 寄存器简介:寄存器TCFG0用于配置PWM的预分频比,TCFG015:8八位用于配置计时器2、3、4(timer2、timer3、timer4)的预分频值。TCFG07:0八位用于配置计时器0、1的预分频值。寄存器TCFG1用于配置PWM的分频比。PWM控制寄存器TCON,设置启动PWM,装载寄存器,输出反相及寄存器自动装载等功能。TCNTB0是timer0的定时器计数寄存器。TCMPB0是timer0的定时器比较寄存器。TCNTO0是timer0的定时器计数寄寄存器,可以从中读出当前计数寄存器中的值。四、代码设计 1、
3、 PWM输出的原理:PWM输出脚,默认为低电平,PWM计数器TCNTn的初始值等于TCNTBn,当TCNTn的值递减到等于TCMPBn的值时,PWM输出高电平,当PWM计数器的递减到0时,输出又变为低电平,如此周而复始。2、 驱动原理:该驱动实现为一个字符设备,通过ioctl函数来设置相关寄存器的值,以此来实现PWM波形的输出与禁止3、 驱动代码分析:(详细代码请查看附件)#define DEVICE_NAME"pwm" /设备名称#define PWM_IOCTL_SET_FREQ1 / 设置pwm输出的频率#define PWM_IOCTL_STOP0/停止pwm#de
4、fine NS_IN_1HZ(1000000000UL) /用于设置计数器值来获取相应频率#define BUZZER_PWM_ID0#define BUZZER_PMW_GPIOS5PV210_GPD0(0)/蜂鸣器的输出端口static struct pwm_device *pwm4buzzer; /pwm 设备结构static struct semaphore lock; /信号锁static void pwm_set_freq(unsigned long freq) pwm_config(pwm4buzzer, period_ns / 2, period_ns); /设置周期pwm_e
5、nable(pwm4buzzer); /使能pwmstatic int gec210_pwm_close(struct inode *inode, struct file *file) up(&lock);/p操作 return 0;static long gec210_pwm_ioctl(struct file *filep, unsigned int cmd,unsigned long arg)switch (cmd) case PWM_IOCTL_SET_FREQ:pwm_set_freq(arg); /设置输出频率case PWM_IOCTL_STOP: /停止default:
6、pwm_stop();static struct file_operations gec210_pwm_ops = /pwm操作接口;static struct miscdevice gec210_misc_dev = /misc设备;static int _init gec210_pwm_dev_init(void) ret = gpio_request(BUZZER_PMW_GPIO, DEVICE_NAME);gpio_set_value(BUZZER_PMW_GPIO, 0);s3c_gpio_cfgpin(BUZZER_PMW_GPIO, S3C_GPIO_OUTPUT); /设置为
7、输出端口pwm4buzzer = pwm_request(BUZZER_PWM_ID, DEVICE_NAME); /请求设备资源init_MUTEX(&lock); /初始化信号锁ret = misc_register(&gec210_misc_dev);/注册misc设备static void _exit gec210_pwm_dev_exit(void) pwm_stop(); /停止pwmmisc_deregister(&gec210_misc_dev); /接触misc设备module_init(gec210_pwm_dev_init);module_exit
8、(gec210_pwm_dev_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("GEC Inc.");MODULE_DESCRIPTION("S5PV210 PWM Driver");4、 驱动代码makefile请参考前面几章编写5、 测试代码简析(详细代码请查看附件)int main(int argc , char *argv)if(argc=3)/例: ./buzzer on 100 或者./buzzer off 100buzzer_fd = open("/dev/pwm"
9、;,O_RDWR); /打开设备freq = strtol(str , &endstr, 0);if(!strncmp(argv1, "on" ,2) /判断是否为打开指令ioctl(buzzer_fd, BUZZER_IOCTL_SET_FREQ , freq );else if(!strncmp(argv1, "off", 3) /判断是否为关闭指令ioctl(buzzer_fd , BUZZER_IOCTL_STOP , freq);elseclose(buzzer_fd);/ 出错处理;exit(EXIT_FAILURE);else if
10、(argc =2) /例: ./buzzer offbuzzer_fd = open("/dev/pwm",O_RDWR);if(!strncmp(argv1, "off", 3)/判断是否为关闭指令ioctl(buzzer_fd , BUZZER_IOCTL_STOP , freq);elseclose(buzzer_fd);exit(EXIT_FAILURE);else /输入的参数不等于3或者2Usage(argv0);exit(EXIT_FAILURE);close(buzzer_fd);return 0;编写测试程序makefile文件(可参考
11、前面几章makefile文件编写),以下编写一个较为通用的makefile ,在后面章节中读者只需将TARGET修改为相应的目标文件即可SRC =$wildcard *.cOBJ =$patsubst %.c,%.o,$(SRC)TARGET = buzzerCROSS = arm-linux-CC =$(CROSS)gcc.phony:clean echo$(TARGET): $(OBJ)$(CC) $(LDFLAGS) -o $ $(OBJ) $(LIBM) $(LDLIBS) $(LIBGCC) -lmclean:$(RM)$(OBJ) $(TARGET) *.elf *.gdb ech
12、o:echo $(OBJ) $(TARGET)五、编译代码和运行1、在PC机上建立目录/gec/buzzer/driver_code将附件中buzzer_drv.c和Makefile拷贝到该目录下,在在终端上键入make命令,即可生成目标文件buzzer_drv.ko。将buzzer_drv.ko文件下载到目标板/tmp目录。在终端输入:rootgec /tmp# insmod buzzer_drv.ko rootgec /tmp# lsmodbutton_drv 5240 0 - Live 0xbf0000002、在PC机上建立目录/gec/buzzer/app_code/将附件中buzzer.c和makefile拷贝到该目录下,在终端上键入make命令,即可生成目标文件bu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- HJ 781-2016 固体废物 22种金属元素的测定 电感耦合等离子体发射光谱法-建筑规范、标准、图集
- 2026年批量伤员救治处置试题及答案
- 计算机艺术试题及答案
- 高中音乐教资试题真题及答案
- 四年级德育考试题目及答案
- 高技汽车维修试题及答案
- 生物职业技术测试题及答案
- 2026年节前节后安全检查试题及答案
- 2026年梅州市市直事业单位招考及易考易错模拟试题(共500题)试卷后附参考答案
- 厨师试卷和答案
- 2025年秋人教版八年级数学上册 13.2 与三角形有关的线段(学习、上课课件)
- 项目成本核算实施细则
- 苏州博特蒙电机有限公司扩建生产和研发无 刷永磁电机项目报告表
- DBJ50-T-200-2024 建筑桩基础技术标准
- 四川大学华东理工大学分析化学第六版课后答案
- 创伤救治流程质量控制制度
- 曹海涛出的数学试卷
- UL489标准中文版-2019断路器UL标准中文版
- 西南林业大学《数据结构》2021-2022学年期末试卷
- DB3502∕T 087-2022 海绵城市建设设计标准图集
- 运输管理实务课件4.5铁路运费计算2
评论
0/150
提交评论