[docs] update api rst

This commit is contained in:
jzlv 2021-07-01 19:35:27 +08:00
parent 21e87ac8ca
commit af049a8ef8
156 changed files with 3156 additions and 508 deletions

View File

@ -1,4 +1,4 @@
# Sphinx build info version 1 # Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: c1a44f4f683944084f04b029ea7630d0 config: 5e2136c8889edd21ef4392d0839f5aa1
tags: 645f666f9bcd5a90fca523b33c5a78b7 tags: 645f666f9bcd5a90fca523b33c5a78b7

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@ -82,7 +82,7 @@ ADC 设备接口全部遵循标准设备驱动管理层提供的接口。
**ADC_register** **ADC_register**
^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
``adc_register`` 用来注册一个 ADC 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 ADC 设备的宏定义。例如定义宏 ``BSP_USING_ADC0`` 方可使用 ``ADC0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``ADC0`` 设备。 ``adc_register`` 用来注册 ADC 设备标准驱动接口,在注册之前需要打开对应 ADC 设备的宏定义。例如定义宏 ``BSP_USING_ADC0`` 方可使用 ``ADC0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``ADC0`` 设备。
.. code-block:: C .. code-block:: C
@ -115,7 +115,7 @@ ADC 设备接口全部遵循标准设备驱动管理层提供的接口。
- dev 设备句柄 - dev 设备句柄
- oflag 设备的打开方式 - oflag 设备的打开方式
- return 错误码0 表示打开成功,其他表示错误 - return 错误码0表示成功其他表示失败
``oflag`` 可以写入以下参数: ``oflag`` 可以写入以下参数:
@ -138,7 +138,7 @@ ADC 设备接口全部遵循标准设备驱动管理层提供的接口。
int device_close(struct device *dev); int device_close(struct device *dev);
- dev 设备句柄 - dev 设备句柄
- return 错误码0 表示关闭成功,其他表示错误 - return 错误码0表示成功其他表示失败
**device_control** **device_control**
^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^

View File

@ -213,7 +213,7 @@ DMA 设备接口全部遵循标准设备驱动管理层提供的接口。并且
**dma_register** **dma_register**
^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
``dma_register`` 用来注册一个 DMA 设备的一个通道,注册该设备需要使用的标准接口,在注册之前需要打开对应 DMA 设备的通道宏定义。例如定义宏 ``BSP_USING_DMA_CH0`` 方可使用 ``DMA`` 设备的 0 通道,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``DMA`` 设备的 0 通道。 ``dma_register`` 用来注册 DMA 设备标准驱动接口,在注册之前需要打开对应 DMA 设备的通道宏定义。例如定义宏 ``BSP_USING_DMA_CH0`` 方可使用 ``DMA`` 设备的 0 通道,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``DMA`` 设备的 0 通道。
.. code-block:: C .. code-block:: C

View File

@ -71,7 +71,7 @@ I2C 设备标准接口当前仅使用 ``device_open`` , 并提供标准的数据
**i2c_register** **i2c_register**
^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
``i2c_register`` 用来注册一个 I2C 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 I2C 设备的宏定义。例如定义宏 ``BSP_USING_I2C0`` 方可使用 ``I2C0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``I2C0`` 设备。 ``i2c_register`` 用来注册 I2C 设备标准驱动接口,在注册之前需要打开对应 I2C 设备的宏定义。例如定义宏 ``BSP_USING_I2C0`` 方可使用 ``I2C0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``I2C0`` 设备。
.. code-block:: C .. code-block:: C

View File

@ -0,0 +1,271 @@
I2S 设备
=========================
简介
------------------------
I2S (Inter—IC Sound) 总线, 又称集成电路内置音频总线,为数字音频设备之间的音频数据传输而制定的一种总线标准,
该总线专门用于音频设备之间的数据传输,广泛应用于各种多媒体系统。博流系列 MCU 中 I2S 设备具有以下特性:
- 支持主模式以及从模式
- 支持 Left-justified/Right-justified/DSP 等数据格式
- 支持 8/16/24/32 比特数据宽度
- 除单声道/双声道模式之外,同时支持四声道模式
- 支持动态静音切换功能
- 数据发送 FIFO 的宽度为 32 位,深度 16
- 数据接收 FIFO 的宽度为 32 位,深度 16
I2S 设备结构体定义
------------------------
.. code-block:: C
typedef struct i2s_device {
struct device parent;
uint8_t id;
i2s_mode_t iis_mode;
interface_mode_t interface_mode;
uint32_t sampl_freq_hz;
i2s_channel_num_t channel_num;
i2s_frame_size_t frame_size;
i2s_data_size_t data_size;
uint8_t fifo_threshold;
void *tx_dma;
void *rx_dma;
} i2s_device_t;
- parent 继承父类属性
- id 外设 id 号, 0 表示 I2S0
- iis_mode 主从模式选择
- interface_mode 协议类型
- sampl_freq_hz 音频数据采样率
- channel_num 音频通道数,非 DSP 模式下最高 2 通道
- frame_size 帧格式长度,即每个通道音频的 BCLK 个数
- data_size 实际的有效音频数据位宽,不能大于 frame_size
- fifo_threshold 收发数据的 fifo 深度阈值
- tx_dma 附加的发送 dma 句柄
- rx_dma 附加的接收 dma 句柄
``iis_mode`` 提供以下类型
.. code-block:: C
typedef enum {
I2S_MODE_MASTER = 0, /*!< I2S as master */
I2S_MODE_SLAVE, /*!< I2S as slave */
} i2s_mode_t;
``interface_mode`` 提供以下类型
.. code-block:: C
typedef enum {
I2S_MODE_STD, /*!< I2S STD Mode */
I2S_MODE_LEFT, /*!< Left-Justified Mode */
I2S_MODE_RIGHT, /*!< Right-Justified Mode */
I2S_MODE_DSP_A, /*!< DSP/PCM Mode A*/
I2S_MODE_DSP_B, /*!< DSP/PCM Mode B*/
} interface_mode_t;
``channel_num`` 提供以下类型
.. code-block:: C
typedef enum {
I2S_FS_CHANNELS_NUM_MONO = 1, /*!< I2S frame is for 1 channels */
I2S_FS_CHANNELS_NUM_2 = 2, /*!< I2S frame is for 2 channels */
I2S_FS_CHANNELS_NUM_3 = 3, /*!< I2S frame is for 3 channels, DSP mode only, frame_size must equal data_size*/
I2S_FS_CHANNELS_NUM_4 = 4, /*!< I2S frame is for 4 channels, DSP mode only, frame_size must equal data_size*/
} i2s_channel_num_t;
``frame_size`` 提供以下类型
.. code-block:: C
typedef enum {
I2S_FRAME_LEN_8 = 1, /*!< I2S frame size 8 bits */
I2S_FRAME_LEN_16 = 2, /*!< I2S frame size 16 bits */
I2S_FRAME_LEN_24 = 3, /*!< I2S frame size 24 bits */
I2S_FRAME_LEN_32 = 4, /*!< I2S frame size 32 bits */
} i2s_frame_size_t;
``data_size`` 提供以下类型
.. code-block:: C
typedef enum {
I2S_DATA_LEN_8 = 1, /*!< I2S data size 8 bits */
I2S_DATA_LEN_16 = 2, /*!< I2S data size 16 bits */
I2S_DATA_LEN_24 = 3, /*!< I2S data size 24 bits */
I2S_DATA_LEN_32 = 4, /*!< I2S data size 32 bits */
} i2s_data_size_t;
I2S 设备参数配置表
------------------------
每一个 I2S 设备都有一个参数配置宏,宏定义位于 ``bsp/board/xxx`` 目录下 ``peripheral_config.h`` 文件,
因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。
例如打开宏 ``BSP_USING_I2S0`` ``I2S0_CONFIG`` 即生效,同时 ``I2S0`` 设备就可以进行注册和使用了。
.. code-block:: C
#if defined(BSP_USING_I2S0)
#ifndef I2S0_CONFIG
#define I2S0_CONFIG \
{ \
.id = 0, \
.iis_mode = I2S_MODE_MASTER, \
.interface_mode = I2S_MODE_LEFT, \
.sampl_freq_hz = 16 * 1000, \
.channel_num = I2S_FS_CHANNELS_NUM_MONO, \
.frame_size = I2S_FRAME_LEN_16, \
.data_size = I2S_DATA_LEN_16, \
.fifo_threshold = 8, \
}
#endif
#endif
static i2s_device_t i2sx_device[I2S_MAX_INDEX] = {
#ifdef BSP_USING_I2S0
I2S0_CONFIG,
#endif
};
.. note:: 上述配置可以通过 ``I2S_DEV(dev)->xxx`` 进行修改,只能在调用 ``device_open`` 之前使用。
I2S 设备接口
------------------------
I2S 设备接口全部遵循标准设备驱动管理层提供的接口。
**i2s_register**
^^^^^^^^^^^^^^^^^^^^^^^^
``i2s_register`` 用来注册 I2S 标准驱动接口,在注册之前需要打开对应 I2S 设备的宏定义,例如定义宏 ``BSP_USING_I2S0`` 方可使用 I2S0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 I2S 设备。
.. code-block:: C
int i2s_register(enum i2s_index_type index, const char *name, uint16_t flag);
- index 要注册的设备索引
- name 为注册的设备命名
- flag 默认可读可写属性
``index`` 用来选择 I2S 设备配置,一个 index 对应一个 I2S 设备配置,比如 ``I2S0_INDEX`` 对应 ``I2S0_CONFIG`` 配置。index 有如下可选类型
.. code-block:: C
enum i2s_index_type {
#ifdef BSP_USING_I2S0
I2S0_INDEX,
#endif
I2S_MAX_INDEX
};
**device_open**
^^^^^^^^^^^^^^^^
``device_open`` 用于设备的打开,``oflag`` 表示以何种方式打开。实际调用 ``i2s_open``。
.. code-block:: C
int device_open(struct device *dev, uint16_t oflag);
- dev 设备句柄
- oflag 设备的打开方式
- return 错误码0 表示打开成功,其他表示错误
``oflag`` 可以写入以下参数:
.. code-block:: C
#define DEVICE_OFLAG_STREAM_TX 0x001 /* 设备以轮训发送模式打开 */
#define DEVICE_OFLAG_STREAM_RX 0x002 /* 设备以轮训接收模式打开 */
#define DEVICE_OFLAG_DMA_TX 0x010 /* 设备以 DMA 发送模式打开 */
#define DEVICE_OFLAG_DMA_RX 0x020 /* 设备以 DMA 接收模式打开 */
**device_close**
^^^^^^^^^^^^^^^^
``device_close`` 用于设备的关闭。实际调用 ``i2s_close``。
.. code-block:: C
int device_close(struct device *dev);
- dev 设备句柄
- return 错误码0 表示关闭成功,其他表示错误
**device_control**
^^^^^^^^^^^^^^^^^^^
``device_control`` 用于根据命令对设备进行控制和参数的修改。实际调用 ``i2s_control``。
.. code-block:: C
int device_control(struct device *dev, int cmd, void *args);
- dev 设备句柄
- cmd 设备控制命令
- args 控制参数
- return 不同的控制命令返回的意义不同。
I2S 设备除了标准的控制命令,还具有自己特殊的控制命令。
.. code-block:: C
#define I2S_GET_TX_FIFO_CMD 0x10
#define I2S_GET_RX_FIFO_CMD 0x11
``args`` 根据不同的 ``cmd`` 传入不同,具体如下:
.. list-table:: table1
:widths: 15 10 30
:header-rows: 1
* - cmd
- args
- description
* - DEVICE_CTRL_I2S_ATTACH_TX_DMA
- struct device*
- 链接发送 dma 设备
* - DEVICE_CTRL_I2S_ATTACH_RX_DMA
- struct device*
- 链接接收 dma 设备
* - DEVICE_CTRL_GET_CONFIG
- I2S_GET_TX_FIFO_CMD
- 获取 I2S 发送 fifo 未发数据量
* - DEVICE_CTRL_GET_CONFIG
- I2S_GET_RX_FIFO_CMD
- 获取 I2S 接受 fifo 已收数据量
**device_write**
^^^^^^^^^^^^^^^^
``device_write`` 用于 I2S 设备数据的发送,考虑到效率,目前仅支持 DMA 模式发送。
.. code-block:: C
int device_write(struct device *dev, uint32_t pos, const void *buffer, uint32_t size);
- dev 设备句柄
- pos 无作用
- buffer 要写入的 buffer 缓冲区
- size 要写入的长度
- return 错误码0 表示写入成功,其他表示错误
**device_read**
^^^^^^^^^^^^^^^^
``device_read`` 用于 I2S 设备数据的接收,考虑到效率,目前仅支持 DMA 模式接收。
.. code-block:: C
int device_read(struct device *dev, uint32_t pos, void *buffer, uint32_t size);
- dev 设备句柄
- pos 无作用
- buffer 要读入的 buffer 缓冲区
- size 要读入的长度
- return 错误码0 表示读入成功,其他表示错误

View File

@ -90,7 +90,7 @@ PWM 设备接口全部遵循标准设备驱动管理层提供的接口。并且
**pwm_register** **pwm_register**
^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
``pwm_register`` 用来注册一个 PWM 设备的一个通道,注册该设备需要使用的标准接口,在注册之前需要打开对应 PWM 设备某个通道的宏定义,例如定义 ``BSP_USING_PWM_CH0`` 方可使用 ``PWM`` 通道0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 PWM 设备。 ``pwm_register`` 用来注册 PWM 设备的一个通道的标准驱动接口,在注册之前需要打开对应 PWM 设备某个通道的宏定义,例如定义 ``BSP_USING_PWM_CH0`` 方可使用 ``PWM`` 通道0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 PWM 设备。
.. code-block:: C .. code-block:: C

View File

@ -133,7 +133,7 @@ SPI 设备接口全部遵循标准设备驱动管理层提供的接口。
**spi_register** **spi_register**
^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
``spi_register`` 用来注册一个 SPI 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 SPI 设备的宏定义,例如定义宏 ``BSP_USING_SPI0`` 方可使用 SPI0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 SPI 设备。 ``spi_register`` 用来注册 SPI 设备标准驱动接口,在注册之前需要打开对应 SPI 设备的宏定义,例如定义宏 ``BSP_USING_SPI0`` 方可使用 SPI0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 SPI 设备。
.. code-block:: C .. code-block:: C

View File

@ -120,7 +120,7 @@ TIMER 设备接口全部遵循标准设备驱动管理层提供的接口。
**timer_register** **timer_register**
^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
``timer_register`` 用来注册一个 TIMER 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 TIMER 设备的宏定义。例如定义宏 ``BSP_USING_TIMER_CH0`` 方可使用 ``TIMER_CH0_INDEX`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``TIMER_CH0_INDEX`` 设备。 ``timer_register`` 用来注册 TIMER 设备标准驱动接口,在注册之前需要打开对应 TIMER 设备的宏定义。例如定义宏 ``BSP_USING_TIMER_CH0`` 方可使用 ``TIMER_CH0_INDEX`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``TIMER_CH0_INDEX`` 设备。
.. code-block:: C .. code-block:: C

View File

@ -121,7 +121,7 @@ UART 设备接口全部遵循标准设备驱动管理层提供的接口。
**uart_register** **uart_register**
^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
``uart_register`` 用来注册一个 UART 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 UART 设备的宏定义。例如定义宏 ``BSP_USING_UART0`` 方可使用 ``UART0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``UART0`` 设备。 ``uart_register`` 用来注册 UART 设备标准驱动接口,在注册之前需要打开对应 UART 设备的宏定义。例如定义宏 ``BSP_USING_UART0`` 方可使用 ``UART0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``UART0`` 设备。
.. code-block:: C .. code-block:: C

View File

@ -0,0 +1,412 @@
USB 设备
=========================
简介
------------------------
USB 通信串行总线Universal Serial Bus是一种外部总线标准用于规范电脑和外部设备的连接和通讯是应用在 PC 领域的接口技术。博流 BL70X 系列 MCU 中 USB 设备具有以下特性:
- 支持 USB1.1 全速设备
- 支持 8 个双向端点EP0 可配置为控制/批量/中断/同步端点EP1-EP7 可配置为批量/中断/同步端点
- 每个端点均包含 TX、RX 两个方向的 FIFOFIFO 深度 64 字节,并且支持 DMA
- 支持内部 transceiver
- 支持 suspend/resume
- 支持 LPM
- 支持多种 USB 中断配置
USB 设备结构体定义
------------------------
.. code-block:: C
typedef struct usb_dc_device {
struct device parent;
uint8_t id;
usb_dc_ep_state_t in_ep[8];
usb_dc_ep_state_t out_ep[8];
void *tx_dma;
void *rx_dma;
} usb_dc_device_t;
- parent 继承父类属性
- id USB id0 表示 USB0
- in_ep USB 输入端点的参数
- out_ep USB 输出端点的参数
- tx_dma 附加的发送 dma 句柄
- rx_dma 附加的接收 dma 句柄
``in_ep`` ``out_ep`` 的结构如下
.. code-block:: C
typedef struct
{
uint8_t ep_ena;
uint32_t is_stalled;
struct usb_dc_ep_cfg ep_cfg;
} usb_dc_ep_state_t;
- ep_ena 继承父类属性
- is_stalled 挂起状态0表示非挂起状态1表示挂起状态
- ep_cfg 端点的属性
``ep_cfg`` 的结构如下
.. code-block:: C
struct usb_dc_ep_cfg {
uint8_t ep_addr;
uint16_t ep_mps;
uint8_t ep_type;
};
- ep_addr 端点的地址
- ep_mps 端点最大 packet 长度
- ep_type 端点传输类型
.. note:: 以上参数无需用户配置
USB 设备接口
------------------------
USB 设备接口遵循标准设备驱动管理层提供的接口。
**usb_dc_register**
^^^^^^^^^^^^^^^^^^^^^^^^
``usb_dc_register`` 用来注册 USB 设备标准驱动接口,在注册之前需要打开对应 USB 设备的宏定义,例如定义宏 ``BSP_USING_USB`` 方可使用 USB 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 USB 设备。
.. code-block:: C
int usb_dc_register(enum usb_index_type index, const char *name, uint16_t flag);
- index 要注册的设备索引
- name 为注册的设备命名
- flag 默认可读可写属性
- return 错误码0表示成功其他表示失败
**device_open**
^^^^^^^^^^^^^^^^
``device_open`` 用于设备的打开,``oflag`` 表示以何种方式打开。实际调用 ``usb_open``。
.. code-block:: C
int device_open(struct device *dev, uint16_t oflag);
- dev 设备句柄
- oflag 设备的打开方式
- return 错误码0表示成功其他表示失败
**device_close**
^^^^^^^^^^^^^^^^
``device_close`` 用于设备的关闭。实际调用 ``usb_close``。
.. code-block:: C
int device_close(struct device *dev);
- dev 设备句柄
- return 错误码0表示成功其他表示失败
**device_control**
^^^^^^^^^^^^^^^^^^^
``device_control`` 用于根据命令对设备进行控制和参数的修改。实际调用 ``usb_control``。
.. code-block:: C
int device_control(struct device *dev, int cmd, void *args);
- dev 设备句柄
- cmd 设备控制命令
- args 控制参数
- return 错误码0表示成功其他表示失败
USB 设备除了标准的控制命令,还具有私有的控制命令。
.. list-table:: table1
:widths: 15 10 30
:header-rows: 1
* - cmd
- args
- description
* - DEVICE_CTRL_USB_DC_SET_ACK
- uint32_t
- 设置 USB 设备 ACK 状态
* - DEVICE_CTRL_USB_DC_ENUM_ON
- NULL
- 打开 USB 设备枚举
* - DEVICE_CTRL_USB_DC_ENUM_OFF
- NULL
- 关闭 USB 设备枚举
* - DEVICE_CTRL_USB_DC_GET_EP_TX_FIFO_CNT
- uint32_t
- 设置 USB 设备发送 FIFO 的个数
* - DEVICE_CTRL_USB_DC_GET_EP_RX_FIFO_CNT
- uint32_t
- 设置 USB 设备接收 FIFO 的个数
* - DEVICE_CTRL_ATTACH_TX_DMA
- device*
- 设置 USB 设备发送 dma 句柄
* - DEVICE_CTRL_ATTACH_RX_DMA
- device*
- 设置 USB 设备接收 dma 句柄
* - DEVICE_CTRL_USB_DC_SET_TX_DMA
- uint32_t
- 开启 USB 设备通过 dma 发送
* - DEVICE_CTRL_USB_DC_SET_RX_DMA
- uint32_t
- 开启 USB 设备通过 dma 接收
``args`` 支持的标准控制命令 ``cmd`` 具体如下:
.. list-table:: table2
:widths: 15 10 30
:header-rows: 1
* - cmd
- args
- description
* - DEVICE_CTRL_SET_INT
- uint32_t
- 开启 USB 中断
**device_write**
^^^^^^^^^^^^^^^^
``device_write`` 用于 USB 设备数据的发送,当前只支持同步传输 dma 发送,实际调用 ``usb_write``。
.. code-block:: C
int device_write(struct device *dev, uint32_t pos, const void *buffer, uint32_t size);
- dev 设备句柄
- pos 无作用
- buffer 要写入的 buffer 缓冲区
- size 要写入的长度
- return 错误码0表示成功其他表示失败
**device_read**
^^^^^^^^^^^^^^^^
``device_read`` 用于 USB 设备数据的接收,当前只支持同步传输 dma 接收。实际调用 ``usb_read``。
.. code-block:: C
int device_read(struct device *dev, uint32_t pos, void *buffer, uint32_t size);
- dev 设备句柄
- pos 无作用
- buffer 要读入的 buffer 缓冲区
- size 要读入的长度
- return 错误码0表示成功其他表示失败
**device_set_callback**
^^^^^^^^^^^^^^^^^^^^^^^^
``device_set_callback`` 用于注册一个 USB 设备中断回调函数。
.. code-block:: C
int device_set_callback(struct device *dev, void (*callback)(struct device *dev, void *args, uint32_t size, uint32_t event));
- dev 设备句柄
- callback 要注册的中断回调函数
- return 错误码0表示成功其他表示失败
- dev 设备句柄
- args 接收发送缓冲区,数据类型为 uint8_t*
- size 传输长度
- event 中断事件类型
USB 设备 ``event`` 类型如下
.. code-block:: C
enum usb_dc_event_type {
/** USB error reported by the controller */
USB_DC_EVENT_ERROR,
/** USB reset */
USB_DC_EVENT_RESET,
/** Start of Frame received */
USB_DC_EVENT_SOF,
/** USB connection established, hardware enumeration is completed */
USB_DC_EVENT_CONNECTED,
/** USB configuration done */
USB_DC_EVENT_CONFIGURED,
/** USB connection suspended by the HOST */
USB_DC_EVENT_SUSPEND,
/** USB connection lost */
USB_DC_EVENT_DISCONNECTED,
/** USB connection resumed by the HOST */
USB_DC_EVENT_RESUME,
/** setup packet received */
USB_DC_EVENT_SETUP_NOTIFY,
/** ep0 in packet received */
USB_DC_EVENT_EP0_IN_NOTIFY,
/** ep0 out packet received */
USB_DC_EVENT_EP0_OUT_NOTIFY,
/** ep in packet except ep0 received */
USB_DC_EVENT_EP_IN_NOTIFY,
/** ep out packet except ep0 received */
USB_DC_EVENT_EP_OUT_NOTIFY,
/** Initial USB connection status */
USB_DC_EVENT_UNKNOWN
};
**usb_dc_send_from_ringbuffer**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``usb_dc_send_from_ringbuffer`` 用于从 ringbuffer 中读取数据并通过某个端点将数据发送出去。
.. code-block:: C
int usb_dc_send_from_ringbuffer(struct device *dev, Ring_Buffer_Type *rb, uint8_t ep);
- dev 设备指针
- rb rinbuffer 结构体指针
- ep 端点地址
- return 错误码0表示成功其他表示失败
**usb_dc_receive_to_ringbuffer**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``usb_dc_receive_to_ringbuffer`` 用于从某个端点接收数据并保存到 ringbuffer 中。
.. code-block:: C
int usb_dc_receive_to_ringbuffer(struct device *dev, Ring_Buffer_Type *rb, uint8_t ep);
- dev 设备指针
- rb rinbuffer 结构体指针
- ep 端点地址
- return 错误码0表示成功其他表示失败
.. important:: 以下函数为 USB Device 协议栈需要实现的 porting 接口,用户无需在应用层调用。
.. _usb_dc_set_address:
**usb_dc_set_address**
^^^^^^^^^^^^^^^^^^^^^^^^
``usb_dc_set_address`` 用于 USB 设备地址的配置。
.. code-block:: C
int usb_dc_set_address(const uint8_t addr);
- addr USB 设备的地址
- return 错误码0表示成功其他表示失败
.. _usb_dc_ep_open:
**usb_dc_ep_open**
^^^^^^^^^^^^^^^^^^^^^^^^
``usb_dc_ep_open`` 用于 USB 设备端点的开启。
.. code-block:: C
int usb_dc_ep_open(const struct usbd_endpoint_cfg *ep_cfg);
- ep_cfg 端点的属性
- return 错误码0表示成功其他表示失败
.. _usb_dc_ep_close:
**usb_dc_ep_close**
^^^^^^^^^^^^^^^^^^^^^^^^
``usb_dc_ep_close`` 用于 USB 设备端点的关闭。
.. code-block:: C
int usb_dc_ep_close(const uint8_t ep);
- ep 端点地址
- return 错误码0表示成功其他表示失败
.. _usb_dc_ep_set_stall:
**usb_dc_ep_set_stall**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``usb_dc_ep_set_stall`` 用于 USB 设备挂起状态的设置,挂起状态下无法收发数据。
.. code-block:: C
int usb_dc_ep_set_stall(const uint8_t ep);
- ep 端点地址
- return 错误码0表示成功其他表示失败
.. _usb_dc_ep_clear_stall:
**usb_dc_ep_clear_stall**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``usb_dc_ep_clear_stall`` 用于端点挂起状态的清除,非挂起状态可以进行收发数据。
.. code-block:: C
int usb_dc_ep_clear_stall(const uint8_t ep);
- ep 端点地址
- return 错误码0表示成功其他表示失败
.. _usb_dc_ep_is_stalled:
**usb_dc_ep_is_stalled**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``usb_dc_ep_is_stalled`` 用于 USB 设备挂起状态的查询。
.. code-block:: C
int usb_dc_ep_is_stalled(const uint8_t ep, uint8_t *stalled);
- ep 端点id
- stalled 保存挂起状态的地址, 0 表示非挂起状态, 1 表示挂起状态
- return 错误码0表示成功其他表示失败
.. _usb_dc_ep_write:
**usb_dc_ep_write**
^^^^^^^^^^^^^^^^^^^^^^^^
``usb_dc_ep_write`` 用于向某个端点发送数据。
.. code-block:: C
int usb_dc_ep_write(const uint8_t ep, const uint8_t *data, uint32_t data_len, uint32_t *ret_bytes);
- ep 端点地址
- data 要发送的数据地址
- data_len 要发送数据的长度
- ret_bytes 实际成功发生的数据长度
- return 错误码0表示成功其他表示失败
.. _usb_dc_ep_read:
**usb_dc_ep_read**
^^^^^^^^^^^^^^^^^^^^^^^^
``usb_dc_ep_read`` 用于从某个端点接收数据。
.. code-block:: C
int usb_dc_ep_read(const uint8_t ep, uint8_t *data, uint32_t max_data_len, uint32_t *read_bytes);
- ep 端点地址
- data 要接收数据的地址
- data_len 要接收数据的长度,不能大于最大包长
- ret_bytes 实际成功接收的数据长度
- return 错误码0表示成功其他表示失败

View File

@ -11,7 +11,9 @@ Peripheral
PWM 设备 <api_pwm> PWM 设备 <api_pwm>
DMA 设备 <api_dma> DMA 设备 <api_dma>
I2C 设备 <api_i2c> I2C 设备 <api_i2c>
I2S 设备 <api_i2s>
SPI 设备 <api_spi> SPI 设备 <api_spi>
ADC 设备 <api_adc> ADC 设备 <api_adc>
DAC 设备 <api_dac> DAC 设备 <api_dac>
TIMER 设备 <api_timer> TIMER 设备 <api_timer>
USB 设备 <api_usb>

View File

@ -1,7 +1,7 @@
USB Stack USB Stack
======================= =======================
USB Stack 是一个跨平台的、用于嵌入式 MCU 的 USB 协议栈,该协议栈对标准设备请求、CLASS 请求、VENDOR 请求规范了一套统一的函数框架,从而对复合设备或者使用自定义设备类时,能够在极短的时间内进行添加和移植。此外,该协议栈代码优美,内存占用小(不使用静态数组),通用性非常高,提供了一套标准的 porting 接口,供给不同的 MCU 使用。其中usb device 协议栈当前具有以下功能: USB Stack 是一个跨平台的、用于嵌入式 MCU 的 USB 协议栈。其中 DEVICE 协议栈对标准设备请求、CLASS 请求、VENDOR 请求规范了一套统一的函数框架,从而对复合设备或者使用自定义设备类时,能够在极短的时间内进行添加和移植,提供了一套标准的 porting 接口,供给不同的 MCU 使用,因此通用性非常高。此外在代码优美方面以及内存占用方面也是相当出色。USB DEVICE 协议栈当前具有以下功能:
- 支持 USB2.0 全速和高速设备 - 支持 USB2.0 全速和高速设备
- 支持端点中断注册功能porting 给用户自己处理中断里的数据 - 支持端点中断注册功能porting 给用户自己处理中断里的数据
@ -17,48 +17,46 @@ USB Stack 是一个跨平台的、用于嵌入式 MCU 的 USB 协议栈,该协
.. note:: USB DEVICE 协议栈的代码实现过程参考 `<https://www.bilibili.com/video/BV1Ef4y1t73d>`_ .. note:: USB DEVICE 协议栈的代码实现过程参考 `<https://www.bilibili.com/video/BV1Ef4y1t73d>`_
USB Device Porting 接口 USB DEVICE 协议栈 porting 接口
------------------------ -------------------------------
USB Device Porting 接口在 ``usb_stack/common/usb_dc.h`` 文件中声明,用户根据自己的 MCU 进行实现 USB DEVICE 协议栈 porting 接口在 ``usb_stack/common/usb_dc.h`` 文件中声明,用户根据自己的 MCU 实现以下接口
**usbd_set_address** - ``usbd_set_address`` 调用 :ref:`usb_dc_set_address`
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ``usbd_ep_open`` 调用 :ref:`usb_dc_ep_open`
- ``usbd_ep_close`` 调用 :ref:`usb_dc_ep_close`
- ``usbd_ep_set_stall`` 调用 :ref:`usb_dc_ep_set_stall`
- ``usbd_ep_clear_stall`` 调用 :ref:`usb_dc_ep_clear_stall`
- ``usbd_ep_is_stalled`` 调用 :ref:`usb_dc_ep_is_stalled`
- ``usbd_ep_write`` 调用 :ref:`usb_dc_ep_write`
- ``usbd_ep_read`` 调用 :ref:`usb_dc_ep_read`
**usbd_ep_open** USB DEVICE 控制器接口
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -------------------------------
**usbd_ep_close**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_ep_set_stall**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_ep_clear_stall**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_ep_is_stalled**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_ep_write**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_ep_read**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_event_notify_handler**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
USB Device 应用层接口
----------------------
USB Device 控制器接口
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usb_dc_init** **usb_dc_init**
"""""""""""""""""" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``usb_dc_init`` 用来注册 USB 设备和初始化 USB 硬件相关寄存器,注册 usb 中断回调函数。在注册之前需要打开对应 USB 设备的宏定义,例如定义宏 ``BSP_USING_USB`` 方可使用 USB 设备。
USB Device 通用接口 .. code-block:: C
struct device *usb_dc_init(void)
{
usb_dc_register(USB_INDEX, "usb", DEVICE_OFLAG_RDWR);
usb = device_find("usb");
device_set_callback(usb, usb_dc_event_callback);
device_open(usb, 0);
return usb;
}
- device 返回 USB 设备句柄
.. note::中断处理函数则是调用 ``usbd_event_notify_handler``
USB DEVICE 应用层接口
------------------------
USB DEVICE 通用接口
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_desc_register** **usbd_desc_register**

View File

@ -55,39 +55,54 @@ BL706_AVB 开发板如下图所示
Sipeed RV-Debugger plus Sipeed RV-Debugger plus
**Windows** **Windows**
^^^^^^^^^^^^^^^^^^^
- Sipeed RV-Debugger Plus 调试器在 Windows 系统中所以时我们需要将驱动更换为 ``Win USB`` 驱动 Sipeed RV-Debugger Plus 调试器在 Windows 系统中所以时我们需要将驱动更换为 ``Win USB`` 驱动
- 1. 首先,将调试器 Type-C USB 接口使用 USB 数据线连接到 PC 主机,打开 PC 的设备管理器,在端口一栏可以看到调试器被识别为两个串口(*注:不是开发板上的串口*),或者在 ``通用串行总线控制器`` 看到 ``USB Serial Converter A`` 和 ``USB Serial Converter B`` - 1. 首先,将调试器 Type-C USB 接口使用 USB 数据线连接到 PC 主机,打开 PC 的设备管理器,在端口一栏可以看到调试器被识别为两个串口(*注:不是开发板上的串口*),或者在 ``通用串行总线控制器`` 看到 ``USB Serial Converter A`` 和 ``USB Serial Converter B``
.. important:: **注意:** 若在设备管理器中看到的串口名称为 “``USB 串行设备(COM*)``”,说明调试器进入了 ``Boot`` 模式。请将调试器断电重新上电,注意先不要将调试器连接到目标板;此时在到设备管理器中看是否正常
.. figure:: img/sipeed_rv_debugger_1.png .. figure:: img/sipeed_rv_debugger_1.png
.. figure:: img/sipeed_rv_debugger_4.png .. figure:: img/sipeed_rv_debugger_4.png
- 2. 从 sipeed 网站下载 ``zadig-2.4`` 替换驱动程序。下载地址:`http://dl.sipeed.com/MAIX/tools/sipeed-rv-debugger/zadig-2.4.exe <http://dl.sipeed.com/MAIX/tools/sipeed-rv-debugger/zadig-2.4.exe>`_ .. important:: 1. 调试器的端口号必须以 ``usb serial port`` 开头,如果插了多个类似的设备,请只留一个,确认调试器端口号
- 3. 下载好双击打开 ``zadig-2.4.exe``,选择 Options 勾选 List All Devices. .. important:: 2. 若在设备管理器中看到的串口名称为 “``USB 串行设备(COM*)``”,说明调试器进入了 ``Boot`` 模式。请将调试器断电重新上电,注意先不要将调试器连接到目标板;此时在到设备管理器中看是否正常
.. figure:: img/sipeed_rv_debugger_7.png
.. important:: 3. 若在设备管理器中没有串口,显示其他设备,请到 `FTDI 官网 <https://ftdichip.com/drivers/vcp-drivers/>`_ 下载与系统匹配的驱动
.. figure:: img/sipeed_rv_debugger_6.png
- 2. 以上都没有问题后,从 sipeed 网站下载 ``zadig-2.4`` 替换驱动程序。下载地址:`http://dl.sipeed.com/MAIX/tools/sipeed-rv-debugger/zadig-2.4.exe <http://dl.sipeed.com/MAIX/tools/sipeed-rv-debugger/zadig-2.4.exe>`_
- 3. 下载好双击打开 ``zadig-2.4.exe``,选择 Options 勾选 List All Devices.
.. figure:: img/sipeed_rv_debugger_3.png .. figure:: img/sipeed_rv_debugger_3.png
- 4. 找到 JTAG Debugger(Interface 0),然后选择替换的驱动为 ``WinUSB`` 点击 Replace Driver 替换 - 4. 找到 JTAG Debugger(Interface 0),然后选择替换的驱动为 ``WinUSB`` 点击 Replace Driver 替换
- 5. 再次打开设备管理器, 看到其中一个串口被替换成通用串行总线设备就说明安装成功 - 5. 再次打开设备管理器, 看到其中一个串口被替换成通用串行总线设备就说明安装成功
.. figure:: img/sipeed_rv_debugger_2.png .. figure:: img/sipeed_rv_debugger_2.png
- 6. 到这里 Sipeed RV-Debugger Plus 的设备驱动就更换好了,接下来就可以愉快的玩耍啦~ - 6. 到这里 Sipeed RV-Debugger Plus 的设备驱动就更换好了,接下来就可以愉快的玩耍啦~
**可能出现的问题:** **可能出现的问题:**
.. caution:: 1. 调试器接上时没有出现两个串口,调试器上有一个 LED 常亮,那么应该是进入了 Boot 模式。请将调试器断电重新上电,注意先不要将调试器连接到目标板;调试器上电后,正常情况下两个 LED 灯会闪烁一下熄灭;此时再看一下任务管理器中的设备是否正确。 .. caution:: 1. 调试器接上时没有出现两个串口,调试器上有一个 LED 常亮,那么应该是进入了 Boot 模式。请将调试器断电重新上电,注意先不要将调试器连接到目标板;调试器上电后,正常情况下两个 LED 灯会闪烁一下熄灭;此时再看一下任务管理器中的设备是否正确。
.. caution:: 2. 在设备管理器中没有看到任何串口,但是在``通用串行总线控制器``中看到 ``USB Serial Converter A`` 和 ``USB Serial Converter B``;遇到这种情况,请到 `FTDI 官网 <https://ftdichip.com/drivers/vcp-drivers/>`_ 下载与系统匹配的驱动,将 ``USB Serial Converter B`` 重新安装为串口;``USB Serial Converter A`` 也即 Interface 0使用 ``zadig-2.4.exe`` 替换为 WinUSB 驱动。 .. caution:: 2. 如果经过上面的操作还是不能正常使用,没有出现正确的现象,那么建议从 Sipeed 官方 `GitHub <https://github.com/sipeed/RV-Debugger-BL702>`_ 仓库获取固件,重新烧写;按住调试器上的 ``Boot`` 键不要释放,将调试器插入电脑上电,使调试器进入 Boot 模式,重新刷入固件后;断电重启
.. caution:: 3. 如果经过上面的操作还是不能正常使用,没有出现正确的现象,那么建议从 Sipeed 官方 `GitHub <https://github.com/sipeed/RV-Debugger-BL702>`_ 仓库获取固件,重新烧写;按住调试器上的 ``Boot`` 键不要释放,将调试器插入电脑上电,使调试器进入 Boot 模式,重新刷入固件后;断电重启
**Linux** **Linux**
^^^^^^^^^^^^^^^^^^^
- 首先,将调试器 Type-C USB 接口使用 USB 数据线连接到 PC 主机,执行以下命令,查看是否存在
.. code-block:: bash
$ lsusb
.. figure:: img/sipeed_rv_debugger_8.png
- 安装 Openocd 及其需要的依赖项 - 安装 Openocd 及其需要的依赖项

View File

@ -7,4 +7,4 @@ GPIO 示例
:maxdepth: 1 :maxdepth: 1
GPIO 输出 - 流水灯 <blink_demo> GPIO 输出 - 流水灯 <blink_demo>
GPIO 中断 - 流水灯 <button_demo> GPIO 中断 - 按键检测 <button_demo>

View File

@ -1,6 +1,6 @@
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '0.3', VERSION: '0.2',
LANGUAGE: 'zh_CN', LANGUAGE: 'zh_CN',
COLLAPSE_INDEX: false, COLLAPSE_INDEX: false,
BUILDER: 'html', BUILDER: 'html',

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>1. API 概述 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>1. API 概述 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>6. BLE &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>6. BLE &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2. Board 配置系统 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>2. Board 配置系统 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.8. ADC 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>3.9. ADC 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -39,8 +39,8 @@
<link rel="index" title="索引" href="../../genindex.html" /> <link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" /> <link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.9. DAC 设备" href="api_dac.html" /> <link rel="next" title="3.10. DAC 设备" href="api_dac.html" />
<link rel="prev" title="3.7. SPI 设备" href="api_spi.html" /> <link rel="prev" title="3.8. SPI 设备" href="api_spi.html" />
</head> </head>
<body class="wy-body-for-nav"> <body class="wy-body-for-nav">
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -108,24 +108,26 @@
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.8. ADC 设备</a><ul> <li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.8.1. 简介</a></li> <li class="toctree-l2 current"><a class="current reference internal" href="#">3.9. ADC 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.8.2. ADC 设备结构体定义</a></li> <li class="toctree-l3"><a class="reference internal" href="#id1">3.9.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.8.3. ADC 设备参数配置表</a></li> <li class="toctree-l3"><a class="reference internal" href="#id2">3.9.2. ADC 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.8.4. ADC 设备接口</a><ul> <li class="toctree-l3"><a class="reference internal" href="#id3">3.9.3. ADC 设备参数配置表</a></li>
<li class="toctree-l4"><a class="reference internal" href="#adc-register">3.8.4.1. <strong>ADC_register</strong></a></li> <li class="toctree-l3"><a class="reference internal" href="#id4">3.9.4. ADC 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#device-open">3.8.4.2. <strong>device_open</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#adc-register">3.9.4.1. <strong>ADC_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-close">3.8.4.3. <strong>device_close</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-open">3.9.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-control">3.8.4.4. <strong>device_control</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-close">3.9.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-read">3.8.4.5. <strong>device_read</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-control">3.9.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.8.4.6. <strong>device_set_callback</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-read">3.9.4.5. <strong>device_read</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.9.4.6. <strong>device_set_callback</strong></a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
</li> </li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li> <li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
@ -201,7 +203,7 @@
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li> <li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.8. </span>ADC 设备</li> <li><span class="section-number">3.9. </span>ADC 设备</li>
<li class="wy-breadcrumbs-aside"> <li class="wy-breadcrumbs-aside">
@ -221,9 +223,9 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<div class="section" id="adc"> <div class="section" id="adc">
<h1><span class="section-number">3.8. </span>ADC 设备<a class="headerlink" href="#adc" title="永久链接至标题"></a></h1> <h1><span class="section-number">3.9. </span>ADC 设备<a class="headerlink" href="#adc" title="永久链接至标题"></a></h1>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">3.8.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.9.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>ADC (Analog-to-digital Converter) 是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备,他可以将外围电路传感器产生的模拟信号转化为机器可识别的数字信号。 <p>ADC (Analog-to-digital Converter) 是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备,他可以将外围电路传感器产生的模拟信号转化为机器可识别的数字信号。
博流系列MCU中的ADC设备具有以下特性</p> 博流系列MCU中的ADC设备具有以下特性</p>
<ul class="simple"> <ul class="simple">
@ -239,7 +241,7 @@
</ul> </ul>
</div> </div>
<div class="section" id="id2"> <div class="section" id="id2">
<h2><span class="section-number">3.8.2. </span>ADC 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.9.2. </span>ADC 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">adc_device</span> <span class="p">{</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">adc_device</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="k">struct</span> <span class="nc">device</span> <span class="n">parent</span><span class="p">;</span>
<span class="n">adc_clk_div_t</span> <span class="n">clk_div</span><span class="p">;</span> <span class="n">adc_clk_div_t</span> <span class="n">clk_div</span><span class="p">;</span>
@ -265,7 +267,7 @@
</ul> </ul>
</div> </div>
<div class="section" id="id3"> <div class="section" id="id3">
<h2><span class="section-number">3.8.3. </span>ADC 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.9.3. </span>ADC 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>每一个 ADC 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_adc.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_ADC0</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">ADC</span></code> 设备就可以进行注册和使用了。</p> <p>每一个 ADC 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_adc.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_ADC0</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">ADC</span></code> 设备就可以进行注册和使用了。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span>
<span class="cp">#if defined(BSP_USING_ADC0)</span> <span class="cp">#if defined(BSP_USING_ADC0)</span>
@ -297,11 +299,11 @@
</div> </div>
</div> </div>
<div class="section" id="id4"> <div class="section" id="id4">
<h2><span class="section-number">3.8.4. </span>ADC 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.9.4. </span>ADC 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<p>ADC 设备接口全部遵循标准设备驱动管理层提供的接口。</p> <p>ADC 设备接口全部遵循标准设备驱动管理层提供的接口。</p>
<div class="section" id="adc-register"> <div class="section" id="adc-register">
<h3><span class="section-number">3.8.4.1. </span><strong>ADC_register</strong><a class="headerlink" href="#adc-register" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.9.4.1. </span><strong>ADC_register</strong><a class="headerlink" href="#adc-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">adc_register</span></code> 用来注册一个 ADC 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 ADC 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_ADC0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">ADC0</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">ADC0</span></code> 设备。</p> <p><code class="docutils literal notranslate"><span class="pre">adc_register</span></code> 用来注册 ADC 设备标准驱动接口,在注册之前需要打开对应 ADC 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_ADC0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">ADC0</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">ADC0</span></code> 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">ADC_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">ADC_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">ADC_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">ADC_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div> </pre></div>
</div> </div>
@ -322,7 +324,7 @@
</div> </div>
</div> </div>
<div class="section" id="device-open"> <div class="section" id="device-open">
<h3><span class="section-number">3.8.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.9.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于 ADC 设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">adc_open</span></code></p> <p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于 ADC 设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">adc_open</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span>
</pre></div> </pre></div>
@ -330,7 +332,7 @@
<ul class="simple"> <ul class="simple">
<li><p>dev 设备句柄</p></li> <li><p>dev 设备句柄</p></li>
<li><p>oflag 设备的打开方式</p></li> <li><p>oflag 设备的打开方式</p></li>
<li><p>return 错误码0 表示打开成功,其他表示错误</p></li> <li><p>return 错误码0表示成功其他表示失败</p></li>
</ul> </ul>
<p><code class="docutils literal notranslate"><span class="pre">oflag</span></code> 可以写入以下参数:</p> <p><code class="docutils literal notranslate"><span class="pre">oflag</span></code> 可以写入以下参数:</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DEVICE_OFLAG_STREAM_TX 0x001 </span><span class="cm">/* 设备以轮训发送模式打开 */</span><span class="cp"></span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DEVICE_OFLAG_STREAM_TX 0x001 </span><span class="cm">/* 设备以轮训发送模式打开 */</span><span class="cp"></span>
@ -343,18 +345,18 @@
</div> </div>
</div> </div>
<div class="section" id="device-close"> <div class="section" id="device-close">
<h3><span class="section-number">3.8.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.9.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">adc_close</span></code></p> <p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">adc_close</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span>
</pre></div> </pre></div>
</div> </div>
<ul class="simple"> <ul class="simple">
<li><p>dev 设备句柄</p></li> <li><p>dev 设备句柄</p></li>
<li><p>return 错误码0 表示关闭成功,其他表示错误</p></li> <li><p>return 错误码0表示成功其他表示失败</p></li>
</ul> </ul>
</div> </div>
<div class="section" id="device-control"> <div class="section" id="device-control">
<h3><span class="section-number">3.8.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.9.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对 ADC 设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">adc_control</span></code></p> <p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对 ADC 设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">adc_control</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span>
</pre></div> </pre></div>
@ -437,7 +439,7 @@
</table> </table>
</div> </div>
<div class="section" id="device-read"> <div class="section" id="device-read">
<h3><span class="section-number">3.8.4.5. </span><strong>device_read</strong><a class="headerlink" href="#device-read" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.9.4.5. </span><strong>device_read</strong><a class="headerlink" href="#device-read" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_read</span></code> 用于 ADC 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。实际调用 <code class="docutils literal notranslate"><span class="pre">adc_read</span></code></p> <p><code class="docutils literal notranslate"><span class="pre">device_read</span></code> 用于 ADC 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。实际调用 <code class="docutils literal notranslate"><span class="pre">adc_read</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_read</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_read</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div> </pre></div>
@ -451,7 +453,7 @@
</ul> </ul>
</div> </div>
<div class="section" id="device-set-callback"> <div class="section" id="device-set-callback">
<h3><span class="section-number">3.8.4.6. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.9.4.6. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个ADC阈值中断回调函数。</p> <p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个ADC阈值中断回调函数。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span>
</pre></div> </pre></div>
@ -488,8 +490,8 @@
</div> </div>
<footer> <footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_dac.html" class="btn btn-neutral float-right" title="3.9. DAC 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> <a href="api_dac.html" class="btn btn-neutral float-right" title="3.10. DAC 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_spi.html" class="btn btn-neutral float-left" title="3.7. SPI 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> <a href="api_spi.html" class="btn btn-neutral float-left" title="3.8. SPI 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div> </div>
<hr/> <hr/>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.1. 时钟树 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>3.1. 时钟树 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -116,10 +116,12 @@
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li> <li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.9. DAC 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>3.10. DAC 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -39,8 +39,8 @@
<link rel="index" title="索引" href="../../genindex.html" /> <link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" /> <link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.10. TIMER 设备" href="api_timer.html" /> <link rel="next" title="3.11. TIMER 设备" href="api_timer.html" />
<link rel="prev" title="3.8. ADC 设备" href="api_adc.html" /> <link rel="prev" title="3.9. ADC 设备" href="api_adc.html" />
</head> </head>
<body class="wy-body-for-nav"> <body class="wy-body-for-nav">
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -108,16 +108,18 @@
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.9. DAC 设备</a><ul> <li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.9.1. 简介</a></li> <li class="toctree-l2 current"><a class="current reference internal" href="#">3.10. DAC 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.9.2. DAC 设备结构体定义</a></li> <li class="toctree-l3"><a class="reference internal" href="#id1">3.10.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.9.3. DAC 设备参数配置表</a></li> <li class="toctree-l3"><a class="reference internal" href="#id2">3.10.2. DAC 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.9.4. DAC 设备接口</a></li> <li class="toctree-l3"><a class="reference internal" href="#id3">3.10.3. DAC 设备参数配置表</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.10.4. DAC 设备接口</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li> <li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
@ -193,7 +195,7 @@
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li> <li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.9. </span>DAC 设备</li> <li><span class="section-number">3.10. </span>DAC 设备</li>
<li class="wy-breadcrumbs-aside"> <li class="wy-breadcrumbs-aside">
@ -213,18 +215,18 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<div class="section" id="dac"> <div class="section" id="dac">
<h1><span class="section-number">3.9. </span>DAC 设备<a class="headerlink" href="#dac" title="永久链接至标题"></a></h1> <h1><span class="section-number">3.10. </span>DAC 设备<a class="headerlink" href="#dac" title="永久链接至标题"></a></h1>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">3.9.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.10.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
</div> </div>
<div class="section" id="id2"> <div class="section" id="id2">
<h2><span class="section-number">3.9.2. </span>DAC 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.10.2. </span>DAC 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
</div> </div>
<div class="section" id="id3"> <div class="section" id="id3">
<h2><span class="section-number">3.9.3. </span>DAC 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.10.3. </span>DAC 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
</div> </div>
<div class="section" id="id4"> <div class="section" id="id4">
<h2><span class="section-number">3.9.4. </span>DAC 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.10.4. </span>DAC 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
</div> </div>
</div> </div>
@ -234,8 +236,8 @@
</div> </div>
<footer> <footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_timer.html" class="btn btn-neutral float-right" title="3.10. TIMER 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> <a href="api_timer.html" class="btn btn-neutral float-right" title="3.11. TIMER 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_adc.html" class="btn btn-neutral float-left" title="3.8. ADC 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> <a href="api_adc.html" class="btn btn-neutral float-left" title="3.9. ADC 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div> </div>
<hr/> <hr/>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.5. DMA 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>3.5. DMA 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -126,10 +126,12 @@
</ul> </ul>
</li> </li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li> <li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
@ -419,7 +421,7 @@
<p>DMA 设备接口全部遵循标准设备驱动管理层提供的接口。并且为了方便用户调用,将某些标准接口使用宏来重定义。</p> <p>DMA 设备接口全部遵循标准设备驱动管理层提供的接口。并且为了方便用户调用,将某些标准接口使用宏来重定义。</p>
<div class="section" id="dma-register"> <div class="section" id="dma-register">
<h3><span class="section-number">3.5.4.1. </span><strong>dma_register</strong><a class="headerlink" href="#dma-register" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.5.4.1. </span><strong>dma_register</strong><a class="headerlink" href="#dma-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">dma_register</span></code> 用来注册一个 DMA 设备的一个通道,注册该设备需要使用的标准接口,在注册之前需要打开对应 DMA 设备的通道宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_DMA_CH0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">DMA</span></code> 设备的 0 通道,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">DMA</span></code> 设备的 0 通道。</p> <p><code class="docutils literal notranslate"><span class="pre">dma_register</span></code> 用来注册 DMA 设备标准驱动接口,在注册之前需要打开对应 DMA 设备的通道宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_DMA_CH0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">DMA</span></code> 设备的 0 通道,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">DMA</span></code> 设备的 0 通道。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">dma_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">dma_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">dma_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">dma_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div> </pre></div>
</div> </div>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.2. GPIO 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>3.2. GPIO 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -120,10 +120,12 @@
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li> <li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.6. I2C 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>3.6. I2C 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -39,7 +39,7 @@
<link rel="index" title="索引" href="../../genindex.html" /> <link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" /> <link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.7. SPI 设备" href="api_spi.html" /> <link rel="next" title="3.7. I2S 设备" href="api_i2s.html" />
<link rel="prev" title="3.5. DMA 设备" href="api_dma.html" /> <link rel="prev" title="3.5. DMA 设备" href="api_dma.html" />
</head> </head>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -119,10 +119,12 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li> <li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
@ -284,7 +286,7 @@
<p>I2C 设备标准接口当前仅使用 <code class="docutils literal notranslate"><span class="pre">device_open</span></code> , 并提供标准的数据收发接口。</p> <p>I2C 设备标准接口当前仅使用 <code class="docutils literal notranslate"><span class="pre">device_open</span></code> , 并提供标准的数据收发接口。</p>
<div class="section" id="i2c-register"> <div class="section" id="i2c-register">
<h3><span class="section-number">3.6.4.1. </span><strong>i2c_register</strong><a class="headerlink" href="#i2c-register" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.6.4.1. </span><strong>i2c_register</strong><a class="headerlink" href="#i2c-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">i2c_register</span></code> 用来注册一个 I2C 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 I2C 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_I2C0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">I2C0</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">I2C0</span></code> 设备。</p> <p><code class="docutils literal notranslate"><span class="pre">i2c_register</span></code> 用来注册 I2C 设备标准驱动接口,在注册之前需要打开对应 I2C 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_I2C0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">I2C0</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">I2C0</span></code> 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">i2c_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">i2c_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">i2c_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">i2c_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div> </pre></div>
</div> </div>
@ -376,7 +378,7 @@
</div> </div>
<footer> <footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_spi.html" class="btn btn-neutral float-right" title="3.7. SPI 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> <a href="api_i2s.html" class="btn btn-neutral float-right" title="3.7. I2S 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_dma.html" class="btn btn-neutral float-left" title="3.5. DMA 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> <a href="api_dma.html" class="btn btn-neutral float-left" title="3.5. DMA 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div> </div>

View File

@ -0,0 +1,533 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.7. I2S 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.8. SPI 设备" href="api_spi.html" />
<link rel="prev" title="3.6. I2C 设备" href="api_i2c.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
</a>
<div class="version">
0.2
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">3. Peripheral</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.7. I2S 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.7.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.7.2. I2S 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.7.3. I2S 设备参数配置表</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.7.4. I2S 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#i2s-register">3.7.4.1. <strong>i2s_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-open">3.7.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-close">3.7.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-control">3.7.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-write">3.7.4.5. <strong>device_write</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-read">3.7.4.6. <strong>device_read</strong></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.7. </span>I2S 设备</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/api_reference/peripheral/api_i2s.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="i2s">
<h1><span class="section-number">3.7. </span>I2S 设备<a class="headerlink" href="#i2s" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">3.7.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>I2S (Inter—IC Sound) 总线, 又称集成电路内置音频总线,为数字音频设备之间的音频数据传输而制定的一种总线标准,
该总线专门用于音频设备之间的数据传输,广泛应用于各种多媒体系统。博流系列 MCU 中 I2S 设备具有以下特性:</p>
<ul class="simple">
<li><p>支持主模式以及从模式</p></li>
<li><p>支持 Left-justified/Right-justified/DSP 等数据格式</p></li>
<li><p>支持 8/16/24/32 比特数据宽度</p></li>
<li><p>除单声道/双声道模式之外,同时支持四声道模式</p></li>
<li><p>支持动态静音切换功能</p></li>
<li><p>数据发送 FIFO 的宽度为 32 位,深度 16</p></li>
<li><p>数据接收 FIFO 的宽度为 32 位,深度 16</p></li>
</ul>
</div>
<div class="section" id="id2">
<h2><span class="section-number">3.7.2. </span>I2S 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">i2s_device</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="n">i2s_mode_t</span> <span class="n">iis_mode</span><span class="p">;</span>
<span class="n">interface_mode_t</span> <span class="n">interface_mode</span><span class="p">;</span>
<span class="kt">uint32_t</span> <span class="n">sampl_freq_hz</span><span class="p">;</span>
<span class="n">i2s_channel_num_t</span> <span class="n">channel_num</span><span class="p">;</span>
<span class="n">i2s_frame_size_t</span> <span class="n">frame_size</span><span class="p">;</span>
<span class="n">i2s_data_size_t</span> <span class="n">data_size</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">fifo_threshold</span><span class="p">;</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">tx_dma</span><span class="p">;</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">rx_dma</span><span class="p">;</span>
<span class="p">}</span> <span class="n">i2s_device_t</span><span class="p">;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>parent 继承父类属性</p></li>
<li><p>id 外设 id 号, 0 表示 I2S0</p></li>
<li><p>iis_mode 主从模式选择</p></li>
<li><p>interface_mode 协议类型</p></li>
<li><p>sampl_freq_hz 音频数据采样率</p></li>
<li><p>channel_num 音频通道数,非 DSP 模式下最高 2 通道</p></li>
<li><p>frame_size 帧格式长度,即每个通道音频的 BCLK 个数</p></li>
<li><p>data_size 实际的有效音频数据位宽,不能大于 frame_size</p></li>
<li><p>fifo_threshold 收发数据的 fifo 深度阈值</p></li>
<li><p>tx_dma 附加的发送 dma 句柄</p></li>
<li><p>rx_dma 附加的接收 dma 句柄</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">iis_mode</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>
<span class="n">I2S_MODE_MASTER</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="cm">/*!&lt; I2S as master */</span>
<span class="n">I2S_MODE_SLAVE</span><span class="p">,</span> <span class="cm">/*!&lt; I2S as slave */</span>
<span class="p">}</span> <span class="n">i2s_mode_t</span><span class="p">;</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">interface_mode</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>
<span class="n">I2S_MODE_STD</span><span class="p">,</span> <span class="cm">/*!&lt; I2S STD Mode */</span>
<span class="n">I2S_MODE_LEFT</span><span class="p">,</span> <span class="cm">/*!&lt; Left-Justified Mode */</span>
<span class="n">I2S_MODE_RIGHT</span><span class="p">,</span> <span class="cm">/*!&lt; Right-Justified Mode */</span>
<span class="n">I2S_MODE_DSP_A</span><span class="p">,</span> <span class="cm">/*!&lt; DSP/PCM Mode A*/</span>
<span class="n">I2S_MODE_DSP_B</span><span class="p">,</span> <span class="cm">/*!&lt; DSP/PCM Mode B*/</span>
<span class="p">}</span> <span class="n">interface_mode_t</span><span class="p">;</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">channel_num</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>
<span class="n">I2S_FS_CHANNELS_NUM_MONO</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="cm">/*!&lt; I2S frame is for 1 channels */</span>
<span class="n">I2S_FS_CHANNELS_NUM_2</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="cm">/*!&lt; I2S frame is for 2 channels */</span>
<span class="n">I2S_FS_CHANNELS_NUM_3</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="cm">/*!&lt; I2S frame is for 3 channels, DSP mode only, frame_size must equal data_size*/</span>
<span class="n">I2S_FS_CHANNELS_NUM_4</span> <span class="o">=</span> <span class="mi">4</span><span class="p">,</span> <span class="cm">/*!&lt; I2S frame is for 4 channels, DSP mode only, frame_size must equal data_size*/</span>
<span class="p">}</span> <span class="n">i2s_channel_num_t</span><span class="p">;</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">frame_size</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>
<span class="n">I2S_FRAME_LEN_8</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="cm">/*!&lt; I2S frame size 8 bits */</span>
<span class="n">I2S_FRAME_LEN_16</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="cm">/*!&lt; I2S frame size 16 bits */</span>
<span class="n">I2S_FRAME_LEN_24</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="cm">/*!&lt; I2S frame size 24 bits */</span>
<span class="n">I2S_FRAME_LEN_32</span> <span class="o">=</span> <span class="mi">4</span><span class="p">,</span> <span class="cm">/*!&lt; I2S frame size 32 bits */</span>
<span class="p">}</span> <span class="n">i2s_frame_size_t</span><span class="p">;</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">data_size</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>
<span class="n">I2S_DATA_LEN_8</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="cm">/*!&lt; I2S data size 8 bits */</span>
<span class="n">I2S_DATA_LEN_16</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="cm">/*!&lt; I2S data size 16 bits */</span>
<span class="n">I2S_DATA_LEN_24</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="cm">/*!&lt; I2S data size 24 bits */</span>
<span class="n">I2S_DATA_LEN_32</span> <span class="o">=</span> <span class="mi">4</span><span class="p">,</span> <span class="cm">/*!&lt; I2S data size 32 bits */</span>
<span class="p">}</span> <span class="n">i2s_data_size_t</span><span class="p">;</span>
</pre></div>
</div>
</div>
<div class="section" id="id3">
<h2><span class="section-number">3.7.3. </span>I2S 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>每一个 I2S 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,
因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。
例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_I2S0</span></code> <code class="docutils literal notranslate"><span class="pre">I2S0_CONFIG</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">I2S0</span></code> 设备就可以进行注册和使用了。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#if defined(BSP_USING_I2S0)</span>
<span class="cp">#ifndef I2S0_CONFIG</span>
<span class="cp">#define I2S0_CONFIG \</span>
<span class="cp"> { \</span>
<span class="cp"> .id = 0, \</span>
<span class="cp"> .iis_mode = I2S_MODE_MASTER, \</span>
<span class="cp"> .interface_mode = I2S_MODE_LEFT, \</span>
<span class="cp"> .sampl_freq_hz = 16 * 1000, \</span>
<span class="cp"> .channel_num = I2S_FS_CHANNELS_NUM_MONO, \</span>
<span class="cp"> .frame_size = I2S_FRAME_LEN_16, \</span>
<span class="cp"> .data_size = I2S_DATA_LEN_16, \</span>
<span class="cp"> .fifo_threshold = 8, \</span>
<span class="cp"> }</span>
<span class="cp">#endif</span>
<span class="cp">#endif</span>
<span class="k">static</span> <span class="n">i2s_device_t</span> <span class="n">i2sx_device</span><span class="p">[</span><span class="n">I2S_MAX_INDEX</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
<span class="cp">#ifdef BSP_USING_I2S0</span>
<span class="n">I2S0_CONFIG</span><span class="p">,</span>
<span class="cp">#endif</span>
<span class="p">};</span>
</pre></div>
</div>
<div class="admonition note">
<p class="admonition-title">注解</p>
<p>上述配置可以通过 <code class="docutils literal notranslate"><span class="pre">I2S_DEV(dev)-&gt;xxx</span></code> 进行修改,只能在调用 <code class="docutils literal notranslate"><span class="pre">device_open</span></code> 之前使用。</p>
</div>
</div>
<div class="section" id="id4">
<h2><span class="section-number">3.7.4. </span>I2S 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<p>I2S 设备接口全部遵循标准设备驱动管理层提供的接口。</p>
<div class="section" id="i2s-register">
<h3><span class="section-number">3.7.4.1. </span><strong>i2s_register</strong><a class="headerlink" href="#i2s-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">i2s_register</span></code> 用来注册 I2S 标准驱动接口,在注册之前需要打开对应 I2S 设备的宏定义,例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_I2S0</span></code> 方可使用 I2S0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 I2S 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">i2s_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">i2s_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>index 要注册的设备索引</p></li>
<li><p>name 为注册的设备命名</p></li>
<li><p>flag 默认可读可写属性</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">index</span></code> 用来选择 I2S 设备配置,一个 index 对应一个 I2S 设备配置,比如 <code class="docutils literal notranslate"><span class="pre">I2S0_INDEX</span></code> 对应 <code class="docutils literal notranslate"><span class="pre">I2S0_CONFIG</span></code> 配置。index 有如下可选类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="n">i2s_index_type</span> <span class="p">{</span>
<span class="cp">#ifdef BSP_USING_I2S0</span>
<span class="n">I2S0_INDEX</span><span class="p">,</span>
<span class="cp">#endif</span>
<span class="n">I2S_MAX_INDEX</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
<div class="section" id="device-open">
<h3><span class="section-number">3.7.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">i2s_open</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>oflag 设备的打开方式</p></li>
<li><p>return 错误码0 表示打开成功,其他表示错误</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">oflag</span></code> 可以写入以下参数:</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DEVICE_OFLAG_STREAM_TX 0x001 </span><span class="cm">/* 设备以轮训发送模式打开 */</span><span class="cp"></span>
<span class="cp">#define DEVICE_OFLAG_STREAM_RX 0x002 </span><span class="cm">/* 设备以轮训接收模式打开 */</span><span class="cp"></span>
<span class="cp">#define DEVICE_OFLAG_DMA_TX 0x010 </span><span class="cm">/* 设备以 DMA 发送模式打开 */</span><span class="cp"></span>
<span class="cp">#define DEVICE_OFLAG_DMA_RX 0x020 </span><span class="cm">/* 设备以 DMA 接收模式打开 */</span><span class="cp"></span>
</pre></div>
</div>
</div>
<div class="section" id="device-close">
<h3><span class="section-number">3.7.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">i2s_close</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>return 错误码0 表示关闭成功,其他表示错误</p></li>
</ul>
</div>
<div class="section" id="device-control">
<h3><span class="section-number">3.7.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">i2s_control</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>cmd 设备控制命令</p></li>
<li><p>args 控制参数</p></li>
<li><p>return 不同的控制命令返回的意义不同。</p></li>
</ul>
<p>I2S 设备除了标准的控制命令,还具有自己特殊的控制命令。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define I2S_GET_TX_FIFO_CMD 0x10</span>
<span class="cp">#define I2S_GET_RX_FIFO_CMD 0x11</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">args</span></code> 根据不同的 <code class="docutils literal notranslate"><span class="pre">cmd</span></code> 传入不同,具体如下:</p>
<table class="colwidths-given docutils align-default" id="id5">
<caption><span class="caption-text">table1</span><a class="headerlink" href="#id5" title="永久链接至表格"></a></caption>
<colgroup>
<col style="width: 27%" />
<col style="width: 18%" />
<col style="width: 55%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>cmd</p></th>
<th class="head"><p>args</p></th>
<th class="head"><p>description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>DEVICE_CTRL_I2S_ATTACH_TX_DMA</p></td>
<td><p>struct device*</p></td>
<td><p>链接发送 dma 设备</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_I2S_ATTACH_RX_DMA</p></td>
<td><p>struct device*</p></td>
<td><p>链接接收 dma 设备</p></td>
</tr>
<tr class="row-even"><td><p>DEVICE_CTRL_GET_CONFIG</p></td>
<td><p>I2S_GET_TX_FIFO_CMD</p></td>
<td><p>获取 I2S 发送 fifo 未发数据量</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_GET_CONFIG</p></td>
<td><p>I2S_GET_RX_FIFO_CMD</p></td>
<td><p>获取 I2S 接受 fifo 已收数据量</p></td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="device-write">
<h3><span class="section-number">3.7.4.5. </span><strong>device_write</strong><a class="headerlink" href="#device-write" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_write</span></code> 用于 I2S 设备数据的发送,考虑到效率,目前仅支持 DMA 模式发送。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_write</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>pos 无作用</p></li>
<li><p>buffer 要写入的 buffer 缓冲区</p></li>
<li><p>size 要写入的长度</p></li>
<li><p>return 错误码0 表示写入成功,其他表示错误</p></li>
</ul>
</div>
<div class="section" id="device-read">
<h3><span class="section-number">3.7.4.6. </span><strong>device_read</strong><a class="headerlink" href="#device-read" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_read</span></code> 用于 I2S 设备数据的接收,考虑到效率,目前仅支持 DMA 模式接收。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_read</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>pos 无作用</p></li>
<li><p>buffer 要读入的 buffer 缓冲区</p></li>
<li><p>size 要读入的长度</p></li>
<li><p>return 错误码0 表示读入成功,其他表示错误</p></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_spi.html" class="btn btn-neutral float-right" title="3.8. SPI 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_i2c.html" class="btn btn-neutral float-left" title="3.6. I2C 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; 版权所有 2021, BouffaloLab Co., Ltd.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.4. PWM 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>3.4. PWM 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -125,10 +125,12 @@
</li> </li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li> <li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
@ -315,7 +317,7 @@
<p>PWM 设备接口全部遵循标准设备驱动管理层提供的接口。并且为了方便用户调用,将某些标准接口使用宏来重定义。</p> <p>PWM 设备接口全部遵循标准设备驱动管理层提供的接口。并且为了方便用户调用,将某些标准接口使用宏来重定义。</p>
<div class="section" id="pwm-register"> <div class="section" id="pwm-register">
<h3><span class="section-number">3.4.4.1. </span><strong>pwm_register</strong><a class="headerlink" href="#pwm-register" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.4.4.1. </span><strong>pwm_register</strong><a class="headerlink" href="#pwm-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">pwm_register</span></code> 用来注册一个 PWM 设备的一个通道,注册该设备需要使用的标准接口,在注册之前需要打开对应 PWM 设备某个通道的宏定义,例如定义 <code class="docutils literal notranslate"><span class="pre">BSP_USING_PWM_CH0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">PWM</span></code> 通道0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 PWM 设备。</p> <p><code class="docutils literal notranslate"><span class="pre">pwm_register</span></code> 用来注册 PWM 设备的一个通道的标准驱动接口,在注册之前需要打开对应 PWM 设备某个通道的宏定义,例如定义 <code class="docutils literal notranslate"><span class="pre">BSP_USING_PWM_CH0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">PWM</span></code> 通道0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 PWM 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">pwm_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">pwm_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">pwm_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">pwm_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div> </pre></div>
</div> </div>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.7. SPI 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>3.8. SPI 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -39,8 +39,8 @@
<link rel="index" title="索引" href="../../genindex.html" /> <link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" /> <link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.8. ADC 设备" href="api_adc.html" /> <link rel="next" title="3.9. ADC 设备" href="api_adc.html" />
<link rel="prev" title="3.6. I2C 设备" href="api_i2c.html" /> <link rel="prev" title="3.7. I2S 设备" href="api_i2s.html" />
</head> </head>
<body class="wy-body-for-nav"> <body class="wy-body-for-nav">
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -108,28 +108,30 @@
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.7. SPI 设备</a><ul> <li class="toctree-l2"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.7.1. 简介</a></li> <li class="toctree-l2 current"><a class="current reference internal" href="#">3.8. SPI 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.7.2. SPI 设备结构体定义</a></li> <li class="toctree-l3"><a class="reference internal" href="#id1">3.8.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.7.3. SPI 设备参数配置表</a></li> <li class="toctree-l3"><a class="reference internal" href="#id2">3.8.2. SPI 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.7.4. SPI 设备接口</a><ul> <li class="toctree-l3"><a class="reference internal" href="#id3">3.8.3. SPI 设备参数配置表</a></li>
<li class="toctree-l4"><a class="reference internal" href="#spi-register">3.7.4.1. <strong>spi_register</strong></a></li> <li class="toctree-l3"><a class="reference internal" href="#id4">3.8.4. SPI 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#device-open">3.7.4.2. <strong>device_open</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#spi-register">3.8.4.1. <strong>spi_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-close">3.7.4.3. <strong>device_close</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-open">3.8.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-control">3.7.4.4. <strong>device_control</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-close">3.8.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-write">3.7.4.5. <strong>device_write</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-control">3.8.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-read">3.7.4.6. <strong>device_read</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-write">3.8.4.5. <strong>device_write</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.7.4.7. <strong>device_set_callback</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-read">3.8.4.6. <strong>device_read</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#spi-transmit">3.7.4.8. <strong>spi_transmit</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.8.4.7. <strong>device_set_callback</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#spi-receive">3.7.4.9. <strong>spi_receive</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#spi-transmit">3.8.4.8. <strong>spi_transmit</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#spi-transmit-receive">3.7.4.10. <strong>spi_transmit_receive</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#spi-receive">3.8.4.9. <strong>spi_receive</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#spi-transmit-receive">3.8.4.10. <strong>spi_transmit_receive</strong></a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
</li> </li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li> <li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
@ -205,7 +207,7 @@
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li> <li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.7. </span>SPI 设备</li> <li><span class="section-number">3.8. </span>SPI 设备</li>
<li class="wy-breadcrumbs-aside"> <li class="wy-breadcrumbs-aside">
@ -225,9 +227,9 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<div class="section" id="spi"> <div class="section" id="spi">
<h1><span class="section-number">3.7. </span>SPI 设备<a class="headerlink" href="#spi" title="永久链接至标题"></a></h1> <h1><span class="section-number">3.8. </span>SPI 设备<a class="headerlink" href="#spi" title="永久链接至标题"></a></h1>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">3.7.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.8.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>串行外设接口Serial Peripheral Interface Bus, SPI是一种用于短程通信的同步串行通信接口规范装置之间使用全 <p>串行外设接口Serial Peripheral Interface Bus, SPI是一种用于短程通信的同步串行通信接口规范装置之间使用全
双工模式通信,是一个主机和一个或多个从机的主从模式。需要至少 4 根线,事实上 3 根也可以(单向传输时), 包括 双工模式通信,是一个主机和一个或多个从机的主从模式。需要至少 4 根线,事实上 3 根也可以(单向传输时), 包括
SDI数据输入、SDO数据输出、SCLK时钟、CS片选。博流系列 MCU 中 SPI 设备具有以下特性:</p> SDI数据输入、SDO数据输出、SCLK时钟、CS片选。博流系列 MCU 中 SPI 设备具有以下特性:</p>
@ -244,7 +246,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</ul> </ul>
</div> </div>
<div class="section" id="id2"> <div class="section" id="id2">
<h2><span class="section-number">3.7.2. </span>SPI 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.8.2. </span>SPI 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">spi_device</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">spi_device</span>
<span class="p">{</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="k">struct</span> <span class="nc">device</span> <span class="n">parent</span><span class="p">;</span>
@ -305,7 +307,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div> </div>
</div> </div>
<div class="section" id="id3"> <div class="section" id="id3">
<h2><span class="section-number">3.7.3. </span>SPI 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.8.3. </span>SPI 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>每一个 SPI 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_spi.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_SPI0</span></code> <code class="docutils literal notranslate"><span class="pre">SPI0_CONFIG</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">SPI0</span></code> 设备就可以进行注册和使用了。</p> <p>每一个 SPI 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_spi.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_SPI0</span></code> <code class="docutils literal notranslate"><span class="pre">SPI0_CONFIG</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">SPI0</span></code> 设备就可以进行注册和使用了。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span>
<span class="cp">#if defined(BSP_USING_SPI0)</span> <span class="cp">#if defined(BSP_USING_SPI0)</span>
@ -339,11 +341,11 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div> </div>
</div> </div>
<div class="section" id="id4"> <div class="section" id="id4">
<h2><span class="section-number">3.7.4. </span>SPI 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.8.4. </span>SPI 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<p>SPI 设备接口全部遵循标准设备驱动管理层提供的接口。</p> <p>SPI 设备接口全部遵循标准设备驱动管理层提供的接口。</p>
<div class="section" id="spi-register"> <div class="section" id="spi-register">
<h3><span class="section-number">3.7.4.1. </span><strong>spi_register</strong><a class="headerlink" href="#spi-register" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.8.4.1. </span><strong>spi_register</strong><a class="headerlink" href="#spi-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">spi_register</span></code> 用来注册一个 SPI 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 SPI 设备的宏定义,例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_SPI0</span></code> 方可使用 SPI0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 SPI 设备。</p> <p><code class="docutils literal notranslate"><span class="pre">spi_register</span></code> 用来注册 SPI 设备标准驱动接口,在注册之前需要打开对应 SPI 设备的宏定义,例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_SPI0</span></code> 方可使用 SPI0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 SPI 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">spi_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">spi_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">spi_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">spi_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div> </pre></div>
</div> </div>
@ -364,7 +366,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div> </div>
</div> </div>
<div class="section" id="device-open"> <div class="section" id="device-open">
<h3><span class="section-number">3.7.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.8.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_open</span></code></p> <p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_open</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span>
</pre></div> </pre></div>
@ -385,7 +387,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div> </div>
</div> </div>
<div class="section" id="device-close"> <div class="section" id="device-close">
<h3><span class="section-number">3.7.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.8.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_close</span></code></p> <p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_close</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span>
</pre></div> </pre></div>
@ -396,7 +398,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</ul> </ul>
</div> </div>
<div class="section" id="device-control"> <div class="section" id="device-control">
<h3><span class="section-number">3.7.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.8.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_control</span></code></p> <p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_control</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span>
</pre></div> </pre></div>
@ -473,7 +475,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</table> </table>
</div> </div>
<div class="section" id="device-write"> <div class="section" id="device-write">
<h3><span class="section-number">3.7.4.5. </span><strong>device_write</strong><a class="headerlink" href="#device-write" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.8.4.5. </span><strong>device_write</strong><a class="headerlink" href="#device-write" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_write</span></code> 用于 SPI 设备数据的发送发送方式根据打开方式可以是轮询、中断、dma。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_write</span></code></p> <p><code class="docutils literal notranslate"><span class="pre">device_write</span></code> 用于 SPI 设备数据的发送发送方式根据打开方式可以是轮询、中断、dma。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_write</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_write</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_write</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div> </pre></div>
@ -487,7 +489,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</ul> </ul>
</div> </div>
<div class="section" id="device-read"> <div class="section" id="device-read">
<h3><span class="section-number">3.7.4.6. </span><strong>device_read</strong><a class="headerlink" href="#device-read" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.8.4.6. </span><strong>device_read</strong><a class="headerlink" href="#device-read" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_read</span></code> 用于 SPI 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_read</span></code></p> <p><code class="docutils literal notranslate"><span class="pre">device_read</span></code> 用于 SPI 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_read</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_read</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_read</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div> </pre></div>
@ -501,7 +503,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</ul> </ul>
</div> </div>
<div class="section" id="device-set-callback"> <div class="section" id="device-set-callback">
<h3><span class="section-number">3.7.4.7. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.8.4.7. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个 SPI 设备中断回调函数。</p> <p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个 SPI 设备中断回调函数。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span>
</pre></div> </pre></div>
@ -530,7 +532,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div> </div>
</div> </div>
<div class="section" id="spi-transmit"> <div class="section" id="spi-transmit">
<h3><span class="section-number">3.7.4.8. </span><strong>spi_transmit</strong><a class="headerlink" href="#spi-transmit" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.8.4.8. </span><strong>spi_transmit</strong><a class="headerlink" href="#spi-transmit" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">spi_transmit</span></code> 用于 SPI 设备数据的发送。</p> <p><code class="docutils literal notranslate"><span class="pre">spi_transmit</span></code> 用于 SPI 设备数据的发送。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">spi_transmit</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">type</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">spi_transmit</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">type</span><span class="p">);</span>
</pre></div> </pre></div>
@ -550,7 +552,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div> </div>
</div> </div>
<div class="section" id="spi-receive"> <div class="section" id="spi-receive">
<h3><span class="section-number">3.7.4.9. </span><strong>spi_receive</strong><a class="headerlink" href="#spi-receive" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.8.4.9. </span><strong>spi_receive</strong><a class="headerlink" href="#spi-receive" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">spi_receive</span></code> 用于 SPI 设备数据的接收。</p> <p><code class="docutils literal notranslate"><span class="pre">spi_receive</span></code> 用于 SPI 设备数据的接收。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">spi_receive</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">type</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">spi_receive</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">type</span><span class="p">);</span>
</pre></div> </pre></div>
@ -563,7 +565,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</ul> </ul>
</div> </div>
<div class="section" id="spi-transmit-receive"> <div class="section" id="spi-transmit-receive">
<h3><span class="section-number">3.7.4.10. </span><strong>spi_transmit_receive</strong><a class="headerlink" href="#spi-transmit-receive" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.8.4.10. </span><strong>spi_transmit_receive</strong><a class="headerlink" href="#spi-transmit-receive" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">spi_transmit_receive</span></code> 用于 SPI 设备数据的发送和接收。</p> <p><code class="docutils literal notranslate"><span class="pre">spi_transmit_receive</span></code> 用于 SPI 设备数据的发送和接收。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">spi_transmit_receive</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">send_buf</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">recv_buf</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">length</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">type</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">spi_transmit_receive</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">send_buf</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">recv_buf</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">length</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">type</span><span class="p">);</span>
</pre></div> </pre></div>
@ -585,8 +587,8 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div> </div>
<footer> <footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_adc.html" class="btn btn-neutral float-right" title="3.8. ADC 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> <a href="api_adc.html" class="btn btn-neutral float-right" title="3.9. ADC 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_i2c.html" class="btn btn-neutral float-left" title="3.6. I2C 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> <a href="api_i2s.html" class="btn btn-neutral float-left" title="3.7. I2S 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div> </div>
<hr/> <hr/>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.10. TIMER 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>3.11. TIMER 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -39,8 +39,8 @@
<link rel="index" title="索引" href="../../genindex.html" /> <link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" /> <link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="4. Shell" href="../shell/api_shell.html" /> <link rel="next" title="3.12. USB 设备" href="api_usb.html" />
<link rel="prev" title="3.9. DAC 设备" href="api_dac.html" /> <link rel="prev" title="3.10. DAC 设备" href="api_dac.html" />
</head> </head>
<body class="wy-body-for-nav"> <body class="wy-body-for-nav">
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -108,23 +108,25 @@
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.10. TIMER 设备</a><ul> <li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.10.1. 简介</a></li> <li class="toctree-l2 current"><a class="current reference internal" href="#">3.11. TIMER 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.10.2. TIMER 设备结构体定义</a></li> <li class="toctree-l3"><a class="reference internal" href="#id1">3.11.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.10.3. TIMER 设备参数配置表</a></li> <li class="toctree-l3"><a class="reference internal" href="#id2">3.11.2. TIMER 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.10.4. TIMER 设备接口</a><ul> <li class="toctree-l3"><a class="reference internal" href="#id3">3.11.3. TIMER 设备参数配置表</a></li>
<li class="toctree-l4"><a class="reference internal" href="#timer-register">3.10.4.1. <strong>timer_register</strong></a></li> <li class="toctree-l3"><a class="reference internal" href="#id4">3.11.4. TIMER 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#device-open">3.10.4.2. <strong>device_open</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#timer-register">3.11.4.1. <strong>timer_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-close">3.10.4.3. <strong>device_close</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-open">3.11.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-control">3.10.4.4. <strong>device_control</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-close">3.11.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.10.4.5. <strong>device_set_callback</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#device-control">3.11.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.11.4.5. <strong>device_set_callback</strong></a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
</li> </li>
<li class="toctree-l2"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li> <li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
@ -200,7 +202,7 @@
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li> <li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.10. </span>TIMER 设备</li> <li><span class="section-number">3.11. </span>TIMER 设备</li>
<li class="wy-breadcrumbs-aside"> <li class="wy-breadcrumbs-aside">
@ -220,9 +222,9 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<div class="section" id="timer"> <div class="section" id="timer">
<h1><span class="section-number">3.10. </span>TIMER 设备<a class="headerlink" href="#timer" title="永久链接至标题"></a></h1> <h1><span class="section-number">3.11. </span>TIMER 设备<a class="headerlink" href="#timer" title="永久链接至标题"></a></h1>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><span class="section-number">3.10.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.11.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>TIMER 通用定时器,博流系列 MCU 中 TIMER 设备具有以下特性:</p> <p>TIMER 通用定时器,博流系列 MCU 中 TIMER 设备具有以下特性:</p>
<ul class="simple"> <ul class="simple">
<li><p>多种时钟来源选择</p></li> <li><p>多种时钟来源选择</p></li>
@ -236,7 +238,7 @@
</ul> </ul>
</div> </div>
<div class="section" id="id2"> <div class="section" id="id2">
<h2><span class="section-number">3.10.2. </span>TIMER 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.11.2. </span>TIMER 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">timer_device</span> <span class="p">{</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">timer_device</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="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>
@ -281,7 +283,7 @@
</div> </div>
</div> </div>
<div class="section" id="id3"> <div class="section" id="id3">
<h2><span class="section-number">3.10.3. </span>TIMER 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.11.3. </span>TIMER 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>每一个 TIMER 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_timer.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_TIMER_CH0</span></code> <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_CONFIG</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_INDEX</span></code> 设备就可以进行注册和使用了。</p> <p>每一个 TIMER 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_timer.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_TIMER_CH0</span></code> <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_CONFIG</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_INDEX</span></code> 设备就可以进行注册和使用了。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span>
<span class="cp">#if defined(BSP_USING_TIMER_CH0)</span> <span class="cp">#if defined(BSP_USING_TIMER_CH0)</span>
@ -326,11 +328,11 @@
</div> </div>
</div> </div>
<div class="section" id="id4"> <div class="section" id="id4">
<h2><span class="section-number">3.10.4. </span>TIMER 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2> <h2><span class="section-number">3.11.4. </span>TIMER 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<p>TIMER 设备接口全部遵循标准设备驱动管理层提供的接口。</p> <p>TIMER 设备接口全部遵循标准设备驱动管理层提供的接口。</p>
<div class="section" id="timer-register"> <div class="section" id="timer-register">
<h3><span class="section-number">3.10.4.1. </span><strong>timer_register</strong><a class="headerlink" href="#timer-register" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.11.4.1. </span><strong>timer_register</strong><a class="headerlink" href="#timer-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">timer_register</span></code> 用来注册一个 TIMER 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 TIMER 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_TIMER_CH0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_INDEX</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_INDEX</span></code> 设备。</p> <p><code class="docutils literal notranslate"><span class="pre">timer_register</span></code> 用来注册 TIMER 设备标准驱动接口,在注册之前需要打开对应 TIMER 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_TIMER_CH0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_INDEX</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_INDEX</span></code> 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">timer_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">timer_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">timer_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">timer_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div> </pre></div>
</div> </div>
@ -353,7 +355,7 @@
</div> </div>
</div> </div>
<div class="section" id="device-open"> <div class="section" id="device-open">
<h3><span class="section-number">3.10.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.11.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于 TIMER 设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">timer_open</span></code></p> <p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于 TIMER 设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">timer_open</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span>
</pre></div> </pre></div>
@ -373,7 +375,7 @@
</div> </div>
</div> </div>
<div class="section" id="device-close"> <div class="section" id="device-close">
<h3><span class="section-number">3.10.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.11.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">timer_close</span></code></p> <p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">timer_close</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span>
</pre></div> </pre></div>
@ -384,7 +386,7 @@
</ul> </ul>
</div> </div>
<div class="section" id="device-control"> <div class="section" id="device-control">
<h3><span class="section-number">3.10.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.11.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对 TIMER 设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">timer_control</span></code></p> <p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对 TIMER 设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">timer_control</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span>
</pre></div> </pre></div>
@ -452,7 +454,7 @@
</table> </table>
</div> </div>
<div class="section" id="device-set-callback"> <div class="section" id="device-set-callback">
<h3><span class="section-number">3.10.4.5. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.11.4.5. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个 TIMER 中断回调函数。</p> <p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个 TIMER 中断回调函数。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span>
</pre></div> </pre></div>
@ -489,8 +491,8 @@
</div> </div>
<footer> <footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../shell/api_shell.html" class="btn btn-neutral float-right" title="4. Shell" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> <a href="api_usb.html" class="btn btn-neutral float-right" title="3.12. USB 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_dac.html" class="btn btn-neutral float-left" title="3.9. DAC 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> <a href="api_dac.html" class="btn btn-neutral float-left" title="3.10. DAC 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div> </div>
<hr/> <hr/>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.3. UART 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>3.3. UART 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -123,10 +123,12 @@
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li> <li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
@ -334,7 +336,7 @@
<p>UART 设备接口全部遵循标准设备驱动管理层提供的接口。</p> <p>UART 设备接口全部遵循标准设备驱动管理层提供的接口。</p>
<div class="section" id="uart-register"> <div class="section" id="uart-register">
<h3><span class="section-number">3.3.4.1. </span><strong>uart_register</strong><a class="headerlink" href="#uart-register" title="永久链接至标题"></a></h3> <h3><span class="section-number">3.3.4.1. </span><strong>uart_register</strong><a class="headerlink" href="#uart-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">uart_register</span></code> 用来注册一个 UART 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 UART 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_UART0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">UART0</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">UART0</span></code> 设备。</p> <p><code class="docutils literal notranslate"><span class="pre">uart_register</span></code> 用来注册 UART 设备标准驱动接口,在注册之前需要打开对应 UART 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_UART0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">UART0</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">UART0</span></code> 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">uart_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">uart_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span> <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">uart_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">uart_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div> </pre></div>
</div> </div>

View File

@ -0,0 +1,687 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.12. USB 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="4. Shell" href="../shell/api_shell.html" />
<link rel="prev" title="3.11. TIMER 设备" href="api_timer.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
</a>
<div class="version">
0.2
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">3. Peripheral</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.12. USB 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.12.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.12.2. USB 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.12.3. USB 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-register">3.12.3.1. <strong>usb_dc_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-open">3.12.3.2. <strong>device_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-close">3.12.3.3. <strong>device_close</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-control">3.12.3.4. <strong>device_control</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-write">3.12.3.5. <strong>device_write</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-read">3.12.3.6. <strong>device_read</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.12.3.7. <strong>device_set_callback</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-send-from-ringbuffer">3.12.3.8. <strong>usb_dc_send_from_ringbuffer</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-receive-to-ringbuffer">3.12.3.9. <strong>usb_dc_receive_to_ringbuffer</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-set-address">3.12.3.10. <strong>usb_dc_set_address</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-ep-open">3.12.3.11. <strong>usb_dc_ep_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-ep-close">3.12.3.12. <strong>usb_dc_ep_close</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-ep-set-stall">3.12.3.13. <strong>usb_dc_ep_set_stall</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-ep-clear-stall">3.12.3.14. <strong>usb_dc_ep_clear_stall</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-ep-is-stalled">3.12.3.15. <strong>usb_dc_ep_is_stalled</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-ep-write">3.12.3.16. <strong>usb_dc_ep_write</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-ep-read">3.12.3.17. <strong>usb_dc_ep_read</strong></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.12. </span>USB 设备</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/api_reference/peripheral/api_usb.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="usb">
<h1><span class="section-number">3.12. </span>USB 设备<a class="headerlink" href="#usb" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">3.12.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>USB 通信串行总线Universal Serial Bus是一种外部总线标准用于规范电脑和外部设备的连接和通讯是应用在 PC 领域的接口技术。博流 BL70X 系列 MCU 中 USB 设备具有以下特性:</p>
<ul class="simple">
<li><p>支持 USB1.1 全速设备</p></li>
<li><p>支持 8 个双向端点EP0 可配置为控制/批量/中断/同步端点EP1-EP7 可配置为批量/中断/同步端点</p></li>
<li><p>每个端点均包含 TX、RX 两个方向的 FIFOFIFO 深度 64 字节,并且支持 DMA</p></li>
<li><p>支持内部 transceiver</p></li>
<li><p>支持 suspend/resume</p></li>
<li><p>支持 LPM</p></li>
<li><p>支持多种 USB 中断配置</p></li>
</ul>
</div>
<div class="section" id="id2">
<h2><span class="section-number">3.12.2. </span>USB 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">usb_dc_device</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="n">usb_dc_ep_state_t</span> <span class="n">in_ep</span><span class="p">[</span><span class="mi">8</span><span class="p">];</span>
<span class="n">usb_dc_ep_state_t</span> <span class="n">out_ep</span><span class="p">[</span><span class="mi">8</span><span class="p">];</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">tx_dma</span><span class="p">;</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">rx_dma</span><span class="p">;</span>
<span class="p">}</span> <span class="n">usb_dc_device_t</span><span class="p">;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>parent 继承父类属性</p></li>
<li><p>id USB id0 表示 USB0</p></li>
<li><p>in_ep USB 输入端点的参数</p></li>
<li><p>out_ep USB 输出端点的参数</p></li>
<li><p>tx_dma 附加的发送 dma 句柄</p></li>
<li><p>rx_dma 附加的接收 dma 句柄</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">in_ep</span></code> <code class="docutils literal notranslate"><span class="pre">out_ep</span></code> 的结构如下</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span>
<span class="p">{</span>
<span class="kt">uint8_t</span> <span class="n">ep_ena</span><span class="p">;</span>
<span class="kt">uint32_t</span> <span class="n">is_stalled</span><span class="p">;</span>
<span class="k">struct</span> <span class="nc">usb_dc_ep_cfg</span> <span class="n">ep_cfg</span><span class="p">;</span>
<span class="p">}</span> <span class="n">usb_dc_ep_state_t</span><span class="p">;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>ep_ena 继承父类属性</p></li>
<li><p>is_stalled 挂起状态0表示非挂起状态1表示挂起状态</p></li>
<li><p>ep_cfg 端点的属性</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">ep_cfg</span></code> 的结构如下</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="nc">usb_dc_ep_cfg</span> <span class="p">{</span>
<span class="kt">uint8_t</span> <span class="n">ep_addr</span><span class="p">;</span>
<span class="kt">uint16_t</span> <span class="n">ep_mps</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">ep_type</span><span class="p">;</span>
<span class="p">};</span>
</pre></div>
</div>
<ul class="simple">
<li><p>ep_addr 端点的地址</p></li>
<li><p>ep_mps 端点最大 packet 长度</p></li>
<li><p>ep_type 端点传输类型</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">注解</p>
<p>以上参数无需用户配置</p>
</div>
</div>
<div class="section" id="id3">
<h2><span class="section-number">3.12.3. </span>USB 设备接口<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>USB 设备接口遵循标准设备驱动管理层提供的接口。</p>
<div class="section" id="usb-dc-register">
<h3><span class="section-number">3.12.3.1. </span><strong>usb_dc_register</strong><a class="headerlink" href="#usb-dc-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">usb_dc_register</span></code> 用来注册 USB 设备标准驱动接口,在注册之前需要打开对应 USB 设备的宏定义,例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_USB</span></code> 方可使用 USB 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 USB 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">usb_dc_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">usb_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>index 要注册的设备索引</p></li>
<li><p>name 为注册的设备命名</p></li>
<li><p>flag 默认可读可写属性</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="device-open">
<h3><span class="section-number">3.12.3.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">usb_open</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>oflag 设备的打开方式</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="device-close">
<h3><span class="section-number">3.12.3.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">usb_close</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="device-control">
<h3><span class="section-number">3.12.3.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">usb_control</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>cmd 设备控制命令</p></li>
<li><p>args 控制参数</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
<p>USB 设备除了标准的控制命令,还具有私有的控制命令。</p>
<table class="colwidths-given docutils align-default" id="id12">
<caption><span class="caption-text">table1</span><a class="headerlink" href="#id12" title="永久链接至表格"></a></caption>
<colgroup>
<col style="width: 27%" />
<col style="width: 18%" />
<col style="width: 55%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>cmd</p></th>
<th class="head"><p>args</p></th>
<th class="head"><p>description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>DEVICE_CTRL_USB_DC_SET_ACK</p></td>
<td><p>uint32_t</p></td>
<td><p>设置 USB 设备 ACK 状态</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_USB_DC_ENUM_ON</p></td>
<td><p>NULL</p></td>
<td><p>打开 USB 设备枚举</p></td>
</tr>
<tr class="row-even"><td><p>DEVICE_CTRL_USB_DC_ENUM_OFF</p></td>
<td><p>NULL</p></td>
<td><p>关闭 USB 设备枚举</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_USB_DC_GET_EP_TX_FIFO_CNT</p></td>
<td><p>uint32_t</p></td>
<td><p>设置 USB 设备发送 FIFO 的个数</p></td>
</tr>
<tr class="row-even"><td><p>DEVICE_CTRL_USB_DC_GET_EP_RX_FIFO_CNT</p></td>
<td><p>uint32_t</p></td>
<td><p>设置 USB 设备接收 FIFO 的个数</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_ATTACH_TX_DMA</p></td>
<td><p>device*</p></td>
<td><p>设置 USB 设备发送 dma 句柄</p></td>
</tr>
<tr class="row-even"><td><p>DEVICE_CTRL_ATTACH_RX_DMA</p></td>
<td><p>device*</p></td>
<td><p>设置 USB 设备接收 dma 句柄</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_USB_DC_SET_TX_DMA</p></td>
<td><p>uint32_t</p></td>
<td><p>开启 USB 设备通过 dma 发送</p></td>
</tr>
<tr class="row-even"><td><p>DEVICE_CTRL_USB_DC_SET_RX_DMA</p></td>
<td><p>uint32_t</p></td>
<td><p>开启 USB 设备通过 dma 接收</p></td>
</tr>
</tbody>
</table>
<p><code class="docutils literal notranslate"><span class="pre">args</span></code> 支持的标准控制命令 <code class="docutils literal notranslate"><span class="pre">cmd</span></code> 具体如下:</p>
<table class="colwidths-given docutils align-default" id="id13">
<caption><span class="caption-text">table2</span><a class="headerlink" href="#id13" title="永久链接至表格"></a></caption>
<colgroup>
<col style="width: 27%" />
<col style="width: 18%" />
<col style="width: 55%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>cmd</p></th>
<th class="head"><p>args</p></th>
<th class="head"><p>description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>DEVICE_CTRL_SET_INT</p></td>
<td><p>uint32_t</p></td>
<td><p>开启 USB 中断</p></td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="device-write">
<h3><span class="section-number">3.12.3.5. </span><strong>device_write</strong><a class="headerlink" href="#device-write" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_write</span></code> 用于 USB 设备数据的发送,当前只支持同步传输 dma 发送,实际调用 <code class="docutils literal notranslate"><span class="pre">usb_write</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_write</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>pos 无作用</p></li>
<li><p>buffer 要写入的 buffer 缓冲区</p></li>
<li><p>size 要写入的长度</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="device-read">
<h3><span class="section-number">3.12.3.6. </span><strong>device_read</strong><a class="headerlink" href="#device-read" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_read</span></code> 用于 USB 设备数据的接收,当前只支持同步传输 dma 接收。实际调用 <code class="docutils literal notranslate"><span class="pre">usb_read</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_read</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>pos 无作用</p></li>
<li><p>buffer 要读入的 buffer 缓冲区</p></li>
<li><p>size 要读入的长度</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="device-set-callback">
<h3><span class="section-number">3.12.3.7. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个 USB 设备中断回调函数。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span>
</pre></div>
</div>
<ul>
<li><p>dev 设备句柄</p></li>
<li><p>callback 要注册的中断回调函数</p></li>
<li><p>return 错误码0表示成功其他表示失败</p>
<blockquote>
<div><ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>args 接收发送缓冲区,数据类型为 uint8_t*</p></li>
<li><p>size 传输长度</p></li>
<li><p>event 中断事件类型</p></li>
</ul>
</div></blockquote>
</li>
</ul>
<p>USB 设备 <code class="docutils literal notranslate"><span class="pre">event</span></code> 类型如下</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="n">usb_dc_event_type</span> <span class="p">{</span>
<span class="cm">/** USB error reported by the controller */</span>
<span class="n">USB_DC_EVENT_ERROR</span><span class="p">,</span>
<span class="cm">/** USB reset */</span>
<span class="n">USB_DC_EVENT_RESET</span><span class="p">,</span>
<span class="cm">/** Start of Frame received */</span>
<span class="n">USB_DC_EVENT_SOF</span><span class="p">,</span>
<span class="cm">/** USB connection established, hardware enumeration is completed */</span>
<span class="n">USB_DC_EVENT_CONNECTED</span><span class="p">,</span>
<span class="cm">/** USB configuration done */</span>
<span class="n">USB_DC_EVENT_CONFIGURED</span><span class="p">,</span>
<span class="cm">/** USB connection suspended by the HOST */</span>
<span class="n">USB_DC_EVENT_SUSPEND</span><span class="p">,</span>
<span class="cm">/** USB connection lost */</span>
<span class="n">USB_DC_EVENT_DISCONNECTED</span><span class="p">,</span>
<span class="cm">/** USB connection resumed by the HOST */</span>
<span class="n">USB_DC_EVENT_RESUME</span><span class="p">,</span>
<span class="cm">/** setup packet received */</span>
<span class="n">USB_DC_EVENT_SETUP_NOTIFY</span><span class="p">,</span>
<span class="cm">/** ep0 in packet received */</span>
<span class="n">USB_DC_EVENT_EP0_IN_NOTIFY</span><span class="p">,</span>
<span class="cm">/** ep0 out packet received */</span>
<span class="n">USB_DC_EVENT_EP0_OUT_NOTIFY</span><span class="p">,</span>
<span class="cm">/** ep in packet except ep0 received */</span>
<span class="n">USB_DC_EVENT_EP_IN_NOTIFY</span><span class="p">,</span>
<span class="cm">/** ep out packet except ep0 received */</span>
<span class="n">USB_DC_EVENT_EP_OUT_NOTIFY</span><span class="p">,</span>
<span class="cm">/** Initial USB connection status */</span>
<span class="n">USB_DC_EVENT_UNKNOWN</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
<div class="section" id="usb-dc-send-from-ringbuffer">
<h3><span class="section-number">3.12.3.8. </span><strong>usb_dc_send_from_ringbuffer</strong><a class="headerlink" href="#usb-dc-send-from-ringbuffer" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">usb_dc_send_from_ringbuffer</span></code> 用于从 ringbuffer 中读取数据并通过某个端点将数据发送出去。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">usb_dc_send_from_ringbuffer</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="n">Ring_Buffer_Type</span> <span class="o">*</span><span class="n">rb</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">ep</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备指针</p></li>
<li><p>rb rinbuffer 结构体指针</p></li>
<li><p>ep 端点地址</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="usb-dc-receive-to-ringbuffer">
<h3><span class="section-number">3.12.3.9. </span><strong>usb_dc_receive_to_ringbuffer</strong><a class="headerlink" href="#usb-dc-receive-to-ringbuffer" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">usb_dc_receive_to_ringbuffer</span></code> 用于从某个端点接收数据并保存到 ringbuffer 中。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">usb_dc_receive_to_ringbuffer</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="n">Ring_Buffer_Type</span> <span class="o">*</span><span class="n">rb</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">ep</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备指针</p></li>
<li><p>rb rinbuffer 结构体指针</p></li>
<li><p>ep 端点地址</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
<div class="admonition important">
<p class="admonition-title">重要</p>
<p>以下函数为 USB Device 协议栈需要实现的 porting 接口,用户无需在应用层调用。</p>
</div>
</div>
<div class="section" id="usb-dc-set-address">
<span id="id4"></span><h3><span class="section-number">3.12.3.10. </span><strong>usb_dc_set_address</strong><a class="headerlink" href="#usb-dc-set-address" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">usb_dc_set_address</span></code> 用于 USB 设备地址的配置。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">usb_dc_set_address</span><span class="p">(</span><span class="k">const</span> <span class="kt">uint8_t</span> <span class="n">addr</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>addr USB 设备的地址</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="usb-dc-ep-open">
<span id="id5"></span><h3><span class="section-number">3.12.3.11. </span><strong>usb_dc_ep_open</strong><a class="headerlink" href="#usb-dc-ep-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">usb_dc_ep_open</span></code> 用于 USB 设备端点的开启。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">usb_dc_ep_open</span><span class="p">(</span><span class="k">const</span> <span class="k">struct</span> <span class="nc">usbd_endpoint_cfg</span> <span class="o">*</span><span class="n">ep_cfg</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>ep_cfg 端点的属性</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="usb-dc-ep-close">
<span id="id6"></span><h3><span class="section-number">3.12.3.12. </span><strong>usb_dc_ep_close</strong><a class="headerlink" href="#usb-dc-ep-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">usb_dc_ep_close</span></code> 用于 USB 设备端点的关闭。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">usb_dc_ep_close</span><span class="p">(</span><span class="k">const</span> <span class="kt">uint8_t</span> <span class="n">ep</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>ep 端点地址</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="usb-dc-ep-set-stall">
<span id="id7"></span><h3><span class="section-number">3.12.3.13. </span><strong>usb_dc_ep_set_stall</strong><a class="headerlink" href="#usb-dc-ep-set-stall" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">usb_dc_ep_set_stall</span></code> 用于 USB 设备挂起状态的设置,挂起状态下无法收发数据。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">usb_dc_ep_set_stall</span><span class="p">(</span><span class="k">const</span> <span class="kt">uint8_t</span> <span class="n">ep</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>ep 端点地址</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="usb-dc-ep-clear-stall">
<span id="id8"></span><h3><span class="section-number">3.12.3.14. </span><strong>usb_dc_ep_clear_stall</strong><a class="headerlink" href="#usb-dc-ep-clear-stall" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">usb_dc_ep_clear_stall</span></code> 用于端点挂起状态的清除,非挂起状态可以进行收发数据。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">usb_dc_ep_clear_stall</span><span class="p">(</span><span class="k">const</span> <span class="kt">uint8_t</span> <span class="n">ep</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>ep 端点地址</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="usb-dc-ep-is-stalled">
<span id="id9"></span><h3><span class="section-number">3.12.3.15. </span><strong>usb_dc_ep_is_stalled</strong><a class="headerlink" href="#usb-dc-ep-is-stalled" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">usb_dc_ep_is_stalled</span></code> 用于 USB 设备挂起状态的查询。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">usb_dc_ep_is_stalled</span><span class="p">(</span><span class="k">const</span> <span class="kt">uint8_t</span> <span class="n">ep</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="o">*</span><span class="n">stalled</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>ep 端点id</p></li>
<li><p>stalled 保存挂起状态的地址, 0 表示非挂起状态, 1 表示挂起状态</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="usb-dc-ep-write">
<span id="id10"></span><h3><span class="section-number">3.12.3.16. </span><strong>usb_dc_ep_write</strong><a class="headerlink" href="#usb-dc-ep-write" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">usb_dc_ep_write</span></code> 用于向某个端点发送数据。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">usb_dc_ep_write</span><span class="p">(</span><span class="k">const</span> <span class="kt">uint8_t</span> <span class="n">ep</span><span class="p">,</span> <span class="k">const</span> <span class="kt">uint8_t</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">data_len</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">ret_bytes</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>ep 端点地址</p></li>
<li><p>data 要发送的数据地址</p></li>
<li><p>data_len 要发送数据的长度</p></li>
<li><p>ret_bytes 实际成功发生的数据长度</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
<div class="section" id="usb-dc-ep-read">
<span id="id11"></span><h3><span class="section-number">3.12.3.17. </span><strong>usb_dc_ep_read</strong><a class="headerlink" href="#usb-dc-ep-read" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">usb_dc_ep_read</span></code> 用于从某个端点接收数据。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">usb_dc_ep_read</span><span class="p">(</span><span class="k">const</span> <span class="kt">uint8_t</span> <span class="n">ep</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">max_data_len</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">read_bytes</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>ep 端点地址</p></li>
<li><p>data 要接收数据的地址</p></li>
<li><p>data_len 要接收数据的长度,不能大于最大包长</p></li>
<li><p>ret_bytes 实际成功接收的数据长度</p></li>
<li><p>return 错误码0表示成功其他表示失败</p></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../shell/api_shell.html" class="btn btn-neutral float-right" title="4. Shell" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_timer.html" class="btn btn-neutral float-left" title="3.11. TIMER 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; 版权所有 2021, BouffaloLab Co., Ltd.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3. Peripheral &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>3. Peripheral &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -108,10 +108,12 @@
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li> <li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li> <li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
@ -214,10 +216,12 @@
<li class="toctree-l1"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li> <li class="toctree-l1"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li> <li class="toctree-l1"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li> <li class="toctree-l1"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li> <li class="toctree-l1"><a class="reference internal" href="api_i2s.html">3.7. I2S 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li> <li class="toctree-l1"><a class="reference internal" href="api_spi.html">3.8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li> <li class="toctree-l1"><a class="reference internal" href="api_adc.html">3.9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li> <li class="toctree-l1"><a class="reference internal" href="api_dac.html">3.10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_timer.html">3.11. TIMER 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_usb.html">3.12. USB 设备</a></li>
</ul> </ul>
</div> </div>
</div> </div>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>4. Shell &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>4. Shell &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -40,7 +40,7 @@
<link rel="index" title="索引" href="../../genindex.html" /> <link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" /> <link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="5. USB Stack" href="../usb%20stack/api_usb_stack.html" /> <link rel="next" title="5. USB Stack" href="../usb%20stack/api_usb_stack.html" />
<link rel="prev" title="3.10. TIMER 设备" href="../peripheral/api_timer.html" /> <link rel="prev" title="3.12. USB 设备" href="../peripheral/api_usb.html" />
</head> </head>
<body class="wy-body-for-nav"> <body class="wy-body-for-nav">
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -277,7 +277,7 @@
<footer> <footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../usb%20stack/api_usb_stack.html" class="btn btn-neutral float-right" title="5. USB Stack" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> <a href="../usb%20stack/api_usb_stack.html" class="btn btn-neutral float-right" title="5. USB Stack" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="../peripheral/api_timer.html" class="btn btn-neutral float-left" title="3.10. TIMER 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> <a href="../peripheral/api_usb.html" class="btn btn-neutral float-left" title="3.12. USB 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div> </div>
<hr/> <hr/>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>5. USB Stack &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>5. USB Stack &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>
@ -104,36 +104,25 @@
<li class="toctree-l1"><a class="reference internal" href="../peripheral/index.html">3. Peripheral</a></li> <li class="toctree-l1"><a class="reference internal" href="../peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li> <li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">5. USB Stack</a><ul> <li class="toctree-l1 current"><a class="current reference internal" href="#">5. USB Stack</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#usb-device-porting">5.1. USB Device Porting 接口</a><ul> <li class="toctree-l2"><a class="reference internal" href="#usb-device-porting">5.1. USB DEVICE 协议栈 porting 接口</a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-set-address">5.1.1. <strong>usbd_set_address</strong></a></li> <li class="toctree-l2"><a class="reference internal" href="#usb-device">5.2. USB DEVICE 控制器接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-open">5.1.2. <strong>usbd_ep_open</strong></a></li> <li class="toctree-l3"><a class="reference internal" href="#usb-dc-init">5.2.1. <strong>usb_dc_init</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-close">5.1.3. <strong>usbd_ep_close</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-set-stall">5.1.4. <strong>usbd_ep_set_stall</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-clear-stall">5.1.5. <strong>usbd_ep_clear_stall</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-is-stalled">5.1.6. <strong>usbd_ep_is_stalled</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-write">5.1.7. <strong>usbd_ep_write</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-read">5.1.8. <strong>usbd_ep_read</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-event-notify-handler">5.1.9. <strong>usbd_event_notify_handler</strong></a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l2"><a class="reference internal" href="#usb-device">5.2. USB Device 应用层接口</a><ul> <li class="toctree-l2"><a class="reference internal" href="#id1">5.3. USB DEVICE 应用层接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">5.2.1. USB Device 控制器接口</a><ul> <li class="toctree-l3"><a class="reference internal" href="#id2">5.3.1. USB DEVICE 通用接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-init">5.2.1.1. <strong>usb_dc_init</strong></a></li> <li class="toctree-l4"><a class="reference internal" href="#usbd-desc-register">5.3.1.1. <strong>usbd_desc_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usbd-msosv1-desc-register">5.3.1.2. <strong>usbd_msosv1_desc_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usbd-class-add-interface">5.3.1.3. <strong>usbd_class_add_interface</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usbd-interface-add-endpoint">5.3.1.4. <strong>usbd_interface_add_endpoint</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-device-is-configured">5.3.1.5. <strong>usb_device_is_configured</strong></a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l3"><a class="reference internal" href="#id2">5.2.2. USB Device 通用接口</a><ul> <li class="toctree-l3"><a class="reference internal" href="#usb-device-cdc">5.3.2. USB Device CDC 类接口</a></li>
<li class="toctree-l4"><a class="reference internal" href="#usbd-desc-register">5.2.2.1. <strong>usbd_desc_register</strong></a></li> <li class="toctree-l3"><a class="reference internal" href="#usb-device-msc">5.3.3. USB Device MSC 类接口</a></li>
<li class="toctree-l4"><a class="reference internal" href="#usbd-msosv1-desc-register">5.2.2.2. <strong>usbd_msosv1_desc_register</strong></a></li> <li class="toctree-l3"><a class="reference internal" href="#usb-device-hid">5.3.4. USB Device HID 类接口</a></li>
<li class="toctree-l4"><a class="reference internal" href="#usbd-class-add-interface">5.2.2.3. <strong>usbd_class_add_interface</strong></a></li> <li class="toctree-l3"><a class="reference internal" href="#usb-device-audio">5.3.5. USB Device AUDIO 类接口</a></li>
<li class="toctree-l4"><a class="reference internal" href="#usbd-interface-add-endpoint">5.2.2.4. <strong>usbd_interface_add_endpoint</strong></a></li> <li class="toctree-l3"><a class="reference internal" href="#usb-device-video">5.3.6. USB Device VIDEO 类接口</a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-device-is-configured">5.2.2.5. <strong>usb_device_is_configured</strong></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#usb-device-cdc">5.2.3. USB Device CDC 类接口</a></li>
<li class="toctree-l3"><a class="reference internal" href="#usb-device-msc">5.2.4. USB Device MSC 类接口</a></li>
<li class="toctree-l3"><a class="reference internal" href="#usb-device-hid">5.2.5. USB Device HID 类接口</a></li>
<li class="toctree-l3"><a class="reference internal" href="#usb-device-audio">5.2.6. USB Device AUDIO 类接口</a></li>
<li class="toctree-l3"><a class="reference internal" href="#usb-device-video">5.2.7. USB Device VIDEO 类接口</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -228,7 +217,7 @@
<div class="section" id="usb-stack"> <div class="section" id="usb-stack">
<h1><span class="section-number">5. </span>USB Stack<a class="headerlink" href="#usb-stack" title="永久链接至标题"></a></h1> <h1><span class="section-number">5. </span>USB Stack<a class="headerlink" href="#usb-stack" title="永久链接至标题"></a></h1>
<p>USB Stack 是一个跨平台的、用于嵌入式 MCU 的 USB 协议栈,该协议栈对标准设备请求、CLASS 请求、VENDOR 请求规范了一套统一的函数框架,从而对复合设备或者使用自定义设备类时,能够在极短的时间内进行添加和移植。此外,该协议栈代码优美,内存占用小(不使用静态数组),通用性非常高,提供了一套标准的 porting 接口,供给不同的 MCU 使用。其中usb device 协议栈当前具有以下功能:</p> <p>USB Stack 是一个跨平台的、用于嵌入式 MCU 的 USB 协议栈。其中 DEVICE 协议栈对标准设备请求、CLASS 请求、VENDOR 请求规范了一套统一的函数框架,从而对复合设备或者使用自定义设备类时,能够在极短的时间内进行添加和移植,提供了一套标准的 porting 接口,供给不同的 MCU 使用,因此通用性非常高。此外在代码优美方面以及内存占用方面也是相当出色。USB DEVICE 协议栈当前具有以下功能:</p>
<ul class="simple"> <ul class="simple">
<li><p>支持 USB2.0 全速和高速设备</p></li> <li><p>支持 USB2.0 全速和高速设备</p></li>
<li><p>支持端点中断注册功能porting 给用户自己处理中断里的数据</p></li> <li><p>支持端点中断注册功能porting 给用户自己处理中断里的数据</p></li>
@ -247,78 +236,75 @@
<p>USB DEVICE 协议栈的代码实现过程参考 <a class="reference external" href="https://www.bilibili.com/video/BV1Ef4y1t73d">https://www.bilibili.com/video/BV1Ef4y1t73d</a></p> <p>USB DEVICE 协议栈的代码实现过程参考 <a class="reference external" href="https://www.bilibili.com/video/BV1Ef4y1t73d">https://www.bilibili.com/video/BV1Ef4y1t73d</a></p>
</div> </div>
<div class="section" id="usb-device-porting"> <div class="section" id="usb-device-porting">
<h2><span class="section-number">5.1. </span>USB Device Porting 接口<a class="headerlink" href="#usb-device-porting" title="永久链接至标题"></a></h2> <h2><span class="section-number">5.1. </span>USB DEVICE 协议栈 porting 接口<a class="headerlink" href="#usb-device-porting" title="永久链接至标题"></a></h2>
<p>USB DEVICE 协议栈 porting 接口在 <code class="docutils literal notranslate"><span class="pre">usb_stack/common/usb_dc.h</span></code> 文件中声明,用户根据自己的 MCU 实现以下接口</p>
<blockquote> <blockquote>
<div><p>USB Device Porting 接口在 <code class="docutils literal notranslate"><span class="pre">usb_stack/common/usb_dc.h</span></code> 文件中声明,用户根据自己的 MCU 进行实现</p> <div><ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">usbd_set_address</span></code> 调用 <a class="reference internal" href="../peripheral/api_usb.html#usb-dc-set-address"><span class="std std-ref">usb_dc_set_address</span></a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">usbd_ep_open</span></code> 调用 <a class="reference internal" href="../peripheral/api_usb.html#usb-dc-ep-open"><span class="std std-ref">usb_dc_ep_open</span></a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">usbd_ep_close</span></code> 调用 <a class="reference internal" href="../peripheral/api_usb.html#usb-dc-ep-close"><span class="std std-ref">usb_dc_ep_close</span></a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">usbd_ep_set_stall</span></code> 调用 <a class="reference internal" href="../peripheral/api_usb.html#usb-dc-ep-set-stall"><span class="std std-ref">usb_dc_ep_set_stall</span></a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">usbd_ep_clear_stall</span></code> 调用 <a class="reference internal" href="../peripheral/api_usb.html#usb-dc-ep-clear-stall"><span class="std std-ref">usb_dc_ep_clear_stall</span></a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">usbd_ep_is_stalled</span></code> 调用 <a class="reference internal" href="../peripheral/api_usb.html#usb-dc-ep-is-stalled"><span class="std std-ref">usb_dc_ep_is_stalled</span></a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">usbd_ep_write</span></code> 调用 <a class="reference internal" href="../peripheral/api_usb.html#usb-dc-ep-write"><span class="std std-ref">usb_dc_ep_write</span></a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">usbd_ep_read</span></code> 调用 <a class="reference internal" href="../peripheral/api_usb.html#usb-dc-ep-read"><span class="std std-ref">usb_dc_ep_read</span></a></p></li>
</ul>
</div></blockquote> </div></blockquote>
<div class="section" id="usbd-set-address">
<h3><span class="section-number">5.1.1. </span><strong>usbd_set_address</strong><a class="headerlink" href="#usbd-set-address" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-open">
<h3><span class="section-number">5.1.2. </span><strong>usbd_ep_open</strong><a class="headerlink" href="#usbd-ep-open" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-close">
<h3><span class="section-number">5.1.3. </span><strong>usbd_ep_close</strong><a class="headerlink" href="#usbd-ep-close" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-set-stall">
<h3><span class="section-number">5.1.4. </span><strong>usbd_ep_set_stall</strong><a class="headerlink" href="#usbd-ep-set-stall" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-clear-stall">
<h3><span class="section-number">5.1.5. </span><strong>usbd_ep_clear_stall</strong><a class="headerlink" href="#usbd-ep-clear-stall" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-is-stalled">
<h3><span class="section-number">5.1.6. </span><strong>usbd_ep_is_stalled</strong><a class="headerlink" href="#usbd-ep-is-stalled" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-write">
<h3><span class="section-number">5.1.7. </span><strong>usbd_ep_write</strong><a class="headerlink" href="#usbd-ep-write" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-read">
<h3><span class="section-number">5.1.8. </span><strong>usbd_ep_read</strong><a class="headerlink" href="#usbd-ep-read" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-event-notify-handler">
<h3><span class="section-number">5.1.9. </span><strong>usbd_event_notify_handler</strong><a class="headerlink" href="#usbd-event-notify-handler" title="永久链接至标题"></a></h3>
</div>
</div> </div>
<div class="section" id="usb-device"> <div class="section" id="usb-device">
<h2><span class="section-number">5.2. </span>USB Device 应用层接口<a class="headerlink" href="#usb-device" title="永久链接至标题"></a></h2> <h2><span class="section-number">5.2. </span>USB DEVICE 控制器接口<a class="headerlink" href="#usb-device" title="永久链接至标题"></a></h2>
<div class="section" id="id1">
<h3><span class="section-number">5.2.1. </span>USB Device 控制器接口<a class="headerlink" href="#id1" title="永久链接至标题"></a></h3>
<div class="section" id="usb-dc-init"> <div class="section" id="usb-dc-init">
<h4><span class="section-number">5.2.1.1. </span><strong>usb_dc_init</strong><a class="headerlink" href="#usb-dc-init" title="永久链接至标题"></a></h4> <h3><span class="section-number">5.2.1. </span><strong>usb_dc_init</strong><a class="headerlink" href="#usb-dc-init" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">usb_dc_init</span></code> 用来注册 USB 设备和初始化 USB 硬件相关寄存器,注册 usb 中断回调函数。在注册之前需要打开对应 USB 设备的宏定义,例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_USB</span></code> 方可使用 USB 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">usb_dc_init</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">usb_dc_register</span><span class="p">(</span><span class="n">USB_INDEX</span><span class="p">,</span> <span class="s">&quot;usb&quot;</span><span class="p">,</span> <span class="n">DEVICE_OFLAG_RDWR</span><span class="p">);</span>
<span class="n">usb</span> <span class="o">=</span> <span class="n">device_find</span><span class="p">(</span><span class="s">&quot;usb&quot;</span><span class="p">);</span>
<span class="n">device_set_callback</span><span class="p">(</span><span class="n">usb</span><span class="p">,</span> <span class="n">usb_dc_event_callback</span><span class="p">);</span>
<span class="n">device_open</span><span class="p">(</span><span class="n">usb</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
<span class="k">return</span> <span class="n">usb</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
<ul class="simple">
<li><p>device 返回 USB 设备句柄</p></li>
</ul>
</div> </div>
</div> </div>
<div class="section" id="id1">
<h2><span class="section-number">5.3. </span>USB DEVICE 应用层接口<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<div class="section" id="id2"> <div class="section" id="id2">
<h3><span class="section-number">5.2.2. </span>USB Device 通用接口<a class="headerlink" href="#id2" title="永久链接至标题"></a></h3> <h3><span class="section-number">5.3.1. </span>USB DEVICE 通用接口<a class="headerlink" href="#id2" title="永久链接至标题"></a></h3>
<div class="section" id="usbd-desc-register"> <div class="section" id="usbd-desc-register">
<h4><span class="section-number">5.2.2.1. </span><strong>usbd_desc_register</strong><a class="headerlink" href="#usbd-desc-register" title="永久链接至标题"></a></h4> <h4><span class="section-number">5.3.1.1. </span><strong>usbd_desc_register</strong><a class="headerlink" href="#usbd-desc-register" title="永久链接至标题"></a></h4>
</div> </div>
<div class="section" id="usbd-msosv1-desc-register"> <div class="section" id="usbd-msosv1-desc-register">
<h4><span class="section-number">5.2.2.2. </span><strong>usbd_msosv1_desc_register</strong><a class="headerlink" href="#usbd-msosv1-desc-register" title="永久链接至标题"></a></h4> <h4><span class="section-number">5.3.1.2. </span><strong>usbd_msosv1_desc_register</strong><a class="headerlink" href="#usbd-msosv1-desc-register" title="永久链接至标题"></a></h4>
</div> </div>
<div class="section" id="usbd-class-add-interface"> <div class="section" id="usbd-class-add-interface">
<h4><span class="section-number">5.2.2.3. </span><strong>usbd_class_add_interface</strong><a class="headerlink" href="#usbd-class-add-interface" title="永久链接至标题"></a></h4> <h4><span class="section-number">5.3.1.3. </span><strong>usbd_class_add_interface</strong><a class="headerlink" href="#usbd-class-add-interface" title="永久链接至标题"></a></h4>
</div> </div>
<div class="section" id="usbd-interface-add-endpoint"> <div class="section" id="usbd-interface-add-endpoint">
<h4><span class="section-number">5.2.2.4. </span><strong>usbd_interface_add_endpoint</strong><a class="headerlink" href="#usbd-interface-add-endpoint" title="永久链接至标题"></a></h4> <h4><span class="section-number">5.3.1.4. </span><strong>usbd_interface_add_endpoint</strong><a class="headerlink" href="#usbd-interface-add-endpoint" title="永久链接至标题"></a></h4>
</div> </div>
<div class="section" id="usb-device-is-configured"> <div class="section" id="usb-device-is-configured">
<h4><span class="section-number">5.2.2.5. </span><strong>usb_device_is_configured</strong><a class="headerlink" href="#usb-device-is-configured" title="永久链接至标题"></a></h4> <h4><span class="section-number">5.3.1.5. </span><strong>usb_device_is_configured</strong><a class="headerlink" href="#usb-device-is-configured" title="永久链接至标题"></a></h4>
</div> </div>
</div> </div>
<div class="section" id="usb-device-cdc"> <div class="section" id="usb-device-cdc">
<h3><span class="section-number">5.2.3. </span>USB Device CDC 类接口<a class="headerlink" href="#usb-device-cdc" title="永久链接至标题"></a></h3> <h3><span class="section-number">5.3.2. </span>USB Device CDC 类接口<a class="headerlink" href="#usb-device-cdc" title="永久链接至标题"></a></h3>
</div> </div>
<div class="section" id="usb-device-msc"> <div class="section" id="usb-device-msc">
<h3><span class="section-number">5.2.4. </span>USB Device MSC 类接口<a class="headerlink" href="#usb-device-msc" title="永久链接至标题"></a></h3> <h3><span class="section-number">5.3.3. </span>USB Device MSC 类接口<a class="headerlink" href="#usb-device-msc" title="永久链接至标题"></a></h3>
</div> </div>
<div class="section" id="usb-device-hid"> <div class="section" id="usb-device-hid">
<h3><span class="section-number">5.2.5. </span>USB Device HID 类接口<a class="headerlink" href="#usb-device-hid" title="永久链接至标题"></a></h3> <h3><span class="section-number">5.3.4. </span>USB Device HID 类接口<a class="headerlink" href="#usb-device-hid" title="永久链接至标题"></a></h3>
</div> </div>
<div class="section" id="usb-device-audio"> <div class="section" id="usb-device-audio">
<h3><span class="section-number">5.2.6. </span>USB Device AUDIO 类接口<a class="headerlink" href="#usb-device-audio" title="永久链接至标题"></a></h3> <h3><span class="section-number">5.3.5. </span>USB Device AUDIO 类接口<a class="headerlink" href="#usb-device-audio" title="永久链接至标题"></a></h3>
</div> </div>
<div class="section" id="usb-device-video"> <div class="section" id="usb-device-video">
<h3><span class="section-number">5.2.7. </span>USB Device VIDEO 类接口<a class="headerlink" href="#usb-device-video" title="永久链接至标题"></a></h3> <h3><span class="section-number">5.3.6. </span>USB Device VIDEO 类接口<a class="headerlink" href="#usb-device-video" title="永久链接至标题"></a></h3>
</div> </div>
</div> </div>
</div> </div>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>索引 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>索引 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -62,7 +62,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2.3. Linux OR WSL 环境开发指南 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>2.3. Linux OR WSL 环境开发指南 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2.1. Windows 下使用 CDK (类 MDK Keil)开发指南 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>2.1. Windows 下使用 CDK (类 MDK Keil)开发指南 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2.2. Windows 下使用 Eclipse 开发指南 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>2.2. Windows 下使用 Eclipse 开发指南 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3. BLDevCube 烧录工具指南 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title> <title>3. BLDevCube 烧录工具指南 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
@ -64,7 +64,7 @@
<div class="version"> <div class="version">
0.3 0.2
</div> </div>

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