Skip to main content
欢迎来到PAWPAW技术文档网站了解更多信息

API

配置定义

使用USB音频框架的应用程序需要设置配置定义。这些定义的默认值可以在xua_conf_default.h中找到。

这些定义应该在可选的xua_conf.h头文件或相关构建配置的Makefile中进行覆盖。

本节完整地记录了所有可设置的定义及其默认值(如果适用)。

代码位置(所在的 tile)

描述默认值
AUDIO_IO_TILE音频输入/输出的位置(tile)0
XUD_TILE音频输入/输出的位置(tile)0
MIDI_TILEMIDI输入/输出的位置(tile)AUDIO_IO_TILE
SPDIF_TX_TILESPDIF发送的位置(tile)AUDIO_IO_TILE
PDM_TILEPDM接收的位置(tile)AUDIO_IO_TILE
PLL_REF_TILECS2100的参考信号的位置(tile)AUDIO_IO_TILE

通道数

描述默认值
NUM_USB_CHAN_OUT输出通道数(主机到设备)NONE(必须由应用程序定义)
NUM_USB_CHAN_IN输入通道数(设备到主机)NONE(必须由应用程序定义)
I2S_CHANS_DAC连接DAC/CODEC的I2S通道数必须是2的倍数
I2S_CHANS_ADC从ADC/CODEC连接的I2S通道数必须是2的倍数

频率和时钟

描述默认值
MAX_FREQ设备支持的最大采样频率(以赫兹为单位)192000
MIN_FREQ设备支持的最小采样频率(以赫兹为单位)44100
DEFAULT_FREQ设备的默认采样频率应使用安全的默认值
MCLK_44144100采样率的主时钟定义(以赫兹为单位)NONE(必须由应用程序定义)
MCLK_4848000采样率的主时钟定义(以赫兹为单位)NONE(必须由应用程序定义)

USB Audio Class

描述默认值
AUDIO_CLASSUSB Audio Class 版本2(USB Audio Class 2.0)
AUDIO_CLASS_FALLBACK是否回退到UAC 1.00(禁用)
FULL_SPEED_AUDIO_2在全速模式下是否运行UAC 2.01(启用)

请注意,这些定义需要根据应用程序的需求进行定义。

功能配置

MIDI

描述默认值
MIDI启用MIDI功能,包括缓冲、描述符等DISABLED
MIDI_RX_PORT_WIDTHMIDI Rx端口宽度(1位或4位)1

S/PDIF

描述默认值
XUA_SPDIF_TX_EN启用S/PDIF Tx0(禁用)
SPDIF_TX_INDEX定义要在S/PDIF上输出的通道,从 0 开始0
XUA_SPDIF_RX_EN启用S/PDIF Rx0(禁用)
SPDIF_RX_INDEXS/PDIF Rx的第一个通道索引,从 0 开始NONE

请注意,当XUA_SPDIF_RX_EN为1时,必须由应用程序定义SPDIF_RX_INDEX

ADAT

描述默认值
XUA_ADAT_RX_EN启用ADAT Rx0(禁用)
ADAT_RX_INDEXADAT Rx的第一个通道索引,从 0 开始NONE

请注意,当XUA_ADAT_RX_EN为1时,必须由应用程序定义ADAT_RX_INDEX

PDM麦克风

描述默认值
XUA_NUM_PDM_MICS设计中PDM麦克风的数量None

DFU

描述默认值
XUA_DFU_EN启用DFU功能1(启用)

请注意,Windows操作需要驱动程序支持。

HID

描述默认值
HID_CONTROLS启用HID控制功能
1 - 启用,0 - 禁用
-

CODEC接口

描述默认值
CODEC_MASTER定义XMOS设备是否作为主设备0(XMOS是主设备)

USB设备配置

描述默认值
VENDOR_STR设备使用的供应商字符串"XMOS"
VENDOR_IDUSB供应商ID(VID),由USB-IF分配0x20B1 (XMOS)
PRODUCT_STR设备的USB产品字符串未定义
PRODUCT_STR_A2USB Audio Class 2.0模式的产品字符串"XMOS xCORE (UAC2.0)"
PRODUCT_STR_A1USB Audio Class 1.0模式的产品字符串"XMOS xCORE (UAC1.0)"
PID_AUDIO_1USB Audio Class 1.0模式的USB产品ID(PID)0x0003
PID_AUDIO_2USB Audio Class 2.0模式的USB产品ID(PID)0x0002
BCD_DEVICE设备固件版本号,以二进制编码十进制格式表示:0xJJMN,其中JJ:主版本号,M:次版本号,N:子版本号。
注意:用户代码不应修改此值,而应修改BCD_DEVICE_JBCD_DEVICE_MBCD_DEVICE_N
XMOS USB Audio发布版本号(例如,0x0732表示7.3.2)

流格式

输出/播放

描述默认值
OUTPUT_FORMAT_COUNT支持的输出流格式的数量2
STREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS输出流备选项1的采样分辨率(位)如果备选项1为PCM,则默认为24;
否则如果为DSD/RAW,则默认为32。

注意,在OUTPUT_FORMAT_COUNT = 1的情况下:
最低备选项为24位,将24位作为设计的默认分辨率。
STREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS输出流备选项2的采样分辨率(位)如果备选项2为PCM,则默认为16;
否则如果为DSD/RAW,则默认为32。
STREAM_FORMAT_OUTPUT_3_RESOLUTION_BITS输出流备选项3的采样分辨率(位)如果备选项3为PCM,则默认为32;
否则如果为DSD/RAW,则默认为32。
HS_STREAM_FORMAT_OUTPUT_1_SUBSLOT_BYTES高速模式下输出流备选项1的子槽大小(字节)如果备选项1的分辨率为24位,则默认为4;
否则为分辨率 / 8。

注意,在高速模式下,默认用4字节子槽对32位的xCORE更好。
在高速模式下,通常不关心这种额外的总线开销。
HS_STREAM_FORMAT_OUTPUT_2_SUBSLOT_BYTES高速模式下输出流备选项2的子槽大小(字节)如果备选项2的分辨率为24位,则默认为4;
否则为分辨率 / 8。

注意,在高速模式下,默认用4字节子槽对32位的xCORE更好。
在高速模式下,通常不关心这种额外的总线开销。
HS_STREAM_FORMAT_OUTPUT_3_SUBSLOT_BYTES高速模式下输出流备选项3的子槽大小(字节)如果备选项3的分辨率为24位,则默认为4;
否则为分辨率 / 8。

注意,在高速模式下,默认用4字节子槽对32位的xCORE更好。
在高速模式下,通常不关心这种额外的总线开销。
FS_STREAM_FORMAT_OUTPUT_1_SUBSLOT_BYTES全速模式下输出流备选项1的子槽大小(字节)在全速模式下,总线带宽非常有限,因此将样本打包到尽可能小的子槽中。
默认为 STREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS / 8
FS_STREAM_FORMAT_OUTPUT_2_SUBSLOT_BYTES全速模式下输出流备选项2的子槽大小(字节)在全速模式下,总线带宽非常有限,因此将样本打包到尽可能小的子槽中。
默认为 STREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS / 8
FS_STREAM_FORMAT_OUTPUT_3_SUBSLOT_BYTES全速模式下输出流备选项3的子槽大小(字节)在全速模式下,总线带宽非常有限,因此将样本打包到尽可能小的子槽中。
默认为 STREAM_FORMAT_OUTPUT_3_RESOLUTION_BITS / 8
STREAM_FORMAT_OUTPUT_1_DATAFORMAT输出流备选项1的音频数据格式如果备选项1为RAW/DSD,则默认为UAC_FORMAT_TYPEI_RAW_DATA;

否则为UAC_FORMAT_TYPEI_PCM。
STREAM_FORMAT_OUTPUT_2_DATAFORMAT输出流备选项2的音频数据格式如果备选项2为RAW/DSD,则默认为UAC_FORMAT_TYPEI_RAW_DATA;

否则为UAC_FORMAT_TYPEI_PCM。
STREAM_FORMAT_OUTPUT_3_DATAFORMAT输出流备选项3的音频数据格式如果备选项3为RAW/DSD,则默认为UAC_FORMAT_TYPEI_RAW_DATA;

否则为UAC_FORMAT_TYPEI_PCM。

输入/录制

描述默认值
INPUT_FORMAT_COUNT支持的输入流格式的数量1
STREAM_FORMAT_INPUT_1_RESOLUTION_BITS输入流备选项1的采样分辨率(位)24
HS_STREAM_FORMAT_INPUT_1_SUBSLOT_BYTES高速模式下输入流备选项1的子槽大小(字节)如果备选项1的分辨率为24位,则默认为4;
否则为分辨率 / 8。

注意,在高速模式下,默认用4字节子槽对32位的xCORE更好。
在高速模式下,通常不关心这种额外的总线开销。
FS_STREAM_FORMAT_INPUT_1_SUBSLOT_BYTES全速模式下输入流备选项1的子槽大小(字节)在全速模式下,总线带宽非常有限,因此将样本打包到尽可能小的子槽中。
默认为 STREAM_FORMAT_INPUT_1_RESOLUTION_BITS / 8
STREAM_FORMAT_INPUT_1_DATAFORMAT输入流备选项1的音频数据格式UAC_FORMAT_TYPEI_PCM

音量控制

描述默认值
OUTPUT_VOLUME_CONTROL启用/禁用输出音量控制,包括所有的处理和描述符支持1(启用)
INPUT_VOLUME_CONTROL启用/禁用输入音量控制,包括所有的处理和描述符支持1(启用)
MIN_VOLUME最小音量设置(-inf以上)0x8100 (-127db)
MAX_VOLUME最大音量设置0x0000 (0db)
VOLUME_RES音量控制的分辨率(以db为单位),表示为8.8的有符号定点0x100 (1db)

混音器

描述默认值
MIXER启用/禁用“混音器”核心0(禁用)
MAX_MIX_COUNT执行的独立混音数如果启用了MIXER,则为8;否则为0
MIX_INPUTS输入到混音器的通道数18
MIN_MIXER_VOLUME混音单元的最小音量设置(-inf以上)0x8100 (-127db)
MAX_MIXER_VOLUME混音单元的最大音量设置0x0000 (0db)
VOLUME_RES_MIXER混音器音量控制的分辨率(以db为单位),表示为8.8的有符号定点0x100 (1db)

电源

描述默认值
XUA_POWERMODE报告为自供电设备还是USB总线供电设备XUA_POWERMODE_BUS

这会影响描述符和XUD的使用,并且对于USB兼容性非常重要。

必需的用户函数定义

以下函数需要由使用XMOS USB音频框架的应用程序进行定义。

外部音频硬件配置函数

AudioHwInit

此函数在设备引导启动后音频核心启动时调用,应该初始化外部音频硬件,例如时钟、DAC、ADC等。

void AudioHwInit(chanend c_codec)
参数描述
c_codec可选的chanend,最初传递给audio()的通道端口,可用于与其他核心进行通信。

AudioHwConfig

此函数在音频核心启动或更改采样率时调用。它应根据提供的主时钟频率配置外部音频硬件以在指定的采样率下运行。

void AudioHwConfig(unsigned samFreq, unsigned mclk, chanend c_codec, unsigned dsdMode, unsigned sampRes_DAC, unsigned sampRes_ADC)
参数描述
samFreq所需配置硬件的采样频率(以赫兹为单位)
mclk所需的主时钟频率(以赫兹为单位)
c_codec可选的chanend,最初传递给audio()的通道端口,可用于与其他核心进行通信
dsdMode指示音频硬件是否应配置为DSD操作
sampRes_DACDAC流的采样分辨率
sampRes_ADCADC流的采样分辨率

音频流处理函数

以下函数可选择性地在设计中使用。它们对于静音等功能可能很有用。

AudioStreamStart

此函数在从设备到主机的音频流开始时调用。

void AudioStreamStart(void)

AudioStreamStop

此函数在从设备到主机的音频流停止时调用。

void AudioStreamStop(void)

主机活动状态

以下函数可用于指示设备是否连接到有效的主机。在状态变化时调用此函数。

AudioStreamStart

此函数用于指示主机是否处于活动状态。

void AudioStreamStart(int active)
参数描述
active指示主机是否处于活动状态。1表示活动,0表示非活动。

HID控制

以下函数在设备希望读取物理用户输入(按钮等)时被调用。

UserReadHIDButtons

void UserReadHIDButtons(unsigned char hidData[])
参数描述
hidData该函数应将相关的HID位写入此数组。HID报告描述符定义了位的顺序和功能。

组件API

以下函数可以从应用程序的顶层main函数中调用,并实现第3节中描述的各种组件。

在使用USB音频框架时,c_ep_in数组始终按照以下顺序组成:

  • 端点0(输入)
  • 音频反馈端点(如果启用输出)
  • 音频输入端点(如果启用输入)
  • MIDI输入端点(如果启用MIDI)
  • 时钟中断端点

c_ep_out数组始终按照以下顺序组成:

  • 端点0(输出)
  • 音频输出端点(如果启用输出)
  • MIDI输出端点(如果启用MIDI)

XUA_Endpoint0

实现用于枚举、控制和配置USB音频设备的端点0的函数。

它使用在xua_ep0_descriptors.h中定义的描述符。

void XUA_Endpoint0(chanend c_ep0_out, 
chanend c_ep0_in,
chanend ?c_audioCtrl,
chanend ?c_mix_ctl,
chanend ?c_clk_ctl,
chanend ?c_EANativeTransport_ctrl,
client interface i_dfu ?dfuInterface)

提示

参数中的?表示该参数是可以为空(NULL)的。更多信息请参考:XMOS-Programming-Guide - 5.1.2 Nullable types

参数描述
c_ep0_out连接到XUD_Manager()输出端点数组的chanend。
c_ep0_in连接到XUD_Manager()输入端点数组的chanend。
c_audioCtrl连接到解耦线程以控制音频(采样率更改等)的可选chanend。当为空时,音频设备仅支持单一采样率/格式,并且不支持DFU。此通道用于传递有关格式、采样率和DFU状态的消息。
c_mix_ctl可选的chanend,如果存在,则连接到混音器核心。
c_clk_ctl可选的chanend,如果存在,则连接到时钟生成器核心。
c_EANativeTransport_ctrl可选的chanend,如果存在,则连接到EA Native端点管理器。
dfuInterfaceDFU任务的接口(此任务必须在连接到引导闪存的 tile 上运行)。

XUA_Buffer

USB音频缓冲核心。

此函数在XUD和音频子系统之间缓冲USB音频数据。大多数参数的chanend都应连接到XUD_Manager()

void XUA_Buffer(chanend c_aud_out, 
chanend c_aud_in,
chanend c_aud_fb,
chanend c_midi_from_host,
chanend c_midi_to_host,
chanend c_midi,
chanend ?c_int,
chanend ?c_clk_int,
chanend c_sof,
chanend c_aud_ctl,
in port p_off_mclk,
chanend c_aud,
client interface pll_ref_if i_pll_ref)
参数描述
c_aud_out连接到XUD的音频输出端点通道
c_aud_in连接到XUD的音频输入端点通道
c_aud_fb连接到XUD的音频反馈端点通道
c_midi_from_host连接到XUD的MIDI输出端点通道
c_midi_to_host连接到XUD的MIDI输入端点通道
c_midi连接到MIDI核心的通道
c_int连接到XUD的音频时钟中断端点通道(可选)
c_clk_int如果存在,连接到clockGen()线程的可选chanend
c_sof连接到XUD的帧起始信号通道
c_aud_ctl连接到Endpoint0()的音频控制通道
p_off_mclk一个由MCLK输入引脚提供时钟的端口(不是MCLK输入引脚本身)
c_aud连接到XUA_AudioHub()核心的通道
i_pll_ref切换参考引脚以对CS2100进行任务的接口

XUA_AudioHub

该函数驱动 I2S 端口并处理与其他数字 I/O 线程之间的样本。

void XUA_AudioHub(chanend ?c_aud,
clock ?clk_audio_mclk,
clock ?clk_audio_bclk,
in port p_mclk_in,
buffered _XUA_CLK_DIR port:32 ?p_lrclk,
buffered _XUA_CLK_DIR port:32 ?p_bclk,
buffered out port:32 (&?p_i2s_dac)[I2S_WIRES_DAC],
buffered in port:32 (&?p_i2s_adc)[I2S_WIRES_ADC],
chanend c_spdif_tx,
chanend c_dig)
参数描述
c_aud音频样本通道,连接到 mixer() 线程或 decouple() 线程
clk_audio_mclk可空时钟块,从主时钟进行时钟同步
clk_audio_bclk可空时钟块,从 I2S 位时钟进行时钟同步
p_mclk_in主时钟输入端口(必须为1位)
p_lrclk可空端口,用于 I2S 采样时钟
p_bclk可空端口,用于 I2S 位时钟
p_i2s_dac可空数组端口,用于 I2S 数据输出线
p_i2s_adc可空数组端口,用于 I2S 数据输入线
c_spdif_txlib_spdif 的 S/PDIF 发送器核心连接的通道
c_digclockGen() 线程连接,用于接收/发送样本

mixer

数字音频样本混音器。

该线程在 decouple() 线程和 audio() 线程之间混合音频流。

void mixer(chanend c_to_host, chanend c_to_audio, chanend c_mix_ctl)
参数描述
c_to_hostdecouple() 线程连接的 chanend,用于接收/发送样本
c_to_audioaudio() 线程连接的 chanend,用于接收/发送样本
c_mix_ctlEndpoint0() 线程连接的 chanend,用于接收控制命令

clockGen

时钟生成和数字音频 I/O 处理。

void clockGen(streaming chanend ?c_spdif_rx,
chanend ?c_adat_rx,
client interface pll_ref_if i_pll_ref,
chanend c_audio,
chanend c_clk_ctl,
chanend c_clk_int)
参数描述
c_spdif_rx与 S/PDIF 接收线程连接的通道
c_adat_rx与 ADAT 接收线程连接的通道
i_pll_ref连接到 taslk 的客户端接口,用于输出驱动外部频率合成器的时钟信号
c_audioaudio() 线程连接的通道
c_clk_ctlEndpoint0() 连接的通道,用于时钟配置
c_clk_intdecouple() 线程连接的通道,用于时钟中断

usb_midi

USB MIDI I/O 任务。

该函数在 XUA_Buffer 和 MIDI UART I/O 之间传递 MIDI 数据。

void usb_midi(buffered in port:1 ?p_midi_in,
port ?p_midi_out,
clock ?clk_midi,
chanend ?c_midi,
unsigned cable_number)
参数描述
p_midi_inMIDI 的 1 位输入端口
p_midi_outMIDI 的 1 位输出端口
clk_midi用于 UART 时钟的时钟块;应具有 100MHz 的频率
c_mididecouple() 线程连接的 chanend
cable_numberMIDI 实现的电缆编号。应设置为 0。