【WCE】使用 8253 定时器蜂鸣 (CEPC BSP)
来源:互联网 发布:淘宝最长收货时间 编辑:程序博客网 时间:2024/05/01 17:03
通过测试,我们发现 Windows CE 没有实现 Beep 函数,亦注意到 x86 嵌入式系统在运行 Windows XPe 时能通过调用 Beep 函数来驱动蜂鸣器蜂鸣。经过对 Beep 函数反向工程以及 8253 定时器蜂鸣原理的研究,我们相信在 Windows CE 下同样能够蜂鸣。
首先,讲解一下早期 PC 上的 8253 定时器蜂鸣原理:
图中 CLOCK 是时钟(fc=1,193,180 Hz);GATE2 是片选;OUT2 是输出引脚,用于调制声波;COUNT 是计数寄存器;CONTROL 是控制寄存器,各位定义如下:
Bits 7,6Channel ID (11 is illegal)Bits 5,4Read/load mode for two-byte count value: 00 -- latch count for reading 01 -- read/load high byte only 10 -- read/load low byte only 11 -- read/load low byte then high byteBits 3,2,1Count mode selection (000 to 101)Bit 00/1: Count in binary/BCD根据 datasheet 可知 COUNT 寄存器决定了声波的频率,且符合公式:frequency = 1,193,180 / COUNT
考虑到当今的 x86 嵌入式系统仍保留了 8253 定时器的功能,我们使用 C/C++ 代码实现了 Beep 函数,代码如下:
BOOL Beep(DWORD dwFreq, DWORD dwDuration)
{
_outp(0x43, 0xb6); // 设置蜂鸣器
_outp(0x42, LOBYTE(0x1234dc / dwFreq)); // 频率值 LSB
_outp(0x42, HIBYTE(0x1234dc / dwFreq)); // 频率值 MSB
_outp(0x61, _inp(0x61) | 0x3); // 开始蜂鸣
Sleep(dwDuration);
_outp(0x61, _inp(0x61) & 0xfc); // 终止蜂鸣
return TRUE;
}
{
_outp(0x43, 0xb6); // 设置蜂鸣器
_outp(0x42, LOBYTE(0x1234dc / dwFreq)); // 频率值 LSB
_outp(0x42, HIBYTE(0x1234dc / dwFreq)); // 频率值 MSB
_outp(0x61, _inp(0x61) | 0x3); // 开始蜂鸣
Sleep(dwDuration);
_outp(0x61, _inp(0x61) & 0xfc); // 终止蜂鸣
return TRUE;
}
8253 Timer Chip http://dl2.csdn.net/down4/20070628/28234414647.pdf
- 【WCE】使用 8253 定时器蜂鸣 (CEPC BSP)
- 【WCE】实现永久性注册表数据保存 (VIACEPC BSP)
- 使用PB创建CEPC的一般步骤
- 【WCE】使用事件日志服务(一)
- 【WCE】使用事件日志服务(二)
- 【WCE】使用事件日志服务(三)
- 【WCE】使用事件日志服务(四)
- WCE or Mobile sqlite 配置使用
- WCE下添加fliter及使用filter(一)
- WCE下添加fliter及使用filter(二)
- WCE下添加fliter及使用filter(一)
- WCE下添加fliter及使用filter(二)
- 使用wce进行本地和域的hash注入
- 请教WCE
- WCE输入法
- freescale LTIB BSP 使用总结
- freescale LTIB BSP 使用总结
- zynq spi -使用bsp库函数
- lianxi
- 让Java程序自带JRE
- Hibernate优化查询性能手段
- 微软“Flash杀手”Silverlight
- Hibernate 性能优化技巧
- 【WCE】使用 8253 定时器蜂鸣 (CEPC BSP)
- HTTPModule生命周期与页面执行模型
- AGF和WKB释义
- 9.4语文每日一练
- orge 初学笔记一
- MapGuide概述与特点
- Hibernate悲观锁定与乐观锁定区别
- 北京航空航天大学
- MapGuide 6.5、MapGuide Open Source 和MGEnterprise2007区别