347 lines
6.8 KiB
ReStructuredText
347 lines
6.8 KiB
ReStructuredText
GPIO
|
||
=============
|
||
|
||
Macros
|
||
------------
|
||
|
||
gpio pin
|
||
^^^^^^^^^^
|
||
|
||
参考 `bflb_gpio.h` 文件,不详细列出。
|
||
|
||
.. warning:: 相同系列芯片引脚数会有区别,注意区分
|
||
|
||
gpio mode
|
||
^^^^^^^^^^
|
||
|
||
gpio 模式可以配置成输入、输出、模拟、复用。
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
#define GPIO_INPUT (0 << GPIO_MODE_SHIFT) /* Input Enable */
|
||
#define GPIO_OUTPUT (1 << GPIO_MODE_SHIFT) /* Output Enable */
|
||
#define GPIO_ANALOG (2 << GPIO_MODE_SHIFT) /* Analog Enable */
|
||
#define GPIO_ALTERNATE (3 << GPIO_MODE_SHIFT) /* Alternate Enable */
|
||
|
||
gpio function
|
||
^^^^^^^^^^^^^^^
|
||
|
||
参考 `bflb_gpio.h` 文件,不详细列出。
|
||
|
||
gpio pupd
|
||
^^^^^^^^^^^^^^^
|
||
|
||
gpio 上下拉可以选择上拉、下拉、浮空。
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
#define GPIO_FLOAT (0 << GPIO_PUPD_SHIFT) /* No pull-up, pull-down */
|
||
#define GPIO_PULLUP (1 << GPIO_PUPD_SHIFT) /* Pull-up */
|
||
#define GPIO_PULLDOWN (2 << GPIO_PUPD_SHIFT) /* Pull-down */
|
||
|
||
gpio smt
|
||
^^^^^^^^^^^^^^^
|
||
|
||
gpio 滤波开关。
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
#define GPIO_SMT_DIS (0 << GPIO_SMT_SHIFT)
|
||
#define GPIO_SMT_EN (1 << GPIO_SMT_SHIFT)
|
||
|
||
gpio drive
|
||
^^^^^^^^^^^^^^^
|
||
|
||
gpio 输出能力选择。
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
#define GPIO_DRV_0 (0 << GPIO_DRV_SHIFT)
|
||
#define GPIO_DRV_1 (1 << GPIO_DRV_SHIFT)
|
||
#define GPIO_DRV_2 (2 << GPIO_DRV_SHIFT)
|
||
#define GPIO_DRV_3 (3 << GPIO_DRV_SHIFT)
|
||
|
||
gpio int trig mode
|
||
^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
gpio 外部中断触发模式。
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
#define GPIO_INT_TRIG_MODE_SYNC_FALLING_EDGE 0
|
||
#define GPIO_INT_TRIG_MODE_SYNC_RISING_EDGE 1
|
||
#define GPIO_INT_TRIG_MODE_SYNC_LOW_LEVEL 2
|
||
#define GPIO_INT_TRIG_MODE_SYNC_HIGH_LEVEL 3
|
||
#if defined(BL702)
|
||
#define GPIO_INT_TRIG_MODE_ASYNC_FALLING_EDGE 4
|
||
#define GPIO_INT_TRIG_MODE_ASYNC_RISING_EDGE 5
|
||
#define GPIO_INT_TRIG_MODE_ASYNC_LOW_LEVEL 6
|
||
#define GPIO_INT_TRIG_MODE_ASYNC_HIGH_LEVEL 7
|
||
#else
|
||
#define GPIO_INT_TRIG_MODE_SYNC_FALLING_RISING_EDGE 4
|
||
#define GPIO_INT_TRIG_MODE_ASYNC_FALLING_EDGE 8
|
||
#define GPIO_INT_TRIG_MODE_ASYNC_RISING_EDGE 9
|
||
#define GPIO_INT_TRIG_MODE_ASYNC_LOW_LEVEL 10
|
||
#define GPIO_INT_TRIG_MODE_ASYNC_HIGH_LEVEL 11
|
||
#endif
|
||
|
||
.. warning:: 602、702 不支持双边沿
|
||
|
||
gpio uart function
|
||
^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
博流系列芯片,每个 gpio 可以选择到 UART 的任意一个功能。
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
#define GPIO_UART_FUNC_UART0_RTS 0
|
||
#define GPIO_UART_FUNC_UART0_CTS 1
|
||
#define GPIO_UART_FUNC_UART0_TX 2
|
||
#define GPIO_UART_FUNC_UART0_RX 3
|
||
#define GPIO_UART_FUNC_UART1_RTS 4
|
||
#define GPIO_UART_FUNC_UART1_CTS 5
|
||
#define GPIO_UART_FUNC_UART1_TX 6
|
||
#define GPIO_UART_FUNC_UART1_RX 7
|
||
#if defined(BL808) || defined(BL606P)
|
||
#define GPIO_UART_FUNC_UART2_RTS 8
|
||
#define GPIO_UART_FUNC_UART2_CTS 9
|
||
#define GPIO_UART_FUNC_UART2_TX 10
|
||
#define GPIO_UART_FUNC_UART2_RX 11
|
||
#endif
|
||
|
||
Structs
|
||
------------
|
||
|
||
无
|
||
|
||
Functions
|
||
------------
|
||
|
||
bflb_gpio_init
|
||
^^^^^^^^^^^^^^^^^^^^
|
||
|
||
说明: 初始化 gpio。如果使用到 UART 功能,需要使用 `bflb_gpio_uart_init` 替代。
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
void bflb_gpio_init(struct bflb_device_s *dev, uint8_t pin, uint32_t cfgset);
|
||
|
||
.. list-table::
|
||
:widths: 10 10
|
||
:header-rows: 1
|
||
|
||
* - parameter
|
||
- description
|
||
* - dev
|
||
- 设备句柄
|
||
* - pin
|
||
- gpio pin
|
||
* - cfgset
|
||
- gpio 配置项:gpio mode、gpio function、gpio pupd、gpio smt、gpio drive,多个配置需要使用 | 连接
|
||
|
||
bflb_gpio_deinit
|
||
^^^^^^^^^^^^^^^^^^^^
|
||
|
||
说明: 反初始化 gpio,默认为输入浮空状态
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
void bflb_gpio_deinit(struct bflb_device_s *dev, uint8_t pin);
|
||
|
||
.. list-table::
|
||
:widths: 10 10
|
||
:header-rows: 1
|
||
|
||
* - parameter
|
||
- description
|
||
* - dev
|
||
- 设备句柄
|
||
* - pin
|
||
- gpio pin
|
||
|
||
bflb_gpio_set
|
||
^^^^^^^^^^^^^^^^^^^^
|
||
|
||
说明: gpio 输出高电平
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
void bflb_gpio_set(struct bflb_device_s *dev, uint8_t pin);
|
||
|
||
.. list-table::
|
||
:widths: 10 10
|
||
:header-rows: 1
|
||
|
||
* - parameter
|
||
- description
|
||
* - dev
|
||
- 设备句柄
|
||
* - pin
|
||
- gpio pin
|
||
|
||
bflb_gpio_reset
|
||
^^^^^^^^^^^^^^^^^^^^
|
||
|
||
说明: gpio 输出低电平
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
void bflb_gpio_reset(struct bflb_device_s *dev, uint8_t pin);
|
||
|
||
.. list-table::
|
||
:widths: 10 10
|
||
:header-rows: 1
|
||
|
||
* - parameter
|
||
- description
|
||
* - dev
|
||
- 设备句柄
|
||
* - pin
|
||
- gpio pin
|
||
|
||
bflb_gpio_read
|
||
^^^^^^^^^^^^^^^^^^^^
|
||
|
||
说明: 读取 gpio 电平
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
bool bflb_gpio_read(struct bflb_device_s *dev, uint8_t pin);
|
||
|
||
.. list-table::
|
||
:widths: 10 10
|
||
:header-rows: 1
|
||
|
||
* - parameter
|
||
- description
|
||
* - dev
|
||
- 设备句柄
|
||
* - pin
|
||
- gpio pin
|
||
* - return
|
||
- true 为 高电平,false 为低电平
|
||
|
||
bflb_gpio_int_init
|
||
^^^^^^^^^^^^^^^^^^^^
|
||
|
||
说明: gpio 外部中断初始化
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
void bflb_gpio_int_init(struct bflb_device_s *dev, uint8_t pin, uint8_t trig_mode);
|
||
|
||
.. list-table::
|
||
:widths: 10 10
|
||
:header-rows: 1
|
||
|
||
* - parameter
|
||
- description
|
||
* - dev
|
||
- 设备句柄
|
||
* - pin
|
||
- gpio pin
|
||
* - trig_mode
|
||
- 中断触发模式
|
||
|
||
bflb_gpio_int_mask
|
||
^^^^^^^^^^^^^^^^^^^^
|
||
|
||
说明: gpio 外部中断屏蔽开关
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
void bflb_gpio_int_mask(struct bflb_device_s *dev, uint8_t pin, bool mask);
|
||
|
||
.. list-table::
|
||
:widths: 10 10
|
||
:header-rows: 1
|
||
|
||
* - parameter
|
||
- description
|
||
* - dev
|
||
- 设备句柄
|
||
* - pin
|
||
- gpio pin
|
||
* - mask
|
||
- 是否屏蔽中断
|
||
|
||
bflb_gpio_get_intstatus
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
说明: 获取 gpio 外部中断是否触发的标志
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
bool bflb_gpio_get_intstatus(struct bflb_device_s *dev, uint8_t pin);
|
||
|
||
.. list-table::
|
||
:widths: 10 10
|
||
:header-rows: 1
|
||
|
||
* - parameter
|
||
- description
|
||
* - dev
|
||
- 设备句柄
|
||
* - pin
|
||
- gpio pin
|
||
* - return
|
||
- 为 true 表示触发
|
||
|
||
bflb_gpio_int_clear
|
||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
说明: 清除 gpio 中断标志
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
void bflb_gpio_int_clear(struct bflb_device_s *dev, uint8_t pin);
|
||
|
||
.. list-table::
|
||
:widths: 10 10
|
||
:header-rows: 1
|
||
|
||
* - parameter
|
||
- description
|
||
* - dev
|
||
- 设备句柄
|
||
* - pin
|
||
- gpio pin
|
||
|
||
bflb_gpio_uart_init
|
||
^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
说明: gpio 配置成 uart 的某一个功能。
|
||
|
||
.. code-block:: c
|
||
:linenos:
|
||
|
||
void bflb_gpio_uart_init(struct bflb_device_s *dev, uint8_t pin, uint8_t uart_func);
|
||
|
||
.. list-table::
|
||
:widths: 10 10
|
||
:header-rows: 1
|
||
|
||
* - parameter
|
||
- description
|
||
* - dev
|
||
- 设备句柄
|
||
* - pin
|
||
- gpio pin
|
||
* - uart_func
|
||
- uart 具体某一个功能
|