150 lines
4.1 KiB
JavaScript
150 lines
4.1 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() + "_gpio.js");
|
||
|
|
|
||
|
|
var xint_inputxbar_map = {
|
||
|
|
"GPIO_INT_XINT1" : "XBAR_INPUT4",
|
||
|
|
"GPIO_INT_XINT2" : "XBAR_INPUT5",
|
||
|
|
"GPIO_INT_XINT3" : "XBAR_INPUT6",
|
||
|
|
"GPIO_INT_XINT4" : "XBAR_INPUT13",
|
||
|
|
"GPIO_INT_XINT5" : "XBAR_INPUT14",
|
||
|
|
}
|
||
|
|
|
||
|
|
/* Intro splash on GUI */
|
||
|
|
let longDescription = "The external interrupt module (XINT).";
|
||
|
|
|
||
|
|
/* Array of SCI configurables that are common across device families */
|
||
|
|
let config = [
|
||
|
|
{
|
||
|
|
name: "xintNum",
|
||
|
|
displayName: "XINT Instance",
|
||
|
|
options: device_driverlib_peripheral.GPIO_ExternalIntNum,
|
||
|
|
default: device_driverlib_peripheral.GPIO_ExternalIntNum[0].name
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "intType",
|
||
|
|
displayName: "Interrupt Edge",
|
||
|
|
options: device_driverlib_peripheral.GPIO_IntType,
|
||
|
|
default: device_driverlib_peripheral.GPIO_IntType[0].name
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "enableInt",
|
||
|
|
displayName: "Enable Interrupt",
|
||
|
|
default: false,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "registerInterrupts",
|
||
|
|
displayName: "Register Interrupt Handler",
|
||
|
|
default: false,
|
||
|
|
}
|
||
|
|
];
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* ======== 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, ["XINT"]));
|
||
|
|
}
|
||
|
|
|
||
|
|
function sharedModuleInstances(inst)
|
||
|
|
{
|
||
|
|
var sharedMods = []
|
||
|
|
//GROUP_XINT
|
||
|
|
sharedMods.push({
|
||
|
|
name: "inputxbar",
|
||
|
|
displayName: "INPUTXBAR",
|
||
|
|
moduleName: "/driverlib/inputxbar_input.js",
|
||
|
|
collapsed: true,
|
||
|
|
requiredArgs : {
|
||
|
|
inputxbarInput : xint_inputxbar_map[inst.xintNum]
|
||
|
|
}
|
||
|
|
})
|
||
|
|
return sharedMods
|
||
|
|
}
|
||
|
|
|
||
|
|
function moduleInstances(inst)
|
||
|
|
{
|
||
|
|
var mods = []
|
||
|
|
|
||
|
|
if (inst.registerInterrupts)
|
||
|
|
{
|
||
|
|
mods.push({
|
||
|
|
name: "xInt",
|
||
|
|
displayName: "XINT PIE Interrupt Configuration",
|
||
|
|
moduleName: "/driverlib/interrupt.js",
|
||
|
|
collapsed: true,
|
||
|
|
args: {
|
||
|
|
$name : inst.$name + "_INT",
|
||
|
|
int : "INT_" + inst.$name,
|
||
|
|
pinmuxPeripheralModule : "",
|
||
|
|
driverlibInt: "INT_" + inst.xintNum.replace("GPIO_INT_", "")
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
return mods
|
||
|
|
}
|
||
|
|
|
||
|
|
function onValidate(inst, validation)
|
||
|
|
{
|
||
|
|
var baseName = "xintNum"
|
||
|
|
var usedInsts = [];
|
||
|
|
for (var instance_index in inst.$module.$instances)
|
||
|
|
{
|
||
|
|
var instance_obj = inst.$module.$instances[instance_index];
|
||
|
|
usedInsts.push(instance_obj[baseName]);
|
||
|
|
}
|
||
|
|
|
||
|
|
var duplicatesResult = Common.findDuplicates(usedInsts)
|
||
|
|
|
||
|
|
if (duplicatesResult.duplicates.length != 0)
|
||
|
|
{
|
||
|
|
var allDuplicates = "";
|
||
|
|
for (var duplicateNamesIndex in duplicatesResult.duplicates)
|
||
|
|
{
|
||
|
|
allDuplicates = allDuplicates + Common.stringOrEmpty(allDuplicates, ", ")
|
||
|
|
+ duplicatesResult.duplicates[duplicateNamesIndex];
|
||
|
|
}
|
||
|
|
validation.logError(
|
||
|
|
"The module instance used is duplicated and it must be unique. Duplicates: " + allDuplicates,
|
||
|
|
inst, baseName);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (Common.onlyPinmux())
|
||
|
|
{
|
||
|
|
config = [];
|
||
|
|
}
|
||
|
|
var xintModule = {
|
||
|
|
peripheralName: "XINT",
|
||
|
|
displayName: "XINT",
|
||
|
|
maxInstances: device_driverlib_peripheral.GPIO_ExternalIntNum.length,
|
||
|
|
defaultInstanceName: "myXINT",
|
||
|
|
sharedModuleInstances: sharedModuleInstances,
|
||
|
|
moduleInstances: moduleInstances,
|
||
|
|
description: "External Interrupt (XINT)",
|
||
|
|
longDescription: longDescription,
|
||
|
|
filterHardware : filterHardware,
|
||
|
|
validate: onValidate,
|
||
|
|
config: config,
|
||
|
|
templates: {
|
||
|
|
boardc : "/driverlib/gpio/xint.board.c.xdt",
|
||
|
|
boardh : "/driverlib/gpio/xint.board.h.xdt"
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
exports = xintModule;
|