通用输入输出(GPIO)¶
简介¶
GPIO(通用IO端口)每个GPIO端口都有相应的控制寄存器和配置寄存器。API分为两类:一类是单独操作一个pin,另一类是可同时操作一个或多个pin。提供IO输入输出状态查询接口,中断屏蔽接口、中断屏蔽查询接口、中断清除接口、中断状态查询接口、中断触发方式配置接口(可配置为:低电平触发、高电平触发、上升沿触发、下降沿触发、双边沿触发)等,以满足不同应用的要求。 CI13XX系列芯片现在有PA、PB、PC、PD共4组GPIO,PA、PB、PC每组GPIO有pin_0 ~ pin_7,PD每组GPIO有pin_0 ~ pin_5。
API¶
- 以下API可同时设置一个或多个PIN
函数名 | 描述 |
---|---|
gpio_set_output_mode | GPIO设备输出模式配置 |
gpio_set_input_mode | GPIO设备输入模式配置 |
gpio_get_direction_status | GPIO设备获取IO方向 |
gpio_irq_mask | GPIO设备中断屏蔽 |
gpio_irq_unmask | GPIO设备取消中断屏蔽 |
gpio_irq_trigger_config | GPIO设备设置中断触发方式 |
gpio_set_output_high_level | GPIO设备输出高电平 |
gpio_set_output_low_level | GPIO设备输出低电平 |
gpio_get_input_level | GPIO设备获取输入电平 |
- 以下API用于单独设置一个PIN
函数名 | 描述 |
---|---|
gpio_get_direction_status_single | GPIO设备获取一个管脚输入输出方向 |
gpio_get_irq_raw_status_single | GPIO设备获取一个管脚中断屏蔽前状态 |
gpio_get_irq_mask_status_single | GPIO设备获取一个管脚中断屏蔽后状态 |
gpio_clear_irq_single | GPIO设备控制一个管脚清除中断 |
gpio_set_output_level_single | GPIO设备控制一个管脚输出 |
gpio_get_input_level_single | GPIO设备获取一个管脚输入 |
示例¶
以下代码控制PB组的pin4输出模式
scu_set_device_gate((unsigned int)PB,ENABLE); //开启PB时钟
dpmu_set_io_reuse(PB4,FIRST_FUNCTION); //设置引脚功能复用为GPIO
dpmu_set_io_direction(PB4,DPMU_IO_DIRECTION_OUTPUT); //设置引脚功能为输出模式
dpmu_set_io_pull(PB4,DPMU_IO_PULL_DISABLE); //设置关闭上下拉
gpio_set_output_mode(PB,pin_4); //GPIO的pin脚配置成输出模式
gpio_set_output_level_single(PB,pin_4,0); //输出低电平
gpio_set_output_level_single(PB,pin_4,1); //输出高电平
以下代码配置PB组的pin4为开漏输出模式
scu_set_device_gate((unsigned int)PB,ENABLE); //开启PB时钟
dpmu_set_io_reuse(PB4,FIRST_FUNCTION); //设置引脚功能复用为GPIO
dpmu_set_io_open_drain(PB4,ENABLE); //配置引脚开漏功能,支持外部上拉5V
dpmu_set_io_pull(PB4,DPMU_IO_PULL_DISABLE); //关闭上拉
dpmu_set_io_direction(PB4,DPMU_IO_DIRECTION_OUTPUT);//设置引脚功能为输出模式
gpio_set_output_mode(PB,pin_4); //GPIO的pin脚配置成输出模式
dpmu_set_io_reuse(PB7,THIRD_FUNCTION); //设置引脚功能复用为IIC
dpmu_set_io_reuse(PC0,THIRD_FUNCTION); //设置引脚功能复用为IIC
dpmu_set_io_open_drain(PB7,ENABLE); //配置引脚开漏功能,支持外部上拉5V
dpmu_set_io_open_drain(PC0,ENABLE); //配置引脚开漏功能,支持外部上拉5V
dpmu_set_io_pull(PB7,DPMU_IO_PULL_DISABLE); //关闭上拉
dpmu_set_io_pull(PC0,DPMU_IO_PULL_DISABLE); //关闭上拉
dpmu_set_io_direction(PC0,DPMU_IO_DIRECTION_OUTPUT); //SCL配置成输出
以下代码配置PB组的pin4为输入模式
scu_set_device_gate((unsigned int)PB,ENABLE); //开启PB时钟
dpmu_set_io_reuse(PB4,FIRST_FUNCTION); //设置引脚功能复用为GPIO
dpmu_set_io_direction(PB4,DPMU_IO_DIRECTION_INPUT); //设置引脚功能为输入模式
dpmu_set_io_pull(PB4,DPMU_IO_PULL_DISABLE); //设置关闭上下拉
gpio_set_input_mode(PB,pin_4); //GPIO的pin脚配置成输入模式
if(0 == gpio_get_input_level_single(PB,pin_4)) //获取IO状态
{
//INFO:输入为低电平
}
else
{
//INFO:输入为高电平
}
以下代码配置PB组的pin4的中断为双边沿触发
scu_set_device_gate((unsigned int)PB,ENABLE); //开启PB时钟
dpmu_set_io_reuse(PB4,FIRST_FUNCTION); //设置引脚功能复用为GPIO
dpmu_set_io_direction(PB4,DPMU_IO_DIRECTION_INPUT); //设置引脚功能为输入模式
dpmu_set_io_pull(PB4,DPMU_IO_PULL_DISABLE); //设置关闭上下拉
gpio_set_input_mode(PB,pin_4); //GPIO的pin脚配置成输入模式
gpio_irq_trigger_config(PB,pin_4,both_edges_trigger); //中断触发方式
eclic_irq_enable(PB_IRQn); //使能中断
警告
PA、PB、PC有输入、输出、中断功能, PD只有输入、输出功能,无中断功能。