CSL学习笔记第八章GPIO模块.docx
- 文档编号:29289851
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:19
- 大小:19.42KB
CSL学习笔记第八章GPIO模块.docx
《CSL学习笔记第八章GPIO模块.docx》由会员分享,可在线阅读,更多相关《CSL学习笔记第八章GPIO模块.docx(19页珍藏版)》请在冰豆网上搜索。
CSL学习笔记第八章GPIO模块
第8章GPIO模块
8.1概述
通过GPIO模块的设计以允许对C55x器件中可用的非复用和地址GPIO引脚的核心控制。
以下三个表格列出了该模块有关的函数,寄存器和宏定义。
表8-1GPIO函数
——————————————————————————
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-2GPIO寄存器
IODIRIO7DIR,IO6DIR,IO5DIR,IO4DIR,IO3DIR,IO2DIR,IO1DIR,IO0DIR
IODATAIO7D,IO6D,IO5D,IO4D,IO3D,IO2D,IO1D,IO0D
C5509andC5509A支持以下.
AGPIOENIO13,IO12,IO11,IO10,IO9,IO8
AGPIODIRIO13DIR,IO12DIR,IO11DIR,IO10DIR,IO9DIR,IO8DIR
AGPIODATAIO13D,IO12D,IO11D,IO10D,IO9D,IO8D
C5502和C5501支持以下.
PGPIOEN0IO15EN,IO14EN,IO13EN,IO12EN,IO11EN,IO10EN,IO9EN,IO8EN,
IO7EN,IO6EN,IO5EN,IO4EN,IO3EN,IO2EN,IO1EN,IO0EN
PGPIODIR0IO15DIR,IO14DIR,IO13DIR,IO12DIR,IO11DIR,IO10DIR,IO9DIR,IO8DIR,
IO7DIR,IO6DIR,IO5DIR,IO4DIR,IO3DIR,IO2DIR,IO1DIR
PGPIODAT0IO15DAT,IO14DAT,IO13DAT,IO12DAT,IO11DAT,IO10DAT,IO9DAT,IO8DAT,
IO7DAT,IO6DAT,IO5DAT,IO4DAT,IO3DAT,IO2DAT,IO1DAT,IO0DAT
PGPIOEN1IO31EN,IO30EN,IO29EN,IO28EN,IO27EN,IO26EN,IO25EN,IO24EN,
IO23EN,IO22EN,IO21EN,IO20EN,IO19EN,IO18EN,IO17EN,IO16EN
PGPIODIR1IO31DIR,IO30DIR,IO29DIR,IO28DIR,IO27DIR,IO26DIR,IO25DIR,
IO24DIR,IO23DIR,IO22DIR,IO21DIR,IO20DIR,IO19DIR,IO18DIR,
IO17DIR,IO16DIR
PGPIODAT1IO31DAT,IO30DAT,IO29DAT,IO28DAT,IO27DAT,IO26DAT,IO25DAT,
IO24DAT,IO23DAT,IO22DAT,IO20DAT,IO19DAT,IO18DAT,IO17DAT,
IO16DAT
PGPIOEN2IO45EN,IO44EN,IO43EN,IO42EN,IO41EN,IO40EN,IO39EN,IO38EN,
IO37EN,IO36EN,IO35EN,IO34EN,IO33EN,IO32EN
PGPIODIR2IO45DIR,IO44DIR,IO43DIR,IO42DIR,IO41DIR,IO40DIR,IO39DIR,
IO38DIR,IO37DIR,IO36DIR,IO35DIR,IO34DIR,IO33DIR,IO32DIR
PGPIODAT2IO45DAT,IO44DAT,IO43DAT,IO42DAT,IO41DAT,IO40DAT,IO39DAT,
IO38DAT,IO37DAT,IO36DAT,IO35DAT,IO34DAT,IO33DAT,IO32DAT
————————————————————————————
8.2配置结构体
以下是建立GPIO的配置结构体
GPIO_Config(非并行GPIO引脚配置结构体)
成员列表:
Uint16ioen引脚使能寄存器IOEN
Uint16iodir引脚方向寄存器IODIR
说明:
建立非并行GPIO引脚的GPIO配置结构体.创建并初始化该结构体,接着向GPIO_config()函数船体其地址。
你可以通过使用文本值或者GPIO_RMK宏来创建结构体成员值。
GPIO_ConfigAll(并行和非并行GPIO引脚的配置结构体)
说明:
GPIO配置结构体是用于建立并行和非并行GPIO引脚,.创建并初始化该结构体,接着向GPIO_configAll()函数船体其地址。
你可以通过使用文本值或者GPIO_RMK宏来创建结构体成员值。
成员列表:
Uint16ioen非并行引脚使能寄存器IOEN
Uint16iodir非并行GPIO引脚方向寄存器IODIR
Uint16pgpioen并行GPIO引脚使能寄存器0PGPIOEN0
Uint16pgpiodir并行GPIO引脚方向寄存器0PGPIODIR0
Uint16pgpioen1并行GPIO引脚使能寄存器1PGPIOEN1
Uint16pgpiodir1并行GPIO引脚方向寄存器1PGPIODIR1
Uint16pgpioen2并行GPIO引脚使能寄存器2PGPIOEN2
Uint16pgpiodir2并行GPIO引脚方向寄存器2PGPIODIR2
8.3函数
以下的函数被C5502和C5501支持。
GPIO_close(释放先前被GPIO_open所占用的GPIO引脚)
函数VoidGPIO_(GPIO_HandlehGpio);
参数hGpioGPIO引脚句柄(参见GPIO_open())
返回值None
说明释放先前被GPIO_open所占用的GPIO引脚。
实例GPIO_close(hGpio);
GPIO_open(为单独使用占用GPIO)
函数GPIO_HandleGPIO_open(Uint32allocMask,Uint32flags);
参数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_HandlehGpio;
hGpio=GPIO_open(GPIO_PGPIO_PIN1,0);
GPIO_config(向非并行寄存器写入值)
函数voidGPIO_config(GPIO_HandlehGpio,GPIO_Config*cfg);
参数hGpioGPIO器件句柄
Cfg初始化配置寄存器的指针
返回值无
说明使用配置结构体向非并行GPIO控制寄存器写入值。
注意:
GPIO_Config结构体对于GPIOhePGPIO是通用的,但GPIO_config()函数只对使能的GPIO[0:
7].(TheGPIO_config()functionjustdiscardstheenablefieldincaseofGPIO[0:
7]pins.)
实例GPIO_HandlehGpio;
GPIO_ConfigmyConfig={GPIO_PIN1_OUTPUT|GPIO_PIN3_OUTPUT}
对5501和5502的配置
hGpio=GPIO_open(GPIO_GPIO_PIN1|GPIO_GPIO_PIN3,0)
GPIO_config(hGpio&myconfig);
GPIO_configAll(向并行和非并行GPIO控制寄存器写入值)
函数voidGPIO_config(GPIO_ConfigAll&gCfg)
参数gCfg上电和掉电非复用GPIO引脚的配置结构体
返回值无
说明向并行和非并行GPIO控制寄存器写入值,用法参见GPIO_ConfigAll
实例GPIO_ConfigAllgCfg={
GPIO_PIN1_OUTPUT|GPIO_PIN3_OUTPUT,/*IODIR*/
0,/*PGPIOEN0*/
0,/*PGPIODIR0*/
0,/*PGPIOEN1*/
0,/*PGPIODIR1*/
0,/*PGPIOEN2*/
0,/*PGPIODIR2*/
};
/*5501和5502的gpio配置*/
GPIO_configAll(&gCfg);
GPIO_pinDirection(设置GPIO为输入或者输出)
函数对于C5501和C5502
voidGPIO_pinDirection(GPIO_HandlehGpio,Uint32pinMask,Uint16direction);
对于C5509/A和C5510
voidGPIO_pinDirection(Uint32pinMask,Uint16direction);
参数hGpio之前调用GPIO_open()返回的GPIO句柄。
(此参数只对C5501/2)
pinMask受方向影响的GPIO引脚
对于5501/2,pinMask可以是以下的:
GPIOPinGroup0(非并行):
GPIO_GPIO_PIN0
GPIO_GPIO_PIN1
GPIO_GPIO_PIN2
GPIO_GPIO_PIN3
GPIO_GPIO_PIN4
GPIO_GPIO_PIN5
GPIO_GPIO_PIN6
GPIO_GPIO_PIN7
GPIOPinGroup1(并行GPIOPins0-15):
GPIO_PGPIO_PIN0
GPIO_PGPIO_PIN1
GPIO_PGPIO_PIN2
GPIO_PGPIO_PIN3
GPIO_PGPIO_PIN4
GPIO_PGPIO_PIN5
GPIO_PGPIO_PIN6
GPIO_PGPIO_PIN7
GPIO_PGPIO_PIN8
GPIO_PGPIO_PIN9
GPIO_PGPIO_PIN10
GPIO_PGPIO_PIN11
GPIO_PGPIO_PIN12
GPIO_PGPIO_PIN13
GPIO_PGPIO_PIN14
GPIO_PGPIO_PIN15
GPIOPinGroup2(并行GPIOPins16-31):
GPIO_PGPIO_PIN16
GPIO_PGPIO_PIN17
GPIO_PGPIO_PIN18
GPIO_PGPIO_PIN19
GPIO_PGPIO_PIN20
GPIO_PGPIO_PIN21
GPIO_PGPIO_PIN22
GPIO_PGPIO_PIN23
GPIO_PGPIO_PIN24
GPIO_PGPIO_PIN25
GPIO_PGPIO_PIN26
GPIO_PGPIO_PIN27
GPIO_PGPIO_PIN28
GPIO_PGPIO_PIN29
GPIO_PGPIO_PIN30
GPIO_PGPIO_PIN31
GPIOPinGroup3(并行GPIOPins32-45):
GPIO_PGPIO_PIN32
GPIO_PGPIO_PIN33
GPIO_PGPIO_PIN34
GPIO_PGPIO_PIN35
GPIO_PGPIO_PIN36
GPIO_PGPIO_PIN37
GPIO_PGPIO_PIN38
GPIO_PGPIO_PIN39
GPIO_PGPIO_PIN40
GPIO_PGPIO_PIN41
GPIO_PGPIO_PIN42
GPIO_PGPIO_PIN43
GPIO_PGPIO_PIN44
GPIO_PGPIO_PIN45
pinMask可以是单独的某个引脚或者是同组几个引脚的组合(例如:
GPIO_PGPIO_PIN23|GPIO_PGPIO_PIN30)。
directionpinMask选定的引脚的方向标记
GPIOPinGroup0(非并行GPIOPins):
GPIO_GPIO_PIN0_OUTPUT
GPIO_GPIO_PIN1_OUTPUT
GPIO_GPIO_PIN2_OUTPUT
GPIO_GPIO_PIN3_OUTPUT
GPIO_GPIO_PIN4_OUTPUT
GPIO_GPIO_PIN5_OUTPUT
GPIO_GPIO_PIN6_OUTPUT
GPIO_GPIO_PIN7_OUTPUT
GPIO_GPIO_PIN0_INPUT
GPIO_GPIO_PIN1_INPUT
GPIO_GPIO_PIN2_INPUT
GPIO_GPIO_PIN3_INPUT
GPIO_GPIO_PIN4_INPUT
GPIO_GPIO_PIN5_INPUT
GPIO_GPIO_PIN6_INPUT
GPIO_GPIO_PIN7_INPUT
GPIOPinGroup1(并行GPIOPins0-15):
GPIO_PGPIO_PIN0_OUTPUT
GPIO_PGPIO_PIN1_OUTPUT
GPIO_PGPIO_PIN2_OUTPUT
GPIO_PGPIO_PIN3_OUTPUT
GPIO_PGPIO_PIN4_OUTPUT
GPIO_PGPIO_PIN5_OUTPUT
GPIO_PGPIO_PIN6_OUTPUT
GPIO_PGPIO_PIN7_OUTPUT
GPIO_PGPIO_PIN8_OUTPUT
GPIO_PGPIO_PIN9_OUTPUT
GPIO_PGPIO_PIN10_OUTPUT
GPIO_PGPIO_PIN11_OUTPUT
GPIO_PGPIO_PIN12_OUTPUT
GPIO_PGPIO_PIN13_OUTPUT
GPIO_PGPIO_PIN14_OUTPUT
GPIO_PGPIO_PIN15_OUTPUT
GPIO_PGPIO_PIN0_INPUT
GPIO_PGPIO_PIN1_INPUT
GPIO_PGPIO_PIN2_INPUT
GPIO_PGPIO_PIN3_INPUT
GPIO_PGPIO_PIN4_INPUT
GPIO_PGPIO_PIN5_INPUT
GPIO_PGPIO_PIN6_INPUT
GPIO_PGPIO_PIN7_INPUT
GPIO_PGPIO_PIN8_INPUT
GPIO_PGPIO_PIN9_INPUT
GPIO_PGPIO_PIN10_INPUT
GPIO_PGPIO_PIN11_INPUT
GPIO_PGPIO_PIN12_INPUT
GPIO_PGPIO_PIN13_INPUT
GPIO_PGPIO_PIN14_INPUT
GPIO_PGPIO_PIN15_INPUT
GPIOPinGroup2(并行GPIOPins16-31):
GPIO_PGPIO_PIN16_OUTPUT
GPIO_PGPIO_PIN17_OUTPUT
GPIO_PGPIO_PIN18_OUTPUT
GPIO_PGPIO_PIN19_OUTPUT
GPIO_PGPIO_PIN20_OUTPUT
GPIO_PGPIO_PIN21_OUTPUT
GPIO_PGPIO_PIN22_OUTPUT
GPIO_PGPIO_PIN23_OUTPUT
GPIO_PGPIO_PIN24_OUTPUT
GPIO_PGPIO_PIN25_OUTPUT
GPIO_PGPIO_PIN26_OUTPUT
GPIO_PGPIO_PIN27_OUTPUT
GPIO_PGPIO_PIN28_OUTPUT
GPIO_PGPIO_PIN29_OUTPUT
GPIO_PGPIO_PIN30_OUTPUT
GPIO_PGPIO_PIN31_OUTPUT
GPIO_PGPIO_PIN16_INPUT
GPIO_PGPIO_PIN17_INPUT
GPIO_PGPIO_PIN18_INPUT
GPIO_PGPIO_PIN19_INPUT
GPIO_PGPIO_PIN20_INPUT
GPIO_PGPIO_PIN21_INPUT
GPIO_PGPIO_PIN22_INPUT
GPIO_PGPIO_PIN23_INPUT
GPIO_PGPIO_PIN24_INPUT
GPIO_PGPIO_PIN25_INPUT
GPIO_PGPIO_PIN26_INPUT
GPIO_PGPIO_PIN27_INPUT
GPIO_PGPIO_PIN28_INPUT
GPIO_PGPIO_PIN29_INPUT
GPIO_PGPIO_PIN30_INPUT
GPIO_PGPIO_PIN31_INPUT
GPIOPinGroup3(并行GPIOPins32-45):
GPIO_PGPIO_PIN32_OUTPUT
GPIO_PGPIO_PIN33_OUTPUT
GPIO_PGPIO_PIN34_OUTPUT
GPIO_PGPIO_PIN35_OUTPUT
GPIO_PGPIO_PIN36_OUTPUT
GPIO_PGPIO_PIN37_OUTPUT
GPIO_PGPIO_PIN38_OUTPUT
GPIO_PGPIO_PIN39_OUTPUT
GPIO_PGPIO_PIN40_OUTPUT
GPIO_PGPIO_PIN41_OUTPUT
GPIO_PGPIO_PIN42_OUTPUT
GPIO_PGPIO_PIN43_OUTPUT
GPIO_PGPIO_PIN44_OUTPUT
GPIO_PGPIO_PIN45_OUTPUT
GPIO_PGPIO_PIN32_INPUT
GPIO_PGPIO_PIN33_INPUT
GPIO_PGPIO_PIN34_INPUT
GPIO_PGPIO_PIN35_INPUT
GPIO_PGPIO_PIN36_INPUT
GPIO_PGPIO_PIN37_INPUT
GPIO_PGPIO_PIN38_INPUT
GPIO_PGPIO_PIN39_INPUT
GPIO_PGPIO_PIN40_INPUT
GPIO_PGPIO_PIN41_INPUT
GPIO_PGPIO_PIN42_INPUT
GPIO_PGPIO_PIN43_INPUT
GPIO_PGPIO_PIN44_INPUT
GPIO_PGPIO_PIN45_INPUT
方向可以使用任何上面定义过的符号常量来设置,同组的多个引脚可以用或操作进行设置比如:
GPIO_PGPIO_PIN45_INPUT|GPIO_PGPIO_PIN40_OUTPUT
返回值无
说明设置一个或多个GPIO的方向
实例/*设置pgpio为输入*/
GPIO_handlehGpio=GPIO_open{GPIO_PGPIO_PIN1|GPIO_PGPIO_PIN15};
GPIO_pinDirection(hGpio,GPIO_PGPIO_PIN1_INPUT);
GPIO_pinDisable.(禁止一个引脚作为GPIO引脚)
函数对于5501/2:
VoidGPIO_pinDisable(GPIO_HandlehGpio,Uint32pinId)
对于5509/a,5510:
VoidGPIO_pinDisable(Uint32pinId)
参数hGpio由GPIO_open返回的GPIO句柄(仅对5501/2CSL)
pinId禁止的引脚,参见GPIO_pinDirection()查看引脚号。
返回值无
说明禁止一个或多个GPIO引脚
实例/*禁止PGPIO1作为GPIO*/
GPIO_handlehGpio=GPIO_open(
GPIO_GPIO_PIN1|GPIO_GPIO_PIN15);
GPIO_pinDisable(hGpio,GPIO_GPIO_PIN1);
GPIO_pinEnable(使能一个引脚作为GPIO)
函数对于5501/2:
VoidGPIO_pinEnable(GPIO_HandlehGpio,Uint32pinId)
对于5509/A,5510:
VoidGPIO_pinEnable(Uint32pinId)
参数hGpio由GPIO_open返回的GPIO句柄(仅对5501/2CSL)
pinId使能的引脚,参见GPIO_pinDirection()查看引脚号。
返回值无
说明使能一个GPIO引脚
实例GPIO_pinEnable(hGpio,GPIO_GPIO_PIN1)
GPIO_pinRead(读GPIO引脚值)
函数对于5501/2:
intGPIO_pinRead(GPIO_HandlehGpio,Uint32pinId)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CSL 学习 笔记 第八 GPIO 模块