c2000ware-core-sdk/driverlib/.meta/dac.js

385 lines
14 KiB
JavaScript
Raw Normal View History

2023-06-24 09:05:38 +03:00
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() + "_dac.js");
/* Intro splash on GUI */
let longDescription = "DAC";
var DAC_INSTANCE = [
{ name: "DACA_BASE", displayName: "DACA"},
{ name: "DACB_BASE", displayName: "DACB"},
{ name: "DACC_BASE", displayName: "DACC"},
]
function onChangeDACVref(inst, ui)
{
if (["F28004x", "F28003x", "F28P65x"].includes(Common.getDeviceName())){
if (inst.referenceVoltage == device_driverlib_peripheral.DAC_ReferenceVoltage[0].name){
ui.gainMode.hidden = true
}
else {
ui.gainMode.hidden = false
}
}
}
function onChangeLoadMode(inst, ui)
{
if (inst.loadMode == device_driverlib_peripheral.DAC_LoadMode[0].name){
ui.ePWMSyncSignal.hidden = true
}
else {
ui.ePWMSyncSignal.hidden = false
}
}
var dacStatic = undefined;
/* determine ASYSCTL static module dependency */
if (["F28004x","F28003x", "F28P65x"].includes(Common.getDeviceName()))
{
dacStatic = {
name: "dacGlobal",
displayName: "DAC Global",
modules: Common.autoForce("asysctl", "/driverlib/asysctl.js")
}
}
var numberOfDACs = 3;
if (["F28004x", "F28003x", "F28P65x"].includes(Common.getDeviceName()))
{
DAC_INSTANCE = [
{ name: "DACA_BASE", displayName: "DACA"},
{ name: "DACB_BASE", displayName: "DACB"},
];
numberOfDACs = 2;
}
/* Array of possible ePWM sync signals */
var ePWMInstances = Common.peripheralCount("EPWM")
var ePWMArray = [];
for(var i = 0; i < ePWMInstances; i++) {
ePWMArray.push()
ePWMArray.push({ name: ""+(i+1), displayName: "EPWM"+(i+1)+"SYNCPER"})
}
/* Array of DAC configurables that are common across device families */
let config = [
{
name : "dacBase",
displayName : "DAC Instance",
description : 'Instance of the DAC used.',
hidden : false,
default : DAC_INSTANCE[0].name,
options : DAC_INSTANCE
},
{
name : "referenceVoltage",
displayName : "Reference Voltage",
description : 'Sets the DAC Reference Voltage',
hidden : false,
onChange : onChangeDACVref,
default : device_driverlib_peripheral.DAC_ReferenceVoltage[0].name,
options : device_driverlib_peripheral.DAC_ReferenceVoltage
},
{
name : "loadMode",
displayName : "Load Mode",
description : 'Sets the DAC Load Mode',
hidden : false,
onChange : onChangeLoadMode,
default : device_driverlib_peripheral.DAC_LoadMode[0].name,
options : device_driverlib_peripheral.DAC_LoadMode
},
{
name : "ePWMSyncSignal",
displayName : "EPWMSYNCPER Signal",
description : 'Sets the DAC ePWMSYNC Signal',
hidden : true,
default : ePWMArray[0].name,
options : ePWMArray
},
{
name : "shadowValue",
displayName : "Shadow Value",
description : 'Set the DAC Shadow Output Value.',
hidden : false,
default : 0
},
{
name : "enableOutput",
displayName : "Enable Output",
description : 'Whether or not to enable the DAC output.',
hidden : false,
default : false,
},
{
name : "lockedRegisters",
displayName : "Lock DAC Registers",
description : 'Which DAC Registers to enable.',
hidden : false,
default : [],
minSelections: 0,
options : [
{name: "DAC_LOCK_CONTROL", displayName: "Control Register"},
{name: "DAC_LOCK_SHADOW", displayName: "Shadow Register"},
{name: "DAC_LOCK_OUTPUT", displayName: "Output Register"},
],
},
];
if (!["F2837xD", "F2807x", "F2837xS"].includes(Common.getDeviceName()))
{
var defaultDacName = "DACA";
defaultDacName = Pinmux.getDeviceDACName(defaultDacName)
config.push(
{
name : "dacDevicePinName",
displayName : "DAC Device Pin Name",
description : 'The device pin name and the signal name for that pin',
hidden : false,
getValue : (inst) => {
var dacOutName = Pinmux.getDeviceDACName(inst.dacBase.replace("_BASE", ""))
var dacAnalogPins = Pinmux.findAllAnalogPin(dacOutName);
return Pinmux.getDevicePinInfoDescription(dacAnalogPins);
},
default : Pinmux.getDevicePinInfoDescription(defaultDacName)
}
)
}
/* Only show Gain options depending on device */
if (["F28004x", "F28003x", "F28P65x"].includes(Common.getDeviceName()))
{
config.splice(2, 0,
{
name : "gainMode",
displayName : "Gain Mode",
description : 'Sets the DAC Gain Mode',
hidden : true,
default : device_driverlib_peripheral.DAC_GainMode[0].name,
options : device_driverlib_peripheral.DAC_GainMode
}
);
}
function onValidate(inst, validation) {
var usedDACInsts = [];
for (var instance_index in inst.$module.$instances)
{
var instance_obj = inst.$module.$instances[instance_index];
usedDACInsts.push(instance_obj.dacBase);
}
var otherContexts = Common.getOtherContextNames()
for (var cntx of otherContexts)
{
var onOtherCntx = Common.getModuleForCore(inst.$module.$name, cntx);
if (onOtherCntx)
{
for (var instance_index in onOtherCntx.$instances)
{
var instance_obj = onOtherCntx.$instances[instance_index];
usedDACInsts.push(instance_obj.dacBase);
}
}
}
var duplicatesResult = Common.findDuplicates(usedDACInsts)
if (duplicatesResult.duplicates.length != 0)
{
var allDuplicates = "";
for (var duplicateNamesIndex in duplicatesResult.duplicates)
{
allDuplicates = allDuplicates + Common.stringOrEmpty(allDuplicates, ", ")
+ duplicatesResult.duplicates[duplicateNamesIndex];
}
validation.logError(
"The DAC Instance used. Duplicates: " + allDuplicates,
inst, "dacBase");
}
if (inst.shadowValue < 0 || inst.shadowValue > 4095)
{
validation.logError(
"Enter an integer for Shadow Value between 0 and 4095!",
inst, "shadowValue");
}
if (!Number.isInteger(inst.shadowValue))
{
validation.logError(
"Shadow Value must be an integer",
inst, "shadowValue");
}
var asysctlMod = system.modules['/driverlib/asysctl.js'];
if (asysctlMod){
var stat = asysctlMod.$static
//validation.logError("An example error in gainMode", inst, "gainMode");
if(inst.referenceVoltage == "DAC_REF_VDAC" && inst.gainMode == "DAC_GAIN_TWO"){
validation.logError(
"Selected gain mode not supported for configured reference voltage.",
inst, "gainMode");
validation.logError(
"Selected reference voltage not supported for configured gain mode.",
inst, "referenceVoltage");
} // the case of VDAC, no gain mode select! the case of [vdac, x, x, gain 2x]
if(inst.referenceVoltage == "DAC_REF_ADC_VREFHI" && stat.analogReference == "INTERNAL"
&& stat.analogReferenceVoltage == "1P65" && inst.gainMode == "DAC_GAIN_ONE"){
validation.logError(
"Selected gain mode not supported for configured analog reference voltage.",
inst, "gainMode");
validation.logError(
"Selected analog reference voltage not supported for configured gain mode.",
stat, "analogReferenceVoltage");
} // the case of [vrefhi, internal, 1.65, gain 1x]
if(inst.referenceVoltage == "DAC_REF_ADC_VREFHI" && stat.analogReference == "INTERNAL"
&& stat.analogReferenceVoltage == "2P5" && inst.gainMode == "DAC_GAIN_TWO"){
validation.logError(
"Selected gain mode not supported for configured analog reference voltage.",
inst, "gainMode");
validation.logError(
"Selected analog reference voltage not supported for configured gain mode.",
stat, "analogReferenceVoltage");
} // the case of [vrefhi, internal, 2.5, gain 2x]
if(inst.referenceVoltage == "DAC_REF_ADC_VREFHI" && stat.analogReference == "EXTERNAL" && inst.gainMode == "DAC_GAIN_TWO"){
validation.logError(
"Selected gain mode not supported for configured analog reference.",
inst, "gainMode");
validation.logError(
"Selected analog reference not supported for configured gain mode.",
stat, "analogReference");
} // the case of [vrefhi, external, x, gain 2x]
}
//
// Check for Pin Usage in analog
//
if (Common.peripheralCount("ANALOG") > 0)
{
if(inst.enableOutput){
var devicePinNameInfo = inst["dacDevicePinName"]
if (devicePinNameInfo == Pinmux.NO_DEVICE_PIN_FOUND)
{
validation.logWarning(
"DAC output selected has no device pin found.",
inst, "dacDevicePinName");
}
else
{
var dacOutName = Pinmux.getDeviceDACName(inst.dacBase.replace("_BASE", ""))
var dacAnalogPins = Pinmux.findAllAnalogPin(dacOutName);
var selectedInterfaces = Pinmux.getPeripheralUseCaseInterfaces(inst.analog, "ANALOG", inst.analog.useCase);
var allInterfaces = Pinmux.getPeripheralUseCaseInterfaces(inst.analog, "ANALOG", "ALL");
for (var dacPin of dacAnalogPins)
{
var pinSelected = dacPin.PinDesignSignalName;
if (!selectedInterfaces.includes(pinSelected) && allInterfaces.includes(pinSelected))
{
validation.logError(
"The pin " + pinSelected + " is not selected in the ANALOG PinMux module." +
" Add this pin to the 'Pins Used' or change the 'Use Case'",
inst,"dacDevicePinName");
}
}
}
}
}
//
// Check against ADC and CMPSS
// Not available on F28X7x
//
if (inst["dacDevicePinName"])
{
if(inst.enableOutput){
var devicePinNameInfo = inst["dacDevicePinName"]
if (devicePinNameInfo != Pinmux.NO_DEVICE_PIN_FOUND)
{
var dacOutName = Pinmux.getDeviceDACName(inst.dacBase.replace("_BASE", ""))
var dacAnalogPins = Pinmux.findAllAnalogPin(dacOutName);
var adcPinsUsed = Pinmux.getADCPinsUsed();
var cmpssPinsUsed = Pinmux.getCMPSSPinsUsed();
var cmpssLitePinsUsed = Pinmux.getCMPSSLitePinsUsed();
for (var dacPin of dacAnalogPins)
{
var pinSelected = dacPin.PinDesignSignalName;
if (adcPinsUsed.includes(pinSelected))
{
validation.logWarning(
"The pin " + pinSelected + " is also selected by the ADC module." +
" The DAC output will be driving the ADC pin input. This is an acceptable " +
"use-case.",
inst, "dacDevicePinName");
}
if (cmpssPinsUsed.includes(pinSelected))
{
validation.logWarning(
"The pin " + pinSelected + " is also selected by the CMPSS module." +
" The DAC output will be driving the CMPSS pin input. This is an acceptable " +
"use-case.",
inst, "dacDevicePinName");
}
if (cmpssLitePinsUsed.includes(pinSelected))
{
validation.logWarning(
"The pin " + pinSelected + " is also selected by the CMPSSLite module." +
" The DAC output will be driving the CMPSSLite pin input. This is an acceptable " +
"use-case.",
inst, "dacDevicePinName");
}
}
}
}
}
}
var sharedModuleInstances = undefined;
if (Common.peripheralCount("ANALOG") > 0) {
sharedModuleInstances = function () {
return (
[
{
name: "analog",
displayName: "Analog PinMux",
moduleName: "/driverlib/analog.js"
},
]
);
}
}
var dacModule = {
peripheralName: "DAC",
displayName: "DAC",
maxInstances: numberOfDACs,
defaultInstanceName: "myDAC",
description: "Digital Analog Converter",
longDescription: (Common.getCollateralFindabilityList("DAC")),
config: config,
moduleStatic: dacStatic,
sharedModuleInstances: sharedModuleInstances,
templates: {
boardc : "/driverlib/dac/dac.board.c.xdt",
boardh : "/driverlib/dac/dac.board.h.xdt"
},
validate : onValidate,
};
exports = dacModule;