MQX3.8源代码分析:GPIO(3)硬件特性分析 SIM Module
来源:互联网 发布:域名icp备案如何申请 编辑:程序博客网 时间:2024/06/06 06:54
上一节的最后,我们讲到了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口状态变化的时候,对变化的响应是近乎于“零等待的”,强调的是响应速度。
零等待是如何实现的,注意看下图及相关注释:
微观的角度讲,当我们给某一个io口设置高低电平时,电平变化并不是立即生效的,而是当该引脚内部参考时钟到来时,才能生效;同理对于输入口也是一样的,当内部参考时钟到来时,才会采集io口电压。
继续分析,会看到GPIOx_PDORd,GPIOx_PSOR,GPIOx_PCOR,GPIOx_PTOR,GPIOx_PDIR,GPIOx_PDDR.这一组寄存器,而且与传统的单片机寄存器配置不同,设置和清除配置都有单独的寄存器,进行对应操作。为什么没有放在一起?或者说根本不需要,想设置引脚状态,直接给数据寄存器赋值?
这一切的目的就是实现“零等待操作”,芯片内部特殊电路可以让“赋值”等操作在1个周期内完成,而如果用寄存器直接赋值的方法,则汇编指令进行对应“与、或”才能改变状态,这增加了赋值周期。进一步分析,配合该芯片,在汇编语言的设计上,应该有对应该操作的单周期指令。
到此,我们就彻底了解了mqx在初始化io端口时,配置sim模块的含义了,继续享受mqx源代码之旅吧!
- MQX3.8源代码分析:GPIO(3)硬件特性分析 SIM Module
- MQX3.8源代码分析:GPIO(1)模块初接触
- MQX3.8源代码分析:GPIO(2)时钟门控制 gpio_cpu_init()
- MQX3.8源代码分析:GPIO(4)驱动安装函数 _io_gpio_install()
- MQX3.8源代码分析:GPIO(5)驱动安装函数 _io_dev_install_ext()
- GPIO源代码分析
- Ceph 源代码分析 -OS module
- Ceph 文件系统源代码分析 - OS module (2)
- gpio分析
- gpio分析
- GPIO分析
- gpio分析
- Marvell-linux研究—gpio.c源代码分析
- Marvell-linux研究—gpio.c源代码分析
- Marvell-linux研究—gpio.c源代码分析
- nginx源码分析--module开发(3)
- SIM卡文件系统分析
- 内核源代码分析(3)
- CV学习牛人链接
- The connection to adb is down, and a severe error has occured
- div+css 总结一
- 搭建IAP
- 清代皇帝为什么对数字“九”特别钟情?
- MQX3.8源代码分析:GPIO(3)硬件特性分析 SIM Module
- C#中WinForm窗体事件的执行次序
- linux消息队列函数--解析
- ASCII, LATIN1, UTF8 简介
- 如何成为优秀的IT技术工程师
- Allocator空间分配器一
- 纯div+css实现下拉菜单 http://www.zhangmeigong.cn/post/xiala.html
- android系统启动时属性(getprop得到的属性)写入过程
- Allocator空间分配器二