[doc] update dma and rst style in hardware connection

This commit is contained in:
jzlv 2021-11-10 16:48:29 +08:00
parent c3a7fc5254
commit 1ad8786877
158 changed files with 2871 additions and 1182 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@ -21,10 +21,12 @@ DMA 设备结构体定义
struct device parent; struct device parent;
uint8_t id; uint8_t id;
uint8_t ch; uint8_t ch;
uint8_t direction;
uint8_t transfer_mode; uint8_t transfer_mode;
uint8_t direction;
uint32_t src_req; uint32_t src_req;
uint32_t dst_req; uint32_t dst_req;
uint8_t src_addr_inc;
uint8_t dst_addr_inc;
uint8_t src_burst_size; uint8_t src_burst_size;
uint8_t dst_burst_size; uint8_t dst_burst_size;
uint8_t src_width; uint8_t src_width;
@ -35,16 +37,25 @@ DMA 设备结构体定义
- **parent** 继承父类属性 - **parent** 继承父类属性
- **id** DMA id号默认0当前只有一个DMA - **id** DMA id号默认0当前只有一个DMA
- **ch** 通道号 - **ch** 通道号
- **direction** 传输方向
- **transfer_mode** 传输模式 - **transfer_mode** 传输模式
- **direction** 传输方向
- **src_req** 源请求 - **src_req** 源请求
- **dst_req** 目标请求 - **dst_req** 目标请求
- **src_addr_inc** 源地址自增
- **dst_addr_inc** 目标地址自增
- **src_burst_size** 源突发字节数 - **src_burst_size** 源突发字节数
- **dst_burst_size** 目标突发字节数 - **dst_burst_size** 目标突发字节数
- **src_width** 源传输位宽 - **src_width** 源传输位宽
- **dst_width** 目标传输位宽 - **dst_width** 目标传输位宽
- **lli_cfg** 用来存储dma通道的一些信息用户不用管 - **lli_cfg** 用来存储dma通道的一些信息用户不用管
``transfer_mode`` 提供以下类型
.. code-block:: C
#define DMA_LLI_ONCE_MODE 0
#define DMA_LLI_CYCLE_MODE 1
``direction`` 提供以下类型 ``direction`` 提供以下类型
.. code-block:: C .. code-block:: C
@ -56,13 +67,6 @@ DMA 设备结构体定义
DMA_PERIPH_TO_PERIPH, /*!< DMA transfer tyep:peripheral to peripheral */ DMA_PERIPH_TO_PERIPH, /*!< DMA transfer tyep:peripheral to peripheral */
}dma_transfer_dir_type; }dma_transfer_dir_type;
``transfer_mode`` 提供以下类型
.. code-block:: C
#define DMA_LLI_ONCE_MODE 0
#define DMA_LLI_CYCLE_MODE 1
``src_req`` 提供以下类型 ``src_req`` 提供以下类型
.. code-block:: C .. code-block:: C
@ -115,6 +119,20 @@ DMA 设备结构体定义
#define DMA_REQUEST_USB_EP6 0x0000001E /*!< DMA request peripheral:USB EP6*/ #define DMA_REQUEST_USB_EP6 0x0000001E /*!< DMA request peripheral:USB EP6*/
#define DMA_REQUEST_USB_EP7 0x0000001F /*!< DMA request peripheral:USB EP7 */ #define DMA_REQUEST_USB_EP7 0x0000001F /*!< DMA request peripheral:USB EP7 */
``src_addr_inc`` 提供以下类型
.. code-block:: C
#define DMA_ADDR_INCREMENT_DISABLE 0 /*!< Addr increment mode disable */
#define DMA_ADDR_INCREMENT_ENABLE 1 /*!< Addr increment mode enable */
``dst_addr_inc`` 提供以下类型
.. code-block:: C
#define DMA_ADDR_INCREMENT_DISABLE 0 /*!< Addr increment mode disable */
#define DMA_ADDR_INCREMENT_ENABLE 1 /*!< Addr increment mode enable */
``src_burst_size`` 提供以下类型 ``src_burst_size`` 提供以下类型
.. code-block:: C .. code-block:: C
@ -162,13 +180,17 @@ DMA 设备参数配置表
#define DMA0_CH0_CONFIG \ #define DMA0_CH0_CONFIG \
{ \ { \
.id = 0, \ .id = 0, \
.ch = 0,\ .ch = 7, \
.direction = DMA_MEMORY_TO_MEMORY, \ .direction = DMA_MEMORY_TO_MEMORY, \
.transfer_mode = DMA_LLI_ONCE_MODE, \ .transfer_mode = DMA_LLI_ONCE_MODE, \
.src_req = DMA_REQUEST_NONE, \ .src_req = DMA_REQUEST_NONE, \
.dst_req = DMA_REQUEST_NONE, \ .dst_req = DMA_REQUEST_NONE, \
.src_width = DMA_TRANSFER_WIDTH_32BIT , \ .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.dst_width = DMA_TRANSFER_WIDTH_32BIT , \ .dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.src_burst_size = DMA_BURST_1BYTE, \
.dst_burst_size = DMA_BURST_1BYTE, \
.src_width = DMA_TRANSFER_WIDTH_8BIT, \
.dst_width = DMA_TRANSFER_WIDTH_8BIT, \
} }
#endif #endif
#endif #endif

View File

@ -6,8 +6,18 @@
examples 的目录结构 examples 的目录结构
------------------------ ------------------------
在 ``bl_mcu_sdk/examples`` 目录下通常存在两层子目录,第一层通常为同一类外设相关的 case 集,一般使用外设名称,第二层通常为该外设具体的某一种测试例程,该目录下通常还包含一个 ``CMakeList.txt`` 以及该 case 相关的源码 在 ``bl_mcu_sdk/examples`` 目录下通常存在两层子目录,第一层通常为同一类外设相关的 case 集,一般使用外设名称,第二层通常为该外设具体的某一种测试例程,该目录下通常还包含一个 ``CMakeList.txt`` 以及该 case 相关的源码
可供用户使用的 cmake 变量如下:
- mains:main 函数入口
- TARGET_REQUIRED_SRCS:没有编译成 lib 的外部 c 文件
- TARGET_REQUIRED_PRIVATE_INCLUDE:外部 c 文件需要的头文件路径
- TARGET_REQUIRED_LIBS:目标需要的 lib 库名称,可以是 cmake 通过 generate_bin 生成的 target 或者外部导入的 lib 库
- TARGET_REQUIRED_PRIVATE_OPTIONS:私有 c flag
- LINKER_SCRIPT:重新定义链接脚本
- GLOBAL_C_FLAGS:全局 c flag
- GLOBAL_LD_FLAGS:全局 ld flag
添加单个源文件工程 添加单个源文件工程
------------------------ ------------------------
@ -131,7 +141,7 @@ examples 的目录结构
.. code-block:: bash .. code-block:: bash
:linenos: :linenos:
make BOARD=bl706_iot APP=gpio_case SUPPORT_FREERTOS=y make BOARD=bl706_iot APP=gpio_case
添加新工程并设置私有编译选项gcc option 添加新工程并设置私有编译选项gcc option
------------------------------------------- -------------------------------------------

View File

@ -11,17 +11,22 @@ FatFs 文件系统读写(SD 卡)
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_AVB 开发板,连接方式如下 本 demo 基于 BL706_AVB 开发板,连接方式如下
:: .. list-table::
:widths: 30 30
GPIO function GPIO pin :header-rows: 1
----------------------------------
SD_CS <--> GPIO10
SPI_SCK <--> GPIO19
SPI_MISO <--> GPIO20
SPI_MOSI <--> GPIO21
* - GPIO function
- GPIO pin
* - SD_CS
- GPIO10
* - SPI_SCK
- GPIO19
* - SPI_MISO
- GPIO20
* - SPI_MOSI
- GPIO21
软件实现 软件实现
----------------------------- -----------------------------
@ -88,6 +93,10 @@ FatFs 文件系统读写(SD 卡)
.transfer_mode = DMA_LLI_ONCE_MODE, \ .transfer_mode = DMA_LLI_ONCE_MODE, \
.src_req = DMA_REQUEST_NONE, \ .src_req = DMA_REQUEST_NONE, \
.dst_req = DMA_REQUEST_SPI0_TX, \ .dst_req = DMA_REQUEST_SPI0_TX, \
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \
.src_burst_size = DMA_BURST_1BYTE, \
.dst_burst_size = DMA_BURST_1BYTE, \
.src_width = DMA_TRANSFER_WIDTH_8BIT, \ .src_width = DMA_TRANSFER_WIDTH_8BIT, \
.dst_width = DMA_TRANSFER_WIDTH_8BIT, \ .dst_width = DMA_TRANSFER_WIDTH_8BIT, \
} }
@ -104,6 +113,10 @@ FatFs 文件系统读写(SD 卡)
.transfer_mode = DMA_LLI_ONCE_MODE, \ .transfer_mode = DMA_LLI_ONCE_MODE, \
.src_req = DMA_REQUEST_SPI0_RX, \ .src_req = DMA_REQUEST_SPI0_RX, \
.dst_req = DMA_REQUEST_NONE, \ .dst_req = DMA_REQUEST_NONE, \
.src_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \
.dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.src_burst_size = DMA_BURST_1BYTE, \
.dst_burst_size = DMA_BURST_1BYTE, \
.src_width = DMA_TRANSFER_WIDTH_8BIT, \ .src_width = DMA_TRANSFER_WIDTH_8BIT, \
.dst_width = DMA_TRANSFER_WIDTH_8BIT, \ .dst_width = DMA_TRANSFER_WIDTH_8BIT, \
} }

View File

@ -12,15 +12,18 @@ Shell 命令行调试
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_IOT 开发板,连接方式如下 本 demo 基于 BL706_IOT 开发板,连接方式如下
:: .. list-table::
:widths: 30 30
GPIO function GPIO pin :header-rows: 1
----------------------------------
UART0_TX <--> GPIO14
UART0_RX <--> GPIO15
* - GPIO function
- GPIO pin
* - UART0_TX
- GPIO14
* - UART0_RX
- GPIO15
软件实现 软件实现
------------------------- -------------------------

View File

@ -25,27 +25,44 @@ BL706 AVB + GC0308摄像头模块 + windows 相机
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_AVB 开发板,连接方式如下 本 demo 基于 BL706_AVB 开发板,连接方式如下
:: .. list-table::
:widths: 30 30
:header-rows: 1
GPIO function GPIO pin * - GPIO function
---------------------------------- - GPIO pin
CAM <--> GPIO0 * - CAM
CAM <--> GPIO1 - GPIO0
CAM <--> GPIO2 * - CAM
CAM <--> GPIO3 - GPIO1
CAM <--> GPIO4 * - CAM
CAM <--> GPIO5 - GPIO2
CAM <--> GPIO6 * - CAM
USB_DP <--> GPIO7 - GPIO3
USB_DM <--> GPIO8 * - CAM
CLK_OUT <--> GPIO9 - GPIO4
I2C_SCL <--> GPIO11 * - CAM
I2C_SDA <--> GPIO16 - GPIO5
CAM <--> GPIO29 * - CAM
CAM <--> GPIO30 - GPIO6
CAM <--> GPIO31 * - USB_DP
- GPIO7
* - USB_DM
- GPIO8
* - CLK_OUT
- GPIO9
* - I2C_SCL
- GPIO11
* - I2C_SDA
- GPIO16
* - CAM
- GPIO29
* - CAM
- GPIO30
* - CAM
- GPIO31
.. note:: 注意 706 AVB FUN1 的跳冒不要接,默认连接到摄像头引脚,如果接了则连接到了 i2s codec .. note:: 注意 706 AVB FUN1 的跳冒不要接,默认连接到摄像头引脚,如果接了则连接到了 i2s codec
@ -116,6 +133,10 @@ BL706 AVB + GC0308摄像头模块 + windows 相机
.transfer_mode = DMA_LLI_ONCE_MODE, \ .transfer_mode = DMA_LLI_ONCE_MODE, \
.src_req = DMA_REQUEST_NONE, \ .src_req = DMA_REQUEST_NONE, \
.dst_req = DMA_REQUEST_UART1_TX, \ .dst_req = DMA_REQUEST_UART1_TX, \
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \
.src_burst_size = DMA_BURST_1BYTE, \
.dst_burst_size = DMA_BURST_1BYTE, \
.src_width = DMA_TRANSFER_WIDTH_8BIT, \ .src_width = DMA_TRANSFER_WIDTH_8BIT, \
.dst_width = DMA_TRANSFER_WIDTH_8BIT, \ .dst_width = DMA_TRANSFER_WIDTH_8BIT, \
} }
@ -128,7 +149,16 @@ BL706 AVB + GC0308摄像头模块 + windows 相机
.. code-block:: C .. code-block:: C
:linenos: :linenos:
DMA_DEV(dma_ch2)->direction = DMA_MEMORY_TO_PERIPH;
DMA_DEV(dma_ch2)->transfer_mode = DMA_LLI_ONCE_MODE;
DMA_DEV(dma_ch2)->src_req = DMA_REQUEST_NONE;
DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_USB_EP1; DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_USB_EP1;
DMA_DEV(dma_ch2)->src_addr_inc = DMA_ADDR_INCREMENT_ENABLE;
DMA_DEV(dma_ch2)->dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE;
DMA_DEV(dma_ch2)->src_burst_size = DMA_BURST_16BYTE;
DMA_DEV(dma_ch2)->dst_burst_size = DMA_BURST_1BYTE;
DMA_DEV(dma_ch2)->src_width = DMA_TRANSFER_WIDTH_8BIT;
DMA_DEV(dma_ch2)->dst_width = DMA_TRANSFER_WIDTH_8BIT;
device_open(dma_ch2, 0); device_open(dma_ch2, 0);
.. code-block:: C .. code-block:: C

View File

@ -5,13 +5,16 @@ ADC - 按键检测电压
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_AVB 开发板: 本 demo 基于 BL706_AVB 开发板,连接方式如下:
:: .. list-table::
:widths: 30 30
:header-rows: 1
GPIO function GPIO pin * - GPIO function
---------------------------------- - GPIO pin
ADC CH8 <--> GPIO18 * - ADC CH8
- GPIO18
**分压电路:** **分压电路:**

View File

@ -27,6 +27,10 @@ DMA - RAM间数据搬运
.transfer_mode = DMA_LLI_ONCE_MODE, \ .transfer_mode = DMA_LLI_ONCE_MODE, \
.src_req = DMA_REQUEST_NONE, \ .src_req = DMA_REQUEST_NONE, \
.dst_req = DMA_REQUEST_NONE, \ .dst_req = DMA_REQUEST_NONE, \
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.src_burst_size = DMA_BURST_4BYTE, \
.dst_burst_size = DMA_BURST_4BYTE, \
.src_width = DMA_TRANSFER_WIDTH_32BIT, \ .src_width = DMA_TRANSFER_WIDTH_32BIT, \
.dst_width = DMA_TRANSFER_WIDTH_32BIT, \ .dst_width = DMA_TRANSFER_WIDTH_32BIT, \
} }
@ -38,26 +42,35 @@ DMA - RAM间数据搬运
.. code-block:: C .. code-block:: C
:linenos: :linenos:
dma_register(DMA0_CH0_INDEX, "DMA"); dma_register(DMA0_CH0_INDEX, "dma_ch0");
struct device *dma = device_find("DMA"); struct device *dma_ch0 = device_find("dma_ch0");
if (dma) if (dma_ch0) {
{ DMA_DEV(dma_ch0)->direction = DMA_MEMORY_TO_MEMORY;
device_open(dma, 0); DMA_DEV(dma_ch0)->transfer_mode = DMA_LLI_ONCE_MODE;
device_set_callback(dma, dma_transfer_done); DMA_DEV(dma_ch0)->src_req = DMA_REQUEST_NONE;
device_control(dma, DEVICE_CTRL_SET_INT, NULL); DMA_DEV(dma_ch0)->dst_req = DMA_REQUEST_NONE;
DMA_DEV(dma_ch0)->src_addr_inc = DMA_ADDR_INCREMENT_ENABLE;
DMA_DEV(dma_ch0)->dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE;
DMA_DEV(dma_ch0)->src_burst_size = DMA_BURST_4BYTE;
DMA_DEV(dma_ch0)->dst_burst_size = DMA_BURST_4BYTE;
DMA_DEV(dma_ch0)->src_width = DMA_TRANSFER_WIDTH_32BIT;
DMA_DEV(dma_ch0)->dst_width = DMA_TRANSFER_WIDTH_32BIT;
device_open(dma_ch0, 0);
device_set_callback(dma_ch0, dma_transfer_done);
device_control(dma_ch0, DEVICE_CTRL_SET_INT, NULL);
} }
- 首先调用 ``dma_register`` 函数注册 ``DMA`` 设备的一个通道,当前注册 ``DMA_CH0`` - 首先调用 ``dma_register`` 函数注册 ``DMA`` 设备的一个通道,当前注册 ``DMA_CH0``
- 然后通过 ``find`` 函数找到设备对应的句柄,保存于 ``dma`` 句柄中 - 然后通过 ``find`` 函数找到设备对应的句柄,保存于 ``dma_ch0`` 句柄中
- 最后使用 ``device_open`` 以默认模式来打开 ``dma`` 设备,调用 ``device_set_callback`` 注册一个dma通道0中断回调函数调用 ``device_control`` 开启dma传输完成中断 - 最后使用 ``device_open`` 以默认模式来打开 ``dma_ch0`` 设备,调用 ``device_set_callback`` 注册一个 dma 通道0中断回调函数调用 ``device_control`` 开启dma传输完成中断
.. code-block:: C .. code-block:: C
:linenos: :linenos:
dma_reload(dma,(uint32_t)dma_src_buffer,(uint32_t)dma_dst_buffer,8000); dma_reload(dma_ch0,(uint32_t)dma_src_buffer,(uint32_t)dma_dst_buffer,8000);
dma_channel_start(dma); dma_channel_start(dma_ch0);
- 调用 ``dma_reload`` 函数对 dma 通道0的配置进行补充``DMA0_CH0_CONFIG`` 中已经补充了一部分配置,这边主要补充源数据地址和目标数据地址以及传输总长度 - 调用 ``dma_reload`` 函数对 dma 通道0的配置进行补充``DMA0_CH0_CONFIG`` 中已经补充了一部分配置,这边主要补充源数据地址和目标数据地址以及传输总长度
- 调用 ``dma_channel_start`` 开启 dma 传输 - 调用 ``dma_channel_start`` 开启 dma 传输

View File

@ -6,17 +6,22 @@ GPIO 输出 - 流水灯
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_IOT 开发板,连接方式如下 本 demo 基于 BL706_IOT 开发板,连接方式如下
:: .. list-table::
:widths: 30 30
GPIO function GPIO pin :header-rows: 1
----------------------------------
D0 <--> GPIO22
D1 <--> GPIO29
D2 <--> GPIO30
D3 <--> GPIO31
* - GPIO function
- GPIO pin
* - D0
- GPIO22
* - D1
- GPIO29
* - D2
- GPIO30
* - D3
- GPIO31
.. figure:: img/blink_breath_sch.png .. figure:: img/blink_breath_sch.png
:alt: :alt:

View File

@ -6,13 +6,16 @@ GPIO 中断 - 按键检测
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于BL706_IOT开发板自行添加按键电路连接方式如下 本 demo 基于BL706_IOT开发板自行添加按键电路连接方式如下
:: .. list-table::
:widths: 30 30
:header-rows: 1
GPIO function GPIO pin * - GPIO function
---------------------------------- - GPIO pin
SW1 <--> GPIO11 * - SW1
- GPIO11
.. figure:: img/button_sch.png .. figure:: img/button_sch.png
:alt: :alt:

View File

@ -4,15 +4,18 @@ I2C - AT24CXX 读写
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_IOT 开发板,自行添加 AT24CXX 电路,连接方式如下 本 demo 基于 BL706_IOT 开发板,自行添加 AT24CXX 电路,连接方式如下
:: .. list-table::
:widths: 30 30
GPIO function GPIO pin :header-rows: 1
----------------------------------
I2C_SCL <--> GPIO11
I2C_SDA <--> GPIO16
* - GPIO function
- GPIO pin
* - I2C_SCL
- GPIO11
* - I2C_SDA
- GPIO16
软件实现 软件实现
----------------------------- -----------------------------

View File

@ -33,6 +33,12 @@ I2S - 使用DMIC配合audio cube实现在线录音
* - UART0_RX * - UART0_RX
- GPIO14 - GPIO14
如果使用的是BL706_AVB板请确保FUN1 FUN2两个跳帽处于短接的状态,如下图所示
.. figure:: img/tiaomao.png
:alt:
本 demo 用到的内部外设资源如下: 本 demo 用到的内部外设资源如下:
.. list-table:: .. list-table::
@ -59,21 +65,20 @@ I2S - 使用DMIC配合audio cube实现在线录音
本文档不再详细功能实现的细节,仅概述功能过程,可以参考 I2S 与 UART 相关文档。 本文档不再详细功能实现的细节,仅概述功能过程,可以参考 I2S 与 UART 相关文档。
配置 ``I2S, I2C, CLK_OUT(MCLK)`` 相关复用引脚,见 ``bsp/board/bl706_avb/pinmux_config.h`` 中的宏定义选项: 配置 ``I2S, I2C, CLK_OUT(MCLK)`` 相关复用引脚,见 ``bsp/board/bl706_iot/pinmux_config.h`` 中的宏定义选项:
.. code-block:: C .. code-block:: C
:linenos: :linenos:
#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO3_FUNC GPIO_FUN_I2S #define CONFIG_GPIO3_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO4_FUNC GPIO_FUN_I2S #define CONFIG_GPIO4_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S #define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C #define CONFIG_GPIO11_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO14_FUNC GPIO_FUN_UART0_TX #define CONFIG_GPIO14_FUNC GPIO_FUN_UART0_TX
#define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX #define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S
编译和烧录 编译和烧录
----------------------------- -----------------------------
@ -90,7 +95,7 @@ I2S - 使用DMIC配合audio cube实现在线录音
:linenos: :linenos:
$ cd <sdk_path>/bl_mcu_sdk $ cd <sdk_path>/bl_mcu_sdk
$ make BOARD=bl706_avb APP=audio_cube $ make BOARD=bl706_iot APP=audio_cube
- **烧录** - **烧录**
详见 :ref:`bl_dev_cube` 详见 :ref:`bl_dev_cube`

View File

@ -30,6 +30,12 @@ I2S - flash 内置音频播放
* - I2C_SDA * - I2C_SDA
- GPIO11 - GPIO11
如果使用的是BL706_AVB板请确保FUN1 FUN2两个跳帽处于短接的状态,如下图所示
.. figure:: img/tiaomao.png
:alt:
本 demo 用到的内部外设资源如下: 本 demo 用到的内部外设资源如下:
.. list-table:: .. list-table::
@ -59,13 +65,15 @@ I2S - flash 内置音频播放
.. code-block:: C .. code-block:: C
:linenos: :linenos:
#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO3_FUNC GPIO_FUN_I2S #define CONFIG_GPIO3_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO4_FUNC GPIO_FUN_I2S #define CONFIG_GPIO4_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO14_FUNC GPIO_FUN_UART0_TX
#define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S #define CONFIG_GPIO29_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S #define CONFIG_GPIO30_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
配置 ES8388 的参数,初始化 ES8388 ,其中会用到 I2C 外设,具体过程可见 ``bsp/bsp_common/es8388/es8388.c`` 配置 ES8388 的参数,初始化 ES8388 ,其中会用到 I2C 外设,具体过程可见 ``bsp/bsp_common/es8388/es8388.c``
@ -111,7 +119,7 @@ I2S 的配置与使能:
- 先调用 ``i2s_register`` 函数注册 ``I2S`` 设备 - 先调用 ``i2s_register`` 函数注册 ``I2S`` 设备
- 然后通过 ``find`` 函数找到设备对应的句柄,保存于 ``i2s`` 中 - 然后通过 ``find`` 函数找到设备对应的句柄,保存于 ``i2s`` 中
- 最后填写配置参数后,使用 ``device_open`` 来打开 ``I2S`` 设备 - 最后填写配置参数后,使用 ``device_open`` 来打开 ``I2S`` 设备
- 如果不填写配置参数,会默认使用 ``bsp/board/bl706_avb/peripheral_config.h`` 中预设的参数 - 如果不填写配置参数,会默认使用 ``bsp/board/bl706_iot/peripheral_config.h`` 中预设的参数
.. code-block:: C .. code-block:: C
:linenos: :linenos:
@ -144,8 +152,12 @@ DMA 的配置与使能
DMA_DEV(dma_ch2)->transfer_mode = DMA_LLI_CYCLE_MODE; DMA_DEV(dma_ch2)->transfer_mode = DMA_LLI_CYCLE_MODE;
DMA_DEV(dma_ch2)->src_req = DMA_REQUEST_NONE; DMA_DEV(dma_ch2)->src_req = DMA_REQUEST_NONE;
DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_I2S_TX; DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_I2S_TX;
DMA_DEV(dma_ch2)->src_addr_inc = DMA_ADDR_INCREMENT_ENABLE;
DMA_DEV(dma_ch2)->dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE;
DMA_DEV(dma_ch2)->src_width = DMA_TRANSFER_WIDTH_16BIT; DMA_DEV(dma_ch2)->src_width = DMA_TRANSFER_WIDTH_16BIT;
DMA_DEV(dma_ch2)->dst_width = DMA_TRANSFER_WIDTH_16BIT; DMA_DEV(dma_ch2)->dst_width = DMA_TRANSFER_WIDTH_16BIT;
DMA_DEV(dma_ch2)->src_burst_size = DMA_BURST_4BYTE;
DMA_DEV(dma_ch2)->dst_burst_size = DMA_BURST_4BYTE;
device_open(dma_ch2, 0); device_open(dma_ch2, 0);
/* connect i2s device and dma device */ /* connect i2s device and dma device */
@ -183,7 +195,7 @@ DMA 的配置与使能
:linenos: :linenos:
$ cd <sdk_path>/bl_mcu_sdk $ cd <sdk_path>/bl_mcu_sdk
$ make BOARD=bl706_avb APP=i2s_play_form_flash $ make BOARD=bl706_iot APP=i2s_play_form_flash
- **烧录** - **烧录**
详见 :ref:`bl_dev_cube` 详见 :ref:`bl_dev_cube`

View File

@ -30,6 +30,11 @@ I2S - 录音回环播放
* - I2C_SDA * - I2C_SDA
- GPIO11 - GPIO11
如果使用的是BL706_AVB板请确保FUN1 FUN2两个跳帽处于短接的状态,如下图所示
.. figure:: img/tiaomao.png
:alt:
- 本 demo 用到的内部外设资源如下: - 本 demo 用到的内部外设资源如下:
.. list-table:: .. list-table::
@ -56,18 +61,20 @@ I2S - 录音回环播放
- 软件代码见 ``examples/i2s/i2s_play_form_record`` - 软件代码见 ``examples/i2s/i2s_play_form_record``
- 配置 ``I2S, I2C, CLK_OUT(MCLK)`` 相关复用引脚,见 ``bsp/board/bl706_iot/pinmux_config.h`` 中的宏定义选项: 配置 ``I2S, I2C, CLK_OUT(MCLK)`` 相关复用引脚,见 ``bsp/board/bl706_iot/pinmux_config.h`` 中的宏定义选项:
.. code-block:: C .. code-block:: C
:linenos: :linenos:
#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO3_FUNC GPIO_FUN_I2S #define CONFIG_GPIO3_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO4_FUNC GPIO_FUN_I2S #define CONFIG_GPIO4_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO14_FUNC GPIO_FUN_UART0_TX
#define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S #define CONFIG_GPIO29_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S #define CONFIG_GPIO30_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
- 配置 ES8388 的参数,初始化 ES8388 ,其中会用到 I2C 外设,具体过程可见 ``bsp/bsp_common/es8388/es8388.c`` - 配置 ES8388 的参数,初始化 ES8388 ,其中会用到 I2C 外设,具体过程可见 ``bsp/bsp_common/es8388/es8388.c``
@ -115,7 +122,7 @@ I2S 的配置与使能:
- 先调用 ``i2s_register`` 函数注册 ``I2S`` 设备 - 先调用 ``i2s_register`` 函数注册 ``I2S`` 设备
- 然后通过 ``find`` 函数找到设备对应的句柄,保存于 ``i2s`` 中 - 然后通过 ``find`` 函数找到设备对应的句柄,保存于 ``i2s`` 中
- 最后填写配置参数后,使用 ``device_open`` 来打开 ``I2S`` 设备 - 最后填写配置参数后,使用 ``device_open`` 来打开 ``I2S`` 设备
- 如果不填写配置参数,会默认使用 ``bsp/board/bl706_avb/peripheral_config.h`` 中预设的参数 - 如果不填写配置参数,会默认使用 ``bsp/board/bl706_iot/peripheral_config.h`` 中预设的参数
.. code-block:: C .. code-block:: C
:linenos: :linenos:
@ -151,10 +158,12 @@ DMA 的配置与使能
DMA_DEV(dma_ch3)->transfer_mode = DMA_LLI_ONCE_MODE; DMA_DEV(dma_ch3)->transfer_mode = DMA_LLI_ONCE_MODE;
DMA_DEV(dma_ch3)->src_req = DMA_REQUEST_I2S_RX; DMA_DEV(dma_ch3)->src_req = DMA_REQUEST_I2S_RX;
DMA_DEV(dma_ch3)->dst_req = DMA_REQUEST_NONE; DMA_DEV(dma_ch3)->dst_req = DMA_REQUEST_NONE;
DMA_DEV(dma_ch3)->src_width = DMA_TRANSFER_WIDTH_32BIT; DMA_DEV(dma_ch3)->src_addr_inc = DMA_ADDR_INCREMENT_DISABLE;
DMA_DEV(dma_ch3)->dst_width = DMA_TRANSFER_WIDTH_32BIT; DMA_DEV(dma_ch3)->dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE;
DMA_DEV(dma_ch3)->src_burst_size = DMA_BURST_4BYTE; DMA_DEV(dma_ch3)->src_burst_size = DMA_BURST_4BYTE;
DMA_DEV(dma_ch3)->dst_burst_size = DMA_BURST_4BYTE; DMA_DEV(dma_ch3)->dst_burst_size = DMA_BURST_4BYTE;
DMA_DEV(dma_ch3)->src_width = DMA_TRANSFER_WIDTH_32BIT;
DMA_DEV(dma_ch3)->dst_width = DMA_TRANSFER_WIDTH_32BIT;
device_open(dma_ch3, 0); device_open(dma_ch3, 0);
/* connect i2s device and dma device */ /* connect i2s device and dma device */
@ -172,6 +181,8 @@ DMA 的配置与使能
DMA_DEV(dma_ch2)->transfer_mode = DMA_LLI_ONCE_MODE; DMA_DEV(dma_ch2)->transfer_mode = DMA_LLI_ONCE_MODE;
DMA_DEV(dma_ch2)->src_req = DMA_REQUEST_NONE; DMA_DEV(dma_ch2)->src_req = DMA_REQUEST_NONE;
DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_I2S_TX; DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_I2S_TX;
DMA_DEV(dma_ch2)->src_addr_inc = DMA_ADDR_INCREMENT_ENABLE;
DMA_DEV(dma_ch2)->dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE;
DMA_DEV(dma_ch2)->src_width = DMA_TRANSFER_WIDTH_32BIT; DMA_DEV(dma_ch2)->src_width = DMA_TRANSFER_WIDTH_32BIT;
DMA_DEV(dma_ch2)->dst_width = DMA_TRANSFER_WIDTH_32BIT; DMA_DEV(dma_ch2)->dst_width = DMA_TRANSFER_WIDTH_32BIT;
DMA_DEV(dma_ch2)->src_burst_size = DMA_BURST_4BYTE; DMA_DEV(dma_ch2)->src_burst_size = DMA_BURST_4BYTE;
@ -226,7 +237,7 @@ DMA 中断回调函数
:linenos: :linenos:
$ cd <sdk_path>/bl_mcu_sdk $ cd <sdk_path>/bl_mcu_sdk
$ make BOARD=bl706_avb APP=i2s_play_form_record $ make BOARD=bl706_iot APP=i2s_play_form_record
- **烧录** - **烧录**

View File

@ -6,13 +6,16 @@ PWM - 呼吸灯
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于BL706_IOT开发板连接方式如下 本 demo 基于BL706_IOT开发板连接方式如下
:: .. list-table::
:widths: 30 30
:header-rows: 1
GPIO function GPIO pin * - GPIO function
---------------------------------- - GPIO pin
PWM_CH2 <--> GPIO22 * - PWM_CH2
- GPIO22
.. figure:: img/blink_breath_sch.png .. figure:: img/blink_breath_sch.png
:alt: :alt:

View File

@ -42,16 +42,22 @@ PWM - 驱动步进电机
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于BL706_IOT开发板连接方式如下 本 demo 基于BL706_IOT开发板连接方式如下
:: .. list-table::
:widths: 30 30
:header-rows: 1
GPIO function GPIO pin * - GPIO function
---------------------------------- - GPIO pin
PWM_CH0 <--> GPIO10 * - PWM_CH0
PWM_CH1 <--> GPIO11 - GPIO10
PWM_CH2 <--> GPIO12 * - PWM_CH1
PWM_CH3 <--> GPIO3 - GPIO11
* - PWM_CH2
- GPIO12
* - PWM_CH3
- GPIO3
.. figure:: img/pwm_step_motor.png .. figure:: img/pwm_step_motor.png
:alt: :alt:

View File

@ -6,18 +6,24 @@ SPI - TFT LCD 显示
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_AVB 开发板,连接方式如下 本 demo 基于 BL706_AVB 开发板,连接方式如下
:: .. list-table::
:widths: 30 30
GPIO function GPIO pin :header-rows: 1
----------------------------------
LCD_CS <--> GPIO10
LCD_DC <--> GPIO22
SPI_SCK <--> GPIO19
SPI_MISO <--> GPIO20
SPI_MOSI <--> GPIO21
* - GPIO function
- GPIO pin
* - LCD_CS
- GPIO10
* - LCD_DC
- GPIO22
* - SPI_SCK
- GPIO19
* - SPI_MISO
- GPIO20
* - SPI_MOSI
- GPIO21
软件实现 软件实现
----------------------------- -----------------------------
@ -41,7 +47,7 @@ SPI - TFT LCD 显示
- 配置 ``SPI`` 设备复用引脚,见 ``bsp/board/bl706_avb/pinmux_config.h``,,如有改动,请自行修改 - 配置 ``SPI`` 设备复用引脚,见 ``bsp/board/bl706_avb/pinmux_config.h``,,如有改动,请自行修改
.. note:: 为适配 bl702_avb 硬件, SPI 的 MOSI 和 MISO 默认进行了调换,如果想要恢复默认,修改 ``drivers/bl702_driver/hal_drv/default_config/spi_config.h`` 中 ``SPI_SWAP_ENABLE`` 为 0 .. note:: 为适配 bl702_avb 硬件, SPI 的 MOSI 和 MISO 默认进行了调换,如果想要恢复默认,修改 ``bsp/board/bl706_avb/pinmux_config.h`` 中 ``pin_swap_enable`` 为 0
.. code-block:: C .. code-block:: C
:linenos: :linenos:

View File

@ -6,14 +6,18 @@ UART - 数据自收发
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_IOT 开发板,连接方式如下 本 demo 基于 BL706_IOT 开发板,连接方式如下
:: .. list-table::
:widths: 30 30
:header-rows: 1
GPIO function GPIO pin * - GPIO function
---------------------------------- - GPIO pin
UART0_TX <--> GPIO14 * - UART0_TX
UART0_RX <--> GPIO15 - GPIO14
* - UART0_RX
- GPIO15
软件实现 软件实现
----------------------------- -----------------------------

View File

@ -259,10 +259,12 @@
<span class="k">struct</span> <span class="nc">device</span> <span class="n">parent</span><span class="p">;</span> <span class="k">struct</span> <span class="nc">device</span> <span class="n">parent</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">id</span><span class="p">;</span> <span class="kt">uint8_t</span> <span class="n">id</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">ch</span><span class="p">;</span> <span class="kt">uint8_t</span> <span class="n">ch</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">direction</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">transfer_mode</span><span class="p">;</span> <span class="kt">uint8_t</span> <span class="n">transfer_mode</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">direction</span><span class="p">;</span>
<span class="kt">uint32_t</span> <span class="n">src_req</span><span class="p">;</span> <span class="kt">uint32_t</span> <span class="n">src_req</span><span class="p">;</span>
<span class="kt">uint32_t</span> <span class="n">dst_req</span><span class="p">;</span> <span class="kt">uint32_t</span> <span class="n">dst_req</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">src_addr_inc</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">dst_addr_inc</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">src_burst_size</span><span class="p">;</span> <span class="kt">uint8_t</span> <span class="n">src_burst_size</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">dst_burst_size</span><span class="p">;</span> <span class="kt">uint8_t</span> <span class="n">dst_burst_size</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">src_width</span><span class="p">;</span> <span class="kt">uint8_t</span> <span class="n">src_width</span><span class="p">;</span>
@ -275,16 +277,23 @@
<li><p><strong>parent</strong> 继承父类属性</p></li> <li><p><strong>parent</strong> 继承父类属性</p></li>
<li><p><strong>id</strong> DMA id号默认0当前只有一个DMA</p></li> <li><p><strong>id</strong> DMA id号默认0当前只有一个DMA</p></li>
<li><p><strong>ch</strong> 通道号</p></li> <li><p><strong>ch</strong> 通道号</p></li>
<li><p><strong>direction</strong> 传输方向</p></li>
<li><p><strong>transfer_mode</strong> 传输模式</p></li> <li><p><strong>transfer_mode</strong> 传输模式</p></li>
<li><p><strong>direction</strong> 传输方向</p></li>
<li><p><strong>src_req</strong> 源请求</p></li> <li><p><strong>src_req</strong> 源请求</p></li>
<li><p><strong>dst_req</strong> 目标请求</p></li> <li><p><strong>dst_req</strong> 目标请求</p></li>
<li><p><strong>src_addr_inc</strong> 源地址自增</p></li>
<li><p><strong>dst_addr_inc</strong> 目标地址自增</p></li>
<li><p><strong>src_burst_size</strong> 源突发字节数</p></li> <li><p><strong>src_burst_size</strong> 源突发字节数</p></li>
<li><p><strong>dst_burst_size</strong> 目标突发字节数</p></li> <li><p><strong>dst_burst_size</strong> 目标突发字节数</p></li>
<li><p><strong>src_width</strong> 源传输位宽</p></li> <li><p><strong>src_width</strong> 源传输位宽</p></li>
<li><p><strong>dst_width</strong> 目标传输位宽</p></li> <li><p><strong>dst_width</strong> 目标传输位宽</p></li>
<li><p><strong>lli_cfg</strong> 用来存储dma通道的一些信息用户不用管</p></li> <li><p><strong>lli_cfg</strong> 用来存储dma通道的一些信息用户不用管</p></li>
</ul> </ul>
<p><code class="docutils literal notranslate"><span class="pre">transfer_mode</span></code> 提供以下类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DMA_LLI_ONCE_MODE 0</span>
<span class="cp">#define DMA_LLI_CYCLE_MODE 1</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">direction</span></code> 提供以下类型</p> <p><code class="docutils literal notranslate"><span class="pre">direction</span></code> 提供以下类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">enum</span> <span class="p">{</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">enum</span> <span class="p">{</span>
<span class="n">DMA_MEMORY_TO_MEMORY</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="cm">/*!&lt; DMA transfer tyep:memory to memory */</span> <span class="n">DMA_MEMORY_TO_MEMORY</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="cm">/*!&lt; DMA transfer tyep:memory to memory */</span>
@ -294,11 +303,6 @@
<span class="p">}</span><span class="n">dma_transfer_dir_type</span><span class="p">;</span> <span class="p">}</span><span class="n">dma_transfer_dir_type</span><span class="p">;</span>
</pre></div> </pre></div>
</div> </div>
<p><code class="docutils literal notranslate"><span class="pre">transfer_mode</span></code> 提供以下类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DMA_LLI_ONCE_MODE 0</span>
<span class="cp">#define DMA_LLI_CYCLE_MODE 1</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">src_req</span></code> 提供以下类型</p> <p><code class="docutils literal notranslate"><span class="pre">src_req</span></code> 提供以下类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DMA_REQUEST_NONE 0x00000000 </span><span class="cm">/*!&lt; DMA request peripheral:None */</span><span class="cp"></span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DMA_REQUEST_NONE 0x00000000 </span><span class="cm">/*!&lt; DMA request peripheral:None */</span><span class="cp"></span>
<span class="cp">#define DMA_REQUEST_UART0_RX 0x00000000 </span><span class="cm">/*!&lt; DMA request peripheral:UART0 RX */</span><span class="cp"></span> <span class="cp">#define DMA_REQUEST_UART0_RX 0x00000000 </span><span class="cm">/*!&lt; DMA request peripheral:UART0 RX */</span><span class="cp"></span>
@ -347,6 +351,16 @@
<span class="cp">#define DMA_REQUEST_USB_EP7 0x0000001F </span><span class="cm">/*!&lt; DMA request peripheral:USB EP7 */</span><span class="cp"></span> <span class="cp">#define DMA_REQUEST_USB_EP7 0x0000001F </span><span class="cm">/*!&lt; DMA request peripheral:USB EP7 */</span><span class="cp"></span>
</pre></div> </pre></div>
</div> </div>
<p><code class="docutils literal notranslate"><span class="pre">src_addr_inc</span></code> 提供以下类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DMA_ADDR_INCREMENT_DISABLE 0 </span><span class="cm">/*!&lt; Addr increment mode disable */</span><span class="cp"></span>
<span class="cp">#define DMA_ADDR_INCREMENT_ENABLE 1 </span><span class="cm">/*!&lt; Addr increment mode enable */</span><span class="cp"></span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">dst_addr_inc</span></code> 提供以下类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DMA_ADDR_INCREMENT_DISABLE 0 </span><span class="cm">/*!&lt; Addr increment mode disable */</span><span class="cp"></span>
<span class="cp">#define DMA_ADDR_INCREMENT_ENABLE 1 </span><span class="cm">/*!&lt; Addr increment mode enable */</span><span class="cp"></span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">src_burst_size</span></code> 提供以下类型</p> <p><code class="docutils literal notranslate"><span class="pre">src_burst_size</span></code> 提供以下类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DMA_BURST_1BYTE 0</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DMA_BURST_1BYTE 0</span>
<span class="cp">#define DMA_BURST_4BYTE 1</span> <span class="cp">#define DMA_BURST_4BYTE 1</span>
@ -383,13 +397,17 @@
<span class="cp">#define DMA0_CH0_CONFIG \</span> <span class="cp">#define DMA0_CH0_CONFIG \</span>
<span class="cp">{ \</span> <span class="cp">{ \</span>
<span class="cp"> .id = 0, \</span> <span class="cp"> .id = 0, \</span>
<span class="cp"> .ch = 0,\</span> <span class="cp"> .ch = 7, \</span>
<span class="cp"> .direction = DMA_MEMORY_TO_MEMORY, \</span> <span class="cp"> .direction = DMA_MEMORY_TO_MEMORY, \</span>
<span class="cp"> .transfer_mode = DMA_LLI_ONCE_MODE, \</span> <span class="cp"> .transfer_mode = DMA_LLI_ONCE_MODE, \</span>
<span class="cp"> .src_req = DMA_REQUEST_NONE, \</span> <span class="cp"> .src_req = DMA_REQUEST_NONE, \</span>
<span class="cp"> .dst_req = DMA_REQUEST_NONE, \</span> <span class="cp"> .dst_req = DMA_REQUEST_NONE, \</span>
<span class="cp"> .src_width = DMA_TRANSFER_WIDTH_32BIT , \</span> <span class="cp"> .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \</span>
<span class="cp"> .dst_width = DMA_TRANSFER_WIDTH_32BIT , \</span> <span class="cp"> .dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \</span>
<span class="cp"> .src_burst_size = DMA_BURST_1BYTE, \</span>
<span class="cp"> .dst_burst_size = DMA_BURST_1BYTE, \</span>
<span class="cp"> .src_width = DMA_TRANSFER_WIDTH_8BIT, \</span>
<span class="cp"> .dst_width = DMA_TRANSFER_WIDTH_8BIT, \</span>
<span class="cp">}</span> <span class="cp">}</span>
<span class="cp">#endif</span> <span class="cp">#endif</span>
<span class="cp">#endif</span> <span class="cp">#endif</span>

View File

@ -212,7 +212,18 @@
<p>本文档将介绍一下如何基于本 SDK 新建一个全新的项目</p> <p>本文档将介绍一下如何基于本 SDK 新建一个全新的项目</p>
<div class="section" id="examples"> <div class="section" id="examples">
<h2><span class="section-number">4.1. </span>examples 的目录结构<a class="headerlink" href="#examples" title="永久链接至标题"></a></h2> <h2><span class="section-number">4.1. </span>examples 的目录结构<a class="headerlink" href="#examples" title="永久链接至标题"></a></h2>
<p><code class="docutils literal notranslate"><span class="pre">bl_mcu_sdk/examples</span></code> 目录下通常存在两层子目录,第一层通常为同一类外设相关的 case 集,一般使用外设名称,第二层通常为该外设具体的某一种测试例程,该目录下通常还包含一个 <code class="docutils literal notranslate"><span class="pre">CMakeList.txt</span></code> 以及该 case 相关的源码</p> <p><code class="docutils literal notranslate"><span class="pre">bl_mcu_sdk/examples</span></code> 目录下通常存在两层子目录,第一层通常为同一类外设相关的 case 集,一般使用外设名称,第二层通常为该外设具体的某一种测试例程,该目录下通常还包含一个 <code class="docutils literal notranslate"><span class="pre">CMakeList.txt</span></code> 以及该 case 相关的源码。</p>
<p>可供用户使用的 cmake 变量如下:</p>
<ul class="simple">
<li><p>mains:main 函数入口</p></li>
<li><p>TARGET_REQUIRED_SRCS:没有编译成 lib 的外部 c 文件</p></li>
<li><p>TARGET_REQUIRED_PRIVATE_INCLUDE:外部 c 文件需要的头文件路径</p></li>
<li><p>TARGET_REQUIRED_LIBS:目标需要的 lib 库名称,可以是 cmake 通过 generate_bin 生成的 target 或者外部导入的 lib 库</p></li>
<li><p>TARGET_REQUIRED_PRIVATE_OPTIONS:私有 c flag</p></li>
<li><p>LINKER_SCRIPT:重新定义链接脚本</p></li>
<li><p>GLOBAL_C_FLAGS:全局 c flag</p></li>
<li><p>GLOBAL_LD_FLAGS:全局 ld flag</p></li>
</ul>
</div> </div>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">4.2. </span>添加单个源文件工程<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">4.2. </span>添加单个源文件工程<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
@ -346,7 +357,7 @@
<ul class="simple"> <ul class="simple">
<li><p>编写好相应的功能代码后,在 bl_mcu_sdk 目录下进行编译即可,编译命令如下:</p></li> <li><p>编写好相应的功能代码后,在 bl_mcu_sdk 目录下进行编译即可,编译命令如下:</p></li>
</ul> </ul>
<div class="highlight-bash notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span>make <span class="nv">BOARD</span><span class="o">=</span>bl706_iot <span class="nv">APP</span><span class="o">=</span>gpio_case <span class="nv">SUPPORT_FREERTOS</span><span class="o">=</span>y <div class="highlight-bash notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span>make <span class="nv">BOARD</span><span class="o">=</span>bl706_iot <span class="nv">APP</span><span class="o">=</span>gpio_case
</pre></div> </pre></div>
</td></tr></table></div> </td></tr></table></div>
</div> </div>

View File

@ -216,15 +216,32 @@
</div> </div>
<div class="section" id="id2"> <div class="section" id="id2">
<h2><span class="section-number">2.2. </span>硬件连接<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2> <h2><span class="section-number">2.2. </span>硬件连接<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<p>本 demo 基于 BL706_AVB 开发板,连接方式如下</p> <p>本 demo 基于 BL706_AVB 开发板,连接方式如下:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">GPIO</span> <span class="n">function</span> <span class="n">GPIO</span> <span class="n">pin</span> <table class="colwidths-given docutils align-default">
<span class="o">----------------------------------</span> <colgroup>
<span class="n">SD_CS</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO10</span> <col style="width: 50%" />
<span class="n">SPI_SCK</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO19</span> <col style="width: 50%" />
<span class="n">SPI_MISO</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO20</span> </colgroup>
<span class="n">SPI_MOSI</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO21</span> <thead>
</pre></div> <tr class="row-odd"><th class="head"><p>GPIO function</p></th>
</div> <th class="head"><p>GPIO pin</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>SD_CS</p></td>
<td><p>GPIO10</p></td>
</tr>
<tr class="row-odd"><td><p>SPI_SCK</p></td>
<td><p>GPIO19</p></td>
</tr>
<tr class="row-even"><td><p>SPI_MISO</p></td>
<td><p>GPIO20</p></td>
</tr>
<tr class="row-odd"><td><p>SPI_MOSI</p></td>
<td><p>GPIO21</p></td>
</tr>
</tbody>
</table>
</div> </div>
<div class="section" id="id3"> <div class="section" id="id3">
<h2><span class="section-number">2.3. </span>软件实现<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2> <h2><span class="section-number">2.3. </span>软件实现<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
@ -328,7 +345,15 @@
<span class="normal">31</span> <span class="normal">31</span>
<span class="normal">32</span> <span class="normal">32</span>
<span class="normal">33</span> <span class="normal">33</span>
<span class="normal">34</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#define BSP_USING_DMA0_CH3</span> <span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#define BSP_USING_DMA0_CH3</span>
<span class="cp">#define BSP_USING_DMA0_CH4</span> <span class="cp">#define BSP_USING_DMA0_CH4</span>
<span class="cp">#if defined(BSP_USING_DMA0_CH3)</span> <span class="cp">#if defined(BSP_USING_DMA0_CH3)</span>
@ -341,6 +366,10 @@
<span class="cp"> .transfer_mode = DMA_LLI_ONCE_MODE, \</span> <span class="cp"> .transfer_mode = DMA_LLI_ONCE_MODE, \</span>
<span class="cp"> .src_req = DMA_REQUEST_NONE, \</span> <span class="cp"> .src_req = DMA_REQUEST_NONE, \</span>
<span class="cp"> .dst_req = DMA_REQUEST_SPI0_TX, \</span> <span class="cp"> .dst_req = DMA_REQUEST_SPI0_TX, \</span>
<span class="cp"> .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \</span>
<span class="cp"> .dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \</span>
<span class="cp"> .src_burst_size = DMA_BURST_1BYTE, \</span>
<span class="cp"> .dst_burst_size = DMA_BURST_1BYTE, \</span>
<span class="cp"> .src_width = DMA_TRANSFER_WIDTH_8BIT, \</span> <span class="cp"> .src_width = DMA_TRANSFER_WIDTH_8BIT, \</span>
<span class="cp"> .dst_width = DMA_TRANSFER_WIDTH_8BIT, \</span> <span class="cp"> .dst_width = DMA_TRANSFER_WIDTH_8BIT, \</span>
<span class="cp"> }</span> <span class="cp"> }</span>
@ -357,6 +386,10 @@
<span class="cp"> .transfer_mode = DMA_LLI_ONCE_MODE, \</span> <span class="cp"> .transfer_mode = DMA_LLI_ONCE_MODE, \</span>
<span class="cp"> .src_req = DMA_REQUEST_SPI0_RX, \</span> <span class="cp"> .src_req = DMA_REQUEST_SPI0_RX, \</span>
<span class="cp"> .dst_req = DMA_REQUEST_NONE, \</span> <span class="cp"> .dst_req = DMA_REQUEST_NONE, \</span>
<span class="cp"> .src_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \</span>
<span class="cp"> .dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \</span>
<span class="cp"> .src_burst_size = DMA_BURST_1BYTE, \</span>
<span class="cp"> .dst_burst_size = DMA_BURST_1BYTE, \</span>
<span class="cp"> .src_width = DMA_TRANSFER_WIDTH_8BIT, \</span> <span class="cp"> .src_width = DMA_TRANSFER_WIDTH_8BIT, \</span>
<span class="cp"> .dst_width = DMA_TRANSFER_WIDTH_8BIT, \</span> <span class="cp"> .dst_width = DMA_TRANSFER_WIDTH_8BIT, \</span>
<span class="cp"> }</span> <span class="cp"> }</span>

View File

@ -221,13 +221,26 @@
</div> </div>
<div class="section" id="id2"> <div class="section" id="id2">
<h2><span class="section-number">1.2. </span>硬件连接<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2> <h2><span class="section-number">1.2. </span>硬件连接<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<p>本 demo 基于 BL706_IOT 开发板,连接方式如下</p> <p>本 demo 基于 BL706_IOT 开发板,连接方式如下:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">GPIO</span> <span class="n">function</span> <span class="n">GPIO</span> <span class="n">pin</span> <table class="colwidths-given docutils align-default">
<span class="o">----------------------------------</span> <colgroup>
<span class="n">UART0_TX</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO14</span> <col style="width: 50%" />
<span class="n">UART0_RX</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO15</span> <col style="width: 50%" />
</pre></div> </colgroup>
</div> <thead>
<tr class="row-odd"><th class="head"><p>GPIO function</p></th>
<th class="head"><p>GPIO pin</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>UART0_TX</p></td>
<td><p>GPIO14</p></td>
</tr>
<tr class="row-odd"><td><p>UART0_RX</p></td>
<td><p>GPIO15</p></td>
</tr>
</tbody>
</table>
</div> </div>
<div class="section" id="id3"> <div class="section" id="id3">
<h2><span class="section-number">1.3. </span>软件实现<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2> <h2><span class="section-number">1.3. </span>软件实现<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>

View File

@ -233,26 +233,65 @@
</div> </div>
<div class="section" id="id2"> <div class="section" id="id2">
<h2><span class="section-number">3.4.2. </span>硬件连接<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.4.2. </span>硬件连接<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<p>本 demo 基于 BL706_AVB 开发板,连接方式如下</p> <p>本 demo 基于 BL706_AVB 开发板,连接方式如下:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">GPIO</span> <span class="n">function</span> <span class="n">GPIO</span> <span class="n">pin</span> <table class="colwidths-given docutils align-default">
<span class="o">----------------------------------</span> <colgroup>
<span class="n">CAM</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO0</span> <col style="width: 50%" />
<span class="n">CAM</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO1</span> <col style="width: 50%" />
<span class="n">CAM</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO2</span> </colgroup>
<span class="n">CAM</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO3</span> <thead>
<span class="n">CAM</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO4</span> <tr class="row-odd"><th class="head"><p>GPIO function</p></th>
<span class="n">CAM</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO5</span> <th class="head"><p>GPIO pin</p></th>
<span class="n">CAM</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO6</span> </tr>
<span class="n">USB_DP</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO7</span> </thead>
<span class="n">USB_DM</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO8</span> <tbody>
<span class="n">CLK_OUT</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO9</span> <tr class="row-even"><td><p>CAM</p></td>
<span class="n">I2C_SCL</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO11</span> <td><p>GPIO0</p></td>
<span class="n">I2C_SDA</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO16</span> </tr>
<span class="n">CAM</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO29</span> <tr class="row-odd"><td><p>CAM</p></td>
<span class="n">CAM</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO30</span> <td><p>GPIO1</p></td>
<span class="n">CAM</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO31</span> </tr>
</pre></div> <tr class="row-even"><td><p>CAM</p></td>
</div> <td><p>GPIO2</p></td>
</tr>
<tr class="row-odd"><td><p>CAM</p></td>
<td><p>GPIO3</p></td>
</tr>
<tr class="row-even"><td><p>CAM</p></td>
<td><p>GPIO4</p></td>
</tr>
<tr class="row-odd"><td><p>CAM</p></td>
<td><p>GPIO5</p></td>
</tr>
<tr class="row-even"><td><p>CAM</p></td>
<td><p>GPIO6</p></td>
</tr>
<tr class="row-odd"><td><p>USB_DP</p></td>
<td><p>GPIO7</p></td>
</tr>
<tr class="row-even"><td><p>USB_DM</p></td>
<td><p>GPIO8</p></td>
</tr>
<tr class="row-odd"><td><p>CLK_OUT</p></td>
<td><p>GPIO9</p></td>
</tr>
<tr class="row-even"><td><p>I2C_SCL</p></td>
<td><p>GPIO11</p></td>
</tr>
<tr class="row-odd"><td><p>I2C_SDA</p></td>
<td><p>GPIO16</p></td>
</tr>
<tr class="row-even"><td><p>CAM</p></td>
<td><p>GPIO29</p></td>
</tr>
<tr class="row-odd"><td><p>CAM</p></td>
<td><p>GPIO30</p></td>
</tr>
<tr class="row-even"><td><p>CAM</p></td>
<td><p>GPIO31</p></td>
</tr>
</tbody>
</table>
<div class="admonition note"> <div class="admonition note">
<p class="admonition-title">注解</p> <p class="admonition-title">注解</p>
<p>注意 706 AVB FUN1 的跳冒不要接,默认连接到摄像头引脚,如果接了则连接到了 i2s codec</p> <p>注意 706 AVB FUN1 的跳冒不要接,默认连接到摄像头引脚,如果接了则连接到了 i2s codec</p>
@ -343,7 +382,11 @@
<span class="normal">28</span> <span class="normal">28</span>
<span class="normal">29</span> <span class="normal">29</span>
<span class="normal">30</span> <span class="normal">30</span>
<span class="normal">31</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#define BSP_USING_CAM</span> <span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#define BSP_USING_CAM</span>
<span class="cp">#define BSP_USING_I2C0</span> <span class="cp">#define BSP_USING_I2C0</span>
<span class="cp">#define BSP_USING_USB</span> <span class="cp">#define BSP_USING_USB</span>
<span class="cp">#define BSP_USING_DMA0_CH2</span> <span class="cp">#define BSP_USING_DMA0_CH2</span>
@ -369,6 +412,10 @@
<span class="cp"> .transfer_mode = DMA_LLI_ONCE_MODE, \</span> <span class="cp"> .transfer_mode = DMA_LLI_ONCE_MODE, \</span>
<span class="cp"> .src_req = DMA_REQUEST_NONE, \</span> <span class="cp"> .src_req = DMA_REQUEST_NONE, \</span>
<span class="cp"> .dst_req = DMA_REQUEST_UART1_TX, \</span> <span class="cp"> .dst_req = DMA_REQUEST_UART1_TX, \</span>
<span class="cp"> .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \</span>
<span class="cp"> .dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \</span>
<span class="cp"> .src_burst_size = DMA_BURST_1BYTE, \</span>
<span class="cp"> .dst_burst_size = DMA_BURST_1BYTE, \</span>
<span class="cp"> .src_width = DMA_TRANSFER_WIDTH_8BIT, \</span> <span class="cp"> .src_width = DMA_TRANSFER_WIDTH_8BIT, \</span>
<span class="cp"> .dst_width = DMA_TRANSFER_WIDTH_8BIT, \</span> <span class="cp"> .dst_width = DMA_TRANSFER_WIDTH_8BIT, \</span>
<span class="cp"> }</span> <span class="cp"> }</span>
@ -380,7 +427,25 @@
<li><p>使能外设并配置,见 <code class="docutils literal notranslate"><span class="pre">bsp/board/bl706_avb/peripheral_config.h</span></code> ,外设配置可以保持默认,在程序中修改,如下</p></li> <li><p>使能外设并配置,见 <code class="docutils literal notranslate"><span class="pre">bsp/board/bl706_avb/peripheral_config.h</span></code> ,外设配置可以保持默认,在程序中修改,如下</p></li>
</ul> </ul>
<div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> <div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_USB_EP1</span><span class="p">;</span> <span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">direction</span> <span class="o">=</span> <span class="n">DMA_MEMORY_TO_PERIPH</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">transfer_mode</span> <span class="o">=</span> <span class="n">DMA_LLI_ONCE_MODE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_NONE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_USB_EP1</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_addr_inc</span> <span class="o">=</span> <span class="n">DMA_ADDR_INCREMENT_ENABLE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_addr_inc</span> <span class="o">=</span> <span class="n">DMA_ADDR_INCREMENT_DISABLE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_burst_size</span> <span class="o">=</span> <span class="n">DMA_BURST_16BYTE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_burst_size</span> <span class="o">=</span> <span class="n">DMA_BURST_1BYTE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_8BIT</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_8BIT</span><span class="p">;</span>
<span class="n">device_open</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> <span class="n">device_open</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
</pre></div> </pre></div>
</td></tr></table></div> </td></tr></table></div>

View File

@ -214,12 +214,23 @@
<p>本 demo 主要介绍一个基于 ADC 的按键功能,使用 ADC 检测按键输入引脚的电压值,根据不同的分压值判断相应的按键是否按下</p> <p>本 demo 主要介绍一个基于 ADC 的按键功能,使用 ADC 检测按键输入引脚的电压值,根据不同的分压值判断相应的按键是否按下</p>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">9.1.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">9.1.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>本 demo 基于 BL706_AVB 开发板:</p> <p>本 demo 基于 BL706_AVB 开发板,连接方式如下:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">GPIO</span> <span class="n">function</span> <span class="n">GPIO</span> <span class="n">pin</span> <table class="colwidths-given docutils align-default">
<span class="o">----------------------------------</span> <colgroup>
<span class="n">ADC</span> <span class="n">CH8</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO18</span> <col style="width: 50%" />
</pre></div> <col style="width: 50%" />
</div> </colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>GPIO function</p></th>
<th class="head"><p>GPIO pin</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>ADC CH8</p></td>
<td><p>GPIO18</p></td>
</tr>
</tbody>
</table>
<p><strong>分压电路:</strong></p> <p><strong>分压电路:</strong></p>
<div class="figure align-default" id="id5"> <div class="figure align-default" id="id5">
<img alt="" src="../../../_images/adc_key_demo.png" /> <img alt="" src="../../../_images/adc_key_demo.png" />

View File

@ -237,7 +237,11 @@
<span class="normal">14</span> <span class="normal">14</span>
<span class="normal">15</span> <span class="normal">15</span>
<span class="normal">16</span> <span class="normal">16</span>
<span class="normal">17</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#define BSP_USING_DMA0_CH0</span> <span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#define BSP_USING_DMA0_CH0</span>
<span class="cp">#if defined(BSP_USING_DMA0_CH0)</span> <span class="cp">#if defined(BSP_USING_DMA0_CH0)</span>
<span class="cp">#ifndef DMA0_CH0_CONFIG</span> <span class="cp">#ifndef DMA0_CH0_CONFIG</span>
@ -249,6 +253,10 @@
<span class="cp"> .transfer_mode = DMA_LLI_ONCE_MODE, \</span> <span class="cp"> .transfer_mode = DMA_LLI_ONCE_MODE, \</span>
<span class="cp"> .src_req = DMA_REQUEST_NONE, \</span> <span class="cp"> .src_req = DMA_REQUEST_NONE, \</span>
<span class="cp"> .dst_req = DMA_REQUEST_NONE, \</span> <span class="cp"> .dst_req = DMA_REQUEST_NONE, \</span>
<span class="cp"> .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \</span>
<span class="cp"> .dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \</span>
<span class="cp"> .src_burst_size = DMA_BURST_4BYTE, \</span>
<span class="cp"> .dst_burst_size = DMA_BURST_4BYTE, \</span>
<span class="cp"> .src_width = DMA_TRANSFER_WIDTH_32BIT, \</span> <span class="cp"> .src_width = DMA_TRANSFER_WIDTH_32BIT, \</span>
<span class="cp"> .dst_width = DMA_TRANSFER_WIDTH_32BIT, \</span> <span class="cp"> .dst_width = DMA_TRANSFER_WIDTH_32BIT, \</span>
<span class="cp"> }</span> <span class="cp"> }</span>
@ -268,26 +276,44 @@
<span class="normal"> 7</span> <span class="normal"> 7</span>
<span class="normal"> 8</span> <span class="normal"> 8</span>
<span class="normal"> 9</span> <span class="normal"> 9</span>
<span class="normal">10</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="n">dma_register</span><span class="p">(</span><span class="n">DMA0_CH0_INDEX</span><span class="p">,</span> <span class="s">&quot;DMA&quot;</span><span class="p">);</span> <span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="n">dma_register</span><span class="p">(</span><span class="n">DMA0_CH0_INDEX</span><span class="p">,</span> <span class="s">&quot;dma_ch0&quot;</span><span class="p">);</span>
<span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dma</span> <span class="o">=</span> <span class="n">device_find</span><span class="p">(</span><span class="s">&quot;DMA&quot;</span><span class="p">);</span> <span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dma_ch0</span> <span class="o">=</span> <span class="n">device_find</span><span class="p">(</span><span class="s">&quot;dma_ch0&quot;</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">dma</span><span class="p">)</span> <span class="k">if</span> <span class="p">(</span><span class="n">dma_ch0</span><span class="p">)</span> <span class="p">{</span>
<span class="p">{</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">direction</span> <span class="o">=</span> <span class="n">DMA_MEMORY_TO_MEMORY</span><span class="p">;</span>
<span class="n">device_open</span><span class="p">(</span><span class="n">dma</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">transfer_mode</span> <span class="o">=</span> <span class="n">DMA_LLI_ONCE_MODE</span><span class="p">;</span>
<span class="n">device_set_callback</span><span class="p">(</span><span class="n">dma</span><span class="p">,</span> <span class="n">dma_transfer_done</span><span class="p">);</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_NONE</span><span class="p">;</span>
<span class="n">device_control</span><span class="p">(</span><span class="n">dma</span><span class="p">,</span> <span class="n">DEVICE_CTRL_SET_INT</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_NONE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_addr_inc</span> <span class="o">=</span> <span class="n">DMA_ADDR_INCREMENT_ENABLE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_addr_inc</span> <span class="o">=</span> <span class="n">DMA_ADDR_INCREMENT_ENABLE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_burst_size</span> <span class="o">=</span> <span class="n">DMA_BURST_4BYTE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_burst_size</span> <span class="o">=</span> <span class="n">DMA_BURST_4BYTE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_32BIT</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_32BIT</span><span class="p">;</span>
<span class="n">device_open</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
<span class="n">device_set_callback</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">,</span> <span class="n">dma_transfer_done</span><span class="p">);</span>
<span class="n">device_control</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">,</span> <span class="n">DEVICE_CTRL_SET_INT</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span>
<span class="p">}</span> <span class="p">}</span>
</pre></div> </pre></div>
</td></tr></table></div> </td></tr></table></div>
<ul class="simple"> <ul class="simple">
<li><p>首先调用 <code class="docutils literal notranslate"><span class="pre">dma_register</span></code> 函数注册 <code class="docutils literal notranslate"><span class="pre">DMA</span></code> 设备的一个通道,当前注册 <code class="docutils literal notranslate"><span class="pre">DMA_CH0</span></code></p></li> <li><p>首先调用 <code class="docutils literal notranslate"><span class="pre">dma_register</span></code> 函数注册 <code class="docutils literal notranslate"><span class="pre">DMA</span></code> 设备的一个通道,当前注册 <code class="docutils literal notranslate"><span class="pre">DMA_CH0</span></code></p></li>
<li><p>然后通过 <code class="docutils literal notranslate"><span class="pre">find</span></code> 函数找到设备对应的句柄,保存于 <code class="docutils literal notranslate"><span class="pre">dma</span></code> 句柄中</p></li> <li><p>然后通过 <code class="docutils literal notranslate"><span class="pre">find</span></code> 函数找到设备对应的句柄,保存于 <code class="docutils literal notranslate"><span class="pre">dma_ch0</span></code> 句柄中</p></li>
<li><p>最后使用 <code class="docutils literal notranslate"><span class="pre">device_open</span></code> 以默认模式来打开 <code class="docutils literal notranslate"><span class="pre">dma</span></code> 设备,调用 <code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 注册一个dma通道0中断回调函数调用 <code class="docutils literal notranslate"><span class="pre">device_control</span></code> 开启dma传输完成中断</p></li> <li><p>最后使用 <code class="docutils literal notranslate"><span class="pre">device_open</span></code> 以默认模式来打开 <code class="docutils literal notranslate"><span class="pre">dma_ch0</span></code> 设备,调用 <code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 注册一个 dma 通道0中断回调函数调用 <code class="docutils literal notranslate"><span class="pre">device_control</span></code> 开启dma传输完成中断</p></li>
</ul> </ul>
<div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span> <div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="n">dma_reload</span><span class="p">(</span><span class="n">dma</span><span class="p">,(</span><span class="kt">uint32_t</span><span class="p">)</span><span class="n">dma_src_buffer</span><span class="p">,(</span><span class="kt">uint32_t</span><span class="p">)</span><span class="n">dma_dst_buffer</span><span class="p">,</span><span class="mi">8000</span><span class="p">);</span> <span class="normal">2</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="n">dma_reload</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">,(</span><span class="kt">uint32_t</span><span class="p">)</span><span class="n">dma_src_buffer</span><span class="p">,(</span><span class="kt">uint32_t</span><span class="p">)</span><span class="n">dma_dst_buffer</span><span class="p">,</span><span class="mi">8000</span><span class="p">);</span>
<span class="n">dma_channel_start</span><span class="p">(</span><span class="n">dma</span><span class="p">);</span> <span class="n">dma_channel_start</span><span class="p">(</span><span class="n">dma_ch0</span><span class="p">);</span>
</pre></div> </pre></div>
</td></tr></table></div> </td></tr></table></div>
<ul class="simple"> <ul class="simple">

View File

@ -215,15 +215,32 @@
<p>本 demo 基于 GPIO 外设的输出模式编写。</p> <p>本 demo 基于 GPIO 外设的输出模式编写。</p>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">1.1.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">1.1.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>本 demo 基于 BL706_IOT 开发板,连接方式如下</p> <p>本 demo 基于 BL706_IOT 开发板,连接方式如下:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">GPIO</span> <span class="n">function</span> <span class="n">GPIO</span> <span class="n">pin</span> <table class="colwidths-given docutils align-default">
<span class="o">----------------------------------</span> <colgroup>
<span class="n">D0</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO22</span> <col style="width: 50%" />
<span class="n">D1</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO29</span> <col style="width: 50%" />
<span class="n">D2</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO30</span> </colgroup>
<span class="n">D3</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO31</span> <thead>
</pre></div> <tr class="row-odd"><th class="head"><p>GPIO function</p></th>
</div> <th class="head"><p>GPIO pin</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>D0</p></td>
<td><p>GPIO22</p></td>
</tr>
<tr class="row-odd"><td><p>D1</p></td>
<td><p>GPIO29</p></td>
</tr>
<tr class="row-even"><td><p>D2</p></td>
<td><p>GPIO30</p></td>
</tr>
<tr class="row-odd"><td><p>D3</p></td>
<td><p>GPIO31</p></td>
</tr>
</tbody>
</table>
<div class="figure align-default"> <div class="figure align-default">
<img alt="" src="../../../_images/blink_breath_sch.png" /> <img alt="" src="../../../_images/blink_breath_sch.png" />
</div> </div>

View File

@ -215,12 +215,23 @@
<p>本 demo 基于 GPIO 外设外部中断模式编写。</p> <p>本 demo 基于 GPIO 外设外部中断模式编写。</p>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">1.2.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">1.2.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>本 demo 基于BL706_IOT开发板自行添加按键电路连接方式如下</p> <p>本 demo 基于BL706_IOT开发板自行添加按键电路连接方式如下</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">GPIO</span> <span class="n">function</span> <span class="n">GPIO</span> <span class="n">pin</span> <table class="colwidths-given docutils align-default">
<span class="o">----------------------------------</span> <colgroup>
<span class="n">SW1</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO11</span> <col style="width: 50%" />
</pre></div> <col style="width: 50%" />
</div> </colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>GPIO function</p></th>
<th class="head"><p>GPIO pin</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>SW1</p></td>
<td><p>GPIO11</p></td>
</tr>
</tbody>
</table>
<div class="figure align-default"> <div class="figure align-default">
<img alt="" src="../../../_images/button_sch.png" /> <img alt="" src="../../../_images/button_sch.png" />
</div> </div>

View File

@ -213,13 +213,26 @@
<h1><span class="section-number">7.1. </span>I2C - AT24CXX 读写<a class="headerlink" href="#i2c-at24cxx" title="永久链接至标题"></a></h1> <h1><span class="section-number">7.1. </span>I2C - AT24CXX 读写<a class="headerlink" href="#i2c-at24cxx" title="永久链接至标题"></a></h1>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">7.1.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">7.1.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>本 demo 基于 BL706_IOT 开发板,自行添加 AT24CXX 电路,连接方式如下</p> <p>本 demo 基于 BL706_IOT 开发板,自行添加 AT24CXX 电路,连接方式如下:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">GPIO</span> <span class="n">function</span> <span class="n">GPIO</span> <span class="n">pin</span> <table class="colwidths-given docutils align-default">
<span class="o">----------------------------------</span> <colgroup>
<span class="n">I2C_SCL</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO11</span> <col style="width: 50%" />
<span class="n">I2C_SDA</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO16</span> <col style="width: 50%" />
</pre></div> </colgroup>
</div> <thead>
<tr class="row-odd"><th class="head"><p>GPIO function</p></th>
<th class="head"><p>GPIO pin</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>I2C_SCL</p></td>
<td><p>GPIO11</p></td>
</tr>
<tr class="row-odd"><td><p>I2C_SDA</p></td>
<td><p>GPIO16</p></td>
</tr>
</tbody>
</table>
</div> </div>
<div class="section" id="id2"> <div class="section" id="id2">
<h2><span class="section-number">7.1.2. </span>软件实现<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2> <h2><span class="section-number">7.1.2. </span>软件实现<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>

View File

@ -259,6 +259,12 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
<p>如果使用的是BL706_AVB板请确保FUN1 FUN2两个跳帽处于短接的状态,如下图所示</p>
<blockquote>
<div><div class="figure align-default">
<img alt="" src="../../../_images/tiaomao.png" />
</div>
</div></blockquote>
<p>本 demo 用到的内部外设资源如下:</p> <p>本 demo 用到的内部外设资源如下:</p>
<table class="colwidths-given docutils align-default"> <table class="colwidths-given docutils align-default">
<colgroup> <colgroup>
@ -293,7 +299,7 @@
</dd> </dd>
</dl> </dl>
<p>本文档不再详细功能实现的细节,仅概述功能过程,可以参考 I2S 与 UART 相关文档。</p> <p>本文档不再详细功能实现的细节,仅概述功能过程,可以参考 I2S 与 UART 相关文档。</p>
<p>配置 <code class="docutils literal notranslate"><span class="pre">I2S,</span> <span class="pre">I2C,</span> <span class="pre">CLK_OUT(MCLK)</span></code> 相关复用引脚,见 <code class="docutils literal notranslate"><span class="pre">bsp/board/bl706_avb/pinmux_config.h</span></code> 中的宏定义选项:</p> <p>配置 <code class="docutils literal notranslate"><span class="pre">I2S,</span> <span class="pre">I2C,</span> <span class="pre">CLK_OUT(MCLK)</span></code> 相关复用引脚,见 <code class="docutils literal notranslate"><span class="pre">bsp/board/bl706_iot/pinmux_config.h</span></code> 中的宏定义选项:</p>
<div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span> <div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span> <span class="normal">2</span>
<span class="normal">3</span> <span class="normal">3</span>
@ -302,15 +308,15 @@
<span class="normal">6</span> <span class="normal">6</span>
<span class="normal">7</span> <span class="normal">7</span>
<span class="normal">8</span> <span class="normal">8</span>
<span class="normal">9</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT</span> <span class="normal">9</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#define CONFIG_GPIO3_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO3_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO4_FUNC GPIO_FUN_I2S</span> <span class="cp">#define CONFIG_GPIO4_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S</span> <span class="cp">#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT</span>
<span class="cp">#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C</span> <span class="cp">#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C</span>
<span class="cp">#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C</span>
<span class="cp">#define CONFIG_GPIO14_FUNC GPIO_FUN_UART0_TX</span> <span class="cp">#define CONFIG_GPIO14_FUNC GPIO_FUN_UART0_TX</span>
<span class="cp">#define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX</span> <span class="cp">#define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX</span>
<span class="cp">#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C</span>
<span class="cp">#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S</span>
</pre></div> </pre></div>
</td></tr></table></div> </td></tr></table></div>
</div> </div>
@ -326,7 +332,7 @@
</ul> </ul>
<div class="highlight-bash notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span> <div class="highlight-bash notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span> $ <span class="nb">cd</span> &lt;sdk_path&gt;/bl_mcu_sdk <span class="normal">2</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span> $ <span class="nb">cd</span> &lt;sdk_path&gt;/bl_mcu_sdk
$ make <span class="nv">BOARD</span><span class="o">=</span>bl706_avb <span class="nv">APP</span><span class="o">=</span>audio_cube $ make <span class="nv">BOARD</span><span class="o">=</span>bl706_iot <span class="nv">APP</span><span class="o">=</span>audio_cube
</pre></div> </pre></div>
</td></tr></table></div> </td></tr></table></div>
<ul class="simple"> <ul class="simple">

View File

@ -252,6 +252,12 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
<p>如果使用的是BL706_AVB板请确保FUN1 FUN2两个跳帽处于短接的状态,如下图所示</p>
<blockquote>
<div><div class="figure align-default">
<img alt="" src="../../../_images/tiaomao.png" />
</div>
</div></blockquote>
<p>本 demo 用到的内部外设资源如下:</p> <p>本 demo 用到的内部外设资源如下:</p>
<table class="colwidths-given docutils align-default"> <table class="colwidths-given docutils align-default">
<colgroup> <colgroup>
@ -292,13 +298,17 @@
<span class="normal">4</span> <span class="normal">4</span>
<span class="normal">5</span> <span class="normal">5</span>
<span class="normal">6</span> <span class="normal">6</span>
<span class="normal">7</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT</span> <span class="normal">7</span>
<span class="cp">#define CONFIG_GPIO3_FUNC GPIO_FUN_I2S</span> <span class="normal">8</span>
<span class="normal">9</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#define CONFIG_GPIO3_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO4_FUNC GPIO_FUN_I2S</span> <span class="cp">#define CONFIG_GPIO4_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT</span>
<span class="cp">#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C</span>
<span class="cp">#define CONFIG_GPIO14_FUNC GPIO_FUN_UART0_TX</span>
<span class="cp">#define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX</span>
<span class="cp">#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C</span>
<span class="cp">#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S</span> <span class="cp">#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S</span> <span class="cp">#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C</span>
<span class="cp">#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C</span>
</pre></div> </pre></div>
</td></tr></table></div> </td></tr></table></div>
<p>配置 ES8388 的参数,初始化 ES8388 ,其中会用到 I2C 外设,具体过程可见 <code class="docutils literal notranslate"><span class="pre">bsp/bsp_common/es8388/es8388.c</span></code></p> <p>配置 ES8388 的参数,初始化 ES8388 ,其中会用到 I2C 外设,具体过程可见 <code class="docutils literal notranslate"><span class="pre">bsp/bsp_common/es8388/es8388.c</span></code></p>
@ -366,7 +376,7 @@
<li><p>先调用 <code class="docutils literal notranslate"><span class="pre">i2s_register</span></code> 函数注册 <code class="docutils literal notranslate"><span class="pre">I2S</span></code> 设备</p></li> <li><p>先调用 <code class="docutils literal notranslate"><span class="pre">i2s_register</span></code> 函数注册 <code class="docutils literal notranslate"><span class="pre">I2S</span></code> 设备</p></li>
<li><p>然后通过 <code class="docutils literal notranslate"><span class="pre">find</span></code> 函数找到设备对应的句柄,保存于 <code class="docutils literal notranslate"><span class="pre">i2s</span></code></p></li> <li><p>然后通过 <code class="docutils literal notranslate"><span class="pre">find</span></code> 函数找到设备对应的句柄,保存于 <code class="docutils literal notranslate"><span class="pre">i2s</span></code></p></li>
<li><p>最后填写配置参数后,使用 <code class="docutils literal notranslate"><span class="pre">device_open</span></code> 来打开 <code class="docutils literal notranslate"><span class="pre">I2S</span></code> 设备</p></li> <li><p>最后填写配置参数后,使用 <code class="docutils literal notranslate"><span class="pre">device_open</span></code> 来打开 <code class="docutils literal notranslate"><span class="pre">I2S</span></code> 设备</p></li>
<li><p>如果不填写配置参数,会默认使用 <code class="docutils literal notranslate"><span class="pre">bsp/board/bl706_avb/peripheral_config.h</span></code> 中预设的参数</p></li> <li><p>如果不填写配置参数,会默认使用 <code class="docutils literal notranslate"><span class="pre">bsp/board/bl706_iot/peripheral_config.h</span></code> 中预设的参数</p></li>
</ul> </ul>
<div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> <div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span> <span class="normal"> 2</span>
@ -411,7 +421,11 @@
<span class="normal">12</span> <span class="normal">12</span>
<span class="normal">13</span> <span class="normal">13</span>
<span class="normal">14</span> <span class="normal">14</span>
<span class="normal">15</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cm">/* register &amp; open dma device */</span> <span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cm">/* register &amp; open dma device */</span>
<span class="n">dma_register</span><span class="p">(</span><span class="n">DMA0_CH2_INDEX</span><span class="p">,</span> <span class="s">&quot;dma_ch2_i2s_tx&quot;</span><span class="p">,</span> <span class="n">DEVICE_OFLAG_RDWR</span><span class="p">);</span> <span class="n">dma_register</span><span class="p">(</span><span class="n">DMA0_CH2_INDEX</span><span class="p">,</span> <span class="s">&quot;dma_ch2_i2s_tx&quot;</span><span class="p">,</span> <span class="n">DEVICE_OFLAG_RDWR</span><span class="p">);</span>
<span class="n">dma_ch2</span> <span class="o">=</span> <span class="n">device_find</span><span class="p">(</span><span class="s">&quot;dma_ch2_i2s_tx&quot;</span><span class="p">);</span> <span class="n">dma_ch2</span> <span class="o">=</span> <span class="n">device_find</span><span class="p">(</span><span class="s">&quot;dma_ch2_i2s_tx&quot;</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span> <span class="p">{</span>
@ -419,8 +433,12 @@
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">transfer_mode</span> <span class="o">=</span> <span class="n">DMA_LLI_CYCLE_MODE</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">transfer_mode</span> <span class="o">=</span> <span class="n">DMA_LLI_CYCLE_MODE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_NONE</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_NONE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_I2S_TX</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_I2S_TX</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_addr_inc</span> <span class="o">=</span> <span class="n">DMA_ADDR_INCREMENT_ENABLE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_addr_inc</span> <span class="o">=</span> <span class="n">DMA_ADDR_INCREMENT_DISABLE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_16BIT</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_16BIT</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_16BIT</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_16BIT</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_burst_size</span> <span class="o">=</span> <span class="n">DMA_BURST_4BYTE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_burst_size</span> <span class="o">=</span> <span class="n">DMA_BURST_4BYTE</span><span class="p">;</span>
<span class="n">device_open</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> <span class="n">device_open</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
<span class="cm">/* connect i2s device and dma device */</span> <span class="cm">/* connect i2s device and dma device */</span>
@ -461,7 +479,7 @@
</ul> </ul>
<div class="highlight-bash notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span> <div class="highlight-bash notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span> $ <span class="nb">cd</span> &lt;sdk_path&gt;/bl_mcu_sdk <span class="normal">2</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span> $ <span class="nb">cd</span> &lt;sdk_path&gt;/bl_mcu_sdk
$ make <span class="nv">BOARD</span><span class="o">=</span>bl706_avb <span class="nv">APP</span><span class="o">=</span>i2s_play_form_flash $ make <span class="nv">BOARD</span><span class="o">=</span>bl706_iot <span class="nv">APP</span><span class="o">=</span>i2s_play_form_flash
</pre></div> </pre></div>
</td></tr></table></div> </td></tr></table></div>
<ul class="simple"> <ul class="simple">

View File

@ -259,6 +259,12 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
<p>如果使用的是BL706_AVB板请确保FUN1 FUN2两个跳帽处于短接的状态,如下图所示</p>
<blockquote>
<div><div class="figure align-default">
<img alt="" src="../../../_images/tiaomao.png" />
</div>
</div></blockquote>
<ul class="simple"> <ul class="simple">
<li><p>本 demo 用到的内部外设资源如下:</p></li> <li><p>本 demo 用到的内部外设资源如下:</p></li>
</ul> </ul>
@ -296,21 +302,25 @@
<p>本文档不再详细介绍 I2C 与 DMA主要介绍 I2S 相关配置,其他外设可以查看对应的文档。</p> <p>本文档不再详细介绍 I2C 与 DMA主要介绍 I2S 相关配置,其他外设可以查看对应的文档。</p>
<ul class="simple"> <ul class="simple">
<li><p>软件代码见 <code class="docutils literal notranslate"><span class="pre">examples/i2s/i2s_play_form_record</span></code></p></li> <li><p>软件代码见 <code class="docutils literal notranslate"><span class="pre">examples/i2s/i2s_play_form_record</span></code></p></li>
<li><p>配置 <code class="docutils literal notranslate"><span class="pre">I2S,</span> <span class="pre">I2C,</span> <span class="pre">CLK_OUT(MCLK)</span></code> 相关复用引脚,见 <code class="docutils literal notranslate"><span class="pre">bsp/board/bl706_iot/pinmux_config.h</span></code> 中的宏定义选项:</p></li>
</ul> </ul>
<p>配置 <code class="docutils literal notranslate"><span class="pre">I2S,</span> <span class="pre">I2C,</span> <span class="pre">CLK_OUT(MCLK)</span></code> 相关复用引脚,见 <code class="docutils literal notranslate"><span class="pre">bsp/board/bl706_iot/pinmux_config.h</span></code> 中的宏定义选项:</p>
<div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span> <div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span> <span class="normal">2</span>
<span class="normal">3</span> <span class="normal">3</span>
<span class="normal">4</span> <span class="normal">4</span>
<span class="normal">5</span> <span class="normal">5</span>
<span class="normal">6</span> <span class="normal">6</span>
<span class="normal">7</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT</span> <span class="normal">7</span>
<span class="cp">#define CONFIG_GPIO3_FUNC GPIO_FUN_I2S</span> <span class="normal">8</span>
<span class="normal">9</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cp">#define CONFIG_GPIO3_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO4_FUNC GPIO_FUN_I2S</span> <span class="cp">#define CONFIG_GPIO4_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT</span>
<span class="cp">#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C</span>
<span class="cp">#define CONFIG_GPIO14_FUNC GPIO_FUN_UART0_TX</span>
<span class="cp">#define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX</span>
<span class="cp">#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C</span>
<span class="cp">#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S</span> <span class="cp">#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S</span> <span class="cp">#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S</span>
<span class="cp">#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C</span>
<span class="cp">#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C</span>
</pre></div> </pre></div>
</td></tr></table></div> </td></tr></table></div>
<ul> <ul>
@ -384,7 +394,7 @@
<li><p>先调用 <code class="docutils literal notranslate"><span class="pre">i2s_register</span></code> 函数注册 <code class="docutils literal notranslate"><span class="pre">I2S</span></code> 设备</p></li> <li><p>先调用 <code class="docutils literal notranslate"><span class="pre">i2s_register</span></code> 函数注册 <code class="docutils literal notranslate"><span class="pre">I2S</span></code> 设备</p></li>
<li><p>然后通过 <code class="docutils literal notranslate"><span class="pre">find</span></code> 函数找到设备对应的句柄,保存于 <code class="docutils literal notranslate"><span class="pre">i2s</span></code></p></li> <li><p>然后通过 <code class="docutils literal notranslate"><span class="pre">find</span></code> 函数找到设备对应的句柄,保存于 <code class="docutils literal notranslate"><span class="pre">i2s</span></code></p></li>
<li><p>最后填写配置参数后,使用 <code class="docutils literal notranslate"><span class="pre">device_open</span></code> 来打开 <code class="docutils literal notranslate"><span class="pre">I2S</span></code> 设备</p></li> <li><p>最后填写配置参数后,使用 <code class="docutils literal notranslate"><span class="pre">device_open</span></code> 来打开 <code class="docutils literal notranslate"><span class="pre">I2S</span></code> 设备</p></li>
<li><p>如果不填写配置参数,会默认使用 <code class="docutils literal notranslate"><span class="pre">bsp/board/bl706_avb/peripheral_config.h</span></code> 中预设的参数</p></li> <li><p>如果不填写配置参数,会默认使用 <code class="docutils literal notranslate"><span class="pre">bsp/board/bl706_iot/peripheral_config.h</span></code> 中预设的参数</p></li>
</ul> </ul>
<div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> <div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span> <span class="normal"> 2</span>
@ -461,7 +471,11 @@
<span class="normal">39</span> <span class="normal">39</span>
<span class="normal">40</span> <span class="normal">40</span>
<span class="normal">41</span> <span class="normal">41</span>
<span class="normal">42</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cm">/* register &amp; open dma device */</span> <span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="cm">/* register &amp; open dma device */</span>
<span class="n">dma_register</span><span class="p">(</span><span class="n">DMA0_CH3_INDEX</span><span class="p">,</span> <span class="s">&quot;dma_ch3_i2s_rx&quot;</span><span class="p">);</span> <span class="n">dma_register</span><span class="p">(</span><span class="n">DMA0_CH3_INDEX</span><span class="p">,</span> <span class="s">&quot;dma_ch3_i2s_rx&quot;</span><span class="p">);</span>
<span class="n">dma_ch3</span> <span class="o">=</span> <span class="n">device_find</span><span class="p">(</span><span class="s">&quot;dma_ch3_i2s_rx&quot;</span><span class="p">);</span> <span class="n">dma_ch3</span> <span class="o">=</span> <span class="n">device_find</span><span class="p">(</span><span class="s">&quot;dma_ch3_i2s_rx&quot;</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span> <span class="p">{</span>
@ -469,10 +483,12 @@
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">transfer_mode</span> <span class="o">=</span> <span class="n">DMA_LLI_ONCE_MODE</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">transfer_mode</span> <span class="o">=</span> <span class="n">DMA_LLI_ONCE_MODE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_I2S_RX</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_I2S_RX</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_NONE</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_NONE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_32BIT</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_addr_inc</span> <span class="o">=</span> <span class="n">DMA_ADDR_INCREMENT_DISABLE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_32BIT</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_addr_inc</span> <span class="o">=</span> <span class="n">DMA_ADDR_INCREMENT_ENABLE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_burst_size</span> <span class="o">=</span> <span class="n">DMA_BURST_4BYTE</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_burst_size</span> <span class="o">=</span> <span class="n">DMA_BURST_4BYTE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_burst_size</span> <span class="o">=</span> <span class="n">DMA_BURST_4BYTE</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_burst_size</span> <span class="o">=</span> <span class="n">DMA_BURST_4BYTE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_32BIT</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_32BIT</span><span class="p">;</span>
<span class="n">device_open</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> <span class="n">device_open</span><span class="p">(</span><span class="n">dma_ch3</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
<span class="cm">/* connect i2s device and dma device */</span> <span class="cm">/* connect i2s device and dma device */</span>
@ -490,6 +506,8 @@
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">transfer_mode</span> <span class="o">=</span> <span class="n">DMA_LLI_ONCE_MODE</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">transfer_mode</span> <span class="o">=</span> <span class="n">DMA_LLI_ONCE_MODE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_NONE</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_NONE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_I2S_TX</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_req</span> <span class="o">=</span> <span class="n">DMA_REQUEST_I2S_TX</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_addr_inc</span> <span class="o">=</span> <span class="n">DMA_ADDR_INCREMENT_ENABLE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_addr_inc</span> <span class="o">=</span> <span class="n">DMA_ADDR_INCREMENT_DISABLE</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_32BIT</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_32BIT</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_32BIT</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">dst_width</span> <span class="o">=</span> <span class="n">DMA_TRANSFER_WIDTH_32BIT</span><span class="p">;</span>
<span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_burst_size</span> <span class="o">=</span> <span class="n">DMA_BURST_4BYTE</span><span class="p">;</span> <span class="n">DMA_DEV</span><span class="p">(</span><span class="n">dma_ch2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">src_burst_size</span> <span class="o">=</span> <span class="n">DMA_BURST_4BYTE</span><span class="p">;</span>
@ -554,7 +572,7 @@
</ul> </ul>
<div class="highlight-bash notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span> <div class="highlight-bash notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span> $ <span class="nb">cd</span> &lt;sdk_path&gt;/bl_mcu_sdk <span class="normal">2</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span> $ <span class="nb">cd</span> &lt;sdk_path&gt;/bl_mcu_sdk
$ make <span class="nv">BOARD</span><span class="o">=</span>bl706_avb <span class="nv">APP</span><span class="o">=</span>i2s_play_form_record $ make <span class="nv">BOARD</span><span class="o">=</span>bl706_iot <span class="nv">APP</span><span class="o">=</span>i2s_play_form_record
</pre></div> </pre></div>
</td></tr></table></div> </td></tr></table></div>
<ul class="simple"> <ul class="simple">

View File

@ -217,12 +217,23 @@
</div></blockquote> </div></blockquote>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">3.1.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.1.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>本 demo 基于BL706_IOT开发板连接方式如下</p> <p>本 demo 基于BL706_IOT开发板连接方式如下</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">GPIO</span> <span class="n">function</span> <span class="n">GPIO</span> <span class="n">pin</span> <table class="colwidths-given docutils align-default">
<span class="o">----------------------------------</span> <colgroup>
<span class="n">PWM_CH2</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO22</span> <col style="width: 50%" />
</pre></div> <col style="width: 50%" />
</div> </colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>GPIO function</p></th>
<th class="head"><p>GPIO pin</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>PWM_CH2</p></td>
<td><p>GPIO22</p></td>
</tr>
</tbody>
</table>
<div class="figure align-default"> <div class="figure align-default">
<img alt="" src="../../../_images/blink_breath_sch1.png" /> <img alt="" src="../../../_images/blink_breath_sch1.png" />
</div> </div>

View File

@ -248,15 +248,32 @@
</div> </div>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">3.2.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.2.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>本 demo 基于BL706_IOT开发板连接方式如下</p> <p>本 demo 基于BL706_IOT开发板连接方式如下</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">GPIO</span> <span class="n">function</span> <span class="n">GPIO</span> <span class="n">pin</span> <table class="colwidths-given docutils align-default">
<span class="o">----------------------------------</span> <colgroup>
<span class="n">PWM_CH0</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO10</span> <col style="width: 50%" />
<span class="n">PWM_CH1</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO11</span> <col style="width: 50%" />
<span class="n">PWM_CH2</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO12</span> </colgroup>
<span class="n">PWM_CH3</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO3</span> <thead>
</pre></div> <tr class="row-odd"><th class="head"><p>GPIO function</p></th>
</div> <th class="head"><p>GPIO pin</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>PWM_CH0</p></td>
<td><p>GPIO10</p></td>
</tr>
<tr class="row-odd"><td><p>PWM_CH1</p></td>
<td><p>GPIO11</p></td>
</tr>
<tr class="row-even"><td><p>PWM_CH2</p></td>
<td><p>GPIO12</p></td>
</tr>
<tr class="row-odd"><td><p>PWM_CH3</p></td>
<td><p>GPIO3</p></td>
</tr>
</tbody>
</table>
<div class="figure align-default" id="id7"> <div class="figure align-default" id="id7">
<img alt="" src="../../../_images/pwm_step_motor.png" /> <img alt="" src="../../../_images/pwm_step_motor.png" />
<p class="caption"><span class="caption-text">参考电路</span><a class="headerlink" href="#id7" title="永久链接至图片"></a></p> <p class="caption"><span class="caption-text">参考电路</span><a class="headerlink" href="#id7" title="永久链接至图片"></a></p>

View File

@ -214,16 +214,35 @@
<p>本 demo 演示通过 SPI 驱动带 il9431 芯片的TFT 屏显示。</p> <p>本 demo 演示通过 SPI 驱动带 il9431 芯片的TFT 屏显示。</p>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">6.1.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">6.1.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>本 demo 基于 BL706_AVB 开发板,连接方式如下</p> <p>本 demo 基于 BL706_AVB 开发板,连接方式如下:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">GPIO</span> <span class="n">function</span> <span class="n">GPIO</span> <span class="n">pin</span> <table class="colwidths-given docutils align-default">
<span class="o">----------------------------------</span> <colgroup>
<span class="n">LCD_CS</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO10</span> <col style="width: 50%" />
<span class="n">LCD_DC</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO22</span> <col style="width: 50%" />
<span class="n">SPI_SCK</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO19</span> </colgroup>
<span class="n">SPI_MISO</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO20</span> <thead>
<span class="n">SPI_MOSI</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO21</span> <tr class="row-odd"><th class="head"><p>GPIO function</p></th>
</pre></div> <th class="head"><p>GPIO pin</p></th>
</div> </tr>
</thead>
<tbody>
<tr class="row-even"><td><p>LCD_CS</p></td>
<td><p>GPIO10</p></td>
</tr>
<tr class="row-odd"><td><p>LCD_DC</p></td>
<td><p>GPIO22</p></td>
</tr>
<tr class="row-even"><td><p>SPI_SCK</p></td>
<td><p>GPIO19</p></td>
</tr>
<tr class="row-odd"><td><p>SPI_MISO</p></td>
<td><p>GPIO20</p></td>
</tr>
<tr class="row-even"><td><p>SPI_MOSI</p></td>
<td><p>GPIO21</p></td>
</tr>
</tbody>
</table>
</div> </div>
<div class="section" id="id2"> <div class="section" id="id2">
<h2><span class="section-number">6.1.2. </span>软件实现<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2> <h2><span class="section-number">6.1.2. </span>软件实现<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
@ -250,7 +269,7 @@
</ul> </ul>
<div class="admonition note"> <div class="admonition note">
<p class="admonition-title">注解</p> <p class="admonition-title">注解</p>
<p>为适配 bl702_avb 硬件, SPI 的 MOSI 和 MISO 默认进行了调换,如果想要恢复默认,修改 <code class="docutils literal notranslate"><span class="pre">drivers/bl702_driver/hal_drv/default_config/spi_config.h</span></code><code class="docutils literal notranslate"><span class="pre">SPI_SWAP_ENABLE</span></code> 为 0</p> <p>为适配 bl702_avb 硬件, SPI 的 MOSI 和 MISO 默认进行了调换,如果想要恢复默认,修改 <code class="docutils literal notranslate"><span class="pre">bsp/board/bl706_avb/pinmux_config.h</span></code><code class="docutils literal notranslate"><span class="pre">pin_swap_enable</span></code> 为 0</p>
</div> </div>
<div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> <div class="highlight-C notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span> <span class="normal"> 2</span>

View File

@ -214,13 +214,26 @@
<p>本 demo 基于 UART 外设轮询发送、接收 FIFO 中断模式编写。</p> <p>本 demo 基于 UART 外设轮询发送、接收 FIFO 中断模式编写。</p>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">2.1.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">2.1.1. </span>硬件连接<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>本 demo 基于 BL706_IOT 开发板,连接方式如下</p> <p>本 demo 基于 BL706_IOT 开发板,连接方式如下:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">GPIO</span> <span class="n">function</span> <span class="n">GPIO</span> <span class="n">pin</span> <table class="colwidths-given docutils align-default">
<span class="o">----------------------------------</span> <colgroup>
<span class="n">UART0_TX</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO14</span> <col style="width: 50%" />
<span class="n">UART0_RX</span> <span class="o">&lt;--&gt;</span> <span class="n">GPIO15</span> <col style="width: 50%" />
</pre></div> </colgroup>
</div> <thead>
<tr class="row-odd"><th class="head"><p>GPIO function</p></th>
<th class="head"><p>GPIO pin</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>UART0_TX</p></td>
<td><p>GPIO14</p></td>
</tr>
<tr class="row-odd"><td><p>UART0_RX</p></td>
<td><p>GPIO15</p></td>
</tr>
</tbody>
</table>
</div> </div>
<div class="section" id="id2"> <div class="section" id="id2">
<h2><span class="section-number">2.1.2. </span>软件实现<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2> <h2><span class="section-number">2.1.2. </span>软件实现<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@ -21,10 +21,12 @@ DMA 设备结构体定义
struct device parent; struct device parent;
uint8_t id; uint8_t id;
uint8_t ch; uint8_t ch;
uint8_t direction;
uint8_t transfer_mode; uint8_t transfer_mode;
uint8_t direction;
uint32_t src_req; uint32_t src_req;
uint32_t dst_req; uint32_t dst_req;
uint8_t src_addr_inc;
uint8_t dst_addr_inc;
uint8_t src_burst_size; uint8_t src_burst_size;
uint8_t dst_burst_size; uint8_t dst_burst_size;
uint8_t src_width; uint8_t src_width;
@ -35,16 +37,25 @@ DMA 设备结构体定义
- **parent** 继承父类属性 - **parent** 继承父类属性
- **id** DMA id号默认0当前只有一个DMA - **id** DMA id号默认0当前只有一个DMA
- **ch** 通道号 - **ch** 通道号
- **direction** 传输方向
- **transfer_mode** 传输模式 - **transfer_mode** 传输模式
- **direction** 传输方向
- **src_req** 源请求 - **src_req** 源请求
- **dst_req** 目标请求 - **dst_req** 目标请求
- **src_addr_inc** 源地址自增
- **dst_addr_inc** 目标地址自增
- **src_burst_size** 源突发字节数 - **src_burst_size** 源突发字节数
- **dst_burst_size** 目标突发字节数 - **dst_burst_size** 目标突发字节数
- **src_width** 源传输位宽 - **src_width** 源传输位宽
- **dst_width** 目标传输位宽 - **dst_width** 目标传输位宽
- **lli_cfg** 用来存储dma通道的一些信息用户不用管 - **lli_cfg** 用来存储dma通道的一些信息用户不用管
``transfer_mode`` 提供以下类型
.. code-block:: C
#define DMA_LLI_ONCE_MODE 0
#define DMA_LLI_CYCLE_MODE 1
``direction`` 提供以下类型 ``direction`` 提供以下类型
.. code-block:: C .. code-block:: C
@ -56,13 +67,6 @@ DMA 设备结构体定义
DMA_PERIPH_TO_PERIPH, /*!< DMA transfer tyep:peripheral to peripheral */ DMA_PERIPH_TO_PERIPH, /*!< DMA transfer tyep:peripheral to peripheral */
}dma_transfer_dir_type; }dma_transfer_dir_type;
``transfer_mode`` 提供以下类型
.. code-block:: C
#define DMA_LLI_ONCE_MODE 0
#define DMA_LLI_CYCLE_MODE 1
``src_req`` 提供以下类型 ``src_req`` 提供以下类型
.. code-block:: C .. code-block:: C
@ -115,6 +119,20 @@ DMA 设备结构体定义
#define DMA_REQUEST_USB_EP6 0x0000001E /*!< DMA request peripheral:USB EP6*/ #define DMA_REQUEST_USB_EP6 0x0000001E /*!< DMA request peripheral:USB EP6*/
#define DMA_REQUEST_USB_EP7 0x0000001F /*!< DMA request peripheral:USB EP7 */ #define DMA_REQUEST_USB_EP7 0x0000001F /*!< DMA request peripheral:USB EP7 */
``src_addr_inc`` 提供以下类型
.. code-block:: C
#define DMA_ADDR_INCREMENT_DISABLE 0 /*!< Addr increment mode disable */
#define DMA_ADDR_INCREMENT_ENABLE 1 /*!< Addr increment mode enable */
``dst_addr_inc`` 提供以下类型
.. code-block:: C
#define DMA_ADDR_INCREMENT_DISABLE 0 /*!< Addr increment mode disable */
#define DMA_ADDR_INCREMENT_ENABLE 1 /*!< Addr increment mode enable */
``src_burst_size`` 提供以下类型 ``src_burst_size`` 提供以下类型
.. code-block:: C .. code-block:: C
@ -162,13 +180,17 @@ DMA 设备参数配置表
#define DMA0_CH0_CONFIG \ #define DMA0_CH0_CONFIG \
{ \ { \
.id = 0, \ .id = 0, \
.ch = 0,\ .ch = 7, \
.direction = DMA_MEMORY_TO_MEMORY, \ .direction = DMA_MEMORY_TO_MEMORY, \
.transfer_mode = DMA_LLI_ONCE_MODE, \ .transfer_mode = DMA_LLI_ONCE_MODE, \
.src_req = DMA_REQUEST_NONE, \ .src_req = DMA_REQUEST_NONE, \
.dst_req = DMA_REQUEST_NONE, \ .dst_req = DMA_REQUEST_NONE, \
.src_width = DMA_TRANSFER_WIDTH_32BIT , \ .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.dst_width = DMA_TRANSFER_WIDTH_32BIT , \ .dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.src_burst_size = DMA_BURST_1BYTE, \
.dst_burst_size = DMA_BURST_1BYTE, \
.src_width = DMA_TRANSFER_WIDTH_8BIT, \
.dst_width = DMA_TRANSFER_WIDTH_8BIT, \
} }
#endif #endif
#endif #endif

View File

@ -6,8 +6,18 @@
examples 的目录结构 examples 的目录结构
------------------------ ------------------------
在 ``bl_mcu_sdk/examples`` 目录下通常存在两层子目录,第一层通常为同一类外设相关的 case 集,一般使用外设名称,第二层通常为该外设具体的某一种测试例程,该目录下通常还包含一个 ``CMakeList.txt`` 以及该 case 相关的源码 在 ``bl_mcu_sdk/examples`` 目录下通常存在两层子目录,第一层通常为同一类外设相关的 case 集,一般使用外设名称,第二层通常为该外设具体的某一种测试例程,该目录下通常还包含一个 ``CMakeList.txt`` 以及该 case 相关的源码
可供用户使用的 cmake 变量如下:
- mains:main 函数入口
- TARGET_REQUIRED_SRCS:没有编译成 lib 的外部 c 文件
- TARGET_REQUIRED_PRIVATE_INCLUDE:外部 c 文件需要的头文件路径
- TARGET_REQUIRED_LIBS:目标需要的 lib 库名称,可以是 cmake 通过 generate_bin 生成的 target 或者外部导入的 lib 库
- TARGET_REQUIRED_PRIVATE_OPTIONS:私有 c flag
- LINKER_SCRIPT:重新定义链接脚本
- GLOBAL_C_FLAGS:全局 c flag
- GLOBAL_LD_FLAGS:全局 ld flag
添加单个源文件工程 添加单个源文件工程
------------------------ ------------------------
@ -131,7 +141,7 @@ examples 的目录结构
.. code-block:: bash .. code-block:: bash
:linenos: :linenos:
make BOARD=bl706_iot APP=gpio_case SUPPORT_FREERTOS=y make BOARD=bl706_iot APP=gpio_case
添加新工程并设置私有编译选项gcc option 添加新工程并设置私有编译选项gcc option
------------------------------------------- -------------------------------------------

View File

@ -68,5 +68,6 @@ BL MCU SDK 将为您提供博流 BL70X 系列 MCU 开发的全方位支持。
samples/advance samples/lowpower_demo samples/advance samples/lowpower_demo
samples/advance samples/boot2_iap_info samples/advance samples/boot2_iap_info
samples/advance samples/ble_scan_demo samples/advance samples/ble_scan_demo
samples/advance samples/ble_pds
samples/advance samples/emac/index samples/advance samples/emac/index

View File

@ -0,0 +1,132 @@
BLE PDS31
=======================
本 demo 基于 **bl702** 演示 **ble PDS31**
准备工具
-----------------------
- 一块 bl702 开发板 + 手机 app
软件实现
-----------------------
BLE PDS31 软件实现
^^^^^^^^^^^^^^^^^^^^^^^^
- 软件代码见 ``examples/ble/ble_pds``
.. code-block:: C
:linenos:
#define configUSE_TICKLESS_IDLE 1
- BLE PDS31 function 需要开启freertos tickless 功能 见 ``components/freertos/portable/gcc/risc-v/bl702/FreeRTOSConfig.h``
.. code-block:: C
:linenos:
int ble_start_adv(void)
{
struct bt_le_adv_param adv_param = {
//options:3, connectable undirected, adv one time
.options = 3, \
.interval_min = 0x280, \
.interval_max = 0x280, \
};
char *adv_name = "BL_PDS_TEST_01"; // This name must be the same as adv_name in ble_central
uint8_t data[1] = {(BT_LE_AD_LIMITED | BT_LE_AD_NO_BREDR)};
uint8_t data_uuid[2] = {0x12, 0x18};//0x1812
uint8_t data_appearance[2] = {0x80, 0x01};//0x0180
uint8_t data_manu[4] = {0x71, 0x01, 0x04, 0x13};
struct bt_data adv_data[] = {
BT_DATA(BT_DATA_FLAGS, data, 1),
BT_DATA(BT_DATA_UUID16_ALL, data_uuid, sizeof(data_uuid)),
BT_DATA(BT_DATA_GAP_APPEARANCE, data_appearance, sizeof(data_appearance)),
BT_DATA(BT_DATA_NAME_COMPLETE, adv_name, strlen(adv_name)),
BT_DATA(BT_DATA_MANUFACTURER_DATA, data_manu, sizeof(data_manu))
};
return bt_le_adv_start(&adv_param, adv_data, ARRAY_SIZE(adv_data), NULL, 0);
}
- 在 ``ble_start_adv`` 函数中, ``adv_name`` 设置这次广播的设备名称,设备就开始进行广播
.. code-block:: C
:linenos:
void bt_enable_cb(int err)
{
MSG("ble_tp_init\r\n");
ble_tp_init();
#if defined(CONFIG_BT_OAD_SERVER)
oad_service_enable(app_check_oad);
#endif
MSG("Start adv\r\n");
ble_start_adv();
MSG("Advertising.........\r\n");
pds_start = true;
}
- 广播开始之后, 在 ``bt_enable_cb`` 中, ``pds_start = true`` 是允许进入PDS31
- 连接成功后,在 ``ble_tp_connected`` 函数, ``pds_start = false`` 会关闭pds31.
- 如果想要连接成功后继续进入PDS31需要板子上带有external xtal 32K. 配置以下设置, 当connection interval > 100ms 的时候会进入PDS31.
.. code-block:: C
:linenos:
#define XTAL_32K_TYPE INTERNAL_XTAL_32K
- pds31 唤醒时钟源配置,见 ``bsp/board/bl706_iot/clock_config.h``
.. code-block:: C
:linenos:
#define BLE_CONN_PDS 1
- 连接成功后进入PDS31配置见 ``examples/ble/ble_pds/ble_peripheral_tp_server.c``
编译和烧录
-----------------------------
- **命令行编译**
.. code-block:: bash
:linenos:
$ cd <sdk_path>/bl_mcu_sdk
$ make build BOARD=bl706_iot SUPPORT_BLECONTROLLER_LIB=m0s1p SUPPORT_FAST_WAKEUP=y SUPPORT_HW_SEC_ENG_DISABLE=y
- **烧录**
详见 :ref:`bl_dev_cube`
实验现象
-----------------------------
- **手机连接 bl702**
.. figure:: img/phone_pds_connect.png
:alt:
- 连接成功,如下图所示
.. figure:: img/phone_connected.png
:alt:
- 进入PDS31 显示
.. figure:: img/pds31.png
:alt:

View File

@ -11,17 +11,22 @@ FatFs 文件系统读写(SD 卡)
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_AVB 开发板,连接方式如下 本 demo 基于 BL706_AVB 开发板,连接方式如下
:: .. list-table::
:widths: 30 30
GPIO function GPIO pin :header-rows: 1
----------------------------------
SD_CS <--> GPIO10
SPI_SCK <--> GPIO19
SPI_MISO <--> GPIO20
SPI_MOSI <--> GPIO21
* - GPIO function
- GPIO pin
* - SD_CS
- GPIO10
* - SPI_SCK
- GPIO19
* - SPI_MISO
- GPIO20
* - SPI_MOSI
- GPIO21
软件实现 软件实现
----------------------------- -----------------------------
@ -88,6 +93,10 @@ FatFs 文件系统读写(SD 卡)
.transfer_mode = DMA_LLI_ONCE_MODE, \ .transfer_mode = DMA_LLI_ONCE_MODE, \
.src_req = DMA_REQUEST_NONE, \ .src_req = DMA_REQUEST_NONE, \
.dst_req = DMA_REQUEST_SPI0_TX, \ .dst_req = DMA_REQUEST_SPI0_TX, \
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \
.src_burst_size = DMA_BURST_1BYTE, \
.dst_burst_size = DMA_BURST_1BYTE, \
.src_width = DMA_TRANSFER_WIDTH_8BIT, \ .src_width = DMA_TRANSFER_WIDTH_8BIT, \
.dst_width = DMA_TRANSFER_WIDTH_8BIT, \ .dst_width = DMA_TRANSFER_WIDTH_8BIT, \
} }
@ -104,6 +113,10 @@ FatFs 文件系统读写(SD 卡)
.transfer_mode = DMA_LLI_ONCE_MODE, \ .transfer_mode = DMA_LLI_ONCE_MODE, \
.src_req = DMA_REQUEST_SPI0_RX, \ .src_req = DMA_REQUEST_SPI0_RX, \
.dst_req = DMA_REQUEST_NONE, \ .dst_req = DMA_REQUEST_NONE, \
.src_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \
.dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.src_burst_size = DMA_BURST_1BYTE, \
.dst_burst_size = DMA_BURST_1BYTE, \
.src_width = DMA_TRANSFER_WIDTH_8BIT, \ .src_width = DMA_TRANSFER_WIDTH_8BIT, \
.dst_width = DMA_TRANSFER_WIDTH_8BIT, \ .dst_width = DMA_TRANSFER_WIDTH_8BIT, \
} }

View File

@ -12,15 +12,18 @@ Shell 命令行调试
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_IOT 开发板,连接方式如下 本 demo 基于 BL706_IOT 开发板,连接方式如下
:: .. list-table::
:widths: 30 30
GPIO function GPIO pin :header-rows: 1
----------------------------------
UART0_TX <--> GPIO14
UART0_RX <--> GPIO15
* - GPIO function
- GPIO pin
* - UART0_TX
- GPIO14
* - UART0_RX
- GPIO15
软件实现 软件实现
------------------------- -------------------------

View File

@ -6,7 +6,7 @@ USB Device 应用
:maxdepth: 1 :maxdepth: 1
CDC - 虚拟串口<usbd_cdc> CDC - 虚拟串口<usbd_cdc>
MSC - U 盘<usbd_msc> MSC - U 盘升级<usbd_msc>
HID - 键盘&鼠标<usbd_hid> HID - 键盘&鼠标<usbd_hid>
VIDEO - 摄像头<usbd_video> VIDEO - 摄像头<usbd_video>
AUDIO - 麦克风<usbd_audio> AUDIO - 麦克风<usbd_audio>

View File

@ -7,14 +7,14 @@ USB大容量存储设备类The USB mass storage device class是一种计
MSC 协议介绍参考 `USB 官方文档 <https://www.usb.org/documents>`_。 MSC 协议介绍参考 `USB 官方文档 <https://www.usb.org/documents>`_。
bootloader 我们将其编译后烧录在 0x2000 开始的物理地址,工具默认也是这个地址。 bootloader 我们将其编译后烧录在 flash 0x2000 开始的物理地址,工具默认也是这个地址。
.. figure:: img/usb_msc2.png
我们使用 flash 的 48K开始的地方用来模拟 u 盘u 盘大小为 256K64 个扇区,每个扇区 4KB ),根据文件系统格式,可以知道,数据的地址在 u 盘的第 10 个扇区,也即 APP 的入口地址。BootLoader 与 APP 分区表如下:
.. figure:: img/usb_msc.png .. figure:: img/usb_msc.png
我们使用 flash 物理地址 0x0000c000 (48K) 开始的地方,用来模拟 u 盘u 盘大小为 256K64 个扇区,每个扇区 4KB ),根据文件系统格式,可以知道,数据的地址在 u 盘的第 10 个扇区0x16000也即 APP 的入口地址。BootLoader 与 APP 分区表如下:
.. figure:: img/usb_msc2.png
准备工具 准备工具
----------------------- -----------------------

View File

@ -25,27 +25,44 @@ BL706 AVB + GC0308摄像头模块 + windows 相机
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_AVB 开发板,连接方式如下 本 demo 基于 BL706_AVB 开发板,连接方式如下
:: .. list-table::
:widths: 30 30
:header-rows: 1
GPIO function GPIO pin * - GPIO function
---------------------------------- - GPIO pin
CAM <--> GPIO0 * - CAM
CAM <--> GPIO1 - GPIO0
CAM <--> GPIO2 * - CAM
CAM <--> GPIO3 - GPIO1
CAM <--> GPIO4 * - CAM
CAM <--> GPIO5 - GPIO2
CAM <--> GPIO6 * - CAM
USB_DP <--> GPIO7 - GPIO3
USB_DM <--> GPIO8 * - CAM
CLK_OUT <--> GPIO9 - GPIO4
I2C_SCL <--> GPIO11 * - CAM
I2C_SDA <--> GPIO16 - GPIO5
CAM <--> GPIO29 * - CAM
CAM <--> GPIO30 - GPIO6
CAM <--> GPIO31 * - USB_DP
- GPIO7
* - USB_DM
- GPIO8
* - CLK_OUT
- GPIO9
* - I2C_SCL
- GPIO11
* - I2C_SDA
- GPIO16
* - CAM
- GPIO29
* - CAM
- GPIO30
* - CAM
- GPIO31
.. note:: 注意 706 AVB FUN1 的跳冒不要接,默认连接到摄像头引脚,如果接了则连接到了 i2s codec .. note:: 注意 706 AVB FUN1 的跳冒不要接,默认连接到摄像头引脚,如果接了则连接到了 i2s codec
@ -116,6 +133,10 @@ BL706 AVB + GC0308摄像头模块 + windows 相机
.transfer_mode = DMA_LLI_ONCE_MODE, \ .transfer_mode = DMA_LLI_ONCE_MODE, \
.src_req = DMA_REQUEST_NONE, \ .src_req = DMA_REQUEST_NONE, \
.dst_req = DMA_REQUEST_UART1_TX, \ .dst_req = DMA_REQUEST_UART1_TX, \
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \
.src_burst_size = DMA_BURST_1BYTE, \
.dst_burst_size = DMA_BURST_1BYTE, \
.src_width = DMA_TRANSFER_WIDTH_8BIT, \ .src_width = DMA_TRANSFER_WIDTH_8BIT, \
.dst_width = DMA_TRANSFER_WIDTH_8BIT, \ .dst_width = DMA_TRANSFER_WIDTH_8BIT, \
} }
@ -128,7 +149,16 @@ BL706 AVB + GC0308摄像头模块 + windows 相机
.. code-block:: C .. code-block:: C
:linenos: :linenos:
DMA_DEV(dma_ch2)->direction = DMA_MEMORY_TO_PERIPH;
DMA_DEV(dma_ch2)->transfer_mode = DMA_LLI_ONCE_MODE;
DMA_DEV(dma_ch2)->src_req = DMA_REQUEST_NONE;
DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_USB_EP1; DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_USB_EP1;
DMA_DEV(dma_ch2)->src_addr_inc = DMA_ADDR_INCREMENT_ENABLE;
DMA_DEV(dma_ch2)->dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE;
DMA_DEV(dma_ch2)->src_burst_size = DMA_BURST_16BYTE;
DMA_DEV(dma_ch2)->dst_burst_size = DMA_BURST_1BYTE;
DMA_DEV(dma_ch2)->src_width = DMA_TRANSFER_WIDTH_8BIT;
DMA_DEV(dma_ch2)->dst_width = DMA_TRANSFER_WIDTH_8BIT;
device_open(dma_ch2, 0); device_open(dma_ch2, 0);
.. code-block:: C .. code-block:: C

View File

@ -5,13 +5,16 @@ ADC - 按键检测电压
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_AVB 开发板: 本 demo 基于 BL706_AVB 开发板,连接方式如下:
:: .. list-table::
:widths: 30 30
:header-rows: 1
GPIO function GPIO pin * - GPIO function
---------------------------------- - GPIO pin
ADC CH8 <--> GPIO18 * - ADC CH8
- GPIO18
**分压电路:** **分压电路:**

View File

@ -27,6 +27,10 @@ DMA - RAM间数据搬运
.transfer_mode = DMA_LLI_ONCE_MODE, \ .transfer_mode = DMA_LLI_ONCE_MODE, \
.src_req = DMA_REQUEST_NONE, \ .src_req = DMA_REQUEST_NONE, \
.dst_req = DMA_REQUEST_NONE, \ .dst_req = DMA_REQUEST_NONE, \
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
.src_burst_size = DMA_BURST_1BYTE, \
.dst_burst_size = DMA_BURST_1BYTE, \
.src_width = DMA_TRANSFER_WIDTH_32BIT, \ .src_width = DMA_TRANSFER_WIDTH_32BIT, \
.dst_width = DMA_TRANSFER_WIDTH_32BIT, \ .dst_width = DMA_TRANSFER_WIDTH_32BIT, \
} }

View File

@ -6,17 +6,22 @@ GPIO 输出 - 流水灯
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_IOT 开发板,连接方式如下 本 demo 基于 BL706_IOT 开发板,连接方式如下
:: .. list-table::
:widths: 30 30
GPIO function GPIO pin :header-rows: 1
----------------------------------
D0 <--> GPIO22
D1 <--> GPIO29
D2 <--> GPIO30
D3 <--> GPIO31
* - GPIO function
- GPIO pin
* - D0
- GPIO22
* - D1
- GPIO29
* - D2
- GPIO30
* - D3
- GPIO31
.. figure:: img/blink_breath_sch.png .. figure:: img/blink_breath_sch.png
:alt: :alt:

View File

@ -6,13 +6,16 @@ GPIO 中断 - 按键检测
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于BL706_IOT开发板自行添加按键电路连接方式如下 本 demo 基于BL706_IOT开发板自行添加按键电路连接方式如下
:: .. list-table::
:widths: 30 30
:header-rows: 1
GPIO function GPIO pin * - GPIO function
---------------------------------- - GPIO pin
SW1 <--> GPIO11 * - SW1
- GPIO11
.. figure:: img/button_sch.png .. figure:: img/button_sch.png
:alt: :alt:

View File

@ -4,15 +4,18 @@ I2C - AT24CXX 读写
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_IOT 开发板,自行添加 AT24CXX 电路,连接方式如下 本 demo 基于 BL706_IOT 开发板,自行添加 AT24CXX 电路,连接方式如下
:: .. list-table::
:widths: 30 30
GPIO function GPIO pin :header-rows: 1
----------------------------------
I2C_SCL <--> GPIO11
I2C_SDA <--> GPIO16
* - GPIO function
- GPIO pin
* - I2C_SCL
- GPIO11
* - I2C_SDA
- GPIO16
软件实现 软件实现
----------------------------- -----------------------------

View File

@ -33,6 +33,12 @@ I2S - 使用DMIC配合audio cube实现在线录音
* - UART0_RX * - UART0_RX
- GPIO14 - GPIO14
如果使用的是BL706_AVB板请确保FUN1 FUN2两个跳帽处于短接的状态,如下图所示
.. figure:: img/tiaomao.png
:alt:
本 demo 用到的内部外设资源如下: 本 demo 用到的内部外设资源如下:
.. list-table:: .. list-table::
@ -59,21 +65,20 @@ I2S - 使用DMIC配合audio cube实现在线录音
本文档不再详细功能实现的细节,仅概述功能过程,可以参考 I2S 与 UART 相关文档。 本文档不再详细功能实现的细节,仅概述功能过程,可以参考 I2S 与 UART 相关文档。
配置 ``I2S, I2C, CLK_OUT(MCLK)`` 相关复用引脚,见 ``bsp/board/bl706_avb/pinmux_config.h`` 中的宏定义选项: 配置 ``I2S, I2C, CLK_OUT(MCLK)`` 相关复用引脚,见 ``bsp/board/bl706_iot/pinmux_config.h`` 中的宏定义选项:
.. code-block:: C .. code-block:: C
:linenos: :linenos:
#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO3_FUNC GPIO_FUN_I2S #define CONFIG_GPIO3_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO4_FUNC GPIO_FUN_I2S #define CONFIG_GPIO4_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S #define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C #define CONFIG_GPIO11_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO14_FUNC GPIO_FUN_UART0_TX #define CONFIG_GPIO14_FUNC GPIO_FUN_UART0_TX
#define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX #define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S
编译和烧录 编译和烧录
----------------------------- -----------------------------
@ -90,7 +95,7 @@ I2S - 使用DMIC配合audio cube实现在线录音
:linenos: :linenos:
$ cd <sdk_path>/bl_mcu_sdk $ cd <sdk_path>/bl_mcu_sdk
$ make BOARD=bl706_avb APP=audio_cube $ make BOARD=bl706_iot APP=audio_cube
- **烧录** - **烧录**
详见 :ref:`bl_dev_cube` 详见 :ref:`bl_dev_cube`

View File

@ -30,6 +30,12 @@ I2S - flash 内置音频播放
* - I2C_SDA * - I2C_SDA
- GPIO11 - GPIO11
如果使用的是BL706_AVB板请确保FUN1 FUN2两个跳帽处于短接的状态,如下图所示
.. figure:: img/tiaomao.png
:alt:
本 demo 用到的内部外设资源如下: 本 demo 用到的内部外设资源如下:
.. list-table:: .. list-table::
@ -59,13 +65,15 @@ I2S - flash 内置音频播放
.. code-block:: C .. code-block:: C
:linenos: :linenos:
#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO3_FUNC GPIO_FUN_I2S #define CONFIG_GPIO3_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO4_FUNC GPIO_FUN_I2S #define CONFIG_GPIO4_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO14_FUNC GPIO_FUN_UART0_TX
#define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S #define CONFIG_GPIO29_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S #define CONFIG_GPIO30_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
配置 ES8388 的参数,初始化 ES8388 ,其中会用到 I2C 外设,具体过程可见 ``bsp/bsp_common/es8388/es8388.c`` 配置 ES8388 的参数,初始化 ES8388 ,其中会用到 I2C 外设,具体过程可见 ``bsp/bsp_common/es8388/es8388.c``
@ -111,7 +119,7 @@ I2S 的配置与使能:
- 先调用 ``i2s_register`` 函数注册 ``I2S`` 设备 - 先调用 ``i2s_register`` 函数注册 ``I2S`` 设备
- 然后通过 ``find`` 函数找到设备对应的句柄,保存于 ``i2s`` 中 - 然后通过 ``find`` 函数找到设备对应的句柄,保存于 ``i2s`` 中
- 最后填写配置参数后,使用 ``device_open`` 来打开 ``I2S`` 设备 - 最后填写配置参数后,使用 ``device_open`` 来打开 ``I2S`` 设备
- 如果不填写配置参数,会默认使用 ``bsp/board/bl706_avb/peripheral_config.h`` 中预设的参数 - 如果不填写配置参数,会默认使用 ``bsp/board/bl706_iot/peripheral_config.h`` 中预设的参数
.. code-block:: C .. code-block:: C
:linenos: :linenos:
@ -144,8 +152,12 @@ DMA 的配置与使能
DMA_DEV(dma_ch2)->transfer_mode = DMA_LLI_CYCLE_MODE; DMA_DEV(dma_ch2)->transfer_mode = DMA_LLI_CYCLE_MODE;
DMA_DEV(dma_ch2)->src_req = DMA_REQUEST_NONE; DMA_DEV(dma_ch2)->src_req = DMA_REQUEST_NONE;
DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_I2S_TX; DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_I2S_TX;
DMA_DEV(dma_ch2)->src_addr_inc = DMA_ADDR_INCREMENT_ENABLE;
DMA_DEV(dma_ch2)->dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE;
DMA_DEV(dma_ch2)->src_width = DMA_TRANSFER_WIDTH_16BIT; DMA_DEV(dma_ch2)->src_width = DMA_TRANSFER_WIDTH_16BIT;
DMA_DEV(dma_ch2)->dst_width = DMA_TRANSFER_WIDTH_16BIT; DMA_DEV(dma_ch2)->dst_width = DMA_TRANSFER_WIDTH_16BIT;
DMA_DEV(dma_ch2)->src_burst_size = DMA_BURST_4BYTE;
DMA_DEV(dma_ch2)->dst_burst_size = DMA_BURST_4BYTE;
device_open(dma_ch2, 0); device_open(dma_ch2, 0);
/* connect i2s device and dma device */ /* connect i2s device and dma device */
@ -183,7 +195,7 @@ DMA 的配置与使能
:linenos: :linenos:
$ cd <sdk_path>/bl_mcu_sdk $ cd <sdk_path>/bl_mcu_sdk
$ make BOARD=bl706_avb APP=i2s_play_form_flash $ make BOARD=bl706_iot APP=i2s_play_form_flash
- **烧录** - **烧录**
详见 :ref:`bl_dev_cube` 详见 :ref:`bl_dev_cube`

View File

@ -30,6 +30,11 @@ I2S - 录音回环播放
* - I2C_SDA * - I2C_SDA
- GPIO11 - GPIO11
如果使用的是BL706_AVB板请确保FUN1 FUN2两个跳帽处于短接的状态,如下图所示
.. figure:: img/tiaomao.png
:alt:
- 本 demo 用到的内部外设资源如下: - 本 demo 用到的内部外设资源如下:
.. list-table:: .. list-table::
@ -56,18 +61,20 @@ I2S - 录音回环播放
- 软件代码见 ``examples/i2s/i2s_play_form_record`` - 软件代码见 ``examples/i2s/i2s_play_form_record``
- 配置 ``I2S, I2C, CLK_OUT(MCLK)`` 相关复用引脚,见 ``bsp/board/bl706_iot/pinmux_config.h`` 中的宏定义选项: 配置 ``I2S, I2C, CLK_OUT(MCLK)`` 相关复用引脚,见 ``bsp/board/bl706_iot/pinmux_config.h`` 中的宏定义选项:
.. code-block:: C .. code-block:: C
:linenos: :linenos:
#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO3_FUNC GPIO_FUN_I2S #define CONFIG_GPIO3_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO4_FUNC GPIO_FUN_I2S #define CONFIG_GPIO4_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO6_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO14_FUNC GPIO_FUN_UART0_TX
#define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO29_FUNC GPIO_FUN_I2S #define CONFIG_GPIO29_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO30_FUNC GPIO_FUN_I2S #define CONFIG_GPIO30_FUNC GPIO_FUN_I2S
#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
- 配置 ES8388 的参数,初始化 ES8388 ,其中会用到 I2C 外设,具体过程可见 ``bsp/bsp_common/es8388/es8388.c`` - 配置 ES8388 的参数,初始化 ES8388 ,其中会用到 I2C 外设,具体过程可见 ``bsp/bsp_common/es8388/es8388.c``
@ -115,7 +122,7 @@ I2S 的配置与使能:
- 先调用 ``i2s_register`` 函数注册 ``I2S`` 设备 - 先调用 ``i2s_register`` 函数注册 ``I2S`` 设备
- 然后通过 ``find`` 函数找到设备对应的句柄,保存于 ``i2s`` 中 - 然后通过 ``find`` 函数找到设备对应的句柄,保存于 ``i2s`` 中
- 最后填写配置参数后,使用 ``device_open`` 来打开 ``I2S`` 设备 - 最后填写配置参数后,使用 ``device_open`` 来打开 ``I2S`` 设备
- 如果不填写配置参数,会默认使用 ``bsp/board/bl706_avb/peripheral_config.h`` 中预设的参数 - 如果不填写配置参数,会默认使用 ``bsp/board/bl706_iot/peripheral_config.h`` 中预设的参数
.. code-block:: C .. code-block:: C
:linenos: :linenos:
@ -151,10 +158,12 @@ DMA 的配置与使能
DMA_DEV(dma_ch3)->transfer_mode = DMA_LLI_ONCE_MODE; DMA_DEV(dma_ch3)->transfer_mode = DMA_LLI_ONCE_MODE;
DMA_DEV(dma_ch3)->src_req = DMA_REQUEST_I2S_RX; DMA_DEV(dma_ch3)->src_req = DMA_REQUEST_I2S_RX;
DMA_DEV(dma_ch3)->dst_req = DMA_REQUEST_NONE; DMA_DEV(dma_ch3)->dst_req = DMA_REQUEST_NONE;
DMA_DEV(dma_ch3)->src_width = DMA_TRANSFER_WIDTH_32BIT; DMA_DEV(dma_ch3)->src_addr_inc = DMA_ADDR_INCREMENT_DISABLE;
DMA_DEV(dma_ch3)->dst_width = DMA_TRANSFER_WIDTH_32BIT; DMA_DEV(dma_ch3)->dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE;
DMA_DEV(dma_ch3)->src_burst_size = DMA_BURST_4BYTE; DMA_DEV(dma_ch3)->src_burst_size = DMA_BURST_4BYTE;
DMA_DEV(dma_ch3)->dst_burst_size = DMA_BURST_4BYTE; DMA_DEV(dma_ch3)->dst_burst_size = DMA_BURST_4BYTE;
DMA_DEV(dma_ch3)->src_width = DMA_TRANSFER_WIDTH_32BIT;
DMA_DEV(dma_ch3)->dst_width = DMA_TRANSFER_WIDTH_32BIT;
device_open(dma_ch3, 0); device_open(dma_ch3, 0);
/* connect i2s device and dma device */ /* connect i2s device and dma device */
@ -172,6 +181,8 @@ DMA 的配置与使能
DMA_DEV(dma_ch2)->transfer_mode = DMA_LLI_ONCE_MODE; DMA_DEV(dma_ch2)->transfer_mode = DMA_LLI_ONCE_MODE;
DMA_DEV(dma_ch2)->src_req = DMA_REQUEST_NONE; DMA_DEV(dma_ch2)->src_req = DMA_REQUEST_NONE;
DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_I2S_TX; DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_I2S_TX;
DMA_DEV(dma_ch2)->src_addr_inc = DMA_ADDR_INCREMENT_ENABLE;
DMA_DEV(dma_ch2)->dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE;
DMA_DEV(dma_ch2)->src_width = DMA_TRANSFER_WIDTH_32BIT; DMA_DEV(dma_ch2)->src_width = DMA_TRANSFER_WIDTH_32BIT;
DMA_DEV(dma_ch2)->dst_width = DMA_TRANSFER_WIDTH_32BIT; DMA_DEV(dma_ch2)->dst_width = DMA_TRANSFER_WIDTH_32BIT;
DMA_DEV(dma_ch2)->src_burst_size = DMA_BURST_4BYTE; DMA_DEV(dma_ch2)->src_burst_size = DMA_BURST_4BYTE;
@ -226,7 +237,7 @@ DMA 中断回调函数
:linenos: :linenos:
$ cd <sdk_path>/bl_mcu_sdk $ cd <sdk_path>/bl_mcu_sdk
$ make BOARD=bl706_avb APP=i2s_play_form_record $ make BOARD=bl706_iot APP=i2s_play_form_record
- **烧录** - **烧录**

View File

@ -6,13 +6,16 @@ PWM - 呼吸灯
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于BL706_IOT开发板连接方式如下 本 demo 基于BL706_IOT开发板连接方式如下
:: .. list-table::
:widths: 30 30
:header-rows: 1
GPIO function GPIO pin * - GPIO function
---------------------------------- - GPIO pin
PWM_CH2 <--> GPIO22 * - PWM_CH2
- GPIO22
.. figure:: img/blink_breath_sch.png .. figure:: img/blink_breath_sch.png
:alt: :alt:

View File

@ -42,16 +42,22 @@ PWM - 驱动步进电机
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于BL706_IOT开发板连接方式如下 本 demo 基于BL706_IOT开发板连接方式如下
:: .. list-table::
:widths: 30 30
:header-rows: 1
GPIO function GPIO pin * - GPIO function
---------------------------------- - GPIO pin
PWM_CH0 <--> GPIO10 * - PWM_CH0
PWM_CH1 <--> GPIO11 - GPIO10
PWM_CH2 <--> GPIO12 * - PWM_CH1
PWM_CH3 <--> GPIO3 - GPIO11
* - PWM_CH2
- GPIO12
* - PWM_CH3
- GPIO3
.. figure:: img/pwm_step_motor.png .. figure:: img/pwm_step_motor.png
:alt: :alt:

View File

@ -6,18 +6,24 @@ SPI - TFT LCD 显示
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_AVB 开发板,连接方式如下 本 demo 基于 BL706_AVB 开发板,连接方式如下
:: .. list-table::
:widths: 30 30
GPIO function GPIO pin :header-rows: 1
----------------------------------
LCD_CS <--> GPIO10
LCD_DC <--> GPIO22
SPI_SCK <--> GPIO19
SPI_MISO <--> GPIO20
SPI_MOSI <--> GPIO21
* - GPIO function
- GPIO pin
* - LCD_CS
- GPIO10
* - LCD_DC
- GPIO22
* - SPI_SCK
- GPIO19
* - SPI_MISO
- GPIO20
* - SPI_MOSI
- GPIO21
软件实现 软件实现
----------------------------- -----------------------------
@ -41,7 +47,7 @@ SPI - TFT LCD 显示
- 配置 ``SPI`` 设备复用引脚,见 ``bsp/board/bl706_avb/pinmux_config.h``,,如有改动,请自行修改 - 配置 ``SPI`` 设备复用引脚,见 ``bsp/board/bl706_avb/pinmux_config.h``,,如有改动,请自行修改
.. note:: 为适配 bl702_avb 硬件, SPI 的 MOSI 和 MISO 默认进行了调换,如果想要恢复默认,修改 ``drivers/bl702_driver/hal_drv/default_config/spi_config.h`` 中 ``SPI_SWAP_ENABLE`` 为 0 .. note:: 为适配 bl702_avb 硬件, SPI 的 MOSI 和 MISO 默认进行了调换,如果想要恢复默认,修改 ``bsp/board/bl706_avb/pinmux_config.h`` 中 ``pin_swap_enable`` 为 0
.. code-block:: C .. code-block:: C
:linenos: :linenos:

View File

@ -6,14 +6,18 @@ UART - 数据自收发
硬件连接 硬件连接
----------------------------- -----------------------------
本 demo 基于 BL706_IOT 开发板,连接方式如下 本 demo 基于 BL706_IOT 开发板,连接方式如下
:: .. list-table::
:widths: 30 30
:header-rows: 1
GPIO function GPIO pin * - GPIO function
---------------------------------- - GPIO pin
UART0_TX <--> GPIO14 * - UART0_TX
UART0_RX <--> GPIO15 - GPIO14
* - UART0_RX
- GPIO15
软件实现 软件实现
----------------------------- -----------------------------

Some files were not shown because too many files have changed in this diff Show More