一、寄存器
1.寄存器概述
寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。
按照功能的不同,可将寄存器分为基本寄存器和移位寄存器两大类。基本寄存器只能并行送入数据,也只能并行输出。移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出,或串行输入、并行输出,十分灵活,用途也很广。
2.寄存器的大小:
8位的单片机,一个寄存器占8bit,一个字节。16位的单片机,1个寄存器,占16bit,2个字节。高级一点的,arm的芯片,一个寄存器占32bit,即是4个字节。
二、ioremap学习
原型:
void *ioremap(unsigned long phys_addr, unsigned long size)
void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
phys_addr:要映射的起始的IO地址;
size: 要映射的空间的大小(多少个字节);
ioremap 依靠 __ioremap实现,它只是在__ioremap中以第三个参数为0调用来实现.
flags:要映射的IO空间的和权限有关的标志;
phys_addr:是要映射的物理地址,
size:是要映射的长度,
功能:将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问;函数专门用来为I/O内存区域分配虚拟地址。经过ioremap之后,设备驱动即可访问任意的I/O内存地址。有了ioremap (和iounmap),设备就可以访问任何I/O内存空间,不论它是否直接映射到虚拟地址空间。但是,这些地址永远不能直接使用(指物理地址),而要用readb这种函数。
ioremap是内核提供的用来映射外设寄存器到主存的函数,我们要映射的地址来源于CPU的用户开发手册。硬件的跳线或者是物理连接方式决定了硬件上的内存映射到的cpu物理地址。映射完了