use of net.sourceforge.usbdm.deviceEditor.information.LongVariable in project usbdm-eclipse-plugins by podonoghue.
the class SimValidateMKL method validateIndexVariables.
/**
* Updates
* - sim_sopt2_pllfllsel[x]
* - system_peripheral_clock[x]
* - system_core_clock[x]
* - system_bus_clock[x]
* - system_flexbus_clock[x]
* - system_flash_clock[x]
* - sim_clkdiv1_outdiv1[x]
* - sim_clkdiv1_outdiv2[x]
* - sim_clkdiv1_outdiv3[x]
* - sim_clkdiv1_outdiv4[x]
*
* @param variable
* @throws Exception
*/
void validateIndexVariables(Variable variable) throws Exception {
final ChoiceVariable sim_sopt2_pllfllselVar = safeGetChoiceVariable("sim_sopt2_pllfllsel");
if (sim_sopt2_pllfllselVar != null) {
final LongVariable system_mcgfllclk_clockVar = safeGetLongVariable("/MCG/system_mcgfllclk_clock");
final LongVariable system_mcgpllclk_clockVar = safeGetLongVariable("/MCG/system_mcgpllclk_clock");
final LongVariable usb1pfdclk_ClockVar = safeGetLongVariable("/MCG/usb1pfdclk_Clock");
final LongVariable system_irc48m_clockVar = safeGetLongVariable("/MCG/system_irc48m_clock");
// Determine PLLFLLCLOCK
// =====================================
final LongVariable peripheralClockVar = getLongVariable("system_peripheral_clock");
switch((int) sim_sopt2_pllfllselVar.getValueAsLong()) {
default:
sim_sopt2_pllfllselVar.setValue(0);
case 0:
if (system_mcgfllclk_clockVar != null) {
peripheralClockVar.setValue(system_mcgfllclk_clockVar.getValueAsLong());
peripheralClockVar.setStatus(system_mcgfllclk_clockVar.getFilteredStatus());
peripheralClockVar.setOrigin(system_mcgfllclk_clockVar.getOrigin());
} else {
peripheralClockVar.setValue(0);
peripheralClockVar.setStatus(new Status("FLL not present", Severity.ERROR));
peripheralClockVar.setOrigin(null);
}
break;
case 1:
if (system_mcgpllclk_clockVar != null) {
peripheralClockVar.setValue(system_mcgpllclk_clockVar.getValueAsLong() / 2);
peripheralClockVar.setStatus(system_mcgpllclk_clockVar.getFilteredStatus());
peripheralClockVar.setOrigin(system_mcgpllclk_clockVar.getOrigin() + "/2");
} else {
sim_sopt2_pllfllselVar.setValue(0);
}
break;
case 2:
if (usb1pfdclk_ClockVar != null) {
peripheralClockVar.setValue(usb1pfdclk_ClockVar.getValueAsLong());
peripheralClockVar.setStatus(usb1pfdclk_ClockVar.getStatus());
peripheralClockVar.setOrigin(usb1pfdclk_ClockVar.getOrigin());
} else {
sim_sopt2_pllfllselVar.setValue(0);
}
break;
case 3:
if (system_irc48m_clockVar != null) {
peripheralClockVar.setValue(system_irc48m_clockVar.getValueAsLong());
peripheralClockVar.setStatus(system_irc48m_clockVar.getStatus());
peripheralClockVar.setOrigin(system_irc48m_clockVar.getOrigin());
} else {
sim_sopt2_pllfllselVar.setValue(0);
}
break;
}
}
// ======================================
final LongVariable system_core_clockVar = getLongVariable("system_core_clock");
final LongVariable system_bus_clockVar = getLongVariable("system_bus_clock");
final LongVariable sim_clkdiv1_outdiv1Var = getLongVariable("sim_clkdiv1_outdiv1");
final LongVariable sim_clkdiv1_outdiv4Var = getLongVariable("sim_clkdiv1_outdiv4");
// Core & System Clock
// ===========================================
// Attempt to find acceptable divisor
final LongVariable system_mcgoutclk_clockVar = getLongVariable("/MCG/system_mcgoutclk_clock");
long inputFrequency = system_mcgoutclk_clockVar.getValueAsLong();
final FindDivisor coreDivisor = new FindDivisor(inputFrequency, system_core_clockVar.getValueAsLong()) {
@Override
boolean okValue(int divisor, double frequency) {
return frequency <= MAX_CORE_CLOCK_FREQ;
}
};
Severity severity = Severity.OK;
StringBuilder sb = new StringBuilder();
if (variable == system_core_clockVar) {
// Clock variable changed - replace with nearest value if found
if (coreDivisor.divisor == 0) {
severity = Severity.ERROR;
sb.append("Illegal Frequency\n");
}
sb.append(coreDivisor.divisors);
system_core_clockVar.setValue(coreDivisor.nearestTargetFrequency);
system_core_clockVar.setStatus(new Status(sb.toString(), severity));
sim_clkdiv1_outdiv1Var.setValue(coreDivisor.divisor);
} else {
// Clock variable not changed - just validate
if ((coreDivisor.divisor == 0) || (system_core_clockVar.getValueAsLong() != (coreDivisor.nearestTargetFrequency))) {
severity = Severity.ERROR;
sb.append("Illegal Frequency\n");
}
sb.append(coreDivisor.divisors);
system_core_clockVar.setStatus(new Status(sb.toString(), severity));
sim_clkdiv1_outdiv1Var.setValue(coreDivisor.divisor);
}
// Bus & Flash Clock
// ===========================================
// Attempt to find acceptable divisor
final long coreFrequency = system_core_clockVar.getValueAsLong();
inputFrequency = coreFrequency;
final FindDivisor flashDivisor = new FindDivisor(inputFrequency, system_bus_clockVar.getValueAsLong()) {
@Override
boolean okValue(int divisor, double frequency) {
return (frequency <= MAX_BUS_CLOCK_FREQ) && (frequency <= coreFrequency);
}
};
severity = Severity.OK;
sb = new StringBuilder();
if (variable == system_bus_clockVar) {
// Clock variable changed - replace with nearest value if found
if (flashDivisor.divisor == 0) {
severity = Severity.ERROR;
sb.append("Illegal Frequency\n");
}
sb.append(flashDivisor.divisors);
system_bus_clockVar.setValue(flashDivisor.nearestTargetFrequency);
system_bus_clockVar.setStatus(new Status(sb.toString(), severity));
sim_clkdiv1_outdiv4Var.setValue(flashDivisor.divisor);
} else {
// Clock variable not changed - just validate
if ((flashDivisor.divisor == 0) || (system_bus_clockVar.getValueAsLong() != (flashDivisor.nearestTargetFrequency))) {
severity = Severity.ERROR;
sb.append("Illegal Frequency\n");
}
sb.append(flashDivisor.divisors);
system_bus_clockVar.setStatus(new Status(sb.toString(), severity));
sim_clkdiv1_outdiv4Var.setValue(flashDivisor.divisor);
}
}
use of net.sourceforge.usbdm.deviceEditor.information.LongVariable in project usbdm-eclipse-plugins by podonoghue.
the class SimValidateMKL method validateNonindexedVariables.
/**
* Updates
* - srcVar
* - clockVar
* - system_erclk32k_clockVar
* - sim_sopt1_osc32kselVar
* - sim_sopt2_rtcclkoutselVar
* - rtc_clkoutVar
* - system_usbfs_clockVar
*
* @param variable
* @throws Exception
*/
public void validateNonindexedVariables(Variable variable) throws Exception {
super.validate(variable);
// Clock Mapping
// =================
final String osc0_peripheral = getStringVariable("osc0_peripheral").getValueAsString();
final LongVariable osc0_oscer_clockVar = getLongVariable(osc0_peripheral + "/oscer_clock");
final LongVariable osc0_osc32k_clockVar = getLongVariable(osc0_peripheral + "/osc32k_clock");
final String rtc_clkin = getStringVariable("rtc_clkin").getValueAsString();
final LongVariable rtcclkin_clockVar = safeGetLongVariable(rtc_clkin);
final LongVariable rtc_1hz_clockVar = safeGetLongVariable("/RTC/rtc_1hz_clock");
final LongVariable rtc_clkoutVar = safeGetLongVariable("rtc_clkout");
// MCG
// =================
final LongVariable system_low_power_clockVar = getLongVariable("/MCG/system_low_power_clock");
final LongVariable system_mcgirclk_clockVar = getLongVariable("/MCG/system_mcgirclk_clock");
final LongVariable system_usb_clkin_clockVar = safeGetLongVariable("/MCG/system_usb_clkin_clock");
LongVariable clockVar = safeGetLongVariable("system_peripheral_clock");
if (clockVar == null) {
// Assume no PLL. Peripheral clock is FLL
clockVar = getLongVariable("/MCG/system_mcgfllclk_clock");
}
final LongVariable peripheralClockVar = clockVar;
// Check if CLKDIV3 Present
// =====================================
final Long pllPostDiv3Value;
final String pllPostDiv3Origin;
final Variable system_peripheral_postdivider_clockVar = safeGetVariable("system_peripheral_postdivider_clock");
if (system_peripheral_postdivider_clockVar != null) {
// After divider
pllPostDiv3Value = system_peripheral_postdivider_clockVar.getValueAsLong();
pllPostDiv3Origin = system_peripheral_postdivider_clockVar.getOrigin();
} else {
// Direct (no divider)
pllPostDiv3Value = peripheralClockVar.getValueAsLong();
pllPostDiv3Origin = peripheralClockVar.getOrigin();
}
/**
* Clock selector used for LPUARTs, TPMs and FlexIO
*/
LpClockSelector clockSelector = new LpClockSelector() {
@Override
public void lpClockSelect(String sourceVar, String clockVarId) throws Exception {
// Clock source select (if present)
// ===================================
Variable srcVar = safeGetVariable(sourceVar);
if (srcVar != null) {
Variable clockVar = getVariable(clockVarId);
switch((int) srcVar.getValueAsLong()) {
default:
srcVar.setValue(0);
case // Disabled
0:
clockVar.setValue(0);
clockVar.setStatus((Status) null);
clockVar.setOrigin("Disabled");
break;
case // Peripheral Clock / CLKDIV3
1:
clockVar.setValue(pllPostDiv3Value);
clockVar.setStatus(peripheralClockVar.getStatus());
clockVar.setOrigin(pllPostDiv3Origin);
break;
case // OSCERCLK
2:
clockVar.setValue(osc0_oscer_clockVar.getValueAsLong());
clockVar.setStatus(osc0_oscer_clockVar.getStatus());
clockVar.setOrigin(osc0_oscer_clockVar.getOrigin());
break;
case // MCGIRCLK
3:
clockVar.setValue(system_mcgirclk_clockVar.getValueAsLong());
clockVar.setStatus(system_mcgirclk_clockVar.getStatus());
clockVar.setOrigin(system_mcgirclk_clockVar.getOrigin());
break;
}
}
}
};
// Determine ERCLK32K
// ==================================
LongVariable system_erclk32k_clockVar = getLongVariable("system_erclk32k_clock");
ChoiceVariable sim_sopt1_osc32kselVar = safeGetChoiceVariable("sim_sopt1_osc32ksel");
if (sim_sopt1_osc32kselVar == null) {
// No RTC etc
system_erclk32k_clockVar.setValue(osc0_osc32k_clockVar.getValueAsLong());
system_erclk32k_clockVar.setOrigin(osc0_osc32k_clockVar.getOrigin());
system_erclk32k_clockVar.setStatus(osc0_osc32k_clockVar.getStatus());
} else {
switch((int) sim_sopt1_osc32kselVar.getValueAsLong()) {
case // System oscillator (OSC32KCLK)
0:
system_erclk32k_clockVar.setValue(osc0_osc32k_clockVar.getValueAsLong());
system_erclk32k_clockVar.setOrigin(osc0_osc32k_clockVar.getOrigin());
system_erclk32k_clockVar.setStatus(osc0_osc32k_clockVar.getStatus());
break;
case // RTC CLK_IN
2:
system_erclk32k_clockVar.setValue(rtcclkin_clockVar.getValueAsLong());
system_erclk32k_clockVar.setOrigin(rtcclkin_clockVar.getOrigin());
system_erclk32k_clockVar.setStatus(rtcclkin_clockVar.getStatus());
break;
default:
sim_sopt1_osc32kselVar.setValue(3);
case // LPO 1 kHz
3:
system_erclk32k_clockVar.setValue(system_low_power_clockVar.getValueAsLong());
system_erclk32k_clockVar.setOrigin(system_low_power_clockVar.getOrigin());
system_erclk32k_clockVar.setStatus(system_low_power_clockVar.getStatus());
break;
}
}
// RTC Clock out pin select
// ============================
BooleanVariable sim_sopt2_rtcclkoutselVar = safeGetBooleanVariable("sim_sopt2_rtcclkoutsel");
if (sim_sopt2_rtcclkoutselVar != null) {
switch((int) sim_sopt2_rtcclkoutselVar.getValueAsLong()) {
default:
sim_sopt2_rtcclkoutselVar.setValue(0);
case // RTC seconds clock = 1Hz
0:
rtc_clkoutVar.setValue(rtc_1hz_clockVar.getValueAsLong());
rtc_clkoutVar.setStatus(rtc_1hz_clockVar.getStatus());
rtc_clkoutVar.setOrigin(rtc_1hz_clockVar.getOrigin());
break;
case // OSCERCLK
1:
rtc_clkoutVar.setValue(osc0_oscer_clockVar.getValueAsLong());
rtc_clkoutVar.setStatus(osc0_oscer_clockVar.getStatus());
rtc_clkoutVar.setOrigin(osc0_oscer_clockVar.getOrigin());
break;
}
}
// UART0 Clock source select (if present)
// ==========================================
clockSelector.lpClockSelect("sim_sopt2_uart0src", "system_uart0_clock");
// LPUARTx Clock source select (if present)
// ==========================================
final String[] lpUartInstances = { "", "0", "1", "2" };
for (String lpUartInstance : lpUartInstances) {
clockSelector.lpClockSelect("sim_sopt2_lpuart" + lpUartInstance + "src", "system_lpuart" + lpUartInstance + "_clock");
}
// TPMx Clock source select (if present)
// ==========================================
final String[] tpmInstances = { "", "0", "1", "2" };
for (String tpmInstance : tpmInstances) {
clockSelector.lpClockSelect("sim_sopt2_tpm" + tpmInstance + "src", "system_tpm" + tpmInstance + "_clock");
}
// FLEXIO Clock source select (if present)
// ==========================================
clockSelector.lpClockSelect("sim_sopt2_flexiosrc", "system_flexio_clock");
// USB FS Clock source select
// ============================
ChoiceVariable sim_sopt2_usbsrcVar = safeGetChoiceVariable("sim_sopt2_usbsrc");
if (sim_sopt2_usbsrcVar != null) {
ChoiceVariable sim_clkdiv2_usbVar = safeGetChoiceVariable("sim_clkdiv2_usb");
if (sim_clkdiv2_usbVar != null) {
// USB divider CLKDIV2 exists
int usbCalcValue = -1;
if (sim_sopt2_usbsrcVar.getValueAsLong() == 0) {
// Using USB CLKIN pin
sim_clkdiv2_usbVar.enable(false);
sim_clkdiv2_usbVar.setOrigin("Not used with external clock");
sim_clkdiv2_usbVar.setLocked(false);
} else {
// Using internal clock
// Try to auto calculate divisor
long clock = peripheralClockVar.getValueAsLong();
for (int usbdiv = 0; usbdiv <= 7; usbdiv++) {
for (int usbfrac = 0; usbfrac <= 1; usbfrac++) {
long testValue = Math.round(clock * (usbfrac + 1.0) / (usbdiv + 1.0));
if (testValue == 48000000) {
usbCalcValue = (usbdiv << 1) + usbfrac;
break;
}
}
if (usbCalcValue >= 0) {
break;
}
}
sim_clkdiv2_usbVar.enable(true);
if (usbCalcValue >= 0) {
long temp = sim_clkdiv2_usbVar.getValueAsLong();
sim_clkdiv2_usbVar.setRawValue(usbCalcValue);
if (sim_clkdiv2_usbVar.getValueAsLong() != temp) {
// Trigger update on change
sim_clkdiv2_usbVar.notifyListeners();
}
sim_clkdiv2_usbVar.setOrigin("Automatically calculated from input clock");
sim_clkdiv2_usbVar.setLocked(true);
} else {
sim_clkdiv2_usbVar.setOrigin("Manually selected");
sim_clkdiv2_usbVar.setLocked(false);
}
}
}
LongVariable system_usbfs_clockVar = getLongVariable("system_usbfs_clock");
if (sim_sopt2_usbsrcVar.getValueAsLong() == 0) {
// Using USB_CLKIN
system_usbfs_clockVar.setValue(system_usb_clkin_clockVar.getValueAsLong());
system_usbfs_clockVar.setStatus(system_usb_clkin_clockVar.getStatus());
system_usbfs_clockVar.setOrigin(system_usb_clkin_clockVar.getOrigin());
} else {
// Using internal clock
if (sim_clkdiv2_usbVar != null) {
// Peripheral Clock / CLKDIV2
int usbValue = Long.decode(sim_clkdiv2_usbVar.getSubstitutionValue()).intValue();
int usbfrac = usbValue & 0x1;
int usbdiv = (usbValue >> 1) & 0x7;
long usbPostDiv2 = peripheralClockVar.getValueAsLong() * (usbfrac + 1) / (usbdiv + 1);
system_usbfs_clockVar.setValue(usbPostDiv2);
system_usbfs_clockVar.setStatus(peripheralClockVar.getStatus());
system_usbfs_clockVar.setOrigin(peripheralClockVar.getOrigin() + " after /CLKDIV2");
} else {
// Directly using peripheral clock
system_usbfs_clockVar.setValue(peripheralClockVar.getValueAsLong());
system_usbfs_clockVar.setStatus(peripheralClockVar.getStatus());
system_usbfs_clockVar.setOrigin(peripheralClockVar.getOrigin());
}
}
}
}
use of net.sourceforge.usbdm.deviceEditor.information.LongVariable in project usbdm-eclipse-plugins by podonoghue.
the class ClockValidator_MK_ICS48M method validateClocks.
protected void validateClocks(Variable variable) throws Exception {
// System.err.println(getSimpleClassName()+" Var = "+variable);
super.validate(variable);
StringVariable clockConfig = safeGetStringVariable("ClockConfig");
clockConfig.setStatus(isValidCIdentifier(clockConfig.getValueAsString()) ? (String) null : "Illegal C enum value");
// OSC0 Clock monitor
// =================================
Variable mcg_c6_cme0Var = getVariable("mcg_c6_cme0");
Variable mcg_c2_locre0Var = getVariable("mcg_c2_locre0");
mcg_c2_locre0Var.enable(mcg_c6_cme0Var.getValueAsBoolean());
// OSC1 (RTC) Clock monitor
// =================================
Variable mcg_c8_cme1Var = getVariable("mcg_c8_cme1");
Variable mcg_c8_locre1Var = getVariable("mcg_c8_locre1");
mcg_c8_locre1Var.enable(mcg_c8_cme1Var.getValueAsBoolean());
// PLL monitor
// =================================
Variable mcg_c9_pll_cmeVar = safeGetVariable("mcg_c9_pll_cme");
if (mcg_c9_pll_cmeVar != null) {
getVariable("mcg_c9_pll_locre").enable(mcg_c9_pll_cmeVar.getValueAsBoolean());
}
// =================================
Variable system_irc48m_clockVar = safeGetVariable("system_irc48m_clock");
Variable system_mcgfllclk_clockVar = getVariable("system_mcgfllclk_clock");
Variable mcg_c4_dmx32Var = getVariable("mcg_c4_dmx32");
Variable mcg_c1_frdivVar = getVariable("mcg_c1_frdiv");
Variable mcg_c4_drst_drsVar = getVariable("mcg_c4_drst_drs");
Variable pll0EnabledVar = getVariable("pll0Enabled");
Variable pll0InputFrequencyVar = getVariable("pll0InputFrequency");
Variable pll0OutputFrequency = getVariable("pll0OutputFrequency");
Variable mcg_c5_pllclkenVar = getVariable("mcg_c5_pllclken");
Variable mcg_c5_pllstenVar = getVariable("mcg_c5_pllsten");
Variable mcg_c5_prdiv0Var = getVariable("mcg_c5_prdiv0");
Variable mcg_c6_vdiv0Var = getVariable("mcg_c6_vdiv0");
Variable system_mcgpllclk_clockVar = getVariable("system_mcgpllclk_clock");
Variable system_mcgoutclk_clock_sourceVar = getVariable("system_mcgoutclk_clock_source");
Variable system_mcgoutclk_clockVar = getVariable("system_mcgoutclk_clock");
Variable mcg_c1_irefsVar = getVariable("mcg_c1_irefs");
Variable mcg_c1_clksVar = getVariable("mcg_c1_clks");
Variable mcg_c2_lpVar = getVariable("mcg_c2_lp");
Variable mcg_c6_pllsVar = getVariable("mcg_c6_plls");
// Determine MCGIRCLK (not gated/undivided and gated)
// ========================================
Variable mcg_sc_fcrdivVar = safeGetVariable("mcg_sc_fcrdiv");
Variable system_fast_irc_clockVar = getVariable("system_fast_irc_clock");
Variable system_slow_irc_clockVar = getVariable("system_slow_irc_clock");
Variable mcg_c2_ircsVar = getVariable("mcg_c2_ircs");
Variable system_mcgir_ungated_clock = new LongVariable("system_mcgir_ungated", null);
if (mcg_c2_ircsVar.getValueAsBoolean()) {
// Fast IRC selected
if (mcg_sc_fcrdivVar != null) {
// Variable divisor
long mcg_sc_fcrdiv = mcg_sc_fcrdivVar.getValueAsLong();
system_mcgir_ungated_clock.setOrigin("(Fast IRC)/FCRDIV");
system_mcgir_ungated_clock.setValue(system_fast_irc_clockVar.getValueAsLong() / (1 << mcg_sc_fcrdiv));
} else {
// Fixed divisor of 2
system_mcgir_ungated_clock.setOrigin("(Fast IRC)/2");
system_mcgir_ungated_clock.setValue(system_fast_irc_clockVar.getValueAsLong() / 2);
}
} else {
// Slow IRC selected
system_mcgir_ungated_clock.setOrigin("Slow IRC");
system_mcgir_ungated_clock.setValue(system_slow_irc_clockVar.getValueAsLong());
}
Variable system_mcgirclk_clockVar = getVariable("system_mcgirclk_clock");
system_mcgirclk_clockVar.setOrigin(system_mcgir_ungated_clock.getOrigin());
Variable mcg_c1_irclkenVar = getVariable("mcg_c1_irclken");
Variable mcg_c1_irefstenVar = getVariable("mcg_c1_irefsten");
if (mcg_c1_irclkenVar.getValueAsBoolean()) {
// Enabled
system_mcgirclk_clockVar.setValue(system_mcgir_ungated_clock.getValueAsLong());
system_mcgirclk_clockVar.setStatus((Status) null);
system_mcgirclk_clockVar.enable(true);
mcg_c1_irefstenVar.enable(true);
} else {
// Disabled
system_mcgirclk_clockVar.setValue(0);
system_mcgirclk_clockVar.setStatus(new Status("Disabled by mcg_c1_irclken", Severity.OK));
system_mcgirclk_clockVar.enable(false);
mcg_c1_irefstenVar.enable(false);
}
// Clock Mapping
// =================
String osc0_peripheral = getStringVariable("/SIM/osc0_peripheral").getValueAsString();
LongVariable osc0_osc_clockVar = getLongVariable(osc0_peripheral + "/osc_clock");
String osc32k_peripheral = getStringVariable("/SIM/osc32k_peripheral").getValueAsString();
LongVariable osc32k_osc_clockVar = getLongVariable(osc32k_peripheral + "/osc_clock");
// Determine MCG external reference clock [mcg_erc_clock]
// ========================================================
ChoiceVariable mcg_c7_oscselVar = safeGetChoiceVariable("mcg_c7_oscsel");
Variable mcg_erc_clockVar = getVariable("mcg_erc_clock");
switch((int) mcg_c7_oscselVar.getValueAsLong()) {
default:
case // ERC = OSCCLK (OSC0 main oscillator)
0:
mcg_erc_clockVar.setValue(osc0_osc_clockVar.getValueAsLong());
mcg_erc_clockVar.setStatus(osc0_osc_clockVar.getFilteredStatus());
mcg_erc_clockVar.setOrigin(osc0_osc_clockVar.getOrigin());
break;
case // ERC = RTCCLK (OSC1 oscillator)
1:
mcg_erc_clockVar.setValue(osc32k_osc_clockVar.getValueAsLong());
mcg_erc_clockVar.setStatus(osc32k_osc_clockVar.getFilteredStatus());
mcg_erc_clockVar.setOrigin(osc32k_osc_clockVar.getOrigin() + "[RTCCLK]");
break;
case // ERC = IRC48MCLK (OSC2)
2:
mcg_erc_clockVar.setValue(system_irc48m_clockVar.getValueAsLong());
mcg_erc_clockVar.setStatus((Status) null);
mcg_erc_clockVar.setOrigin("IRC48MCLK");
break;
}
Variable mcg_c11_pllcsVar = safeGetVariable("mcg_c11_pllcs");
boolean pllIsInternal = (mcg_c11_pllcsVar == null) || !mcg_c11_pllcsVar.getValueAsBoolean();
// Main clock mode
// ===============================
int mcg_c1_clks;
int mcg_c6_plls;
int mcg_c2_lp;
boolean mcg_c1_irefs;
// Main clock mode
// ====================
ClockMode clock_mode = ClockMode.valueOf(getVariable("clock_mode").getSubstitutionValue());
Variable fll_enabledVar = getVariable("fll_enabled");
Variable fllInputFrequencyVar = getVariable("fllInputFrequency");
switch(clock_mode) {
default:
case ClockMode_None:
mcg_c1_clks = 0;
mcg_c6_plls = 0;
mcg_c2_lp = 0;
mcg_c1_irefs = true;
system_mcgoutclk_clock_sourceVar.setValue("FLL output");
pll0EnabledVar.setValue(mcg_c5_pllclkenVar.getValueAsBoolean());
fll_enabledVar.setValue(true);
break;
case ClockMode_FEI:
mcg_c1_clks = 0;
mcg_c6_plls = 0;
mcg_c2_lp = 0;
mcg_c1_irefs = true;
system_mcgoutclk_clock_sourceVar.setValue("FLL output");
pll0EnabledVar.setValue(mcg_c5_pllclkenVar.getValueAsBoolean());
fll_enabledVar.setValue(true);
break;
case ClockMode_FEE:
mcg_c1_clks = 0;
mcg_c6_plls = 0;
mcg_c2_lp = 0;
mcg_c1_irefs = false;
system_mcgoutclk_clock_sourceVar.setValue("FLL output");
pll0EnabledVar.setValue(mcg_c5_pllclkenVar.getValueAsBoolean());
fll_enabledVar.setValue(true);
break;
case ClockMode_FBI:
mcg_c1_clks = 1;
mcg_c6_plls = 0;
mcg_c2_lp = 0;
mcg_c1_irefs = true;
system_mcgoutclk_clock_sourceVar.setValue("MCGIRCLK");
pll0EnabledVar.setValue(mcg_c5_pllclkenVar.getValueAsBoolean());
fll_enabledVar.setValue(true);
break;
case ClockMode_FBE:
mcg_c1_clks = 2;
mcg_c6_plls = 0;
mcg_c2_lp = 0;
mcg_c1_irefs = false;
system_mcgoutclk_clock_sourceVar.setValue("MCGERCLK");
pll0EnabledVar.setValue(mcg_c5_pllclkenVar.getValueAsBoolean());
fll_enabledVar.setValue(true);
break;
case ClockMode_BLPI:
mcg_c1_clks = 1;
mcg_c6_plls = 0;
mcg_c2_lp = 1;
mcg_c1_irefs = true;
system_mcgoutclk_clock_sourceVar.setValue("MCGIRCLK");
pll0EnabledVar.setValue(mcg_c5_pllclkenVar.getValueAsBoolean());
fll_enabledVar.setValue(false);
break;
case ClockMode_BLPE:
mcg_c1_clks = 2;
mcg_c6_plls = 0;
mcg_c2_lp = 1;
mcg_c1_irefs = false;
system_mcgoutclk_clock_sourceVar.setValue("MCGERCLK");
pll0EnabledVar.setValue(mcg_c5_pllclkenVar.getValueAsBoolean());
fll_enabledVar.setValue(false);
break;
case ClockMode_PBE:
mcg_c1_clks = 2;
mcg_c6_plls = 1;
mcg_c2_lp = 0;
mcg_c1_irefs = false;
system_mcgoutclk_clock_sourceVar.setValue("MCGERCLK");
pll0EnabledVar.setValue(pllIsInternal || mcg_c5_pllclkenVar.getValueAsBoolean());
fll_enabledVar.setValue(false);
break;
case ClockMode_PEE:
mcg_c1_clks = 0;
mcg_c6_plls = 1;
mcg_c2_lp = 0;
mcg_c1_irefs = false;
system_mcgoutclk_clock_sourceVar.setValue("PLL output");
pll0EnabledVar.setValue(pllIsInternal || mcg_c5_pllclkenVar.getValueAsBoolean());
fll_enabledVar.setValue(false);
break;
}
mcg_c1_clksVar.setValue(mcg_c1_clks);
mcg_c6_pllsVar.setValue(mcg_c6_plls);
mcg_c2_lpVar.setValue(mcg_c2_lp);
mcg_c1_irefsVar.setValue(mcg_c1_irefs);
Variable osc0_osc_cr_erclkenVar = safeGetBooleanVariable(osc0_peripheral + "/osc_cr_erclken");
// =======================================
// Find FLL dividers
FllConfigure fllCheck = new FllConfigure(osc0_osc_cr_erclkenVar, safeGetVariable(osc0_peripheral + "/oscillatorRange"), getVariable("mcg_c2_range"), mcg_c1_irefs, mcg_erc_clockVar, system_slow_irc_clockVar.getValueAsLong(), mcg_c7_oscselVar.getValueAsLong(), mcg_c4_dmx32Var.getValueAsBoolean(), fllInputFrequencyVar, system_mcgfllclk_clockVar, getVariable("system_mcgffclk_clock"), DRST_DRS_MAX);
mcg_c1_frdivVar.setValue(fllCheck.mcg_c1_frdiv);
mcg_c4_drst_drsVar.setValue(fllCheck.mcg_c4_drst_drs);
// External PLLs
// =================================================
Variable usb1pfdclk_ClockVar = safeGetVariable("usb1pfdclk_Clock");
if (usb1pfdclk_ClockVar != null) {
// Check USB HS PLL
long irClockFreq = osc0_osc_clockVar.getValueAsLong();
String failedPreCondition = null;
if (!osc0_osc_cr_erclkenVar.getValueAsBoolean()) {
failedPreCondition = "Disabled: to use PFDCLK, OSCCLK clock must be enabled by osc_cr_erclkenVar";
} else if (!mcg_c1_irclkenVar.getValueAsBoolean()) {
failedPreCondition = "Disabled: to use PFDCLK, IRC clock must be enabled by mcg_c1_irclken";
} else if ((irClockFreq != 12000000) && (irClockFreq != 16000000) && (irClockFreq != 24000000)) {
failedPreCondition = "Disabled: to use PFDCLK, OSCCLK must be in [12Mhz, 16MHz, 24MHz]";
}
if (failedPreCondition == null) {
usb1pfdclk_ClockVar.enable(true);
usb1pfdclk_ClockVar.setOrigin("Clock from USB HS PLL");
usb1pfdclk_ClockVar.setStatus((Status) null);
} else {
usb1pfdclk_ClockVar.enable(false);
usb1pfdclk_ClockVar.setOrigin("Clock from USB HS PLL (disabled)");
usb1pfdclk_ClockVar.setStatus(new Status(failedPreCondition, Severity.WARNING));
}
}
// Internal PLL
// ========================================
// Find PLL divider
PllConfigure pllConfigure = new PllConfigure(PLL_OUT_MIN, PLL_OUT_MAX, PLL_IN_MIN, PLL_IN_MAX, PRDIV_MIN, PRDIV_MAX, VDIV_MIN, VDIV_MAX, PLL_POST_DIV);
pllConfigure.validate(mcg_erc_clockVar, pll0InputFrequencyVar, pll0OutputFrequency, mcg_c5_prdiv0Var, mcg_c6_vdiv0Var);
boolean pll0Enabled = pll0EnabledVar.getValueAsBoolean();
pll0InputFrequencyVar.enable(pll0Enabled);
mcg_c5_prdiv0Var.enable(pll0Enabled);
mcg_c6_vdiv0Var.enable(pll0Enabled);
mcg_c5_pllstenVar.enable(pll0Enabled);
if (pll0Enabled) {
pll0OutputFrequency.enable(pll0InputFrequencyVar.getFilteredStatus() == null);
pll0OutputFrequency.setStatus(pllConfigure.getPllStatus());
} else {
pll0OutputFrequency.enable(false);
pll0OutputFrequency.setStatus(new Status("PLL is disabled", Severity.WARNING));
}
if (pllIsInternal) {
// Internal PLL
system_mcgpllclk_clockVar.setValue(pll0OutputFrequency.getValueAsLong());
system_mcgpllclk_clockVar.setOrigin(pll0OutputFrequency.getOrigin());
system_mcgpllclk_clockVar.setStatus(pll0OutputFrequency.getFilteredStatus());
} else {
// External PLL (USB1 (HS) PHY)
system_mcgpllclk_clockVar.setValue(usb1pfdclk_ClockVar.getValueAsLong());
system_mcgpllclk_clockVar.setOrigin(usb1pfdclk_ClockVar.getOrigin());
system_mcgpllclk_clockVar.setStatus(usb1pfdclk_ClockVar.getFilteredStatus());
}
// ======================================
// FLL status
boolean fllEnabled = fll_enabledVar.getValueAsBoolean();
fllInputFrequencyVar.enable(fllEnabled);
if (fllEnabled) {
boolean fllInputIsOK = (fllInputFrequencyVar.getStatus() == null) || (fllCheck.getFllStatus().getSeverity().lessThan(Severity.WARNING));
system_mcgfllclk_clockVar.enable(fllInputIsOK);
system_mcgfllclk_clockVar.setStatus(fllCheck.getFllStatus());
} else {
system_mcgfllclk_clockVar.enable(false);
system_mcgfllclk_clockVar.setStatus(new Status("FLL is disabled", Severity.WARNING));
}
mcg_c4_dmx32Var.enable(fllEnabled);
mcg_c4_drst_drsVar.enable(fllEnabled);
// Main clock mode
// ===============================
Status clock_mode_Status = null;
switch(clock_mode) {
default:
case ClockMode_None:
system_mcgoutclk_clockVar.setValue(system_mcgfllclk_clockVar.getValueAsLong());
system_mcgoutclk_clockVar.setOrigin(system_mcgfllclk_clockVar.getOrigin());
system_mcgoutclk_clockVar.setStatus((Status) null);
clock_mode_Status = new Status("No clock settings are applied", Severity.WARNING);
break;
case ClockMode_FEI:
system_mcgoutclk_clockVar.setValue(system_mcgfllclk_clockVar.getValueAsLong());
system_mcgoutclk_clockVar.setOrigin(system_mcgfllclk_clockVar.getOrigin());
system_mcgoutclk_clockVar.setStatus(system_mcgfllclk_clockVar.getFilteredStatus());
break;
case ClockMode_FEE:
system_mcgoutclk_clockVar.setValue(system_mcgfllclk_clockVar.getValueAsLong());
system_mcgoutclk_clockVar.setOrigin(system_mcgfllclk_clockVar.getOrigin());
system_mcgoutclk_clockVar.setStatus(system_mcgfllclk_clockVar.getFilteredStatus());
break;
case ClockMode_FBI:
system_mcgoutclk_clockVar.setValue(system_mcgir_ungated_clock.getValueAsLong());
system_mcgoutclk_clockVar.setOrigin(system_mcgir_ungated_clock.getOrigin());
system_mcgoutclk_clockVar.setStatus(system_mcgir_ungated_clock.getFilteredStatus());
break;
case ClockMode_FBE:
system_mcgoutclk_clockVar.setValue(mcg_erc_clockVar.getValueAsLong());
system_mcgoutclk_clockVar.setOrigin(mcg_erc_clockVar.getOrigin());
system_mcgoutclk_clockVar.setStatus(mcg_erc_clockVar.getFilteredStatus());
break;
case ClockMode_BLPI:
system_mcgoutclk_clockVar.setValue(system_mcgir_ungated_clock.getValueAsLong());
system_mcgoutclk_clockVar.setOrigin(system_mcgir_ungated_clock.getOrigin());
system_mcgoutclk_clockVar.setStatus(system_mcgir_ungated_clock.getFilteredStatus());
break;
case ClockMode_BLPE:
system_mcgoutclk_clockVar.setValue(mcg_erc_clockVar.getValueAsLong());
system_mcgoutclk_clockVar.setOrigin(mcg_erc_clockVar.getOrigin());
system_mcgoutclk_clockVar.setStatus(mcg_erc_clockVar.getFilteredStatus());
break;
case ClockMode_PBE:
system_mcgoutclk_clockVar.setValue(mcg_erc_clockVar.getValueAsLong());
system_mcgoutclk_clockVar.setOrigin(mcg_erc_clockVar.getOrigin());
system_mcgoutclk_clockVar.setStatus(mcg_erc_clockVar.getFilteredStatus());
break;
case ClockMode_PEE:
system_mcgoutclk_clockVar.setValue(system_mcgpllclk_clockVar.getValueAsLong());
system_mcgoutclk_clockVar.setOrigin(system_mcgpllclk_clockVar.getOrigin());
system_mcgoutclk_clockVar.setStatus(system_mcgpllclk_clockVar.getFilteredStatus());
break;
}
system_mcgoutclk_clock_sourceVar.setStatus(clock_mode_Status);
system_mcgoutclk_clock_sourceVar.setOrigin(system_mcgoutclk_clockVar.getOrigin());
}
use of net.sourceforge.usbdm.deviceEditor.information.LongVariable in project usbdm-eclipse-plugins by podonoghue.
the class FtmValidate method validate.
/**
* Class to determine LPTMR settings
* @throws Exception
*/
@Override
public void validate(Variable variable) throws Exception {
super.validate(variable);
// =================================
DoubleVariable clockFrequencyVar = getDoubleVariable("clockFrequency");
DoubleVariable clockPeriodVar = getDoubleVariable("clockPeriod");
ChoiceVariable ftm_sc_clksVar = getChoiceVariable("ftm_sc_clks");
ChoiceVariable ftm_sc_psVar = getChoiceVariable("ftm_sc_ps");
LongVariable ftm_modVar = getLongVariable("ftm_mod");
DoubleVariable ftm_mod_periodVar = getDoubleVariable("ftm_mod_period");
BooleanVariable ftm_sc_cpwmsVar = getBooleanVariable("ftm_sc_cpwms");
LongVariable clockSourceVar = null;
switch((int) ftm_sc_clksVar.getValueAsLong()) {
case 0:
clockSourceVar = new LongVariable("Disabled", "/Ftm/Disabled");
clockSourceVar.setOrigin("Disabled");
clockSourceVar.setValue(0);
break;
default:
ftm_sc_clksVar.setValue(1);
case 1:
clockSourceVar = getLongVariable("/SIM/system_bus_clock");
break;
case 2:
clockSourceVar = getLongVariable("/MCG/system_mcgffclk_clock");
break;
case 3:
clockSourceVar = getLongVariable("ftmExternalClock");
break;
}
double clockFrequency = clockSourceVar.getValueAsDouble();
String clockOrigin = clockSourceVar.getOrigin();
clockFrequency = clockFrequency / (1L << ftm_sc_psVar.getValueAsLong());
clockFrequencyVar.setValue(clockFrequency);
clockFrequencyVar.setOrigin(clockOrigin + " frequency / prescaler");
clockFrequencyVar.setStatus(clockSourceVar.getFilteredStatus());
clockPeriodVar.setOrigin(clockOrigin + " period * prescaler");
clockPeriodVar.setStatus(clockSourceVar.getFilteredStatus());
clockFrequencyVar.enable(clockFrequency != 0);
clockPeriodVar.enable(clockFrequency != 0);
ftm_mod_periodVar.enable(clockFrequency != 0);
if (clockFrequency != 0) {
long ftm_mod = ftm_modVar.getValueAsLong();
double clockPeriod = 1.0 / clockFrequency;
clockPeriodVar.setValue(clockPeriod);
boolean ftm_sc_cpwms = ftm_sc_cpwmsVar.getValueAsBoolean();
double ftm_mod_period = clockPeriod * (ftm_sc_cpwms ? (2 * (ftm_mod)) : ((ftm_mod + 1)));
if (variable != null) {
// Update selectively
if (variable.equals(ftm_mod_periodVar)) {
ftm_mod_period = ftm_mod_periodVar.getValueAsDouble();
// Calculate rounded value
if (ftm_sc_cpwms) {
ftm_mod = Math.max(0, Math.round((ftm_mod_period / clockPeriod) / 2));
} else {
ftm_mod = Math.max(0, Math.round((ftm_mod_period / clockPeriod) - 1));
}
ftm_mod_period = clockPeriod * (ftm_sc_cpwms ? (2 * (ftm_mod)) : ((ftm_mod + 1)));
// Update
ftm_modVar.setValue(ftm_mod);
}
}
double ftm_mod_periodMax = clockPeriod * (ftm_sc_cpwms ? (2 * (65535.5)) : ((65536.5)));
ftm_mod_periodVar.setValue(ftm_mod_period);
ftm_mod_periodVar.setMax(ftm_mod_periodMax);
}
}
use of net.sourceforge.usbdm.deviceEditor.information.LongVariable in project usbdm-eclipse-plugins by podonoghue.
the class LlwuValidate method validate.
/**
* Class to validate LLWU settings
* @throws Exception
*/
@Override
public void validate(Variable variable) throws Exception {
super.validate(variable);
doPinNames();
for (int index = 0; index < 8; index++) {
// Filter variables
ChoiceVariable llwu_filt_filteVar = safeGetChoiceVariable("llwu_filt" + index + "_filte");
LongVariable llwu_filt_filtselVar = safeGetLongVariable("llwu_filt" + index + "_filtsel");
if ((llwu_filt_filteVar != null) && ((variable == null) || (variable == llwu_filt_filteVar))) {
llwu_filt_filtselVar.enable(llwu_filt_filteVar.getValueAsLong() != 0);
}
}
// // Warn if Rx and Tx signals not mapped
// validateMappedPins(new int[]{0,1}, getPeripheral().getSignalTables().get(0).table);
}
Aggregations