Update repo
This commit is contained in:
@@ -0,0 +1,494 @@
|
||||
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 onChangeTransmissionMode(inst, ui)
|
||||
{
|
||||
if (inst.startOfTransmissionMode.indexOf(device_driverlib_peripheral.FSI_TxStartMode[1].name) != -1) {
|
||||
ui.extTriggerSource.hidden = false;
|
||||
}
|
||||
else {
|
||||
ui.extTriggerSource.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 onChangeUserCRC(inst, ui)
|
||||
{
|
||||
if (inst.userCRC) {
|
||||
ui.valueCRC.hidden = false;
|
||||
}
|
||||
else {
|
||||
ui.valueCRC.hidden = true;
|
||||
}
|
||||
}
|
||||
|
||||
/* Array of FSI configurables that are common across device families */
|
||||
let config = [
|
||||
{
|
||||
//
|
||||
// This is needed for locking some options when a HARDWARE is needed
|
||||
// Currently we only have NO STROB connection for EQEP on launchpads
|
||||
//
|
||||
name: "$hardware",
|
||||
onChange: (inst, ui) => {
|
||||
if (inst.$hardware)
|
||||
{
|
||||
var useCaseNames = Pinmux.getPeripheralUseCaseNames("FSITX").map((useCaseOpt) => {
|
||||
return useCaseOpt.name
|
||||
}
|
||||
);
|
||||
|
||||
if (useCaseNames.includes("FSI TX Dual Dataline"))
|
||||
{
|
||||
inst.useCase = "FSI TX Dual Dataline"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
name : "clkPres",
|
||||
displayName : "Clock Prescalar",
|
||||
description : 'Prescaler for the TX CLK, 50 MHz max.',
|
||||
hidden : false,
|
||||
default : 4
|
||||
},
|
||||
{
|
||||
name : "txclk",
|
||||
displayName : "FSI TXCLK [MHz]",
|
||||
default : Common.SYSCLK_getMaxMHz()/4/2,
|
||||
getValue : (inst) => {
|
||||
var clockTree = Common.getClockTree();
|
||||
if (clockTree)
|
||||
{
|
||||
// console.log(clockTree["PLLRAWCLK"])
|
||||
return clockTree["PLLRAWCLK"].in/inst.clkPres/2
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "GROUP_FRAMECFG",
|
||||
displayName: "Frame Configuration",
|
||||
longDescription: "This section is used for frame configuration " +
|
||||
"for the TX module. The frame tag and frame type " +
|
||||
"are for initial configuration and not for run time.",
|
||||
collapsed: false,
|
||||
config: [
|
||||
{
|
||||
name : "dataWidth",
|
||||
displayName : "Data Width",
|
||||
description : 'Number of lanes for communication',
|
||||
hidden : false,
|
||||
default : device_driverlib_peripheral.FSI_DataWidth[0].name,
|
||||
options : device_driverlib_peripheral.FSI_DataWidth,
|
||||
},
|
||||
|
||||
{
|
||||
name : "startOfTransmissionMode",
|
||||
displayName : "Start of Transmission Mode",
|
||||
description : 'Mode for the start of transmission',
|
||||
hidden : false,
|
||||
onChange : onChangeTransmissionMode,
|
||||
default : device_driverlib_peripheral.FSI_TxStartMode[0].name,
|
||||
options : device_driverlib_peripheral.FSI_TxStartMode,
|
||||
},
|
||||
|
||||
{
|
||||
name : "extTriggerSource",
|
||||
displayName : "External Start of Transmission Trigger Source",
|
||||
description : 'External Start of Transmission Trigger Source',
|
||||
hidden : true,
|
||||
default : device_driverlib_peripheral.FSI_ExtFrameTriggerSrc[0].name,
|
||||
options : device_driverlib_peripheral.FSI_ExtFrameTriggerSrc,
|
||||
},
|
||||
|
||||
{
|
||||
name : "frameType",
|
||||
displayName : "Initial frame type",
|
||||
description : 'Initial frame type to be sent',
|
||||
longDescription: "This configuration is just for the first frame to " +
|
||||
"be sent. The user will have to configure run time updates " +
|
||||
"in the code.",
|
||||
hidden : false,
|
||||
default : device_driverlib_peripheral.FSI_FrameType[0].name,
|
||||
options : device_driverlib_peripheral.FSI_FrameType,
|
||||
},
|
||||
|
||||
{
|
||||
name : "frameTag",
|
||||
displayName : "Initial frame tag",
|
||||
description : 'Initial frame tag to be sent',
|
||||
longDescription: "This configuration is just for the first frame to " +
|
||||
"be sent. The user will have to configure run time updates " +
|
||||
"in the code.",
|
||||
hidden : false,
|
||||
default : device_driverlib_peripheral.FSI_FrameTag[0].name,
|
||||
options : device_driverlib_peripheral.FSI_FrameTag,
|
||||
},
|
||||
|
||||
{
|
||||
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: "GROUP_INT",
|
||||
displayName: "Interrupts",
|
||||
longDescription: "This section is used to configure the interrupts " +
|
||||
"for the TX 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 : 'Whether or not to use Interrupt mode.',
|
||||
onChange : onChangeEnableInterrupt,
|
||||
hidden : true,
|
||||
default : [],
|
||||
minSelections: 0,
|
||||
options : device_driverlib_peripheral.FSI_InterruptNum
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
name : "enabledINT1Interrupts",
|
||||
displayName : "Enabled INT1 Interrupts",
|
||||
description : 'Which interrupts to be enabled for INT1.',
|
||||
hidden : true,
|
||||
default : [],
|
||||
minSelections: 0,
|
||||
options : device_driverlib_peripheral.FSI_TX_EVT,
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
name : "enabledINT2Interrupts",
|
||||
displayName : "Enabled INT2 Interrupts",
|
||||
description : 'Which interrupts to be enabled for INT2.',
|
||||
hidden : true,
|
||||
default : [],
|
||||
minSelections: 0,
|
||||
options : device_driverlib_peripheral.FSI_TX_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 automatic ping transmission " +
|
||||
"for the TX module. The delay value will be time difference between " +
|
||||
"ping frames sent.",
|
||||
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_CRCECC",
|
||||
displayName: "User CRC and ECC",
|
||||
longDescription: "This section allows the user to configure the user CRC " +
|
||||
"and ECC computation width. The CRC option if not enabled " +
|
||||
"will be computed by the hardware. For ECC, the default option " +
|
||||
"is 32 bits wide which can be changed to 16 bits based on requirement.",
|
||||
collapsed: false,
|
||||
config: [
|
||||
{
|
||||
name : "userCRC",
|
||||
displayName : "User calculates CRC",
|
||||
description : 'Whether the user calculates the CRC or the calculation is done by the CRC hardware',
|
||||
hidden : false,
|
||||
onChange : onChangeUserCRC,
|
||||
default : false
|
||||
},
|
||||
|
||||
{
|
||||
name : "valueCRC",
|
||||
displayName : "Enter CRC Value",
|
||||
description : 'Value to be entered within 7 bits',
|
||||
hidden : true,
|
||||
default : '10'
|
||||
},
|
||||
|
||||
{
|
||||
name : "eccComputeWidth",
|
||||
displayName : "ECC Compute Width Mode",
|
||||
description : 'The ECC Compute Width Mode',
|
||||
hidden : false,
|
||||
default : device_driverlib_peripheral.FSI_ECCComputeWidth[0].name,
|
||||
options : device_driverlib_peripheral.FSI_ECCComputeWidth
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
name: "useCase",
|
||||
displayName : "PinMux Use Case",
|
||||
description : 'Peripheral use case',
|
||||
hidden : false,
|
||||
default : 'ALL',
|
||||
options : Pinmux.getPeripheralUseCaseNames("FSITX"),
|
||||
onChange : Pinmux.useCaseChanged,
|
||||
},
|
||||
];
|
||||
|
||||
/*
|
||||
* ======== 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, ["FSITX", "FSI"]));
|
||||
}
|
||||
|
||||
if (Common.onlyPinmux())
|
||||
{
|
||||
config = [config[config.length - 1]];
|
||||
}
|
||||
|
||||
var fsitxModule = {
|
||||
peripheralName: "FSITX",
|
||||
displayName: "FSITX",
|
||||
maxInstances: Common.peripheralCount("FSITX"),
|
||||
defaultInstanceName: "myFSITX",
|
||||
description: "Fast Serial Interface Transmitter Peripheral",
|
||||
longDescription: (Common.getCollateralFindabilityList("FSI")),
|
||||
filterHardware : filterHardware,
|
||||
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("FSITX", inst)
|
||||
for (var pinmuxQualMod of pinmuxQualMods)
|
||||
{
|
||||
pinmuxQualMod.args = {
|
||||
qualMode : "GPIO_QUAL_ASYNC",
|
||||
padConfig : "STD",
|
||||
}
|
||||
}
|
||||
interrupts = interrupts.concat(pinmuxQualMods)
|
||||
|
||||
if (inst.enableInterrupt && inst.registerInterruptLine1)
|
||||
{
|
||||
interrupts.push(
|
||||
{
|
||||
name: "fsiTxInt1",
|
||||
displayName: "Tx Interrupt 1",
|
||||
moduleName: "/driverlib/interrupt.js",
|
||||
collapsed: true,
|
||||
args: {
|
||||
$name : inst.$name + "_INT1",
|
||||
int : "INT_" + inst.$name + "_1",
|
||||
pinmuxPeripheralModule : "fsitx",
|
||||
driverlibInt: dlibInt1
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
if (inst.enableInterrupt && inst.registerInterruptLine2)
|
||||
{
|
||||
interrupts.push(
|
||||
{
|
||||
name: "fsiTxInt2",
|
||||
displayName: "Tx Interrupt 2",
|
||||
moduleName: "/driverlib/interrupt.js",
|
||||
collapsed: true,
|
||||
args: {
|
||||
$name : inst.$name + "_INT2",
|
||||
int : "INT_" + inst.$name + "_2",
|
||||
pinmuxPeripheralModule : "fsitx",
|
||||
driverlibInt: dlibInt2
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
return interrupts;
|
||||
},
|
||||
validate: onValidate,
|
||||
config: config,
|
||||
templates: {
|
||||
boardc : "/driverlib/fsitx/fsitx.board.c.xdt",
|
||||
boardh : "/driverlib/fsitx/fsitx.board.h.xdt"
|
||||
},
|
||||
pinmuxRequirements : Pinmux.fsitxPinmuxRequirements
|
||||
};
|
||||
|
||||
function onValidate(inst, validation)
|
||||
{
|
||||
if (inst.clkPres < 0 || inst.clkPres > 0xFF)
|
||||
{
|
||||
validation.logError(
|
||||
"Enter an integer for Clock Prescalar between 0 and 255!",
|
||||
inst, "clkPres");
|
||||
}
|
||||
if (inst.timeoutDelay < 0 || inst.timeoutDelay > 0xFFFFFFFF)
|
||||
{
|
||||
validation.logError(
|
||||
"Enter integer value for Ping Timeout within 32 bits!",
|
||||
inst, "timeoutDelay");
|
||||
}
|
||||
if (inst.valueCRC < 0 || inst.valueCRC > 0xFF)
|
||||
{
|
||||
validation.logError(
|
||||
"Enter an integer for User CRC between 0 and 255!",
|
||||
inst, "valueCRC");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (fsitxModule.maxInstances <= 0)
|
||||
{
|
||||
delete fsitxModule.pinmuxRequirements;
|
||||
}
|
||||
else
|
||||
{
|
||||
Pinmux.addCustomPinmuxEnumToConfig(fsitxModule)
|
||||
Pinmux.addPinMuxQualGroupToConfig(fsitxModule)
|
||||
}
|
||||
|
||||
exports = fsitxModule;
|
||||
Reference in New Issue
Block a user