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.

[参考译文] TMS320F28379D:如果 EPWM1分配给 CPU2、CLB1不能#39;t 功能。

Guru**** 2535150 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1034198/tms320f28379d-clb1-doesn-t-function-if-epwm1-is-assigned-to-cpu2

器件型号:TMS320F28379D

我在 CLB1模块上实现了一些逻辑。 但是、只有当我将 EPWM1分配给 CPU2时、它才会工作。 我不在 CLB 中使用来自 EPWM1 (或任何 EPWM 模块)的任何信号。 我在勘误文档中和 TRM 中都没有看到任何相关内容。  

我已经编写了一个小演示来重现此问题。 我似乎无法将.syscfg 文件附加到此帖子、因此下面的 main.c 文件就足够了。 该演示对 GPIO35上的正边沿事件进行计数。 计数器初始化为1000、当计数器超过20000时、计数器将重置为该值。 禁用 sysctl_selectCPUForPeripheral()调用后,CLB 模块将按所述工作。 启用调用后、CLB 模块不会有任何状态变化(无论什么、计数器值读取为0)。  

#include "driverlib.h"
#include "device.h"
#include "clb_config.h"
#include "clb.h"
#include "pin_map.h"

void initCLB1(void);

void main(void)
{
    Device_init();
    Device_initGPIO();

    Interrupt_initModule();
    Interrupt_initVectorTable();

    GPIO_setPadConfig(35, GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig(GPIO_35_GPIO35);
    GPIO_setDirectionMode(35, GPIO_DIR_MODE_IN);

	SysCtl_enablePeripheral((SysCtl_PeripheralPCLOCKCR)0x0011);

    CLB_enableCLB(CLB1_BASE);
    initTILE1(CLB1_BASE);

    CLB_configLocalInputMux(CLB1_BASE, CLB_IN0, CLB_LOCAL_IN_MUX_GLOBAL_IN);
    CLB_configLocalInputMux(CLB1_BASE, CLB_IN1, CLB_LOCAL_IN_MUX_GLOBAL_IN);
    CLB_configLocalInputMux(CLB1_BASE, CLB_IN2, CLB_LOCAL_IN_MUX_GLOBAL_IN);
    CLB_configLocalInputMux(CLB1_BASE, CLB_IN3, CLB_LOCAL_IN_MUX_GLOBAL_IN);
    CLB_configLocalInputMux(CLB1_BASE, CLB_IN4, CLB_LOCAL_IN_MUX_GLOBAL_IN);
    CLB_configLocalInputMux(CLB1_BASE, CLB_IN5, CLB_LOCAL_IN_MUX_GLOBAL_IN);
    CLB_configLocalInputMux(CLB1_BASE, CLB_IN6, CLB_LOCAL_IN_MUX_GLOBAL_IN);
    CLB_configLocalInputMux(CLB1_BASE, CLB_IN7, CLB_LOCAL_IN_MUX_GLOBAL_IN);

    CLB_configGlobalInputMux(CLB1_BASE, CLB_IN0, CLB_GLOBAL_IN_MUX_CLB_AUXSIG0);
    CLB_configGlobalInputMux(CLB1_BASE, CLB_IN1, CLB_GLOBAL_IN_MUX_CLB_AUXSIG1);
    CLB_configGlobalInputMux(CLB1_BASE, CLB_IN2, CLB_GLOBAL_IN_MUX_CLB_AUXSIG2);
    CLB_configGlobalInputMux(CLB1_BASE, CLB_IN3, CLB_GLOBAL_IN_MUX_CLB_AUXSIG3);
    CLB_configGlobalInputMux(CLB1_BASE, CLB_IN4, CLB_GLOBAL_IN_MUX_CLB_AUXSIG4);
    CLB_configGlobalInputMux(CLB1_BASE, CLB_IN5, CLB_GLOBAL_IN_MUX_CLB_AUXSIG5);
    CLB_configGlobalInputMux(CLB1_BASE, CLB_IN6, CLB_GLOBAL_IN_MUX_CLB_AUXSIG6);
    CLB_configGlobalInputMux(CLB1_BASE, CLB_IN7, CLB_GLOBAL_IN_MUX_CLB_AUXSIG7);

    CLB_configGPInputMux(CLB1_BASE, CLB_IN0, CLB_GP_IN_MUX_EXTERNAL);
    CLB_configGPInputMux(CLB1_BASE, CLB_IN1, CLB_GP_IN_MUX_GP_REG);
    CLB_configGPInputMux(CLB1_BASE, CLB_IN2, CLB_GP_IN_MUX_GP_REG);
    CLB_configGPInputMux(CLB1_BASE, CLB_IN3, CLB_GP_IN_MUX_GP_REG);
    CLB_configGPInputMux(CLB1_BASE, CLB_IN4, CLB_GP_IN_MUX_GP_REG);
    CLB_configGPInputMux(CLB1_BASE, CLB_IN5, CLB_GP_IN_MUX_GP_REG);
    CLB_configGPInputMux(CLB1_BASE, CLB_IN6, CLB_GP_IN_MUX_GP_REG);
    CLB_configGPInputMux(CLB1_BASE, CLB_IN7, CLB_GP_IN_MUX_GP_REG);

    XBAR_setInputPin(XBAR_INPUT1, 35);
    XBAR_setCLBMuxConfig(XBAR_AUXSIG0, XBAR_CLB_MUX01_INPUTXBAR1);
    XBAR_enableCLBMux(XBAR_AUXSIG0, XBAR_MUX01);

    /* !!!!!!!!!!!!!! UNCOMMENT THE BELOW LINE TO REPRODUCE CLB1 DISFUNCTION !!!!!!!!!!!!!!!!! */
//    SysCtl_selectCPUForPeripheral(SYSCTL_CPUSEL0_EPWM, 1, SYSCTL_CPUSEL_CPU2);

    uint32_t ctr;
    while(1)
    {
        ctr = CLB_getRegister(CLB1_BASE, CLB_REG_CTR_C0);

        if(ctr > 20000)
        {
            CLB_setGPREG(CLB1_BASE, 0b0000); // clear GP_REG to ensure next write triggers a pos edge
            asm(" NOP");
            CLB_setGPREG(CLB1_BASE, 0b0010); // set GP_REG to value that brings bit 1 high (configured to CLB_IN1 above).
        }

        asm(" NOP");
    }
}

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

    EPWM1时钟为 CLB 时钟。

    这就是为什么在所有 CLB 示例中、我们启用 ePWM PCLK 的原因。 对于该器件、如果要使用 HRPWM、还需要将 EPWM1分配给 CPU1。 通常、将 EPWM1分配给该器件系列中的 CPU1。  

    NIMA