c2000ware-core-sdk/driverlib/.meta/epwm/modules/epwm_xcmpmode.js
2023-06-24 11:35:38 +05:30

926 lines
40 KiB
JavaScript

let Common = system.getScript("/driverlib/Common.js");
let Pinmux = system.getScript("/driverlib/pinmux.js");
let device_driverlib_peripheral =
system.getScript("/driverlib/device_driverlib_peripherals/" +
Common.getDeviceName().toLowerCase() + "_epwm.js");
var shadowRegisterReloadNumberofTimesOptions = [
{ name : "1", displayName: "One Period"},
{ name : "2", displayName: "Two Periods" },
{ name : "3", displayName: "Three Periods"},
{ name : "4", displayName: "Four Periods"},
{ name : "5", displayName: "Five Periods"},
{ name : "6", displayName: "Six Periods"},
{ name : "7", displayName: "Seven Periods"},
{ name : "8", displayName: "Eight Periods"}
]
function generateActiveRegistersConfig(reg_name)
{
let xcmp_RegArr = device_driverlib_peripheral.EPWM_XCMPReg.slice(0, 8);
let xcmp_RegConfig = [];
for(var xcmp_Reg_Index in xcmp_RegArr)
{
xcmp_RegConfig = xcmp_RegConfig.concat(
{
name: "epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", ""),
displayName: xcmp_RegArr[xcmp_Reg_Index].displayName.replace("_ACTIVE", " Active "),
description: "Set Active Register to a value",
hidden: true,
default: 0,
}
)
}
return xcmp_RegConfig
}
function generateShadowRegisters1Config(reg_name)
{
let xcmp_RegArr = device_driverlib_peripheral.EPWM_XCMPReg.slice(9, 17);
let xcmp_RegConfig = [];
for(var xcmp_Reg_Index in xcmp_RegArr)
{
xcmp_RegConfig = xcmp_RegConfig.concat(
{
name: "epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", ""),
displayName: xcmp_RegArr[xcmp_Reg_Index].displayName.replace("_SHADOW", " Shadow "),
description: "Set Active Register to a value",
hidden: true,
default: 0,
}
)
}
return xcmp_RegConfig
}
function generateShadowRegisters2Config(reg_name)
{
let xcmp_RegArr = device_driverlib_peripheral.EPWM_XCMPReg.slice(18, 26);
let xcmp_RegConfig = [];
for(var xcmp_Reg_Index in xcmp_RegArr)
{
xcmp_RegConfig = xcmp_RegConfig.concat(
{
name: "epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", ""),
displayName: xcmp_RegArr[xcmp_Reg_Index].displayName.replace("_SHADOW", " Shadow "),
description: "Set Active Register to a value",
hidden: true,
default: 0,
}
)
}
return xcmp_RegConfig
}
function generateShadowRegisters3Config(reg_name)
{
let xcmp_RegArr = device_driverlib_peripheral.EPWM_XCMPReg.slice(27, 35);
let xcmp_RegConfig = [];
for(var xcmp_Reg_Index in xcmp_RegArr)
{
xcmp_RegConfig = xcmp_RegConfig.concat(
{
name: "epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", ""),
displayName: xcmp_RegArr[xcmp_Reg_Index].displayName.replace("_SHADOW", " Shadow "),
description: "Set Active Register to a value",
hidden: true,
default: 0,
}
)
}
return xcmp_RegConfig
}
// Generate XAQ events
function generateXAQConfig(reg_name, EPWMxAorB)
{
let group_xaq = [];
if(reg_name == "XCMPA"){
for(var xcmp_set_index in device_driverlib_peripheral.EPWM_XCMP)
{
let xcmp_aq_event_config = [];
let xcmp_set = device_driverlib_peripheral.EPWM_XCMP[xcmp_set_index];
for(var xcmp_aq_events_index in device_driverlib_peripheral.EPWM_XCMPActionQualifierOutputEvent)
{
let xcmp_aq_events = device_driverlib_peripheral.EPWM_XCMPActionQualifierOutputEvent[xcmp_aq_events_index];
xcmp_aq_event_config = xcmp_aq_event_config.concat([
{
name: reg_name + "_" + xcmp_set.name.replace("EPWM_XCMP_", "") + xcmp_aq_events.name.replace("EPWM_AQ", ""),
displayName: xcmp_aq_events.displayName,
description: "",
longDescription: "",
hidden: true,
default: device_driverlib_peripheral.EPWM_ActionQualifierOutput[0].name,
options: device_driverlib_peripheral.EPWM_ActionQualifierOutput
}
])
}
group_xaq = group_xaq.concat(
{
name: "GROUP_XAQ_" + EPWMxAorB + "_" + reg_name + "_" + xcmp_set.name,
displayName: xcmp_set.displayName,
description: "",
longDescription: "When XCMP mode is enabled, AQ can now have up to three shadow buffer levels with their own AQ events",
config: xcmp_aq_event_config
}
)
}
}else if (reg_name == "XCMPB"){
for(var xcmp_set_index in device_driverlib_peripheral.EPWM_XCMP)
{
let xcmp_set = device_driverlib_peripheral.EPWM_XCMP[xcmp_set_index];
let xcmp_aq_event_config = [];
// Grab only the action qualifiers for XCMP5-8 when XCMP is split between cmpb and cmpa
let xcmpb_options = device_driverlib_peripheral.EPWM_XCMPActionQualifierOutputEvent.slice(4,9);
for(var xcmp_aq_events_index in xcmpb_options)
{
let xcmp_aq_events = xcmpb_options[xcmp_aq_events_index];
xcmp_aq_event_config = xcmp_aq_event_config.concat([
{
name: reg_name + "_" + xcmp_set.name.replace("EPWM_XCMP_", "") + xcmp_aq_events.name.replace("EPWM_AQ", ""),
displayName: xcmp_aq_events.displayName,
description: "",
longDescription: "",
hidden: true,
default: device_driverlib_peripheral.EPWM_ActionQualifierOutput[0].name,
options: device_driverlib_peripheral.EPWM_ActionQualifierOutput
}
])
}
group_xaq = group_xaq.concat(
{
name: "GROUP_XAQ_" + EPWMxAorB + "_" + reg_name + "_" + xcmp_set.name,
displayName: xcmp_set.displayName,
description: "",
longDescription: "When XCMP mode is enabled, AQ can now have up to three shadow buffer levels with their own AQ events",
config: xcmp_aq_event_config
}
)
}
}
return group_xaq;
}
function onChangeActiveAndShdwRegistersConfig(inst, ui, reg_name, startIndex, stopIndex)
{
// this not only sets the active and shadow buffer, but it also shows the action qualifier active and shadow buffers
let xcmp_RegArr = device_driverlib_peripheral.EPWM_XCMPReg.slice(0,8);
let xcmp_Shdw1RegArr = device_driverlib_peripheral.EPWM_XCMPReg.slice(9,17);
let xcmp_Shdw2RegArr = device_driverlib_peripheral.EPWM_XCMPReg.slice(18,26);
let xcmp_Shdw3RegArr = device_driverlib_peripheral.EPWM_XCMPReg.slice(27,35);
for(var xcmp_Reg_Index in xcmp_RegArr)
{
if(xcmp_Reg_Index >= startIndex && xcmp_Reg_Index < stopIndex)
{
ui["epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")].hidden = false;
ui["epwmXCMP_set" + reg_name + "_" + xcmp_Shdw1RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")].hidden = false;
ui["epwmXCMP_set" + reg_name + "_" + xcmp_Shdw2RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")].hidden = false;
ui["epwmXCMP_set" + reg_name + "_" + xcmp_Shdw3RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")].hidden = false;
}else
{
ui["epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")].hidden = true;
ui["epwmXCMP_set" + reg_name + "_" + xcmp_Shdw1RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")].hidden = true;
ui["epwmXCMP_set" + reg_name + "_" + xcmp_Shdw2RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")].hidden = true;
ui["epwmXCMP_set" + reg_name + "_" + xcmp_Shdw3RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")].hidden = true;
}
}
// show action qualifier events when user chooses
for(var xcmp_set_index in device_driverlib_peripheral.EPWM_XCMP)
{
let xcmp_set = device_driverlib_peripheral.EPWM_XCMP[xcmp_set_index];
for(var xcmp_aq_events_index in device_driverlib_peripheral.EPWM_XCMPActionQualifierOutputEvent)
{
if(xcmp_aq_events_index >= startIndex && xcmp_aq_events_index < stopIndex)
{
let xcmp_aq_events = device_driverlib_peripheral.EPWM_XCMPActionQualifierOutputEvent[xcmp_aq_events_index];
if(reg_name == "XCMPA")
{
ui[reg_name + "_" + xcmp_set.name.replace("EPWM_XCMP_", "") + xcmp_aq_events.name.replace("EPWM_AQ", "")].hidden = false;
}else if(reg_name == "XCMPB")
{
ui[ reg_name + "_" + xcmp_set.name.replace("EPWM_XCMP_", "") + xcmp_aq_events.name.replace("EPWM_AQ", "")].hidden = false;
}
}else
{
let xcmp_aq_events = device_driverlib_peripheral.EPWM_XCMPActionQualifierOutputEvent[xcmp_aq_events_index];
if((xcmp_aq_events.name == "EPWM_AQ_OUTPUT_ON_TIMEBASE_XCMP1" || xcmp_aq_events.name == "EPWM_AQ_OUTPUT_ON_TIMEBASE_XCMP2" ||
xcmp_aq_events.name == "EPWM_AQ_OUTPUT_ON_TIMEBASE_XCMP3" || xcmp_aq_events.name == "EPWM_AQ_OUTPUT_ON_TIMEBASE_XCMP4") && reg_name == "XCMPB")
{
continue;
}
if(reg_name == "XCMPA")
{
ui[ reg_name + "_" + xcmp_set.name.replace("EPWM_XCMP_", "") + xcmp_aq_events.name.replace("EPWM_AQ", "")].hidden = true;
}else if(reg_name == "XCMPB")
{
ui[ reg_name + "_" + xcmp_set.name.replace("EPWM_XCMP_", "") + xcmp_aq_events.name.replace("EPWM_AQ", "")].hidden = true;
}
}
}
}
}
// Add higher level before calling on change allocate registers
function setAllocateRegistersXCMPANoSplitorSplit(inst, ui)
{
if(inst["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"] == "EPWM_XCMP_NONE_CMPA")
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPA", 0, 0);
}
if(inst["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"] == "EPWM_XCMP_1_CMPA")
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPA", 0, 1);
}
if(inst["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"] == "EPWM_XCMP_2_CMPA")
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPA", 0, 2);
}
if(inst["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"] == "EPWM_XCMP_3_CMPA")
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPA", 0, 3);
}
if(inst["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"] == "EPWM_XCMP_4_CMPA")
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPA", 0, 4);
}
if(inst["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"] == "EPWM_XCMP_5_CMPA" && !inst.epwmXCMP_RegisterSplit_enable)
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPA", 0, 5);
}
if(inst["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"] == "EPWM_XCMP_6_CMPA" && !inst.epwmXCMP_RegisterSplit_enable)
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPA", 0, 6);
}
if(inst["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"] == "EPWM_XCMP_7_CMPA" && !inst.epwmXCMP_RegisterSplit_enable)
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPA", 0, 7);
}
if(inst["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"] == "EPWM_XCMP_8_CMPA" && !inst.epwmXCMP_RegisterSplit_enable)
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPA", 0, 8);
}
}
function setAllocateRegistersSplitXCMPB(inst, ui)
{
if(inst["epwmXCMP_selectAllocationXCMPB_Split"] == "EPWM_XCMP_5_CMPB")
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPB", 4, 5);
}
if(inst["epwmXCMP_selectAllocationXCMPB_Split"] == "EPWM_XCMP_6_CMPB")
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPB", 4, 6);
}
if(inst["epwmXCMP_selectAllocationXCMPB_Split"] == "EPWM_XCMP_7_CMPB")
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPB", 4, 7);
}
if(inst["epwmXCMP_selectAllocationXCMPB_Split"] == "EPWM_XCMP_8_CMPB")
{
onChangeActiveAndShdwRegistersConfig(inst, ui, "XCMPB", 4, 8);
}
}
function hideXCMPregisters(inst, ui, reg_name)
{
let xcmp_RegArr = device_driverlib_peripheral.EPWM_XCMPReg.slice(0, 8);
// hide active register
for(var xcmp_Reg_Index in xcmp_RegArr)
{
if(reg_name == "XCMPC" || reg_name == "XCMPD")
{
ui["epwmXCMP_set" + reg_name].hidden = true;
inst["epwmXCMP_set" + reg_name] = 0;
}else
{
ui["epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")].hidden = true;
inst["epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")] = 0;
}
}
xcmp_RegArr = device_driverlib_peripheral.EPWM_XCMPReg.slice(9,17);
// hide shadow buffer set 1
for(var xcmp_Reg_Index in xcmp_RegArr)
{
if(reg_name == "XCMPC" || reg_name == "XCMPD")
{
ui["epwmXCMP_setShadowRegisters1" + reg_name].hidden = true;
inst["epwmXCMP_setShadowRegisters1" + reg_name] = 0;
}else
{
ui["epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")].hidden = true;
inst["epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")] = 0;
}
}
xcmp_RegArr = device_driverlib_peripheral.EPWM_XCMPReg.slice(18,26);
// hide shadow buffer set 2
for(var xcmp_Reg_Index in xcmp_RegArr)
{
if(reg_name == "XCMPC" || reg_name == "XCMPD")
{
ui["epwmXCMP_setShadowRegisters2" + reg_name].hidden = true;
inst["epwmXCMP_setShadowRegisters2" + reg_name] = 0;
}else
{
ui["epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")].hidden = true;
inst["epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")] = 0;
}
}
xcmp_RegArr = device_driverlib_peripheral.EPWM_XCMPReg.slice(27,35);
// hide shadow buffer set 3
for(var xcmp_Reg_Index in xcmp_RegArr)
{
if(reg_name == "XCMPC" || reg_name == "XCMPD")
{
ui["epwmXCMP_setShadowRegisters3" + reg_name].hidden = true;
inst["epwmXCMP_setShadowRegisters3" + reg_name] = 0;
}else
{
ui["epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")].hidden = true;
inst["epwmXCMP_set" + reg_name + "_" + xcmp_RegArr[xcmp_Reg_Index].name.replace("EPWM_", "")] = 0;
}
}
// Hide action qualifier events
for(var xcmp_set_index in device_driverlib_peripheral.EPWM_XCMP)
{
let xcmp_set = device_driverlib_peripheral.EPWM_XCMP[xcmp_set_index];
for(var xcmp_aq_events_index in device_driverlib_peripheral.EPWM_XCMPActionQualifierOutputEvent)
{
let xcmp_aq_events = device_driverlib_peripheral.EPWM_XCMPActionQualifierOutputEvent[xcmp_aq_events_index];
if((xcmp_aq_events.name == "EPWM_AQ_OUTPUT_ON_TIMEBASE_XCMP1" || xcmp_aq_events.name == "EPWM_AQ_OUTPUT_ON_TIMEBASE_XCMP2" ||
xcmp_aq_events.name == "EPWM_AQ_OUTPUT_ON_TIMEBASE_XCMP3" || xcmp_aq_events.name == "EPWM_AQ_OUTPUT_ON_TIMEBASE_XCMP4") && reg_name == "XCMPB")
{
continue;
}
// No action qualifiers for cmpc/cmpd
if(reg_name == "XCMPC" || reg_name == "XCMPD"){
break;
}else
{
if(reg_name == "XCMPA")
{
ui[ reg_name + "_" + xcmp_set.name.replace("EPWM_XCMP_", "") + xcmp_aq_events.name.replace("EPWM_AQ", "")].hidden = true;
inst[ reg_name + "_" + xcmp_set.name.replace("EPWM_XCMP_", "") + xcmp_aq_events.name.replace("EPWM_AQ", "")] = "EPWM_AQ_OUTPUT_NO_CHANGE";
}else if(reg_name == "XCMPB")
{
ui[reg_name + "_" + xcmp_set.name.replace("EPWM_XCMP_", "") + xcmp_aq_events.name.replace("EPWM_AQ", "")].hidden = true;
inst[ reg_name + "_" + xcmp_set.name.replace("EPWM_XCMP_", "") + xcmp_aq_events.name.replace("EPWM_AQ", "")] = "EPWM_AQ_OUTPUT_NO_CHANGE";
}
}
}
}
}
function onChangeEnableDisable(inst, ui)
{
if(inst.epwmXCMP_enable)
{
// show check box to enable split
ui["epwmXCMP_RegisterSplit_enable"].hidden = false;
// show XCMPA since that will be default option when split or no split is chosen
ui["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"].hidden = false;
// show XTBPRD options
ui["epwmXCMP_setRegisters_XTBPRD"].hidden = false;
ui["epwmXCMP_setShadowRegisters1_XTBPRD"].hidden = false;
ui["epwmXCMP_setShadowRegisters2_XTBPRD"].hidden = false;
ui["epwmXCMP_setShadowRegisters3_XTBPRD"].hidden = false;
// show XMINMAX options
ui["epwmXCMP_setRegisters_XMIN"].hidden = false;
ui["epwmXCMP_setShadowRegisters1_XMIN"].hidden = false;
ui["epwmXCMP_setShadowRegisters2_XMIN"].hidden = false;
ui["epwmXCMP_setShadowRegisters3_XMIN"].hidden = false;
ui["epwmXCMP_setRegisters_XMAX"].hidden = false;
ui["epwmXCMP_setShadowRegisters1_XMAX"].hidden = false;
ui["epwmXCMP_setShadowRegisters2_XMAX"].hidden = false;
ui["epwmXCMP_setShadowRegisters3_XMAX"].hidden = false;
// show xcmpa load options
ui["epwmXCMP_RegisterFrcLoad_enable"].hidden = false;
ui["epwmXCMP_selectLoadMode"].hidden = false;
ui["epwmXCMP_selectShadowRegisterLevelLoad"].hidden = false;
ui["epwmXCMP_selectNumberShadowRegisterLevels"].hidden = false;
ui["epwmXCMP_selectRepeatCountShadowRegisterLevel2"].hidden = false;
ui["epwmXCMP_selectRepeatCountShadowRegisterLevel3"].hidden = false;
// show xmpc load options
ui["epwmXCMP_setShadowRegisters1XCMPC"].hidden = false;
ui["epwmXCMP_setXCMPC"].hidden = false;
ui["epwmXCMP_setShadowRegisters2XCMPC"].hidden = false;
ui["epwmXCMP_setShadowRegisters3XCMPC"].hidden = false;
// show xmpd load options
ui["epwmXCMP_setShadowRegisters1XCMPD"].hidden = false;
ui["epwmXCMP_setXCMPD"].hidden = false;
ui["epwmXCMP_setShadowRegisters2XCMPD"].hidden = false;
ui["epwmXCMP_setShadowRegisters3XCMPD"].hidden = false;
// show xcmp loading for all
ui["epwmXCMP_RegisterLoad_enable"].hidden = false;
if(inst.epwmXCMP_RegisterSplit_enable)
{
// if split is enabled, show XCMPB options, show XCMPA split options
ui["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"].hidden = false;
ui["epwmXCMP_selectAllocationXCMPB_Split"].hidden = false;
// show load options for xcmpb
setAllocateRegistersXCMPANoSplitorSplit(inst, ui);
setAllocateRegistersSplitXCMPB(inst, ui);
}else if(!inst.epwmXCMP_RegisterSplit_enable)
{
ui["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"].hidden = false;
// if split is not enabled, hide XCMPB options
ui["epwmXCMP_selectAllocationXCMPB_Split"].hidden = true;
inst.epwmXCMP_selectAllocationXCMPB_Split = "EPWM_XCMP_5_CMPB";
setAllocateRegistersXCMPANoSplitorSplit(inst, ui);
hideXCMPregisters(inst, ui, "XCMPB");
}
}else
{
// reset settings
// hide all the xcmpa split and no split options, set split enabled to false when XCMP mode is disabled
inst.epwmXCMP_RegisterSplit_enable = false;
inst.epwmXCMP_selectAllocationXCMPA_NoSplitorSplit = "EPWM_XCMP_NONE_CMPA";
inst.epwmXCMP_selectAllocationXCMPB_Split = "EPWM_XCMP_5_CMPB";
ui["epwmXCMP_selectAllocationXCMPA_NoSplitorSplit"].hidden = true;
// hide all the xcmpb split options
ui["epwmXCMP_selectAllocationXCMPB_Split"].hidden = true;
ui["epwmXCMP_RegisterSplit_enable"].hidden = true;
// hide all the loading options XCMPA, set the default load mode to load once for all xcmpc registers
inst.epwmXCMP_selectAllocationXCMPA_NoSplitorSplit = "EPWM_XCMP_NONE_CMPA";
inst.epwmXCMP_selectNumberShadowRegisterLevels = "EPWM_XCMP_XLOADCTL_SHDWLEVEL_0";
inst["epwmXCMP_selectLoadMode"] = "EPWM_XCMP_XLOADCTL_LOADMODE_LOADONCE";
inst.epwmXCMP_selectShadowRegisterLevelLoad = "EPWM_XCMP_XLOADCTL_SHDWBUFPTR_NULL";
inst.epwmXCMP_selectRepeatCountShadowRegisterLevel2 = "1";
inst.epwmXCMP_selectRepeatCountShadowRegisterLevel3 = "1";
inst.epwmXCMP_RegisterFrcLoad_enable = false;
ui["epwmXCMP_RegisterFrcLoad_enable"].hidden = true;
ui["epwmXCMP_selectLoadMode"].hidden = true;
ui["epwmXCMP_selectShadowRegisterLevelLoad"].hidden = true;
ui["epwmXCMP_selectNumberShadowRegisterLevels"].hidden = true;
ui["epwmXCMP_selectRepeatCountShadowRegisterLevel2"].hidden = true;
ui["epwmXCMP_selectRepeatCountShadowRegisterLevel3"].hidden = true;
// hide all set register options and hide all AQ event output configurations
hideXCMPregisters(inst, ui, "XCMPA");
hideXCMPregisters(inst, ui, "XCMPB");
hideXCMPregisters(inst, ui, "XCMPC");
hideXCMPregisters(inst, ui, "XCMPD");
// hide all tbprd options
ui["epwmXCMP_setRegisters_XTBPRD"].hidden = true;
ui["epwmXCMP_setShadowRegisters1_XTBPRD"].hidden = true;
ui["epwmXCMP_setShadowRegisters2_XTBPRD"].hidden = true;
ui["epwmXCMP_setShadowRegisters3_XTBPRD"].hidden = true;
inst["epwmXCMP_setRegisters_XTBPRD"] = 0;
inst["epwmXCMP_setShadowRegisters1_XTBPRD"] = 0;
inst["epwmXCMP_setShadowRegisters2_XTBPRD"] = 0;
inst["epwmXCMP_setShadowRegisters3_XTBPRD"] = 0;
// show XMINMAX options
ui["epwmXCMP_setRegisters_XMIN"].hidden = true;
ui["epwmXCMP_setShadowRegisters1_XMIN"].hidden = true;
ui["epwmXCMP_setShadowRegisters2_XMIN"].hidden = true;
ui["epwmXCMP_setShadowRegisters3_XMIN"].hidden = true;
ui["epwmXCMP_setRegisters_XMAX"].hidden = true;
ui["epwmXCMP_setShadowRegisters1_XMAX"].hidden = true;
ui["epwmXCMP_setShadowRegisters2_XMAX"].hidden = true;
ui["epwmXCMP_setShadowRegisters3_XMAX"].hidden = true;
inst["epwmXCMP_setRegisters_XMIN"] = 0;
inst["epwmXCMP_setShadowRegisters1_XMIN"] = 0;
inst["epwmXCMP_setShadowRegisters2_XMIN"] = 0;
inst["epwmXCMP_setShadowRegisters3_XMIN"] = 0;
inst["epwmXCMP_setRegisters_XMAX"] = 0;
inst["epwmXCMP_setShadowRegisters1_XMAX"] = 0;
inst["epwmXCMP_setShadowRegisters2_XMAX"] = 0;
inst["epwmXCMP_setShadowRegisters3_XMAX"] = 0;
// hide all xmp load
ui["epwmXCMP_RegisterLoad_enable"].hidden = true;
inst.epwmXCMP_RegisterLoad_enable = false;
}
}
function onChangeLoadMode(inst, ui)
{
if(inst.epwmXCMP_selectLoadMode == "EPWM_XCMP_XLOADCTL_LOADMODE_LOADONCE" && inst.epwmXCMP_RegisterLoadXCMPA_enable)
{
ui["epwmXCMP_selectShadowRegisterLevelLoad"].hidden = false;
}
else if(inst.epwmXCMP_selectLoadModeXCMPB == "EPWM_XCMP_XLOADCTL_LOADMODE_LOADONCE" && inst.epwmXCMP_RegisterLoadXCMPB_enable)
{
ui["epwmXCMP_selectShadowRegisterLevelLoadXCMPB"].hidden = false;
}
else if(inst.epwmXCMP_selectLoadModeXCMPC == "EPWM_XCMP_XLOADCTL_LOADMODE_LOADONCE" && inst.epwmXCMP_RegisterLoadXCMPC_enable)
{
ui["epwmXCMP_selectShadowRegisterLevelLoadXCMPC"].hidden = false;
}
else if(inst.epwmXCMP_selectLoadModeXCMPD == "EPWM_XCMP_XLOADCTL_LOADMODE_LOADONCE" && inst.epwmXCMP_RegisterLoadXCMPD_enable)
{
ui["epwmXCMP_selectShadowRegisterLevelLoadXCMPD"].hidden = false;
}
else
{
ui["epwmXCMP_selectShadowRegisterLevelLoad"].hidden = true;
ui["epwmXCMP_selectShadowRegisterLevelLoadXCMPB"].hidden = true;
ui["epwmXCMP_selectShadowRegisterLevelLoadXCMPC"].hidden = true;
ui["epwmXCMP_selectShadowRegisterLevelLoadXCMPD"].hidden = true;
}
}
var config = [
{
name: "epwmXCMP_enable",
displayName: "Enable XCMP Mode",
description: "If XCMP mode is disabled, EPWM will behave like Type4",
hidden: false,
default: false,
onChange: onChangeEnableDisable
},
{
name: "epwmXCMP_RegisterSplit_enable",
displayName: "Enable Split XCMP Registers",
description: "Split the XCMP registers between CMPA and CMPB. CMPA and CMPB can have max of 4 registers allocated. ",
hidden: true,
default: false,
onChange: onChangeEnableDisable
},
{
name: "epwmXCMP_RegisterLoad_enable",
displayName: "Enable X Load",
description: "Enables register loading of shadow buffers for all XCMP registers",
hidden: true,
default: false,
onChange: onChangeEnableDisable
},
{
name: "epwmXCMP_RegisterFrcLoad_enable",
displayName: "Force X Load",
description: "Software force register loading of shadow buffers for all XCMP registers",
hidden: true,
default: false,
},
{
name: "epwmXCMP_selectNumberShadowRegisterLevels",
displayName : "Number of Shadow Buffer Levels",
description : 'Number of shadow buffer levels to configure, you can use one or two or all 3 shadow buffer sets',
hidden : true,
default : device_driverlib_peripheral.EPWM_XCMP_XLOADCTL_SHDWLEVEL[0].name,
options : device_driverlib_peripheral.EPWM_XCMP_XLOADCTL_SHDWLEVEL,
},
{
name: "epwmXCMP_selectLoadMode",
displayName : "Load Mode",
description : 'Loading once will behave like type4. Loading Multiple will cycle through all shadow buffer sets and load them at the end of period.',
hidden : true,
default : device_driverlib_peripheral.EPWM_XCMPXloadCtlLoadMode[0].name,
options : device_driverlib_peripheral.EPWM_XCMPXloadCtlLoadMode,
},
{
name: "epwmXCMP_selectShadowRegisterLevelLoad",
displayName : "Shadow Buffer Level to Load Once",
description : 'Can load to active registers from either shadow buffer set 3, 2 or 1 first',
hidden : true,
default : device_driverlib_peripheral.EPWM_XCMP_XLOADCTL_SHDWBUFPTR[0].name,
options : device_driverlib_peripheral.EPWM_XCMP_XLOADCTL_SHDWBUFPTR,
},
{
name: "epwmXCMP_selectRepeatCountShadowRegisterLevel2",
displayName : "Number of Times to Repeat Shadow Buffer Set 2",
description : 'Number of times to repeat a shadow buffer set each PWM cycle, can only be applied to shadow set 2 and 3',
hidden : true,
default : shadowRegisterReloadNumberofTimesOptions[0].name,
options : shadowRegisterReloadNumberofTimesOptions
},
{
name: "epwmXCMP_selectRepeatCountShadowRegisterLevel3",
displayName : "Number of Times to Repeat Shadow Buffer Set 3",
description : 'Number of times to repeat a shadow buffer set each PWM cycle, can only be applied to shadow set 2 and 3',
hidden : true,
default : shadowRegisterReloadNumberofTimesOptions[0].name,
options : shadowRegisterReloadNumberofTimesOptions
},
{
name: "GROUP_XCMPA",
displayName: "XCMPA",
description: "",
longDescription: "",
config: [
{
name: "epwmXCMP_selectAllocationXCMPA_NoSplitorSplit",
displayName : "XCMP Registers to Allocate",
description : 'XCMP registers can use all 8 XCMPA registers or can use a selection of the 8 XCMPA registers',
hidden : true,
default : device_driverlib_peripheral.EPWM_XCMP_ALLOC_CMPA[0].name,
options : device_driverlib_peripheral.EPWM_XCMP_ALLOC_CMPA,
onChange : onChangeEnableDisable
},
{
name: "GROUP_XCMPA_ACTIVE_REGISTERS",
displayName: "Active Registers",
description: "",
longDescription: "",
config: [
]
},
{
name: "GROUP_XCMPA_SHDW_REGISTERS1",
displayName: "Shadow Buffer Set 1",
description: "",
longDescription: "",
config: [
]
},
{
name: "GROUP_XCMPA_SHDW_REGISTERS2",
displayName: "Shadow Buffer Set 2",
description: "",
longDescription: "",
config: [
]
},
{
name: "GROUP_XCMPA_SHDW_REGISTERS3",
displayName: "Shadow Buffer Set 3",
description: "",
longDescription: "",
config: [
]
},
]
},
{
name: "GROUP_XCMPB",
displayName: "XCMPB",
description: "",
longDescription: "",
config: [
{
name: "epwmXCMP_selectAllocationXCMPB_Split",
displayName : "XCMP Registers to Allocate",
description : 'XCMP registers can use all 8 XCMPA registers or can use a selection of the 8 XCMPA registers',
hidden : true,
default : device_driverlib_peripheral.EPWM_XCMP_ALLOC_CMPB[0].name,
options : device_driverlib_peripheral.EPWM_XCMP_ALLOC_CMPB,
onChange : onChangeEnableDisable
},
{
name: "GROUP_XCMPB_ACTIVE_REGISTERS",
displayName: "Active Registers",
description: "",
longDescription: "",
config: [
]
},
{
name: "GROUP_XCMPB_SHDW_REGISTERS1",
displayName: "Shadow Buffer Set 1",
description: "",
longDescription: "",
config: [
]
},
{
name: "GROUP_XCMPB_SHDW_REGISTERS2",
displayName: "Shadow Buffer Set 2",
description: "",
longDescription: "",
config: [
]
},
{
name: "GROUP_XCMPB_SHDW_REGISTERS3",
displayName: "Shadow Buffer Set 3",
description: "",
longDescription: "",
config: [
]
},
]
},
{
name: "GROUP_XCMPC",
displayName: "XCMPC",
description: "",
longDescription: "",
config: [
{
name: "epwmXCMP_setXCMPC",
displayName: "XCMPC active register value",
description: "Set Active Register to a value, XCMPC can only have one active register allocated to it",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters1XCMPC",
displayName: "XCMPC Shadow 1",
description: "Set shadow buffer 1 to a value, this value will be loaded every PWM Cycle",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters2XCMPC",
displayName: "XCMPC Shadow 2",
description: "Set shadow buffer 2 to a value, this value will be loaded every PWM Cycle",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters3XCMPC",
displayName: "XCMPC Shadow 3",
description: "Set shadow buffer 3 to a value, this value will be loaded every PWM Cycle",
hidden: true,
default: 0,
},
]
},
{
name: "GROUP_XCMPD",
displayName: "XCMPD",
description: "",
longDescription: "",
config: [
{
name: "epwmXCMP_setXCMPD",
displayName: "XCMPD active register value",
description: "Set Active Register to a value, XCMPD can only have one active register allocated to it",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters1XCMPD",
displayName: "XCMPD Shadow 1",
description: "Set shadow buffer 1 to a value, this value will be loaded every PWM Cycle",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters2XCMPD",
displayName: "XCMPD Shadow 2",
description: "Set shadow buffer 2 to a value, this value will be loaded every PWM Cycle",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters3XCMPD",
displayName: "XCMPD Shadow 3",
description: "Set shadow buffer 3 to a value, this value will be loaded every PWM Cycle",
hidden: true,
default: 0,
},
]
},
{
name: "GROUP_XTBPRD",
displayName: "XTBPRD Configuration",
description: "",
longDescription: "XTBPRD will be used instead of TBPRD in type5, this includes having 3 shadow buffer sets and 1 active register",
config: [
{
name: "epwmXCMP_setRegisters_XTBPRD",
displayName: "Time Base Period",
description: "Set XTBPRD Register to a value, during XCMP mode TBPRD is replaced with XTBPRD",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters1_XTBPRD",
displayName: "Time Base Period Shadow 1",
description: "Set XTBPRD Shadow Buffer to a value",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters2_XTBPRD",
displayName: "Time Base Period Shadow 2",
description: "Set XTBPRD Shadow Buffer to a value",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters3_XTBPRD",
displayName: "Time Base Period Shadow 3",
description: "Set XTBPRD Shadow Buffer to a value",
hidden: true,
default: 0,
}
]
},
{
name: "GROUP_AQ_XCMPA_A",
displayName: "ePWMxA Event Output Configuration (Action Qualifier)",
description: "",
longDescription: "",
config: [
]
},
{
name: "GROUP_AQ_XCMPB_B",
displayName: "ePWMxB Event Output Configuration (Action Qualifier)",
description: "",
longDescription: "",
config: [
]
},
{
name: "GROUP_XMINMAX",
displayName: "XMINMAX Configuration (Edge Detection)",
description: "",
longDescription: "XMIN and XMAX registers will be used to set a defined window to monitor an event and send out a trip event if event does not occur within window. Within Digital Compare, enable Use Event Detection",
config: [
{
name: "epwmXCMP_setRegisters_XMIN",
displayName: "XMIN",
description: "Set XMIN Register to a value",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters1_XMIN",
displayName: "XMIN Shadow 1",
description: "Set XMIN Shadow Buffer to a value",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters2_XMIN",
displayName: "XMIN Shadow 2",
description: "Set XMIN Shadow Buffer to a value",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters3_XMIN",
displayName: "XMIN Shadow 3",
description: "Set XMIN Shadow Buffer to a value",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setRegisters_XMAX",
displayName: "XMAX",
description: "Set XMINMAX Register to a value",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters1_XMAX",
displayName: "XMAX Shadow 1",
description: "Set XMINMAX Shadow Buffer to a value",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters2_XMAX",
displayName: "XMAX Shadow 2",
description: "Set XMINMAX Shadow Buffer to a value",
hidden: true,
default: 0,
},
{
name: "epwmXCMP_setShadowRegisters3_XMAX",
displayName: "XMAX Shadow 3",
description: "Set XMINMAX Shadow Buffer to a value",
hidden: true,
default: 0,
}
]
},
];
// Generate the configuration for active, shadow buffers
let start_config_index = 1;
let start_xcmpa_config_index = 9;
let start_xcmpb_config_index = 10;
let start_xaq_config_index = 14;
config[start_xcmpa_config_index].config[start_config_index].config = config[start_xcmpa_config_index].config[start_config_index].config.concat(generateActiveRegistersConfig("XCMPA"));
config[start_xcmpa_config_index].config[start_config_index + 1].config = config[start_xcmpa_config_index].config[start_config_index + 1].config.concat(generateShadowRegisters1Config("XCMPA"));
config[start_xcmpa_config_index].config[start_config_index + 2].config = config[start_xcmpa_config_index].config[start_config_index + 2].config.concat(generateShadowRegisters2Config("XCMPA"));
config[start_xcmpa_config_index].config[start_config_index + 3].config = config[start_xcmpa_config_index].config[start_config_index + 3].config.concat(generateShadowRegisters3Config("XCMPA"));
config[start_xcmpb_config_index].config[start_config_index].config = config[start_xcmpb_config_index].config[start_config_index].config.concat(generateActiveRegistersConfig("XCMPB"));
config[start_xcmpb_config_index].config[start_config_index + 1].config = config[start_xcmpb_config_index].config[start_config_index + 1].config.concat(generateShadowRegisters1Config("XCMPB"));
config[start_xcmpb_config_index].config[start_config_index + 2].config = config[start_xcmpb_config_index].config[start_config_index + 2].config.concat(generateShadowRegisters2Config("XCMPB"));
config[start_xcmpb_config_index].config[start_config_index + 3].config = config[start_xcmpb_config_index].config[start_config_index + 3].config.concat(generateShadowRegisters3Config("XCMPB"));
// Generate the XAQ configs for epwmxA and epwmxB
config[start_xaq_config_index].config = config[start_xaq_config_index].config.concat(generateXAQConfig("XCMPA", "EPWMXA"));
config[start_xaq_config_index + 1].config = config[start_xaq_config_index + 1].config.concat(generateXAQConfig("XCMPB", "EPWMXB"));
var epwmXCMPmodeSubmodule = {
displayName: "EPWM XCMP Mode",
maxInstances: Common.peripheralCount("EPWM"),
defaultInstanceName: "EPWM_XCMP",
description: "Enhanced Pulse Width Modulator XCMP Mode Configuration",
config: config,
templates: {
boardc : "", //"/gpio/gpio.board.c.xdt",
boardh : ""//"/gpio/gpio.board.h.xdt"
},
};
exports = epwmXCMPmodeSubmodule;