gpio输出:
一.第一步搭建工程
二.打开e2studio配置GPIO
任务:点亮两个led灯
根据外设板图得知,板子上的led灯需要高电平才可以点亮,故假设以P401和P404为例。
1.在e2studio中可以直接设置p401和p404为高电平输出模式。
可以用R_IOPORT_PinWrite()和R_IOPORT_PortWrite()两个函数进行配置高电平。
R_IOPORT_PinWrite() 特点:只能配置一个引脚
R_IOPORT_PinWrite()函数原型
fsp_err_t R_IOPORT_PinWrite(
ioport_ctrl *const p_ctrl,
bsp_io_port_pin_t pin,
bsp_io_level_t level
)
Sets a pin's output either high or low.Implements ioport_api_t::pinWrite.
Return values
FSP_SUCCESS //写入成功
FSP_ERR_INVALID_ARGUMENT //pin和level无效
FSP_ERR_NOT_OPEN //模块尚未打开
ESP_ERR_ASSERTION //空指针
note:
这个函数对于不同的引脚是可重入的,可以在函数上直接修改引脚
例子:
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_01, BSP_IO_LEVEL_HIGH);
可以直接在函数上修改为
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04, BSP_IO_LEVEL_HIGH);
R_IOPORT_PortWrite() 特点:是对一个Port的所有Pin脚进行写操作
R_IOPORT_PorWrite()
fsp_err_t R_IOPORT_PortWrite(
ioport_ctrl_t *const p_ctrl,
bsp_io_port_t port,
ioport_size_t value,
ioport_size_t mask
)
Writes to multiple pins on a port,Implements ioport_api_t::porWrite.
输入值将被写入指定的端口,value参数中的每个位对应端口上的一个位,以此类推,掩码参数中的每一个位对应端口上的一个引脚。
只有掩码设置中对应的位才会被更新,例如,value=0xFFFF,mask=0x0003只会产生0位和1位更新
return value
FSP_SUCCESS //写入成功
FSP_ERR_INVALID_ARGUMENT //端口或者掩码无效
FSP_ERR_NOT_OPEN //模块尚未打开
ESP_ERR_ASSERTION //空指针
note:
这个函数对于不同的端口是可以重入的,这个函数使用PCNTR3寄存器修改端口上指定引脚的电平
例子:
//0x0002为设定值,0x00ff为mark,即需要开启的管脚
R_IOPORT_PortWrite(&g_ioport_ctrl, BSP_IO_PORT_03, 0x0002, 0x00ff);
gpio输入:
一.第一步搭建工程
二.打开e2studio配置GPIO
任务:按下key键(假设P104),led(假设p301亮),否则led(假设pin301灭)
由板子图得知,板子上有led(p301),分析得出需要给一个高电平,才能是led亮
由于前面的按键key有一个上拉电阻,所以必须给key一个低电平输入。
主要逻辑:
led灯需要高电平才能亮,当我们按下key键之后,key为低电平输入,
if(p_port_value_port_104&0x0010), 两者相与0的时候,led点亮// 0010为灯的位
else ,两者相与为1的时候,按键为高电平,没有按下,led熄灭。
fsp_err_t R_IOPORT_PortRead ( ioport_ctrl_t *const p_ctrl,
bsp_io_port_t port,
ioport_size_t * p_port_value
)
说明:
Reads the value on an IO port. Implements ioport_api_t::portRead.
The specified port will be read, and the levels for all the pins will be returned. Each bit in the returned value corresponds to a pin on the port. For example, bit 7 corresponds to pin 7, bit 6 to pin 6, and so on.
可以用R_IOPORT_PortRead()函数进行读取IO口电平状态,该函数是把一个PORT口的16个端口一起读取出来。
ioport_size_t p_port_value_port_104;
R_IOPORT_PortRead(&g_ioport_ctrl, BSP_IO_PORT_01, &p_port_value_port_104);
fsp_err_t R_IOPORT_PinRead ( ioport_ctrl_t *const p_ctrl,
bsp_io_port_pin_t pin,
bsp_io_level_t * p_pin_value
)
说明:
Reads the level on a pin. Implements ioport_api_t::pinRead.
故可以用R_IOPORT_PinRead()函数进行读取IO口电平状态,该函数只能读取一个端口的电平。
bsp_io_level_t p_port_value_port_104_1;
R_IOPORT_PinRead(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, &p_port_value_port_104_1);
由上述可以得知,R_IOPORT_PortRead完全可以替代R_IOPORT_PinRead。