当前位置: 首页 > article >正文

Linux 硬件学习 s3c2440 arm920t蜂鸣器

1.查找手册时钟图,输入12m想要通过pll得到400m的信号

2.对比pll值,找到最近的为405,得到pll中mdiv为127,pdiv为2,sdiv为1

3.想要得到fclk400,hclk100,pclk50,对比分频比例,得到hdivn为2,pdivn为1

4.hclk要为fclk/4,要使得camdivn【9】为0,此时回到3,再回到2,会得到正确的分频

5.经过上部分操作,pclk为50m,pclk信号会通向有pwm脉冲调制

6.手册pwm框图

7.查看pwm驱动蜂鸣器图,需要高电平使得,蜂鸣器工作

8.将gpb0选择为tout0引脚,对应定时器0

9.500hz(一个周期2ms),占空比50%,则tcntb0设置为2000(通过一个信号减一次),则tcmpb0比较器(到达比较器的数值电平反转)设置为1000,其内部功能也要按需相应设置,例如一般为低电平到高电平,此次为确保停止时关闭,应开启输出变相,变为高电平到低电平,停止时则为低电平,蜂鸣器不会继续响

10.因为想要500hz的信号,而计数器为2000,则通过mux后的信号为2000*500 = 1Mhz,最开始的输入为12mhz,通过一个预分频器(八位),再通过一个四位分频器和选通门,降为1mhz,逆向推理,由四位到预分频,假如为1/4,则通过预分频器的信号为4,这样50要变为4,分频不为整数,我们最好要整数,排除,然后对比四位分频器和预分频器得到合理的数据,四分频器为1/2,预分频器为25,此时因为预分频器防止为0导致错误,会自动加1,所以设置为24即可。这样50mhz通过预分频(1/25)为2,再过四位分频(1/2)为1(四分频的1/2,通过选通门设置1/2通路),之后每通过一个信号计数减一次,一兆里面一兆个信号,2000个信号转换一次电平,一兆就可以有500次转换电瓶平,所以得到500赫兹的信号 便可有500hz的信号通过tout0引脚,再加上之前设置好的gpb0转tout0引脚,则可使蜂鸣器工作

11.实现代码

#include <s3c2440.h>

//pll
void clk_init(void)
{
	// 配置 F :H :P  = 1 : 4 : 8
	CLKDIVN = (2 << 1) | (1 << 0);
	// 配置Fclk为400M
	MPLLCON = (127 << 12) | (2 << 4) | (1 << 0); 
}

void pwm_init(void)
{
	//配置GPB0引脚功能为TOUT0
	GPBCON &= ~(0x3 << 0);
	GPBCON |= (0x2 << 0);

	TCFG0 &= ~(0xff << 0);
	TCFG0 |= (24 << 0);	   //预分频值 25
	TCFG1 &= ~(0xf << 0);  //分频 1/2

	TCNTB0 = 4000;
	TCMPB0 = 1000;

	TCON &= ~(1 << 4);  //关闭死区
	TCON |= (1 << 3);   //自动重载
	TCON |= (1 << 2);   //变换极性
	TCON |= (1 <<1);    //更新CMP和CNT
	TCON |= (1 << 0);   //启动定时器
	TCON &= ~(1 << 1);  //清除更新位
}

void pwm_stop(void)
{
	TCON &= ~(1 << 0);	
}

void main(void)
{
	clk_init();
	pwm_init();


}


http://www.kler.cn/a/291865.html

相关文章:

  • 【C++滑动窗口】1248. 统计「优美子数组」|1623
  • 机器学习-37-对ML的思考之机器学习发展的三个阶段和驱动AI发展三驾马车的由来
  • 风电电力系统低碳调度论文阅读第一期
  • 【Python · PyTorch】卷积神经网络(基础概念)
  • 【WebRTC】视频发送链路中类的简单分析(下)
  • Rust学习(五):泛型、trait
  • Trollspeed网速悬浮窗,精简且强大
  • 【ArcGIS Pro原理第一期】各种空间插值原理:GPI、LPI、IDW等
  • Go异常处理机制
  • ByteTrack多目标跟踪(一)—理论基础
  • 【OpenCV】不变矩
  • 云计算day35
  • 设计模式之原型设计模式
  • 列转行-lateral view explode列转行
  • SQLAlchemy:Python SQL工具包和对象关系映射器
  • Kubernetes 简介与部署全攻略
  • 我使用了ChatGPT中的DALL-E创建了7张时尚客厅图片
  • 如何理解进程和线程之间的关系
  • 基于PHP评论区的存储型XSS漏洞
  • 中间件解析漏洞(附环境搭建教程)
  • Rust :也谈Json与转换
  • Harmony南向驱动开发: HDC与真机调试
  • Java【数组】
  • Docker占用根目录/存储空间过多如何清理?
  • windows@命令行安装国内软件@scoop和winget安装国内软件
  • 设计模式—2—单例模式