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无输出

Part Number: TMS320F280039

设计CLB如下,为了测试,OUT 0直接由OUTLUT_0的IN0(配置为1)输出,测试GPIO0输出电平是低电平(理应输出高电平),附上CLB配置步骤,还请帮忙看是不是遗漏了配置,谢谢!

1.InitPeripheralClocks()里使能CLB时钟:
    CpuSysRegs.PCLKCR17.bit.CLB1 = 1;
    CpuSysRegs.PCLKCR17.bit.CLB2 = 0;
    CpuSysRegs.PCLKCR17.bit.CLB3 = 0;
    CpuSysRegs.PCLKCR17.bit.CLB4 = 0;

2.CLB初始化
void initTILE1(void)
{
    //uint16_t i;

    EALLOW;

    //Board_init begin.........................................................
    //CLB_init.................................................................
    //CLB output en
    Clb1LogicCtrlRegs.CLB_OUT_EN = 0xFF;--尝试了0x00,0x0F等配置
    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
    Clb1LogicCtrlRegs.CLB_INPUT_FILTER.bit.SYNC0 = 1;   //enable sync for in0
    Clb1LogicCtrlRegs.CLB_INPUT_FILTER.bit.SYNC1 = 1;   //enable sync for in1
    Clb1LogicCtrlRegs.CLB_INPUT_FILTER.bit.FIN0 = 0;    //no filter
    Clb1LogicCtrlRegs.CLB_INPUT_FILTER.bit.FIN1 = 0;    //no filter
    Clb1LogicCtrlRegs.CLB_INPUT_FILTER.bit.PIPE0 = 0;   //CLB_disableInputPipelineMode
    Clb1LogicCtrlRegs.CLB_INPUT_FILTER.bit.PIPE1 = 0;   //CLB_disableInputPipelineMode

    //CLB_setGPREG
    Clb1LogicCtrlRegs.CLB_GP_REG.all = 0;
    //CLB_enableCLB
    Clb1LogicCtrlRegs.CLB_LOAD_EN.bit.GLOBAL_EN = 1;

    //CLB_OUTPUTXBAR_init......................................................
    ClbOutputXbarRegs.OUTPUTLATCHENABLE.bit.OUTPUT8 = 0;    //disable latch
    ClbOutputXbarRegs.OUTPUTINV.bit.OUTPUT8 = 0;            //don't invert
    ClbOutputXbarRegs.OUTPUT8MUX0TO15CFG.bit.MUX0 = 0;  // CLB1 out0
    ClbOutputXbarRegs.OUTPUT8MUXENABLE.bit.MUX0 = 1;
    ClbOutputXbarRegs.OUTPUTLATCHENABLE.bit.OUTPUT7 = 0;    //disable latch
    ClbOutputXbarRegs.OUTPUTINV.bit.OUTPUT7 = 0;            //don't invert
    ClbOutputXbarRegs.OUTPUT7MUX0TO15CFG.bit.MUX2 = 0;  // CLB1 out2
    ClbOutputXbarRegs.OUTPUT7MUXENABLE.bit.MUX2 = 1;

    //CLBXBAR_init.............................................................
    // AUXSIG0 and AUXSIG1 configure
    ClbXbarRegs.AUXSIG0MUX0TO15CFG.bit.MUX6 = 0;    //CMPSS4_CTRIPH
    ClbXbarRegs.AUXSIG1MUX0TO15CFG.bit.MUX7 = 0;    //CMPSS4_CTRIPL
    ClbXbarRegs.AUXSIG0MUXENABLE.bit.MUX6 = 1;
    ClbXbarRegs.AUXSIG1MUXENABLE.bit.MUX7 = 1;
    //Board_init end...........................................................

    //
    //  Disable Pipeline Mode
    //
    // CLB_disablePipelineMode(base);
    Clb1LogicCtrlRegs.CLB_LOAD_EN.bit.PIPELINE_EN = 0;
    //
    //  Output LUT
    //
    //
    //  Equation for Output Look-Up Table Block 0 for TILE1: i0
    //
    //CLB_configOutputLUT(base, CLB_OUT0, TILE1_CFG_OUTLUT_0);
    Clb1LogicCfgRegs.CLB_OUTPUT_LUT_0.bit.IN0 = 8;  //OUT 0输出1

    //
    //  Equation for Output Look-Up Table Block 1 for TILE1: i0
    //
    //CLB_configOutputLUT(base, CLB_OUT1, TILE1_CFG_OUTLUT_1);
    Clb1LogicCfgRegs.CLB_OUTPUT_LUT_1.bit.IN0 = 4;  //FSM_0 STATE_BIT_0

    //
    //  Equation for Output Look-Up Table Block 2 for TILE1: i0
    //
    //CLB_configOutputLUT(base, CLB_OUT2, TILE1_CFG_OUTLUT_2);
    Clb1LogicCfgRegs.CLB_OUTPUT_LUT_2.bit.IN0 = 25;  //FSM_1 STATE_BIT_0

    //
    //  Equation for Output Look-Up Table Block 3 for TILE1: i0
    //
    //CLB_configOutputLUT(base, CLB_OUT3, TILE1_CFG_OUTLUT_3);
    Clb1LogicCfgRegs.CLB_OUTPUT_LUT_3.bit.IN0 = 12;  //FSM_1 STATE_BIT_0


    //CLB_configOutputLUT(base, CLB_OUT4, TILE1_CFG_OUTLUT_4);
    Clb1LogicCfgRegs.CLB_OUTPUT_LUT_4.bit.IN0 = 8;
    //CLB_configOutputLUT(base, CLB_OUT5, TILE1_CFG_OUTLUT_5);
    
    //CLB_configOutputLUT(base, CLB_OUT6, TILE1_CFG_OUTLUT_6);

    //CLB_configOutputLUT(base, CLB_OUT7, TILE1_CFG_OUTLUT_7);

    //
    //  AOC
    //
    //CLB_configAOC(base, CLB_AOC0, TILE1_OUTPUT_COND_CTR_0);
    //CLB_configAOC(base, CLB_AOC1, TILE1_OUTPUT_COND_CTR_1);
    //CLB_configAOC(base, CLB_AOC2, TILE1_OUTPUT_COND_CTR_2);
    //CLB_configAOC(base, CLB_AOC3, TILE1_OUTPUT_COND_CTR_3);
    //CLB_configAOC(base, CLB_AOC4, TILE1_OUTPUT_COND_CTR_4);
    //CLB_configAOC(base, CLB_AOC5, TILE1_OUTPUT_COND_CTR_5);
    //CLB_configAOC(base, CLB_AOC6, TILE1_OUTPUT_COND_CTR_6);
    //CLB_configAOC(base, CLB_AOC7, TILE1_OUTPUT_COND_CTR_7);

    //
    // LUT 0 - 2 are configured as macros in clb_config.h; these macros are used in
    // CLB_selectLUT4Inputs and CLB_configLUT4Function
    //

    //
    //  LUT Configuration
    //
    //CLB_selectLUT4Inputs(base, TILE1_CFG_LUT4_IN0, TILE1_CFG_LUT4_IN1, TILE1_CFG_LUT4_IN2, TILE1_CFG_LUT4_IN3);
    //CLB_configLUT4Function(base, TILE1_CFG_LUT4_FN10, TILE1_CFG_LUT4_FN2);

    //
    // FSM 0 - 2 are configured in <file>
    //
    //  State 0 output equation for Finite State Machine 0 for TILE1: ((~s0)&e0)|(s0&e1)
    //  User Description for Finite State Machine 0 for TILE1
    /*
        complementary ePWMA
    */
    //  State 0 output equation for Finite State Machine 1 for TILE1: ((~s0)&e0)|(s0&(~e1))
    //  User Description for Finite State Machine 1 for TILE1
    /*
        complementary ePWMB
    */

    //
    //  FSM
    //
    //CLB_selectFSMInputs(base, TILE1_CFG_FSM_EXT_IN0, TILE1_CFG_FSM_EXT_IN1, TILE1_CFG_FSM_EXTRA_IN0, TILE1_CFG_FSM_EXTRA_IN1);
    //CLB_configFSMNextState(base, TILE1_CFG_FSM_NEXT_STATE_0, TILE1_CFG_FSM_NEXT_STATE_1, TILE1_CFG_FSM_NEXT_STATE_2);
    //CLB_configFSMLUTFunction(base, TILE1_CFG_FSM_LUT_FN10, TILE1_CFG_FSM_LUT_FN2);

    Clb1LogicCfgRegs.CLB_FSM_EXTERNAL_IN0.all = TILE1_CFG_FSM_EXT_IN0;
    Clb1LogicCfgRegs.CLB_FSM_EXTERNAL_IN1.all = TILE1_CFG_FSM_EXT_IN1;
    Clb1LogicCfgRegs.CLB_FSM_EXTRA_IN0.all = TILE1_CFG_FSM_EXTRA_IN0;
    Clb1LogicCfgRegs.CLB_FSM_EXTRA_IN1.all = TILE1_CFG_FSM_EXTRA_IN1;
    Clb1LogicCfgRegs.CLB_FSM_NEXT_STATE_0.all = TILE1_CFG_FSM_NEXT_STATE_0;
    Clb1LogicCfgRegs.CLB_FSM_NEXT_STATE_1.all = TILE1_CFG_FSM_NEXT_STATE_1;
    Clb1LogicCfgRegs.CLB_FSM_NEXT_STATE_2.all = TILE1_CFG_FSM_NEXT_STATE_2;
    Clb1LogicCfgRegs.CLB_FSM_LUT_FN1_0.all = TILE1_CFG_FSM_LUT_FN10;
    Clb1LogicCfgRegs.CLB_FSM_LUT_FN2.all = TILE1_CFG_FSM_LUT_FN2;
    //
    // Counter 0 - 2 are configured in <file>
    //
    //  User Description for Counter 0 for TILE1
    /*
        reset counter with input 0(CMPSS4 TRIPH) and load with input 1(CMPSS4 TRIP-
		L)
    */
    //  User Description for Counter 1 for TILE1
    /*
        PWMA
    */
    //  User Description for Counter 2 for TILE1
    /*
        PWMB
    */

    //
    //  Counters
    //
    //CLB_selectCounterInputs(base, TILE1_CFG_COUNTER_RESET, TILE1_CFG_COUNTER_EVENT, TILE1_CFG_COUNTER_MODE_0, TILE1_CFG_COUNTER_MODE_1);
    //CLB_configMiscCtrlModes(base, TILE1_CFG_MISC_CONTROL);
    //CLB_configCounterLoadMatch(base, CLB_CTR0, TILE1_COUNTER_0_LOAD_VAL, TILE1_COUNTER_0_MATCH1_VAL, TILE1_COUNTER_0_MATCH2_VAL);
    //CLB_configCounterLoadMatch(base, CLB_CTR1, TILE1_COUNTER_1_LOAD_VAL, TILE1_COUNTER_1_MATCH1_VAL, TILE1_COUNTER_1_MATCH2_VAL);
    //CLB_configCounterLoadMatch(base, CLB_CTR2, TILE1_COUNTER_2_LOAD_VAL, TILE1_COUNTER_2_MATCH1_VAL, TILE1_COUNTER_2_MATCH2_VAL);
    //CLB_configCounterTapSelects(base, TILE1_CFG_TAP_SEL);

    Clb1LogicCfgRegs.CLB_COUNT_RESET.all = TILE1_CFG_COUNTER_RESET;
    Clb1LogicCfgRegs.CLB_COUNT_EVENT.all = TILE1_CFG_COUNTER_EVENT;
    Clb1LogicCfgRegs.CLB_COUNT_MODE_0.all = TILE1_CFG_COUNTER_MODE_0;
    Clb1LogicCfgRegs.CLB_COUNT_MODE_1.all = TILE1_CFG_COUNTER_MODE_1;
    Clb1LogicCfgRegs.CLB_MISC_CONTROL.all = TILE1_CFG_MISC_CONTROL;

    Clb1LogicCtrlRegs.CLB_LOAD_ADDR.all = CLB_ADDR_COUNTER_0_LOAD;
    Clb1LogicCtrlRegs.CLB_LOAD_DATA = TILE1_COUNTER_0_LOAD_VAL;
    Clb1LogicCtrlRegs.CLB_LOAD_EN.bit.LOAD_EN = 1;
    Clb1LogicCtrlRegs.CLB_LOAD_ADDR.all = CLB_ADDR_COUNTER_0_MATCH1;
    Clb1LogicCtrlRegs.CLB_LOAD_DATA = TILE1_COUNTER_0_MATCH1_VAL;
    Clb1LogicCtrlRegs.CLB_LOAD_EN.bit.LOAD_EN = 1;
    Clb1LogicCtrlRegs.CLB_LOAD_ADDR.all = CLB_ADDR_COUNTER_0_MATCH2;
    Clb1LogicCtrlRegs.CLB_LOAD_DATA = TILE1_COUNTER_0_MATCH2_VAL;
    Clb1LogicCtrlRegs.CLB_LOAD_EN.bit.LOAD_EN = 1;

    Clb1LogicCtrlRegs.CLB_LOAD_ADDR.all = CLB_ADDR_COUNTER_1_LOAD;
    Clb1LogicCtrlRegs.CLB_LOAD_DATA = TILE1_COUNTER_1_LOAD_VAL;
    Clb1LogicCtrlRegs.CLB_LOAD_EN.bit.LOAD_EN = 1;
    Clb1LogicCtrlRegs.CLB_LOAD_ADDR.all = CLB_ADDR_COUNTER_1_MATCH1;
    Clb1LogicCtrlRegs.CLB_LOAD_DATA = TILE1_COUNTER_1_MATCH1_VAL;
    Clb1LogicCtrlRegs.CLB_LOAD_EN.bit.LOAD_EN = 1;
    Clb1LogicCtrlRegs.CLB_LOAD_ADDR.all = CLB_ADDR_COUNTER_1_MATCH2;
    Clb1LogicCtrlRegs.CLB_LOAD_DATA = TILE1_COUNTER_1_MATCH2_VAL;
    Clb1LogicCtrlRegs.CLB_LOAD_EN.bit.LOAD_EN = 1;

    Clb1LogicCtrlRegs.CLB_LOAD_ADDR.all = CLB_ADDR_COUNTER_2_LOAD;
    Clb1LogicCtrlRegs.CLB_LOAD_DATA = TILE1_COUNTER_2_LOAD_VAL;
    Clb1LogicCtrlRegs.CLB_LOAD_EN.bit.LOAD_EN = 1;
    Clb1LogicCtrlRegs.CLB_LOAD_ADDR.all = CLB_ADDR_COUNTER_2_MATCH1;
    Clb1LogicCtrlRegs.CLB_LOAD_DATA = TILE1_COUNTER_2_MATCH1_VAL;
    Clb1LogicCtrlRegs.CLB_LOAD_EN.bit.LOAD_EN = 1;
    Clb1LogicCtrlRegs.CLB_LOAD_ADDR.all = CLB_ADDR_COUNTER_2_MATCH2;
    Clb1LogicCtrlRegs.CLB_LOAD_DATA = TILE1_COUNTER_2_MATCH2_VAL;
    Clb1LogicCtrlRegs.CLB_LOAD_EN.bit.LOAD_EN = 1;


    //CMPSS output to GPIO for test if CMPSS works well
    OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX6 = 0; //CMPSS4_CTRIPOUTH
    OutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX6 = 1;
    OutputXbarRegs.OUTPUT2MUX0TO15CFG.bit.MUX7 = 0; //CMPSS4_CTRIPOUTL
    OutputXbarRegs.OUTPUT2MUXENABLE.bit.MUX7 = 1;

    //
    // 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;
}

3.GPIO MUX
    EALLOW;
    GpioCtrlRegs.GPAGMUX1.bit.GPIO0 = 2;
    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 3;    // Configure GPIO0 as CLB output

    GpioCtrlRegs.GPAGMUX1.bit.GPIO1 = 2;
    GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 3;     // Configure GPIO1 as CLB output
    EDIS;