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.

[参考译文] TMS320F280037C:CLB 文档

Guru**** 2611705 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1568044/tms320f280037c-clb-documentation

器件型号:TMS320F280037C
Thread 中讨论的其他器件:SysConfigC2000WARE

工具/软件:

如 SPRIW9C 中的图 32-47 所示、CLB_HLC_EVEMT_SEL 寄存器会将您定向到 静态开关块输出多路复用器表以进行字段定义。  我找不到具有该名称的表。 有人知道它在哪里吗?

我在将经过滤波的 GPIO 输入进入 HLC 时遇到问题。  我使用 SPRACL3 第 9.1 节末尾概述的步骤配置输入信号路径、并使用 syscfg 将 HLC 事件输入设置为边界输入 0、1 和 2。  

GPIO_setAnalogMode(252U, GPIO_ANALOG_DISABLED);
    GPIO_setPinConfig(GPIO_252_GPIO252);
    GPIO_setMasterCore(252U, GPIO_CORE_CPU1);
    GPIO_setDirectionMode(252U, GPIO_DIR_MODE_IN);
    GPIO_setPadConfig(252U, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(252U, GPIO_QUAL_ASYNC);
    //CLB
    XBAR_setInputPin(INPUTXBAR_BASE,XBAR_INPUT1, 252U); //use xbar input to route to CLB
    // Configure CLB-XBAR AUXSIG0 as INPUT1
    XBAR_setCLBMuxConfig(XBAR_AUXSIG0, XBAR_CLB_MUX01_INPUTXBAR1);
    XBAR_enableCLBMux(XBAR_AUXSIG0, XBAR_MUX01);
    CLB_configLocalInputMux(CLB1_BASE, CLB_IN0, CLB_LOCAL_IN_MUX_GLOBAL_IN);
    CLB_configGlobalInputMux(CLB1_BASE, CLB_IN0, CLB_GLOBAL_IN_MUX_CLB_AUXSIG0);
    CLB_configGPInputMux(CLB1_BASE, CLB_IN0, CLB_GP_IN_MUX_EXTERNAL);

SYSCFG 定义了 TILE0_HLC_EVENT_SEL = 0x6b38。  这会将事件 0 设置为 24、根据我能找到的任何表、这没有太大意义。

谢谢

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

    表 32.5 在标题为“静态开关块“的第 32.4.1 节中标记为“输出表“、显示正确的表。

    标记为“输入表“的图 32.6 列出了每个子模块的输入、 但未显示 HLC 子模块。  

    第 32.4 节中的图 32.10“CLB 逻辑块子模块“包含一个标记为“可重新配置的开关块“的块、但不包含“逻辑开关块“。  第 32.4 节中的文本是指“静态开关块“、它“在所有块之间提供动态连接“、但未在图 32.10 中提及“可重新配置的开关块“。   

    我现在假设“可重新配置的开关块“与“静态开关块“相同、具有一个不可重新配置的 32 位宽输出总线。  每个块的输入选择由块输入端的多路复用器提供、每个输入都有自己的多路复用器。  HLC 可以访问与表 32.6 中列出的其他子模块相同的信号、并连接到事件 1-4。

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

    另一个相关问题。

    图 32-10 显示了 HLC 和 CLB Tile 子模块之间的未标记双向总线。  

    在第 32.4.7 节“高级控制器 (HLC)“中、HLC 的输入总线被标记为“包含所有其他电芯子块输出和外部输入的事件总线“。  

    图 32-19 中的总线是否与图 32-10 中的开关块输出相同?

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

    FWIW 我只需要 3 个 GPIO 输入、滤波器在所有转换(从高电平到低电平或从低电平到高电平)时输出脉冲、路由到 HLC、并在每次转换时触发中断。 看起来应该相当简单、但我没有收到任何中断。  我假设输入布线不正确、但可能还有其他问题。   

    谢谢

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

    我认为 静态开关块输出多路复用器表是指 F28003x 技术参考手册中的“CLB 输出信号多路复用器表“、为此致歉。

    您能否展示为生成此代码而选择的 SysConfig GUI 选项?

    谢谢您、

    Luke

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

    请稍候、将所有内容放回到 SysConfig 中。  我从 SysConfig 中删除了所有输入路由、并尝试将 clb_ex11_interrupt_tag 及其文档用作模板。   

    我应该提到的是 SPRUIW9C–2021 年 10 月–2024 年 3 月修订技术参考手册。  

    谢谢

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

    CLBInputXBar

    CLB 输入

    CLBInterrupt

    CLB HLC

    输入引脚在代码中设置

    GPIO_setPinConfig (GPIO_252_GPIO252);
    GPIO_setAnalogMode (252U、GPIO_ANALOG_DISABLED);
    GPIO_setDirectionMode (252U、GPIO_DIR_MODE_IN);
    GPIO_setPadConfig (252U、GPIO_PIN_TYPE_STD);
    GPIO_setControllerCore (252U、GPIO_CORE_CPU1);
    GPIO_setQualificationMode (252U、GPIO_QUAL_SYNC);//was 异步

    谢谢

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

    您能否确保在 CLB GUI 中选择“Initialize TILE“选项、并在左侧面板上为要使用的每个 AIO 添加 AIO(您的配置中似乎缺少此功能)? 另外、请仔细检查信号是否会发送到您选择的正确 AIO。

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

    初始化图块被选中,我已经确认它在 Board_Init () 中被调用。  我今天早上在调试器中单步讲解。  引脚配置位于代码中。  在 SysConfig 的屏幕截图之后添加了 AIO252 引脚配置代码。   

    以下是设置 AIO 的代码

    void VavleMotorHallsInit(void)
    {
        // ECAP1 = Valve Motor Hall A   || Pin 32 || AIO252 || XBar Input 4 ||
        GPIO_setPinConfig(GPIO_252_GPIO252);
        GPIO_setAnalogMode(252U, GPIO_ANALOG_DISABLED);
        GPIO_setDirectionMode(252U, GPIO_DIR_MODE_IN);
        GPIO_setPadConfig(252U, GPIO_PIN_TYPE_STD);
        GPIO_setControllerCore(252U, GPIO_CORE_CPU1);
        GPIO_setQualificationMode(252U, GPIO_QUAL_SYNC); //was async
    //    //CLB
    //    XBAR_setInputPin(INPUTXBAR_BASE,XBAR_INPUT1, 252U); //use xbar input to route to CLB
    //    // Configure CLB-XBAR AUXSIG0 as INPUT1
    //    XBAR_setCLBMuxConfig(XBAR_AUXSIG0, XBAR_CLB_MUX01_INPUTXBAR1);
    //    XBAR_enableCLBMux(XBAR_AUXSIG0, XBAR_MUX01);
    //    CLB_configLocalInputMux(CLB1_BASE, CLB_IN0, CLB_LOCAL_IN_MUX_GLOBAL_IN);
    //    CLB_configGlobalInputMux(CLB1_BASE, CLB_IN0, CLB_GLOBAL_IN_MUX_CLB_AUXSIG0);
    //    CLB_configGPInputMux(CLB1_BASE, CLB_IN0, CLB_GP_IN_MUX_EXTERNAL);
    
    
        // ECAP2 = Valve Motor Hall B   || Pin 31 || AIO245 || XBar Input 5 ||
        GPIO_setAnalogMode(245U, GPIO_ANALOG_DISABLED);
        GPIO_setPinConfig(GPIO_245_GPIO245);
        GPIO_setControllerCore(245U, GPIO_CORE_CPU1);
        GPIO_setDirectionMode(245U, GPIO_DIR_MODE_IN);
        GPIO_setPadConfig(245U, GPIO_PIN_TYPE_STD);
        GPIO_setQualificationMode(245U, GPIO_QUAL_ASYNC);
    //    //CLB
    //    XBAR_setInputPin(INPUTXBAR_BASE,XBAR_INPUT2, 245U); //use xbar input to route to CLB
    //    // Configure CLB-XBAR AUXSIG0 as INPUT1
    //    XBAR_setCLBMuxConfig(XBAR_AUXSIG1, XBAR_CLB_MUX01_INPUTXBAR1);
    //    XBAR_enableCLBMux(XBAR_AUXSIG1, XBAR_MUX02);
    //    CLB_configLocalInputMux(CLB1_BASE, CLB_IN1, CLB_LOCAL_IN_MUX_GLOBAL_IN);
    //    CLB_configGlobalInputMux(CLB1_BASE, CLB_IN1, CLB_GLOBAL_IN_MUX_CLB_AUXSIG1);
    //    CLB_configGPInputMux(CLB1_BASE, CLB_IN1, CLB_GP_IN_MUX_EXTERNAL);
    
    
        //ECAP3 = Valve Motor Hall C   || Pin 30 || AIO251 || XBar Input 6 ||
        GPIO_setAnalogMode(251U, GPIO_ANALOG_DISABLED);
        GPIO_setPinConfig(GPIO_251_GPIO251);
        GPIO_setControllerCore(251U, GPIO_CORE_CPU1);
        GPIO_setDirectionMode(251U, GPIO_DIR_MODE_IN);
        GPIO_setPadConfig(251U, GPIO_PIN_TYPE_STD);
        GPIO_setQualificationMode(251U, GPIO_QUAL_ASYNC);
    //    //CLB
    //    XBAR_setInputPin(INPUTXBAR_BASE,XBAR_INPUT3, 251U); //use xbar input to route to CLB
    //    // Configure CLB-XBAR AUXSIG2 as INPUT3
    //    XBAR_setCLBMuxConfig(XBAR_AUXSIG2, XBAR_CLB_MUX01_INPUTXBAR1);
    //    XBAR_enableCLBMux(XBAR_AUXSIG2, XBAR_MUX03);
    //    CLB_configLocalInputMux(CLB1_BASE, CLB_IN2, CLB_LOCAL_IN_MUX_GLOBAL_IN);
    //    CLB_configGlobalInputMux(CLB1_BASE, CLB_IN2, CLB_GLOBAL_IN_MUX_CLB_AUXSIG2);
    //    CLB_configGPInputMux(CLB1_BASE, CLB_IN2, CLB_GP_IN_MUX_EXTERNAL);
    
        //myCLB1_init();
        //initTILE0(CLB1_BASE);
        //Interrupt_register(INT_CLB1, &clb1ISR);
        Board_init();
    }

    这是来自 sysconfig\board.c 的代码

    void Board_init()
    {
    	EALLOW;
    
    	PinMux_init();
    	CLB_init();
    	CLB_INPUTXBAR_init();
    	INTERRUPT_init();
    
    	EDIS;
    }
    
    //*****************************************************************************
    //
    // PINMUX Configurations
    //
    //*****************************************************************************
    void PinMux_init()
    {
    	//
    	// PinMux for modules assigned to CPU1
    	//
    	
    
    }
    
    //*****************************************************************************
    //
    // CLB Configurations
    //
    //*****************************************************************************
    void CLB_init(){
    	myCLB1_init();
    }
    
    void myCLB1_init(){
    	CLB_enableNMI(myCLB1_BASE);
    	CLB_setOutputMask(myCLB1_BASE,
    				(0UL << 0UL), true);
    	CLB_enableOutputMaskUpdates(myCLB1_BASE);
    	//
    	// myCLB1 SPI Buffer Configuration
    	//
    	CLB_disableSPIBufferAccess(myCLB1_BASE);
    	CLB_configSPIBufferLoadSignal(myCLB1_BASE, 0);
    	CLB_configSPIBufferShift(myCLB1_BASE, 0);
    	//
    	// myCLB1 CLB_IN0 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
    	//
    	CLB_configLocalInputMux(myCLB1_BASE, CLB_IN0, CLB_LOCAL_IN_MUX_INPUT1);
    	CLB_configGlobalInputMux(myCLB1_BASE, CLB_IN0, CLB_GLOBAL_IN_MUX_EPWM1A);
    	CLB_configGPInputMux(myCLB1_BASE, CLB_IN0, CLB_GP_IN_MUX_EXTERNAL);
    	CLB_enableSynchronization(myCLB1_BASE, CLB_IN0);
    	CLB_selectInputFilter(myCLB1_BASE, CLB_IN0, CLB_FILTER_ANY_EDGE);
    	CLB_disableInputPipelineMode(myCLB1_BASE, CLB_IN0);
    	//
    	// myCLB1 CLB_IN1 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
    	//
    	CLB_configLocalInputMux(myCLB1_BASE, CLB_IN1, CLB_LOCAL_IN_MUX_INPUT2);
    	CLB_configGlobalInputMux(myCLB1_BASE, CLB_IN1, CLB_GLOBAL_IN_MUX_EPWM1A);
    	CLB_configGPInputMux(myCLB1_BASE, CLB_IN1, CLB_GP_IN_MUX_EXTERNAL);
    	CLB_enableSynchronization(myCLB1_BASE, CLB_IN1);
    	CLB_selectInputFilter(myCLB1_BASE, CLB_IN1, CLB_FILTER_ANY_EDGE);
    	CLB_disableInputPipelineMode(myCLB1_BASE, CLB_IN1);
    	//
    	// myCLB1 CLB_IN2 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
    	//
    	CLB_configLocalInputMux(myCLB1_BASE, CLB_IN2, CLB_LOCAL_IN_MUX_INPUT3);
    	CLB_configGlobalInputMux(myCLB1_BASE, CLB_IN2, CLB_GLOBAL_IN_MUX_EPWM1A);
    	CLB_configGPInputMux(myCLB1_BASE, CLB_IN2, CLB_GP_IN_MUX_EXTERNAL);
    	CLB_enableSynchronization(myCLB1_BASE, CLB_IN2);
    	CLB_selectInputFilter(myCLB1_BASE, CLB_IN2, CLB_FILTER_ANY_EDGE);
    	CLB_disableInputPipelineMode(myCLB1_BASE, CLB_IN2);
    	CLB_setGPREG(myCLB1_BASE,0);
    
    	initTILE0(myCLB1_BASE);
    	CLB_enableCLB(myCLB1_BASE);
    }
    
    //*****************************************************************************
    //
    // CLBINPUTXBAR Configurations
    //
    //*****************************************************************************
    void CLB_INPUTXBAR_init(){
    	myCLBINPUTXBARINPUT1_init();
    	myCLBINPUTXBARINPUT2_init();
    	myCLBINPUTXBARINPUT3_init();
    }
    
    void myCLBINPUTXBARINPUT1_init(){
    	XBAR_setInputPin(CLBINPUTXBAR_BASE, myCLBINPUTXBARINPUT1_INPUT, myCLBINPUTXBARINPUT1_SOURCE);
    }
    void myCLBINPUTXBARINPUT2_init(){
    	XBAR_setInputPin(CLBINPUTXBAR_BASE, myCLBINPUTXBARINPUT2_INPUT, myCLBINPUTXBARINPUT2_SOURCE);
    }
    void myCLBINPUTXBARINPUT3_init(){
    	XBAR_setInputPin(CLBINPUTXBAR_BASE, myCLBINPUTXBARINPUT3_INPUT, myCLBINPUTXBARINPUT3_SOURCE);
    }
    
    //*****************************************************************************
    //
    // INTERRUPT Configurations
    //
    //*****************************************************************************
    void INTERRUPT_init(){
    	
    	// Interrupt Settings for INT_myCLB1
    	// ISR need to be defined for the registered interrupts
    	Interrupt_register(INT_myCLB1, &INT_myCLB1_ISR);
    	Interrupt_enable(INT_myCLB1);
    }
    

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

    我更改了将三个 AIO 引脚连接到 XINT 的程序、以确认硬件是否按预期工作、并且未发现任何问题。  所有三个输入都将触发 XINT。

    谢谢

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

    嘿 DTruex、

    听起来此问题已解决、我将关闭此主题。

    谢谢您、

    Luke

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

    不、它没有解决。  我仍然希望使用 CLB 触发这些中断。  我只提到了 XINT 可以确认定制 PCB 是否按预期工作。  很抱歉混淆。

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

    嗨、Luke、

    有人正在处理这个问题吗?  我的想法已经用完了。  我需要决定 是否应该注销此版本的硬件并迁移到另一个处理器。  

    谢谢

    Don

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

    尊敬的 DTruex:

    对延迟的回复表示歉意。 您是否可以尝试在选择 CLB 时钟作为参数的情况下调用 SysCtl_disablePeripheral 函数(通过按住 Ctrl 并点击函数名称来参阅 SysCtl_disablePeripheral 定义。 在 Board_init 之前调用此命令、然后在 Board init 之后再次调用 SysCtl_enablePeripheral、同时使用 CLB 时钟作为您的参数。

    此外、您是否可以尝试对 C2000Ware 中的 CLB 示例进行测试、以确认它们是否按预期运行? 您可以在这些示例之一之后对 main 函数进行建模。

    谢谢您、

    Luke

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

    Luke、

    我现在需要放弃这个。  我删除了旧版本的 CCS 和 C2000Ware、因为在强制更新 Win11 后事情会不断崩溃、并安装了 CCS 20 和 C2000 6。  由于 ELF CLA 代码不适合存储器、因此我必须重新编译 COFF 格式的 driverLib。 若要构建示例、我需要在 ELF 中重新编译 driverLib 或将示例更改为 COFF、但 CCS20 没有在 ELF 和 COFF 之间切换的选项。 旧版本的 CCS 似乎无法打开 CCS20 中保存的工程、因此无法下载旧版本的 CCS。 我需要在 CCS20 中试用标志。   

    CCS 20 调试器似乎无法从 CLA 消息 RAM 中读取、因此我可能必须重新安装旧版本的 CCS 并重新开始使用新工程。

    我可能会在将来有更多时间的时候看这一点。

    感谢你的帮助。     

    Don

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

    尊敬的 Don:

    理解、如果您继续处理此问题、请告诉我、我可以提供更及时的帮助。

    谢谢您、

    Luke