Nuc501驱动之gpio使用

论坛 期权论坛 脚本     
匿名技术用户   2021-1-4 03:00   121   0

Nuc501驱动之gpio使用

1 简介

Nuc501提供gpio的个数:

Nuc501ADN-LQFP48提供26GPIO,分别是GPA[0]~GPA[15] GPB[0]~GPB[9]

Nuc501BDN-LQFP48提供37GPIO,分别是GPA[0]~GPA[15] GPB[0]~GPB[9] GPC[0]~GPC[10]

GPIO管脚都是其他功能复用的,GPIO可以配置成输入或输出,可以设置上拉电阻和驱动能力.GPB[1]~GPB[8]的驱动能力比较强,可以直接驱动LED,驱动电流可以配置为12mA16mA.其他的GPIO的驱动能力可以配置成4mA8mA.

2 相关寄存器

2.1 功能选择寄存器 PAD_REG0, PAD_REG1,PAD_REG2

每个管脚的默认功能是GPIO.

如果一个管脚配置了多个功能,则按下面的优先级来决定该管脚的功能.

Alternative Function 1 > Alternative Function 2 > Alternative Function 3 > Default Function

PAD_REG0用来配置PWM0~PWM3的管脚,

PAD_REG1用来配置

PAD_REG2用来配置USBDET的管脚

2.2 GPIO方向选择寄存器

GPIOA_OMD

GPIOB_OMD

GPIOC_OMD

用来设置GPIO的方向,1为输出,0为输入

2.2 上拉电阻配置寄存器

GPIOA_PUEN

GPIOB_PUEN

GPIOC_PUEN

用来配置有无上拉电阻

2.3 驱动能力配置寄存器

GPA_DS

GPB_DS

GPC_DS

用来配置各个GPIO的驱动电流:4mA/8mA 12mA/16mA

2.4 输出寄存器

GPIOA_DOUT

GPIOB_DOUT

GPIOC_DOUT

在输出模式下设置GPIO的高低

2.5 GPIO输入寄存器

GPIOA_PIN

GPIOB_PIN

GPIOC_PIN

用来获取管脚的电平高低

2.6 中断相关寄存器

DBNCECON 用来设置IRQ0~IRQ3的消抖时间,共1620-15次方个APB时钟。IRQ0~IRQ3共用一个消抖时间。

IRQSRCGPA

IRQSRCGPB

IRQSRCGPC

选择gpio连接到的中断,共有四个中断可选,分别是IRQ0~IRQ3

IRQENGPA

IRQENGPB

IRQENGPC

配置中断使能,可设置上升沿中断和下降沿中断。

IRQLHSEL中断配置寄存器:IRQxLHE中断锁存使能,IRQxWake中断唤醒使能,IRQ_SRCC中断状态类型设置。

IRQLHGPA

IRQLHGPB

IRQLHGPC

中断锁存器,锁存gpio的值到锁存器

3 GPIO的使用

3.1 GPIO初始化

设置管脚的功能为GPIO模式:PAD_REG0 PAD_REG1PAD_REG2

设置GPIO的方向:GPIOx_OMD

设置上拉电阻:GPIOx_PUEN

设置驱动电流:GPx_DS

3.2 GPIO中断设置

设置管脚消抖时间:DBNCECON

安装中断程序

使能中断:IRQ0~IRQ3

选择中断:IRQSRCGPx

配置中断类型:IRQENGPx

3.3 GPIO输出操作

设置GPIOx_DOUT对应位的值,设置某位应不影响其他位的值。

// Set GPIOB[0] output 1 by GPIOB_DOUT register

outp32(GPIOB_DOUT, inp32(GPIOB_DOUT) | 0x0001);

// Set GPIOB[0] output 0 by GPIOB_DOUT register

outp32(GPIOB_DOUT, inp32(GPIOB_DOUT) & ~0x0001);

3.4 GPIO输入操作

读取GPIOx_PIN输入寄存器对应位的值

4 GPIO驱动程序

DrvGPIO_Init

初始化GPIO为没被使用,

设置每个端口GPIO的个数.

设置IRQLHSEL的前四位和第8位为1,使能锁存,GPIO中断状态将保持到直至被清除.

DrvGPIO_Open

设置某端口某位GPIO的方向、上拉电阻、驱动电流。

设置GPIO使用标志

DrvGPIO_Close

恢复某端口某位GPIO的方向为输入、无上拉电阻、低驱动电流

清除GPIO使用标志

DrvGPIO_SetBit

按位设置gpio输出为1

DrvGPIO_ClrBit

按位清除gpio输出为0

DrvGPIO_GetBit

获取某位gpio的输入值

DrvGPIO_SetPortBits

设置某gpio端口的输出值

DrvGPIO_GetPortBits

获取某GPIO端口的输入值

DrvGPIO_GetPortDoutBits

获取某GPIO端口的输出值

DrvGPIO_EnableInt

安装中断程序,使能对应中断。

选择中IRQ0~IRQ4

设置上升沿中断使能/下降沿中断使能情况

DrvGPIO_DisableInt

禁止某gpio位的上升沿中断和下降沿中断

DrvGPIO_SetDebounceTime

设置中断的消抖时间

DrvGPIO_EnableIntDebounce

使能中断消抖,并设置消抖时间

DrvGPIO_DisableIntDebounce

禁止消抖

DrvGPIO_GetDebounceTime

获取消抖时间

DrvGPIO_EnableWakeupInt

使能中断唤醒功能

DrvGPIO_DisableWakeupInt

禁止中断唤醒

DrvGPIO_GetLatchValue

获取端口的中断锁存值

DrvGPIO_GetIntStatus

获取中断状态

DrvGPIO_SetPadReg0

设置管脚功能

DrvGPIO_SetPadReg1

设置管脚功能

DrvGPIO_SetPadReg2

设置管脚功能

DrvGPIO_InitFunction

为某功能的选择管脚

DrvGPIO_InitBitFunction

设置某位的功能

DrvGPIO_GetDoutBit

获取某位的输出值

DrvGPIO_GetVersion

获取驱动的软件版本

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP