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

323 lines
9.4 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() + "_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;