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

509 lines
17 KiB
JavaScript
Raw Permalink 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() + "_fsi.js");
/* Intro splash on GUI */
let longDescription = "The Fast Serial Interface (FSI) module is a serial " +
"communication peripheral capable of reliable high-speed " +
"communication across isolation devices.";
function onChangeEnableInterrupt(inst, ui)
{
if (inst.enableInterrupt) {
ui.useInterrupts.hidden = false;
if (inst.useInterrupts.indexOf(device_driverlib_peripheral.FSI_InterruptNum[0].name) != -1)
{
ui.enabledINT1Interrupts.hidden = false;
ui.registerInterruptLine1.hidden = false;
}
else
{
ui.enabledINT1Interrupts.hidden = true;
ui.registerInterruptLine1.hidden = true;
}
if (inst.useInterrupts.indexOf(device_driverlib_peripheral.FSI_InterruptNum[1].name) != -1)
{
ui.enabledINT2Interrupts.hidden = false;
ui.registerInterruptLine2.hidden = false;
}
else
{
ui.enabledINT2Interrupts.hidden = true;
ui.registerInterruptLine2.hidden = true;
}
}
else {
ui.useInterrupts.hidden = true;
ui.enabledINT1Interrupts.hidden = true;
ui.enabledINT2Interrupts.hidden = true;
ui.registerInterruptLine1.hidden = true;
ui.registerInterruptLine2.hidden = true;
}
}
function onChangeEnableDelayTap(inst, ui)
{
if (inst.enableDelayTap) {
ui.tapValue1.hidden = false;
ui.tapValue2.hidden = false;
ui.tapValue3.hidden = false;
}
else {
ui.tapValue1.hidden = true;
ui.tapValue2.hidden = true;
ui.tapValue3.hidden = true;
}
}
function onChangeEnablePingTimeout(inst, ui)
{
if (inst.pingTimeout) {
ui.selectPingMode.hidden = false;
ui.timeoutDelay.hidden = false;
}
else {
ui.selectPingMode.hidden = true;
ui.timeoutDelay.hidden = true;
}
}
function onChangeEnableTagMatch(inst, ui)
{
if (inst.enableTagMatching) {
ui.frameTag.hidden = false;
ui.frameType.hidden = false;
ui.tagMask.hidden = false;
}
else {
ui.frameTag.hidden = true;
ui.frameType.hidden = true;
ui.tagMask.hidden = true;
}
}
/* Array of FSI configurables that are common across device families */
let config = [
{
name: "GROUP_FRAMECFG",
displayName: "Frame Configuration",
longDescription: "This section is used for frame configuration " +
"for the RX module.",
collapsed: false,
config: [
{
name : "dataWidth",
displayName : "Number of Data Lines",
description : 'Number of lanes for communication',
hidden : false,
default : device_driverlib_peripheral.FSI_DataWidth[0].name,
options : device_driverlib_peripheral.FSI_DataWidth,
},
{
name : "softwareFrameSize",
displayName : "Software Frame Size",
description : 'When selecting N-WORD frame type, this determines number of words (N)',
hidden : false,
default : '8',
options : [
{ name: "1" , displayName : "1-Word"},
{ name: "2" , displayName : "2-Word"},
{ name: "3" , displayName : "3-Word"},
{ name: "4" , displayName : "4-Word"},
{ name: "5" , displayName : "5-Word"},
{ name: "6" , displayName : "6-Word"},
{ name: "7" , displayName : "7-Word"},
{ name: "8" , displayName : "8-Word"},
{ name: "9" , displayName : "9-Word"},
{ name: "10" , displayName : "10-Word"},
{ name: "11" , displayName : "11-Word"},
{ name: "12" , displayName : "12-Word"},
{ name: "13" , displayName : "13-Word"},
{ name: "14" , displayName : "14-Word"},
{ name: "15" , displayName : "15-Word"},
{ name: "16" , displayName : "16-Word" }
]
},
]
},
{
name : "enableLoopback",
displayName : "Loopback Mode",
description : 'Whether or not to use internal loopback mode',
longDescription: "The option to enable the loopback is provided in" +
"just the RX module. Additional steps to initialize " +
"RX core are to be done in the main source code.",
hidden : false,
default : false
},
]
if (!["F28004x"].includes(Common.getDeviceName())){
config = config.concat([
{
name: "GROUP_TAGMATCH",
displayName: "Tag Matching",
longDescription: "This section is used to configure the " +
"frame type and frame tag which will be matched " +
"with the incoming frame type and frame tag. The user " +
"can configure interrupts corresponding to tag match " +
"event for ping or frame under the interrupts tab.",
collapsed: false,
config: [
{
name : "enableTagMatching",
displayName : "Enable Tag Matching",
description : 'To Enable Tag matching for receieved frame tag.',
hidden : false,
onChange : onChangeEnableTagMatch,
default : false,
},
{
name : "frameType",
displayName : "Reference frame type",
description : 'Sets the Rx Frame Reference Type Value',
longDescription: "The reference type is used to check against " +
"when comparing the TAG_MASK and " +
"the incoming frame tag.",
hidden : true,
default : device_driverlib_peripheral.FSI_FrameType[0].name,
options : device_driverlib_peripheral.FSI_FrameType,
},
{
name : "frameTag",
displayName : "Reference frame tag",
description : 'Sets the Rx Frame Reference Tag Value',
longDescription: "The reference tag is used to check against " +
"when comparing the TAG_MASK and " +
"the incoming frame tag.",
hidden : true,
default : device_driverlib_peripheral.FSI_FrameTag[0].name,
options : device_driverlib_peripheral.FSI_FrameTag,
},
{
name : "tagMask",
displayName : "Tag Mask",
description : 'Sets the Rx Frame Tag Mask',
longDescription: "The tag mask is used ignore the specified " +
"bits in the frame tag during comparison.",
hidden : true,
default : 0,
},
]}
])
}
config = config.concat([
{
name: "GROUP_INT",
displayName: "Interrupts",
longDescription: "This section is used to configure the interrupts " +
"for the RX module.",
collapsed: false,
config: [
{
name : "enableInterrupt",
displayName : "Enable Interrupt",
description : 'To Enable FSI Interrupts.',
hidden : false,
onChange : onChangeEnableInterrupt,
default : false,
},
{
name : "useInterrupts",
displayName : "Use Interrupt",
description : 'Selection of FSI Interrupts.',
onChange : onChangeEnableInterrupt,
hidden : true,
default : [],
minSelections: 0,
options : device_driverlib_peripheral.FSI_InterruptNum
},
{
name : "enabledINT1Interrupts",
displayName : "Enabled INT1 Interrupts",
description : 'Interrupts to be enabled for INT1.',
hidden : true,
default : [],
minSelections: 0,
options : device_driverlib_peripheral.FSI_RX_EVT,
},
{
name : "enabledINT2Interrupts",
displayName : "Enabled INT2 Interrupts",
description : 'Interrupts to be enabled for INT2.',
hidden : true,
default : [],
minSelections: 0,
options : device_driverlib_peripheral.FSI_RX_EVT,
},
{
name : "registerInterruptLine1",
displayName : "Register Interrupt Line1 Handler",
description : 'Whether or not to register interrupt Line1 handlers in the interrupt module.',
hidden : true,
default : false
},
{
name : "registerInterruptLine2",
displayName : "Register Interrupt Line2 Handler",
description : 'Whether or not to register interrupt Line2 handlers in the interrupt module.',
hidden : true,
default : false
},
]
},
{
name: "GROUP_PING",
displayName: "Ping Timeout",
longDescription: "This function is meant to set up ping watchdog " +
"for the RX module. The delay value will be time after " +
"which the received ping frame will be checked.",
collapsed: false,
config: [
{
name : "pingTimeout",
displayName : "Enable PING Timeout",
description : 'Enables the timeout for Ping.',
hidden : false,
onChange : onChangeEnablePingTimeout,
default : false,
},
{
name : "selectPingMode",
displayName : "Select PING Timeout Mode",
description : 'Select the timeout mode for Ping.',
hidden : true,
default : device_driverlib_peripheral.FSI_PingTimeoutMode[0].name,
options : device_driverlib_peripheral.FSI_PingTimeoutMode
},
{
name : "timeoutDelay",
displayName : "Select PING Timeout Delay",
description : 'Enter the timeout value for ping watchdog in integer.',
hidden : true,
default : 0
},
]
},
{
name: "GROUP_DELAY",
displayName: "Delay Tap Selection",
longDescription: "This section enables the user to " +
"decide the delay for RXCLK line, RXD0 and " +
"RXD1 line. It is to be noted that these " +
"configurations do not enable the delay line functioning fully." +
" The user will need to perform additional steps mentioned in the " +
"device reference manual. The function defined in board.c file can " +
"be used as a starting point for the functionality.",
collapsed: false,
config: [
{
name : "enableDelayTap",
displayName : "Enable Delay Tapping",
description : 'To Enable Rx lines for delay tap selection.',
hidden : false,
onChange : onChangeEnableDelayTap,
default : false,
},
{
name : "tapValue1",
displayName : "Enter Delay Tap Value for CLK",
description : '5 bit value of the amount of delay to be added',
hidden : true,
default : 0
},
{
name : "tapValue2",
displayName : "Enter Delay Tap Value for D0",
description : '5 bit value of the amount of delay to be added',
hidden : true,
default : 0
},
{
name : "tapValue3",
displayName : "Enter Delay Tap Value for D1",
description : '5 bit value of the amount of delay to be added',
hidden : true,
default : 0
},
]
},
{
name: "useCase",
displayName : "PinMux Use Case",
description : 'Peripheral use case',
hidden : false,
default : 'ALL',
options : Pinmux.getPeripheralUseCaseNames("FSIRX"),
onChange : Pinmux.useCaseChanged,
},
])
function onValidate(inst, validation)
{
if (inst.timeoutDelay < 0 || inst.timeoutDelay > 0xFFFFFFFF)
{
validation.logError(
"Enter an integer value for Ping Timeout within 32 bits!",
inst, "timeoutDelay");
}
if (inst.tapValue1 < 0 || inst.tapValue1 > 0x1F)
{
validation.logError(
"Enter an integer for Delay Tapping between 0 and 31!",
inst, "tapValue1");
}
if (inst.tapValue2 < 0 || inst.tapValue2 > 0x1F)
{
validation.logError(
"Enter an integer for Delay Tapping between 0 and 31!",
inst, "tapValue2");
}
if (inst.tapValue3 < 0 || inst.tapValue3 > 0x1F)
{
validation.logError(
"Enter an integer for Delay Tapping between 0 and 31!",
inst, "tapValue3");
}
if (inst.tagMask < 0 || inst.tagMask > 0xF)
{
validation.logError(
"Enter an integer for Tag Mask within 4 bits!",
inst, "tagMask");
}
}
/*
* ======== filterHardware ========
* Control RX, TX Pin usage by the user specified dataDirection.
*
* param component - hardware object describing signals and
* resources they're attached to
*
* returns Boolean indicating whether or not to allow the component to
* be assigned to an instance's $hardware config
*/
function filterHardware(component)
{
return (Common.typeMatches(component.type, ["FSIRX", "FSI"]));
}
if (Common.onlyPinmux())
{
config = [config[config.length - 1]];
}
var fsirxModule = {
peripheralName: "FSIRX",
displayName: "FSIRX",
maxInstances: Common.peripheralCount("FSIRX"),
defaultInstanceName: "myFSIRX",
description: "Fast Serial Interface Receiver Peripheral",
longDescription: (Common.getCollateralFindabilityList("FSI")),
filterHardware : filterHardware,
config: config,
validate: onValidate,
moduleInstances: (inst) => {
var interrupts = []
var dlibInt1 = "INT_#1";
var dlibInt2 = "INT_#2";
if (["F28004x"].includes(Common.getDeviceName()))
{
dlibInt1 = "INT_#_INT1"
dlibInt2 = "INT_#_INT2"
}
var pinmuxQualMods = Pinmux.getGpioQualificationModInstDefinitions("FSIRX", inst)
for (var pinmuxQualMod of pinmuxQualMods)
{
pinmuxQualMod.requiredArgs = {
qualMode : "GPIO_QUAL_ASYNC",
}
}
interrupts = interrupts.concat(pinmuxQualMods)
if (inst.enableInterrupt && inst.registerInterruptLine1)
{
interrupts.push(
{
name: "fsiRxInt1",
displayName: "Rx Interrupt 1",
moduleName: "/driverlib/interrupt.js",
collapsed: true,
args: {
$name : inst.$name + "_INT1",
int : "INT_" + inst.$name + "_1",
pinmuxPeripheralModule : "fsirx",
driverlibInt: dlibInt1
}
}
)
}
if (inst.enableInterrupt && inst.registerInterruptLine2)
{
interrupts.push(
{
name: "fsiRxInt2",
displayName: "Rx Interrupt 2",
moduleName: "/driverlib/interrupt.js",
collapsed: true,
args: {
$name : inst.$name + "_INT2",
int : "INT_" + inst.$name + "_2",
pinmuxPeripheralModule : "fsirx",
driverlibInt: dlibInt2
}
}
)
}
return interrupts;
},
validate : onValidate,
templates: {
boardc : "/driverlib/fsirx/fsirx.board.c.xdt",
boardh : "/driverlib/fsirx/fsirx.board.h.xdt"
},
pinmuxRequirements : Pinmux.fsirxPinmuxRequirements
};
if (fsirxModule.maxInstances <= 0)
{
delete fsirxModule.pinmuxRequirements;
}
else
{
Pinmux.addCustomPinmuxEnumToConfig(fsirxModule)
Pinmux.addPinMuxQualGroupToConfig(fsirxModule)
}
exports = fsirxModule;