gpio初始化
void gpio_init(PIN_enum pin, GPIODIR_enum dir, uint8 dat, uint32 pinconf)
第一个参数:引脚,用哪个就写哪个,用B9填B9,具体的在common.h文件中 typedef enum
第二个参数:引脚的方向 输出:GPO 输入:GPI
第三个参数:引脚初始化时设置的电平状态,输出时有效 0:低电平 1:高电平
第四个参数:引脚配置(可设置参数由zf_iomuxc.h文件内PINCONF_enum枚举值确定,多个条件使用 | 相或)。看zf_gpio.h前面宏定义部分,
大概意思是你就点个灯啦,选第一个,用快速gpio了,用第二个,用中断了,选第三个。参数也可以自己改,目前我也不知道快速gpio是啥。
gpio设置
输出
void gpio_set(PIN_enum pin, uint8 dat)
第一个参数:引脚号
第二个参数:0 或 1
输入
uint8 gpio_get(PIN_enum pin) //你要读的引脚
返回的是unsigned char类型,即uint8
延时 ms级别
systick_delay_ms(100);
gpio方向设置
gpio_dir(PIN_enum pin, GPIODIR_enum dir)
// @param pin 选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
// @param dir 引脚的方向 输出:GPO 输入:GPI
引脚电平反转
void gpio_toggle(PIN_enum pin)
gpio外部中断初始化
void gpio_interrupt_init(PIN_enum pin, TRIGGER_enum trigger, uint32 pinconf)
第一个参数:引脚
第二个参数:中断触发方式,可选enum中的
typedef enum // 枚举触发方式
{
NO_INT, //关闭中断模式
LOW, //低电平触发
HIGH, //高
RISING, //上升沿
FALLING, //下降沿
BOTH, //仅PINT模块 可用此触发方式
}TRIGGER_enum;
第三个参数:引脚配置,可选,多个条件使用 | 相或
#define GPIO_PIN_CONFIG SPEED_100MHZ | DSE_R0 | PULLUP_47K | PULL_EN //宏定义GPIO引脚的默认配置,便于初始化GPIO时快速填写参数,如果需要其他参数可自行修改
#define FAST_GPIO_PIN_CONFIG SPEED_200MHZ | DSE_R0 | PULLUP_47K | PULL_EN //宏定义快速GPIO引脚的默认配置,便于初始化GPIO时快速填写参数,如果需要其他参数可自行修改
#define GPIO_INT_CONFIG SPEED_100MHZ | HYS_EN | PULLUP_22K | PULL_EN //宏定义GPIO中断引脚的默认配置,便于初始化GPIO中断时快速填写参数,如果需要其他参数可自行修改
这些可以自己改或者添加,具体的选项在zf_iomuxc.h的PINCONF_enum中。
typedef enum
{
HYS_EN = 1<<IOMUXC_SW_PAD_CTL_PAD_HYS_SHIFT, //滞后使能
PULLDOWN_100K = 0<<IOMUXC_SW_PAD_CTL_PAD_PUS_SHIFT, //端口为输入时有效
PULLUP_47K = 1<<IOMUXC_SW_PAD_CTL_PAD_PUS_SHIFT, //端口为输入时有效
PULLUP_100K = 2<<IOMUXC_SW_PAD_CTL_PAD_PUS_SHIFT, //端口为输入时有效
PULLUP_22K = 3<<IOMUXC_SW_PAD_CTL_PAD_PUS_SHIFT, //端口为输入时有效
PULL_EN = 1<<IOMUXC_SW_PAD_CTL_PAD_PKE_SHIFT | 1<<IOMUXC_SW_PAD_CTL_PAD_PUE_SHIFT,
KEEPER_EN = 1<<IOMUXC_SW_PAD_CTL_PAD_PKE_SHIFT, //保持器使能
OD_EN = 1<<IOMUXC_SW_PAD_CTL_PAD_ODE_SHIFT, //开漏使能
SPEED_50MHZ = 0<<IOMUXC_SW_PAD_CTL_PAD_SPEED_SHIFT,
SPEED_100MHZ = 1<<IOMUXC_SW_PAD_CTL_PAD_SPEED_SHIFT,
SPEED_200MHZ = 3<<IOMUXC_SW_PAD_CTL_PAD_SPEED_SHIFT,
DSE_DIS = 0<<IOMUXC_SW_PAD_CTL_PAD_DSE_SHIFT, //禁用输出强度设置
DSE_R0 = 1<<IOMUXC_SW_PAD_CTL_PAD_DSE_SHIFT, //3.3V时150ohm 1.8V时260ohm
DSE_R0_2 = 2<<IOMUXC_SW_PAD_CTL_PAD_DSE_SHIFT, //R/2
DSE_R0_3 = 3<<IOMUXC_SW_PAD_CTL_PAD_DSE_SHIFT, //R/3
DSE_R0_4 = 4<<IOMUXC_SW_PAD_CTL_PAD_DSE_SHIFT, //R/4
DSE_R0_5 = 5<<IOMUXC_SW_PAD_CTL_PAD_DSE_SHIFT, //R/5
DSE_R0_6 = 6<<IOMUXC_SW_PAD_CTL_PAD_DSE_SHIFT, //R/6
DSE_R0_7 = 7<<IOMUXC_SW_PAD_CTL_PAD_DSE_SHIFT, //R/7
SRE_SLOW = 0<<IOMUXC_SW_PAD_CTL_PAD_SRE_SHIFT,
SRE_FAST = 1<<IOMUXC_SW_PAD_CTL_PAD_SRE_SHIFT,
}PINCONF_enum;
具体的意思现在还不懂=_=
快速gpio初始化
void fast_gpio_init(PIN_enum pin, GPIODIR_enum dir, uint8 dat, uint32 pinconf)
配置和普通的一样,引脚范围可选择范围由 common.h 内PIN_enum枚举值确定,但是快速GPIO 最高可达150M的翻转输出,需要达到最高速度不能使用库函数来输出电平,需要直接操作寄存器来控制引脚,具体可以查看h文件中有宏定义
同样,快速gpio也有相关类似函数
void fast_gpio_set(PIN_enum pin, uint8 dat)
uint8 fast_gpio_get(PIN_enum pin)
void fast_gpio_dir(PIN_enum pin, GPIODIR_enum dir)
void fast_gpio_toggle(PIN_enum pin)