明确相关基本概念
1)计算机系统包括硬件和软件,硬件层面上仅仅包括两类:CPU核和"外设"。
2)任何ARM处理器(例如三星的S5P6818)内部包括两部分:CPU核和各种硬件外设控制器。
例如:具体参见S5P6818芯片手册SEC_S5P6818X完整版.pdf的P34
结论:S5P6818内部包含了8个CPU核和各种硬件外设的控制器(LCD显示屏控制器,Nandflash控制器,DDR内存控制器,SD卡/TF卡/EMMC控制器,UART串口控制器等)
将来CPU核要想访问某个外设,CPU必须通过对应的控制器来访问具体的外设。
外设的控制器类似桥梁,控制器帮助CPU核间接访问外设。
参见bt.bmp,根据此图得到结论:
1.明确CPU核不允许直接访问BT
2.CPU首先访问UART控制器
3.UART控制器在访问BT
3)CPU核功能:仅仅做数据运算,数据来自外设(例如BT或者内存条)数据经过CPU核的运算最终还是要回归到外设。
"外设":提供数据,除了CPU核以外的任何硬件,包括肉眼看得到的硬件(例如EMMC,内存条)还包括肉眼看不到的硬件(各种处理器内部集成的控制器)
结论:只要以上电,CPU核就和外设玩命时时刻刻的进行数据的交互 。
4)ARM处理器内部集成的各种外设的控制器内部同样集成了一大堆的寄存器
“寄存器”:能够暂存数据的硬件,掉电数据丢失,和内存一模一样。
并且这些一大堆的寄存器都有自己的物理地址。
注意:寄存器同样也是外设
5)切记:CPU核访问外设都是以地址指针的形式访问
CPU核要想访问某个外设,必须先获取到这个外设的起始地址
6)CPU核访问外设的具体流程
以CPU核给BT蓝牙发送数据为例:
1.CPU核软件上以地址指针的形式访问UART控制器内部的一大堆寄存器,本质就是CPU核通过控制器内部的寄存器间接给控制器发送控制命令
例如:某个UART控制器中寄存器的基地址为0xC002C000,寄存器的大小为4字节目标是向这个寄存器写入命令数据0x55555555
*(unsigned long *)0xC002C000 = 0x55555555;
2.UART控制器一旦接收到CPU发送来的控制命令,UART控制器硬件上自动的操作处理器和BT之间的硬件连接线。
3.硬件连接线将来在自动影响外设BT
总结:CPU核访问外设的基本流程:
1.CPU核软件上以地址指针的形式访问外设对应的控制器内部的寄存器,其实就是CPU核给控制器发送控制命令。
2.控制器一旦接收到了CPU核发送来的控制命令,控制器会自动操作之间的硬件连接信号线。
3.硬件连接信号线将来在自动影响操作外设。
切记:计算机中,CPU核和外设的硬件通信方式常见的有以下几种:
GPIO通信方式/UART串口通信/I2C总线通信方式/SPI总线通信方式/1-Wire总线通信方式等。