来自:http://blog.csdn.net/duwufeng/article/details/8466659

软件结构分析:

1、“struct GPIO_MemMap {  }”:GPIO模块内存映射结构体,该结构体定义了一系列“GPIO端口控制寄存器”的名称,利用结构体本身的“平坦特性”与GPIO模块中实际寄存器的相对地址一一对应,实现结构体内部变量操作对物理地址操作的映射(这里只实现了相对映射,完全映射需要有绝对地址,下面会看到),各寄存器含义可结合注释以及K60P100M100SF2RM 文件54.2 Memory map and register definition章节。可以看到,在最左一列是各个端口寄存器的物理地址,而且每个端口组的物理首地址跟随后定义的PTx_BASE_PTR宏是一致的。这样就可以利用该结构体进行强制类型转换,把一段连续的内存空间当作某一个结构体来操作,该结构体就相当于一个“模子”,只是对内存空间换了个“视角”而已。

2、“#define GPIO_PDOR_REG(base)     ((base)->PDOR)”:GPIO模块内部控制寄存器变量宏定义,该宏定义接收结构体指针,返回寄存器变量

3、“#define GPIO_PDOR_PDO_MASK    0xFFFFFFFFu”:GPIO模块寄存器内部位域屏蔽码,根据硬件操作手册对端口各个寄存器的各个位域进行定义,详见K60P100M100SF2RM 文件54.2.1 Port Data Output Register(GPIOx_PDOR)章节。在“GPIO_PDOR_PDO_MASK”中,“GPIO”表示端口类型,“PDOR”表示某个具体寄存器名称,“PDO”表示特定寄存器内部的位域名称,可以在文档中搜索“PDO”看它出现的具体位置,就能明白了,这里的位域于其他文档中定义的位域没有区别,只不过这里的位域都是以32位为一组的,只是看起来有点特殊而已。

4、“#define PTA_BASE_PTR     ((GPIO_MemMapPtr)0x400FF000u)”:定义GPIO模块A端口的寄存器组基地址0x400FF000u,该CPU中对各个寄存器的配置本质上是对内存映射地址的配置。上面讲到逻辑操作对物理地址的映射问题时,只能实现相对映射,这里的绝对地址定义就是为实现地址绝对映射。GPIO_MemMapPtrr是GPIO寄存器组的强制类型转换,与结构体“structGPIO_MemMap {  }”共同作用,表示基地址和偏移地址,这样就能通过结构体变量来操控该寄存器组中的任意硬件寄存器,对于其他GPIO定义也是类似。

5、“#define GPIOA_PDOR      GPIO_PDOR_REG(PTA_BASE_PTR)”:各个GPIO端口的内部寄存器变量定义,便于后期使用,与硬件手册相关。

硬件特性分析:

1、关于各个寄存器的功能,可参见绿色注释和硬件手册。K60的GPIO模块与内核之间通过“零等待状态接口”来发挥引脚的最大性能,可以任意数据大小来操作GPIO寄存器。GPIOx_PDOR寄存器内容与引脚状态直接相关,如果想改变引脚状态可以给该寄存器赋值,但是K60的特殊之处在于并非直接操作该寄存器(它只是一个数据存放的场所而已),而是提供了“设置”、“清除”和“取反”三个寄存器,用来改变GPIOx_PDOR状态,这就是“零等待”的实现关键。通常情况下,设置寄存器位就要用到“位或”指令,清除寄存器位就要用到“位与”指令,该类指令的操作执行就需要消耗cpu时间(取数,位与,赋值),为了最大程度降低“操作延时”,直接通过“入口寄存器”操作数据(赋值),提高性能。

2、GPIO端口的数据操作也是受时钟时序影响的,从微观角度讲,作为输入口时当外部引脚电平变化并不会“瞬间”影响到GPIO输入寄存器的数值,只有当GPIO模块时钟边沿到来时,该状态改变才能体现到寄存器中。虽然这个时间非常短暂,但是并不能忽视它的存在,对于输出口也是如此。

3、关于GPIO操作还有很多选项需要配置,例如“端口上拉”、“滤波使能”、“滤波时钟”、“中断设置”、“端口复用”和“输出强度”等等,就需要设置SIM模块、中断模块、PORT模块等,共同实现GPIO的复杂功能。

4、如果GPIO配置成输入,则必须要打开PORT模块和中断模块中的相关信息;如果不需要输入功能,可以关闭这两个模块中的GPIO相关设置信息,达到节能的目的。如果GPIO配置成输出,则PORT模块和中断模块中的相关信息不需要打开,就可以配置引脚状态。

MQX4.0:MK60DZ10.h头文件GPIO模块…相关推荐

  1. STC32G.H 头文件汉化

    为了方便使用STC32G芯片进行开发,这份代码提供了各个寄存器的定义以及各个位的名称.我可以将其汉化,让开发者更容易理解和使用.具体地,这份代码可以按照以下方式汉化: #ifndef __STC32G ...

  2. .h头文件 .lib动态链接库文件 .dll 动态链接库

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...

  3. .h头文件 .lib库文件 .dll动态链接库文件关系

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...

  4. .h头文件 .lib库文件 .dll动态库文件之间的关系

     .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和li ...

  5. hαbits的意思_PIC16F877A.H头文件详细注释

    原标题:PIC16F877A.H头文件详细注释 /* * Header file for the Microchip * PIC 16F873A chip * PIC 16F874A chip * P ...

  6. windowsx.h头文件使用说明

    windowsx.h头文件:(全部都是网上查的) http://www.codeproject.com/win32/msgcrackwizard.asp 第一部分: 介绍: WINDOWSX.H 头文 ...

  7. C++ .h(头文件) 与 .cpp(源文件) 的使用

    .h 文件: .h是头文件 ,里面主要是写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等, 注意.h文件写的时候有特定的格式就是开头和结尾 #ifndef TEST_HEAD ...

  8. C语言不要重复包含.h头文件和.c文件

    1.不要重复包含头文件 --以上出自<C语言程序设计:现代方法(第2版)> f3.h //#ifndef AE_OK #define AE_OK 0 typedef int ngx_int ...

  9. c语言怎么创建一个h文件,求助C语言大佬 , 只会写到一个.c文件里 ,不会用.h头文件...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 简答题] 实验任务:学生成绩统计 从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能: (1)统计不 ...

  10. c语言中count的头文件,求助C语言大佬 , 只会写到一个.c文件里 ,不会用.h头文件...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 简答题] 实验任务:学生成绩统计 从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能: (1)统计不 ...

最新文章

  1. GitHub年度报告:JS第一,Python第二,Java第三
  2. Java程序猿的JavaScript学习笔记(汇总文件夹)
  3. Zookeeper的Windows安装
  4. .NET操作RabbitMQ组件EasyNetQ使用中文简版文档。
  5. python中二维列表的遍历方式(亲测)
  6. PCB线宽与电流的关系
  7. 以下关于CISC和RISC的叙述中,错误的是()【最全!最详细总结!】
  8. Sequence II HDU - 5919(主席树)
  9. html5平板电脑,Html5添加支持桌面、移动触摸手机和平板电脑的Lightbox插件教程
  10. mysql的student是什么意思_复习mysql
  11. 书籍《循环经济之道》-观后感-2021年12月
  12. HTML map元素
  13. 依赖注入有点_一文读懂Java控制反转(IOC)与依赖注入(DI)
  14. 计算机系统操作中级工试题及答案,计算机系统操作中级工试题附答案.doc
  15. 数字信号处理--FFT与蝶形算法
  16. Python3 语音识别谷歌验证码
  17. 目录类搜索引擎和全文搜索引擎的区别
  18. 网络数据保障ptop_网络影响未来十大预言 宽带应用将与新媒体融合
  19. Rapid object detection using a boosted cascade of simple features-简译
  20. java语言常用的包和类

热门文章

  1. 解决selenium自动化测试时,chrome浏览器自动关闭问题
  2. 关于程序组团队建设的几点想法
  3. 软考——系统架构设计师工作日志
  4. python安装face_recognition错误
  5. linux svc作用,[svc]linux性能监控
  6. excel提取身份证出生日期_Excel如何从身份证号码中提取年龄
  7. 通过DeviceIoControl获取真实网卡地址
  8. 服务器的mib文件,snmp 服务器增加 mib
  9. 邮箱大佬告诉你电子邮箱格式如何正确书写
  10. ❤️ 硬核玩游戏:200行代码给你整个俄罗斯方块 ❤️