Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for reading intent ID over I2C slave interface for FFD examples #364

Merged
merged 36 commits into from
Aug 19, 2024
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bab1dd3
Add first I2C slave calls
lucianomartin Jul 26, 2024
8a3dccb
Fix I2C defines
lucianomartin Jul 29, 2024
ae76aad
Add entry
lucianomartin Jul 29, 2024
9734daf
Merge branch 'develop' of github.com:xmos/sln_voice into feature/ffd_…
lucianomartin Jul 30, 2024
91ce681
Example with I2C control compiles
lucianomartin Jul 31, 2024
269a430
Commands are receivedintent_servicer_read_cmdfff
lucianomartin Aug 1, 2024
8fb0821
Command working with test ID's and external variables
lucianomartin Aug 1, 2024
989027f
Remove device control code
lucianomartin Aug 2, 2024
4f004e2
Remove USB code
lucianomartin Aug 2, 2024
547d4d2
Move code to new files
lucianomartin Aug 2, 2024
d0546a6
Add comments
lucianomartin Aug 2, 2024
8ed9894
Fix typo
lucianomartin Aug 2, 2024
b290aee
Remove masking
lucianomartin Aug 2, 2024
6770435
Fix defines and make code more generic
lucianomartin Aug 7, 2024
a1f111d
Update documentation
lucianomartin Aug 7, 2024
071a3e4
Update variable
lucianomartin Aug 7, 2024
ea9b924
Update test
lucianomartin Aug 8, 2024
2eec481
Fix ASR builds
lucianomartin Aug 8, 2024
4639dd6
Update fwk_rtos
lucianomartin Aug 8, 2024
3c9a001
Tidy up
lucianomartin Aug 8, 2024
29e620c
Fix format
lucianomartin Aug 8, 2024
434f8f0
Update list
lucianomartin Aug 8, 2024
2bd7deb
Fix comments
lucianomartin Aug 9, 2024
c8e1a26
Fix text
lucianomartin Aug 9, 2024
795ac29
Address some comments
lucianomartin Aug 9, 2024
00c99d2
Update doc/programming_guide/ffd/deploying/configuration.rst
lucianomartin Aug 9, 2024
85f7642
Improve defines for I2C and I2S
lucianomartin Aug 9, 2024
2e9197c
Changes for I2S
lucianomartin Aug 9, 2024
7f1b7e4
Fix builds
lucianomartin Aug 9, 2024
a0c54b7
Fix text
lucianomartin Aug 9, 2024
45c1eee
More changes, FFD cyberon builds work
lucianomartin Aug 12, 2024
78be7a2
Disable DAC for I2S input FFD example
lucianomartin Aug 12, 2024
e30e460
Add more info
lucianomartin Aug 14, 2024
2e4c50e
Add missing articles in doc
lucianomartin Aug 15, 2024
b4f31eb
Merge pull request #1 from lucianomartin/feature/i2c_defines
lucianomartin Aug 15, 2024
31d89fc
Remove unused define
lucianomartin Aug 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 16 additions & 17 deletions doc/programming_guide/ffd/deploying/configuration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,17 @@ If options are changed, the application firmware must be rebuilt.
* - appconfINTENT_UART_DEBUG_INFO_ENABLED
- Enables/disables the UART intent debug information
- 0
* - appconfINTENT_I2C_OUTPUT_ENABLED
- Enables/disables the |I2C| intent message
* - appconfI2C_MASTER_DAC_ENABLED
- Enables/disables configuring the DAC over |I2C| master
- 1
* - appconfI2C_MASTER_ENABLED
- Enables/disables the |I2C| master mode to configure the DAC and send the intent message
* - appconfINTENT_I2C_MASTER_OUTPUT_ENABLED
- Enables/disables sending the intent message over |I2C| master
- 1
* - appconfINTENT_I2C_OUTPUT_DEVICE_ADDR
* - appconfINTENT_I2C_MASTER_DEVICE_ADDR
- Sets the address of the |I2C| device receiving the intent via the |I2C| master interface
- 0x01
* - appconfI2C_SLAVE_ENABLED
- Enables/disables the |I2C| slave mode to read the device register with the intent message
* - appconfINTENT_I2C_SLAVE_POLLED_ENABLED
- Enables/disables allowing another device to poll the intent message via |I2C| slave
- 0
* - appconfI2C_SLAVE_DEVICE_ADDR
- Sets the address of the |I2C| device receiving the intent via the |I2C| slave interface
Expand Down Expand Up @@ -102,31 +102,30 @@ The |I2C| master is used when the FFD example asynchronously sends intent messag
The |I2C| interface cannot operate as both master and slave simultaneously. The FFD example design uses the |I2C| master interface to configure the DAC at device initialisation.
However, if the host reads intent messages from the FFD example using the |I2C| slave interface, the |I2C| master interface will be disabled after the DAC configuration is complete.

The |I2C| master and slave can be enabled or disabled by setting the ``appconfI2C_MASTER_ENABLED`` and ``appconfI2C_SLAVE_ENABLED`` configuration variables.

To send the intent ID via the |I2C| master interface when a command is detected, set the following variables:

- ``appconfINTENT_I2C_OUTPUT_ENABLED`` to 1.
- ``appconfI2C_MASTER_ENABLED`` to 1.
- ``appconfINTENT_I2C_OUTPUT_DEVICE_ADDR`` to the desired address used by the |I2C| slave device.
- ``appconfI2C_SLAVE_ENABLED`` to 0.
- ``appconfINTENT_I2C_MASTER_OUTPUT_ENABLED`` to 1.
- ``appconfINTENT_I2C_MASTER_DEVICE_ADDR`` to the desired address used by the |I2C| slave device.
- ``appconfINTENT_I2C_SLAVE_POLLED_ENABLED`` to 0, this will disable the |I2C| slave interface.

To configure the FFD example so that the host can poll for the intent via the |I2C| slave interface, set the following variables:

- ``appconfI2C_SLAVE_ENABLED`` to 1.
- ``appconfINTENT_I2C_SLAVE_POLLED_ENABLED`` to 1.
- ``appconfI2C_SLAVE_DEVICE_ADDR`` to the desired address used by the |I2C| master device.
- ``appconfINTENT_I2C_REG_ADDRESS`` to the desired register read by the |I2C| master device.
- ``appconfINTENT_I2C_OUTPUT_ENABLED`` to 0, this will disable the |I2C| master interface.
- ``appconfINTENT_I2C_MASTER_OUTPUT_ENABLED`` to 0, this will disable the |I2C| master interface after initialization.

The handling of the |I2C| slave registers is done in the ``examples\ffd\src\i2c_reg_handling.c`` file. The variable ``appconfINTENT_I2C_REG_ADDRESS`` is used in the callback function ``read_device_reg()``.

Configuring the |I2S| interface
-------------------------------

The |I2S| interface is used to receive the audio data from the host. The |I2S| interface can be configured as either a master or a slave.
The |I2S| interface is used to play the audio command response to the DAC, and/or to receive the audio samples from the host. The |I2S| interface can be configured as either a master or a slave.
To configure the |I2S| interface, set the following variables:

- ``appconfUSE_I2S_INPUT`` to 1.
- ``appconfI2S_ENABLED`` to 1.
- ``appconfI2S_MODE`` to the desired mode, either ``appconfI2S_MODE_MASTER`` or ``appconfI2S_MODE_SLAVE``.
- ``appconfI2S_AUDIO_SAMPLE_RATE`` to the desired sample rate, either 16000 or 48000.
- ``appconfRECOVER_MCLK_I2S_APP_PLL`` to 1 if an external MCLK is not available, otherwise set it to 0.
- ``appconfAUDIO_PLAYBACK_ENABLED`` to 1, if the intent audio is to be played back.
- ``appconfUSE_I2S_INPUT`` to 1, if the |I2S| audio source is to be used instead of the microphone array audio source.
7 changes: 7 additions & 0 deletions doc/programming_guide/ffd/overview.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ The examples using the microphone array as the audio source include an audio pip
#. Noise Suppressor (NS)
#. Adaptive Gain Control (AGC)

The FFD examples provide several options to inform the host of a possible intent detected by the intent engine. The device can notify the host by:

- sending the intent ID over a UART interface upon detecting the intent
- sending the intent ID over an |I2C| master interface upon detecting the intent
- allowing the host to poll the last detected intent ID over the |I2C| slave interface
- listening to an audio message over an |I2S| interface

When a wakeword phrase is detected followed by a command phrase, the application will output an audio response and a discrete message over |I2C| and UART.

Sensory's THF and Cyberon's DSpotter™ libraries ship with an expiring development license. The Sensory one will suspend recognition after 11.4 hours or 107 recognition events, and the Cyberon one will suspend recognition after 100 recognition events. After the maximum number of recognitions is reached, a device reset is required to resume normal operation. To perform a reset, either power cycle the device or press the SW2 button.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ If options are changed, the application firmware must be rebuilt.
* - appconfINTENT_UART_OUTPUT_ENABLED
- Enables/disables the UART intent message
- 1
* - appconfINTENT_I2C_OUTPUT_ENABLED
- Enables/disables the |I2C| intent message
* - appconfINTENT_I2C_MASTER_OUTPUT_ENABLED
- Enables/disables sending the intent message over |I2C| master
- 1
* - appconfUART_BAUD_RATE
- Sets the baud rate for the UART tx intent interface
- 9600
* - appconfINTENT_I2C_OUTPUT_DEVICE_ADDR
* - appconfINTENT_I2C_MASTER_DEVICE_ADDR
- Sets the |I2C| slave address to transmit the intent to
- 0x01
* - appconfINTENT_TRANSPORT_DELAY_MS
Expand Down
14 changes: 7 additions & 7 deletions examples/ffd/bsp_config/XK_VOICE_L71/platform/platform_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

static void mclk_init(chanend_t other_tile_c)
{
#if ON_TILE(1)
#if ON_TILE(I2S_TILE_NO)
app_pll_init();
#endif
}
Expand Down Expand Up @@ -54,7 +54,7 @@ static void gpio_init(void)
intertile_ctx);
#endif

#if ON_TILE(1)
#if ON_TILE(I2S_TILE_NO)
rtos_gpio_init(gpio_ctx_t1);

rtos_gpio_rpc_client_init(
Expand All @@ -72,15 +72,15 @@ static void gpio_init(void)

static void i2c_init(void)
{
#if appconfI2C_SLAVE_ENABLED && ON_TILE(I2C_CTRL_TILE_NO)
#if appconfINTENT_I2C_SLAVE_POLLED_ENABLED && ON_TILE(I2C_TILE_NO)
rtos_i2c_slave_init(i2c_slave_ctx,
(1 << appconfI2C_IO_CORE),
PORT_I2C_SCL,
PORT_I2C_SDA,
appconfI2C_SLAVE_DEVICE_ADDR);
#endif

#if appconfI2C_MASTER_ENABLED
#if appconfI2C_MASTER_DAC_ENABLED || appconfINTENT_I2C_MASTER_OUTPUT_ENABLED
static rtos_driver_rpc_t i2c_rpc_config;

#if ON_TILE(I2C_TILE_NO)
Expand All @@ -106,7 +106,7 @@ static void i2c_init(void)
#endif
}

#if ON_TILE(1) && appconfRECOVER_MCLK_I2S_APP_PLL
#if ON_TILE(I2S_TILE_NO) && appconfRECOVER_MCLK_I2S_APP_PLL
static int *p_lock_status = NULL;
/// @brief Save the pointer to the pll lock_status variable
static void set_pll_lock_status_ptr(int* p)
Expand All @@ -117,7 +117,7 @@ static void set_pll_lock_status_ptr(int* p)

static void platform_sw_pll_init(void)
{
#if ON_TILE(1) && appconfRECOVER_MCLK_I2S_APP_PLL
#if ON_TILE(I2S_TILE_NO) && appconfRECOVER_MCLK_I2S_APP_PLL

port_t p_bclk = PORT_I2S_BCLK;
port_t p_mclk = PORT_MCLK;
Expand Down Expand Up @@ -176,7 +176,7 @@ static void mics_init(void)

static void i2s_init(void)
{
#if appconfUSE_I2S_INPUT
#if appconfI2S_ENABLED
#if appconfI2S_MODE == appconfI2S_MODE_MASTER
static rtos_driver_rpc_t i2s_rpc_config;
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ static void flash_start(void)

static void i2c_master_start(void)
{
#if appconfI2C_ENABLED && appconfI2C_MODE == appconfI2C_MODE_MASTER
#if appconfI2C_MASTER_DAC_ENABLED || appconfINTENT_I2C_MASTER_OUTPUT_ENABLED
rtos_i2c_master_rpc_config(i2c_master_ctx, appconfI2C_MASTER_RPC_PORT, appconfI2C_MASTER_RPC_PRIORITY);

#if ON_TILE(I2C_TILE_NO)
Expand All @@ -53,7 +53,7 @@ static void i2c_master_start(void)

static void i2c_slave_start(void)
{
#if appconfI2C_SLAVE_ENABLED && ON_TILE(I2C_CTRL_TILE_NO)
#if appconfINTENT_I2C_SLAVE_POLLED_ENABLED && ON_TILE(I2C_TILE_NO)
rtos_i2c_slave_start(i2c_slave_ctx,
&last_asr_result,
(rtos_i2c_slave_start_cb_t) NULL,
Expand All @@ -69,7 +69,7 @@ static void i2c_slave_start(void)

static void audio_codec_start(void)
{
#if appconfUSE_I2S_INPUT && appconfI2C_MASTER_ENABLED
#if appconfI2S_ENABLED && appconfI2C_MASTER_DAC_ENABLED
int ret = 0;
#if ON_TILE(I2C_TILE_NO)
if (dac3101_init(appconfI2S_AUDIO_SAMPLE_RATE) != 0) {
Expand All @@ -95,7 +95,7 @@ static void mics_start(void)

static void i2s_start(void)
{
#if appconfUSE_I2S_INPUT
#if appconfI2S_ENABLED
#if appconfI2S_MODE == appconfI2S_MODE_MASTER
rtos_i2s_rpc_config(i2s_ctx, appconfI2S_RPC_PORT, appconfI2S_RPC_PRIORITY);
#endif
Expand Down
2 changes: 2 additions & 0 deletions examples/ffd/ffd_cyberon.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ set(APP_COMMON_LINK_LIBRARIES
sln_voice::app::asr::intent_engine
sln_voice::app::asr::intent_handler
sln_voice::app::ffd::xk_voice_l71
lib_src
lib_sw_pll
)

#**********************
Expand Down
6 changes: 3 additions & 3 deletions examples/ffd/ffd_i2s_input_cyberon.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,9 @@ set(APP_COMPILE_DEFINITIONS
appconfAUDIO_PLAYBACK_ENABLED=1
appconfI2S_MODE=appconfI2S_MODE_SLAVE
appconfI2S_AUDIO_SAMPLE_RATE=48000
appconfI2C_SLAVE_ENABLED=1
appconfI2C_MASTER_ENABLED=0
appconfINTENT_I2C_OUTPUT_ENABLED=0
appconfINTENT_I2C_SLAVE_POLLED_ENABLED=1
appconfINTENT_I2C_MASTER_OUTPUT_ENABLED=0
appconfI2C_MASTER_DAC_ENABLED=0
appconfRECOVER_MCLK_I2S_APP_PLL=1
appconfINTENT_UART_DEBUG_INFO_ENABLED=1
appconfAUDIO_PIPELINE_SKIP_IC_AND_VNR=1
Expand Down
2 changes: 2 additions & 0 deletions examples/ffd/ffd_sensory.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ set(APP_COMMON_LINK_LIBRARIES
sln_voice::app::asr::intent_engine
sln_voice::app::asr::intent_handler
sln_voice::app::ffd::xk_voice_l71
lib_src
lib_sw_pll
)

#**********************
Expand Down
36 changes: 22 additions & 14 deletions examples/ffd/src/app_conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,12 @@
#define appconfINTENT_TRANSPORT_DELAY_MS 50
#endif

#ifndef appconfINTENT_I2C_OUTPUT_ENABLED
#define appconfINTENT_I2C_OUTPUT_ENABLED 1
#ifndef appconfINTENT_I2C_MASTER_OUTPUT_ENABLED
#define appconfINTENT_I2C_MASTER_OUTPUT_ENABLED 1
#endif

#ifndef appconfINTENT_I2C_OUTPUT_DEVICE_ADDR
#define appconfINTENT_I2C_OUTPUT_DEVICE_ADDR 0x01
#ifndef appconfINTENT_I2C_MASTER_DEVICE_ADDR
#define appconfINTENT_I2C_MASTER_DEVICE_ADDR 0x01
#endif

/* @brief Address for wakeword register to be read over I2C slave*/
Expand Down Expand Up @@ -104,28 +104,36 @@
#define appconfI2S_MODE_SLAVE 1
#endif

#ifndef appconfI2S_ENABLED
#define appconfI2S_ENABLED 1
#endif

#ifndef appconfI2S_MODE
#define appconfI2S_MODE appconfI2S_MODE_MASTER
#endif

#ifndef appconfI2C_MASTER_ENABLED
#define appconfI2C_MASTER_ENABLED 1
#ifndef appconfUSE_I2S_INPUT
#define appconfUSE_I2S_INPUT 0
#endif

#ifndef appconfI2C_SLAVE_ENABLED
#define appconfI2C_SLAVE_ENABLED 0
#if appconfUSE_I2S_INPUT && !appconfI2S_ENABLED
#error "I2S must be enabled if receiving the audio over I2S"
#endif

#ifndef appconfI2C_SLAVE_DEVICE_ADDR
#define appconfI2C_SLAVE_DEVICE_ADDR 0x42
#ifndef appconfINTENT_I2C_MASTER_OUTPUT_ENABLED
#define appconfINTENT_I2C_MASTER_OUTPUT_ENABLED 1
#endif

#if appconfINTENT_I2C_OUTPUT_ENABLED && !appconfI2C_MASTER_ENABLED
#error "I2C master must be enabled for intent I2C output"
#ifndef appconfI2C_MASTER_DAC_ENABLED
#define appconfI2C_MASTER_DAC_ENABLED 1
#endif

#ifndef appconfI2C_SLAVE_DEVICE_ADDR
#define appconfI2C_SLAVE_DEVICE_ADDR 0x42
#endif

#if appconfI2C_SLAVE_ENABLED && appconfINTENT_I2C_OUTPUT_ENABLED
#error "I2C slave cannot be enabled when intent I2C output over I2C master is enabled"
#if appconfINTENT_I2C_MASTER_OUTPUT_ENABLED && appconfINTENT_I2C_SLAVE_POLLED_ENABLED
#error "The intent message cannot be sent over I2C master and polled via I2C slave simultaneously"
#endif

#ifndef appconfAUDIO_PIPELINE_SKIP_IC_AND_VNR
Expand Down
4 changes: 2 additions & 2 deletions examples/ffd/src/i2c_reg_handling.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ size_t read_device_reg(rtos_i2c_slave_t *ctx,
asr_result_t *last_asr_result,
uint8_t **data)
{
#if appconfI2C_SLAVE_ENABLED==1
#if appconfINTENT_I2C_SLAVE_POLLED_ENABLED==1
uint8_t * data_p = *data;
uint8_t reg_addr = data_p[0];
uint8_t reg_value = 0xFF;
Expand All @@ -32,7 +32,7 @@ void write_device_reg(rtos_i2c_slave_t *ctx,
uint8_t *data,
size_t len)
{
#if appconfI2C_SLAVE_ENABLED==1
#if appconfINTENT_I2C_SLAVE_POLLED_ENABLED==1
// If the length is lower than WRITE_REQUEST_MIN_LEN, it is a read request
if (len > WRITE_REQUEST_MIN_LEN) {
rtos_printf("Write to register 0x%02X value 0x%02X (len %d)\n", data[0], data[1], len);
Expand Down
13 changes: 7 additions & 6 deletions examples/ffd/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@

/* Library headers */
#include "rtos_printf.h"
#if appconfUSE_I2S_INPUT
#include "src.h"
#endif

/* App headers */
#include "app_conf.h"
Expand All @@ -31,6 +28,10 @@
#include "gpio_ctrl/leds.h"
#include "intent_handler/intent_handler.h"

#if appconfI2S_ENABLED
#include "src.h"
#endif

#if appconfRECOVER_MCLK_I2S_APP_PLL
/* Config headers for sw_pll */
#include "sw_pll.h"
Expand All @@ -40,7 +41,7 @@
#define MEM_ANALYSIS_ENABLED 0
#endif

#if appconfUSE_I2S_INPUT && (appconfI2S_MODE == appconfI2S_MODE_SLAVE)
#if appconfI2S_ENABLED && (appconfI2S_MODE == appconfI2S_MODE_SLAVE)
void i2s_slave_intertile()
{
int32_t tmp[appconfAUDIO_PIPELINE_FRAME_ADVANCE][appconfAUDIO_PIPELINE_CHANNELS];
Expand Down Expand Up @@ -146,7 +147,7 @@ int audio_pipeline_output(void *output_app_data,

return AUDIO_PIPELINE_FREE_FRAME;
}
#if appconfUSE_I2S_INPUT
#if appconfI2S_ENABLED
RTOS_I2S_APP_SEND_FILTER_CALLBACK_ATTR
size_t i2s_send_upsample_cb(rtos_i2s_t *ctx, void *app_data, int32_t *i2s_frame, size_t i2s_frame_size, int32_t *send_buf, size_t samples_available)
{
Expand Down Expand Up @@ -252,7 +253,7 @@ void startup_task(void *arg)

platform_start();

#if ON_TILE(1) && appconfUSE_I2S_INPUT && (appconfI2S_MODE == appconfI2S_MODE_SLAVE)
#if ON_TILE(I2S_TILE_NO) && appconfI2S_ENABLED && (appconfI2S_MODE == appconfI2S_MODE_SLAVE)

xTaskCreate((TaskFunction_t) i2s_slave_intertile,
"i2s_slave_intertile",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

static void mclk_init(chanend_t other_tile_c)
{
#if ON_TILE(1) && !appconfEXTERNAL_MCLK
#if ON_TILE(I2S_TILE_NO) && !appconfEXTERNAL_MCLK
app_pll_init();
#endif
#if appconfUSB_ENABLED && ON_TILE(USB_TILE_NO)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ extern device_control_t *device_control_i2c_ctx;

static void mclk_init(chanend_t other_tile_c)
{
#if !appconfEXTERNAL_MCLK && ON_TILE(1)
#if !appconfEXTERNAL_MCLK && ON_TILE(I2S_TILE_NO)
app_pll_init();
#endif
#if appconfUSB_ENABLED && ON_TILE(USB_TILE_NO)
Expand Down Expand Up @@ -154,7 +154,7 @@ static void spi_init(void)
#endif
}

#if ON_TILE(1) && appconfRECOVER_MCLK_I2S_APP_PLL
#if ON_TILE(I2S_TILE_NO) && appconfRECOVER_MCLK_I2S_APP_PLL
static int *p_lock_status = NULL;
/// @brief Save the pointer to the pll lock_status variable
static void set_pll_lock_status_ptr(int* p)
Expand All @@ -165,7 +165,7 @@ static void set_pll_lock_status_ptr(int* p)

static void platform_sw_pll_init(void)
{
#if ON_TILE(1) && appconfRECOVER_MCLK_I2S_APP_PLL
#if ON_TILE(I2S_TILE_NO) && appconfRECOVER_MCLK_I2S_APP_PLL

port_t p_bclk = PORT_I2S_BCLK;
port_t p_mclk = PORT_MCLK;
Expand Down
Loading
Loading