323 lines
9.4 KiB
JavaScript
323 lines
9.4 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() + "_sci.js");
|
|
|
|
function onChangeUseFIFO(inst, ui)
|
|
{
|
|
onChangeUseInterrupts(inst,ui);
|
|
}
|
|
|
|
function onChangeUseInterrupts(inst, ui)
|
|
{
|
|
if (inst.useInterrupts)
|
|
{
|
|
ui.enabledErrorInterrupts.hidden = false;
|
|
ui.registerInterrupts.hidden = false;
|
|
|
|
if (inst.useFifo)
|
|
{
|
|
ui.enabledFIFOInterrupts.hidden = false;
|
|
ui.enabledInterrupts.hidden = true;
|
|
|
|
ui.txFifo.hidden = false;
|
|
ui.rxFifo.hidden = false;
|
|
}
|
|
else
|
|
{
|
|
ui.enabledFIFOInterrupts.hidden = true;
|
|
ui.enabledInterrupts.hidden = false;
|
|
|
|
ui.txFifo.hidden = true;
|
|
ui.rxFifo.hidden = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ui.enabledInterrupts.hidden = true;
|
|
ui.enabledFIFOInterrupts.hidden = true;
|
|
ui.enabledErrorInterrupts.hidden = true;
|
|
ui.registerInterrupts.hidden = true;
|
|
ui.txFifo.hidden = true;
|
|
ui.rxFifo.hidden = true;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
/* Intro splash on GUI */
|
|
let longDescription = "An SCI peripheral is used to translate data between " +
|
|
"the chip and a serial port. The SCI driver simplifies reading " +
|
|
"and writing to any of the SCI(UART) peripherals on the board, with " +
|
|
"multiple modes of operation and performance. These include " +
|
|
"blocking, non-blocking, and polling, as well as text/binary " +
|
|
"mode, echo and return characters.";
|
|
|
|
/* Array of SCI configurables that are common across device families */
|
|
let config = [
|
|
{
|
|
name : "wordLenght",
|
|
displayName : "Word Length",
|
|
description : 'Length of word.',
|
|
hidden : false,
|
|
default : '8',
|
|
options : [
|
|
{ name: "1" },
|
|
{ name: "2" },
|
|
{ name: "3" },
|
|
{ name: "4" },
|
|
{ name: "5" },
|
|
{ name: "6" },
|
|
{ name: "7" },
|
|
{ name: "8" }
|
|
]
|
|
},
|
|
|
|
{
|
|
name : "stop",
|
|
displayName : "Stop Mode",
|
|
description : 'Number of stop bits.',
|
|
hidden : false,
|
|
default : 'ONE',
|
|
options : [
|
|
{ name: "ONE", displayName: "1" },
|
|
{ name: "TWO", displayName: "2" }
|
|
]
|
|
},
|
|
|
|
{
|
|
name : "parity",
|
|
displayName : "Parity Mode",
|
|
description : 'Parity mode.',
|
|
hidden : false,
|
|
default : device_driverlib_peripheral.SCI_ParityType[0].name,
|
|
options : device_driverlib_peripheral.SCI_ParityType
|
|
},
|
|
|
|
{
|
|
name : "useInterrupts",
|
|
displayName : "Use Interrupt",
|
|
description : 'Whether or not to use Interrupt mode.',
|
|
hidden : false,
|
|
onChange : onChangeUseInterrupts,
|
|
default : true
|
|
|
|
},
|
|
{
|
|
name : "registerInterrupts",
|
|
displayName : "Register Interrupt Handler",
|
|
description : 'Whether or not to register interrupt handlers in the interrupt module.',
|
|
hidden : false,
|
|
default : false
|
|
|
|
},
|
|
{
|
|
name : "enabledInterrupts",
|
|
displayName : "Enabled Interrupts",
|
|
description : 'Which interrupts to enabled.',
|
|
hidden : true,
|
|
default : [],
|
|
minSelections: 0,
|
|
options : [
|
|
{name: "SCI_INT_RXRDY_BRKDT", displayName: "Receive Interrupt"},
|
|
{name: "SCI_INT_TXRDY", displayName: "Transmit Interrupt"},
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
name : "enabledErrorInterrupts",
|
|
displayName : "Enabled Error Interrupts",
|
|
description : 'Which error interrupts to enabled.',
|
|
hidden : false,
|
|
default : [],
|
|
minSelections: 0,
|
|
options : [
|
|
{name: "SCI_INT_RXERR", displayName: "Receive Error Interrupt"},
|
|
{name: "SCI_INT_PE", displayName: "Parity Error Interrupt"},
|
|
{name: "SCI_INT_FE", displayName: "Frame Error Interrupt"},
|
|
{name: "SCI_INT_OE", displayName: "Overrun Error Interrupt"}
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
name : "enabledFIFOInterrupts",
|
|
displayName : "Enabled FIFO Interrupts",
|
|
description : 'Which FIFO interrupts to enabled.',
|
|
hidden : false,
|
|
default : [],
|
|
minSelections: 0,
|
|
options : [
|
|
{name: "SCI_INT_RXFF", displayName: "Receive Interrupt"},
|
|
{name: "SCI_INT_TXFF", displayName: "Transmit Interrupt"},
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
name : "useFifo",
|
|
displayName : "Use FIFO",
|
|
description : 'Whether or not to use FIFO mode.',
|
|
hidden : false,
|
|
onChange : onChangeUseFIFO,
|
|
default : true
|
|
|
|
},
|
|
|
|
{
|
|
name : "txFifo",
|
|
displayName : "Transmit FIFO Interrupt Level",
|
|
description : 'Transmit FIFO interrupt level used.',
|
|
hidden : false,
|
|
default : device_driverlib_peripheral.SCI_TxFIFOLevel[0].name,
|
|
options : device_driverlib_peripheral.SCI_TxFIFOLevel
|
|
},
|
|
|
|
{
|
|
name : "rxFifo",
|
|
displayName : "Receive FIFO Interrupt Level",
|
|
description : 'Receive FIFO interrupt level used.',
|
|
hidden : false,
|
|
default : device_driverlib_peripheral.SCI_RxFIFOLevel[0].name,
|
|
options : device_driverlib_peripheral.SCI_RxFIFOLevel
|
|
},
|
|
|
|
{
|
|
name : "loopback",
|
|
displayName : "Use loopback Mode",
|
|
description : 'Whether or not to use loopback mode.',
|
|
hidden : false,
|
|
default : false
|
|
|
|
},
|
|
{
|
|
name : "baudRates",
|
|
displayName : "Baud Rate",
|
|
description : 'The set of baud rates that are used by this instance. '
|
|
+ 'On some devices, these rates are used to pre-compute '
|
|
+ 'a table of clock dividers necessary for each rate.',
|
|
hidden : false,
|
|
default : 115200,
|
|
},
|
|
{
|
|
name: "useCase",
|
|
displayName : "Use Case",
|
|
description : 'Peripheral use case',
|
|
hidden : false,
|
|
default : 'ALL',
|
|
options : Pinmux.getPeripheralUseCaseNames("SCI"),
|
|
onChange : Pinmux.useCaseChanged,
|
|
},
|
|
];
|
|
|
|
|
|
function onValidate(inst, validation)
|
|
{
|
|
var bitRateInt = parseInt(inst.baudRates);
|
|
var bitRateError = false;
|
|
if (bitRateInt < 1 || bitRateInt > 12500000)
|
|
{
|
|
bitRateError = true;
|
|
}
|
|
if(bitRateError)
|
|
{
|
|
validation.logError(
|
|
"Enter an integer for baud rates between 1 and LSPCLK/16!",
|
|
inst, "baudRates");
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* ======== 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, ["SCI"]));
|
|
}
|
|
|
|
if (Common.onlyPinmux())
|
|
{
|
|
config = [config[config.length - 1]];
|
|
}
|
|
|
|
var sciModule = {
|
|
peripheralName: "SCI",
|
|
displayName: "SCI",
|
|
maxInstances: Common.peripheralCount("SCI"),
|
|
defaultInstanceName: "mySCI",
|
|
description: "Serial Communication Interface Peripheral",
|
|
longDescription: (Common.getCollateralFindabilityList("SCI")),
|
|
filterHardware : filterHardware,
|
|
moduleInstances: (inst) => {
|
|
var ownedInstances = []
|
|
var pinmuxQualMods = Pinmux.getGpioQualificationModInstDefinitions("SCI", inst)
|
|
for (var pinmuxQualMod of pinmuxQualMods)
|
|
{
|
|
pinmuxQualMod.requiredArgs = {
|
|
qualMode : "GPIO_QUAL_ASYNC",
|
|
}
|
|
pinmuxQualMod.args.padConfig = "PULLUP";
|
|
}
|
|
ownedInstances = ownedInstances.concat(pinmuxQualMods)
|
|
|
|
if (inst.useInterrupts && inst.registerInterrupts)
|
|
{
|
|
ownedInstances = ownedInstances.concat([{
|
|
name: "sciRXInt",
|
|
displayName: "RX Interrupt",
|
|
moduleName: "/driverlib/interrupt.js",
|
|
collapsed: true,
|
|
args: {
|
|
$name : inst.$name + "_RX_INT",
|
|
int : "INT_" + inst.$name + "_RX",
|
|
pinmuxPeripheralModule : "sci",
|
|
driverlibInt: "INT_#_RX"
|
|
}
|
|
},
|
|
{
|
|
name: "sciTXInt",
|
|
displayName: "TX Interrupt",
|
|
moduleName: "/driverlib/interrupt.js",
|
|
collapsed: true,
|
|
args: {
|
|
$name : inst.$name + "_TX_INT",
|
|
int : "INT_" + inst.$name + "_TX",
|
|
pinmuxPeripheralModule : "sci",
|
|
driverlibInt: "INT_#_TX"
|
|
}
|
|
}])
|
|
}
|
|
return ownedInstances;
|
|
},
|
|
config: config,
|
|
templates: {
|
|
boardc : "/driverlib/sci/sci.board.c.xdt",
|
|
boardh : "/driverlib/sci/sci.board.h.xdt"
|
|
},
|
|
pinmuxRequirements : Pinmux.sciPinmuxRequirements,
|
|
validate : onValidate
|
|
};
|
|
|
|
if (sciModule.maxInstances <= 0)
|
|
{
|
|
delete sciModule.pinmuxRequirements;
|
|
}
|
|
else
|
|
{
|
|
Pinmux.addCustomPinmuxEnumToConfig(sciModule)
|
|
Pinmux.addPinMuxQualGroupToConfig(sciModule)
|
|
}
|
|
|
|
|
|
exports = sciModule; |