mirror of
https://github.com/Fishwaldo/bl_mcu_sdk.git
synced 2025-07-09 14:28:37 +00:00
37 lines
1.9 KiB
ReStructuredText
37 lines
1.9 KiB
ReStructuredText
UART 引脚映射详解
|
||
===============================
|
||
|
||
博流系列芯片每个 pin 都可以配置成 UART 任意一个功能,这种灵活的配置就会出现一些坑,比如多个 pin 配成了一个 uart 功能。
|
||
下面介绍下如何正确的理解 `每个 pin 都可以配置成 UART 任意一个功能` 并防止踩坑。最后讲下 ``bflb_gpio_uart_init`` 函数的实现。
|
||
|
||
|
||
UART SIG
|
||
-------------------
|
||
|
||
在博流系列芯片中,有个 `UART SIG` 的概念, 每个 SIG 对应到 UART 所有功能,功能类似于 8选1 选择器或者 12 选1 选择器。并且每个 SIG 都有一个默认的 UART 功能,如图所示:
|
||
|
||
.. figure:: img/uart_sig.png
|
||
:alt:
|
||
|
||
|
||
2 个 pin 选了一个 SIG
|
||
^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
每个 GPIO 对应一个 SIG, 对应关系跟芯片相关,比如 BL602/BL702 是 mod 8 的关系,而 BL616/BL808 是 mod 12 的关系,这个时候就会产生一个问题, **存在重复的可能性**,
|
||
**假设现在是 mod 8 的关系,则 GPIO0 跟 GPIO8 都对应 SIG0,如果 GPIO0 配置了 UART 一个功能,则不能再使用 GPIO8,否则会出现两个 GPIO 共用一个功能的情况**。
|
||
|
||
|
||
2 个 SIG 选了一个 UART 功能
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
为了方便软件,代码中将默认功能全部改成了 `0xF`,所有 SIG 都指向一个没有作用的功能。为什么这么做?
|
||
|
||
假设 GPIO2 默认使用 UART0 TX,这个时候我想使用 GPIO6 作为 UART0 TX,当我软件中配置 GPIO6 为 UART0 TX 以后,请问,GPIO2 是什么功能?没错,还是 UART0 TX,这个时候就是有问题的。
|
||
|
||
bflb_gpio_uart_init
|
||
------------------------
|
||
|
||
针对以上两个问题,出现了 ``bflb_gpio_uart_init``。该函数的作用是避免了 `2 个 SIG 选了一个 UART 功能` ,如果出现了,则后配置的覆盖前面的。
|
||
而对于 `2 个 pin 选了一个 SIG` 则是无法靠软件避免的,只能人为的避免。
|
||
|
||
|