第二期:第14节, beep 编程

首先是 硬件电路图:

然后是数据手册中  找到 相关的寄存器, 首先是 GPIO的复用寄存器, 然后是 PWM的寄存器。

首先是 关于GPIO的 复用 , 这里是 Tout,  也就是 定时器, pwm  通过 定时器 通过某种方式来控制 引脚输出的 高低电平的。

然后是就是 去看 PWM的寄存器了。

先来看一下 寄存器的大致的结构。

TCFG0

这是一级分频

TCFG1

TCON

这里我不明白的就是 , 这个 update TCN , TCM 是什么意思呢? 它在更新什么呢?

------------------------------------------------------------------------------------------------------------------------

关于update 的解释。

具体的解释 就不解释了,太麻烦了,说说我的理解。

1 cpu 将 TCNTBn , TCMPBn 中的数字 下载到 TCNTn , TCMPn 也是需要一个时钟周期的。

2 这里的手动更新的意思是 ,立马把 TCNTBn , TCMPBn 中的数据 装到  TCNTn , TCMPn 中。

3 我没设计过 硬件, 但是 我猜测, 几遍是 把 pwm 的执行开关打开, 它内部也是有一个 执行顺序的。

-----------------------------------------------------------------------------------------------------------------------

TCN,TCM, 这两个就比较简单了。

时钟的计算 , 有个表格。

这是具体的 时钟的公式。

然后是 代码的解析。

#include "exynos_4412.h"
//#include "led.h"

void  delay_ms(unsigned int num)
{
    int i,j;
    for(i=num; i>0;i--)
	for(j=1000;j>0;j--)
		;
}
void pwm_init(void)
{
// 这是在设置 复用
	GPD0.CON = GPD0.CON & (~(0xf))| 0x2;
	GPD0.PUD = GPD0.PUD & (~(0xf)) ;

// 这里 第一级分频 设置成了 249 
	PWM.TCFG0 = PWM.TCFG0 & (~(0xff))|0xf9;
// 第二级分频 设置成了 2 
	PWM.TCFG1 = PWM.TCFG1 & (~(0xf)) | 0x2;

// 那么最后的频率 就是  66/(249+1)/2 = 132K

	PWM.TCMPB0 = 50;
	PWM.TCNTB0 = 100;

// 这里设置了, 开启定时器,启动 手动更新。 我觉的这里 可以先不 开启定时器。
// 我觉得 这里 只是 设置 TCM , TCN 的值, 然后 设置 成自动装载 就可以了。

	PWM.TCON = PWM.TCON & (~(0xff)) | (1 << 0) | (1 << 1) ;
}
void beep_on(void)
{
// 这里是 开启定时器, 并且设置了自动装载
	PWM.TCON = PWM.TCON & (~(0xff)) | (1 << 0) | (1 << 3) ;
}
void beep_off(void)
{
	PWM.TCON = PWM.TCON & (~(1 << 0)) ;
}
int main (void)
{
	pwm_init();
	
	while(1)
	{
		beep_on();			
		delay_ms(10000000);
		beep_off();         //
		delay_ms(1000000); 
	}
    return 0;
}

这里 至于 时钟分频 为什么是 这个数值 ,我也不知道。

然后是源码的结构,以及源码的编译。

接下来是 我自己 适配一下 源码 编译 + 烧写到板子上。

编译时没有问题的, 我这里测试 , 即便是 把 蜂鸣器关掉 依然是 可以发生, 会不会是 有缘蜂鸣器呢?

嗯呢,经过我 的确认, 蜂鸣器 确实是 有源的蜂鸣器。

注意: 这里我发现一个现象, 就是一但我 将引脚设置成 tout 的话, 那么 不论 我 停止 定时器,还是 开启定时器,板卡上的蜂鸣器 一直是响的,也就是 说,这个引脚 一直是高电平。

应该是跟这里 有关的, 如果我关闭 定时器的话, 它一直是 3.3V, 如果我开启定时器的话, 那么它 比 3.3V 低, 但也是 高电平, 除非我 将占空比 设置的 很小, 低电平时间很长。

---------------------------------------------------------------------------------------------------------------------------

然后 我购买了 ,无缘的蜂鸣器,焊接在板子上。

重新编译程序, 发现 正常。

程序如下:

#include "exynos_4412.h"
//#include "led.h"

void  delay_ms(unsigned int num)
{
    int i,j;
    for(i=num; i>0;i--)
        for(j=1000;j>0;j--)
                ;
}
void pwm_init(void)
{
        GPD0.CON = GPD0.CON & (~(0xf))| 0x2;
        GPD0.PUD = GPD0.PUD & (~(0xf)) ;
        PWM.TCFG0 = PWM.TCFG0 & (~(0xff))|0xf9;
        PWM.TCFG1 = PWM.TCFG1 & (~(0xf)) | 0x2;
        PWM.TCMPB0 = 50;
        PWM.TCNTB0 = 100;
        PWM.TCON = PWM.TCON & (~(0xff)) |  (1 << 1) ;
}
void beep_on(void)
{
        PWM.TCON = PWM.TCON & (~(0xff)) | (1 << 0) | (1 << 3) ;
}
void beep_off(void)
{
        PWM.TCON = PWM.TCON & (~(1 << 0)) ;
}
int main (void)
{
        pwm_init();

        while(1)
        {
                beep_on();
                delay_ms(500);
                beep_off();
                delay_ms(500);
        }
    return 0;
}

然后 这个 蜂鸣器是 3V的电压。

电阻是 42 欧的。

-------------------------------------------------------------------------------------------------------------------------------

我的疑问, 我并没有 清除中断, 为什么 程序是正常的呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/888519.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则

文章目录 C 继承详解&#xff1a;初阶理解与实战应用前言第一章&#xff1a;继承的基本概念与定义1.1 继承的概念1.2 继承的定义 第二章&#xff1a;继承中的访问权限2.1 基类成员在派生类中的访问权限2.2 基类与派生类对象的赋值转换2.2.1 派生类对象赋值给基类对象2.2.2 基类…

[Algorithm][贪心][可被三整除的最大和][距离相等的条形码][重构字符串]详细讲解

目录 1.可被三整除的最大和1.题目链接2.算法原理详解3.代码实现 2.距离相等的条形码1.题目链接2.算法原理详解3.代码实现 3.重构字符串1.题目链接2.算法原理详解3.代码实现 1.可被三整除的最大和 1.题目链接 可被三整除的最大和 2.算法原理详解 思路&#xff1a;正难则反 贪…

【C++ 11】for 基于范围的循环

文章目录 【 1. 基本用法 】【 2. for 新格式的应用 】2.1 for 遍历字符串2.2 for 遍历列表2.3 for 遍历的同时修改元素 问题背景 C 11标准之前&#xff08;C 98/03 标准&#xff09;&#xff0c;如果要用 for 循环语句遍历一个数组或者容器&#xff0c;只能套用如下结构&#…

YOLO11改进|卷积篇|引入可变核卷积AKConv

目录 一、AKConv卷积1.1AKConv卷积介绍1.2AKConv核心代码 五、添加MLCA注意力机制5.1STEP15.2STEP25.3STEP35.4STEP4 六、yaml文件与运行6.1yaml文件6.2运行成功截图 一、AKConv卷积 1.1AKConv卷积介绍 AKConv允许卷积参数的数量以线性方式增加或减少&#xff0c;而不是传统的…

大模型生成PPT大纲优化方案:基于 nVidia NIM 平台的递归结构化生成

大模型生成PPT大纲优化方案&#xff1a;基于 nVidia NIM 平台的递归结构化生成 待解决的问题 生成PPT大纲是一种大模型在办公场景下应用的常见需求。 然而&#xff1a; 目前直接让大模型生成大纲往往是非结构化的&#xff0c;输出格式多样&#xff0c;难以统一和规范&#…

数据结构-5.1.树的定义和基本术语

一.树的基本概念&#xff1a; 1.根结点&#xff1a;最顶层的结点&#xff0c;有且仅有一个&#xff0c;没有前驱&#xff1b; 2.叶子结点&#xff1a;不能再有子结点&#xff0c;没有后继&#xff1b; 3.结点&#xff1a;用于存数据&#xff1b; 4.也有前驱和后继的说法&…

制造企业MES管理系统的应用策略与实施路径

在智能制造浪潮的席卷之下&#xff0c;MES管理系统作为连接生产计划与车间操作的核心桥梁&#xff0c;其战略地位愈发显著。本文旨在深入剖析MES管理系统在智能制造转型中的核心价值、实施策略及实践路径&#xff0c;为制造企业探索智能化生产之路提供实践指导与灵感启发。 MES…

JavaScript函数基础(通俗易懂篇)

10.函数 10.1 函数的基础知识 为什么会有函数&#xff1f; 在写代码的时候&#xff0c;有一些常用的代码需要书写很多次&#xff0c;如果直接复制粘贴的话&#xff0c;会造成大量的代码冗余&#xff1b; 函数可以封装一段重复的javascript代码&#xff0c;它只需要声明一次&a…

github 搭建个人导航网

最近搭建了个 个人的导航网&#xff0c;具体内容见下图&#xff0c;欢迎大家访问吖&#xff0c;点击访问 具体实现是使用 vue3 编写&#xff0c;白嫖 github 的 page 部署 首先在 github上创建一个仓库&#xff1a;name.github.io # name是你 github 的名字 然后在本地创建一…

◇【论文_20181020 v6】广义优势估计器 (generalized advantage estimator, GAE)

https://arxiv.org/abs/1506.02438 ICLR 2016 加州伯克利 电子工程与计算机科学系 High-Dimensional Continuous Control Using Generalized Advantage Estimation 文章目录 摘要1 引言2 预备知识3 优势函数估计4 解释为 奖励设计reward shaping5 价值函数估计6 实验6.1 策略优…

九、Drf序列化器

九、序列化器 9.1序列化 从数据库取QuerySet或数据对象转换成JSON 9.1.1序列化器的简易使用 #新建一张部门表 class Depart(models.Model):titlemodels.CharField(verbose_name部门,max_length32)ordermodels.IntegerField(verbose_name顺序)countmodels.IntegerField(verb…

C语言_内存函数

内存函数是 C 标准库中的一组函数&#xff0c;用于管理和操作内存。使用时需要包含头文件<string.h>。 1. memcpy的使用和模拟实现 函数形式如下&#xff1a; void* memcpy(void* destination, const void* source, size_tnum);函数解析和注意事项&#xff1a; memcp…

LinuxO(1)调度算法

概念 在Linux中&#xff0c;O(1)调度算法是一种进程调度算法。O(1)表示算法的时间复杂度是常数级别的&#xff0c;与系统中的进程数量无关。 运行队列结构 他采用了两个运行队列&#xff0c;一个活动队列和一个过期队列。活动队列中的进程是有资格获取CPU时间片的进程&#x…

AWS EC2 部署Echarts大屏展示项目

前言 Echarts简介 ECharts是一个由JavaScript开发的开源可视化库。它能使数据生动、直观、互动、高度个性化数据可视化图表。ECharts适用大部分浏览器&#xff0c;如IE6 、Chrome、Firefox、Safari等&#xff0c;同时支持PC和移动设备。 开源&#xff1a;ECharts是一个开源项目…

【JavaEE】——文件IO

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;认识文件 1&#xff1a;文件的概念 2&#xff1a;文件的结构 3&#xff1a;文件路径…

矩阵求解复数(aniwoth求解串扰)

所以这种求解串扰的格式是因为&#xff0c;有串扰的共轭项在方程组中 复数共轭项的作用&#xff0c;但是这是二次方程&#xff0c;

【深度学习】yolov8n模型的剪枝操作记录

原始 剪枝微调后 可以看到模型大小了&#xff0c; 测试结果显示再cpu 上加速5%-10% from ultralytics import YOLOimport time # Load a pretrained YOLO11n model count_num 500 def test1():model YOLO("/home/justin/Desktop/code/v8_prun/runs/detect/train3/weig…

算法知识点————贪心

贪心&#xff1a;只考虑局部最优解&#xff0c;不考虑全部最优解。有时候得不到最优解。 DP&#xff1a;考虑全局最优解。DP的特点&#xff1a;无后效性&#xff08;正在求解的时候不关心前面的解是怎么求的&#xff09;&#xff1b; 二者都是在求最优解的&#xff0c;都有最优…

微服务实战——ElasticSearch(保存)

商品上架——ElasticSearch&#xff08;保存&#xff09; 0.商城架构图 1.商品Mapping 分析&#xff1a;商品上架在 es 中是存 sku 还是 spu &#xff1f; 检索的时候输入名字&#xff0c;是需要按照 sku 的 title 进行全文检索的检索使用商品规格&#xff0c;规格是 spu 的…

No package nodejs available.No package npm available.

安装nodejs时出现的报错 这个错误的原因是当前的 yum 源没有包含 Node.js 和 npm 的安装包。 解决方法 使用 NodeSource 仓库 curl -fsSL https://rpm.nodesource.com/setup_14.x | bash -运行 yum install 安装 Node.js 和 npm&#xff1a; yum install -y nodejs使用 E…