器件型号: TMS320F28388D
您好:
我正在尝试将 CLB 逻辑块设置为 ECAP 函数。
我提到并遵循了 TI 提供的示例、并一直在制作我自己的 PJT。
- 输入信号匹配:实数外部脉冲信号-> GPIO5 -> INPUTXBAR7 -> AUXSIG0 -> CLB XBAR MUX17 -> CLB1_BASE CLB_IN0/1/2
- 按如下方式配置 TILE0
//--------------------------------------------------------------------------------------------------------------------------------
// TILE0
//--------------------------------------------------------------------------------------------------------------------------------
#define TILE0_PUBLE_MODE 0
#define TILE0_CFG_OUTLUT_0 0x0
#define TILE0_CFG_OUTLUT_1 0x0
#define TILE0_CFG_OUTLUT_2 0x0
#define TILE0_CFG_OUTLUT_3 0x0
#define TILE0_CFG_OUTLUT_4 0x0
#define TILE0_CFG_OUTLUT_5 0x0
#define TILE0_CFG_OUTLUT_6 0x0
#define TILE0_CFG_OUTLUT_7 0x0
#define TILE0_CFG_LUT4_IN0 0x1498
#define TILE0_CFG_LUT4_IN1 0x6b40
#define TILE0_CFG_LUT4_IN2 0x0
#define TILE0_CFG_LUT4_IN3 0x0
#define TILE0_CFG_LUT4_FN10 ((0x88880000)| 0x5555)
#define TILE0_CFG_LUT4_FN2 0x8888
#define TILE0_CFG_FSM_EXT_IN0 0x19
#define TILE0_CFG_FSM_EXT_IN1 0x0
#define TILE0_CFG_FSM_EXTRA_IN0 0x0
#define TILE0_CFG_FSM_EXTRA_IN1 0x0
#define TILE0_CFG_FSM_next_STATE_0 ((0xa5a50000)| 0x5a5a)
#define TILE0_CFG_FSM_next_State_1 (0x00000)| 0x0)
#define TILE0_CFG_FSM_next_STATE_2 ((0x00000)| 0x0)
#define TILE0_CFG_FSM_LUT_FN10 (0x00000)| 0xaaaa)
#define TILE0_CFG_FSM_LUT_LN2 0x0
#define TILE0_FSM_MISC_CONTROL 0x0
#define TILE0_CFG_COUNTER_RESET 0x359
#define TILE0_CFG_COUNTER_EVENT 0x0
#define TILE0_CFG_COUNTER_MODE_0 0xF8
#define TILE0_CFG_COUNTER_MODE_1 0x108
#define TILE0_CFG_TAP_SEL 0x0
#define TILE0_CFG_MISC_CONTROL (0x0 | TILE0_FSM_MISC_CONTROL)
#define TILE0_COUNTER_0_MATCH1_VAL 0
#define TILE0_COUNTER_0_MATCH2_VAL 0
#define TILE0_COUNTER_0_LOAD_VAL 0
#define TILE0_COUNTER_1_MATCH1_VAL 0
#define TILE0_COUNTER_1_MATCH2_VAL 0
#define TILE0_COUNTER_1_LOAD_VAL 0
#define TILE0_COUNTER_2_MATCH1_VAL 0
#define TILE0_COUNTER_2_MATCH2_VAL 0
#define TILE0_COUNTER_2_LOAD_VAL 0
#define TILE0_SPI_EN 0
#define TILE0_HLC_EVENT_SEL 0x5f2f
#define TILE0_HLC_R0_init 0
#define TILE0_HLC_R1_init 0
#define TILE0_HLC_R2_init 0
#define TILE0_HLC_R3_INIT 0
void initTILE0 (uint32_t base)
{
uint16_t i;
//
// 流水线模式
//
clb_disablePipelineMode (base);
//
// 输出 LUT
//
CLB_configOutputLUT (BASE、CLB_OUT0、TILE0_CFG_OUTLUT_0);
CLB_configOutputLUT (BASE、CLB_OUT1、TILE0_CFG_OUTLUT_1);
CLB_configOutputLUT (BASE、CLB_OUT2、TILE0_CFG_OUTLUT_2);
CLB_configOutputLUT (BASE、CLB_OUT3、TILE0_CFG_OUTLUT_3);
CLB_configOutputLUT (BASE、CLB_OUT4、TILE0_CFG_OUTLUT_4);
CLB_configOutputLUT (BASE、CLB_OUT5、TILE0_CFG_OUTLUT_5);
CLB_configOutputLUT (BASE、CLB_OUT6、TILE0_CFG_OUTLUT_6);
CLB_configOutputLUT (BASE、CLB_OUT7、TILE0_CFG_OUTLUT_7);
//
// AOC
//
CLB_configAOC (BASE、CLB_AOC0、TILE0_OUTPUT_COND_CTR_0);
CLB_configAOC (BASE、CLB_AOC1、TILE0_OUTPUT_COND_CTR_1);
CLB_configAOC (BASE、CLB_AOC2、TILE0_OUTPUT_COND_CTR_2);
CLB_configAOC (BASE、CLB_AOC3、TILE0_OUTPUT_COND_CTR_3);
CLB_configAOC (BASE、CLB_AOC4、TILE0_OUTPUT_COND_CTR_4);
CLB_configAOC (BASE、CLB_AOC5、TILE0_OUTPUT_COND_CTR_5);
CLB_configAOC (BASE、CLB_AOC6、TILE0_OUTPUT_COND_CTR_6);
CLB_configAOC (BASE、CLB_AOC7、TILE0_OUTPUT_COND_CTR_7);
//
// LUT 0 - 2 在 clb_config.h 中配置为宏;这些宏在中使用
// clb_selectLUT4Inputs 和 clb_configLUT4Function
//
//
// 查找表块 0 的公式 TILE0:!i0
//
// TILE0 的查找表块 1 的公式:I0&i1
//
// TILE0 的查找表块 2 的公式:I0&i1
//
// LUT 配置
//
CLB_selectLUT4Inputs (BASE、TILE0_CFG_LUT4_IN0、TILE0_CFG_LUT4_IN1、TILE0_CFG_LUT4_IN2、TILE0_CFG_LUT4_IN3);
CLB_configLUT4Function (BASE、TILE0_CFG_LUT4_FN10、TILE0_CFG_LUT4_FN2);
//
// FSM 0 - 2 在中配置
//
//
// TILE0 的有限状态机 0 的输出方程:S0
// TILE0 的有限状态机 0 的状态 0 输出方程:S0^e0
// TILE0 的有限状态机 0 的状态 1 输出方程:!(s0^e0)
//
//
// FSM
//
CLB_selectFSMInputs (BASE、TILE0_CFG_FSM_EXT_IN0、TILE0_CFG_FSM_EXT_IN1、TILE0_CFG_FSM_EXTRA_IN0、TILE0_CFG_FSM_EXTRA_IN1);
CLB_configFSMNextState (BASE、TILE0_CFG_FSM_NEXT_STATE_0、TILE0_CFG_FSM_NEXT_STATE_1、TILE0_CFG_FSM_NEXT_STATE_2);
CLB_configFSMLUTFunction (BASE、TILE0_CFG_FSM_LUT_FN10、TILE0_CFG_FSM_LUT_FN2);
//
//在中配置了计数器 0 - 2
//
//
// 计数器
//
CLB_selectCounterInputs (BASE、TILE0_CFG_COUNTER_RESET、TILE0_CFG_COUNTER_EVENT、TILE0_CFG_COUNTER_MODE_0、TILE0_CFG_COUNTER_MODE_1);
CLB_configMiscCtrlModes (BASE、TILE0_CFG_MISC_CONTROL);
CLB_configCounterLoadMatch (BASE、CLB_CTR0、TILE0_COUNTER_0_LOAD_VAL、TILE0_COUNTER_0_MATCH1_VAL、TILE0_COUNTER_0_MATCH2_VAL);
CLB_configCounterLoadMatch (BASE、CLB_CTR1、TILE0_COUNTER_1_LOAD_VAL、TILE0_COUNTER_1_MATCH1_VAL、TILE0_COUNTER_1_MATCH2_VAL);
CLB_configCounterLoadMatch (BASE、CLB_CTR2、TILE0_COUNTER_2_LOAD_VAL、TILE0_COUNTER_2_MATCH1_VAL、TILE0_COUNTER_2_MATCH2_VAL);
CLB_configCounterTapSelects (BASE、TILE0_CFG_TAP_SEL);
//
//在中配置了 HLC
//
//
// HLC
//
CLB_configHLCeventSelect (BASE、TILE0_HLC_EVENT_SEL);
CLB_setHLCRegisters (BASE、TILE0_HLC_R0_init、TILE0_HLC_R1_init、TILE0_HLC_R2_init、TILE0_HLC_R3_init);
适用于 (I = 0;I <= CLB_NUM_HLC_INSTR;I++)
{
CLB_programHLCInstruction (BASE、I、TILE0HLCInstr[i]);
}
}
但是、计数器无法正常工作、需要帮助进行改进。
如果有人能查看、请给我反馈。
此致、



