Skip to content

Commit

Permalink
Merge pull request #523 from xmos/feature/xscope_fileio
Browse files Browse the repository at this point in the history
xscope_fileio FreeRTOS example application
  • Loading branch information
keithm-xmos authored Sep 29, 2022
2 parents 3c97789 + 0a4b27c commit da8ef5e
Show file tree
Hide file tree
Showing 32 changed files with 1,451 additions and 35 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,6 @@
[submodule "frameworks/rtos"]
path = modules/rtos
url = [email protected]:xmos/fwk_rtos.git
[submodule "modules/xscope_fileio/xscope_fileio"]
path = modules/xscope_fileio/xscope_fileio
url = [email protected]:xmos/xscope_fileio.git
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions doc/tutorials/freertos/examples/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ Several FreeRTOS code examples are included to illustrate the fundamental tool f
:includehidden:

explorer_board.rst
xscope_fileio.rst
device_control.rst
dispatcher.rst
l2_cache.rst
iot.rst
xlink.rst
1 change: 1 addition & 0 deletions doc/tutorials/freertos/examples/xlink.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.. include:: ../../../../examples/freertos/xlink/README.rst
1 change: 1 addition & 0 deletions doc/tutorials/freertos/examples/xscope_fileio.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.. include:: ../../../../examples/freertos/xscope_fileio/README.rst
14 changes: 14 additions & 0 deletions examples/examples.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,20 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL XCORE_XS3A)
include(${CMAKE_CURRENT_LIST_DIR}/freertos/l2_cache/l2_cache.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/freertos/usb/usb.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/freertos/xlink/xlink.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/freertos/xscope_fileio/xscope_fileio.cmake)
else()
# Get the "version" value from the JSON element
file(READ settings.json JSON_STRING)
string(JSON SDK_VERSION GET ${JSON_STRING} ${IDX} version)

# Determine OS, set up install dir
if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
set(HOST_INSTALL_DIR "$ENV{USERPROFILE}\\.xmos\\SDK\\${SDK_VERSION}\\bin")
else()
set(HOST_INSTALL_DIR "/opt/xmos/SDK/${SDK_VERSION}/bin")
endif()

add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/freertos/device_control/host)
add_subdirectory(modules/xscope_fileio/xscope_fileio/host)
install(TARGETS xscope_host_endpoint DESTINATION ${HOST_INSTALL_DIR})
endif()
9 changes: 7 additions & 2 deletions examples/freertos/xlink/README.rst
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
##############
#####
XLINK
##############
#####

This example application demonstrates the `AN01024 <https://www.xmos.ai/file/an01024-xconnect-dynamic-configuration-demo-sw/>`_ application note in FreeRTOS on XCORE AI.

.. note::

This example application required XTC Tools version 15.2.0 or newer.

**********************
Preparing the hardware
**********************
Expand Down Expand Up @@ -145,4 +149,5 @@ Payloads match to ID per the table below:
- timeouts in the last second

.. note::

Data rates are highly dependant on the electrical characteristics of the physical connection. Refer to `xCONNECT Architecture <https://www.xmos.ai/file/xconnect-architecture/>`_ for more information.
5 changes: 3 additions & 2 deletions examples/freertos/xlink/src/app_conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#define appconfINTER_DELAY 2
#define appconfINTRA_DELAY 3


#define appconfRX_DIRECTION 0
#define appconfRX_NODE_ID 0x20
#define appconfRX_DEBUG_I2C_SLAVE_ADDR 0xc
Expand All @@ -33,8 +34,8 @@
#define appconfI2C_INTERRUPT_CORE 0 /* Must be kept off I/O cores. */

/* I/O and interrupt cores for Tile 1 */
#ifndef appconfXLINK_RX_IO_CORE 1 /* Must be kept off core 0 with the RTOS tick ISR */
#ifndef appconfXLINK_TX_IO_CORE 1 /* Must be kept off core 0 with the RTOS tick ISR */
#define appconfXLINK_RX_IO_CORE 1 /* Must be kept off core 0 with the RTOS tick ISR */
#define appconfXLINK_TX_IO_CORE 1 /* Must be kept off core 0 with the RTOS tick ISR */

/* Task Priorities */
#define appconfSTARTUP_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )
Expand Down
39 changes: 39 additions & 0 deletions examples/freertos/xlink/xlink.cmake
Original file line number Diff line number Diff line change
@@ -1,3 +1,42 @@
function(check_tools_version)
# Run xcc --version
execute_process(
COMMAND xcc --version
OUTPUT_VARIABLE XCC_VERSION_OUTPUT_STRING
)
# Split output into lines
string(REPLACE "\n" ";" XCC_VERSION_OUTPUT_LINES ${XCC_VERSION_OUTPUT_STRING})
# Get second line
list(GET XCC_VERSION_OUTPUT_LINES 1 XCC_VERSION_LINE)
message(STATUS ${XCC_VERSION_LINE})
# Parse version fields
string(SUBSTRING ${XCC_VERSION_LINE} 13 10 XCC_SEMVER)
string(REPLACE "." ";" XCC_SEMVER_FIELDS ${XCC_SEMVER})
list(LENGTH XCC_SEMVER_FIELDS XCC_SEMVER_FIELDS_LENGTH)
if (${XCC_SEMVER_FIELDS_LENGTH} EQUAL "3")
list(GET XCC_SEMVER_FIELDS 0 XCC_VERSION_MAJOR)
list(GET XCC_SEMVER_FIELDS 1 XCC_VERSION_MINOR)
list(GET XCC_SEMVER_FIELDS 2 XCC_VERSION_PATCH)
# Set XTC version env variables
set(XTC_VERSION_MAJOR ${XCC_VERSION_MAJOR} PARENT_SCOPE)
set(XTC_VERSION_MINOR ${XCC_VERSION_MINOR} PARENT_SCOPE)
set(XTC_VERSION_PATCH ${XCC_VERSION_PATCH} PARENT_SCOPE)
else()
# Unable to determine the version. Return 15.1.0 and hope for the best
# Note, 15.1.0 had a bug where the version was missing
set(XTC_VERSION_MAJOR "15" PARENT_SCOPE)
set(XTC_VERSION_MINOR "1" PARENT_SCOPE)
set(XTC_VERSION_PATCH "0" PARENT_SCOPE)
endif()
endfunction()

check_tools_version()

if ((XTC_VERSION_MAJOR LESS 15) OR (XTC_VERSION_MINOR LESS 2))
message(WARNING "XTC Tools version 15.2.0 or newer required for FreeRTOS xlink example")
return()
endif()

#**********************
# Gather Sources
#**********************
Expand Down
141 changes: 141 additions & 0 deletions examples/freertos/xscope_fileio/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
###############
XSCOPE File I/O
###############

This FreeRTOS example application reads a WAV file from the host over an XSCOPE server, propagates the data through multiple threads across both tiles, and then writes the output to a WAV file on the host PC, also over an XSCOPE server.

.. image:: images/xscope_fileio_functional_diagram.png
:align: left

The 3-stage pipeline in the example covers both XCORE tiles. Stage #1 and Stage #2 run on tile[1], while Stage #3 runs on tile[0].

Stages #1 and #2 are implemented in the functions `stage_1` and `stage_2` which can be found in the file ``src\data_pipeline\src\data_pipeline_tile1.c``. In this example, both stages apply a fixed gain to the PCM audio samples. In `stage_1`, preemption is disabled with the `rtos_interrupt_mask_all()` function to insure the FreeRTOS kernel does not interrupt the task and perform a context switch during a performance critical code section. `stage_2` is a typical FreeRTOS task which can be preempted. However, this example is rather simple so, instead of leaving a context switch up to chance, the `stage_2` function periodically yields to the FreeRTOS kernel - emulating a context switch.

Both the `stage_1` and `stage_2` functions have been instrumented with a stopwatch-like timer to measure the time spent applying the fixed gain.

Stage #3 is implemented in the function `stage_3` which can be found in the file ``src\data_pipeline\src\data_pipeline_tile0.c``. In this example, Stage 3 does nothing. It is provided to demonstrate a multi-tile pipeline.

The example application input file name is hard-coded to `in.wav` and the output file file name is hard-coded to `out.wav`. Running the application can be wrapped in a simple script if alternative file names are desired. Simply copy your file to `in.wav`, run the applications, then copy `out.wav` to you preferred output file name.

The input file sample rate must be 16 KHz, 32 bits per sample.

This example is already configured to link with the `XMOS vectorized math library <https://www.xmos.ai/documentation/XM-014660-LATEST/html/modules/core/modules/xs3_math/lib_xs3_math/doc/index.html>`_. Users wishing to take advantage of the vector processing unit (VPU) on the XMOS XS3 architecture can use this example application as a starting point.

******************
Supported Hardware
******************

This example is supported on the XCORE-AI-EXPLORER board.

*********************
Building the Firmware
*********************

Run the following commands in the root folder to build the embedded application using the XTC Toolchain:

Linux or Mac
------------

.. code-block:: console
cmake -B build -DCMAKE_TOOLCHAIN_FILE=xmos_cmake_toolchain/xs3a.cmake
cd build
make example_freertos_xscope_fileio
Windows
-------

Before building the embedded application, you may need to add the path to nmake to your PATH variable.

.. code-block:: console
set PATH=%PATH%;<path-to-nmake>
To build the embedded application:

.. code-block:: console
cmake -G "NMake Makefiles" -B build -DCMAKE_TOOLCHAIN_FILE=xmos_cmake_toolchain/xs3a.cmake
cd build
nmake example_freertos_xscope_fileio
*********************
Building the Host App
*********************

Run the following commands in the root folder to build the host application using your native x86 Toolchain:

.. note::

Permissions may be required to install the host applications.

Linux or Mac
------------

.. code-block:: console
cmake -B build_host
cd build_host
make xscope_host_endpoint
make install
The host application, `xscope_host_endpoint`, will be installed at `/opt/xmos/SDK/<sdk version>/bin/`, and may be moved if desired. You may wish to add this directory to your `PATH` variable.

Windows
-------

Before building the host application, you will need to add the path to the XTC Tools to your environment.

.. code-block:: console
set "XMOS_TOOL_PATH=<path-to-xtc-tools>"
Then build the host application:

.. code-block:: console
cmake -G "NMake Makefiles" -B build_host
cd build_host
nmake xscope_host_endpoint
nmake install
The host application, `xscope_host_endpoint.exe`, will be install at `<USERPROFILE>\.xmos\SDK\<sdk version>\bin\`, and may be moved if desired. You may wish to add this directory to your `PATH` variable.

********************
Running the Firmware
********************

From the build folder run:

Linux or Mac
------------

.. code-block:: console
make run_example_freertos_xscope_fileio
In a second console, run the host xscope server:

.. code-block:: console
./xscope_host_endpoint 12345
Windows
-------

.. code-block:: console
nmake run_example_freertos_xscope_fileio
Before running the host application, you may need to add the location of the `xscope_endpoint.dll` to your PATH.

.. code-block:: console
set PATH=%PATH%;<path-to-xscope-endpoint-dll>
In a second console, run the host xscope server:

.. code-block:: console
xscope_host_endpoint.exe 12345
109 changes: 109 additions & 0 deletions examples/freertos/xscope_fileio/XCORE-AI-EXPLORER.xn
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
<?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 Explorer Kit</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>
<Extmem sizeMbit="1024" Frequency="100MHz">
<!-- Attributes for Padctrl and Lpddr XML elements are as per equivalently named 'Node Configuration' registers in datasheet -->

<Padctrl clk="0x30" cke="0x30" cs_n="0x30" we_n="0x30" cas_n="0x30" ras_n="0x30" addr="0x30" ba="0x30" dq="0x31" dqs="0x31" dm="0x30"/>
<!--
Attributes all have the same meaning, which is:
[6] = Schmitt enable, [5] = Slew, [4:3] = drive strength, [2:1] = pull option, [0] = read enable
Therefore:
0x30: 8mA-drive, fast-slew output
0x31: 8mA-drive, fast-slew bidir
-->

<Lpddr emr_opcode="0x20" protocol_engine_conf_0="0x2aa"/>
<!--
Attributes have various meanings:
emr_opcode[7:5] = LPDDR drive strength to xcore.ai
protocol_engine_conf_0[23:21] = tWR clock count at the Extmem Frequency
protocol_engine_conf_0[20:15] = tXSR clock count at the Extmem Frequency
protocol_engine_conf_0[14:11] = tRAS clock count at the Extmem Frequency
protocol_engine_conf_0[10:0] = tREFI clock count at the Extmem Frequency
Therefore:
0x20: Half drive strength
0x2aa: tREFI 7.79us, tRAS 0us, tXSR 0us, tWR 0us
-->
</Extmem>
<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"/>

<Port Location="XS1_PORT_1N" Name="PORT_I2C_SCL"/>
<Port Location="XS1_PORT_1O" Name="PORT_I2C_SDA"/>

<Port Location="XS1_PORT_4C" Name="PORT_LEDS"/>
<Port Location="XS1_PORT_4D" Name="PORT_BUTTONS"/>

<Port Location="XS1_PORT_1I" Name="WIFI_WIRQ"/>
<Port Location="XS1_PORT_1J" Name="WIFI_MOSI"/>
<Port Location="XS1_PORT_4E" Name="WIFI_WUP_RST_N"/>
<Port Location="XS1_PORT_4F" Name="WIFI_CS_N"/>
<Port Location="XS1_PORT_1L" Name="WIFI_CLK"/>
<Port Location="XS1_PORT_1M" Name="WIFI_MISO"/>
</Tile>
<Tile Number="1" Reference="tile[1]">
<!-- Mic related ports -->
<Port Location="XS1_PORT_1G" Name="PORT_PDM_CLK"/>
<Port Location="XS1_PORT_1F" Name="PORT_PDM_DATA"/>

<!-- Audio ports -->
<Port Location="XS1_PORT_1D" Name="PORT_MCLK_IN"/>
<Port Location="XS1_PORT_1C" Name="PORT_I2S_BCLK"/>
<Port Location="XS1_PORT_1B" Name="PORT_I2S_LRCLK"/>
<Port Location="XS1_PORT_1A" Name="PORT_I2S_DAC_DATA"/>
<Port Location="XS1_PORT_1N" Name="PORT_I2S_ADC_DATA"/>
<Port Location="XS1_PORT_4A" Name="PORT_CODEC_RST_N"/>
</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" Type="S25FL116K" PageSize="256" SectorSize="4096" NumPages="16384">
<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"/>
<Attribute Name="QE_REGISTER" Value="flash_qe_location_status_reg_0"/>
<Attribute Name="QE_BIT" Value="flash_qe_bit_6"/>
</Device>
</ExternalDevices>
<JTAGChain>
<JTAGDevice NodeId="0"/>
</JTAGChain>

</Network>

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2022-09-29T14:56:36.937Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36" etag="k4k2H8g0jgsSFCdsdITm" version="20.3.7" type="device"><diagram id="HG_wOtk8IJbsn9-jQrfK" name="Page-1">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</diagram></mxfile>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added examples/freertos/xscope_fileio/in.wav
Binary file not shown.
Loading

0 comments on commit da8ef5e

Please sign in to comment.