Z20K118库中寄存器及其库函数封装-GPIO库 - 实践

1.全局引脚数据/控制寄存器(PORT)

 各1个位域。 GLBCTL寄存器解锁本PORT对应引脚的PCRn寄存器,GLBDAT寄存器将本寄存器内的值写入到GLBCTL解锁的PCRn寄存器。

1-1 

void PORT_GlobalPinsConfig(PORT_ID_t portId, uint32_t pins, uint32_t value);

对一个PORT中所有PCRn解锁的引脚进行的相同功能配置。

2.端口引脚控制寄存器(PORT)

12个位域。独立引脚的各功能配置。

2-1

void PORT_PinInit(PORT_ID_t portId, PORT_GPIONO_t gpioNo, const PORT_PinConfig_t *pinConfig);

配置上下拉电阻的使能、引脚电平翻转速率上限、被动输入滤波器使能、开漏输出使能、引脚驱动能力设置(高、低两种)、滤波器设置、滤波器使能。

2-2

void PORT_PinmuxConfig(PORT_ID_t portId, PORT_GPIONO_t gpioNo,
PORT_PinMuxFunc_t pinMuxFunc)

1个位域。引脚复用功能选择,包括模拟输入,常规GPIO,以及芯片内部其他特定外设的输入/出。

2-3

void PORT_PinIntConfig(PORT_ID_t portId, PORT_GPIONO_t gpioNo,
PORT_IntConfig_t intConfig)

1个位域。设置中断标志位和DMA请求的触发方式(上升沿/逻辑0/不触发等)。

2-4

void PORT_PullConfig(PORT_ID_t portId, PORT_GPIONO_t gpioNo,
PORT_PullConfig_t pullConfig)

1个位域。上下拉电阻使能。

2-5

void PORT_SlewRateConfig(PORT_ID_t portId, PORT_GPIONO_t gpioNo,
PORT_SlewRate_t slewRateConfig)

1个位域。引脚电平翻转速率上限。

2-6

void PORT_PassiveFilterConfig(PORT_ID_t portId, PORT_GPIONO_t gpioNo,
ControlState_t passiveFilterConfig)

一个位域。被动输入滤波器使能。

2-7

void PORT_OpenDrainConfig(PORT_ID_t portId, PORT_GPIONO_t gpioNo,
ControlState_t openDrainConfig)

一个位域。开漏模式使能。

2-8

void PORT_DriveStrengthConfig(PORT_ID_t portId, PORT_GPIONO_t gpioNo,
PORT_DriveStrength_t driveStrengthConfig)

一个位域。引脚驱动能力(高、低)。

2-9

void PORT_FilterConfig(PORT_ID_t portId, PORT_GPIONO_t gpioNo,
uint8_t filterConfig)

一个位域。滤波器大小。

2-10

void PORT_FilterCmd(PORT_ID_t portId, PORT_GPIONO_t gpioNo,
ControlState_t filterEnable)

一个位域。滤波器使能。

2-11

FlagStatus_t PORT_GetIntStatus(PORT_ID_t portId, PORT_GPIONO_t gpioNo)

一个位域。获取中断标志位。

2-12

void PORT_ClearPinInt(PORT_ID_t portId, PORT_GPIONO_t gpioNo)

一个位域。清除对应引脚中断标志位。

3.端口中断标志位寄存器 (PORT)

1个位域,每一位连接一个引脚的PCRn的中断标志位(引脚需存在),可读写。 

3-1 

uint32_t PORT_GetIntStatusAll(PORT_ID_t portId)

获取PORT所有引脚的中断标志位。

3-2

void PORT_ClearPinsInt(PORT_ID_t portId, uint32_t clrPins)

 清除多个引脚中断标志位。

4.端口数据方向寄存器(GPIO)

 1个位域,可配置端口任意GPIO数据传输方向(输入/输出)。

4-1 

void GPIO_SetPinDir(PORT_ID_t port, PORT_GPIONO_t gpioNo, GPIO_Dir_t dir)

单个GPIO传输方向设置。 

4-2

void GPIO_SetPinsDir(PORT_ID_t port, uint32_t dataDir)

多个GPIO传输方向设置。  

5.端口输出寄存器(GPIO)

1个位域,可配置端口任意GPIO的输出高或低电平。 

5-1 

void GPIO_WritePinOutput(PORT_ID_t port, PORT_GPIONO_t gpioNo, GPIO_LVL_t val)

单GPIO口输出高低电平。

5-2

void GPIO_WritePinsOutput(PORT_ID_t port, uint32_t val)

多GPIO口输出高低电平。

6.端口低电平输出寄存器(GPIO)

1个位域,可配置端口任意GPIO输出低电平。本质是配置PDOR。

6-1 

void GPIO_ClearPinOutput(PORT_ID_t port, PORT_GPIONO_t gpioNo)

单GPIO口输出低电平。

6-2

void GPIO_ClearPinsOutput(PORT_ID_t port, uint32_t pins)

多GPIO口输出低电平。

7.端口高电平输出寄存器(GPIO)

1个位域, 可配置端口任意GPIO输出高电平。本质是配置PDOR。

7-1

void GPIO_SetPinOutput(PORT_ID_t port, PORT_GPIONO_t gpioNo)

单GPIO口输出高电平。

7-2

void GPIO_SetPinsOutput(PORT_ID_t port, uint32_t pins)

多GPIO口输出高电平。

8.端口翻转输出寄存器(GPIO)

1个位域,可配置端口任意GPIO的输出值翻转,本质配置PDOR。

8-1

void GPIO_TogglePinOutput(PORT_ID_t port, PORT_GPIONO_t gpioNo)

单GPIO口翻转电平。

8-2

void GPIO_TogglePinsOutput(PORT_ID_t port, uint32_t pins)

多GPIO口翻转电平。

9.端口输入寄存器(GPIO)

读取引脚的逻辑电平,若引脚未被配置为数字模式(即除模拟输入外)则读取的值为逻辑0。 

9-1

GPIO_LVL_t GPIO_ReadPinLevel(PORT_ID_t port, PORT_GPIONO_t gpioNo)

读取单GPIO引脚电平。

9-2

uint32_t GPIO_ReadPinsLevel(PORT_ID_t port)

读取多GPIO引脚电平。

 X:中断及其他函数

X-1

void PORT_InstallCallBackFunc(port_cb_t cbFun)

将用户编写的中断功能函数与系统的中断处理函数进行连接。触发中断时系统自动调用中断处理函数,并通过本函数的连接调用用户编写的函数。

X-2

void RGPIO_SetPinDir(PORT_ID_t port, PORT_GPIONO_t gpioNo, GPIO_Dir_t dir)
void RGPIO_SetPinsDir(PORT_ID_t port, uint32_t dataDir)
void RGPIO_WritePinOutput(PORT_ID_t port, PORT_GPIONO_t gpioNo, GPIO_LVL_t val)
void RGPIO_WritePinsOutput(PORT_ID_t port, uint32_t val)
void RGPIO_ClearPinOutput(PORT_ID_t port, PORT_GPIONO_t gpioNo)
void RGPIO_ClearPinsOutput(PORT_ID_t port, uint32_t pins)
void RGPIO_SetPinOutput(PORT_ID_t port, PORT_GPIONO_t gpioNo)
void RGPIO_SetPinsOutput(PORT_ID_t port, uint32_t pins)
void RGPIO_TogglePinOutput(PORT_ID_t port, PORT_GPIONO_t gpioNo)
void RGPIO_TogglePinsOutput(PORT_ID_t port, uint32_t pins)
GPIO_LVL_t RGPIO_ReadPinLevel(PORT_ID_t port, PORT_GPIONO_t gpioNo)
uint32_t RGPIO_ReadPinsLevel(PORT_ID_t port)

在本Z20K118型号芯片,SDK1_8中,这些函数与之前的函数功能、底层代码、涉及的寄存器等完全相同,仅函数名多了R前缀,在未来版本或者其他型号芯片可能有所不同。 

X-3

static void PORT_IntHandler(PORT_ID_t portId)

 由PORT的中断驱动处理函数调用本函数。先读取所有中断标志位(IRQFLG),循环判断每个GPIO的标志位,若置1则执行回调函数中链接的用户编写的功能函数,若未链接功能函数则该GPIO下次无法产生中断标志位(PCRn寄存器的IRQC)也就是无法进入本函数,最后重新赋值所有中断标志位(用户可能在功能函数中修改了中断标志位)。

X-4

void PORTABC_DriverIRQHandler(void)

 端口ABC的中断驱动处理函数。先判断对应端口时钟是否打开(PARCC_PORTx寄存器的PCKMD位),再判断本端口的是否有中断标志位置1(3:PORTx_IRQFLG寄存器),若有,则调用中断处理函数。

static void PORT_IntHandler(PORT_ID_t portId)

当中断触发时,系统硬件会自动使MCU的执行指针从主函数的地址跳转到中断向量表的地址,本函数的位置通过启动文件链接到中断向量表指针所指向的地址,也就是硬件触发时自动执行本函数。其他中断驱动处理函数同理。

X-5

void PORTDE_DriverIRQHandler(void)

 端口DE的中断驱动处理函数。 与X-4同理。

posted on 2025-08-01 14:21  ljbguanli  阅读(16)  评论(0)    收藏  举报