下载后可任意编辑 实验二 蜂鸣器控制实验实验目的:1 了解 ARM 处理器 PWM 接口的处理机制 2 掌握在 S3C2440A 平台下进行 PWM 接口应用编程实验器材: Sinosys-EA2440 实验箱 PC 机实验原理:脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。即通过改变方波的占空比表示不同的模拟信号的电平。在 ARM 嵌入式实验中,其实是通过微处理器中的计数器,对经过频率变换的输出频率周期进行计数,在 PWM 中,是通过两个寄存器(TCNTBn 和 TCMPBn)对输出信号的占空比进行调制,TCNTBn 可 以 设 置 为 TCMPBn+X , 当 TCNTBn 在 TCMPBn 和TCMPBn+X 之间计数时,TOUTn(即输出信号)输出低电平,当TCNTBn 计数下降到 TCMPBn 时,TOUTn 电平反转,变为高电平,直到 TCNTBn 计数减到 0,假如此时开启了重载,则又把预定的值重新装入 TCNTBn 和 TCMPBn 中,重复以上过程。在 ARM 嵌入式 PWM 中,会提供一个基准时钟作为输入时钟,PWM 调制会对输入的时钟进行分频等操作进入计时器逻辑,其电路图 2.1 如下:下载后可任意编辑 图 2.1 PWM 计时器框图如图 2.1,输入的时钟 PCLK 经过一个 8bit 预置器和一个分频器,将得到的时钟进入计数器逻辑板块作为驱动时钟,而输出的TOUT 则作为蜂鸣器(蜂鸣器控制电路如图 2.2)的驱动信号。下载后可任意编辑 图 2.2 蜂鸣器控制电路实验总结:实验的主函数首先设置时钟,端口初始化,并捕捉进入测试函数的指令,与实验一大致相同,在此不在赘述,重点分析测试函数。测试函数如下:void Beep(int freq,int ms){int div,irGPBCON&=~0x3; //将 GPB0 作为输入口rGPBCON|=0X2; // 接入 TIMER0rTCFG0&=~0XFF; // 设置 prescaler 为 32rTCFG0|=0XF;rTCFG1&=~0XF; //选择 mux=1/16rTCFG1|=0X3;div=plck/32/16/freq 计算 TCNTB0 的值rTCNTB0=div;rTCMPB0=rTCNTB0>>2; 占空比为 4:1rTCON&=~0X1F; 设置死区 自动重载 反转 人工载入 开始rTCON|=0XB; 关闭死区 开启重载 关反转 开人工载入 开始rTCON&=~2; 关闭人工载入for(i=1,i