欢迎来到天天文库
浏览记录
ID:35981535
大小:351.00 KB
页数:9页
时间:2019-05-02
《教案复件GPIO (2).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、GPIO的接口逻辑框架(硬件逻辑、硬件抽象层、接口功能)及其应用设计(用户模块、系统模块)一、接口逻辑框架(硬件逻辑、接口功能、硬件抽象层)1、硬件逻辑GPIO引脚有72个或38个,下图是“一位GPIO端口”的基本结构(“一位GPIO端口”对应“一个GPIO引脚”)。每一个GPIO引脚都可由软件独立配置为“输入悬空、输入上拉、输入下拉、模拟输入、输出开漏、输出推挽、可选功能”等成几种模式。其中,P1.15引脚只能作为输入,在STANDBY模式下作为Wake-up引脚使用。GPIO端口位配置表大部分GPIO引脚都具有复用功能。(缺)2、
2、接口功能GPIO引脚组织为3个通用的I/O端口GPIO_P0、GPIO_P1、GPIO_P2。对于每个通用I/O端口GPIO_Px(x=0、1、2),都有:3个32位的配置寄存器(GPIO_PxC0,GPIO_PxC1,GPIO_PxC2)1个32位的数据寄存器(GPIO_PxD)1个32位的可屏蔽寄存器(GPIO_PxM)但是I/O端口寄存器只能进行32位字访问,不允许进行字节或比特访问,屏蔽寄存器的作用是方便地读、写GPIO寄存器,这样,在读写过程中不会产生IRQ中断。在刚复位之后,可选功能还处于无效状态,I/O端口配置为输入悬空
3、模式(PxC2=0、PxC1=0、PxC0=1)。当被配置为输出时,写入到I/O数据寄存器中的数据就加载到输出锁存器。输出锁存器保持所要输出的值,可以在推挽模式或开漏模式使用输出驱动(当输出0时,只有N-MOS有效)。在每一个APB时钟周期里输入锁存器不活I/O引脚上的数据。读I/O数据寄存器时时读输入错存期还是输出锁存器,是由端口配置决定的。配置为输入模式和输出开漏模式时,读输入锁存器;配置为输出推挽模式时,读输出锁存器。所有的GPIO引脚都有一个内部的弱上拉和弱下拉,在配置的时候可以激活或者不激活它们。3、硬件抽象层1)GPIO的
4、可编程结构(功能寄存器描述)①GPIO寄存器映射解决IO端口编址的问题,与内存映射相关联(统一的IO端口编址)。②I/O端口配置寄存器(GPIO_PxC0)首址:0xFFFFE400偏移地址:00h复位初值:FFFFFFFFhBit[31:0]都是配置位,下图显示了I/O端口配置寄存器中各位的含义。与上面类似的寄存器有3个(GPIO_PxC0、GPIO_PxC1、GPIO_PxC2),3个寄存器的值共同决定I/O引脚的模式。③I/O端口数据寄存器(GPIO_PxD)首址:0xFFFFE400偏移地址:0Ch复位初值:xxxxxxxxh
5、Bit[31:0]:I/O端口数据位对该寄存器的写访问通常是将数据写入输出锁存器。对该寄存器的读访问是从输入锁存器里读取数据,或者在输出和高阻配置的情况下从输出锁存器里获得选择功能配置。下图为数据寄存器的I/O端口配置。④I/O端口屏蔽寄存器(GPIO_PxM)2)GPIO硬件抽象层上一节是对通用输入/输出端口(GPIO)的硬件描述,而这一节主要是在软件层次上对GPIO的硬件抽象层进行介绍。下图为GPIO硬件抽象层结构图。GPIO硬件层硬件抽象层应用层main.c75x.it.c75x_lib.h75_map.h75x_gpio.h7
6、5x_gpio.c75x_type.h75x_lib.c75x_conf.h在75x_conf.h中定义GPIO之后GPIO才能被启用,如下#define_GPIO若不需要GPIO则如下定义//#define_GPIO在用户的主程序文件main.c中引入75x_lib.h,该头文件声明了所有外设的头文件。若在75x_conf.h中定义了GPIO则在75x_lib.h的定义则可引入。75x_mrcc.h头文件,定义如下#ifdef_GPIO#include"75x_gpio.h"#endif/*_GPIO*/GPIO的寄存器结构GPIO
7、_TypeDef在75x_map.h文件中定义如下typedefstruct{vu32PC0;vu32PC1;vu32PC2;vu32PD;vu32PM;}GPIO_TypeDef;typedefstruct{vu32REMAP0R;vu32REMAP1R;}GPIO_REMAP_TypeDef;下面是对这些寄存器进行说明。PC0:端口0配置寄存器PC1:端口1配置寄存器PC2:端口2配置寄存器PD:数据寄存器PM:端口屏蔽寄存器REMAP0R:I/O映射寄存器0REMAP1R:I/O映射寄存器1当DEBUG模式被使用时,GPIO的指
8、针在75x_lib.c里声明,声明的语句如下:#ifdef_GPIO0GPIO0=(GPIO_TypeDef*)GPIO0_BASE;#endif/*_GPIO0*/#ifdef_GPIOREMAPGPIOREMAP=(
此文档下载收益归作者所有