Nuc501驱动之gpio使用
1 简介
Nuc501提供gpio的个数:
Nuc501ADN-LQFP48提供26个GPIO,分别是GPA[0]~GPA[15] GPB[0]~GPB[9]
Nuc501BDN-LQFP48提供37个GPIO,分别是GPA[0]~GPA[15] GPB[0]~GPB[9] GPC[0]~GPC[10]
GPIO管脚都是其他功能复用的,GPIO可以配置成输入或输出,可以设置上拉电阻和驱动能力.GPB[1]~GPB[8]的驱动能力比较强,可以直接驱动LED,驱动电流可以配置为12mA或16mA.其他的GPIO的驱动能力可以配置成4mA或8mA.
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的消抖时间,共16级2的0-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_REG1,PAD_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
获取驱动的软件版本