久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > AURIX? TC4x CDSP信號(hào)處理器用戶自定義軟件開(kāi)發(fā)和集成詳解

AURIX? TC4x CDSP信號(hào)處理器用戶自定義軟件開(kāi)發(fā)和集成詳解

作者: 時(shí)間:2026-04-22 來(lái)源:英飛凌 收藏

引言

? TC4x CDSP(Converter Digital Signal Processor)是? TC4x 的信號(hào)處理器模塊,位于ADC模塊中,主要用于ADC信號(hào)的后處理。

CDSP 可以運(yùn)行用戶自定義的算法和功能,高效處理ADC 信號(hào),并把處理結(jié)果給到TriCore?。

本文介紹CDSP 的用戶自定義軟件開(kāi)發(fā)環(huán)境、CDSP 軟件集成到TC499PP TriCore?工程。

CDSP 結(jié)構(gòu)和運(yùn)行機(jī)制

CDSP 包括一個(gè) Synopsys DesignWare? ARC? EM5D(ARC) DSP 內(nèi)核,3 KB 指令存儲(chǔ)器 (ICCM)、3 KB 數(shù)據(jù)存儲(chǔ)器 (DCCM) 。不同型號(hào)? TC4x 芯片有不同數(shù)量的CDSP,本文用到的TC499PP 有12個(gè)CDSP。

圖片

Figure 1. CDSP architecture

CDSP 以 f_ADC頻率運(yùn)行(160MHz), CDSP 作為一個(gè)外設(shè),由TriCore?控制其復(fù)位、運(yùn)行等。

圖片

Figure 2. CDSP input and output interface

CDSP 可以處理來(lái)自DSADC (Δ-Σ ADC)、EXMOD (外部調(diào)制器)、TMADC (分時(shí)復(fù)用 ADC)、CARMAG (載波調(diào)制器) 或GP (通用) 寄存器的信號(hào)。

CDSP 處理完成,產(chǎn)生的結(jié)果存放在結(jié)果寄存器RES0,RES1和RES2或DCCM,并且RES0 有一個(gè)深度為4的FIFO 用于結(jié)果緩存。

CDSP 的基本的運(yùn)行機(jī)制為:外部的觸發(fā)信號(hào)(比如輸入的寄存器結(jié)果值更新)觸發(fā)喚醒CDSP 工作,CDSP 計(jì)算完成,產(chǎn)生CDSP 結(jié)果,CDSP 調(diào)用一條睡眠指令進(jìn)入睡眠。由于有CDSP 結(jié)果產(chǎn)生,可以將其配置為T(mén)riCore? 中斷,則可以實(shí)現(xiàn)TriCore?拿到CDSP 結(jié)果值進(jìn)行后續(xù)運(yùn)算。

CDSP休眠和喚醒

一般情況下,CDSP 啟動(dòng)運(yùn)行后 ,CDSP 內(nèi)核會(huì)交替處于休眠和喚醒狀態(tài),以處理輸入采樣。


在配置好輸入信號(hào)源后(每次只能配置一個(gè)輸入信號(hào)用于喚醒),當(dāng)CDSP 內(nèi)核接收到新的輸入采樣時(shí),就被喚醒并轉(zhuǎn)換到喚醒狀態(tài),以處理新的輸入采樣,處理完成后,生成結(jié)果到結(jié)果寄存器,然后再進(jìn)入休眠。

圖片


Figure 3. CDSP sleep and wake-up

CDSP_DSPa_DSPCFG 寄存器中的 INPSEL 位選擇哪個(gè)輸入采樣到達(dá)會(huì)喚醒 CDSP 內(nèi)核。例如,如果將 DSADC0 配置為 CDSP 內(nèi)核的喚醒源,那么每個(gè)新的DSADC0 輸入采樣都將喚醒 CDSP 內(nèi)核。一旦 CDSP 內(nèi)核被喚醒,它就會(huì)開(kāi)始執(zhí)行加載的濾波器鏈 (FC),直到產(chǎn)生結(jié)果到結(jié)果寄存器,CDSP 內(nèi)核便進(jìn)入休眠狀態(tài)。

新輸入采樣的到來(lái)會(huì)再次喚醒 CDSP 內(nèi)核,并重復(fù)上述過(guò)程。如果在 CDSP 內(nèi)核仍在處理當(dāng)前樣本時(shí)(CDSP 內(nèi)核仍處于喚醒狀態(tài)),有新樣本到來(lái),則會(huì)產(chǎn)生喚醒錯(cuò)誤。所以,用戶使用時(shí)需要注意選擇的濾波器鏈對(duì)一個(gè)輸入樣本的處理時(shí)間必須小于兩個(gè)連續(xù)輸入樣本之間的時(shí)間間隔。

CDSP 啟動(dòng)和運(yùn)行

CDSP 的執(zhí)行主要分為三個(gè)階段:

1.啟動(dòng)

在啟動(dòng)階段,CDSP 內(nèi)核處于停止?fàn)顟B(tài),CDSP SW 代碼被復(fù)制到 ICCM 中,并將CDSP SW 的配置參數(shù)復(fù)制到DCCM 存儲(chǔ)器中。

2.運(yùn)行時(shí):初始化

一旦 CDSP 內(nèi)核從停止?fàn)顟B(tài)轉(zhuǎn)換到運(yùn)行狀態(tài),CDSP SW 就開(kāi)始執(zhí)行。CDSP SW 執(zhí)行的第一階段稱(chēng)為 "初始化",只執(zhí)行一次。

在這一階段,CDSP 濾波器鏈的所有配置參數(shù)都被初始化,CDSP SW 準(zhǔn)備好處理輸入采樣。在這一階段結(jié)束時(shí),CDSP 內(nèi)核轉(zhuǎn)入休眠狀態(tài),等待輸入采樣到達(dá)配置的輸入源。如果存在配置參數(shù)無(wú)效,CDSP 將進(jìn)入錯(cuò)誤狀態(tài)(死循環(huán))。

3.運(yùn)行時(shí):主循環(huán)

每當(dāng)有新的采樣到達(dá)配置的 CDSP 輸入源,就會(huì)觸發(fā)喚醒事件,將CDSP 內(nèi)核從休眠狀態(tài)喚醒。喚醒后,CDSP 內(nèi)核開(kāi)始執(zhí)行濾波器鏈,從而對(duì)輸入信號(hào)進(jìn)行處理。

下圖展示了一個(gè)通用 FC (Filter Chain)的 CDSP SW 主循環(huán)執(zhí)行序列,用于處理單個(gè)輸入采樣。


圖片

Figure 4. CDSP SW execution time

如上圖所示, CDSP 內(nèi)核在喚醒 (t_wu)、讀取輸入采樣 (t_Rd)、寫(xiě)入輸出采樣 (t_Wr) 和過(guò)渡到休眠狀態(tài) (t_t-slp) 的時(shí)間消耗都是固定數(shù)量的時(shí)鐘周期 ,與 CDSP SW 配置無(wú)關(guān),而濾波器塊執(zhí)行時(shí)間(t_FB)取決于濾波器鏈的配置。

例如,在中值濾波功能中,濾波執(zhí)行時(shí)間(t_FB)會(huì)隨著中值濾波器濾波器長(zhǎng)度的增加而增加。用戶需要確保一個(gè)輸入采樣的總執(zhí)行時(shí)間(t_TOTAL)不超過(guò) CDSP SW 兩個(gè)連續(xù)輸入采樣之間的持續(xù)時(shí)間,否則會(huì)進(jìn)入錯(cuò)誤狀態(tài)。

CDSP SW 對(duì)單個(gè)輸入采樣運(yùn)算的總執(zhí)行時(shí)間公式如下:

t_TOTAL = t_wu + t_Rd + t_FB + t_Wr + t_t-slp

CDSP 執(zhí)行完成濾波鏈路并將輸出結(jié)果寫(xiě)入輸出寄存器后,DSP 內(nèi)核將轉(zhuǎn)入睡眠模式,直到下一個(gè)喚醒信號(hào)到來(lái)。

CDSP 用戶自定義軟件開(kāi)發(fā)環(huán)境

CDSP 的自定義開(kāi)發(fā)需要基于一個(gè)Framwork 工程,這個(gè)Framwork 工程需要找申請(qǐng)?zhí)峁?/p>

這個(gè)CDSP Framework 工程基于ADS-Limited 開(kāi)發(fā),基本結(jié)構(gòu)如下:圖片

Figure 5. CDSP Framework project

這個(gè)CDSP Framework 包含了:

  • README.md,簡(jiǎn)單介紹了CDSP Framework 是做什么的(包含了image文件夾);

  • 用戶源文件和鏈接文件(包含了 include文件夾),用戶算法在main_proj.c 中編寫(xiě)和調(diào)度;

  • Tools 文件夾,里面是后處理工具,把hex 文件轉(zhuǎn)成ICCM.h和DCCM.h,用于后續(xù)集成;

  • Metaware 文件夾,編譯后生成的文件,其中ICCM.h 和DCCM.h 是要拷貝出來(lái)集成到TriCore?工程的文件;

    CDSP Framework 展開(kāi)如下:

    圖片

    Figure 6. CDSP Framework project details

    基于Framework工程開(kāi)發(fā)用戶軟件

    用戶軟件開(kāi)發(fā)和一般的C語(yǔ)言程序開(kāi)發(fā)相同,這里介紹一個(gè)求移動(dòng)平均值的算法案例。

    main_proj.c解析:

    圖片

    Figure 7. CDSP Framework main_proj.c main

    main函數(shù)是CDSP 的用戶程序入口,用戶程序在這里執(zhí)行。

    dsp_init_arc_core();

    初始化CDSP 內(nèi)核;

    pGenPurpReg0 = Cdsp_Mapping_GenPurpReg[cdspInterface.generalPurposeReg];

    初始化指針pGenPurpReg0,指向CDSP GP 寄存器,作為CDSP 的輸入信號(hào);

    pDsadcReg0 = Cdsp_Mapping_DsadcResReg[0];   

    初始化指針pDsadcReg0,指向DSADC0 通道的結(jié)果寄存器,作為CDSP 的輸入信號(hào);

    pCdspRes0 = Cdsp_Mapping_CdspResReg[0];

    pCdspRes1 = Cdsp_Mapping_CdspResReg[1];

    pCdspRes2 = Cdsp_Mapping_CdspResReg[2];

    初始化pCdspRes0,pCdspRes1,pCdspRes2 指向CDSP 的結(jié)果寄存器Res0,Res1,Res2

    dsp_wait_new_sample();進(jìn)入睡眠,等待下一個(gè)結(jié)果觸發(fā)信號(hào)。

    Sum = 0;

    average[counter] = *pDsadcReg0;

    counter++;

    if(counter>=10)

    counter = 0;

    for(int i = 0; i<10;i++)

    Sum = Sum + average[i];

    *pCdspRes0 = Sum/10;

    計(jì)算最近的10個(gè)DSADC 的采樣值的平均數(shù),輸出給Res0;

    *pCdspRes1 = *pDsadcReg0 +100;

    計(jì)算當(dāng)前DSADC 的值,加上100,賦值給Res1;

    Temp = *pDsadcReg0+200;

    *pCdspRes2 = (int16_T)Temp;

    計(jì)算當(dāng)前DSADC 的值,加上200,賦值給Res2;

    以上實(shí)現(xiàn)了,DSADC0有新的采樣值,則喚醒CDSP,在CDSP中對(duì)最近的10個(gè)DSADC 的值進(jìn)行求平均,輸出到CDSP 的Res0。

    CDSP 的Res1 和Res2 在此處是把當(dāng)前的DSADC0 的采樣值+100和+200,作為對(duì)比。

    算法開(kāi)發(fā)完之后,需要進(jìn)行編譯鏈接,用到metaware 編譯器,設(shè)置如下。

    打開(kāi)項(xiàng)目Porperties,在C/C++ Build 里面的Setting里,設(shè)置MetaWare Installation Path,輸入Metaware 安裝路徑。

    圖片

    Figure 8. CDSP Framework Build Setting with Metaware

    點(diǎn)擊編譯,編譯過(guò)程中會(huì)生成elf 文件,并生成hex 文件,然后會(huì)調(diào)用tools 文件夾下的工具,生成DCCM.h 和ICCM.h。

    圖片

    編譯結(jié)束,在Metaware 文件夾下生成DCCM.h 和ICCM.h.

    DCCM.h 如下,有一個(gè)DCCM 數(shù)組,大小是DCCMSize=48;

    需要注意DCCMAddress = 0x00008050,這個(gè)是對(duì)0x00008000 有0x50 的偏移,在后續(xù)集成的時(shí)候需要加上這個(gè)偏移地址。

    圖片

    ICCM.h如下,有一個(gè)ICCM 數(shù)組,大小是ICCMSize=300;

    ICCMAddress = 0x00000000,無(wú)偏移。

    圖片

    TriCore?工程中集成用戶自定義軟件

    用戶通過(guò)ADS_limited 軟件,左下角點(diǎn)擊import AURIX? Project

    圖片

    找一個(gè)CDSP 的工程,這里以iLLD_TC499N_ADS_DSADC_CDSP_FC0_Filtering_1 作為模板,把上一節(jié)用戶自定義的算法功能集成進(jìn)來(lái)。

    圖片


    Figure 9. import AURIX Development Studio Example

    1. 把上一節(jié)生成的DCCM.h 和ICCM.h 拷貝到這個(gè)工程里

    2.在CDSP_Filtering.c 中,包含ICCM.h和DCCM.h

    #include"ICCM.h"

    #include"DCCM.h"

    定義一個(gè)數(shù)組,用于訪問(wèn)CDSP0 的Res0,Res1和Res2。

    volatileuint32 gCDSP_res[3] = {0};

    在voidCDSP_ResultHandling(void)中讀取CDSP0的Res0,Res1和Res2.

       gCDSP_res[0] = ADC_CDSP_DSP0_RES0.U;

       gCDSP_res[1] = ADC_CDSP_DSP0_RES1.U;

       gCDSP_res[2] = ADC_CDSP_DSP0_RES2.U;

    把生成的ICCM.h 和DCCM.h 的數(shù)組放到memoryCfg 中,用于拷貝到CDSP 的ICCM和DCCM 中,把

     IfxAdc_Cdsp_MemoryConfig memoryCfg =

     {

     (void*)&cdspFc0IccmImage,

     (void*)&g_Fc0_Cutoff_0k4_Stop_1k5,

     (uint16)cdspFc0IccmImageSize,

     (uint16)sizeof(UserConfig_EntireType)

     };

    改為

     IfxAdc_Cdsp_MemoryConfig memoryCfg =

     {

     (void*)&ICCM,

     (void*)&DCCM,

     (uint16)ICCMSize,

     (uint16)DCCMSize

     };

    這個(gè)例子中,不需要額外配置參數(shù),注釋掉

    filterCfgPtr= (UserConfig_EntireType*)IFXADC_CDSP_GETDCCM_ADDRESS(coreConfig.coreId);

    filterCfgPtr->Common.InputAddress= (0x9010U + 4U * coreConfig.inputSel);

    //filterCfgPtr= (UserConfig_EntireType*)IFXADC_CDSP_GETDCCM_ADDRESS(coreConfig.coreId);

    //filterCfgPtr->Common.InputAddress= (0x9010U + 4U * coreConfig.inputSel);

    3. 在DSADC_Setup.c 中,做一個(gè)求10個(gè)數(shù)據(jù)的移動(dòng)平均值,把

    float32 g_ResultSignalA;

    改為

    float32 g_ResultSignalA[10];
    float32 ave_g_ResultSignalA;
    uint32 cntDsadc = 0;

    在void DSADC_serviceIntChannelA(void)中,定義一個(gè)CPU 處理DSADC 的數(shù)據(jù),實(shí)現(xiàn)求移動(dòng)平均數(shù)功能,把

    /* This interrupt handler routine is invoked by CDSP Result event */
    void DSADC_serviceIntChannelA(void)
    {
     sint16 res;
    res=MODULE_ADC.DSADC.IN[DSADC_CHANNEL_A].RESM.B.RESULTLO+OFFSETDRAWING_DSADC;
    g_ResultSignalA=  5.0f * res / 25000.0f;
    }

    改為

    /* This interrupt handler routine is invoked by CDSP Result event */
    void DSADC_serviceIntChannelA(void)
    {
    sint16 res;
    res=MODULE_ADC.DSADC.IN[DSADC_CHANNEL_A].RESM.B.RESULTLO + OFFSETDRAWING_DSADC;
    // g_ResultSignalA=  5.0f * res / 25000.0f;
     g_ResultSignalA[cntDsadc] = res;
     cntDsadc++;
     if(cntDsadc==10)
    cntDsadc =0;
     ave_g_ResultSignalA = 0;
     for(uint32 icnt = 0;icnt < 10; icnt++)
     {
    ave_g_ResultSignalA =    ave_g_ResultSignalA + g_ResultSignalA[icnt];
     }
    ave_g_ResultSignalA = ave_g_ResultSignalA/10;
    }

    4. 在DSADC_Setup.h 中把

    IFX_EXTERN float32 g_ResultSignalA;;

    改為

    IFX_EXTERN float32 g_ResultSignalA[10];

    5. 在IfxAdc_Cdsp.c 中把

     /* Load configuration in DCCM memory */

     if (memPtr->dataMemSrcAddrPtr != NULL_PTR)

     {

    IfxAdc_loadCdspMemory(memPtr->dataMemSrcAddrPtr, (void*)IFXADC_CDSP_GETDCCM_ADDRESS(coreId), memPtr->dataSize);

     }

    改為

     /* Load configuration in DCCM memory */

     if (memPtr->dataMemSrcAddrPtr != NULL_PTR)

     {

    IfxAdc_loadCdspMemory(memPtr->dataMemSrcAddrPtr, (void*)(IFXADC_CDSP_GETDCCM_ADDRESS(coreId)+0x50), memPtr->dataSize);

     }

     這樣就把DCCM.h 的偏移地址加上了。

    然后編譯iLLD_TC499N_ADS_DSADC_CDSP_FC0_Filtering_1 工程。

    下載運(yùn)行,查看運(yùn)行結(jié)果。

    圖片


    Figure 10. Result of Customized CDSP software

    從結(jié)果看,在CDSP0_RES0 上的移動(dòng)平均數(shù)和在TriCore? 中通過(guò)DSADC 原始數(shù)據(jù)求得的移動(dòng)平均數(shù)一致,說(shuō)明CDSP 正確實(shí)現(xiàn)了求移動(dòng)平均數(shù)。(小數(shù)點(diǎn)是因?yàn)槎x的數(shù)組類(lèi)型不同)。

    CDSP0_RES1 和CDSP0_RES2 的結(jié)果也正常。

    綜上,實(shí)現(xiàn)了用戶自定義CDSP 軟件集成到TC499PP 工程,并且CDSP 運(yùn)行結(jié)果正確無(wú)誤。

    總結(jié)

    本文介紹了如何使用CDSP Framework 進(jìn)行用戶自定義算法開(kāi)發(fā),并將開(kāi)發(fā)好的CDSP 算法集成到TriCore? 工程中,實(shí)現(xiàn)CDSP 的靈活使用。

    CDSP 的有效使用可以很好的處理ADC 數(shù)據(jù),能較大程度降低TriCore? 的負(fù)荷,對(duì)于提升系統(tǒng)的實(shí)時(shí)性有較大幫助。

    歡迎廣大用戶去探索CDSP 用法,實(shí)現(xiàn)更高的系統(tǒng)實(shí)時(shí)性,更豐富的功能。

    REFERENCES

    [1] Infineon-AURIX-TC49x-N-UM-v01_01-EN_US.pdf

    [2] AURIX_TC4x_CDSP_PROD_V0.5.1-MR1_UserManual.pdf

    [3] https://mp.weixin.qq.com/s/c1bjycblTr1oEyvPQWjQcgaccessed on 20.11.2024 14:20 CST

    [4] https://mp.weixin.qq.com/s/sOHPrcFL98Gq2T_utshMnAaccessed on 18.11.2025 14:50 CST


    評(píng)論


    相關(guān)推薦

    技術(shù)專(zhuān)區(qū)

    關(guān)閉