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.

[参考译文] RTOS/TDA3XEVM:在用例的主要功能中集成 PWM 示例程序

Guru**** 2589280 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/638343/rtos-tda3xevm-integeration-of-pwm-example-program-in-main-function-of-usecase

器件型号:TDA3XEVM
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

大家好、

我喜欢将"ti/CSL/example/ePWM"中的 PWM 示例集成到用例的一个 RTOS 主函数中。 我已在"chains_main_BIOS_vision.c"中的"epwm_app.c"中添加了他们正在使用的所有函数。 当我编译并执行 时,用例和 PWM 都不起作用。  

尽管编译成功。

请帮助我们了解如何将 PWM 程序集成到其中一个用例中。 或在用例的主函数中。

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

    我已将您的问题转交给一位专家征求意见。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Surendar、
    我不熟悉 RTOS、因此无法回答 RTOS 问题。 然而、我可以告诉大家、为了使外设正常工作、需要启用所需的时钟并为外设设置合适的引脚多路复用器。 您可以看到必须为这两个寄存器设置的器件 TRM 和 DM。

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

    感谢您的宝贵建议,但是这些引脚已经配置,时钟已启用。 我仍然无法使功能正常工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能不能描述出什么是错误以及它在哪里被击中

    您是否获得中断?

    您是否探测到引脚并查看 PWM 信号是否正在切换?

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

    问题是在"chains_main_BIOS_vison.c"程序文件中的 PWM 示例程序集成后,我无法启动 appimage 本身。 未执行引导
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否可以共享您所做的所有更改? 我可以回顾一下是否存在一些差距。

    顺便说一下、您不能将 PWM 示例原样集成到 VSDK 中。

    PDK 示例是 BareMetal、VSDK 基于 TI SYSBIOS。 因此、您不应将 PDK 示例中与操作系统相关的函数(如启动、中断、缓存等)转到 VSDK。 您应该只将 PWM CSL-FL 编程到 VSDK 中。 对于上述所有内容、应使用 SYSBIOS API。

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

    我复制了 ti/cSL/example/ePWM/中"epwm_app.c"中的所有函数并粘贴到"chains_main_BIOS_vision.c"文件中并进行了编译,正如我先前提到的那样,编译中没有错误。 如果我走错了路、请纠正我的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Surendar、

    请在 您进行更改的位置共享 chains_main_BIOS_vision.c 文件。 Sivaraj 指出、您不能简单地复制函数。

    您的最终目标是什么? 是否要使用这些 PWM 信号驱动任何外部器件? 您希望何时启用/禁用它?  

    根据上述情况、您需要从适当的位置调用 PWM 函数。

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

    Prasad、您好!

    请查找下面复制 的 chains_main_BIOS_vision.c 文件。 我想使用从链中生成的 PWM 信号来执行显示亮度控制,因此我尝试将 PWM 程序集成到主函数中。 在调整 PWM 占空比时、我想通过输出引脚控制亮度。

    在下面复制的文件中,我添加了对 PWM 进行地理调速所必需的所有 PWM 功能。 请指导我如何继续。


    /*********
     * 包含文件
     秘书长的报告
     *
    #include
    #include
    #include
    #include

    /*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
    /*                            包含文件                                 */
    /*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *

    #include "ePWM_app.h"

    /*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
    /*                               宏                                     */
    /*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *

    /*
     *可配置参数
     *
    /**
     * \brief PWM 实例基址。
     *
     * 注意:如果更改为其他实例、则需要更改 PRCM 和 pinmux
     * 在应用程序中得到了注意。
     *
    #define APP_EHRPWM_INST_BASE_ADDR      (SOC_PWMSS1_IPWMSS_BASE)

    /**
     * \brief 输出通道- A 或 B
     *
     * 注意:如果更改为通道 B、则需要注意引脚多路复用
     *。  
     *
    #define APP_EHRPWM_OUTPUT 通道           (CSL_ePWM_OUTPUT CH_A)

    /**\PWM 输出信号的频率(以 Hz 为单位)-选择1KHz */
    #define APP_EHRPWM_OUT_FREQ            (1U * 1000U)

    /**\PWM 输出信号的短暂占空比(以%为单位)-给出0至100的值*/
    #define APP_EHRPWM_Duty_cycle          (25U)

    /**\brief 应用程序运行时间(以秒为单位)*/
    #define APP_RUN_TIME                   (30U)

    /**\brief 应用程序运行计数(如果等于零 ISR 计数)*/
    #define APP_RUN_TIME_ISRCOUNT          (APP_RUN_TIME * APP_EHRPWM_OUT_FREQ)

    /**
     * \向 PWMSS 简要介绍功能时钟。
     * 为平台修复-不能更改。
     *
    #define SOC_EHRPWM_MODULE_FREQ         (133U * 1000U * 1000U)

    /**\简述 以 Hz 为单位的 TB 频率,以便使用/4分频器*/
    #define APP_EHRPWM_TB_FREQ             (SOC_EHRPWM_MODULE_FREQ / 4U)

    /**
     * \brief PRD 值-这决定了周期
     *
     * PRD =(TBCLK/PWM FREQ)/2
     * 注意:由于选择了向上和向下计数器、因此添加了/2。 因此周期为2倍
     *
    #define APP_EHRPWM_PRD_VAL             ((APP_EHRPWM_TB_FREQ                  \
                                               / APP_EHRPWM_OUT_FREQ)/2U)
    /**
     * \brief compa value -这将决定占空比
     *
     * compa =(PRD -((dutycycle * PRD)/ 100)
     *
    #define APP_EHRPWM_COMPA_VAL           (APP_EHRPWM_PRD_VAL -                 \
                                               ((APP_EHRPWM_Duty_cycle *         \
                                                   APP_EHRPWM_PRD_VAL)/100U))

    #define APP_EHRPWM_INT                 (32U)
    #define APP_EHRPWM_XBAR_CPU            (CSL_XBAR_IRQ_CPU_ID_IPU1)
    #define APP_EHRPWM_XBAR_INST           (CSL_XBAR_INST_IPU1_IRQ_32)
    #define APP_EHRPWM_XBAR_INTR_SOURCE    (CSL_XBAR_PWMSS1_IRQ_ePWM0INT)

    /*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
    /*                           全局变量                               */
    /*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *

    /**\brief IP 默认配置*/
    静态 CSL_EPwmAppPwmObj_t gAppPwmObj =

       APP_EHRPWM_OUTPUT 通道、                      /* pwmCh */
       APP_EHRPWM_INST_BASE_ADDR、                 // instAddr *
       SoC_EHRPWM_MODULE_FREQ、                    /* funcClk */
       false,                                     /* enableDeadband */
       false,                                     /* enableChopper */
       false,                                     /* enableTripzone */
       true、                                      //* enableEventTrigger */
       false,                                     /* enableHighResolution */
       /* CSL_EpwmAppPwmCfg_t*/
       {
           /* CSL_EpwmTimebaseCfg_t */
           {
               APP_EHRPWM_TB_FREQ、                /* TBCLK */
               APP_EHRPWM_OUT_FREQ、               /* pwmtbCounterFreqPrd *
               CSL_ePWM_TB_COUNTER_DIR_UP_DOWN、   /* tbCntrDirection *
               false,                             /* enableSynchronization */
               PWMS_ePWM_TBCTL_PHSDIR_COUNT_DOWN、// cntDirAfterSync *
               0U、                                /* phsCountAfterSync *
               PWMS_ePWM_TBCTL_SYNCOSEL_EPWMXSYNC /* syncOutSrc *
           }、
           /* CSL_EpwmCounterCmpCfg_t */
           {
               APP_EHRPWM_COMPA_VAL、              /* cmpAValue */
               APP_EHRPWM_COMPA_VAL               //* cmpBValue *
           }、
           /* CSL_EpwmAqActionCfg_t */
           {
               CSL_ePWM_AQ_ACT_DONOTHING、      //零操作*/
               CSL_ePWM_AQ_ACT_DONOTHING、      /* prdAction *
               CSL_ePWM_AQ_ACT_HIGH、           /* cmpAUpAction *
               CSL_ePWM_AQ_ACT_LOW、            /* cmpADownAction *
               CSL_ePWM_AQ_ACT_HIGH、           /* cmpBUpAction */
               CSL_ePWM_AQ_ACT_LOW             /* cmpBDownAction *
           }、
           /* CSL_EpwmDeadbandCfg_t */
           {
               CSL_ePWM_DB_IN_MODE_A_RED_A_FED、   /* InputMode *
               CSL_ePWM_DB_OUT_MODE_BYPASS、       // outputMode *
               CSL_ePWM_DB_POL_SEL_ACTV_HIGH、     /* polaritySelect *
               0U、                                /* risingEdgeDelay *
               0U                                 /* FallingEdgeDelay */
           }、
           /* CSL_EpwmChopperCfg_t */
           {
               CSL_ePWM_HCS_Duty_cycle_PERC_12PNT5、   /* dutyCycle */
               CSL_ePWM_HCS_CLK_FREQ_DIV_By_1、        // clkFrequency *
               CSL_ePWM_HCS_OSHT_WIDTH_1XSYSOUT_BY_8  /* Shotscope PulseWidth *
           }、
           /* CSL_EpwmTripzoneCfg_t */
           {
               CSL_ePWM_TZ_TRIP_ACT_DO _nITH、/* tripAction *
               CSL_ePWM_TZ_EVENT_Oe_SHOT、        // tripEvtType *
               0U、                                /* trippin */
               false                              /* enableTripIntr */
           }、
           /* CSL_EpwmEtCfg_t */
           {
               CSL_ePWM_ET_INTR_EVT_CNT_EQ_ZRO、   /* InEvtSource *
               CSL_ePWM_ET_INTR_PERIOD_FIRST_EVT  /* INPrd */
           }
       }
    };

    静态易失性 uint32_t gNumIsr = 0U;

    /*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
    /*                内部函数声明                            */
    /*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *

    静态空 AppPwmIntrISR (空*句柄);

    静态空 CSL_epwmAppPwmCfg (CSL_EpwmAppPwmObj_t * pObj);
    静态空 EpwmAppTimebaseModuleCfg (uint32_t baseAddr、
                                        uint32_t pwmFuncClk、
                                        CSL_EpwmTimebaseCfg_t * pTbCfg);
    静态空 EpwmAppCounterComparatorCfg (uint32_t baseAddr、
                                           cSL_EpwmCounterCmpCfg_t * pCcCfg);

    静态空 padConfig_prcmEnable (void);

    /*********
     * 全局变量
     秘书长的报告
     *
    void chains_showMainMenu (char * main_menu);
    void chains_showSystemSettingsMenu();
    void chains_menuReearViewPanoramaRun();
    chains_ctrl gChains_usecaseCfg;

    /**
     秘书长的报告
     *\brief 菜单设置显示字符串。
     秘书长的报告
     *
    char gChains_menuUseCases[]={
       "\r\n "
       "\r\n Vision SDK 用例、"
       "\r\n ------------------------ "
       "\r\n 1:单摄像头用例"
       "\r\n 2:多摄像头 LVDS 用例"
       "\r\n 3:AVB RX 用例、(仅限 TDA2x 和 TDA2Ex)"
       "\r\n 4:双显示用例、(仅限 TDA2x EVM)"
       "\r\n 5:ISS 用例、(仅限 TDA3x)"
       "\r\n 6:TDA2x 立体声用例"
       #ifdef uC_network_Rx_TX
       "\r\n 7:网络 RX/TX 用例"
       #endif
       #ifdef radar_include
       "\r\n 9:雷达用例"
       #endif
       "\r\n A:其他测试"
       #ifdef OpenCL_include
       "\r\n b:OpenCL 用例(仅限 TDA2x EVM)"
       #endif
       #ifdef OPENVX_INCLUDE
       "\r\n c:OPENVX 用例"
       #endif
       #if defined (uC_REAR_View_Panorama_tda3xx)
       "\r\n D:后视全景用例"
       #endif
       #ifdef build_ADAM_CAR
       "\r\n e:Adam CAR 使用案例"
       #endif
       #ifdef uC_tidl
       "\r\n f:TIDL 文件 I/O 用例"
       #endif
       #ifdef uC_semSeg
       "\r\n g:语义分割用例"
       #endif
       "\r\n "
       "\r\n s:系统设置"
       "\r\n "
       "\r\n x:退出"
       "\r\n "
       "\r\n 输入选项:"
       "\r\n "
    };


    /**
     秘书长的报告
     *\brief 运行时菜单字符串。
     秘书长的报告
     *
    char gChains_runTimeMenu[]={
       "\r\n "
       "\r\n======================================== "
       "\r\n 链运行时菜单"
       "\r\n======================================== "
       "\r\n "
       "\r\n 0:停止链"
       "\r\n "
       "\r\n 1:更改显示通道(仅支持4CH LVDS + Mosaic 用例)"
       "\r\n "
       "\r\n p:打印性能统计数据"
       "\r\n "
       "\r\n 输入选项:"
       "\r\n "
    };

    /**
     秘书长的报告
     *
     *\볲 튪  Main call for usecase selection and configuration
     *
     *         chains_main 从 main_ipu1_0.c 的 main 中调用。
     *         这是用例选择的入口点。
     *         执行板、UART LCD 初始化和演示选择。
     *         它会在 while 循环中等待、直到演示/用例结束触发
     *
     *\param  arg0   [in] 默认值
     *
     *\param  arg1   [在] 默认值
     *
     秘书长的报告
    *
    void chains_main (UArg0、UArgarg1)


       ChainCommon_Init();
       Chain _Ctrl_Init (&gChains_usecaseCfg);

       
    /******** 为 PWM 添加了********* /
       CSL_EpwmAppPwmObj_t *pObj =&gAppPwmObj;

       /*为 UART 和 PWM 执行 PAD 配置和 PRCM 启用*/
       padConfig_prcmEnable();
       /*为 PWM 子系统内的 ePWM 模块启用时钟。 *
       csl_epwmClockEnable (pObj->instAddr);

       /* ePWM 通道配置*/
        CSL_epwmAppPwmCfg (pObj);

       /*等待 ISR 计数*/
       while (gNumIsr < APP_RUN_TIME_ISRCOUNT);
    /********* 为 PWM 添加了******** /












    #IF 定义(TDA2EX_ETHSRV_Board)
       /*
        *对于 ETH SRV 板、默认情况下摄像头电源处于打开状态、因此请将其关闭。
        *用例支持摄像机启动功能。
        *
       ChainCommon_StopCaptureDevice (chains_capture_SRC_Trulate_AVB_CAM);
    #endif

       #ifdef TDA3XX_family_BUILD
       #ifdef uC_FAST_BOOT_ISS_CAPTURE_ISP_simcop_PD_display
       if (System_isFastBootEnabled())
       {
           gChains_usecaseCfg.displayType  = chains_display_type_lcd_10_inch;
           gChains_usecaseCfg.captureSrc   = SHARINS_CAPTURE_SRC_AR0140BAYER_PARALLEL;
           gChains_usecaseCfg.ispOpMode    = ISSM2MISP_LINK_OPMODE_2PASS WDR;
           gChains_usecaseCfg.issLdcEnable = 0;
           gChains_usecaseCfg.issVtnfEnable = 0;

           if (bsp_platformIsTda3xxFamilyBuild())
           {
               chains_fastBootIssIspSimcop_PD_Display (&gChains_usecaseCfg);
           }
           其他
           {
               VPS_printf ("###不能运行用例。 此平台不支持 Usecase 或"
                          "    在 Rules.make 中检查 FAST_BOOT_INCLUDE \n");
           }
       }
       否则(System_isSrvFastBootEnabled())
       {
           gChains_usecaseCfg.captureSrc = ARINS_CAPTURE_SRC_UB960_IMI;
           strncpy()
               gChains_usecaseCfg.sensorName、
               SENSOR_OmniVISION_OV10640_IMI、
               ISS_SENSORS_MAX_NAME);
           连锁酒店
                                               gChains_usecaseCfg、
                                               算法_链接_SRV_输出_3D_LDC);
       }
       其他
       定义了#elif (uC_iss_mult_capt_isp_dewarp_3dsv_tda3xx)
       if (System_isSrvFastBootEnabled())
       {
           gChains_usecaseCfg.captureSrc = ARINS_CAPTURE_SRC_UB960_IMI;
           strncpy()
               gChains_usecaseCfg.sensorName、
               SENSOR_OmniVISION_OV10640_IMI、
               ISS_SENSORS_MAX_NAME);
           连锁酒店
                                               gChains_usecaseCfg、
                                               算法_链接_SRV_输出_3D_LDC);
       }
       其他
       #endif
       #endif
       {
           #ifdef chains_disable_get_char
           链条_menuMainRun ('n');
           #endif
           {
               字符 ch;
               Bool Done (Bool 完成);

               DONE = false;

               while (!done)
               {
                   Chain _showMainMenu (gChains_menuUseCase);

                   CH = chains_readChar ();

                   vps_printf ("\r\n");

                   开关(通道)
                   {
                       案例"1":
                           链条_menuSingleCameraRun();
                           中断;

                       案例"2":
                           chains_menuMultiCameraLvdsRun();
                           中断;

                       #ifdef AVB_INCLUDE
                       案例"3":
                       if (Utils_netIsNetworkEnabled ())
                       {
                           chains_menuAvbRxRun();
                       }
                       其他
                       {
                           VPS_printf ("###构建中未启用网络、重建\
                                  NDK_PROC_TO_USE_=的二进制文件  在 Rules.make 中\n");
                       }
                       中断;
                       #endif
                       案例"4":
                           chains_menuDualDisplayRun();
                           中断;

                       案例"5":
                           chains_menuIssRun();
                           中断;

                       案例"6":
                           chains_menuStereoRun();
                           中断;
                       #ifdef uC_network_Rx_TX
                       案例"7":
                           chains_menuNetworkRxTxRun();
                           中断;
                       #endif
                       #ifdef radar_include
                       案例"9":
                           {
                               void chains_radarMain (chains_ctrl * chainsCfg);

                               Chain _radarMain (&G) Chains_usecaseCfg;
                           }
                           中断;
                       #endif

                       案例"A":
                           链条_menuTestMiscRun();
                           中断;
                       #ifdef OpenCL_include
                       情况"b":
                           chains_menuOpenCLRun();
                           中断;
                       #endif
                       #ifdef OPENVX_INCLUDE
                       案例'c':
                       案例"C":
                           chains_menuOpenVXRun();
                           中断;
                       #endif
                       #if defined (uC_REAR_View_Panorama_tda3xx)
                       案例"d":
                           链条_menuRearViewPanoramaRun();
                           中断;
                       #endif
                       #ifdef build_ADAM_CAR
                       案例"e":
                           {
                               void chains_adamCardemoMain (chains_ctrl * chainsCfg);
                               链条_ amadamCardoMain (&G) Chains_usecaseCfg;
                           }
                           中断;
                       #endif

                       #ifdef uC_tidl
                       案例'f':
                       案例"F":
                           chanis_tidl (&gChains_usecaseCfg);
                           中断;
                       #endif

                       #ifdef uC_semSeg
                       案例"G":
                       案例"G":
                           chanis_semSeg (&gChains_usecaseCfg);
                           中断;
                       #endif

                       案例"S":
                       案例"S":
                           chains_showSystemSettingsMenu();
                           中断;

                       案例"x":
                       案例"X":
                           DONE = true;
                           中断;
                   }
               }
           }
       }

       ChainCommon_deInit();






    静态空 AppPwmIntrISR (空*句柄)

       uint16_t status = CSL_epwmEtIntraStatus (APP_EHRPWM_INST_BASE_ADDR);

       CSL_epwmEtIntrClear (APP_EHRPWM_INST_BASE_ADDR);
       gNumIsr++;
       返回;


    /**
     *\brief  此 API 用于配置 ePWM 模块
     *
     *\param  pObj            指向 ePWM 对象数据结构的指针。
     *
    静态空 CSL_epwmAppPwmCfg (CSL_EpwmAppPwmObj_t *对象)

       uint32_t baseAddr = pObj->instAddr;
       uint32_t pwmCh   = pObj->pwmCh;
       uint32_t pwmFuncClk = pObj->funcClk;
       CSL_EpwmAppPwmCfg_t *pPwmCfg =&pObj->pwmCfg;

       /*配置时基子模块*/
       EpwmAppTimebaseModuleCfg (baseAddr、pwmFuncClk、&pwmCfg->tbCfg);

       /*计数器比较器子模块配置*/
       EpwmAppCounterComparatorCfg (baseAddr、&pwmCfg->ccCfg);

       /*配置操作限定符*/
       csl_epwmAqActionOnOutputCfg (baseAddr、pwmCh、&pwmCfg->aqCfg);

       /*死区子模块配置*/
       if (true =pObj->enableDeadband)
       {
          /*启用和配置死区子模块*/
          csl_epwmDeadbandCfg (baseAddr、&pwmCfg->dbcfg);
       }
       其他
       {
           /*旁路死区子模块*/
           CSL_epwmDeadBandBypass (baseAddr);
       }

       /*斩波器子模块配置*/
       if (true =pObj->enableChopper)
       {
           /*配置斩波器子-模块*/
           csl_epwmChopperCfg (baseAddr、&pwmCfg->chpCfg);

           /*启用斩波器*/
           CSL_epwmChopperEnable (baseAddr、true);
       }
       其他
       {
           /*禁用斩波器*/
           CSL_epwmChopperEnable (baseAddr、false);
       }

       /*跳匣区域子模块配置*/
       if (true =pObj->enableTripZone)
       {
           /*配置行程操作*/
           CSL_epwmTzTriggerTripAction (
               baseAddr、CSL_ePWM_TZ_TRIP_ACT_HIGH、pwmCh);

           /*启用跳闸事件*/
           CSL_epwmTzTripEventEnable()
               baseAddr、pwmCfg->tzCfg.tripEvtType、pwmCfg->tzCfg.trippin);
       }
       其他
       {
           /*禁用跳闸区域事件处理并忽略所有跳闸区域事件*/
           CSL_epwmTzTripEventDisable (
               baseAddr、cSL_ePWM_TZ_EVENT_Oe_Shot、pPwmCfg->tzCfg.trippin);
           CSL_epwmTzTripEventDisable (
               baseAddr、cSL_ePWM_TZ_EVENT_CYCLE、pwmCfg->tzCfg.trippin);
       }

       /*事件触发器子-模块配置*/
       if (true =pObj->enableEventTrigger)
       {
           /*配置事件触发器处理*/
           CSL_epwmEtIntraCfg (
               baseAddr、pPwmCfg->etCfg.intrEvtSource、pPwmCfg->etCfg.intrPrd);
           CSL_epwmEtIntraEnable (baseAddr);
       }
       其他
       {
           /*禁用事件触发中断*/
           CSL_epwmEtIntraDisable (baseAddr);
       }

       /**
        *仅 PWM A 通道支持高分辨率功能。 IF 通道
        *是然后继续进行高分辨率处理。
        *
       IF (CSL_ePWM_OUTPUT CH_A == pwmCh)
       {
           if (true =pObj->enableHighResolution)
           {
               /*配置高分辨率功能*/
               CSL_epwmHighResolutionCfg (
                   baseAddr、
                   pPwmCfg->hrCfg.delayBusSelect、
                   pPwmCfg->hrCfg.delayMode);

               IF (CSL_EPWM_HR_DELAY_BUS_SEL_CMPAHR =>=
                  pwmCfg->hrCfg.delayBusSelect)
               {
                   /*负载比较器 A 高分辨率计数器值*/
                   CSL_epwmHrLoadCmpAHrValue (
                       baseAddr、
                       pwmCfg->hrCfg.cmpAHighResVal、
                       CSL_ePWM_HR_REG_ACT_LOAD_CNT_ZRO_PULSE);
               }
               else /* CSL_ePWM_HR_DELAY_BUS_SEL_TBPHSHR */
               {
                   /*负载时基相高分辨率值*/
                   CSL_epwmHrLoadTbPhaseHrValue (
                       baseAddr、pwmCfg->hrCfg.tbPhaseHighResVal);
               }
           }
           其他
           {
               /*禁用高分辨率功能*/
               CSL_epwmHighResolutionDisable (baseAddr);
           }
       }

       返回;


    /**
     *\brief  此 API 配置 Timebase 子模块。
     *
     使用         的 PWMSS 实例的*\param baseAddr 基址
     *\param  pwmFuncClk     PWM 功能时钟值、单位为 Hz
     *\param  pTbCfg         指向时基子模块配置的指针
     *                         数据结构
     *
    静态空 EpwmAppTimebaseModuleCfg (uint32_t baseAddr、
                                        uint32_t pwmFuncClk、
                                        cSL_EpwmTimebaseCfg_t * pTbCfg)

       /*配置时基时钟*/
       CSL_epwmTbTimebaseClkCfg (baseAddr、pTbCfg->TBCLK、pwmFuncClk);

       /*配置 PWM 时基计数器频率和方向*/
       CSL_epwmTbPwmFreqCfg (
           baseAddr、
           pTbCfg->TBCLK、
           pTbCfg->pwmtbCounterFreqPrd、
           pTbCfg->tbCntrDirection、
           CSL_ePWM_SHAD_REG_CTRL_ENABLE);

       if (true =pTbCfg->enableSynchronization)
       {
           /*启用同步*/
           CSL_epwmTbSyncEnable (
               baseAddr、pTbCfg->phsCountAfterSync、pTbCfg->cntDirAfterSync);
       }
       其他
       {
           /*禁用同步*/
           CSL_epwmTbSyncDisable (baseAddr);
       }

       /*配置同步输出信号*/
       csl_epwmTbSetSyncOutMode (baseAddr、pTbCfg->syncOutSrc);

       /*配置仿真行为*/
       CSL_epwmTbSetEmulationMode (baseAddr、ePWM_TB_EMU_MODE_FREE_run);

       返回;


    /**
     *\brief  此 API 配置计数器比较器子模块。
     *
     使用     的 PWMSS 实例的*\param baseAddr 基址
     *\param  pCcCfg     指向计数器比较器子模块的指针
     *                     配置数据结构
     *
    静态空 EpwmAppCounterComparatorCfg (uint32_t baseAddr、
                                           CSL_EpwmCounterCmpCfg_t * pCcCfg)

       /*计数器比较器 A 配置*/
       CSL_epwmCounterComparatorCfg (
           baseAddr、
           CSL_ePWM_CC_CMP_A、
           pCccfg->cmpAValue、
           CSL_ePWM_SHAD_REG_CTRL_ENABLE、
           CSL_ePWM_CC_CMP_LOAD_MODE_CNT_EQ_ZERO、
           true);

       /*计数器比较器 B 配置*/
       CSL_epwmCounterComparatorCfg (
           baseAddr、
           CSL_ePWM_CC_CMP_B、
           pCccfg->cmpBValue、
           CSL_ePWM_SHAD_REG_CTRL_ENABLE、
           CSL_ePWM_CC_CMP_LOAD_MODE_CNT_EQ_ZERO、
           true);

       返回;


    静态空 padConfig_prcmEnable (空)

    #IF 已定义(SOC_TDA3XX)||已定义(SOC_DRA78x)
       /* UART 焊盘配置*/
      
       /* PWM 焊盘配置- GPMC_BEN0 -> EHRPWM1A */
       HW_WR_REG32 (
           SoC_CORE_PAD_IO_REGISTER+CTRL_CORE_PAD_IO_GPMC_BEN0、0x00000004);
    #endif

       /*为 PWMSS1启用 PRCM */
       HW_WR_REG32 (SOC_L4PER_CM_CORE_BASE + CM_L4PER2_PWMSS1_CLKCTRL、0x2);
       while ((HW_RD_REG32 (SOC_L4PER_CM_CORE_BASE +)
                           CM_L4PER2_PWMSS1_CLKCTRL)&(0x00030000)!= 0x0);
       PWMSS1模块的/*时基时钟*/
       HW_WR_FIELD32 (
           SoC_CTRL_MODULE_CORE_CORE_REGISTER_BASE + CTRL_CORE_CONTRAL_IO_2、
           CTRL_CORE_CONTRAL_IO_2_PWMSS1_TBCLKEN、
           1);

       /* Xbar 配置*/
       CSL_xbarIrqConfigure(.
           APP_EHRPWM_XBAR_CPU、APP_EHRPWM_XBAR_INST、APP_EHRPWM_XBAR_INTR_SOURCE);

       /*为 PWM 周期启用周期性中断*/
    //   intc_Init();
       INTC_IntEnable (APP_EHRPWM_INT);

       /*注册 ISR */
       INTC_IntRegister (APP_EHRPWM_INT、(IntuncPtr) AppPwmIntrISR、0);
       INTC_IntPrioritySet (APP_EHRPWM_INT、1、0);
       INTC_SystemEnable (APP_EHRPWM_INT);

       返回;


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

    您可以在 utils 文件夹中添加 PWM 功能、然后从 SDK 用例或链接中调用这些 API (在当前的 VSDK links_fW/src/rtos/utils_common/src/tda3xx/utils_DCC 中为 DCC 完成)。
    您可以暂时将其保存在链 BIOS 文件中。

    我看到的几个问题-
    1. padConfig_prcmEnable -理想情况下、我们在 BSP 中执行 pad config。 您应将其添加到相应的器件文件中。
    中断和 Xbar 函数- INTC_IntEnable、CSL_xbarIrqConfigure 等函数适用于独立应用。 不确定链接器如何未为这些函数抛出错误。 您是否也复制了这些函数?
    无论如何、您不应将此函数用于中断配置。 使用 BIOS 方法来配置中断。 静态地位于配置文件(以下代码段)或 C 文件中(请参阅如何使用 IntXbar_connectIRQ 等函数在 Links_FW/src/rtos/utils_common/src/tda3xx/utils_dcc.c 文件中注册 ISR Utils_dccErrISR)

    /* GMAC_SW RX_THRESH_PULSE 中断*/
    intXbar.connectIRQMeta (57、334);
    var hwi_param_0 =新的 Hwi.Params;
    Hwi_param_0.arg = 0;
    hwi.create (57+irqOffset、'&HwIntRxThresh'、hwi_param_0);

    3.使用调试器检查 IPU 是否允许所有 PWM 访问。 PDK 示例和 VSDK 的 MMU 配置可能不同。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Prasad,

    非常感谢您的详细解释,我将按照您的说明尝试集成,并在它运行后返回给您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Surendar、

    您可以在下面评论一下吗?
    INTC_IntEnable、CSL_xbarIrqConfigure 等功能适用于独立应用。 不确定链接器如何未为这些函数抛出错误。 您是否也复制了这些函数?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prasad、您好!

    是,正如您所说的,函数 CSL_xbarlrqConfigure 在编译时抛出错误。 但是、我们将使用来自我们在该部分中注释的同一端口的相同中断引脚。 与 INTC_IntEnable 相关的函数没有抛出错误,它已正确编译

    此致,
    V.B.Surendar