历史上的今天
今天是:2025年08月10日(星期日)
2019年08月10日 | 轻松学ARM系列之玩转蜂鸣器
2019-08-10 来源:eefocus
今天我们来学习轻松学arm系列之玩转蜂鸣器,基于arm的cortex_a8内核的三星S5PV210开发平台。
那么我们来看一下如何学习使用pwm控制蜂鸣器?
一、总体架构图

搞定蜂鸣器之前需要我们对三星的GPIO简介的相关章节有一定的了解,主要是timer 定时器。
二、玩转定时器的几个要领
2.1 查看开发板上蜂鸣器的连接的原理图
蜂鸣器对应的原理图

核心板的对应的原理图

2.2 选中GPD0CON配置寄存器的xpwmTOUT1功能

GPD0.GPD0CON = ((~(0xf 0))& GPD0CON)| (0x2 << 4);选为pwm输出功能
2.3 配置预分频和分频寄存器的配置


配置预分频的值,TIMER.TCFG0 = (TIME.TCFG0 & (~0xff)) | 0xff ;
预分频的值设置为255 + 1

配置分频的值为16分频:
TIMR.TCFG1 = (TIME.TCFG1 & (~0xf0))| (0x4 << 4);
2.4 设置缓冲计数器的寄存器值和缓冲比较器的值
工作原理:计数器的值每隔一个时钟周期,做减1操作,如果减到值与比较器的值相等那么进行高低电平的转换,继续递减1,直到为0,那么翻转,实现了一个完整的方波周期


设置计数缓冲区寄存器值
TIME.TCNTB1 = XXX; 设置总周期,一个pwm
设置比较缓冲区寄存器值
TIME.TCMPB1 = XXX/2; 设置是占空比
2.5 手动更新缓冲寄存器中的值到计数器中
设置pwm的步骤:

![]()


根据是1.3.15的第二步,先设置手动更新,在清除手动更新,启动定时器
手动更新,使缓冲器中的值更新到计数器中,双缓冲机制
TIME.TCON = TIME.TCON & (0x0e << 8) ; 0000 1110
清除手动更新位,启动定时器。 0000 1101 0x0d
TIME.TCON = TIME.TCON & (0x0d << 8) ;
上一篇:轻松学ARM系列之I2C总线
史海拾趣
|
职位描述 1. 本科以上学历 2.有51开发经验,有C8051F开发经验者优先 3. 熟悉RS485、CAN、DALI总线开发与应用者优先 4.熟练C语言,具有Pic系列的8位、16位MCU开发经验优先 5.精通8位单片机软、硬件开发,有独立项目开发经验 6 ...… 查看全部问答> |
|
在PB中定制的操作系统的分辨率设制为320x240,编译通过,再版在上显示正常,但是打开新窗口后,窗口的一部分是在界面外,或分辨率超出了320x240,请教高手,如何解决?谢谢·!… 查看全部问答> |
|
想用LED做光源,加上2个凸透镜将其聚焦到一点,可实验时得到的却是大约1cm2 的光斑,而且边缘杂光斑也挺大,想请教各位有什么更好的办法没?我感觉是光源问题,当用3-6V的白炽灯小灯泡实验时,由于光源为灯芯那一点,所以得到的焦点就很小很亮,可 ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:13 编辑 电机控制 - 无刷直流 (BLDC) 电机 无刷直流 (BLDC) 电机可以想象成与刷式直流电机截然相反,其中永久磁性在转子上,而绕线在定子上。因此,该电机没有刷子和换向器,消除了与刷式直流电机产 ...… 查看全部问答> |
|
转载于半岛鱼的学习博客 MSP430的中断优先级按所在的向量的大小排列,中断向量地址越高优先级就越大,但是默认的MSP430是不能中断嵌套的,要想在执行某一中断时能够响应更高优先级的中断,需要在低优先级的中断程序中手动打开全局中断便能位,因 ...… 查看全部问答> |




