This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1352P7:CC1352P7

Guru**** 1184750 points
Other Parts Discussed in Thread: SYSBIOS
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1265248/cc1352p7-cc1352p7

器件型号:CC1352P7
Thread 中讨论的其他器件:CC2650、SYSBIOS、

尊敬的先生:

我们目前正在参与一个通过 I2S 实现音频数据流的项目。 令人遗憾的是,尽管我们作出了努力,但我们在向驾驶员提供必要数据方面仍然遇到困难。 由于音频输出缺乏预期的平滑度、这一问题很明显。 请参见处理缓冲区填充的主题。  

void initAudioBuffers()
{
    // Initialize the write-transactions
    I2S_Transaction_init(&i2sWrite1);
    I2S_Transaction_init(&i2sWrite2);
    I2S_Transaction_init(&i2sWrite3);
    I2S_Transaction_init(&i2sWrite4);
    i2sWrite1.bufPtr = writeBuf1;
    i2sWrite2.bufPtr = writeBuf2;
    i2sWrite3.bufPtr = writeBuf3;
    i2sWrite4.bufPtr = writeBuf4;
    i2sWrite1.bufSize = sizeof(writeBuf1);
    i2sWrite2.bufSize = sizeof(writeBuf2);
    i2sWrite3.bufSize = sizeof(writeBuf3);
    i2sWrite4.bufSize = sizeof(writeBuf4);
    List_clearList(&i2sWriteList);
    List_put(&i2sWriteList, (List_Elem *)&i2sWrite1);
    List_put(&i2sWriteList, (List_Elem *)&i2sWrite2);
    List_put(&i2sWriteList, (List_Elem *)&i2sWrite3);
    List_put(&i2sWriteList, (List_Elem *)&i2sWrite4);
    preloadAudioBuffers();
}

void preloadAudioBuffers()
{

    generate_stereo_tone(writeBuf1, SAMPLE_RATE, 1, TONE_A4_FREQUENCY, true, 500);
    generate_stereo_tone(writeBuf2, SAMPLE_RATE, 1, TONE_A4_FREQUENCY, false, 500);
    generate_stereo_tone(writeBuf3, SAMPLE_RATE, 1, TONE_A4_FREQUENCY, false, 500);
    generate_stereo_tone(writeBuf4, SAMPLE_RATE, 1, TONE_A4_FREQUENCY, false, 500);
}

uint32_t loadAudioChunk(uint8 bufferSet)
{
    uint32_t count = 0;
    if (bufferSet == 1)
    {
        count = generate_stereo_tone(writeBuf1, SAMPLE_RATE, 1, TONE_A4_FREQUENCY, false, 500);
        count = generate_stereo_tone(writeBuf2, SAMPLE_RATE, 1, TONE_A4_FREQUENCY, false, 500);
    }
    else if (bufferSet == 2)
    {
        count = generate_stereo_tone(writeBuf3, SAMPLE_RATE, 1, TONE_A4_FREQUENCY, false, 500);
        count = generate_stereo_tone(writeBuf4, SAMPLE_RATE, 1, TONE_A4_FREQUENCY, false, 500);
    }
    return count;
}



void *myTreatmentThread(void *arg0)
{

    int k;
    I2S_Transaction *lastAchievedTransaction;
    static bool seqBuf = 0;

    uint32_t events;
    printf("Transaction1 address = 0x%x  writeBuf1 address = 0x%x\n", &i2sWrite1, &writeBuf1);
    printf("Transaction2 address = 0x%x  writeBuf2 address = 0x%x\n", &i2sWrite2, &writeBuf2);
    printf("Transaction3 address = 0x%x  writeBuf3 address = 0x%x\n", &i2sWrite3, &writeBuf3);
    printf("Transaction4 address = 0x%x  writeBuf4 address = 0x%x\n\n\n", &i2sWrite4, &writeBuf4);
    initAudioBuffers();
    I2S_Setup();
    I2S_Transaction_init(&i2sTransaction1);
    uint32_t bytesRead = 0;
    uint32_t startTicks, endTicks;
    uint32_t elapsedTimeTicks;
    uint32_t bytesSent=0;
    while (1)
    {


        if (playStop == true)
        {

            startTicks = Clock_getTicks();
            if (writeFinished == true)
            {
                // I2S_stopWrite(i2sHandle);
                seqBuf = !seqBuf;
                I2S_setWriteQueueHead(i2sHandle, &i2sWrite1);
                if (seqBuf == 0)
                {
                    List_put(&i2sWriteList, (List_Elem *)&i2sWrite1);
                    List_put(&i2sWriteList, (List_Elem *)&i2sWrite2);
                    List_tail(&i2sWriteList)->next = List_head(&i2sWriteList); // Write buffers are queued in a ring-list
                    List_head(&i2sWriteList)->prev = List_tail(&i2sWriteList);
                }
                else
                {
                    List_put(&i2sWriteList, (List_Elem *)&i2sWrite3);
                    List_put(&i2sWriteList, (List_Elem *)&i2sWrite4);
                    List_tail(&i2sWriteList)->next = List_head(&i2sWriteList); // Write buffers are queued in a ring-list
                    List_head(&i2sWriteList)->prev = List_tail(&i2sWriteList);
                    //  I2S_setWriteQueueHead(i2sHandle, &i2sWrite3);
                }

                I2S_startWrite(i2sHandle);


                writeFinished = false;
            }

            if (seqBuf == 0)
            {
                bytesSent=loadAudioChunk(2);
                if (bytesSent >= SAMPLE_RATE-500)
                {
                    Task_sleep(CLOCK_MS(50));
                    I2S_stopWrite(i2sHandle);
                    // I2S_stopClocks(i2sHandle);
                    generate_stereo_tone(NULL, SAMPLE_RATE, 1, TONE_A4_FREQUENCY, true, 500);
                    StopSound();
                    bytesSent=0;
                    endTicks = Clock_getTicks();
                                elapsedTimeTicks = endTicks - startTicks;

                }
            }
            else
            {
                bytesSent=loadAudioChunk(1);
                if (bytesSent >= SAMPLE_RATE-500)
                {
                    Task_sleep(CLOCK_MS(50));
                    I2S_stopWrite(i2sHandle);
                    // I2S_stopClocks(i2sHandle);
                    generate_stereo_tone(NULL, SAMPLE_RATE, 1, TONE_A4_FREQUENCY, true, 500);
                    StopSound();
                    bytesSent=0;
                    endTicks = Clock_getTicks();
                                elapsedTimeTicks = endTicks - startTicks;
                }
            }

        }
        else
        {
            I2S_stopWrite(i2sHandle);

            writeFinished = false;
            bytesSent=0;
            Task_sleep(CLOCK_MS(50));
        }
        Task_sleep(CLOCK_MS(50));
    }
}

尽管采用了多个缓冲区并采用了交替填充方法、但我们无法提高数据吞吐率。 我们尝试使用 ITM 来更深入地研究该问题已遇到阻碍、因为将其集成到我们的项目中会导致以下错误:

"C:/ti/ti_cgt_tiarmclang_1.3.0.LTS/bin/tiarmclang.exe" @"C:/Users/NadeemJamal/workspace_examples/Novax_Touchless_APS_CC1352P7/TOOLS/defines/dmm_154collector_remote_display_app.opts" @"C:/Users/NadeemJamal/workspace_examples/Novax_Touchless_APS_CC1352P7/TOOLS/build_components.opt" @"C:/Users/NadeemJamal/workspace_examples/Novax_Touchless_APS_CC1352P7/TOOLS/factory_config.opt" @"C:/Users/NadeemJamal/workspace_examples/Novax_Touchless_APS_CC1352P7/Release/syscfg/ti_ble_app_config.opt" @"C:/Users/NadeemJamal/workspace_examples/Novax_Touchless_APS_CC1352P7/Release/syscfg/ti_build_config.opt" -march=thumbv7em -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mlittle-endian -mthumb -O0 -DxFEATURE_ENHANCED_ACK -DCOMBO_MAC -DxUSE_ITM_DBG -DTIMAC_ROM_IMAGE_BUILD -DFLASH_ROM_BUILD -DCC13XX -DCC13X2 -DCC13X2R1_LAUNCHXL -DDeviceFamily_CC13X2X7 -DSUPPORT_PHY_CUSTOM -DSUPPORT_PHY_50KBPS2GFSK -DSUPPORT_PHY_5KBPSSLLR -DSUPPORT_PHY_200KBPS2GFSK -DNVOCMP_NVPAGES=2 -DNVSSPI -DDMM_OAD -DSECURITY -DTIRTOS7_SUPPORT -DHEAPMGR_CONFIG=0x80 -DHEAPMGR_SIZE=0x00 -gdwarf-3 -fshort-enums -munaligned-access -funsigned-char -fcommon -ffunction-sections -fdata-sections -march=armv7e-m -Wl,-m"Novax_Touchless_APS_CC1352P7.map" -Wl,-i"C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/source" -Wl,-i"C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/kernel/tirtos7/packages" -Wl,-i"C:/Users/NadeemJamal/workspace_examples/Novax_Touchless_APS_CC1352P7/Release/syscfg" -Wl,-i"C:/ti/ti_cgt_tiarmclang_1.3.0.LTS/lib" -Wl,--reread_libs -Wl,--define=FLASH_ROM_BUILD=2 -Wl,--define=OAD_IMG_E=1 -Wl,--define=SECURITY=1 -Wl,--diag_wrap=off -Wl,--display_error_number -Wl,--warn_sections -Wl,--xml_link_info="Novax_Touchless_APS_CC1352P7_linkInfo.xml" -Wl,--rom_model -Wl,--unused_section_elimination=on -o "Novax_Touchless_APS_CC1352P7.out" "./syscfg/ti_ble_config.o" "./syscfg/ti_dmm_application_policy.o" "./syscfg/ti_radio_config.o" "./syscfg/ti_drivers_config.o" "./syscfg/ti_log_config.o" "./syscfg/ti_sysbios_config.o" "./OAD/bim_util.o" "./OAD/crc32.o" "./OAD/flash_interface_ext_rtos_NVS.o" "./OAD/mark_switch_factory_img.o" "./OAD/oad.o" "./OAD/oad_image_header_app.o" "./OAD/oad_util.o" "./application/audio/audio_support.o" "./application/audio/tas2560.o" "./application/ble_remote_display/remote_display.o" "./application/ble_remote_display/startup/ble_user_config_stack.o" "./application/ble_remote_display/startup/osal_icall_ble.o" "./application/ble_remote_display/startup/rom_init.o" "./application/ble_remote_display/util/util.o" "./application/cli/console.o" "./application/cli/embedded_cli.o" "./application/cli/xmodem_server.o" "./application/collector/aps_specific_cfg.o" "./application/collector/aps_specific_protocol.o" "./application/collector/collector.o" "./application/collector/csf.o" "./application/collector/link_controller/cllc.o" "./application/collector/util/mac_util.o" "./application/collector/util/util_timer.o" "./application/crc16.o" "./application/file_transfer.o" "./application/main.o" "./application/statistics.o" "./application/task_log.o" "./application/unit_test.o" "./application/cui/cui.o" "./dmm/application_policy/dmm_priority_ble_154collector.o" "./drivers/flash.o" "./drivers/misc.o" "./drivers/tas2560_i2c_driver.o" "./drivers/vibration.o" "./drivers/nv/crc.o" "./drivers/nv/nvocmp.o" "./software_stacks/ble_stack/icall/icall.o" "./software_stacks/ble_stack/icall/icall_cc2650.o" "./software_stacks/ble_stack/icall/icall_user_config.o" "./software_stacks/ble_stack/icall_ble/icall_api_lite.o" "./software_stacks/ble_stack/icall_ble/icall_hci_tl.o" "./software_stacks/ble_stack/icall_ble/rd_ble_user_config.o" "./software_stacks/ble_stack/profiles/devinfoservice.o" "./software_stacks/ble_stack/profiles/gattservapp_util.o" "./software_stacks/ble_stack/profiles/network_device_gatt_profile.o" "./software_stacks/ble_stack/profiles/provisioning_gatt_profile.o" "./software_stacks/ble_stack/profiles/remote_display_gatt_profile.o" "./software_stacks/ble_stack/rosc/rcosc_calibration.o" "./software_stacks/ti15_4stack/mac/hal/target/itm.o" "./software_stacks/ti15_4stack/mac/high_level/mac_cfg.o" "./software_stacks/ti15_4stack/mac/low_level/mac_activity.o" "./software_stacks/ti15_4stack/mac/low_level/mac_settings.o" "./software_stacks/ti15_4stack/mac/services/saddr.o" "./software_stacks/ti15_4stack/osal_port/osal_port.o" "./software_stacks/ti15_4stack/osal_port/osal_port_timers.o" "./software_stacks/ti15_4stack/radio_configuration/mac_user_config.o" "./software_stacks/ti15_4stack/stack_user_api/api_mac.o" "./software_stacks/ti15_4stack/stack_user_api/macTask.o" -Wl,-l"C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/source/ti/ti154stack/lib/rom/ticlang/timac_rom_PG2_0_rom_api_linker.cmd" -Wl,-l"C:/Users/NadeemJamal/workspace_examples/Novax_Touchless_APS_CC1352P7/Release/syscfg/ti_utils_build_linker.cmd.genlibs" -Wl,-l"C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/source/ti/dmm/apps/common/tirtos/ccs/cc13x2x7_cc26x2x7_app_tirtos7_oad.cmd" -Wl,-lti_utils_build_linker.cmd.genlibs -Wl,-l"C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/source/ti/devices/cc13x2x7_cc26x2x7/driverlib/bin/ticlang/driverlib.lib" -Wl,-llibc.a

makefile:256: recipe for target 'Novax_Touchless_APS_CC1352P7.out' failed
error #10056: symbol "ITM_enableExceptionTrace" redefined: first defined in "./software_stacks/ti15_4stack/mac/hal/target/itm.o"; redefined in "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/source/ti/drivers/lib/ticlang/m4f/drivers_cc13x2x7.a<ITM.c.obj>"
error #10056: symbol "ITM_enablePCSampling" redefined: first defined in "./software_stacks/ti15_4stack/mac/hal/target/itm.o"; redefined in "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/source/ti/drivers/lib/ticlang/m4f/drivers_cc13x2x7.a<ITM.c.obj>"
error #10056: symbol "ITM_enableSyncPackets" redefined: first defined in "./software_stacks/ti15_4stack/mac/hal/target/itm.o"; redefined in "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/source/ti/drivers/lib/ticlang/m4f/drivers_cc13x2x7.a<ITM.c.obj>"
error #10010: errors encountered during linking; "Novax_Touchless_APS_CC1352P7.out" not built
tiarmclang: error: tiarmlnk command failed with exit code 1 (use -v to see invocation)
gmake[1]: *** [Novax_Touchless_APS_CC1352P7.out] Error 1
makefile:252: recipe for target 'all' failed

我们正在积极寻求解决此问题的方案、非常感谢您为应对这些挑战而提供的任何见解或建议。 对于如何实现此问题,您有什么建议?调试此问题的最佳方法是什么?

感谢您的关注。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Nadeem:

    您的应用中是否使用15.4堆栈? 似乎该库已链接、但如果应用程序不需要它、也许您可以将其删除。  

    此致、

    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sid:

    感谢您的答复。 是的、我们确实需要适用于低于1GHz 的15.4堆栈。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Nadeem:

    请确保您尚未添加两次 ITM 驱动程序源代码。 软件栈文件夹上似乎有一个 half 文件夹。 检查是否有 ITM 驱动程序源。 如果确实存在该项目、请删除该文件并再次尝试编译该项目。

    此致、

    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的提示、虽然它已成功编译、但现在显示当我尝试运行任何 System Analyzer 和 RTOS Analyzer 工具时、它无法检测 UIA。 是否有建议?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Nadeem:

    请您能在电路板上测试 SDK 中的 itmwrite 示例吗。 这会显示使用 ITM 驱动程序所需的所有设置。  

    https://dev.ti.com/tirex/explore/node?node=A__AIGe5I0bn3wJD-Fax3ISiw__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__LATEST

    此致、

    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Siddanth:

    我想对与我分享这一联系表示感谢。 我有机会测试该项目、但不幸的是、它似乎没有解决问题。 系统分析器工具和 RTOS 分析器仍在提示输入 UIA 设置文件、并且仍未建立连接。

    项目运行良好、但是我仍然没有从我需要的特定工具进入任何数据。 你们是否有任何关于如何使用 ITM 和系统分析器的文档  

    感谢您的帮助。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Nadeem:

    原因实际上在于后期响应。 如果您正在讨论 Code Composer Studio 中的 RTOS 和线程分析器工具、TIRTOS7不支持该工具、我们已停止对这些工具的支持。  

    itmwrite 示例显示了 ITM 驱动程序用法。 如果要使用 tilogger、请参阅 itmwrite 示例。 请浏览上面链接的示例的自述文件以获取日志。  

    此致、

    SID