我正在阅读有关用C控制设备的手册,一般来说它只是在玩地址;但是当我们通过UART连接时,我们有波特率。
那么,将值放入某个地址与波特率有什么关系呢?
在嵌入式编程中有必要吗?
这些地址不是内存。 它们是内存映射的 I/O寄存器。
UART的波特率除数寄存器的地址是硬件寄存器。 硬件寄存器中的值直接控制硬件。 写入波特率除数寄存器的值通常是一个计数器重载值,一个位周期是给定特定外设时钟源的除数中值向上计数(或向下计数(所需的时间。 因此,如果UART外设时钟是12MHz,并且您想要19200的波特率,则将除数寄存器设置为12x106/19200 = 625。
尽管可以像读取和写入内存一样读取和写入硬件寄存器,但它们的行为不一定像内存。 有些寄存器可能是只读的,有些寄存器可能是只读的,有些寄存器可能与读取具有不同的效果,因此,如果写入值,读回的值将不是写入的值。 这通常在位级别工作,因此寄存器中的每个位可能表现出不同的行为。
例如,在许多UART实现中,要发送到的写入数据的寄存器与您读取接收数据的地址相同 - 但是它们不是相同的寄存器,而是映射到同一地址的只读寄存器和只写寄存器。
它不是专门针对嵌入式编程的东西,而是I/O硬件的东西;它只是在嵌入式系统之外,你通常不会直接写入硬件,除非你碰巧在编写内核设备驱动程序,在那里你会遇到同样的事情。
除了必须假定现有知识和专业知识的设备手册外,也许您应该查阅更一般的参考资料。 现在您知道了关键术语:">内存映射I/O">或MMIO,您可以更好地Google它。 例子:
- http://www.cs.uwm.edu/classes/cs315/Bacon/Lecture/HTML/ch14s03.html
- https://en.wikipedia.org/wiki/Memory-mapped_I/O