CSL学习笔记第八章GPIO模块 下载本文

学习必备 欢迎下载

第八章 GPIO模块

8.1 概述

通过GPIO模块的设计以允许对C55x器件中可用的非复用和地址GPIO引脚的核心控制。以下三个表格列出了该模块有关的函数,寄存器和宏定义。

表8-1 GPIO函数

—————————————————————————— GPIO_pinDirection

设置GPIO引脚为输入或者输出 GPIO_pinDisable

禁止一个引脚作为GPIO引脚 GPIO_pinEnable

使能一个引脚作为GPIO引脚 GPIO_pinRead

读GPIO引脚的值 GPIO_pinWrite

向GPIO引脚写值

下面的函数是C5501和C5502器件所支持。

GPIO_colse

释放一个或多个GPIO引脚 GPIO_config

配置GPIO引脚 GPIO_open

分配一个或多个GPIO引脚到当前进程中 GPIO_pinReadAll

读一个或多个引脚的值 GPIO_pinWriteAll

写一个或多个引脚 GPIO_pinReset

复位一个或多个引脚

————————————————————————————

表8-2 GPIO寄存器

IODIR

IO7DIR, IO6DIR, IO5DIR, IO4DIR, IO3DIR, IO2DIR, IO1DIR, IO0DIR

IODATA IO7D, IO6D, IO5D, IO4D, IO3D, IO2D, IO1D, IO0D C5509 and C5509A支持以下. AGPIOEN AGPIODIR AGPIODATA PGPIOEN0

IO13, IO12, IO11, IO10, IO9, IO8

IO13DIR, IO12DIR, IO11DIR, IO10DIR, IO9DIR, IO8DIR IO13D, IO12D, IO11D, IO10D, IO9D, IO8D

IO15EN, IO14EN, IO13EN, IO12EN, IO11EN, IO10EN, IO9EN, IO8EN,

C5502 和 C5501支持以下.

学习必备 欢迎下载

IO7EN, IO6EN, IO5EN, IO4EN, IO3EN, IO2EN, IO1EN, IO0EN

PGPIODIR0

IO15DIR, IO14DIR, IO13DIR, IO12DIR, IO11DIR, IO10DIR, IO9DIR, IO8DIR, IO7DIR, IO6DIR, IO5DIR, IO4DIR, IO3DIR, IO2DIR, IO1DIR

PGPIODAT0 IO15DAT, IO14DAT, IO13DAT, IO12DAT, IO11DAT, IO10DAT, IO9DAT, IO8DAT,

IO7DAT, IO6DAT, IO5DAT, IO4DAT, IO3DAT, IO2DAT, IO1DAT, IO0DAT

PGPIOEN1 PGPIODIR1

IO31EN, IO30EN, IO29EN, IO28EN, IO27EN, IO26EN, IO25EN, IO24EN, IO23EN, IO22EN, IO21EN, IO20EN, IO19EN, IO18EN, IO17EN, IO16EN IO31DIR, IO30DIR, IO29DIR, IO28DIR, IO27DIR, IO26DIR, IO25DIR, IO24DIR, IO23DIR, IO22DIR, IO21DIR, IO20DIR, IO19DIR, IO18DIR, IO17DIR, IO16DIR

PGPIODAT1 IO31DAT, IO30DAT, IO29DAT, IO28DAT, IO27DAT, IO26DAT, IO25DAT,

IO24DAT, IO23DAT, IO22DAT, IO20DAT, IO19DAT, IO18DAT, IO17DAT, IO16DAT

PGPIOEN2 PGPIODIR2

IO45EN, IO44EN, IO43EN, IO42EN, IO41EN, IO40EN, IO39EN, IO38EN, IO37EN, IO36EN, IO35EN, IO34EN, IO33EN, IO32EN

IO45DIR, IO44DIR, IO43DIR, IO42DIR, IO41DIR, IO40DIR, IO39DIR, IO38DIR, IO37DIR, IO36DIR, IO35DIR, IO34DIR, IO33DIR, IO32DIR

PGPIODAT2 IO45DAT, IO44DAT, IO43DAT, IO42DAT, IO41DAT, IO40DAT, IO39DAT,

IO38DAT, IO37DAT, IO36DAT, IO35DAT, IO34DAT, IO33DAT, IO32DAT

————————————————————————————

8.2 配置结构体

以下是建立GPIO的配置结构体

GPIO_Config(非并行GPIO引脚配置结构体)

成员列表: Uint16 ioen 引脚使能寄存器 IOEN

Uint16 iodir 引脚方向寄存器 IODIR

说明 : 建立非并行GPIO引脚的GPIO配置结构体.创建并初始化该结构体,接着向GPIO_config()函数船体其地址。你可以通过使用文本值或者GPIO_RMK宏来创建结构体成员值。

GPIO_ConfigAll(并行和非并行GPIO引脚的配置结构体) 说明 : GPIO配置结构体是用于建立并行和非并行GPIO引脚,.创建并初始化该结构体,接着向GPIO_configAll()函数船体其地址。你可以通过使用文本值或者GPIO_RMK宏来创建结构体成员值。 成员列表:

Uint16 ioen Uint16 iodir

非并行引脚使能寄存器

IOEN

IODIR PGPIOEN0

PGPIODIR0 PGPIODIR1 PGPIOEN2 PGPIODIR2 PGPIOEN1

非并行GPIO引脚方向寄存器

Uint16 pgpioen 并行GPIO引脚使能寄存器0 Uint16 pgpiodir 并行GPIO引脚方向寄存器0 Uint16 pgpioen1 并行GPIO引脚使能寄存器1

Uint16 pgpiodir1 并行GPIO引脚方向寄存器1 Uint16 pgpiodir2 并行GPIO引脚方向寄存器2

Uint16 pgpioen2 并行GPIO引脚使能寄存器 2

学习必备 欢迎下载

8.3函数

以下的函数被C5502和C5501支持。

GPIO_close (释放先前被GPIO_open所占用的GPIO引脚) 函数 Void GPIO_(GPIO_Handle hGpio); 参数 hGpio GPIO 引脚句柄(参见GPIO_open()) 返回值 None 说明 释放先前被GPIO_open所占用的GPIO引脚。 实例 GPIO_close(hGpio);

GPIO_open (为单独使用占用GPIO) 函数 GPIO_Handle GPIO_open(Uint32 allocMask,Uint32 flags); 参数 allocMask 占用的GPIO引脚,可以参见GPIO_pinDirection查看可用的引 脚。

flags 打开标志,当前未指定。

返回值 GPIO_Handle 器件句柄 说明 在一个GPIO引脚被使用前,必须要被该应用程序占用,一旦被占用了,就不 会在响应其他的请求,直到被GPIO_close()关闭。返回值是一个唯一的器件句 柄,该句柄用于随后的API调用中的GPIO中。如果函数出错返回INV(-1)。

对于C5502和C5501,有四组GPIO 引脚(见GPIO_pinDirection())

在调用了GPIO_open() 的同一时刻只能打开一组中的一个或几个引脚,在不 同组中多次调用引脚的allocMask会产生未知结果。

例如:GPIO_open()第一个参数是同一组的(GPIO_GPIO_PIN4 | GPIO_GPIO_PIN2),但是(GPIO_GPIO_PIN4 | GPIO_PGPIO_PIN2)就会产生未 知结果。

如果GPIO_open()在一个组中被调用了,在GPIO_close被调用前,它就不能 再次调用来打开同组的其他引脚。然而,GPIO_open()可以在此时被调用来打 开其他组的引脚。

例如:如果GPIO_open()第一次调用了GPIO_GPIO_PIN4,他就不能再被调用 打开同组的的GPIO_GPIO_PIN2,但是可以打开GPIO_PGPIO_PIN2. 实例 GPIO_Handle hGpio;

hGpio = GPIO_open(GPIO_PGPIO_PIN1,0);

GPIO_config (向非并行寄存器写入值) 函数 void GPIO_config(GPIO_Handle hGpio,GPIO_Config *cfg); 参数 hGpio GPIO器件句柄

Cfg 初始化配置寄存器的指针

返回值 无 说明 使用配置结构体向非并行GPIO控制寄存器写入值。

注意:GPIO_Config结构体对于GPIOhe PGPIO是通用的,但GPIO_config() 函数只对使能的GPIO[0:7].( The GPIO_config() function just discards the enable field in case of GPIO [0:7] pins.) 实例 GPIO_Handle hGpio ;

GPIO_Config myConfig = {GPIO_PIN1_OUTPUT | GPIO_PIN3_OUTPUT }