Nuc501驱动之gpio使用

来源:互联网 发布:js如何判断是不是数组 编辑:程序博客网 时间:2024/05/08 15:19

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/8mA12mA/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_REG0PAD_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 0
原创粉丝点击