MQX3.8源代码分析:GPIO(三)硬件特性分析 SIM Module

MQX3.8源代码分析:GPIO(3)硬件特性分析 SIM Module

        上一节的最后,我们讲到了GPIO 初始化中用到了SIM模块的SIM_SCGC5寄存器:System Clock Gating Control Register 5(SIM_SCGC5),主要是对GPIO 模块进行时钟门控制。而且我猜测,该时钟门就是控制GPIO的高低电平变化的基准频率。那么到底是不是呢,今天我们分析一下GPIO的硬件特性。

         打开文件:K60P100M100SF2RM.pdf 章节:Chapter 54 General purpose input/output (GPIO)页数:P1747

         为了最大化引脚性能(响应速度),GPIO模块通过一个零等待状态接口与处理器内核进行连接,GPIO寄存器支持任何数据大小的操作。

为了使每个端口的输出更有效快速,输出口增加了设置、清除和翻转三个只写的寄存器。

分析:

         零等待状态接口(zero wait state interface):指的是在IO口状态变化的时候,对变化的响应是近乎于“零等待的”,强调的是响应速度。

零等待是如何实现的,注意看下图及相关注释:MQX3.8源代码分析:GPIO(三)硬件特性分析 SIM Module

        微观的角度讲,当我们给某一个io口设置高低电平时,电平变化并不是立即生效的,而是当该引脚内部参考时钟到来时,才能生效;同理对于输入口也是一样的,当内部参考时钟到来时,才会采集io口电压。

        继续分析,会看到GPIOx_PDORd,GPIOx_PSOR,GPIOx_PCOR,GPIOx_PTOR,GPIOx_PDIR,GPIOx_PDDR.这一组寄存器,而且与传统的单片机寄存器配置不同,设置和清除配置都有单独的寄存器,进行对应操作。为什么没有放在一起?或者说根本不需要,想设置引脚状态,直接给数据寄存器赋值?

        这一切的目的就是实现“零等待操作”,芯片内部特殊电路可以让“赋值”等操作在1个周期内完成,而如果用寄存器直接赋值的方法,则汇编指令进行对应“与、或”才能改变状态,这增加了赋值周期。进一步分析,配合该芯片,在汇编语言的设计上,应该有对应该操作的单周期指令。

        到此,我们就彻底了解了mqx在初始化io端口时,配置sim模块的含义了,继续享受mqx源代码之旅吧!