原创 写个驱动,控制主板蜂鸣器

2009-4-7 14:45 4815 8 11 分类: MCU/ 嵌入式

    当应用软件发生故障之后,最好能够通过蜂鸣器进行报警,为此,在Linux下写了一个非常小的IO驱动,实现了蜂鸣器的报警控制。下面对蜂鸣器的控制原理与实现进行简单说明,这种实现仅仅针对X86计算机系统。


528bb8d5-7550-4264-87c8-50e9a37e010b.JPG


       由上图可知,我们要控制蜂鸣器,那么首先通过定时器2产生一个驱动方波信号,然后控制io使能信号,驱动蜂鸣器工作。通常计算机系统提供了三个定时器,其中定时器0用于产生操作系统的心跳时钟;定时器1用于产生SDRAM的周期性刷新信号(20ms左右);定时器2用于驱动蜂鸣器,产生报警信号。Intel8254芯片就提供了三路可编程定时器,一直沿用至今。8254控制该芯片的IO端口为IO_BASE + 0x40 ~ IO_BASE + 0x43,其中0x400x410x42分别为三路定时器的16位定时值寄存器,0x43为控制命令寄存器。控制命令寄存器的格式定义如下:


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


1.         bit76]——定时器选择位。选择对哪个计数器进行操作。“<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />00表示选择Counter 0,“01表示选择Counter 1,“10表示选择Counter 2,“11表示Read-Back Command(仅对于8254,对于8253无效)。


2.         bit54]——Read/Write/Latch格式位。“00表示锁存(Latch)当前计数器的值;“01只读写计数器的高字节(MSB);“10只读写计数器的低字节(LSB);“11表示先读写计数器的LSB,再读写MSB


3.         bit31]——Mode bits,控制各通道的工作模式。“000对应Mode 0;“001对应Mode 1;“010对应Mode 2;“011对应Mode 3(方波信号发生器);“100对应Mode 4;“101对应Mode 5


4.         bit0]——控制计数器的存储模式。0表示以二进制格式存储,1表示计数器中的值以BCD格式存储。


 


知道如何控制定时器2之后,剩下的一个问题就需要了解speaker使能的IO端口了。这个端口就是0x610x618255的一个端口,这个端口的低两位用来控制蜂鸣器,位信息描述如下:


1、  bit0用来使能counter2,当bit0==0时,禁止counter2,否则使能counter2


2、  bit1用来控制counter2输出的方波信号,当为1时输出使能,否则禁止输出。


 


了解上述信息之后就可以很容易在Linux内核控制蜂鸣器了,可以直接写一个字符驱动,然后应用软件通过IOCTL将具体的发声信息传递给内核,由内核完成蜂鸣器的驱动。蜂鸣器驱动的内核部分核心代码可以点击下载[https://static.assets-stash.eet-china.com/album/old-resources/2009/4/7/6d7f9f49-d9c3-4ffe-97fe-97ab9e43bf61.rar],感兴趣的朋友还可以将这个东西做成一个“虚拟小钢琴”,通过键盘来弹奏乐曲,可以自己娱乐一下。


 

文章评论3条评论)

登录后参与讨论

用户557358 2009-4-10 12:43

学习学习啦

tengjingshu_112148725 2009-4-7 18:08

学习啦,谢谢啦

tengjingshu_112148725 2009-4-7 18:08

学习啦
相关推荐阅读
用户411565 2012-12-18 12:58
我的存储之道博客
大家好,最近一直在做存储方面的工作,所以我在51CTO上专门开辟了一个空间讨论存储相关的问题,喜欢存储的朋友可以可以访问我的存储博客: 存储之道 (http://alanwu.blog.51cto...
用户411565 2012-04-06 21:39
SAS Cable可以有多长?
SAS接口是高端硬盘的主流接口,是存储系统的理想选择。我们知道高速信号的传输距离和传输线相关的,那么SAS作为外部通信接口,其Cable线具体可以有多长呢? 我在网上找到上图所示的眼图测...
用户411565 2012-04-06 21:38
对TRIM SCSI命令的一些分析
前一段时间做了一些对SSD方面进行优化的工作,SSD最大的问题在于长时间使用之后,IO性能会急剧下降。其主要问题在于为了防止“写放大”问题的产生,SSD的firmware采用了类似于log方式的算...
用户411565 2012-04-06 21:35
惊叹!我们的跨洋网络
  每次地质自然灾害的时候,总会伴随着网络的问题,这是由于我们的越洋光纤网络出了故障,受到自然力的破坏而导致断裂。越洋光纤,听起来的确是件非常不可思议的事情,工程量非常的巨大,但正是如此伟大的...
用户411565 2012-04-06 21:33
科学仪器网络模型
科学仪器概述     科学仪器发展趋势 科学是从测量开始的,科学仪器是信息技术的源头,是信息产业的重要组成部分,是现代科学与工业的基石。科学仪器产业的发展关系到国家科学研究实力、生...
用户411565 2012-04-06 21:16
谈谈RAID产品与技术
说起RAID,学计算机的同学马上会说RAID技术简单啊,就是将数据条带化,然后计算一些冗余数据,一并写入磁盘。通过RAID技术一方面提高系统的IO性能;另一方面提高系统的可靠性。单纯从RAID的原...
我要评论
3
8
关闭 站长推荐上一条 /2 下一条