HW GPIO

来自拉普兰德Wiki
跳转至: 导航搜索

固件说明

HW_GPIO.c和HW_GPIO.h是GPIO模块的固件驱动文件,这里定义了该模块的初始化函数,以及常用的IO口输入出相关函数。值得注意的是,LPLD固件驱动为每个GPIO端口定义了位带操作(Bit-band)方法,开发者可以像使用51的IO口一样,使用Kinetis系列MCU的IO口进行输入输出操作。

结构体

GPIO_InitTypeDef

变量 描述 取值 初始化
GPIO_Type *GPIO_PTx 选择PORTx PTA、PTB、PTC、PTD、PTE 必须初始化
uint32 GPIO_Pins 选择要初始化的引脚 GPIO_Pin0~GPIO_Pin31、GPIO_Pin0_7、GPIO_Pin8_15、GPIO_Pin16_23、GPIO_Pin24_30 必须初始化
uint32 GPIO_PinControl 配置引脚控制的控制,如Pull、压摆率、滤波、开漏、驱动力、中断 GPIO_PinControl变量值宏定义 不必须初始化,默为无Pull、高压摆率、无滤波、无开漏、低驱动力、禁中断
uint8 GPIO_Dir 选择GPIO的初始化时的输出 输入-DIR_INPUT

输出-DIR_OUTPUT

必须初始化
uint8 GPIO_Output 选择GPIO的初始化时的输出 低电平-OUTPUT_L

高电平-OUTPUT_H

不必须初始化,默认为低电平
GPIO_ISR_CALLBACK GPIO_Isr 外部中断回调函数 函数必须为无返回值,无参数(eg. void isr(void);) 不必须初始化、如未初始化则不会触发中断

变量

无用户可用变量

函数

LPLD_GPIO_Init()

函数原型

uint8 LPLD_GPIO_Init(GPIO_InitTypeDef);

描述

GPIO通用初始化函数

形参

类型 名称 描述 取值
GPIO_InitTypeDef gpio_init_structure GPIO初始化结构体 结构体定义见GPIO_InitTypeDef

输出

0--配置错误
1--配置成功

LPLD_GPIO_EnableIrq()

函数原型

uint8 LPLD_GPIO_EnableIrq(GPIO_InitTypeDef);

描述

使能GPIO外部中断

形参

类型 名称 描述 取值
GPIO_InitTypeDef gpio_init_structure GPIO初始化结构体 结构体定义见GPIO_InitTypeDef

输出

0--配置错误
1--配置成功

LPLD_GPIO_DisableIrq()

函数原型

uint8 LPLD_GPIO_DisableIrq(GPIO_InitTypeDef);

描述

禁用GPIO外部中断

形参

类型 名称 描述 取值
GPIO_InitTypeDef gpio_init_structure GPIO初始化结构体 结构体定义见GPIO_InitTypeDef

输出

0--配置错误
1--配置成功

LPLD_GPIO_Output()

函数原型

void LPLD_GPIO_Output(GPIO_Type *, uint32);

描述

设置GPIO端口0~31位的输出

形参

类型 名称 描述 取值
GPIO_Type * ptx 端口号 PTA--Port A
PTB--Port B
PTC--Port C
PTD--Port D
PTE--Port E
uint32 data32 输出数据 0x00000000~0xFFFFFFFF--低到高代表GPIO口的第0~31位数据

输出

LPLD_GPIO_Output_b()

建议使用位带操作代替此函数,效率更高!

函数原型

void LPLD_GPIO_Output_b(GPIO_Type *, uint8, uint8);

描述

设置GPIO端口一位的输出

形参

类型 名称 描述 取值
GPIO_Type * ptx 端口号 PTA--Port A
PTB--Port B
PTC--Port C
PTD--Port D
PTE--Port E
uint8 lsb_num 端口引脚位数编号 0~31--GPIO口的第0~31位
uint8 data1 输出数据 0--输出低电平
1--输出高电平

输出

LPLD_GPIO_Output_8b()

函数原型

void LPLD_GPIO_Output_8b(GPIO_Type *, uint8, uint8);

描述

设置GPIO端口8位的输出

形参

类型 名称 描述 取值
GPIO_Type * ptx 端口号 PTA--Port A
PTB--Port B
PTC--Port C
PTD--Port D
PTE--Port E
uint8 lsb_num 端口引脚位数编号 0--GPIO口的第0~7位
8--GPIO口的第8~15位
16--GPIO口的第16~23位
24--GPIO口的第24~31位
uint8 data8 输出数据 0x00~0xFF--代表GPIO口输出的8位数据

输出

LPLD_GPIO_Toggle()

函数原型

void LPLD_GPIO_Toggle(GPIO_Type *, uint32);

描述

设置GPIO端口0~31的电平翻转

形参

类型 名称 描述 取值
GPIO_Type * ptx 端口号 PTA--Port A
PTB--Port B
PTC--Port C
PTD--Port D
PTE--Port E
uint32 data32 输出数据 0x00000000~0xFFFFFFFF--低到高代表GPIO口的第0~31位的翻转,1为反转,0为保持不变。

输出

LPLD_GPIO_Toggle_b()

建议使用位带操作代替此函数,效率更高!

函数原型

void LPLD_GPIO_Toggle_b(GPIO_Type *, uint8);

描述

设置GPIO端口一位的翻转

形参

类型 名称 描述 取值
GPIO_Type * ptx 端口号 PTA--Port A
PTB--Port B
PTC--Port C
PTD--Port D
PTE--Port E
uint8 lsb_num 输出数据 0~31--GPIO口的第0~31位

输出

LPLD_GPIO_Toggle_8b()

函数原型

void LPLD_GPIO_Toggle_8b(GPIO_Type *, uint8, uint8);

描述

设置GPIO端口8位的翻转

形参

类型 名称 描述 取值
GPIO_Type * ptx 端口号 PTA--Port A
PTB--Port B
PTC--Port C
PTD--Port D
PTE--Port E
uint8 lsb_num 端口引脚位数编号 0--GPIO口的第0~7位
8--GPIO口的第8~15位
16--GPIO口的第16~23位
24--GPIO口的第24~31位
uint8 data8 输出数据 0x00~0xFF--代表GPIO口输出的8位数据

LPLD_GPIO_Input()

函数原型

uint32 LPLD_GPIO_Input(GPIO_Type *);

描述

取得GPIO口0~31位的数据

形参

类型 名称 描述 取值
GPIO_Type * ptx 端口号 PTA--Port A
PTB--Port B
PTC--Port C
PTD--Port D
PTE--Port E

输出

指定GPIO口的32位输入

LPLD_GPIO_Input_b()

建议使用位带操作代替此函数,效率更高!

函数原型

uint8 LPLD_GPIO_Input_b(GPIO_Type *, uint8);

描述

取得GPIO口某一位的数据

形参

类型 名称 描述 取值
GPIO_Type * ptx 端口号 PTA--Port A
PTB--Port B
PTC--Port C
PTD--Port D
PTE--Port E
uint8 lsb_num 端口引脚位数编号 0~31--GPIO口的第0~31位

输出

指定GPIO口的指定位数的电平

LPLD_GPIO_Input_8b()

函数原型

uint8 LPLD_GPIO_Input_8b(GPIO_Type *, uint8);

描述

取得GPIO端口8位数据的输入

形参

类型 名称 描述 取值
GPIO_Type * ptx 端口号 PTA--Port A
PTB--Port B
PTC--Port C
PTD--Port D
PTE--Port E
uint8 lsb_num 端口引脚位数编号 0--GPIO口的第0~7位
8--GPIO口的第8~15位
16--GPIO口的第16~23位
24--GPIO口的第24~31位

输出

指定GPIO口的8位数据的电平

其他

LPLD_GPIO_IsPinxExt()

宏定义原型

#define LPLD_GPIO_IsPinxExt(PORTX, PINX)  (PORTX->ISFR&PINX)

描述

检测PORTX的引脚PINX是否产生外部中断

形参

类型 名称 描述 取值
PORT_Type * PORTX 外部引脚端口号 PORTA--Port A引脚
PORTB--Port B引脚
PORTC--Port C引脚
PORTD--Port D引脚
PORTE--Port E引脚
GpioPinsEnum PINX 外部引脚掩码

GPIO_Pin0--第0引脚
……
GPIO_Pin31--第31引脚

输出

大于0 - 该引脚产生外部中断
0 - 该引脚未产生外部中断

LPLD_GPIO_ClearIntFlag()

宏定义原型

#define LPLD_GPIO_ClearIntFlag(PORTX)     (PORTX->ISFR=0xFFFFFFFF)

描述

清除PORTX的中断标志

形参

类型 名称 描述 取值
PORT_Type * PORTX 外部引脚端口号 PORTA--Port A引脚
PORTB--Port B引脚
PORTC--Port C引脚
PORTD--Port D引脚
PORTE--Port E引脚

输出


GPIO_PinControl变量值宏定义

GPIO_PinControl是GPIO_InitTypeDef结构体的成员变量,用来指定GPIO模块的引脚控制功能,以下是它的取值宏定义。
宏定义名 描述
INPUT_PULL_DOWN 输入下拉
INPUT_PULL_UP 输入上拉
INPUT_PULL_DIS 禁用PULL
OUTPUT_SR_FAST 高压摆率
OUTPUT_SR_SLOW 低压摆率
INPUT_PF_EN 使能低通滤波器
INPUT_PF_DIS 禁用低通滤波器
OUTPUT_OD_EN 输出开漏使能
OUTPUT_OD_DIS 输出开漏禁用
OUTPUT_DSH 高驱动能力输出
OUTPUT_DSL 低驱动能力输出
IRQC_DIS 禁用中断\请求
IRQC_DMARI 上升沿产生DMA请求
IRQC_DMAFA 下降沿产生DMA请求
IRQC_DMAET 边沿产生DMA请求
IRQC_L 低电平触发外部中断
IRQC_RI 上升沿触发外部中断
IRQC_FA 下降沿触发外部中断
IRQC_ET 边沿触发外部中断
IRQC_H 高电平触发外部中断

GPIO位带操作

GPIO方向设置

DDRXn

形如DDRXn的宏定义为GPIO方向设置的操作,其中X为PORT口分组名(A、B、C、D、E);n为PORT口的分组下的子编号,对于32位的Kinetis单片机取值为(0~31),不是所有口都有全部32的编号,因此需要查阅各芯片的技术文档。
例子
DDRA0 = 1;   //设置PortA0口为输出
DDRC19 = 0;  //设置PortC19口为输入

GPIO输出设置

PTXn_O

形如PTXn_O的宏定义为GPIO输出设置的操作,其中X为PORT口分组名(A、B、C、D、E);n为PORT口的分组下的子编号,对于32位的Kinetis单片机取值为(0~31),不是所有口都有全部32的编号,因此需要查阅各芯片的技术文档。
例子
PTA0_O = 1;   //设置PortA0输出高电平
PTA1_O = 0;   //设置PortA1输出低电平

GPIO输入设置

PTXn_I

形如PTXn_I的宏定义为GPIO输入设置的操作,其中X为PORT口分组名(A、B、C、D、E);n为PORT口的分组下的子编号,对于32位的Kinetis单片机取值为(0~31),不是所有口都有全部32的编号,因此需要查阅各芯片的技术文档。
例子
uint8 data;
data = PTA0_I;   //读取PortA0口的电平