码迷,mamicode.com
首页 > 其他好文 > 详细

第八章 让开发板发出声音:蜂鸣器驱动

时间:2016-07-08 23:25:24      阅读:406      评论:0      收藏:0      [点我收藏+]

标签:

这一章的主要内容是让开发板发出声音——蜂鸣器驱动,在Linux驱动开发中重点也学习了这一部分内容,同时最后我们小组的考核内容是通过中断控制蜂鸣器发七个音符的音。

这一部分中,要中断控制蜂鸣器,在中断和蜂鸣器代码的基础上进行增加。中断与蜂鸣器的代码不变,在中断的测试代码中,首先要定义七个音符,之后将开发板上的七个键与七个音符相连接,再将七个音符的转换与蜂鸣器相连接,来达到所需的效果。

核心代码:

int main()

{

int fd,fd1;

int div;

int keyval;

fd1 = open("/dev/pwm",O_RDWR | O_NONBLOCK);

if ((fd = open("/dev/key", O_RDONLY)) < 0)

{

perror("fail to open");

exit(-1);

}

while ( 1 )

{

if (read(fd, &keyval, sizeof(int)) < 0)

{

perror("fail to read");

}

printf("key %d is pressed\n", keyval);

ioctl(fd1,BEEP_ON);

switch(keyval){

case 1 :

             div = (PCLK/256/16)/Do;

                         ioctl(fd1,SET_CNT,div);

                         break;

        case 2 :

                         div = (PCLK/256/16)/Re;

                         ioctl(fd1,SET_CNT,div);

                         break;

case 3:

                         div = (PCLK/256/16)/Mi;

                         ioctl(fd1,SET_CNT,div);

                         break;

case 4 :

                         div = (PCLK/256/16)/Fa;

                         ioctl(fd1,SET_CNT,div);

                         break;

case 5 :

                         div = (PCLK/256/16)/Sol;

                         ioctl(fd1,SET_CNT,div);

                         break;

case 6 :

                         div = (PCLK/256/16)/La;

                         ioctl(fd1,SET_CNT,div);

                         break;

case 7 :

                         div = (PCLK/256/16)/Si;

                         ioctl(fd1,SET_CNT,div);

                         break;

                }

}

return 0;

}

static long fs210_pwm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)

{

//printk("pwm: device ioctl\n");

switch(cmd)

{

case BEEP_ON:

printk("pwm: BEEP ON\n");

beep_on();

break;

case BEEP_OFF:

printk("pwm: BEEP OFF\n");

beep_off();

break;

case SET_CNT:

printk("pwm: SET CNT\n");

set_cnt(arg);

break;

default:

printk("pwm: available command\n");

return -EINVAL;

}

return 0;

}

当然这其中包含很多要学习的内容,例如初始化函数式init,退出函数是exit,在需要管道时要定义fd,还要学会将频率改变传给蜂鸣器进而使其发不同的音。

 

第八章 让开发板发出声音:蜂鸣器驱动

标签:

原文地址:http://www.cnblogs.com/JCoco/p/5654759.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!