c - 嵌入式 C 指针的波特率之间的联系是什么
问题描述
我正在阅读有关使用 C 控制设备的手册,通常它只是在玩地址;但是,当我们通过 UART 连接时,我们会看到 BAUDRATE。
那么将一个值放入某个地址与波特率有什么关系呢?
嵌入式编程有必要吗?
解决方案
这些地址不是内存。它们是内存映射的 I/O寄存器。
UART 波特率除数寄存器的地址是硬件寄存器。硬件寄存器中的值直接控制硬件。写入波特率除数寄存器的值通常是计数器重载值,一位周期是在给定特定外设时钟源的情况下,从除数中的值向上计数(或向下计数)所需的时间。例如,如果 UART 外设时钟为 12MHz,并且您想要 19200 的波特率,您可以将除数寄存器设置为 12x10 6 /19200 = 625。
尽管您可以像内存一样读写硬件寄存器,但它们的行为不一定像内存。有些寄存器可能是只读的,有些是只写的,有些写可能与读有不同的效果,这样如果你写一个值,读回的值就不是写的了。这通常在位级别起作用,因此寄存器中的每个位都可能表现出不同的行为。
例如,在许多 UART 实现中,您的写入数据要发送到的寄存器与您为接收到的数据读取的地址相同 - 但是它们不是同一个寄存器,而是一个只读寄存器和一个映射到的只写寄存器同一个地址。
它不是专门的嵌入式编程事物,而是 I/O 硬件事物;很简单,在嵌入式系统之外,您通常不会直接写入硬件,除非您碰巧正在编写内核设备驱动程序,在那里您会遇到同样的事情。
除了必须假定现有知识和专业知识的设备手册外,您也许应该查阅更一般的参考资料。现在您知道了关键术语:“内存映射 I/O”或MMIO,您可以更好地使用 Google 搜索它。例子:
推荐阅读
- c# - 为 C# 应用程序创建自定义虚拟打印机
- shopify - 登录 Shopify 以获取外部移动应用程序
- ansible - 从基于 CLI 的 Ansible 部署迁移到 Ansible Tower/AWX
- reactjs - 如何通过 ::-webkit-scrollbar-thumb 使用主题化配置
- object - 计算并显示找到的对象的百分比
- angular - 了解模板中使用了哪个选择器
- python - 在列表中重新排序列表值的正确方法是什么?
- excel - 按顺序将行从多张工作表复制到另一个工作表
- excel - Excel - 系列增量不会遵循模式
- flutter - (冻结)如何更新另一个列表中的列表中的对象?