240 lines
8.0 KiB
Plaintext
240 lines
8.0 KiB
Plaintext
% var module = system.modules['/driverlib/lin.js'];
|
|
% let Common = system.getScript("/driverlib/Common.js");
|
|
% var nameOfModule = "lin";
|
|
% var nameOfPeripheral = module.peripheralName;
|
|
//*****************************************************************************
|
|
//
|
|
// LIN Configurations
|
|
//
|
|
//*****************************************************************************
|
|
void `nameOfPeripheral`_init(){
|
|
% for(var i = 0; i < module.$instances.length; i++)
|
|
% {
|
|
% var instance = module.$instances[i];
|
|
`instance.$name`_init();
|
|
% }
|
|
}
|
|
|
|
%if (module != null)
|
|
%{
|
|
% for(var i = 0; i < module.$instances.length; i++) {
|
|
% var instance = module.$instances[i];
|
|
void `instance.$name`_init(){
|
|
% if (instance.opMode == "LIN"){
|
|
|
|
//
|
|
// Initialize the LIN Module in LIN mode
|
|
//
|
|
LIN_initModule(`instance.$name`_BASE);
|
|
|
|
//
|
|
// Enter Software Reset State
|
|
//
|
|
LIN_enterSoftwareReset(`instance.$name`_BASE);
|
|
LIN_setLINMode(`instance.$name`_BASE, `instance.linMode`);
|
|
% if (instance.linMode == "LIN_MODE_LIN_RESPONDER" && instance.setResponderID)
|
|
% {
|
|
LIN_setIDResponderTask(`instance.$name`_BASE, (uint16_t)(0x`instance.responderIdByte`U));
|
|
%}
|
|
LIN_setCommMode(`instance.$name`_BASE, `instance.linCommMode`);
|
|
LIN_setDebugSuspendMode(`instance.$name`_BASE, `instance.linDebugMode`);
|
|
LIN_setChecksumType(`instance.$name`_BASE, `instance.linChecksumType`);
|
|
LIN_setMessageFiltering(`instance.$name`_BASE, `instance.linMessageFilter`);
|
|
% if (instance.autoBaudRate && instance.linMode == "LIN_MODE_LIN_RESPONDER")
|
|
% {
|
|
LIN_enableAutomaticBaudrate(`instance.$name`_BASE);
|
|
LIN_setMaximumBaudRate(`instance.$name`_BASE, `instance.linClkValue`, `instance.mbrVal`);
|
|
%} else {
|
|
LIN_setBaudRatePrescaler(`instance.$name`_BASE, `instance.brPrescaler`U, `instance.brDivider`U);
|
|
%}
|
|
LIN_setFrameLength(`instance.$name`_BASE, `instance.linFrameLength`U);
|
|
LIN_setSyncFields(`instance.$name`_BASE, `instance.syncBreak`U, `instance.delimiter`U);
|
|
LIN_setTxMask(`instance.$name`_BASE, (uint16_t)(0x`instance.txMask`U));
|
|
LIN_setRxMask(`instance.$name`_BASE, (uint16_t)(0x`instance.rxMask`U));
|
|
% if (instance.enableParity)
|
|
% {
|
|
LIN_enableParity(`instance.$name`_BASE);
|
|
%} else {
|
|
LIN_disableParity(`instance.$name`_BASE);
|
|
%}
|
|
% if (instance.enableMultibuffer)
|
|
% {
|
|
LIN_enableMultibufferMode(`instance.$name`_BASE);
|
|
%} else {
|
|
LIN_disableMultibufferMode(`instance.$name`_BASE);
|
|
%}
|
|
|
|
//
|
|
// Finally exit SW reset and enter LIN ready state
|
|
//
|
|
LIN_exitSoftwareReset(`instance.$name`_BASE);
|
|
% if (instance.enableLoopback){
|
|
|
|
//
|
|
// Enable LIN test mode
|
|
//
|
|
% if (instance.loopbackMode == "LIN_TEST_INTERNAL")
|
|
% {
|
|
|
|
//
|
|
// Enable Internal Loopback mode
|
|
//
|
|
LIN_enableIntLoopback(`instance.$name`_BASE);
|
|
%} else {
|
|
|
|
//
|
|
// Enable External Loopback mode
|
|
//
|
|
LIN_enableExtLoopback(`instance.$name`_BASE, `instance.loopbackType`, `instance.analogLoopbackPath`);
|
|
%}
|
|
%}
|
|
%if (instance.enableInterrupt)
|
|
%{
|
|
% let interrupts = ""
|
|
% for (let int_index in instance.interruptFlags)
|
|
% {
|
|
% interrupts += ((interrupts == "")?"":" | ") + instance.interruptFlags[int_index];
|
|
% }
|
|
%if (interrupts != "")
|
|
%{
|
|
LIN_enableInterrupt(`instance.$name`_BASE, `interrupts`);
|
|
%}
|
|
% let interruptLine0Flags = ""
|
|
% for (var int_index in instance.interruptPriorityLine0)
|
|
% {
|
|
% interruptLine0Flags += ((interruptLine0Flags == "")?"":" | ") + instance.interruptPriorityLine0[int_index];
|
|
% }
|
|
%if (interruptLine0Flags != "" && (instance.interruptLine.includes("LIN_INTERRUPT_LINE0")))
|
|
%{
|
|
|
|
//
|
|
// Set the LIN interrupt priority Line 0
|
|
//
|
|
LIN_setInterruptLevel0(`instance.$name`_BASE, `interruptLine0Flags`);
|
|
LIN_enableGlobalInterrupt(`instance.$name`_BASE, LIN_INTERRUPT_LINE0);
|
|
LIN_clearGlobalInterruptStatus(`instance.$name`_BASE, LIN_INTERRUPT_LINE0);
|
|
%}
|
|
% let interruptLine1Flags = ""
|
|
% for (let int_index in instance.interruptPriorityLine1)
|
|
% {
|
|
% interruptLine1Flags += ((interruptLine1Flags == "")?"":" | ") + instance.interruptPriorityLine1[int_index];
|
|
% }
|
|
%if (interruptLine1Flags != "" && (instance.interruptLine.includes("LIN_INTERRUPT_LINE1")))
|
|
%{
|
|
|
|
//
|
|
// Set the LIN interrupt priority Line 1
|
|
//
|
|
LIN_setInterruptLevel1(`instance.$name`_BASE, `interruptLine1Flags`);
|
|
LIN_enableGlobalInterrupt(`instance.$name`_BASE, LIN_INTERRUPT_LINE1);
|
|
LIN_clearGlobalInterruptStatus(`instance.$name`_BASE, LIN_INTERRUPT_LINE1);
|
|
%}
|
|
%}
|
|
% }
|
|
% else{
|
|
|
|
//
|
|
// Initialize the LIN Module in SCI mode
|
|
//
|
|
LIN_initSCIModule(`instance.$name`_BASE);
|
|
|
|
//
|
|
// Enter Software Reset State
|
|
//
|
|
LIN_enterSoftwareReset(`instance.$name`_BASE);
|
|
LIN_setSCICommMode(`instance.$name`_BASE, `instance.sciCommMode`);
|
|
% if (instance.sleepMode)
|
|
% {
|
|
LIN_enableSCISleepMode(`instance.$name`_BASE);
|
|
%}
|
|
LIN_setDebugSuspendMode(`instance.$name`_BASE, `instance.linDebugMode`);
|
|
LIN_setBaudRatePrescaler(`instance.$name`_BASE, `instance.brPrescaler`U, `instance.brDivider`U);
|
|
LIN_setSCIFrameLength(`instance.$name`_BASE, `instance.sciFrameLength`U);
|
|
LIN_setSCICharLength(`instance.$name`_BASE, `instance.sciCharLength`U);
|
|
LIN_setSCIStopBits(`instance.$name`_BASE, `instance.sciStopBits`);
|
|
% if (instance.enableSCIParity != "disabled")
|
|
% {
|
|
LIN_enableSCIParity(`instance.$name`_BASE, `instance.enableSCIParity`);
|
|
%} else {
|
|
LIN_disableSCIParity(`instance.$name`_BASE);
|
|
%}
|
|
% if (instance.enableMultibuffer)
|
|
% {
|
|
LIN_enableMultibufferMode(`instance.$name`_BASE);
|
|
%} else {
|
|
LIN_disableMultibufferMode(`instance.$name`_BASE);
|
|
%}
|
|
|
|
//
|
|
// Finally exit SW reset and enter LIN ready state
|
|
//
|
|
LIN_exitSoftwareReset(`instance.$name`_BASE);
|
|
% if (instance.enableLoopback){
|
|
|
|
//
|
|
// Enable SCI test mode
|
|
//
|
|
% if (instance.loopbackMode == "LIN_TEST_INTERNAL")
|
|
% {
|
|
|
|
//
|
|
// Enable Internal Loopback mode
|
|
//
|
|
LIN_enableIntLoopback(`instance.$name`_BASE);
|
|
%} else {
|
|
|
|
//
|
|
// Enable External Loopback mode
|
|
//
|
|
LIN_enableExtLoopback(`instance.$name`_BASE, `instance.loopbackType`, `instance.analogLoopbackPath`);
|
|
%}
|
|
%}
|
|
%if (instance.enableInterrupt)
|
|
%{
|
|
% let interrupts = ""
|
|
% for (let int_index in instance.sciInterruptFlags)
|
|
% {
|
|
% interrupts += ((interrupts == "")?"":" | ") + instance.sciInterruptFlags[int_index];
|
|
% }
|
|
%if (interrupts != "")
|
|
%{
|
|
LIN_enableSCIInterrupt(`instance.$name`_BASE, `interrupts`);
|
|
%}
|
|
% let interruptLine0Flags = ""
|
|
% for (let int_index in instance.sciInterruptPriorityLine0)
|
|
% {
|
|
% interruptLine0Flags += ((interruptLine0Flags == "")?"":" | ") + instance.sciInterruptPriorityLine0[int_index];
|
|
% }
|
|
%if (interruptLine0Flags != "" && (instance.sciInterruptLine.includes("LIN_INTERRUPT_LINE0")))
|
|
%{
|
|
|
|
//
|
|
// Set the LIN SCI interrupt priority Line 0
|
|
//
|
|
LIN_setSCIInterruptLevel0(`instance.$name`_BASE, `interruptLine0Flags`);
|
|
LIN_enableGlobalInterrupt(`instance.$name`_BASE, LIN_INTERRUPT_LINE0);
|
|
LIN_clearGlobalInterruptStatus(`instance.$name`_BASE, LIN_INTERRUPT_LINE0);
|
|
%}
|
|
% let interruptLine1Flags = ""
|
|
% for (let int_index in instance.sciInterruptPriorityLine1)
|
|
% {
|
|
% interruptLine1Flags += ((interruptLine1Flags == "")?"":" | ") + instance.sciInterruptPriorityLine1[int_index];
|
|
% }
|
|
%if (interruptLine1Flags != "" && (instance.sciInterruptLine.includes("LIN_INTERRUPT_LINE1")))
|
|
%{
|
|
|
|
//
|
|
// Set the LIN SCI interrupt priority Line 1
|
|
//
|
|
LIN_setSCIInterruptLevel1(`instance.$name`_BASE, `interruptLine1Flags`);
|
|
LIN_enableGlobalInterrupt(`instance.$name`_BASE, LIN_INTERRUPT_LINE1);
|
|
LIN_clearGlobalInterruptStatus(`instance.$name`_BASE, LIN_INTERRUPT_LINE1);
|
|
%}
|
|
%}
|
|
% }
|
|
% let instancePinmux = instance[nameOfModule];
|
|
% let solution = instancePinmux.$solution;
|
|
% let peripheral = system.deviceData.peripherals[solution.peripheralName];
|
|
}
|
|
%}
|
|
%} |