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.

[参考译文] TMS320F280039:CLB 似乎不工作

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1343914/tms320f280039-clb-seems-not-work

器件型号:TMS320F280039
主题中讨论的其他器件:SysConfig

尊敬的先生:

    将代码迁移到我的项目后、我发现它没有输出到 GPIO、然后我尝试 CLB 的 out0上的"always 1"、发现 GPIO 仍然为0。 下面是代码:

启用 CLB1 CLK

Fullscreen
1
2
3
4
CpuSysRegs.PCLKCR17.bit.CLB1 = 1;
CpuSysRegs.PCLKCR17.bit.CLB2 = 0;
CpuSysRegs.PCLKCR17.bit.CLB3 = 0;
CpuSysRegs.PCLKCR17.bit.CLB4 = 0;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

CLB 初始化

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
EALLOW;
//Board_init begin.........................................................
//CLB_init.................................................................
//CLB output en
Clb1LogicCtrlRegs.CLB_OUT_EN = 0;
Clb1LogicCfgRegs.CLB_MISC_ACCESS_CTRL.bit.BLKEN = 0; //CLB_enableOutputMaskUpdates
// myCLB0 CLB_IN0/1 initialization
//
// The following functions configure the CLB input mux and whether the inputs
// have synchronization or pipeline enabled; check the device manual for more
// information on when a signal needs to be synchronized or go through a
// pipeline filter
//
Clb1LogicCtrlRegs.CLB_LCL_MUX_SEL_1.bit.LCL_MUX_SEL_IN_0 = 0; //CLB1_GLB_MUX_OUT
Clb1LogicCtrlRegs.CLB_LCL_MUX_SEL_1.bit.LCL_MUX_SEL_IN_1 = 0; //CLB1_GLB_MUX_OUT
Clb1LogicCtrlRegs.CLB_GLBL_MUX_SEL_1.bit.GLBL_MUX_SEL_IN_0 = 64; //CLB_GLOBAL_IN_MUX_CLB_AUXSIG0
Clb1LogicCtrlRegs.CLB_GLBL_MUX_SEL_1.bit.GLBL_MUX_SEL_IN_1 = 65; //CLB_GLOBAL_IN_MUX_CLB_AUXSIG1
Clb1LogicCtrlRegs.CLB_IN_MUX_SEL_0.bit.SEL_GP_IN_0 = 0; //Input comes from selected external input
Clb1LogicCtrlRegs.CLB_IN_MUX_SEL_0.bit.SEL_GP_IN_1 = 0; //Input comes from selected external input
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//
// HLC is configured in <file>
//
//
// HLC
//
//CLB_configHLCEventSelect(base, TILE1_HLC_EVENT_SEL);
//CLB_setHLCRegisters(base, TILE1_HLC_R0_INIT, TILE1_HLC_R1_INIT, TILE1_HLC_R2_INIT, TILE1_HLC_R3_INIT);
//for(i = 0; i <= CLB_NUM_HLC_INSTR; i++)
//{
// CLB_programHLCInstruction(base, i, TILE1HLCInstr[i]);
//}
EDIS;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

GPIO 多路复用器

GPIO0多路复用器到11 (CLB_OUTPUTXBAR8)

Fullscreen
1
2
3
4
EALLOW;
GpioCtrlRegs.GPAGMUX1.bit.GPIO0 = 2;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 3; // Configure GPIO0 as CLB output
EDIS;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

请提出任何想法、谢谢。

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

    尊敬的 Bishlant:

    (如果您不反对、我会将您的代码插入到代码块中、这样就不会让这篇文章变得混乱)

    Unknown 说:
    将代码迁移到我的项目后、我发现它没有输出到 GPIO、然后我尝试在 CLB 的 out0上"always 1"、发现 GPIO 仍然为0。

    您是否使用 SysConfig 配置 CLB/GPIO? 如果是、您能否同时提供.syscfg 或一组源文件(在迁移之前和之后)? 根据您的措辞、似乎 之前持有此代码的器件上 GPIO 切换工作正常、是这样吗?

    Unknown 说:
    EALLOW;
    GpioCtrlRegs.GPAGMUX1.bit.GPIO0 = 2;
    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 3;//将 GPIO0配置为 CLB 输出
    EDIS;

    除了上述代码外、我没有看到适用于您的 GPIO 配置的任何代码、您还没有在这里提供相关内容吗?

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

    您好、Omer:

    如果你不反对的话,我会把你的代码插入一个代码块中,这样它就不会让这篇文章变得混乱。

    可能由于 IT 策略、我无法在此处上传文件。 我可以给你发邮件吗?

    似乎 GPIO 切换在 以前持有此代码的设备上运行良好,这是正确的吗?

    GPIO 以前用作 ePWM、并且工作正常。

    这不是 GPIO 的配置吗? 有什么问题?

    EALLOW;
    GpioCtrlRegs.GPAGMUX1.bit.GPIO0 = 2;
    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 3;//将 GPIO0配置为 CLB 输出
    EDIS;

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

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /*
    * ======== clb.c ========
    * DO NOT EDIT - This file is generated by the SysConfig tool.
    */
    #include "driverlib.h"
    #include "device.h"
    #include "clb_config.h"
    #include "clb.h"
    const uint32_t TILE1_HLC_initFIFOData[4] = {TILE1_HLC_FIFO0_INIT, TILE1_HLC_FIFO1_INIT, TILE1_HLC_FIFO2_INIT, TILE1_HLC_FIFO3_INIT};
    uint16_t TILE1HLCInstr[CLB_NUM_HLC_INSTR + 1] =
    {
    TILE1_HLCINSTR_0,
    TILE1_HLCINSTR_1,
    TILE1_HLCINSTR_2,
    TILE1_HLCINSTR_3,
    TILE1_HLCINSTR_4,
    TILE1_HLCINSTR_5,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /*
    * ======== clb.h ========
    * DO NOT EDIT - This file is generated by the SysConfig tool.
    */
    #ifndef ti_clb_h
    #define ti_clb_h
    #include <stdint.h>
    #ifdef __cplusplus
    extern "C" { // support C++ sources
    #endif
    // HLC Instruction Register Field definitions
    #define HLC_OPCODE_R0 0x0
    #define HLC_OPCODE_R1 0x1
    #define HLC_OPCODE_R2 0x2
    #define HLC_OPCODE_R3 0x3
    #define HLC_OPCODE_C0 0x4
    #define HLC_OPCODE_C1 0x5
    #define HLC_OPCODE_C2 0x6
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    它们是 clb_config.h 和.c

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

    尊敬的 Bishlant:

    可能由于 IT 策略,我无法在此处上传文件。 我可以邮寄给您吗?

    如果您在 E2E 上添加我作为朋友、如果您对公开发布代码有任何限制、您可以私下向我发送您的代码。

    GPIO 以前用作 ePWM、并且工作正常。

    这不是 GPIO 的配置吗? 有什么问题?

    [/报价]

    如果您尝试将 GPIO 用作 CLB 的输出、则应将其配置为输出。 如果您之前将其用作 ePWM 输出并使用了 SysConfig、那么该工具会为 ePWM 外设配置引脚、并且它会正常工作。 CLB 在这方面不同、因为您将依靠交叉开关将信号从 CLB 路由到 GPIO。 因此、GPIO 需要配置为输出。

    此外、如果您将 GPIO 多路复用器用作 GPIO 引脚、则在该多路复用器应为4的倍数时将其设置为2 (或设置为0):

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

    对于 GPIO 多路复用器、这里不应该是11 (CLB_OUTPUTXBAR8)吗?

    CLB 输出 Xbar 配置如下、当我尝试将 GPIO0配置为输出时、它会显示"资源冲突"(GPIO0/79当前被 myCLB_OUTPUTXBAR0使用)

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

    如果我理解正确、您的意思是 GPIO 方向应该配置为输出。

    EALLOW;
    GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
    GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
    EDIS;

    但我认为 GPIO 多路复用器应该是11、而不是0或4 (8/12)

    此外,如果将 GPIO 多路复用器用作 GPIO 引脚,则将其设置为2,此时该复用器应是4的倍数(或设置为0):

    我尝试了上述配置、仍然没有来自 GPIO0的输出。

    然后、我尝试将 CLB_OUT_EN 设置为0x0F、保持相同、GPIO 0为0、而不是1。

    Clb1LogicCtrlRegs.CLB_OUT_EN = 0x0F;
    Clb1LogicCfgRegs.CLB_MISC_ACCESS_CTRL.bit.BLKEN = 0;//CLB_enableOutputMaskUpdates

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

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

    这里显示、GPIO 多路复用器可以通过来自 CLB OUTPUSXBAR 的信号

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

    尊敬的 Bishlant:

    接下来的 CLB 输出 XBAR 配置,当我尝试将 GPIO0配置为输出时,它显示"resource conflict"(GPIO0/79当前正在由 myCLB_OUTPUTXBAR0使用)[/QUO]

    可以看到、我对 XBAR 如何配置输出存在误解。 在初始 POST 中、您有 GPIO 多路复用器(即 不  与 XBAR 配置设置为2、但要将 GPIO 引脚用作 GPIO、需要将其配置为0、4、8或12。 还有一些其他测试可以帮助调试这一点。

    1. 尝试单独使用 GPIO0并将其切换为输出、以确保引脚本身没有问题。 尝试使用不同的 GPIO 作为 CLB 输出。
    2. 请使用该仿真工具验证您的 CLB 是否按预期运行。 有关创建 CLB 工具用户指南中 CLB 图的第3.4节的说明。 首先确保已按照2.3节中的安装说明进行操作、以便使用适当的工具来查看仿真输出。
    3. 创建 差动 器件生成的代码的详细说明、找出代码更改存在的原因。 这意味着不仅要在此处复制和粘贴代码、还要查看端点的代码并找出不同的行。 CLB 有不同的类型、因此根据您从何种器件迁移、应该会有预期的变化。 您要从什么器件迁移?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Omer:

    对于第1点、我确认 GPIO0在用作 GPIO 输出时工作正常。

    使用仿真工具得到的结果是可以的。 抱歉、我可能会让您误解、这是 CLB 的一个新设计、我使用系统配置工具设计 CLB 并对设计进行仿真、一切运行良好、然后我将生成的代码(clb_config.c、board.c)"迁移"到我的项目 (这是位字段项目、因此我修改了所有 lib 函数、如 CLB_configOutputLUT (base、 CLB_OUT0、TILE1_CFG_OUTLUT_0);更改为 Clb1LogicCfgRegs.clb_output_LUT_0.bit.IN0 = 8;

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

    我知道现在、我们可以通过私人消息继续讨论、以帮助解决问题。  一旦我们确定了其理由,我就会在这里公布这项决议。

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

    尊敬的 Bishlant:

    正如在我们一侧进行的测试、当使用 CLB 输出 XBAR 输出 CLB 的信号时、确实会设置 GPIO、请确保 CLB 模块连接了逻辑块设计  任何初始化代码。 将 GPIO 配置为从 CLB 输出信号时没有硬件限制。