forked from PAWPAW-Mirror/lib_xua
Update AN000247 for AI MCAB
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
*
|
*
|
||||||
* It uses the main blocks from the lib_xua
|
* It uses the main blocks from the lib_xua
|
||||||
*
|
*
|
||||||
* - 2 in/ 2 out I2S only
|
* - 2 channels out I2S only
|
||||||
* - No DFU
|
* - No DFU
|
||||||
* - I2S only
|
* - I2S only
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
APP_NAME = app_xua_simple
|
APP_NAME = app_xua_spdiftx
|
||||||
|
|
||||||
TARGET = xk-audio-216-mc.xn
|
TARGET = xk-audio-316-mc.xn
|
||||||
|
|
||||||
# The flags passed to xcc when building the application
|
# The flags passed to xcc when building the application
|
||||||
XCC_FLAGS = -fcomment-asm -Xmapper --map -Xmapper MAPFILE -O3 -report -save-temps \
|
XCC_FLAGS = -O3 -report \
|
||||||
-g -Wno-unused-function -Wno-timing -DXUD_SERIES_SUPPORT=XUD_X200_SERIES \
|
-g -Wno-unused-function \
|
||||||
-DXUD_CORE_CLOCK=600 -DUSB_TILE=tile[1] -DSDA_HIGH=2 -DSCL_HIGH=1 -fxscope \
|
-DXUD_CORE_CLOCK=600 \
|
||||||
-DUAC_FORCE_FEEDBACK_EP=0
|
-DUSB_TILE=tile[0] \
|
||||||
|
-fxscope
|
||||||
|
|
||||||
# The USED_MODULES variable lists other module used by the application. These
|
# The USED_MODULES variable lists other module used by the application. These
|
||||||
# modules will extend the SOURCE_DIRS, INCLUDE_DIRS and LIB_DIRS variables.
|
# modules will extend the SOURCE_DIRS, INCLUDE_DIRS and LIB_DIRS variables.
|
||||||
|
|||||||
@@ -8,13 +8,13 @@ Overview
|
|||||||
Introduction
|
Introduction
|
||||||
............
|
............
|
||||||
|
|
||||||
The XMOS USB Audio (XUA) library provides an implemention of USB Audio Class versions 1.0 and 2.0.
|
The XMOS USB Audio (XUA) library provides an implementation of USB Audio Class versions 1.0 and 2.0.
|
||||||
|
|
||||||
This application note demonstrates the implementation of a basic USB Audio Device with
|
This application note demonstrates the implementation of a basic USB Audio Device with
|
||||||
S/PDIF transmit functionality the xCORE-200 MC Audio board.
|
S/PDIF transmit functionality the xCORE.ai Multichannel (MC) Audio board.
|
||||||
|
|
||||||
To reduce complexity this application note does not enable any other audio interfaces other that S/PDIF transmit
|
To reduce complexity this application note does not enable any other audio interfaces other that S/PDIF transmit
|
||||||
(i.e. no I2S). Readers are encouraged to read applicaition note AN00246 in conjunction with this application
|
(i.e. no I2S). Readers are encouraged to read application note AN00246 in conjunction with this application
|
||||||
note.
|
note.
|
||||||
|
|
||||||
|
|
||||||
@@ -30,14 +30,11 @@ The Makefile also includes::
|
|||||||
|
|
||||||
USED_MODULES = .. lib_xud ..
|
USED_MODULES = .. lib_xud ..
|
||||||
|
|
||||||
``lib_xud`` library requires some flags for correct operation. Firstly the
|
``lib_xud`` library requires some flags for correct operation. Namely the
|
||||||
tile on which ``lib_xud`` will be execute, for example::
|
tile on which ``lib_xud`` will be execute, for example::
|
||||||
|
|
||||||
XCC_FLAGS = .. -DUSB_TILE=tile[1] ..
|
XCC_FLAGS = .. -DUSB_TILE=tile[0] ..
|
||||||
|
|
||||||
Secondly, the architecture of the target device, for example::
|
|
||||||
|
|
||||||
XCC_FLAGS = .. -DXUD_SERIES_SUPPORT=XUD_X200_SERIES ..
|
|
||||||
|
|
||||||
Includes
|
Includes
|
||||||
--------
|
--------
|
||||||
@@ -69,7 +66,7 @@ Declarations
|
|||||||
Allocating hardware resources for lib_xua
|
Allocating hardware resources for lib_xua
|
||||||
.........................................
|
.........................................
|
||||||
|
|
||||||
A minimal implementation of a USB Audio device, without I2S functionalilty,
|
A minimal implementation of a USB Audio device, without I2S functionality,
|
||||||
using ``lib_xua`` requires the follow pins:
|
using ``lib_xua`` requires the follow pins:
|
||||||
|
|
||||||
- Audio Master clock (from clock source to xCORE)
|
- Audio Master clock (from clock source to xCORE)
|
||||||
@@ -82,7 +79,7 @@ port for the master clock input signal.
|
|||||||
:end-on: in port p_mclk_in
|
:end-on: in port p_mclk_in
|
||||||
|
|
||||||
``lib_xua`` also requires two ports for internally calculating USB feedback. Please refer to
|
``lib_xua`` also requires two ports for internally calculating USB feedback. Please refer to
|
||||||
the ``lib_xua`` library documentation for further details. The additonal input port for the master
|
the ``lib_xua`` library documentation for further details. The additional input port for the master
|
||||||
clock is required since USB and S/PDIF do not reside of the same tiles on the example hardware.
|
clock is required since USB and S/PDIF do not reside of the same tiles on the example hardware.
|
||||||
|
|
||||||
These ports are declared as follows:
|
These ports are declared as follows:
|
||||||
@@ -126,7 +123,7 @@ Other declarations
|
|||||||
|
|
||||||
For a simple application the following endpoints are required:
|
For a simple application the following endpoints are required:
|
||||||
|
|
||||||
- ``Control`` enpoint zero
|
- ``Control`` endpoint zero
|
||||||
- ``Isochonous`` endpoint for each direction for audio data to/from the USB host
|
- ``Isochonous`` endpoint for each direction for audio data to/from the USB host
|
||||||
|
|
||||||
These are declared as follows:
|
These are declared as follows:
|
||||||
@@ -138,7 +135,7 @@ These are declared as follows:
|
|||||||
Configuring lib_xua
|
Configuring lib_xua
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
``lib_xua`` must be configued to enable S/PDIF Tx functionality.
|
``lib_xua`` must be configured to enable S/PDIF Tx functionality.
|
||||||
|
|
||||||
``lib_xua`` has many parameters than can be configured at build time, some examples include:
|
``lib_xua`` has many parameters than can be configured at build time, some examples include:
|
||||||
|
|
||||||
@@ -164,7 +161,7 @@ The application main() function
|
|||||||
|
|
||||||
The ``main()`` function sets up the tasks in the application.
|
The ``main()`` function sets up the tasks in the application.
|
||||||
|
|
||||||
Various channels are required in order to allow the required tasks to communcate.
|
Various channels are required in order to allow the required tasks to communicate.
|
||||||
These must first be declared:
|
These must first be declared:
|
||||||
|
|
||||||
.. literalinclude:: app_xua_simple.xc
|
.. literalinclude:: app_xua_simple.xc
|
||||||
@@ -179,11 +176,11 @@ using the xC ``par`` construct:
|
|||||||
:end-before: return 0
|
:end-before: return 0
|
||||||
|
|
||||||
This code starts the low-level USB task, an Endpoint 0 task, an Audio buffering task and a task to handle
|
This code starts the low-level USB task, an Endpoint 0 task, an Audio buffering task and a task to handle
|
||||||
the audio I/O. Note, since there is no I2S funcitonality in this example this task simply forwards samples to the
|
the audio I/O. Note, since there is no I2S functionality in this example this task simply forwards samples to the
|
||||||
SPDIF transmitter task. In addition the ``spdif_tx()`` task is also run.
|
SPDIF transmitter task. In addition the ``spdif_tx()`` task is also run.
|
||||||
|
|
||||||
Note that the ``spdif_tx_port_config()`` function is called before a nested ``par`` of ``spdif_tx()`` and ``XUA_AudioHub()``.
|
Note that the ``spdif_tx_port_config()`` function is called before a nested ``par`` of ``spdif_tx()`` and ``XUA_AudioHub()``.
|
||||||
This is because of the "shared" nature of ``p_mclk_in`` and avoids a parrallel usage check failure by the XMOS toolchain.
|
This is because of the "shared" nature of ``p_mclk_in`` and avoids a parallel usage check failure by the XMOS tool-chain.
|
||||||
|
|
||||||
|appendix|
|
|appendix|
|
||||||
|newpage|
|
|newpage|
|
||||||
@@ -191,7 +188,7 @@ This is because of the "shared" nature of ``p_mclk_in`` and avoids a parrallel u
|
|||||||
Demo Hardware Setup
|
Demo Hardware Setup
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
To run the demo, connect a USB cable to power the xCORE-200 MC Audio board
|
To run the demo, connect a USB cable to power the xCORE.ai MC Audio board
|
||||||
and plug the xTAG to the board and connect the xTAG USB cable to your
|
and plug the xTAG to the board and connect the xTAG USB cable to your
|
||||||
development machine.
|
development machine.
|
||||||
|
|
||||||
@@ -206,7 +203,7 @@ Launching the demo application
|
|||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
Once the demo example has been built either from the command line using xmake or
|
Once the demo example has been built either from the command line using xmake or
|
||||||
via the build mechanism of xTIMEcomposer studio it can be executed on the xCORE-200
|
via the build mechanism of xTIMEcomposer studio it can be executed on the xCORE.ai
|
||||||
MC Audio board.
|
MC Audio board.
|
||||||
|
|
||||||
Once built there will be a ``bin/`` directory within the project which contains
|
Once built there will be a ``bin/`` directory within the project which contains
|
||||||
@@ -221,7 +218,7 @@ on the xCORE device::
|
|||||||
xrun --xscope bin/app_xua_simple.xe
|
xrun --xscope bin/app_xua_simple.xe
|
||||||
|
|
||||||
Once this command has executed the application will be running on the
|
Once this command has executed the application will be running on the
|
||||||
xCORE-200 MC Audio Board
|
xCORE.ai MC Audio Board
|
||||||
|
|
||||||
Launching from xTIMEcomposer Studio
|
Launching from xTIMEcomposer Studio
|
||||||
...................................
|
...................................
|
||||||
@@ -233,7 +230,7 @@ enable the xSCOPE I/O mode in the dialog box and then
|
|||||||
select Run.
|
select Run.
|
||||||
|
|
||||||
Once this command has executed the application will be running on the
|
Once this command has executed the application will be running on the
|
||||||
xCORE-200 MC Audio board.
|
xCORE.ai MC Audio board.
|
||||||
|
|
||||||
Running the application
|
Running the application
|
||||||
.......................
|
.......................
|
||||||
|
|||||||
@@ -20,9 +20,9 @@
|
|||||||
#include "spdif.h"
|
#include "spdif.h"
|
||||||
|
|
||||||
/* Lib_spdif port declarations. Note, the defines come from the xn file */
|
/* Lib_spdif port declarations. Note, the defines come from the xn file */
|
||||||
buffered out port:32 p_spdif_tx = PORT_SPDIF_OUT; /* SPDIF transmit port */
|
buffered out port:32 p_spdif_tx = PORT_COAX_OUT; /* SPDIF transmit port */
|
||||||
|
|
||||||
clock clk_spdif_tx = on tile[0]: XS1_CLKBLK_4; /* Clock block for S/PDIF transmit */
|
clock clk_spdif_tx = on tile[1]: XS1_CLKBLK_4; /* Clock block for S/PDIF transmit */
|
||||||
|
|
||||||
/* Lib_xua port declarations. Note, the defines come from the xn file */
|
/* Lib_xua port declarations. Note, the defines come from the xn file */
|
||||||
in port p_mclk_in = PORT_MCLK_IN; /* Master clock for the audio IO tile */
|
in port p_mclk_in = PORT_MCLK_IN; /* Master clock for the audio IO tile */
|
||||||
@@ -32,14 +32,17 @@ in port p_for_mclk_count = PORT_MCLK_COUNT; /* Extra port for count
|
|||||||
in port p_mclk_in_usb = PORT_MCLK_IN_USB; /* Extra master clock input for the USB tile */
|
in port p_mclk_in_usb = PORT_MCLK_IN_USB; /* Extra master clock input for the USB tile */
|
||||||
|
|
||||||
/* Clock-block declarations */
|
/* Clock-block declarations */
|
||||||
clock clk_audio_mclk = on tile[0]: XS1_CLKBLK_5; /* Master clock */
|
clock clk_audio_mclk = on tile[1]: XS1_CLKBLK_5; /* Master clock */
|
||||||
clock clk_audio_mclk_usb = on tile[1]: XS1_CLKBLK_1; /* Master clock for USB tile */
|
clock clk_audio_mclk_usb = on tile[0]: XS1_CLKBLK_1; /* Master clock for USB tile */
|
||||||
|
|
||||||
/* Endpoint type tables - informs XUD what the transfer types for each Endpoint in use and also
|
/* Endpoint type tables - informs XUD what the transfer types for each Endpoint in use and also
|
||||||
* if the endpoint wishes to be informed of USB bus resets */
|
* if the endpoint wishes to be informed of USB bus resets */
|
||||||
XUD_EpType epTypeTableOut[] = {XUD_EPTYPE_CTL | XUD_STATUS_ENABLE, XUD_EPTYPE_ISO};
|
XUD_EpType epTypeTableOut[] = {XUD_EPTYPE_CTL | XUD_STATUS_ENABLE, XUD_EPTYPE_ISO};
|
||||||
XUD_EpType epTypeTableIn[] = {XUD_EPTYPE_CTL | XUD_STATUS_ENABLE, XUD_EPTYPE_ISO};
|
XUD_EpType epTypeTableIn[] = {XUD_EPTYPE_CTL | XUD_STATUS_ENABLE, XUD_EPTYPE_ISO};
|
||||||
|
|
||||||
|
/* From hwsupport.h */
|
||||||
|
void ctrlPort();
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
/* Channels for lib_xud */
|
/* Channels for lib_xud */
|
||||||
@@ -61,15 +64,15 @@ int main()
|
|||||||
par
|
par
|
||||||
{
|
{
|
||||||
/* Low level USB device layer core */
|
/* Low level USB device layer core */
|
||||||
on tile[1]: XUD_Main(c_ep_out, 2, c_ep_in, 2, c_sof, epTypeTableOut, epTypeTableIn, XUD_SPEED_HS, XUD_PWR_SELF);
|
on tile[0]: XUD_Main(c_ep_out, 2, c_ep_in, 2, c_sof, epTypeTableOut, epTypeTableIn, XUD_SPEED_HS, XUD_PWR_SELF);
|
||||||
|
|
||||||
/* Endpoint 0 core from lib_xua */
|
/* Endpoint 0 core from lib_xua */
|
||||||
/* Note, since we are not using many features we pass in null for quite a few params.. */
|
/* Note, since we are not using many features we pass in null for quite a few params.. */
|
||||||
on tile[1]: XUA_Endpoint0(c_ep_out[0], c_ep_in[0], c_aud_ctl, null, null, null, null);
|
on tile[0]: XUA_Endpoint0(c_ep_out[0], c_ep_in[0], c_aud_ctl, null, null, null, null);
|
||||||
|
|
||||||
/* Buffering cores - handles audio data to/from EP's and gives/gets data to/from the audio I/O core */
|
/* Buffering cores - handles audio data to/from EP's and gives/gets data to/from the audio I/O core */
|
||||||
/* Note, this spawns two cores */
|
/* Note, this spawns two cores */
|
||||||
on tile[1]: {
|
on tile[0]: {
|
||||||
|
|
||||||
/* Connect master-clock clock-block to clock-block pin */
|
/* Connect master-clock clock-block to clock-block pin */
|
||||||
set_clock_src(clk_audio_mclk_usb, p_mclk_in_usb); /* Clock clock-block from mclk pin */
|
set_clock_src(clk_audio_mclk_usb, p_mclk_in_usb); /* Clock clock-block from mclk pin */
|
||||||
@@ -80,11 +83,13 @@ int main()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* AudioHub() (I2S) and S/SPDIF Tx are on the same tile */
|
/* AudioHub() (I2S) and S/SPDIF Tx are on the same tile */
|
||||||
on tile[0]: {
|
on tile[1]: {
|
||||||
|
|
||||||
/* Setup S/PDIF tx port from clock etc - note we do this before par to avoid parallel usage */
|
/* Setup S/PDIF tx port from clock etc - note we do this before par to avoid parallel usage */
|
||||||
spdif_tx_port_config(p_spdif_tx, clk_spdif_tx, p_mclk_in, 7);
|
spdif_tx_port_config(p_spdif_tx, clk_spdif_tx, p_mclk_in, 7);
|
||||||
|
|
||||||
|
start_clock(clk_spdif_tx);
|
||||||
|
|
||||||
par
|
par
|
||||||
{
|
{
|
||||||
while(1)
|
while(1)
|
||||||
@@ -98,6 +103,8 @@ int main()
|
|||||||
XUA_AudioHub(c_aud, clk_audio_mclk, null, p_mclk_in, null, null, null, null, c_spdif_tx);
|
XUA_AudioHub(c_aud, clk_audio_mclk, null, p_mclk_in, null, null, null, null, c_spdif_tx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
on tile[0]: ctrlPort();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1,168 +0,0 @@
|
|||||||
// Copyright 2021-2022 XMOS LIMITED.
|
|
||||||
// This Software is subject to the terms of the XMOS Public Licence: Version 1.
|
|
||||||
#ifndef __hid_report_descriptor_h__
|
|
||||||
#define __hid_report_descriptor_h__
|
|
||||||
|
|
||||||
#include "xua_hid_report.h"
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* Existing static report descriptor kept for reference */
|
|
||||||
unsigned char hidReportDescriptor[] =
|
|
||||||
{
|
|
||||||
0x05, 0x0c, /* Usage Page (Consumer Device) */
|
|
||||||
0x09, 0x01, /* Usage (Consumer Control) */
|
|
||||||
0xa1, 0x01, /* Collection (Application) */
|
|
||||||
0x15, 0x00, /* Logical Minimum (0) */
|
|
||||||
0x25, 0x01, /* Logical Maximum (1) */
|
|
||||||
0x09, 0xb0, /* Usage (Play) */
|
|
||||||
0x09, 0xb5, /* Usage (Scan Next Track) */
|
|
||||||
0x09, 0xb6, /* Usage (Scan Previous Track) */
|
|
||||||
0x09, 0xe9, /* Usage (Volume Up) */
|
|
||||||
0x09, 0xea, /* Usage (Volume Down) */
|
|
||||||
0x09, 0xe2, /* Usage (Mute) */
|
|
||||||
0x75, 0x01, /* Report Size (1) */
|
|
||||||
0x95, 0x06, /* Report Count (6) */
|
|
||||||
0x81, 0x02, /* Input (Data, Var, Abs) */
|
|
||||||
0x95, 0x02, /* Report Count (2) */
|
|
||||||
0x81, 0x01, /* Input (Cnst, Ary, Abs) */
|
|
||||||
0xc0 /* End collection */
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define non-configurable items in the HID Report descriptor.
|
|
||||||
*/
|
|
||||||
static const USB_HID_Short_Item_t hidCollectionApplication = {
|
|
||||||
.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_MAIN, HID_REPORT_ITEM_TAG_COLLECTION),
|
|
||||||
.data = { 0x01, 0x00 } };
|
|
||||||
static const USB_HID_Short_Item_t hidCollectionEnd = {
|
|
||||||
.header = HID_REPORT_SET_HEADER(0, HID_REPORT_ITEM_TYPE_MAIN, HID_REPORT_ITEM_TAG_END_COLLECTION),
|
|
||||||
.data = { 0x00, 0x00 } };
|
|
||||||
|
|
||||||
static const USB_HID_Short_Item_t hidInputConstArray = {
|
|
||||||
.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_MAIN, HID_REPORT_ITEM_TAG_INPUT),
|
|
||||||
.data = { 0x01, 0x00 } };
|
|
||||||
static const USB_HID_Short_Item_t hidInputDataVar = {
|
|
||||||
.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_MAIN, HID_REPORT_ITEM_TAG_INPUT),
|
|
||||||
.data = { 0x02, 0x00 } };
|
|
||||||
|
|
||||||
static const USB_HID_Short_Item_t hidLogicalMaximum0 = {
|
|
||||||
.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_GLOBAL, HID_REPORT_ITEM_TAG_LOGICAL_MAXIMUM),
|
|
||||||
.data = { 0x00, 0x00 } };
|
|
||||||
static const USB_HID_Short_Item_t hidLogicalMaximum1 = {
|
|
||||||
.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_GLOBAL, HID_REPORT_ITEM_TAG_LOGICAL_MAXIMUM),
|
|
||||||
.data = { 0x01, 0x00 } };
|
|
||||||
static const USB_HID_Short_Item_t hidLogicalMinimum0 = {
|
|
||||||
.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_GLOBAL, HID_REPORT_ITEM_TAG_LOGICAL_MINIMUM),
|
|
||||||
.data = { 0x00, 0x00 } };
|
|
||||||
|
|
||||||
static const USB_HID_Short_Item_t hidReportCount2 = {
|
|
||||||
.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_GLOBAL, HID_REPORT_ITEM_TAG_REPORT_COUNT),
|
|
||||||
.data = { 0x02, 0x00 } };
|
|
||||||
static const USB_HID_Short_Item_t hidReportCount6 = {
|
|
||||||
.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_GLOBAL, HID_REPORT_ITEM_TAG_REPORT_COUNT),
|
|
||||||
.data = { 0x06, 0x00 } };
|
|
||||||
static const USB_HID_Short_Item_t hidReportSize1 = {
|
|
||||||
.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_GLOBAL, HID_REPORT_ITEM_TAG_REPORT_SIZE),
|
|
||||||
.data = { 0x01, 0x00 } };
|
|
||||||
|
|
||||||
static const USB_HID_Short_Item_t hidUsageConsumerControl = {
|
|
||||||
.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_LOCAL, HID_REPORT_ITEM_TAG_USAGE),
|
|
||||||
.data = { 0x01, 0x00 } };
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define the HID Report Descriptor Item, Usage Page, Report ID and length for each HID Report
|
|
||||||
* For internal purposes, a report element with ID of 0 must be included if report IDs are not being used.
|
|
||||||
*/
|
|
||||||
static const USB_HID_Report_Element_t hidReportPageConsumer = {
|
|
||||||
.item.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_GLOBAL, HID_REPORT_ITEM_TAG_USAGE_PAGE),
|
|
||||||
.item.data = { USB_HID_USAGE_PAGE_ID_CONSUMER, 0x00 },
|
|
||||||
.location = HID_REPORT_SET_LOC( 0, 2, 0, 0 )
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define configurable items in the HID Report descriptor.
|
|
||||||
*/
|
|
||||||
static USB_HID_Report_Element_t hidUsageByte0Bit5 = {
|
|
||||||
.item.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_LOCAL, HID_REPORT_ITEM_TAG_USAGE),
|
|
||||||
.item.data = { 0xE2, 0x00 },
|
|
||||||
.location = HID_REPORT_SET_LOC(0, 0, 0, 5)
|
|
||||||
}; // Mute
|
|
||||||
static USB_HID_Report_Element_t hidUsageByte0Bit4 = {
|
|
||||||
.item.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_LOCAL, HID_REPORT_ITEM_TAG_USAGE),
|
|
||||||
.item.data = { 0xEA, 0x00 },
|
|
||||||
.location = HID_REPORT_SET_LOC(0, 0, 0, 4)
|
|
||||||
}; // Vol-
|
|
||||||
static USB_HID_Report_Element_t hidUsageByte0Bit3 = {
|
|
||||||
.item.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_LOCAL, HID_REPORT_ITEM_TAG_USAGE),
|
|
||||||
.item.data = { 0xE9, 0x00 },
|
|
||||||
.location = HID_REPORT_SET_LOC(0, 0, 0, 3)
|
|
||||||
}; // Vol+
|
|
||||||
static USB_HID_Report_Element_t hidUsageByte0Bit2 = {
|
|
||||||
.item.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_LOCAL, HID_REPORT_ITEM_TAG_USAGE),
|
|
||||||
.item.data = { 0xB6, 0x00 },
|
|
||||||
.location = HID_REPORT_SET_LOC(0, 0, 0, 2)
|
|
||||||
}; // Scan Prev
|
|
||||||
static USB_HID_Report_Element_t hidUsageByte0Bit1 = {
|
|
||||||
.item.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_LOCAL, HID_REPORT_ITEM_TAG_USAGE),
|
|
||||||
.item.data = { 0xB5, 0x00 },
|
|
||||||
.location = HID_REPORT_SET_LOC(0, 0, 0, 1)
|
|
||||||
}; // Scan Next
|
|
||||||
static USB_HID_Report_Element_t hidUsageByte0Bit0 = {
|
|
||||||
.item.header = HID_REPORT_SET_HEADER(1, HID_REPORT_ITEM_TYPE_LOCAL, HID_REPORT_ITEM_TAG_USAGE),
|
|
||||||
.item.data = { 0xB0, 0x00 },
|
|
||||||
.location = HID_REPORT_SET_LOC(0, 0, 0, 0)
|
|
||||||
}; // Play
|
|
||||||
|
|
||||||
/*
|
|
||||||
* List the configurable elements in the HID Report descriptor.
|
|
||||||
*/
|
|
||||||
static USB_HID_Report_Element_t* const hidConfigurableElements[] = {
|
|
||||||
&hidUsageByte0Bit0,
|
|
||||||
&hidUsageByte0Bit1,
|
|
||||||
&hidUsageByte0Bit2,
|
|
||||||
&hidUsageByte0Bit3,
|
|
||||||
&hidUsageByte0Bit4,
|
|
||||||
&hidUsageByte0Bit5
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* List HID Reports, one per Report ID. This should be a usage page item with the relevant
|
|
||||||
* If not using report IDs - still have one with report ID 0
|
|
||||||
*/
|
|
||||||
static const USB_HID_Report_Element_t* const hidReports[] = {
|
|
||||||
&hidReportPageConsumer
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* List all items in the HID Report descriptor.
|
|
||||||
*/
|
|
||||||
static const USB_HID_Short_Item_t* const hidReportDescriptorItems[] = {
|
|
||||||
&(hidReportPageConsumer.item),
|
|
||||||
&hidUsageConsumerControl,
|
|
||||||
&hidCollectionApplication,
|
|
||||||
&hidLogicalMinimum0,
|
|
||||||
&hidLogicalMaximum1,
|
|
||||||
&(hidUsageByte0Bit0.item),
|
|
||||||
&(hidUsageByte0Bit1.item),
|
|
||||||
&(hidUsageByte0Bit2.item),
|
|
||||||
&(hidUsageByte0Bit3.item),
|
|
||||||
&(hidUsageByte0Bit4.item),
|
|
||||||
&(hidUsageByte0Bit5.item),
|
|
||||||
&hidReportSize1,
|
|
||||||
&hidReportCount6,
|
|
||||||
&hidInputDataVar,
|
|
||||||
&hidLogicalMaximum0,
|
|
||||||
&hidReportCount2,
|
|
||||||
&hidInputConstArray,
|
|
||||||
&hidCollectionEnd
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define the number of HID Reports
|
|
||||||
* Due to XC not supporting designated initializers, this constant has a hard-coded value.
|
|
||||||
* It must equal ( sizeof hidReports / sizeof ( USB_HID_Report_Element_t* ))
|
|
||||||
*/
|
|
||||||
#define HID_REPORT_COUNT ( 1 )
|
|
||||||
|
|
||||||
#endif // __hid_report_descriptor_h__
|
|
||||||
@@ -1,52 +1,56 @@
|
|||||||
// Copyright 2016-2021 XMOS LIMITED.
|
// Copyright 2017-2022 XMOS LIMITED.
|
||||||
// This Software is subject to the terms of the XMOS Public Licence: Version 1.
|
// This Software is subject to the terms of the XMOS Public Licence: Version 1.
|
||||||
|
#include <xs1.h>
|
||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
#include <timer.h>
|
|
||||||
|
|
||||||
#include "xua.h"
|
#include "xua.h"
|
||||||
|
#include "../../shared/apppll.h"
|
||||||
|
|
||||||
/* General output port bit definitions */
|
on tile[0]: out port p_ctrl = XS1_PORT_8D;
|
||||||
#define P_GPIO_DSD_MODE (1 << 0) /* DSD mode select 0 = 8i/8o I2S, 1 = 8o DSD*/
|
|
||||||
#define P_GPIO_DAC_RST_N (1 << 1)
|
|
||||||
#define P_GPIO_USB_SEL0 (1 << 2)
|
|
||||||
#define P_GPIO_USB_SEL1 (1 << 3)
|
|
||||||
#define P_GPIO_VBUS_EN (1 << 4)
|
|
||||||
#define P_GPIO_PLL_SEL (1 << 5) /* 1 = CS2100, 0 = Phaselink clock source */
|
|
||||||
#define P_GPIO_ADC_RST_N (1 << 6)
|
|
||||||
#define P_GPIO_MCLK_FSEL (1 << 7) /* Select frequency on Phaselink clock. 0 = 24.576MHz for 48k, 1 = 22.5792MHz for 44.1k.*/
|
|
||||||
|
|
||||||
|
/* p_ctrl:
|
||||||
|
* [0:3] - Unused
|
||||||
|
* [4] - EN_3v3_N
|
||||||
|
* [5] - EN_3v3A
|
||||||
|
* [6] - EXT_PLL_SEL (CS2100:0, SI: 1)
|
||||||
|
* [7] - MCLK_DIR (Out:0, In: 1)
|
||||||
|
*/
|
||||||
|
#define EXT_PLL_SEL__MCLK_DIR (0x80)
|
||||||
|
|
||||||
out port p_gpio = on tile[0]:XS1_PORT_8C;
|
/* Note, this runs on Tile[0] */
|
||||||
|
void ctrlPort()
|
||||||
void AudioHwConfig(unsigned samFreq, unsigned mClk, unsigned dsdMode,
|
|
||||||
unsigned sampRes_DAC, unsigned sampRes_ADC)
|
|
||||||
{
|
{
|
||||||
unsigned char gpioVal = 0;
|
// Drive control port to turn on 3V3 and set MCLK_DIR
|
||||||
|
// Note, "soft-start" to reduce current spike
|
||||||
/* Set master clock select appropriately and put ADC and DAC into reset */
|
// Note, 3v3_EN is inverted
|
||||||
if (mClk == MCLK_441)
|
for (int i = 0; i < 30; i++)
|
||||||
{
|
{
|
||||||
gpioVal = P_GPIO_USB_SEL0 | P_GPIO_USB_SEL1;
|
p_ctrl <: EXT_PLL_SEL__MCLK_DIR | 0x30; /* 3v3: off, 3v3A: on */
|
||||||
|
delay_microseconds(5);
|
||||||
|
p_ctrl <: EXT_PLL_SEL__MCLK_DIR | 0x20; /* 3v3: on, 3v3A: on */
|
||||||
|
delay_microseconds(5);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
gpioVal = P_GPIO_USB_SEL0 | P_GPIO_USB_SEL1 | P_GPIO_MCLK_FSEL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Note, DAC and ADC held in reset */
|
|
||||||
p_gpio <: gpioVal;
|
|
||||||
|
|
||||||
/* Allow MCLK to settle */
|
|
||||||
delay_microseconds(20000);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Configures the external audio hardware at startup. Note this runs on Tile[1] */
|
||||||
void AudioHwInit()
|
void AudioHwInit()
|
||||||
{
|
{
|
||||||
/* Set USB Mux to micro-b */
|
/* Wait for power supply to come up */
|
||||||
/* ADC and DAC in reset */
|
delay_milliseconds(100);
|
||||||
p_gpio <: P_GPIO_USB_SEL0 | P_GPIO_USB_SEL1;
|
|
||||||
|
/* Use xCORE Secondary PLL to generate *fixed* master clock */
|
||||||
|
AppPllEnable_SampleRate(DEFAULT_FREQ);
|
||||||
|
|
||||||
|
delay_milliseconds(100);
|
||||||
|
|
||||||
|
/* DAC setup: For basic I2S input we don't need any register setup. DACs will clock auto detect etc.
|
||||||
|
* It holds DAC in reset until it gets clocks anyway.
|
||||||
|
* Note, this example doesn't use the ADC's
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Configures the external audio hardware for the required sample frequency */
|
||||||
|
void AudioHwConfig(unsigned samFreq, unsigned mClk, unsigned dsdMode, unsigned sampRes_DAC, unsigned sampRes_ADC)
|
||||||
|
{
|
||||||
|
AppPllEnable_SampleRate(samFreq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,88 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Network xmlns="http://www.xmos.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xmos.com http://www.xmos.com" ManuallySpecifiedRouting="true">
|
|
||||||
<Type>Board</Type>
|
|
||||||
<Name>XS2 MC Audio</Name>
|
|
||||||
<Declarations>
|
|
||||||
<Declaration>tileref tile[2]</Declaration>
|
|
||||||
<Declaration>tileref usb_tile</Declaration>
|
|
||||||
</Declarations>
|
|
||||||
<Packages>
|
|
||||||
<Package id="0" Type="XS2-UnA-512-FB236">
|
|
||||||
<Nodes>
|
|
||||||
<Node Id="0" InPackageId="0" Type="XS2-L16A-512" Oscillator="24MHz" SystemFrequency="500MHz" referencefrequency="100MHz">
|
|
||||||
<Boot>
|
|
||||||
<Source Location="SPI:bootFlash"/>
|
|
||||||
</Boot>
|
|
||||||
<Tile Number="0" Reference="tile[0]">
|
|
||||||
<Port Location="XS1_PORT_1B" Name="PORT_SQI_CS"/>
|
|
||||||
<Port Location="XS1_PORT_1C" Name="PORT_SQI_SCLK"/>
|
|
||||||
<Port Location="XS1_PORT_4B" Name="PORT_SQI_SIO"/>
|
|
||||||
|
|
||||||
<!-- Audio Ports -->
|
|
||||||
<Port Location="XS1_PORT_1A" Name="PORT_PLL_REF"/>
|
|
||||||
<Port Location="XS1_PORT_1F" Name="PORT_MCLK_IN"/>
|
|
||||||
<Port Location="XS1_PORT_1G" Name="PORT_I2S_LRCLK"/>
|
|
||||||
<Port Location="XS1_PORT_1H" Name="PORT_I2S_BCLK"/>
|
|
||||||
<Port Location="XS1_PORT_1M" Name="PORT_I2S_DAC0"/>
|
|
||||||
<port Location="XS1_PORT_1N" Name="PORT_I2S_DAC1"/>
|
|
||||||
<port Location="XS1_PORT_1O" Name="PORT_I2S_DAC2"/>
|
|
||||||
<port Location="XS1_PORT_1P" Name="PORT_I2S_DAC3"/>
|
|
||||||
<Port Location="XS1_PORT_1I" Name="PORT_I2S_ADC0"/>
|
|
||||||
<Port Location="XS1_PORT_1J" Name="PORT_I2S_ADC1"/>
|
|
||||||
<Port Location="XS1_PORT_1K" Name="PORT_I2S_ADC2"/>
|
|
||||||
<Port Location="XS1_PORT_1L" Name="PORT_I2S_ADC3"/>
|
|
||||||
<Port Location="XS1_PORT_4A" Name="PORT_I2C"/>
|
|
||||||
<Port Location="XS1_PORT_1M" Name="PORT_DSD_DAC0"/>
|
|
||||||
<port Location="XS1_PORT_1N" Name="PORT_DSD_DAC1"/>
|
|
||||||
<Port Location="XS1_PORT_1G" Name="PORT_DSD_CLK"/>
|
|
||||||
<Port Location="XS1_PORT_1E" Name="PORT_ADAT_OUT"/>--> <!-- D: COAX E: OPT -->
|
|
||||||
<Port Location="XS1_PORT_1D" Name="PORT_SPDIF_OUT"/>--> <!-- D: COAX E: OPT -->
|
|
||||||
</Tile>
|
|
||||||
<Tile Number="1" Reference="tile[1]">
|
|
||||||
<!-- USB intended to run on this tile -->
|
|
||||||
<!-- Ports for USB feedback calculation -->
|
|
||||||
<Port Location="XS1_PORT_16B" Name="PORT_MCLK_COUNT"/>
|
|
||||||
<Port Location="XS1_PORT_1L" Name="PORT_MCLK_IN_USB"/>
|
|
||||||
<!-- Audio Ports -->
|
|
||||||
<Port Location="XS1_PORT_1M" Name="PORT_MIDI_IN"/>
|
|
||||||
<Port Location="XS1_PORT_1N" Name="PORT_MIDI_OUT"/>
|
|
||||||
<Port Location="XS1_PORT_1O" Name="PORT_ADAT_IN"/>--> <!-- P: COAX O: OPT -->
|
|
||||||
<Port Location="XS1_PORT_1P" Name="PORT_SPDIF_IN"/>--> <!-- P: COAX O: OPT -->
|
|
||||||
</Tile>
|
|
||||||
</Node>
|
|
||||||
<Node Id="1" InPackageId="1" Type="periph:XS1-SU" Reference="usb_tile" Oscillator="24MHz">
|
|
||||||
</Node>
|
|
||||||
</Nodes>
|
|
||||||
<Links>
|
|
||||||
<Link Encoding="5wire">
|
|
||||||
<LinkEndpoint NodeId="0" Link="8" Delays="52clk,52clk"/>
|
|
||||||
<LinkEndpoint NodeId="1" Link="XL0" Delays="1clk,1clk"/>
|
|
||||||
</Link>
|
|
||||||
</Links>
|
|
||||||
</Package>
|
|
||||||
</Packages>
|
|
||||||
<Nodes>
|
|
||||||
<Node Id="2" Type="device:" RoutingId="0x8000">
|
|
||||||
<Service Id="0" Proto="xscope_host_data(chanend c);">
|
|
||||||
<Chanend Identifier="c" end="3"/>
|
|
||||||
</Service>
|
|
||||||
</Node>
|
|
||||||
</Nodes>
|
|
||||||
<Links>
|
|
||||||
<Link Encoding="2wire" Delays="4,4" Flags="XSCOPE">
|
|
||||||
<LinkEndpoint NodeId="0" Link="XL0"/>
|
|
||||||
<LinkEndpoint NodeId="2" Chanend="1"/>
|
|
||||||
</Link>
|
|
||||||
</Links>
|
|
||||||
<ExternalDevices>
|
|
||||||
<Device NodeId="0" Tile="0" Class="SQIFlash" Name="bootFlash" Type="S25FL116K" PageSize="256" SectorSize="4096" NumPages="8192">
|
|
||||||
<Attribute Name="PORT_SQI_CS" Value="PORT_SQI_CS"/>
|
|
||||||
<Attribute Name="PORT_SQI_SCLK" Value="PORT_SQI_SCLK"/>
|
|
||||||
<Attribute Name="PORT_SQI_SIO" Value="PORT_SQI_SIO"/>
|
|
||||||
</Device>
|
|
||||||
</ExternalDevices>
|
|
||||||
<JTAGChain>
|
|
||||||
<JTAGDevice NodeId="0"/>
|
|
||||||
<JTAGDevice NodeId="1"/>
|
|
||||||
</JTAGChain>
|
|
||||||
</Network>
|
|
||||||
92
examples/AN00247_xua_example_spdif_tx/src/xk-audio-316-mc.xn
Normal file
92
examples/AN00247_xua_example_spdif_tx/src/xk-audio-316-mc.xn
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Network xmlns="http://www.xmos.com"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.xmos.com http://www.xmos.com">
|
||||||
|
<Type>Board</Type>
|
||||||
|
<Name>xcore.ai MC Audio Board</Name>
|
||||||
|
|
||||||
|
<Declarations>
|
||||||
|
<Declaration>tileref tile[2]</Declaration>
|
||||||
|
</Declarations>
|
||||||
|
|
||||||
|
<Packages>
|
||||||
|
<Package id="0" Type="XS3-UnA-1024-FB265">
|
||||||
|
<Nodes>
|
||||||
|
<Node Id="0" InPackageId="0" Type="XS3-L16A-1024" Oscillator="24MHz" SystemFrequency="600MHz" ReferenceFrequency="100MHz">
|
||||||
|
<Boot>
|
||||||
|
<Source Location="bootFlash"/>
|
||||||
|
</Boot>
|
||||||
|
<Tile Number="0" Reference="tile[0]">
|
||||||
|
<Port Location="XS1_PORT_1B" Name="PORT_SQI_CS"/>
|
||||||
|
<Port Location="XS1_PORT_1C" Name="PORT_SQI_SCLK"/>
|
||||||
|
<Port Location="XS1_PORT_4B" Name="PORT_SQI_SIO"/>
|
||||||
|
|
||||||
|
<!-- Various ctrl signals -->
|
||||||
|
<Port Location="XS1_PORT_8D" Name="PORT_CTRL"/>
|
||||||
|
|
||||||
|
<!-- I2C -->
|
||||||
|
<Port Location="XS1_PORT_8D" Name="PORT_CTRL"/>
|
||||||
|
<Port Location="XS1_PORT_8D" Name="PORT_CTRL"/>
|
||||||
|
|
||||||
|
<!-- Clocking -->
|
||||||
|
<Port Location="XS1_PORT_16B" Name="PORT_MCLK_COUNT"/>
|
||||||
|
<Port Location="XS1_PORT_1D" Name="PORT_MCLK_IN_USB"/>
|
||||||
|
<Port Location="XS1_PORT_1A" Name="PORT_PLL_REF"/>
|
||||||
|
|
||||||
|
<!-- Audio Ports: Digital -->
|
||||||
|
<Port Location="XS1_PORT_1O" Name="PORT_OPTICAL_IN"/>
|
||||||
|
<Port Location="XS1_PORT_1N" Name="PORT_COAX_IN"/>
|
||||||
|
|
||||||
|
</Tile>
|
||||||
|
<Tile Number="1" Reference="tile[1]">
|
||||||
|
<!-- Audio Ports: I2S -->
|
||||||
|
<Port Location="XS1_PORT_1D" Name="PORT_MCLK_IN"/>
|
||||||
|
<Port Location="XS1_PORT_1B" Name="PORT_I2S_LRCLK"/>
|
||||||
|
<Port Location="XS1_PORT_1C" Name="PORT_I2S_BCLK"/>
|
||||||
|
<Port Location="XS1_PORT_1P" Name="PORT_I2S_DAC0"/>
|
||||||
|
<port Location="XS1_PORT_1O" Name="PORT_I2S_DAC1"/>
|
||||||
|
<port Location="XS1_PORT_1N" Name="PORT_I2S_DAC2"/>
|
||||||
|
<port Location="XS1_PORT_1M" Name="PORT_I2S_DAC3"/>
|
||||||
|
<Port Location="XS1_PORT_1I" Name="PORT_I2S_ADC0"/>
|
||||||
|
<Port Location="XS1_PORT_1J" Name="PORT_I2S_ADC1"/>
|
||||||
|
<Port Location="XS1_PORT_1K" Name="PORT_I2S_ADC2"/>
|
||||||
|
<Port Location="XS1_PORT_1L" Name="PORT_I2S_ADC3"/>
|
||||||
|
|
||||||
|
<!-- Audio Ports: Digital -->
|
||||||
|
<Port Location="XS1_PORT_1G" Name="PORT_OPTICAL_OUT"/>
|
||||||
|
<Port Location="XS1_PORT_1A" Name="PORT_COAX_OUT"/>
|
||||||
|
|
||||||
|
<!-- MIDI -->
|
||||||
|
<Port Location="XS1_PORT_1F" Name="PORT_MIDI_IN"/>
|
||||||
|
<Port Location="XS1_PORT_4C" Name="PORT_MIDI_OUT"/> <!-- bit[0] -->
|
||||||
|
|
||||||
|
</Tile>
|
||||||
|
</Node>
|
||||||
|
</Nodes>
|
||||||
|
</Package>
|
||||||
|
</Packages>
|
||||||
|
<Nodes>
|
||||||
|
<Node Id="2" Type="device:" RoutingId="0x8000">
|
||||||
|
<Service Id="0" Proto="xscope_host_data(chanend c);">
|
||||||
|
<Chanend Identifier="c" end="3"/>
|
||||||
|
</Service>
|
||||||
|
</Node>
|
||||||
|
</Nodes>
|
||||||
|
<Links>
|
||||||
|
<Link Encoding="2wire" Delays="5clk" Flags="XSCOPE">
|
||||||
|
<LinkEndpoint NodeId="0" Link="XL0"/>
|
||||||
|
<LinkEndpoint NodeId="2" Chanend="1"/>
|
||||||
|
</Link>
|
||||||
|
</Links>
|
||||||
|
<ExternalDevices>
|
||||||
|
<Device NodeId="0" Tile="0" Class="SQIFlash" Name="bootFlash" PageSize="256" SectorSize="4096" NumPages="8192">
|
||||||
|
<Attribute Name="PORT_SQI_CS" Value="PORT_SQI_CS"/>
|
||||||
|
<Attribute Name="PORT_SQI_SCLK" Value="PORT_SQI_SCLK"/>
|
||||||
|
<Attribute Name="PORT_SQI_SIO" Value="PORT_SQI_SIO"/>
|
||||||
|
</Device>
|
||||||
|
</ExternalDevices>
|
||||||
|
<JTAGChain>
|
||||||
|
<JTAGDevice NodeId="0"/>
|
||||||
|
</JTAGChain>
|
||||||
|
|
||||||
|
</Network>
|
||||||
@@ -4,29 +4,28 @@
|
|||||||
#ifndef _XUA_CONF_H_
|
#ifndef _XUA_CONF_H_
|
||||||
#define _XUA_CONF_H_
|
#define _XUA_CONF_H_
|
||||||
|
|
||||||
#define NUM_USB_CHAN_OUT 2
|
#define NUM_USB_CHAN_OUT (2)
|
||||||
#define NUM_USB_CHAN_IN 0
|
#define NUM_USB_CHAN_IN (0)
|
||||||
#define I2S_CHANS_DAC 0
|
#define I2S_CHANS_DAC (0)
|
||||||
#define I2S_CHANS_ADC 0
|
#define I2S_CHANS_ADC (0)
|
||||||
#define MCLK_441 (512 * 44100)
|
#define MCLK_441 (512 * 44100)
|
||||||
#define MCLK_48 (512 * 48000)
|
#define MCLK_48 (512 * 48000)
|
||||||
#define MIN_FREQ 48000
|
#define MIN_FREQ (48000)
|
||||||
#define MAX_FREQ 48000
|
#define MAX_FREQ (48000)
|
||||||
|
|
||||||
#define EXCLUDE_USB_AUDIO_MAIN
|
#define EXCLUDE_USB_AUDIO_MAIN
|
||||||
|
|
||||||
#define XUA_SPDIF_TX_EN 1
|
#define XUA_SPDIF_TX_EN (1)
|
||||||
#define SPDIF_TX_INDEX 0
|
#define SPDIF_TX_INDEX (0)
|
||||||
#define VENDOR_STR "XMOS"
|
#define VENDOR_STR "XMOS"
|
||||||
#define VENDOR_ID 0x20B1
|
#define VENDOR_ID 0x20B1
|
||||||
#define PRODUCT_STR_A2 "XUA SPDIF Example"
|
#define PRODUCT_STR_A2 "XUA SPDIF Example"
|
||||||
#define PRODUCT_STR_A1 "XUA SPDIF Example"
|
#define PRODUCT_STR_A1 "XUA SPDIF Example"
|
||||||
#define PID_AUDIO_1 1
|
#define PID_AUDIO_1 (1)
|
||||||
#define PID_AUDIO_2 2
|
#define PID_AUDIO_2 (2)
|
||||||
#define AUDIO_CLASS 2
|
#define AUDIO_CLASS (2)
|
||||||
#define AUDIO_CLASS_FALLBACK 0
|
#define AUDIO_CLASS_FALLBACK (0)
|
||||||
#define BCD_DEVICE 0x1234
|
#define BCD_DEVICE (0x1234)
|
||||||
#define XUA_DFU_EN 0
|
#define XUA_DFU_EN (0)
|
||||||
#define MIC_DUAL_ENABLED 0 // Use multi-threaded design
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
// Copyright 2017-2021 XMOS LIMITED.
|
|
||||||
// This Software is subject to the terms of the XMOS Public Licence: Version 1.
|
|
||||||
|
|
||||||
#include "xua_conf.h"
|
|
||||||
|
|
||||||
/* TODO */
|
|
||||||
#define XUD_UAC_NUM_USB_CHAN_OUT NUM_USB_CHAN_OUT
|
|
||||||
#define XUD_UAC_NUM_USB_CHAN_IN NUM_USB_CHAN_IN
|
|
||||||
Reference in New Issue
Block a user