Index: firmware/.ccsproject =================================================================== diff -u --- firmware/.ccsproject (revision 0) +++ firmware/.ccsproject (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + Index: firmware/.cproject =================================================================== diff -u --- firmware/.cproject (revision 0) +++ firmware/.cproject (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: firmware/.gitignore =================================================================== diff -u --- firmware/.gitignore (revision 0) +++ firmware/.gitignore (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,42 @@ +# Object files +*.o +*.ko +*.obj +*.elf +*.d +*.out +*.map + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so + +# remote systems temp files +/RemoteSystemsTempFiles/ + +# vectorcast files +*.QIK + +# The rest of the folders +# to be ignored +/.jxbrowser-data/ + +/.metadata/ +/Debug/ +/Release/ +/.launches/ + +# Ignore symbolically linked folders +# The linked folders do not need "/" +FWCommon +Common Index: firmware/.project =================================================================== diff -u --- firmware/.project (revision 0) +++ firmware/.project (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,27 @@ + + + BL + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + Index: firmware/.settings/org.eclipse.cdt.codan.core.prefs =================================================================== diff -u --- firmware/.settings/org.eclipse.cdt.codan.core.prefs (revision 0) +++ firmware/.settings/org.eclipse.cdt.codan.core.prefs (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false Index: firmware/.settings/org.eclipse.cdt.debug.core.prefs =================================================================== diff -u --- firmware/.settings/org.eclipse.cdt.debug.core.prefs (revision 0) +++ firmware/.settings/org.eclipse.cdt.debug.core.prefs (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.debug.core.toggleBreakpointModel=com.ti.ccstudio.debug.CCSBreakpointMarker Index: firmware/.settings/org.eclipse.core.resources.prefs =================================================================== diff -u --- firmware/.settings/org.eclipse.core.resources.prefs (revision 0) +++ firmware/.settings/org.eclipse.core.resources.prefs (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//Debug/makefile=UTF-8 +encoding//Debug/objects.mk=UTF-8 +encoding//Debug/source/subdir_rules.mk=UTF-8 +encoding//Debug/source/subdir_vars.mk=UTF-8 +encoding//Debug/sources.mk=UTF-8 Index: firmware/BL.dil =================================================================== diff -u --- firmware/BL.dil (revision 0) +++ firmware/BL.dil (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,10377 @@ +# RM46L852PGE 07/30/24 17:34:33 +# +ARCH=RM46L852PGE +# +DRIVER.TOOLS.VAR.GCC.VALUE=0 +DRIVER.TOOLS.VAR.ARM.VALUE=0 +DRIVER.TOOLS.VAR.IAR.VALUE=0 +DRIVER.TOOLS.VAR.GHS.VALUE=0 +DRIVER.TOOLS.VAR.TI.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DIVIDER.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_3_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_TYPE.VALUE=NORMAL_OINC_NONSHARED +DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.PMM_MEM_PD3_STATE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CAPTURE_EVENT_SOURCE_0.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_PERMISSION_VALUE.VALUE=0x0300 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_NAME.VALUE=het2LowLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_NAME.VALUE=adc2Group2Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_NAME.VALUE=spi4HighLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_MAPPING.VALUE=2 +DRIVER.SYSTEM.VAR.VIM_CAPTURE_EVENT_SOURCE_1.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_4_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.SAFETY_INIT_ADC1_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.EQEP2_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_MEMINIT_SELECTED.VALUE=1 +DRIVER.SYSTEM.VAR.FLASH_DATA_3_WAIT_STATE_FREQ.VALUE=220.0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_MAPPING.VALUE=96 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_MAPPING.VALUE=88 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_2_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_7_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_END_ADDRESS.VALUE=0xfcffffff +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_5_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_DATA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_STC_SELFCHECK_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.SPI3_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_PLL1_BYPASS_ON_SLIP.VALUE=0x20000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_TYPE_VALUE.VALUE=0x0008 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_NAME.VALUE=ecap5Interrupt +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SIZE.VALUE=256_KB +DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI2_RAMPARITYCHECK_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.CRC_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.MIBSPI1_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_HCLK_FREQ.VALUE=220.000 +DRIVER.SYSTEM.VAR.CLKT_PLL2_FREQ.VALUE=220.00 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_MAPPING.VALUE=81 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_MAPPING.VALUE=73 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_MAPPING.VALUE=65 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_MAPPING.VALUE=57 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_MAPPING.VALUE=49 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_NAME.VALUE=dmaBTCAInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_NAME.VALUE=het1LowLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_NAME.VALUE=can1HighLevelInterrupt +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_6_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_0_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.SAFETY_INIT_CCM_SELFCHECK_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.PMM_MEM_PD2_STATE_AVAIL.VALUE=1 +DRIVER.SYSTEM.VAR.ECLK_CLKSRC.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_TYPE_VALUE.VALUE=0x0008 +DRIVER.SYSTEM.VAR.CLKT_PLL2_OUTPUT_DIV.VALUE=2 +DRIVER.SYSTEM.VAR.CLKT_EXT2_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.CLKT_PLL1_SOURCE_ENABLE.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_1_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_END_ADDRESS.VALUE=0x63ffffff +DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_HET2_DP_PBISTCHECK_ENA.VALUE=0x00040000 +DRIVER.SYSTEM.VAR.CLKT_RTI2_PRE_SOURCE.VALUE=PLL1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SIZE_VALUE.VALUE=0x1A +DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_NAME.VALUE=etpwm5TripZoneInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_MAPPING.VALUE=50 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_MAPPING.VALUE=42 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_MAPPING.VALUE=34 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_MAPPING.VALUE=26 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_MAPPING.VALUE=18 +DRIVER.SYSTEM.VAR.PMM_LOGIC_PD2_STATEVALUE.VALUE=0x5 +DRIVER.SYSTEM.VAR.CLKT_VCLK3_DOMAIN_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.FLASH_ECC_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.FLASH_BANKS.VALUE=4 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_4_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_2_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_DISP_ENTRY.VALUE=_irqDispatch +DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CAN3_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_AVCLK1_SOURCE.VALUE=VCLK +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_5_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.ETPWM4_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.DCC2_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_PLL1_RESET_ON_OSCILLATOR_FAIL.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION_VALUE.VALUE=0x0600 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_MAPPING.VALUE=11 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC +DRIVER.SYSTEM.VAR.LBIST_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_AVCLK2_DOMAIN_ENABLE.VALUE=TRUE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_6_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_TYPE.VALUE=NORMAL_OINC_NONSHARED +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_END_ADDRESS.VALUE=0x003fffff +DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.ECAP6_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SCI_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.FLASH_DATA_1_WAIT_STATE_FREQ.VALUE=110.0 +DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_BASE.VALUE=0x08001200 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_MAPPING.VALUE=125 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_MAPPING.VALUE=117 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_MAPPING.VALUE=109 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_NAME.VALUE=etpwm1Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_NAME.VALUE=dcc1DoneInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_NAME.VALUE=sciLowLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_NAME.VALUE=i2cInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DOMAIN_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_PMU_GLOBAL_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_4_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_BASE_ADDRESS.VALUE=0xFF000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.PMM_LOGIC_PD2_STATE.VALUE=1 +DRIVER.SYSTEM.VAR.EMAC_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_PBIST_DP_SELECTED.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_MAPPING.VALUE=8 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_NAME.VALUE=rtiCompare0Interrupt +DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER0_EVENT.VALUE=0x11 +DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESET_ENTRY.VALUE=_c_int00 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.ADC1_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.MIBSPI_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.ECLK_VCLK1_FREQ.VALUE=110.000 +DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_FREQ.VALUE=00.0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SIZE_VALUE.VALUE=0x0A +DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_MAPPING.VALUE=110 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_NAME.VALUE=ecap6Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_MAPPING.VALUE=102 +DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER.VALUE=1 +DRIVER.SYSTEM.VAR.RAM_LENGTH.VALUE=0x00030000 +DRIVER.SYSTEM.VAR.CLKT_VCLK1_DOMAIN_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_2_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE.VALUE=64_MB +DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_ESRAM_SP_PBISTCHECK_VALUE_NEW.VALUE=0x00300020 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_NAME.VALUE=dmaFTCAInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_MAPPING.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_SOURCE_ENABLE.VALUE=0x00000008 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_END_ADDRESS.VALUE=0x203fffff +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_BASE_ADDRESS.VALUE=0xF0000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_3_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_PARITY_ENABLE.VALUE=TRUE +DRIVER.SYSTEM.VAR.SAFETY_INIT_FRAY_DP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_TYPE_VALUE.VALUE=0x0000 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_MAPPING.VALUE=95 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_MAPPING.VALUE=87 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_MAPPING.VALUE=79 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_1_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_6_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_4_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_IRQ_VIC_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI1_DP_PBISTCHECK_ENA.VALUE=0x00000040 +DRIVER.SYSTEM.VAR.SPI1_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_NAME.VALUE=etpwm6Interrupt +DRIVER.SYSTEM.VAR.CLKT_RTI2_DIVIDER.VALUE=1 +DRIVER.SYSTEM.VAR.RAM_ECC_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_7_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN4_RAMPARITYCHECK_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.USB_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.SCI_ALL_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_FREQ_INPUT.VALUE=16.0 +DRIVER.SYSTEM.VAR.STC_INTERVAL.VALUE=24 +DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_TRIM_VALUE.VALUE=16 +DRIVER.SYSTEM.VAR.CLKT_GCLK_FREQ.VALUE=220.000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_PERMISSION_VALUE.VALUE=0x1000 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_MAPPING.VALUE=80 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_MAPPING.VALUE=72 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_MAPPING.VALUE=64 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_MAPPING.VALUE=56 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_MAPPING.VALUE=48 +DRIVER.SYSTEM.VAR.CLKT_PLL1_REF_CLOCK_DIV.VALUE=6 +DRIVER.SYSTEM.VAR.FLASHW_BASE_ADDRESS.VALUE=0xFFF87000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_5_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_FIQ_ENTRY.VALUE="ldr pc,[pc,#-0x1b0]" +DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN5_DP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.SCILIN_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.SPI_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.ALL_DVR_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.CCM_MENU_VALUE.VALUE=0x0001 +DRIVER.SYSTEM.VAR.PBIST_ENA1.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_VCLK4_DIVIDER.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_0_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_TYPE.VALUE=NORMAL_OINC_NONSHARED +DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_OSCILLATOR_FREQ.VALUE=16.0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_NAME.VALUE=etpwm1TripZoneInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_NAME.VALUE=dcc2DoneInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_MAPPING.VALUE=41 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_MAPPING.VALUE=33 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_MAPPING.VALUE=25 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_MAPPING.VALUE=17 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_3_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_1_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_MODE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.PMM_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.EMIF_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CAN1_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CAN_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_TYPE_VALUE.VALUE=0x0008 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_NAME.VALUE=rtiCompare1Interrupt +DRIVER.SYSTEM.VAR.PMM_MEM_PD3_STATEVALUE.VALUE=0xA +DRIVER.SYSTEM.VAR.CLKT_PLL1_OUTPUT_DIV.VALUE=2 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC +DRIVER.SYSTEM.VAR.CLKT_PLL2_FM_ENABLE.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_4_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_BASE_ADDRESS.VALUE=0x08400000 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_STC_CPUSELFTEST_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.ETPWM2_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.HET1_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_RTI1_PRE_SOURCE.VALUE=PLL1 +DRIVER.SYSTEM.VAR.FLASH_MODE_VALUE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE_VALUE.VALUE=0x19 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_MAPPING.VALUE=10 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SIZE.VALUE=128_MB +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_5_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_HET1_DP_PBISTCHECK_ENA.VALUE=0x00001000 +DRIVER.SYSTEM.VAR.ECAP4_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_PLL2_BYPASS_ON_SLIP.VALUE=0x20000000 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_MAPPING.VALUE=124 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_MAPPING.VALUE=116 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_MAPPING.VALUE=108 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_NAME.VALUE=adc2Group0Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_NAME.VALUE=can2LowLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_NAME.VALUE=dmaLFSAInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_NAME.VALUE=mibspi1LowLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.FLASH_ARBITRATION.VALUE=FIX +DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_SOURCE_ENABLE.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_3_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.PBIST_ALGO_9_10.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_FREQ_INPUT.VALUE=16.0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_MAPPING.VALUE=7 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC +DRIVER.SYSTEM.VAR.CLKT_RTI2_DOMAIN_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.CORE_MPU_BACKGROUND_REGION_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CONFIG.VALUE=TRUE +DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_MAPPING.VALUE=101 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_NAME.VALUE=etpwm6TripZoneInterrupt +DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_LENGTH.VALUE=0x00000100 +DRIVER.SYSTEM.VAR.FLASH_DATA_MAX_WAIT_STATES.VALUE=3 +DRIVER.SYSTEM.VAR.FLASH_MODE.VALUE=PIPELINE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_7_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_1_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI4_RAMPARITYCHECK_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_EMAC_SP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.MINIT_VALUE.VALUE=0x1E57F +DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_MAPPING.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_PLL1_DIV.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_VCLK4_DOMAIN_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_PLL2_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.RAM_BASE_ADDRESS.VALUE=0x08000000 +DRIVER.SYSTEM.VAR.CORE_PMU_EVENT_EXPORT_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_2_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN1_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.GIO_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SIZE_VALUE.VALUE=0x17 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_MAPPING.VALUE=94 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_MAPPING.VALUE=86 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_MAPPING.VALUE=78 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_0_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_5_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_TYPE.VALUE=STRONGLYORDERED_SHAREABLE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_3_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_BASE_ADDRESS.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_PBIST_SP_SELECTED.VALUE=0 +DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_BASE.VALUE=0x08001300 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_NAME.VALUE=etpwm2Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.CLKT_RTI1_DIVIDER.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_6_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_TYPE.VALUE=FIQ +DRIVER.SYSTEM.VAR.PMM_LOGIC_PD3_STATE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_EFUSE_SELFCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_GHV_WAKUP_SOURCE.VALUE=OSC +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_TYPE_VALUE.VALUE=0x0000 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_MAPPING.VALUE=71 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_MAPPING.VALUE=63 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_MAPPING.VALUE=55 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_MAPPING.VALUE=47 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_MAPPING.VALUE=39 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_NAME.VALUE=rtiCompare2Interrupt +DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER1_EVENT.VALUE=0x11 +DRIVER.SYSTEM.VAR.EFUSE_SELFTEST_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.RAM_LINK_BASE_ADDRESS.VALUE=0x08001500 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_4_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_7_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.CLKT_PLL2_DIV.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_VCLK3_DIVIDER.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_LPO_TRIM_OTP_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE.VALUE=8_MB +DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_VIM1_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SOURCE.VALUE=VCLK +DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES_FREQ.VALUE=165.0 +DRIVER.SYSTEM.VAR.RAM_STACK_BASE.VALUE=0x08000000 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_NAME.VALUE=adc2Group1Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_MAPPING.VALUE=40 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_NAME.VALUE=can2HighLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_MAPPING.VALUE=32 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_NAME.VALUE=linLowLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_MAPPING.VALUE=24 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_NAME.VALUE=crcInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_MAPPING.VALUE=16 +DRIVER.SYSTEM.VAR.CLKT_VCLK3_DOMAIN_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_2_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_END_ADDRESS.VALUE=0xf07fffff +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_0_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.ETPWM7_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_1.VALUE=0 +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_2.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_3_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN4_DP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_3.VALUE=1 +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_4.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_NAME.VALUE=eqep1Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_NAME.VALUE=etpwm7Interrupt +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_5.VALUE=1 +DRIVER.SYSTEM.VAR.LBIST_STT.VALUE=1 +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_6.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_4_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_HTU2_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_7.VALUE=1 +DRIVER.SYSTEM.VAR.ECAP2_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_8.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_TYPE_VALUE.VALUE=0x0010 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_MAPPING.VALUE=123 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_MAPPING.VALUE=115 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_MAPPING.VALUE=107 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_NAME.VALUE=het1HighLevelInterrupt +DRIVER.SYSTEM.VAR.PMM_MEM_PD2_STATEVALUE.VALUE=0x5 +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_9.VALUE=1 +DRIVER.SYSTEM.VAR.RAM_STACK_USER_LENGTH.VALUE=0x00001000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_2_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_7_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_END_ADDRESS.VALUE=0x0843ffff +DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI1_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_USB_SP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.SAFETY_INIT_PBIST_SELFCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.ETPWM_OLDCODE.VALUE=1 +DRIVER.SYSTEM.VAR.SCI2_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.LIN_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_RTI1_FREQ.VALUE=110.000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SIZE_VALUE.VALUE=0x11 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_MAPPING.VALUE=6 +DRIVER.SYSTEM.VAR.CLKT_PLL2_SPEADING_AMOUNT.VALUE=61 +DRIVER.SYSTEM.VAR.CLKT_PLL2_SPEADING_RATE.VALUE=255 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_BASE_ADDRESS.VALUE=0x08001000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_TYPE.VALUE=STRONGLYORDERED_SHAREABLE +DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI5_DP_PBISTCHECK_ENA.VALUE=0x00000100 +DRIVER.SYSTEM.VAR.CLKT_PLL2_RESET_ON_SLIP.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.ECLK_FREQ.VALUE=13.750 +DRIVER.SYSTEM.VAR.CLKT_AVCLK1_FREQ.VALUE=110.000 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_MAPPING.VALUE=100 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_NAME.VALUE=etpwm2TripZoneInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_NAME.VALUE=EMACTxIntISR +DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_LENGTH.VALUE=0x00000100 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_6_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_0_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_RTI2_POST_SOURCE.VALUE=VCLK +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION_VALUE.VALUE=0x1300 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_NAME.VALUE=rtiCompare3Interrupt +DRIVER.SYSTEM.VAR.RAM_STACK_LENGTH.VALUE=0x00001500 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION.VALUE=PRIV_RO_USER_RO_EXEC +DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS.VALUE=true +DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER1.VALUE=4 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_1_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_END_ADDRESS.VALUE=0xffffffff +DRIVER.SYSTEM.VAR.CORE_PRAGMA_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SPI4_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_AVCLK4_POST_SOURCE.VALUE=VCLKA4_DIVR +DRIVER.SYSTEM.VAR.CLKT_VCLK1_FREQ.VALUE=110.000 +DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ1.VALUE=110.000 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_MAPPING.VALUE=93 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_MAPPING.VALUE=85 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_MAPPING.VALUE=77 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_MAPPING.VALUE=69 +DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ2.VALUE=27.500 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_4_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SIZE.VALUE=16_MB +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_BASE_ADDRESS.VALUE=0xFC000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_2_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.CLKT_PLL1_MUL.VALUE=165 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_NAME.VALUE=adc1Group2Interrupt +DRIVER.SYSTEM.VAR.CLKT_OSC_ENABLE.VALUE=TRUE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SIZE.VALUE=16_MB +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_5_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_SVC_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.PINMUX_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.PBIST_ALGO_3_4.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS_VALUE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_MAPPING.VALUE=70 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_MAPPING.VALUE=62 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_MAPPING.VALUE=54 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_MAPPING.VALUE=46 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_MAPPING.VALUE=38 +DRIVER.SYSTEM.VAR.CLKT_AVCLK1_DOMAIN_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_SOURCE_ENABLE.VALUE=0x00000080 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_3_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_6_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_PREFETCH_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_HTU2_DP_PBISTCHECK_ENA.VALUE=0x00080000 +DRIVER.SYSTEM.VAR.SAFETY_INIT_EMAC_DP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.PBIST_ALGO_15.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_NAME.VALUE=eqep2Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_NAME.VALUE=etpwm7TripZoneInterrupt +DRIVER.SYSTEM.VAR.PBIST_ALGO_16.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_VCLK2_DIVIDER.VALUE=1 +DRIVER.SYSTEM.VAR.RAM_LINK_LENGTH.VALUE=0x0002EB00 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_END_ADDRESS.VALUE=0x080017ff +DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_LPO_OSCFRQCONFIGCNT_VALUE.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_AVCLK2_SOURCE.VALUE=VCLK +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_TYPE_VALUE.VALUE=0x0008 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_MAPPING.VALUE=31 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_MAPPING.VALUE=23 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_MAPPING.VALUE=15 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.PBIST_ALGO_5_6.VALUE=0 +DRIVER.SYSTEM.VAR.PBIST_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_HCLK_DOMAIN_ENABLE.VALUE=TRUE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_1_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.ETPWM5_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.ETPWM_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_PLL2_MUL.VALUE=165 +DRIVER.SYSTEM.VAR.CLKT_RTI2_FREQ.VALUE=0.0 +DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_FREQ.VALUE=0.080 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_TYPE.VALUE=NORMAL_OINC_NONSHARED +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_2_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_PREFETCH_ENTRY.VALUE=_prefetch +DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.SAFETY_INIT_DMA_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_AVCLK2_FREQ.VALUE=0.000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_PERMISSION_VALUE.VALUE=0x1300 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION_VALUE.VALUE=0x1300 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_NAME.VALUE=etpwm3Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_OSCILLATOR_SOURCE_ENABLE.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_BASE_ADDRESS.VALUE=0x60000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_3_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.PMM_AUTO_CLK_WAKE_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.PMM_LOGIC_PD4_STATE.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_HET2_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.PBIST_ALGO_7_8.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_PLL2_RESET_ON_OSCILLATOR_FAIL.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_0.VALUE=0x00000020 +DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_1.VALUE=0x00180000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SIZE_VALUE.VALUE=0x08 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_MAPPING.VALUE=122 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_MAPPING.VALUE=114 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_MAPPING.VALUE=106 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_NAME.VALUE=rtiOverflow0Interrupt +DRIVER.SYSTEM.VAR.PMM_LOGIC_PD5_STATEVALUE.VALUE=0x5 +DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER2_EVENT.VALUE=0x11 +DRIVER.SYSTEM.VAR.FLASH_DATA_WAIT_STATES.VALUE=3 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_1_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_6_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_PARITY_AVAILABLE.VALUE=TRUE +DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN3_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_RAMECC_SELFCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.ADC2_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_VCLK2_FREQ.VALUE=110.000 +DRIVER.SYSTEM.VAR.FLASH_DATA_2_WAIT_STATE_FREQ.VALUE=165.0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_MAPPING.VALUE=5 +DRIVER.SYSTEM.VAR.VIM_PARITY_INTERRUPT_MAPPED_TO_VIM.VALUE=FALSE +DRIVER.SYSTEM.VAR.VIM_CHANNELS.VALUE=128 +DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_7.VALUE=0xF0200000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SIZE.VALUE=512_BYTES +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_7_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.PMM_MEM_PD1_STATE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN3_DP_PBISTCHECK_ENA.VALUE=0x00000010 +DRIVER.SYSTEM.VAR.ECAP_OLDCODE.VALUE=1 +DRIVER.SYSTEM.VAR.ESM_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_MAPPING.VALUE=99 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_NAME.VALUE=mibspi5HighLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_NAME.VALUE=can3HighLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_NAME.VALUE=mibspi3HighInterruptLevel +DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_NAME.VALUE=can1LowLevelInterrupt +DRIVER.SYSTEM.VAR.PMM_MEM_PD1_STATEVALUE.VALUE=0x5 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_5_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SIZE.VALUE=2_KB +DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.EQEP1_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_FREQ.VALUE=10.000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SIZE_VALUE.VALUE=0x11 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_0_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_ENTRY.VALUE="ldr pc,[pc,#-0x1b0]" +DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.ECAP_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SPI2_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_GHV_POWER_DOWN_SOURCE.VALUE=OSC +DRIVER.SYSTEM.VAR.RAM_STACK_USER_BASE.VALUE=0x08000000 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_NAME.VALUE=ecap1Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_MAPPING.VALUE=92 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_MAPPING.VALUE=84 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_MAPPING.VALUE=76 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_MAPPING.VALUE=68 +DRIVER.SYSTEM.VAR.CLKT_GCLK_DOMAIN_ENABLE.VALUE=TRUE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_3_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_1_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_ADC2_DP_PBISTCHECK_ENA.VALUE=0x00020000 +DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI4_DP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.SAFETY_INIT_USB_DP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.SYSTEM_INIT.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_NAME.VALUE=esmLowInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_NAME.VALUE=mibspi1HighLevelInterrupt +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_PERMISSION.VALUE=PRIV_NA_USER_NA_NOEXEC +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_4_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_BASE_ADDRESS.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_TYPE.VALUE=FIQ +DRIVER.SYSTEM.VAR.DMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_PERMISSION_VALUE.VALUE=0x1100 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_PERMISSION_VALUE.VALUE=0x1200 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_MAPPING.VALUE=61 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_MAPPING.VALUE=53 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_MAPPING.VALUE=45 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_MAPPING.VALUE=37 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_MAPPING.VALUE=29 +DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DIR.VALUE=1 +DRIVER.SYSTEM.VAR.FLASH_LENGTH.VALUE=0x00140000 +DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_LENGTH.VALUE=0x00000100 +DRIVER.SYSTEM.VAR.CLKT_EXT1_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_2_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_7_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_TYPE.VALUE=DEVICE_NONSHAREABLE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_5_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.SAFETY_INIT_ADC2_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ.VALUE=110.000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE_VALUE.VALUE=0x0010 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_NAME.VALUE=etpwm3TripZoneInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_NAME.VALUE=EMACRxIntISR +DRIVER.SYSTEM.VAR.CLKT_VCLK1_DIVIDER.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_TYPE.VALUE=DEVICE_NONSHAREABLE +DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.CAN2_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DOUT.VALUE=0 +DRIVER.SYSTEM.VAR.PBIST_ALGO_1.VALUE=0 +DRIVER.SYSTEM.VAR.FLASH_DATA_0_WAIT_STATE_FREQ.VALUE=55.0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_MAPPING.VALUE=30 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_MAPPING.VALUE=22 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_MAPPING.VALUE=14 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_NAME.VALUE=rtiOverflow1Interrupt +DRIVER.SYSTEM.VAR.PBIST_ALGO_2.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_RTI1_DOMAIN_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.CLKT_AVCLK1_DOMAIN_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_0_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI3_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.ETPWM3_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.DCC1_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.HET2_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_PBIST_ESRAM_SELECTED.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_VCLK3_FREQ.VALUE=110.000 +DRIVER.SYSTEM.VAR.CLKT_AVCLK4_FREQ1.VALUE=110.000 +DRIVER.SYSTEM.VAR.PBIST_ALGO_11_12.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_PLL2_SOURCE_ENABLE.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_7_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_END_ADDRESS.VALUE=0xfe0001ff +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_1_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_HTU1_DP_PBISTCHECK_ENA.VALUE=0x00002000 +DRIVER.SYSTEM.VAR.ECAP5_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.ADC_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_TYPE_VALUE.VALUE=0x0008 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_NAME.VALUE=spi4LowLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_NAME.VALUE=mibspi3LowLevelInterrupt +DRIVER.SYSTEM.VAR.FEE_FLASH_ECC_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SIZE.VALUE=4_MB +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_2_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESET_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.PMM_LOGIC_PD4_STATE_AVAIL.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_MAPPING.VALUE=121 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_MAPPING.VALUE=113 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_MAPPING.VALUE=105 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_0_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_5_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESERVED_ENTRY.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.PMM_MEM_PD3_STATE_AVAIL.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_NAME.VALUE=ecap2Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_MAPPING.VALUE=4 +DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DOMAIN_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_END_ADDRESS.VALUE=0x87ffffff +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_6_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SIZE.VALUE=4_GB +DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_PERMISSION_VALUE.VALUE=0x1300 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SIZE_VALUE.VALUE=0x17 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_PERMISSION_VALUE.VALUE=0x0300 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_MAPPING.VALUE=98 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_NAME.VALUE=linHighLevelInterrupt +DRIVER.SYSTEM.VAR.PMM_LOGIC_PD4_STATEVALUE.VALUE=0xA +DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_FUN.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_BASE_ADDRESS.VALUE=0x20000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_4_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_7_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_FRAY_RAMPARITYCHECK_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_DMA_DP_PBISTCHECK_ENA.VALUE=0x00000800 +DRIVER.SYSTEM.VAR.HET_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.PBIST_ALGO_13_14.VALUE=0 +DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_BASE.VALUE=0x08001400 +DRIVER.SYSTEM.VAR.RAM_STACK_SVC_BASE.VALUE=0x08001000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE.VALUE=DEVICE_NONSHAREABLE +DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.DMM_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.MIBSPI5_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_0.VALUE=ACTIVE +DRIVER.SYSTEM.VAR.PMM_PMCTRL_PWRDN.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_AVCLK4_FREQ.VALUE=110.000 +DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_1.VALUE=ACTIVE +DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_NAME.VALUE=etpwm4Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_MAPPING.VALUE=91 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_MAPPING.VALUE=83 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_MAPPING.VALUE=75 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_MAPPING.VALUE=67 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_MAPPING.VALUE=59 +DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_2.VALUE=SLEEP +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC +DRIVER.SYSTEM.VAR.CLKT_VCLK2_DOMAIN_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_3.VALUE=SLEEP +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_TYPE.VALUE=NORMAL_OINC_NONSHARED +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_2_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_END_ADDRESS.VALUE=0x0803ffff +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_0_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.PMM_LOGIC_PD5_STATE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN2_DP_PBISTCHECK_ENA.VALUE=0x00000008 +DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PDR.VALUE=0 +DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_4.VALUE=SLEEP +DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_5.VALUE=SLEEP +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SIZE_VALUE.VALUE=0x15 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_NAME.VALUE=rtiTimebaseInterrupt +DRIVER.SYSTEM.VAR.ECLK_PRESCALER.VALUE=8 +DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_6.VALUE=SLEEP +DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_7.VALUE=ACTIVE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_BASE_ADDRESS.VALUE=0xFE000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_3_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_HTU1_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_VCLK4_FREQ.VALUE=110.000 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_MAPPING.VALUE=60 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_MAPPING.VALUE=52 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_MAPPING.VALUE=44 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_MAPPING.VALUE=36 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_MAPPING.VALUE=28 +DRIVER.SYSTEM.VAR.CLKT_PLL1_BAND_WIDTH_ADJUSTMENT.VALUE=7 +DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_SOURCE_ENABLE.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_1_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_6_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_4_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.PMM_MEM_PD2_STATE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_VIM2_DP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CLKT_PLL2_MUL_VAL.VALUE=A400 +DRIVER.SYSTEM.VAR.CLKT_RTI1_POST_SOURCE.VALUE=VCLK +DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_NAME.VALUE=het2HighLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_NAME.VALUE=can3LowLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_NAME.VALUE=dmaHBCAInterrupt +DRIVER.SYSTEM.VAR.CLKT_PLL2_BAND_WIDTH_ADJUSTMENT.VALUE=7 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_7_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_DATA_ENTRY.VALUE=_dabort +DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_ADC1_DP_PBISTCHECK_ENA.VALUE=0x00000400 +DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI3_DP_PBISTCHECK_ENA.VALUE=0x00000080 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_MAPPING.VALUE=21 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_MAPPING.VALUE=13 +DRIVER.SYSTEM.VAR.CLKT_PLL2_REF_CLOCK_DIV.VALUE=6 +DRIVER.SYSTEM.VAR.CLKT_PLL1_SPEADING_RATE.VALUE=255 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN5_RAMPARITYCHECK_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.ETPWM1_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_PLL1_RESET_ON_SLIP.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_TYPE_VALUE.VALUE=0x0010 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_PERMISSION_VALUE.VALUE=0x0300 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_MAPPING.VALUE=127 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_MAPPING.VALUE=119 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_NAME.VALUE=ecap3nterrupt +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_PERMISSION.VALUE=PRIV_RW_USER_NA_NOEXEC +DRIVER.SYSTEM.VAR.CLKT_PLL1_FM_ENABLE.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_6_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_0_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SIZE.VALUE=4_MB +DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.SAFETY_INIT_PBIST_ROM_PBIST_SELFCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.ECAP3_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_NAME.VALUE=adc1Group0Interrupt +DRIVER.SYSTEM.VAR.CLKT_LPOLO_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_1_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PSL.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_MAPPING.VALUE=120 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_MAPPING.VALUE=112 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_MAPPING.VALUE=104 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_END_ADDRESS.VALUE=0xffffffff +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_4_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_BASE_ADDRESS.VALUE=0x80000000 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_SVC_ENTRY.VALUE=_svc +DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CONFIG_NEW.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_FTU_RAMPARITYCHECK_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_FLASHECC_SELFCHECK_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_FREQ.VALUE=00.0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_TYPE_VALUE.VALUE=0x0008 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_NAME.VALUE=etpwm4TripZoneInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_MAPPING.VALUE=3 +DRIVER.SYSTEM.VAR.CLKT_LPOHI_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_TYPE.VALUE=NORMAL_OINC_NONSHARED +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_5_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.SAFETY_INIT_RTP_DP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CLKT_GHV_NORMAL_SOURCE.VALUE=PLL1 +DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIV_FREQ.VALUE=110.0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_MAPPING.VALUE=97 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_MAPPING.VALUE=89 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_NAME.VALUE=gioHighLevelInterrupt +DRIVER.SYSTEM.VAR.CLKT_PLL1_ENABLE.VALUE=TRUE +DRIVER.SYSTEM.VAR.FLASH_BASE_ADDRESS.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_3_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_6_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_ESRAM_SP_PBISTCHECK_ENA.VALUE=0x08300020 +DRIVER.SYSTEM.VAR.SAFETY_INIT_STC_ROM_PBIST_SELFCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.SPI5_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_AVCLK2_DOMAIN_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_TYPE.VALUE=NORMAL_OINC_NONSHARED +DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.SAFETY_INIT_FTU_DP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.RTP_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.MIBSPI3_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_0.VALUE=0x0013FFE0 +DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_1.VALUE=0x00180000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE_VALUE.VALUE=0x16 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_MAPPING.VALUE=90 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_MAPPING.VALUE=82 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_MAPPING.VALUE=74 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_MAPPING.VALUE=66 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_NAME.VALUE=sciHighLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_MAPPING.VALUE=58 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_NAME.VALUE=mibspi5LowLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.PMM_LOGIC_PD3_STATEVALUE.VALUE=0x5 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_7_DISABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_1_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.EQEP_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.RTI_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.STC_MAX_TIMEOUT.VALUE=0xFFFFFFFF +DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM.VALUE=100.00 +DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_BASE.VALUE=0x08001100 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION_VALUE.VALUE=0x0300 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_NAME.VALUE=esmHighInterrupt +DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_7.VALUE=0x000010000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_2_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_HET1_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI5_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.FEE_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_10.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM_VALUE.VALUE=16 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_NAME.VALUE=ecap4Interrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_MAPPING.VALUE=51 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_MAPPING.VALUE=43 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_MAPPING.VALUE=35 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_MAPPING.VALUE=27 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_MAPPING.VALUE=19 +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_11.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_12.VALUE=1 +DRIVER.SYSTEM.VAR.CCM_MENU.VALUE=NONE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_0_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_5_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SIZE.VALUE=256_KB +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_BASE_ADDRESS.VALUE=0x08000000 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_3_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_PARITY_ENABLE_NEW.VALUE=0xA +DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN2_RAMPARITYCHECK_ENA.VALUE=1 +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_13.VALUE=1 +DRIVER.SYSTEM.VAR.POM_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_PLL1_MUL_VAL.VALUE=A400 +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_14.VALUE=1 +DRIVER.SYSTEM.VAR.CLKT_AVCLK3_SOURCE.VALUE=VCLK +DRIVER.SYSTEM.VAR.CLKT_PLL1_FREQ.VALUE=220.00 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SIZE_VALUE.VALUE=0x1F +DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_NAME.VALUE=phantomInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_NAME.VALUE=gioLowLevelInterrupt +DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_NAME.VALUE=adc1Group1Interrupt +DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_15.VALUE=1 +DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_LENGTH.VALUE=0x00000100 +DRIVER.SYSTEM.VAR.RAM_STACK_SVC_LENGTH.VALUE=0x00000100 +DRIVER.SYSTEM.VAR.CLKT_LPO_TRIM_OTP_LOC.VALUE=0xF00801B4 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_6_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENTRY.VALUE=_undef +DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN1_DP_PBISTCHECK_ENA.VALUE=0x00000004 +DRIVER.SYSTEM.VAR.ETPWM6_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.DCC_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_MAPPING.VALUE=20 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_MAPPING.VALUE=12 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_7_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_ENDIAN_LITTLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_FRAY_SP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.OS_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SIZE_VALUE.VALUE=0x15 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_MAPPING.VALUE=126 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_MAPPING.VALUE=118 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_NAME.VALUE=etpwm5Interrupt +DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PULL.VALUE=2 +DRIVER.SYSTEM.VAR.ECLK_SUSPEND.VALUE=0 +DRIVER.SYSTEM.VAR.CLKT_PLL1_SPEADING_AMOUNT.VALUE=61 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_5_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.CORE_VFP_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SAFETY_INIT_VIM1_DP_PBISTCHECK_ENA.VALUE=0x00000200 +DRIVER.SYSTEM.VAR.SAFETY_INIT_FMCBUS2_SELFCHECK_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.ECAP1_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.I2C_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.AJSM_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.ECLK_OSCILLATOR_FREQ.VALUE=16.000 +DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_TRIM.VALUE=100.00 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_MAPPING.VALUE=9 +DRIVER.SYSTEM.VAR.CLKT_VCLK4_DOMAIN_ENABLE.VALUE=FALSE +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_0_DISABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.SAFETY_INIT_VIM2_RAMPARITYCHECK_ENA.VALUE=0 +DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI2_DP_PBISTCHECK_ENA.VALUE=0x00000000 +DRIVER.SYSTEM.VAR.CLKT_CRYSTAL_FREQ.VALUE=16.0 +DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_TYPE_VALUE.VALUE=0x0008 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_MAPPING.VALUE=111 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_MAPPING.VALUE=103 +DRIVER.SYSTEM.VAR.VIM_PHANTOM_NAME.VALUE=phantomInterrupt +DRIVER.OS.VAR.OS_USERECERSIVEMUTEXES.VALUE=0 +DRIVER.OS.VAR.OS_USETIMERS.VALUE=0 +DRIVER.OS.VAR.OS_USECNTSEMAPHORE.VALUE=0 +DRIVER.OS.VAR.OS_GENERATERUNTIMESTATS.VALUE=0 +DRIVER.OS.VAR.OS_USEMPU.VALUE=0 +DRIVER.OS.VAR.OS_TOTALHEAPSIZE.VALUE=8192 +DRIVER.OS.VAR.OS_USEVERBOSESTACK.VALUE=2 +DRIVER.OS.VAR.OS_TIMERPRIORITY.VALUE=0 +DRIVER.OS.VAR.OS_SVCENABLE.VALUE=0 +DRIVER.OS.VAR.OS_MAXTASKNAMELEN.VALUE=16 +DRIVER.OS.VAR.OS_MAXPRIORITIES.VALUE=5 +DRIVER.OS.VAR.OS_TIMERTASKSTACKDEPTH.VALUE=0 +DRIVER.OS.VAR.OS_COROUTINEPRIORITIES.VALUE=2 +DRIVER.OS.VAR.OS_USECOROUTINES.VALUE=0 +DRIVER.OS.VAR.OS_USEMUTEXES.VALUE=0 +DRIVER.OS.VAR.OS_CPUCLOCKHZ.VALUE=80000000 +DRIVER.OS.VAR.OS_USEMALLOCFAILEDHOOK.VALUE=0 +DRIVER.OS.VAR.OS_MINSTACKSIZE.VALUE=128 +DRIVER.OS.VAR.OS_SYSTEM_MODE.VALUE=0x1F +DRIVER.OS.VAR.OS_USEPREEMPTION.VALUE=1 +DRIVER.OS.VAR.OS_IDLESHOULDYIELD.VALUE=1 +DRIVER.OS.VAR.OS_USEIDLEHOOK.VALUE=0 +DRIVER.OS.VAR.OS_TICKRATEHZ.VALUE=1000 +DRIVER.OS.VAR.OS_TIMERPQUEUELENGTH.VALUE=0 +DRIVER.OS.VAR.OS_USETRACE.VALUE=0 +DRIVER.OS.VAR.OS_USESTACK.VALUE=0 +DRIVER.OS.VAR.OS_USETICKHOOK.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_LOW_TIME.VALUE=148.945 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_VCLK_FREQ.VALUE=110 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_INT_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_LPC.VALUE=16384 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_ENABLE.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_INT_LEVEL.VALUE=0 +DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_INT_LEVEL.VALUE=0 +DRIVER.RTI.VAR.RTI_1_COMPARE_2_SOURCE.VALUE=0x00000100 +DRIVER.RTI.VAR.RTI_1_COMPARE_3_FREQ.VALUE=0.000100000 +DRIVER.RTI.VAR.RTI_1_FREQ.VALUE=110.000 +DRIVER.RTI.VAR.RTI_1_COMPARE_1_ACTUALTIME.VALUE=5.000 +DRIVER.RTI.VAR.RTI_1_COUNTER_1_UC_COMPARE.VALUE=10 +DRIVER.RTI.VAR.RTI_1_COMPARE_1_TIME.VALUE=5.000 +DRIVER.RTI.VAR.RTI_1_COMPARE_3_UPDATE.VALUE=100000 +DRIVER.RTI.VAR.RTI_1_CONTINUE_ON_SUSPEND_ENABLE.VALUE=0x00000000 +DRIVER.RTI.VAR.RTI_1_COMPARE_1_INPUT_FREQ.VALUE=10.000000000 +DRIVER.RTI.VAR.RTI_1_COMPARE_0_SOURCE.VALUE=0x00000000 +DRIVER.RTI.VAR.RTI_1_COMPARE_2_TIME.VALUE=8.000 +DRIVER.RTI.VAR.RTI_1_COMPARE_0_ACTUALTIME.VALUE=1.000 +DRIVER.RTI.VAR.RTI_1_COUNTER_0_UC_COMPARE.VALUE=10 +DRIVER.RTI.VAR.RTI_1_COMPARE_1_UPDATE.VALUE=50000 +DRIVER.RTI.VAR.RTI_1_COMPARE_3_TIME.VALUE=10.000 +DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_SOURCE.VALUE=0 +DRIVER.RTI.VAR.RTI_1_COMPARE_0_INPUT_FREQ.VALUE=10.000000000 +DRIVER.RTI.VAR.RTI_1_COUNTER_0_RTI_FREQ.VALUE=0.0 +DRIVER.RTI.VAR.RTI_1_COUNTER_0_FREQ.VALUE=10.000000000 +DRIVER.RTI.VAR.RTI_1_COUNTER_1_FREQUENCY.VALUE=10.000 +DRIVER.RTI.VAR.RTI_1_COMPARE_3_SOURCE.VALUE=0x00001000 +DRIVER.RTI.VAR.RTI_1_COUNTER_1_FREQ.VALUE=10.000000000 +DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_SOURCE_REG.VALUE=0x0 +DRIVER.RTI.VAR.RTI_1_COMPARE_1_SOURCE.VALUE=0x00000000 +DRIVER.RTI.VAR.RTI_1_NTU_1_FREQ.VALUE=0.0 +DRIVER.RTI.VAR.RTI_1_COMPARE_3_ACTUALTIME.VALUE=10.000 +DRIVER.RTI.VAR.RTI_1_COMPARE_0_FREQ.VALUE=0.001000000 +DRIVER.RTI.VAR.RTI_1_COMPARE_2_UPDATE.VALUE=80000 +DRIVER.RTI.VAR.RTI_1_BASE.VALUE=0xFFFFFC00 +DRIVER.RTI.VAR.RTI_1_NTU_2_FREQ.VALUE=0.0 +DRIVER.RTI.VAR.RTI_1_COMPARE_3_INPUT_FREQ.VALUE=10.000000000 +DRIVER.RTI.VAR.RTI_1_COMPARE_1_FREQ.VALUE=0.000200000 +DRIVER.RTI.VAR.RTI_1_COUNTER_0_CAPTURE_SOURCE_ENABLE.VALUE=0 +DRIVER.RTI.VAR.RTI_1_COUNTER_1_CAPTURE_SOURCE_ENABLE.VALUE=0 +DRIVER.RTI.VAR.RTI_1_COMPARE_0_UPDATE.VALUE=10000 +DRIVER.RTI.VAR.RTI_1_NTU_3_FREQ.VALUE=220.000 +DRIVER.RTI.VAR.RTI_1_COMPARE_0.VALUE=10000 +DRIVER.RTI.VAR.RTI_1_COMPARE_2_ACTUALTIME.VALUE=8.000 +DRIVER.RTI.VAR.RTI_1_COMPARE_1.VALUE=50000 +DRIVER.RTI.VAR.RTI_1_COMPARE_2.VALUE=80000 +DRIVER.RTI.VAR.RTI_1_COMPARE_3.VALUE=100000 +DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_FREQ.VALUE=0.000 +DRIVER.RTI.VAR.RTI_1_COMPARE_2_FREQ.VALUE=0.000125000 +DRIVER.RTI.VAR.RTI_1_COMPARE_0_TIME.VALUE=1.000 +DRIVER.RTI.VAR.RTI_1_NTU_4_FREQ.VALUE=0.000 +DRIVER.RTI.VAR.RTI_1_COMPARE_2_INPUT_FREQ.VALUE=10.000000000 +DRIVER.RTI.VAR.RTI_1_COUNTER_0_FREQUENCY.VALUE=10.000 +DRIVER.GIO.VAR.GIO_PORT1_BIT4_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT0_BIT5_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT7_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT2_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT7_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT3_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT2_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT6_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT2_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT6_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT2_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT3_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT4_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT3_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT5_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT7_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT3_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT5_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT0_BIT7_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT4_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT5_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT4_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT4_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT0_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT0_BIT3_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT5_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT6_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT5_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT5_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT0_BIT6_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT3_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT7_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT6_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT0_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT6_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT0_BIT4_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT7_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT7_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT7_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT0_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT7_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT7_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT1_BIT1_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT5_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT0_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT0_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT2_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT1_BIT1_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT6_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT1_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT2_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT2_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT0_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT3_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT1_BIT3_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT7_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT3_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT0_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT1_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT0_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT4_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT0_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT4_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT4_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_BASE_PORTA.VALUE=0xFFF7BC34 +DRIVER.GIO.VAR.GIO_BASE_PORTB.VALUE=0xFFF7BC54 +DRIVER.GIO.VAR.GIO_PORT1_BIT1_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT2_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT1_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT1_BIT4_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT1_BIT5_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT1_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT5_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT2_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT0_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT3_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT2_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT0_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT6_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT2_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT6_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_BASE.VALUE=0xFFF7BC00 +DRIVER.GIO.VAR.GIO_PORT1_BIT3_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT1_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT4_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT3_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT0_BIT1_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT5_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT6_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT1_BIT7_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT3_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT7_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT4_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT2_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT5_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT4_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT2_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT0_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT6_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT4_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT0_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORTB_ENABLE.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT1_BIT5_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT3_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT6_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT5_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT3_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT0_BIT3_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT6_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT7_PULL.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT0_BIT0_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT5_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT1_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT0_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT6_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT7_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT4_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT7_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT6_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT0_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT4_DIR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULDIS.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT1_DOUT.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT1_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT6_PSL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT2_PDR.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT1_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT7_LVL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT5_ENA.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT1_BIT7_POL.VALUE=0 +DRIVER.GIO.VAR.GIO_PORT0_BIT1_PSL.VALUE=0 +DRIVER.SCI.VAR.SCILIN_TIMMINGMODE.VALUE=1 +DRIVER.SCI.VAR.SCILIN_PORT_BIT0_DIR.VALUE=0 +DRIVER.SCI.VAR.SCI_TIMMINGMODE.VALUE=1 +DRIVER.SCI.VAR.SCILIN_WAKEINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PEINTENA.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT2_PULL.VALUE=2 +DRIVER.SCI.VAR.SCILIN_PORT_BIT1_DIR.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT0_DIR.VALUE=0 +DRIVER.SCI.VAR.SCI_ACTUALBAUDRATE.VALUE=9602 +DRIVER.SCI.VAR.SCI_EVENPARITY.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT0_FUN.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT2_DIR.VALUE=0 +DRIVER.SCI.VAR.SCILIN_RXINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT1_DIR.VALUE=0 +DRIVER.SCI.VAR.SCI_BASE_PORT.VALUE=0xFFF7E540 +DRIVER.SCI.VAR.SCILIN_PRESCALE.VALUE=715 +DRIVER.SCI.VAR.SCILIN_PORT_BIT0_PDR.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT1_FUN.VALUE=1 +DRIVER.SCI.VAR.SCI_PORT_BIT0_FUN.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT2_DIR.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT1_PDR.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT0_PDR.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT2_FUN.VALUE=1 +DRIVER.SCI.VAR.SCILIN_PEINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT1_FUN.VALUE=1 +DRIVER.SCI.VAR.SCILIN_PORT_BIT0_PSL.VALUE=1 +DRIVER.SCI.VAR.SCI_OEINTENA.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT2_PDR.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT1_PDR.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT2_FUN.VALUE=1 +DRIVER.SCI.VAR.SCILIN_PORT_BIT1_PSL.VALUE=1 +DRIVER.SCI.VAR.SCI_PORT_BIT0_PSL.VALUE=1 +DRIVER.SCI.VAR.SCI_PORT_BIT2_PDR.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT2_PSL.VALUE=1 +DRIVER.SCI.VAR.SCI_PORT_BIT1_PSL.VALUE=1 +DRIVER.SCI.VAR.SCILIN_BREAKINTENA.VALUE=0 +DRIVER.SCI.VAR.SCI_WAKEINTENA.VALUE=0 +DRIVER.SCI.VAR.SCI_BREAKINTENA.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT2_PSL.VALUE=1 +DRIVER.SCI.VAR.SCILIN_PORT_BIT2_PULDIS.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.SCI.VAR.SCI_FEINTENA.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT0_DOUT.VALUE=0 +DRIVER.SCI.VAR.SCI_OEINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCI_TXINTENA.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PARITYENA.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT1_DOUT.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT0_DOUT.VALUE=0 +DRIVER.SCI.VAR.SCI_BAUDRATE.VALUE=9600 +DRIVER.SCI.VAR.SCILIN_BREAKINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCI_WAKEINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.SCI.VAR.SCI_BREAKINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCI_STOPBITS.VALUE=2 +DRIVER.SCI.VAR.SCI_RXINTENA.VALUE=0 +DRIVER.SCI.VAR.SCI_FEINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCILIN_EVENPARITY.VALUE=0 +DRIVER.SCI.VAR.SCI_TXINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCILIN_OEINTENA.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT2_DOUT.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT1_DOUT.VALUE=0 +DRIVER.SCI.VAR.SCI_PEINTENA.VALUE=0 +DRIVER.SCI.VAR.SCI_CLKMODE.VALUE=1 +DRIVER.SCI.VAR.SCI_PARITYENA.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT0_PULL.VALUE=2 +DRIVER.SCI.VAR.SCI_PORT_BIT2_DOUT.VALUE=0 +DRIVER.SCI.VAR.SCILIN_BASE.VALUE=0xFFF7E400 +DRIVER.SCI.VAR.SCI_RXINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCILIN_FEINTENA.VALUE=0 +DRIVER.SCI.VAR.SCI_PRESCALE.VALUE=715 +DRIVER.SCI.VAR.SCILIN_OEINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCILIN_TXINTENA.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT2_PULDIS.VALUE=0 +DRIVER.SCI.VAR.SCILIN_PORT_BIT1_PULL.VALUE=2 +DRIVER.SCI.VAR.SCI_PORT_BIT0_PULL.VALUE=2 +DRIVER.SCI.VAR.SCI_PEINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCILIN_WAKEINTENA.VALUE=0 +DRIVER.SCI.VAR.SCI_LENGTH.VALUE=8 +DRIVER.SCI.VAR.SCILIN_CLKMODE.VALUE=1 +DRIVER.SCI.VAR.SCILIN_BASE_PORT.VALUE=0xFFF7E440 +DRIVER.SCI.VAR.SCILIN_BAUDRATE.VALUE=9600 +DRIVER.SCI.VAR.SCILIN_STOPBITS.VALUE=2 +DRIVER.SCI.VAR.SCILIN_PORT_BIT2_PULL.VALUE=2 +DRIVER.SCI.VAR.SCI_PORT_BIT1_PULL.VALUE=2 +DRIVER.SCI.VAR.SCILIN_RXINTENA.VALUE=0 +DRIVER.SCI.VAR.SCILIN_LENGTH.VALUE=8 +DRIVER.SCI.VAR.SCILIN_FEINTLVL.VALUE=0 +DRIVER.SCI.VAR.SCILIN_ACTUALBAUDRATE.VALUE=9602 +DRIVER.SCI.VAR.SCILIN_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.SCI.VAR.SCI_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.SCI.VAR.SCI_BASE.VALUE=0xFFF7E500 +DRIVER.SCI.VAR.SCILIN_TXINTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_BITERRENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_CLKMOD.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PHASE0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI1_PHASE1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PHASE2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI1_PHASE3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSNR.VALUE=CS_2 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_C2TDELAYACTUAL.VALUE=18.182 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE0.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE1.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE2.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_LENGTH.VALUE=8 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE3.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_C2EDELAYACTUAL.VALUE=0.000 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSNR.VALUE=CS_1 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_T2CDELAYACTUAL.VALUE=9.091 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PARERRENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSNR.VALUE=CS_3 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_C2TDELAY.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI5_RXINTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_BASE.VALUE=0xFFF7FC00 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_DEYSNCLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSNR.VALUE=CS_5 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI1_TXINTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE0.VALUE=109 +DRIVER.MIBSPI.VAR.MIBSPI1_CLKMOD.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE1.VALUE=109 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TXINTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE2.VALUE=109 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TIMEOUTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE3.VALUE=109 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE0.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE1.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE2.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_BITERRENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE3.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_T2EDELAY.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_BITERRLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAYACTUAL.VALUE=9.091 +DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_ENABLEHIGHZ.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSNR.VALUE=CS_4 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSNR.VALUE=CS_6 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_BASE_PORT.VALUE=0xFFF7FC18 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_RAM_PARITY_ENA.VALUE=0x00000005 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PARERRENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PARERRLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_DEYSNCENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_RXINTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_T2EDELAYACTUAL.VALUE=0.000 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI5_RXINTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSNR.VALUE=CS_1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE0.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSNR.VALUE=CS_7 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE1.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE2.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TXINTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE3.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI1_DLENERRENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_C2EDELAY.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TIMEOUTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_BITERRENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_BITERRLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_RAM_PARITY_ENA.VALUE=0x00000005 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSNR.VALUE=CS_0 +DRIVER.MIBSPI.VAR.MIBSPI5_T2CDELAY.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_LENGTH.VALUE=8 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_BASE_RAM.VALUE=0xFF0A0000 +DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN0.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI3_CSDEF.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN1.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN2.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSNR.VALUE=CS_2 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN3.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_BASE_PORT.VALUE=0xFFF7F818 +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSNR.VALUE=CS_4 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI1_PARERRENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PARERRLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_DEYSNCLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_RXINTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAYACTUAL.VALUE=18.182 +DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE0.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSNR.VALUE=CS_3 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE1.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE2.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE3.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_ENABLEHIGHZ.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAY.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_DLENERRLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSNR.VALUE=CS_5 +DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAY.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_BITERRLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_C2EDELAYACTUAL.VALUE=0.000 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSNR.VALUE=CS_7 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAY.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI3_TXINTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI1_BASE_RAM.VALUE=0xFF0E0000 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN0.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN1.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN2.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN3.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_BASE_PORT.VALUE=0xFFF7F418 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_T2EDELAY.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSNR.VALUE=CS_0 +DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSNR.VALUE=CS_6 +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI5_MASTER.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAYACTUAL.VALUE=0.000 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PARERRLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_DLENERRENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_T2CDELAYACTUAL.VALUE=9.091 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE0.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE1.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE2.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE3.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSNR.VALUE=CS_1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_BASE.VALUE=0xFFF7F400 +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI3_RXINTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PHASE0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PHASE1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PHASE2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI5_PHASE3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSNR.VALUE=CS_3 +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_LENGTH.VALUE=8 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI3_TXINTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_ENABLE.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_T2EDELAYACTUAL.VALUE=0.000 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI5_OVRNINTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAY.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_MASTER.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSNR.VALUE=CS_2 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE0.VALUE=109 +DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE1.VALUE=109 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE2.VALUE=109 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE3.VALUE=109 +DRIVER.MIBSPI.VAR.MIBSPI3_RAM_PARITY_ENA.VALUE=0x00000005 +DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSNR.VALUE=CS_4 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_DLENERRLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_CSDEF.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSNR.VALUE=CS_6 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAYACTUAL.VALUE=0.000 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG1_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_CLKMOD.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DOUT.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PHASE0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI3_PHASE1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PHASE2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI3_PHASE3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG4_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG6_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_RXINTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_ENABLEHIGHZ.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSNR.VALUE=CS_5 +DRIVER.MIBSPI.VAR.MIBSPI3_BASE.VALUE=0xFFF7F800 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_MASTER.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG0_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_TRGSRC.VALUE=TRG_DISABLED +DRIVER.MIBSPI.VAR.MIBSPI3_C2EDELAY.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_TG2_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_LOCK.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_ONESHOT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAYACTUAL.VALUE=18.182 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSNR.VALUE=CS_7 +DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAY.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_LENGTH.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_OVRNINTLVL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_MODE.VALUE=4 +DRIVER.MIBSPI.VAR.MIBSPI5_DEYSNCENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_DIR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PSL.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_T2CDELAY.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_TRGEVT.VALUE=TRG_ALWAYS +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI1_CSDEF.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_CS_ENCODE.VALUE=0xFF +DRIVER.MIBSPI.VAR.MIBSPI5_TG7_USE_CS_ENCODE.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TXINTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PULDIS.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_WDEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE0.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_PRST.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE0.VALUE=109 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_DOUT.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE1.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE1.VALUE=109 +DRIVER.MIBSPI.VAR.MIBSPI3_BASE_RAM.VALUE=0xFF0C0000 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PULL.VALUE=2 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE2.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE2.VALUE=109 +DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN0.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE3.VALUE=1000.000 +DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL1.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE3.VALUE=109 +DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN1.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL2.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PDR.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_DFSEL.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSNR.VALUE=CS_0 +DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN2.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL3.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN3.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI1_TG1_TRGSRC.VALUE=TRG_DISABLED +DRIVER.SPI.VAR.SPI5_PORT_BIT26_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT18_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI3_PHASE2.VALUE=0 +DRIVER.SPI.VAR.SPI2_TIMEOUTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT1_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI5_PORT_BIT25_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT17_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI3_PHASE3.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT11_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI4_T2CDELAYACTUAL.VALUE=9.091 +DRIVER.SPI.VAR.SPI4_POLARITY0.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT1_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT4_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI4_POLARITY1.VALUE=0 +DRIVER.SPI.VAR.SPI2_T2EDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT2_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI4_PORT_BIT9_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_POLARITY2.VALUE=0 +DRIVER.SPI.VAR.SPI2_BITERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI1_SHIFTDIR0.VALUE=0 +DRIVER.SPI.VAR.SPI1_RXINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT10_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_DEYSNCENA.VALUE=0 +DRIVER.SPI.VAR.SPI4_POLARITY3.VALUE=0 +DRIVER.SPI.VAR.SPI1_SHIFTDIR1.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT10_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT2_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT4_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_SHIFTDIR2.VALUE=0 +DRIVER.SPI.VAR.SPI1_SHIFTDIR3.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT2_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT10_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI1_PORT_BIT8_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT0_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT0_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT25_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT17_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT11_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI3_PORT_BIT4_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT11_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT25_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT17_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT9_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_PRESCALE0.VALUE=109 +DRIVER.SPI.VAR.SPI3_PRESCALE1.VALUE=109 +DRIVER.SPI.VAR.SPI1_C2EDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT27_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT19_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT0_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI3_PRESCALE2.VALUE=109 +DRIVER.SPI.VAR.SPI1_MASTER.VALUE=1 +DRIVER.SPI.VAR.SPI3_PRESCALE3.VALUE=109 +DRIVER.SPI.VAR.SPI3_PORT_BIT2_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_C2TDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI2_BASE_PORT.VALUE=0xFFF7F618 +DRIVER.SPI.VAR.SPI5_BITERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI4_OVRNINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT9_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT25_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT17_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI5_C2TDELAYACTUAL.VALUE=18.182 +DRIVER.SPI.VAR.SPI4_PORT_BIT10_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT8_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI4_WAITENA0.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT11_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT5_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI4_WAITENA1.VALUE=0 +DRIVER.SPI.VAR.SPI5_OVRNINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI4_WAITENA2.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT3_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT9_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI1_PORT_BIT9_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI4_WAITENA3.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT2_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT1_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_T2CDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT26_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT18_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT5_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI3_TXINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT10_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_BASE_RAM.VALUE=0xFF0E0000 +DRIVER.SPI.VAR.SPI5_PORT_BIT1_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT2_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI1_CHARLEN0.VALUE=16 +DRIVER.SPI.VAR.SPI1_CHARLEN1.VALUE=16 +DRIVER.SPI.VAR.SPI4_PORT_BIT8_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT3_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT5_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI1_CHARLEN2.VALUE=16 +DRIVER.SPI.VAR.SPI1_CHARLEN3.VALUE=16 +DRIVER.SPI.VAR.SPI5_PORT_BIT3_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI3_PORT_BIT10_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT0_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI2_PARERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT8_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI3_DLENERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT26_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT18_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT9_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI4_PARITYENA0.VALUE=0 +DRIVER.SPI.VAR.SPI4_ENABLEHIGHZ.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT3_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI5_T2EDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI4_PARITYENA1.VALUE=0 +DRIVER.SPI.VAR.SPI4_PARITYENA2.VALUE=0 +DRIVER.SPI.VAR.SPI4_DLENERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI4_RXINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT4_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT25_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT17_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT11_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI5_PORT_BIT3_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI4_PARITYENA3.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT2_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT1_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI3_CLKMOD.VALUE=1 +DRIVER.SPI.VAR.SPI1_PHASE0.VALUE=0 +DRIVER.SPI.VAR.SPI1_PHASE1.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT27_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT19_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT0_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI1_PHASE2.VALUE=0 +DRIVER.SPI.VAR.SPI1_PHASE3.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT25_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT17_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT11_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI2_BAUDRATE0.VALUE=1000.000 +DRIVER.SPI.VAR.SPI1_PORT_BIT8_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI2_BAUDRATE1.VALUE=1000.000 +DRIVER.SPI.VAR.SPI5_PORT_BIT2_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI2_BAUDRATE2.VALUE=1000.000 +DRIVER.SPI.VAR.SPI2_BAUDRATE3.VALUE=1000.000 +DRIVER.SPI.VAR.SPI5_WDELAY0.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT4_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT10_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT25_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT17_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI1_C2TDELAYACTUAL.VALUE=18.182 +DRIVER.SPI.VAR.SPI1_ENABLEHIGHZ.VALUE=0 +DRIVER.SPI.VAR.SPI5_WDELAY1.VALUE=0 +DRIVER.SPI.VAR.SPI4_C2EDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI5_WDELAY2.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT11_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT9_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI1_TIMEOUTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI5_WDELAY3.VALUE=0 +DRIVER.SPI.VAR.SPI5_PARERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI4_RAM_PARITY_ENA.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT5_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT27_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT19_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT0_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT11_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI2_POLARITY0.VALUE=0 +DRIVER.SPI.VAR.SPI2_POLARITY1.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT5_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI2_POLARITY2.VALUE=0 +DRIVER.SPI.VAR.SPI3_DEYSNCENA.VALUE=0 +DRIVER.SPI.VAR.SPI2_POLARITY3.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT11_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT3_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT1_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_DEYSNCLVL.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT8_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI4_PORT_BIT10_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT26_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT18_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI2_T2EDELAYACTUAL.VALUE=0.000 +DRIVER.SPI.VAR.SPI1_PORT_BIT9_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI4_T2CDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT3_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT10_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT0_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI4_PORT_BIT9_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT5_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_C2EDELAYACTUAL.VALUE=0.000 +DRIVER.SPI.VAR.SPI1_PRESCALE0.VALUE=109 +DRIVER.SPI.VAR.SPI4_BASE_RAM.VALUE=0xFF0E0000 +DRIVER.SPI.VAR.SPI1_PRESCALE1.VALUE=109 +DRIVER.SPI.VAR.SPI4_CHARLEN0.VALUE=16 +DRIVER.SPI.VAR.SPI2_PORT_BIT1_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI1_PRESCALE2.VALUE=109 +DRIVER.SPI.VAR.SPI4_CHARLEN1.VALUE=16 +DRIVER.SPI.VAR.SPI1_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI1_PRESCALE3.VALUE=109 +DRIVER.SPI.VAR.SPI5_PORT_BIT1_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI5_T2CDELAYACTUAL.VALUE=9.091 +DRIVER.SPI.VAR.SPI4_CHARLEN2.VALUE=16 +DRIVER.SPI.VAR.SPI1_PORT_BIT8_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI4_CHARLEN3.VALUE=16 +DRIVER.SPI.VAR.SPI1_BASE.VALUE=0xFFF7F400 +DRIVER.SPI.VAR.SPI3_BITERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI3_OVRNINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI3_RXINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE0.VALUE=1000.000 +DRIVER.SPI.VAR.SPI3_PORT_BIT10_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT4_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT2_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT25_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT17_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE1.VALUE=1000.000 +DRIVER.SPI.VAR.SPI5_PORT_BIT2_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE2.VALUE=1000.000 +DRIVER.SPI.VAR.SPI5_PARPOL0.VALUE=0 +DRIVER.SPI.VAR.SPI5_BITERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI4_SHIFTDIR0.VALUE=0 +DRIVER.SPI.VAR.SPI4_OVRNINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT8_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE3.VALUE=1000.000 +DRIVER.SPI.VAR.SPI5_PARPOL1.VALUE=0 +DRIVER.SPI.VAR.SPI4_SHIFTDIR1.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT27_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT19_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT0_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_PARPOL2.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT0_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI4_SHIFTDIR2.VALUE=0 +DRIVER.SPI.VAR.SPI5_PARPOL3.VALUE=0 +DRIVER.SPI.VAR.SPI4_SHIFTDIR3.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT11_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT1_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT8_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT25_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT17_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT11_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI3_TXINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT2_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT9_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_CLKMOD.VALUE=1 +DRIVER.SPI.VAR.SPI5_TIMEOUTENA.VALUE=0 +DRIVER.SPI.VAR.SPI2_DLENERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT11_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT5_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI3_PARITYENA0.VALUE=0 +DRIVER.SPI.VAR.SPI3_PARITYENA1.VALUE=0 +DRIVER.SPI.VAR.SPI1_T2EDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT3_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_BASE_PORT.VALUE=0xFFF7FC18 +DRIVER.SPI.VAR.SPI3_PORT_BIT9_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI3_PORT_BIT9_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI3_PARITYENA2.VALUE=0 +DRIVER.SPI.VAR.SPI3_DLENERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT0_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI3_PARITYENA3.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT1_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI4_WDELAY0.VALUE=0 +DRIVER.SPI.VAR.SPI4_WDELAY1.VALUE=0 +DRIVER.SPI.VAR.SPI4_WDELAY2.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT2_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT4_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI4_WDELAY3.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT3_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT10_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_T2CDELAYACTUAL.VALUE=9.091 +DRIVER.SPI.VAR.SPI4_MASTER.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT2_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI5_PORT_BIT8_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT3_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE0.VALUE=1000.000 +DRIVER.SPI.VAR.SPI2_PORT_BIT0_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE1.VALUE=1000.000 +DRIVER.SPI.VAR.SPI2_BASE.VALUE=0xFFF7F600 +DRIVER.SPI.VAR.SPI4_PORT_BIT10_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT8_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT0_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE2.VALUE=1000.000 +DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE3.VALUE=1000.000 +DRIVER.SPI.VAR.SPI3_PARERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT3_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI2_C2TDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI5_PARERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT1_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT8_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT5_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI1_DEYSNCENA.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT2_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI3_WAITENA0.VALUE=0 +DRIVER.SPI.VAR.SPI3_WAITENA1.VALUE=0 +DRIVER.SPI.VAR.SPI3_WAITENA2.VALUE=0 +DRIVER.SPI.VAR.SPI3_DEYSNCLVL.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT3_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI3_WAITENA3.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT26_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT18_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT11_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT8_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT10_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI3_PORT_BIT10_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI2_TXINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI5_BAUDRATE0.VALUE=1000.000 +DRIVER.SPI.VAR.SPI2_PORT_BIT1_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI2_C2TDELAYACTUAL.VALUE=18.182 +DRIVER.SPI.VAR.SPI5_BAUDRATE1.VALUE=1000.000 +DRIVER.SPI.VAR.SPI5_BAUDRATE2.VALUE=1000.000 +DRIVER.SPI.VAR.SPI4_PORT_BIT11_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI4_PARPOL0.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT9_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_BAUDRATE3.VALUE=1000.000 +DRIVER.SPI.VAR.SPI5_RAM_PARITY_ENA.VALUE=0 +DRIVER.SPI.VAR.SPI4_PARPOL1.VALUE=0 +DRIVER.SPI.VAR.SPI4_PARPOL2.VALUE=0 +DRIVER.SPI.VAR.SPI4_PARPOL3.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT2_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI2_OVRNINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI1_BITERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT3_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_POLARITY0.VALUE=0 +DRIVER.SPI.VAR.SPI4_PHASE0.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT0_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_POLARITY1.VALUE=0 +DRIVER.SPI.VAR.SPI4_T2EDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI4_PHASE1.VALUE=0 +DRIVER.SPI.VAR.SPI5_POLARITY2.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT8_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI4_PHASE2.VALUE=0 +DRIVER.SPI.VAR.SPI3_BITERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI3_OVRNINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI3_RXINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI2_SHIFTDIR0.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT5_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI5_PORT_BIT26_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT18_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_POLARITY3.VALUE=0 +DRIVER.SPI.VAR.SPI4_PHASE3.VALUE=0 +DRIVER.SPI.VAR.SPI2_SHIFTDIR1.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT9_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_T2EDELAYACTUAL.VALUE=0.000 +DRIVER.SPI.VAR.SPI2_SHIFTDIR2.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT8_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE0.VALUE=1000.000 +DRIVER.SPI.VAR.SPI2_SHIFTDIR3.VALUE=0 +DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE1.VALUE=1000.000 +DRIVER.SPI.VAR.SPI4_PORT_BIT10_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT0_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE2.VALUE=1000.000 +DRIVER.SPI.VAR.SPI5_PORT_BIT11_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE3.VALUE=1000.000 +DRIVER.SPI.VAR.SPI5_PORT_BIT9_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI4_C2EDELAYACTUAL.VALUE=0.000 +DRIVER.SPI.VAR.SPI2_PORT_BIT2_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_BASE.VALUE=0xFFF7F800 +DRIVER.SPI.VAR.SPI3_PORT_BIT1_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI3_PORT_BIT8_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI4_PRESCALE0.VALUE=109 +DRIVER.SPI.VAR.SPI3_PORT_BIT8_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT4_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI3_WDELAY0.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT25_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT17_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI4_PRESCALE1.VALUE=109 +DRIVER.SPI.VAR.SPI3_C2EDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI3_WDELAY1.VALUE=0 +DRIVER.SPI.VAR.SPI4_PRESCALE2.VALUE=109 +DRIVER.SPI.VAR.SPI3_WDELAY2.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT3_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_PRESCALE3.VALUE=109 +DRIVER.SPI.VAR.SPI4_TIMEOUTENA.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI3_WDELAY3.VALUE=0 +DRIVER.SPI.VAR.SPI1_DLENERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT10_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_ENABLEHIGHZ.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT1_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI2_PARITYENA0.VALUE=0 +DRIVER.SPI.VAR.SPI5_C2TDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI2_PARITYENA1.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT8_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI5_TIMEOUTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI3_BASE_PORT.VALUE=0xFFF7F818 +DRIVER.SPI.VAR.SPI2_PORT_BIT10_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI2_PARITYENA2.VALUE=0 +DRIVER.SPI.VAR.SPI2_DLENERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI2_MASTER.VALUE=1 +DRIVER.SPI.VAR.SPI2_PARITYENA3.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT27_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT19_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT0_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT11_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI1_RAM_PARITY_ENA.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT3_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_T2CDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI5_TXINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT9_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI3_BASE_RAM.VALUE=0xFF0C0000 +DRIVER.SPI.VAR.SPI3_CHARLEN0.VALUE=16 +DRIVER.SPI.VAR.SPI3_CHARLEN1.VALUE=16 +DRIVER.SPI.VAR.SPI1_PARERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT10_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT11_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_CHARLEN2.VALUE=16 +DRIVER.SPI.VAR.SPI2_PORT_BIT2_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI3_CHARLEN3.VALUE=16 +DRIVER.SPI.VAR.SPI5_PORT_BIT9_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI4_PORT_BIT0_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI3_PARERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI2_RXINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT9_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI3_PARPOL0.VALUE=0 +DRIVER.SPI.VAR.SPI1_DEYSNCLVL.VALUE=0 +DRIVER.SPI.VAR.SPI3_PARPOL1.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT8_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT10_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI3_PARPOL2.VALUE=0 +DRIVER.SPI.VAR.SPI2_T2CDELAYACTUAL.VALUE=9.091 +DRIVER.SPI.VAR.SPI4_BASE.VALUE=0xFFF7FA00 +DRIVER.SPI.VAR.SPI3_PARPOL3.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT2_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI2_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT0_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI4_CLKMOD.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT5_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI3_BAUDRATE0.VALUE=1000.000 +DRIVER.SPI.VAR.SPI2_PHASE0.VALUE=0 +DRIVER.SPI.VAR.SPI3_BAUDRATE1.VALUE=1000.000 +DRIVER.SPI.VAR.SPI2_PHASE1.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT10_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT8_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT0_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI3_BAUDRATE2.VALUE=1000.000 +DRIVER.SPI.VAR.SPI2_PHASE2.VALUE=0 +DRIVER.SPI.VAR.SPI2_TXINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI3_BAUDRATE3.VALUE=1000.000 +DRIVER.SPI.VAR.SPI2_PORT_BIT10_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI2_PHASE3.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT3_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT0_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT25_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI5_PORT_BIT17_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI2_PORT_BIT11_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI1_OVRNINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT1_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI3_POLARITY0.VALUE=0 +DRIVER.SPI.VAR.SPI3_POLARITY1.VALUE=0 +DRIVER.SPI.VAR.SPI3_POLARITY2.VALUE=0 +DRIVER.SPI.VAR.SPI2_OVRNINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT0_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI1_BITERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI4_DEYSNCENA.VALUE=0 +DRIVER.SPI.VAR.SPI3_POLARITY3.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT8_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT11_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI2_WDELAY0.VALUE=0 +DRIVER.SPI.VAR.SPI2_WDELAY1.VALUE=0 +DRIVER.SPI.VAR.SPI2_WDELAY2.VALUE=0 +DRIVER.SPI.VAR.SPI2_WDELAY3.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT10_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI3_C2TDELAYACTUAL.VALUE=18.182 +DRIVER.SPI.VAR.SPI5_PORT_BIT11_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT9_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT11_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI2_PRESCALE0.VALUE=109 +DRIVER.SPI.VAR.SPI2_PRESCALE1.VALUE=109 +DRIVER.SPI.VAR.SPI2_PORT_BIT8_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI2_PRESCALE2.VALUE=109 +DRIVER.SPI.VAR.SPI3_TIMEOUTENA.VALUE=0 +DRIVER.SPI.VAR.SPI2_PRESCALE3.VALUE=109 +DRIVER.SPI.VAR.SPI1_PORT_BIT8_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT0_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_PARITYENA0.VALUE=0 +DRIVER.SPI.VAR.SPI1_C2TDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI1_PARITYENA1.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT8_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI4_TIMEOUTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT1_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI1_PARITYENA2.VALUE=0 +DRIVER.SPI.VAR.SPI1_DLENERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI1_BASE_PORT.VALUE=0xFFF7F418 +DRIVER.SPI.VAR.SPI5_RXINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI4_BITERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI1_PARITYENA3.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT9_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI4_T2EDELAYACTUAL.VALUE=0.000 +DRIVER.SPI.VAR.SPI2_PORT_BIT8_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI2_WAITENA0.VALUE=0 +DRIVER.SPI.VAR.SPI5_BASE.VALUE=0xFFF7FC00 +DRIVER.SPI.VAR.SPI2_WAITENA1.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT10_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_SHIFTDIR0.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT3_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI2_WAITENA2.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT10_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI5_SHIFTDIR1.VALUE=0 +DRIVER.SPI.VAR.SPI2_WAITENA3.VALUE=0 +DRIVER.SPI.VAR.SPI5_C2EDELAYACTUAL.VALUE=0.000 +DRIVER.SPI.VAR.SPI5_SHIFTDIR2.VALUE=0 +DRIVER.SPI.VAR.SPI5_SHIFTDIR3.VALUE=0 +DRIVER.SPI.VAR.SPI1_TXINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT8_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT1_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT26_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI5_PORT_BIT18_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI5_TXINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT9_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI2_PARPOL0.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT0_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT9_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI2_PARPOL1.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT10_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT2_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI2_PARPOL2.VALUE=0 +DRIVER.SPI.VAR.SPI2_PARPOL3.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT2_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI1_PARERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT2_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI2_CLKMOD.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT10_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI3_T2EDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT11_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI2_RXINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT11_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI2_RAM_PARITY_ENA.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT11_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT0_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT8_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT9_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_BAUDRATE0.VALUE=1000.000 +DRIVER.SPI.VAR.SPI1_BAUDRATE1.VALUE=1000.000 +DRIVER.SPI.VAR.SPI1_PORT_BIT8_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI1_PORT_BIT1_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI1_BAUDRATE2.VALUE=1000.000 +DRIVER.SPI.VAR.SPI3_PORT_BIT4_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT25_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT17_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI1_BAUDRATE3.VALUE=1000.000 +DRIVER.SPI.VAR.SPI5_PORT_BIT11_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI1_WDELAY0.VALUE=0 +DRIVER.SPI.VAR.SPI2_C2EDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI1_WDELAY1.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT9_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI5_MASTER.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT10_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT3_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI1_WDELAY2.VALUE=0 +DRIVER.SPI.VAR.SPI4_PARERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT10_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI1_WDELAY3.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT9_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT8_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI1_C2EDELAYACTUAL.VALUE=0.000 +DRIVER.SPI.VAR.SPI1_POLARITY0.VALUE=0 +DRIVER.SPI.VAR.SPI4_C2TDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI1_POLARITY1.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT4_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI1_PORT_BIT25_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI1_PORT_BIT17_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI1_POLARITY2.VALUE=0 +DRIVER.SPI.VAR.SPI1_OVRNINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI5_DLENERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI2_DEYSNCENA.VALUE=0 +DRIVER.SPI.VAR.SPI1_POLARITY3.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT10_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_WAITENA0.VALUE=0 +DRIVER.SPI.VAR.SPI5_ENABLEHIGHZ.VALUE=0 +DRIVER.SPI.VAR.SPI3_T2CDELAYACTUAL.VALUE=9.091 +DRIVER.SPI.VAR.SPI1_PORT_BIT1_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI5_WAITENA1.VALUE=0 +DRIVER.SPI.VAR.SPI5_WAITENA2.VALUE=0 +DRIVER.SPI.VAR.SPI4_DEYSNCLVL.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT9_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_WAITENA3.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE0.VALUE=1000.000 +DRIVER.SPI.VAR.SPI1_PORT_BIT10_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT2_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE1.VALUE=1000.000 +DRIVER.SPI.VAR.SPI2_T2CDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT27_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI5_PORT_BIT19_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI5_PORT_BIT0_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE2.VALUE=1000.000 +DRIVER.SPI.VAR.SPI1_PORT_BIT2_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE3.VALUE=1000.000 +DRIVER.SPI.VAR.SPI4_TXINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT3_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT0_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT0_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI2_BASE_RAM.VALUE=0xFF0E0000 +DRIVER.SPI.VAR.SPI2_CHARLEN0.VALUE=16 +DRIVER.SPI.VAR.SPI1_PORT_BIT11_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT4_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT11_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI2_CHARLEN1.VALUE=16 +DRIVER.SPI.VAR.SPI2_TIMEOUTENA.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT9_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI2_CHARLEN2.VALUE=16 +DRIVER.SPI.VAR.SPI2_ENABLEHIGHZ.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT11_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI2_CHARLEN3.VALUE=16 +DRIVER.SPI.VAR.SPI3_PORT_BIT0_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI3_TIMEOUTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI2_BITERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI1_RXINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT11_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT2_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT10_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI5_RXINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI4_BITERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI3_SHIFTDIR0.VALUE=0 +DRIVER.SPI.VAR.SPI1_PARPOL0.VALUE=0 +DRIVER.SPI.VAR.SPI3_SHIFTDIR1.VALUE=0 +DRIVER.SPI.VAR.SPI1_PARPOL1.VALUE=0 +DRIVER.SPI.VAR.SPI5_PHASE0.VALUE=0 +DRIVER.SPI.VAR.SPI4_C2TDELAYACTUAL.VALUE=18.182 +DRIVER.SPI.VAR.SPI3_SHIFTDIR2.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT8_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT11_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI1_PARPOL2.VALUE=0 +DRIVER.SPI.VAR.SPI5_PHASE1.VALUE=0 +DRIVER.SPI.VAR.SPI3_SHIFTDIR3.VALUE=0 +DRIVER.SPI.VAR.SPI1_PARPOL3.VALUE=0 +DRIVER.SPI.VAR.SPI5_PHASE2.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT9_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI1_PORT_BIT3_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT27_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT19_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_PHASE3.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT1_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT8_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT5_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI1_TXINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI5_PRESCALE0.VALUE=109 +DRIVER.SPI.VAR.SPI1_PORT_BIT10_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_C2EDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI5_PRESCALE1.VALUE=109 +DRIVER.SPI.VAR.SPI5_PRESCALE2.VALUE=109 +DRIVER.SPI.VAR.SPI3_PORT_BIT5_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI3_PORT_BIT1_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI5_PRESCALE3.VALUE=109 +DRIVER.SPI.VAR.SPI3_PORT_BIT9_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_T2EDELAYACTUAL.VALUE=0.000 +DRIVER.SPI.VAR.SPI3_PORT_BIT8_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE0.VALUE=1000.000 +DRIVER.SPI.VAR.SPI1_PORT_BIT3_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE1.VALUE=1000.000 +DRIVER.SPI.VAR.SPI4_BASE_PORT.VALUE=0xFFF7FA18 +DRIVER.SPI.VAR.SPI2_PORT_BIT10_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE2.VALUE=1000.000 +DRIVER.SPI.VAR.SPI1_PORT_BIT0_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI5_OVRNINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT2_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE3.VALUE=1000.000 +DRIVER.SPI.VAR.SPI2_PORT_BIT9_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT3_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI5_PORT_BIT1_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI3_MASTER.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT4_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT1_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT2_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_T2CDELAY.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT9_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT0_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI1_PORT_BIT11_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI5_BASE_RAM.VALUE=0xFF0A0000 +DRIVER.SPI.VAR.SPI5_CHARLEN0.VALUE=16 +DRIVER.SPI.VAR.SPI3_PORT_BIT10_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI3_PORT_BIT2_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI5_CHARLEN1.VALUE=16 +DRIVER.SPI.VAR.SPI2_PARERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT4_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI5_CHARLEN2.VALUE=16 +DRIVER.SPI.VAR.SPI1_PORT_BIT4_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI5_CHARLEN3.VALUE=16 +DRIVER.SPI.VAR.SPI5_PORT_BIT25_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT17_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI5_PORT_BIT11_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI4_PARERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI2_PORT_BIT11_DIR.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI4_DLENERRENA.VALUE=0 +DRIVER.SPI.VAR.SPI4_RXINTENA.VALUE=0 +DRIVER.SPI.VAR.SPI3_RAM_PARITY_ENA.VALUE=0 +DRIVER.SPI.VAR.SPI5_PARITYENA0.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT0_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI1_WAITENA0.VALUE=0 +DRIVER.SPI.VAR.SPI5_PARITYENA1.VALUE=0 +DRIVER.SPI.VAR.SPI1_WAITENA1.VALUE=0 +DRIVER.SPI.VAR.SPI5_PARITYENA2.VALUE=0 +DRIVER.SPI.VAR.SPI5_DLENERRLVL.VALUE=0 +DRIVER.SPI.VAR.SPI4_PORT_BIT8_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI2_DEYSNCLVL.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT5_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI1_WAITENA2.VALUE=0 +DRIVER.SPI.VAR.SPI5_PARITYENA3.VALUE=0 +DRIVER.SPI.VAR.SPI1_WAITENA3.VALUE=0 +DRIVER.SPI.VAR.SPI1_PORT_BIT3_PSL.VALUE=1 +DRIVER.SPI.VAR.SPI3_PORT_BIT1_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT8_PULL.VALUE=2 +DRIVER.SPI.VAR.SPI2_PORT_BIT9_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI4_BAUDRATE0.VALUE=1000.000 +DRIVER.SPI.VAR.SPI1_T2EDELAYACTUAL.VALUE=0.000 +DRIVER.SPI.VAR.SPI4_BAUDRATE1.VALUE=1000.000 +DRIVER.SPI.VAR.SPI4_BAUDRATE2.VALUE=1000.000 +DRIVER.SPI.VAR.SPI4_TXINTLVL.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT3_DIR.VALUE=1 +DRIVER.SPI.VAR.SPI2_PORT_BIT10_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_BAUDRATE3.VALUE=1000.000 +DRIVER.SPI.VAR.SPI2_PORT_BIT2_PULDIS.VALUE=0 +DRIVER.SPI.VAR.SPI1_TIMEOUTENA.VALUE=0 +DRIVER.SPI.VAR.SPI5_CLKMOD.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT8_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_PORT_BIT9_DOUT.VALUE=0 +DRIVER.SPI.VAR.SPI3_PHASE0.VALUE=0 +DRIVER.SPI.VAR.SPI2_C2EDELAYACTUAL.VALUE=0.000 +DRIVER.SPI.VAR.SPI1_PORT_BIT5_PDR.VALUE=0 +DRIVER.SPI.VAR.SPI3_PHASE1.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_21_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_4_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_61_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_53_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_45_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_37_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_29_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_RAM_PARITY_ENA.VALUE=0x00000005 +DRIVER.CAN.VAR.CAN_1_MESSAGE_59_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_48_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_SYNC.VALUE=1 +DRIVER.CAN.VAR.CAN_2_MESSAGE_4_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_4_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_64_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_56_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_48_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_31_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_23_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_15_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_BAUDRATE.VALUE=500 +DRIVER.CAN.VAR.CAN_2_PORT_RX_PDR.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_63_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_55_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_47_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_39_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_30_ID.VALUE=30 +DRIVER.CAN.VAR.CAN_2_MESSAGE_22_ID.VALUE=22 +DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ID.VALUE=14 +DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ID.VALUE=9 +DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_RAMBASE.VALUE=0xFF1C0000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_30_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_RATE.VALUE=500.000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_51_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_43_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_35_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_27_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_19_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_51_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_43_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_35_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_27_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_19_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_64_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_56_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_48_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_48_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_60_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_58_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_52_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_44_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_36_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_28_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_PIN_MODE.VALUE=1 +DRIVER.CAN.VAR.CAN_2_PHASE_SEG.VALUE=3 +DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_7_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_31_ID.VALUE=31 +DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_23_ID.VALUE=23 +DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_15_ID.VALUE=15 +DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_30_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_30_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_22_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_31_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_23_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_15_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_10_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_5_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_PORT_TX_PULDIS.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_30_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_22_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_57_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_BASE.VALUE=0xFFF7DC00 +DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_10_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_5_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_8_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_3_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_64_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_56_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_48_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_40_ID.VALUE=40 +DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ID.VALUE=32 +DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ID.VALUE=24 +DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ID.VALUE=16 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_57_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_49_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_11_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_57_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_49_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_60_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_52_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_44_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_36_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_28_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_11_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_6_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_57_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_57_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_49_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_PORT_TX_DIN.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_51_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_43_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_35_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_27_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_19_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_1_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_31_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_23_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_15_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_8_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_PORT_RX_PSL.VALUE=1 +DRIVER.CAN.VAR.CAN_2_MESSAGE_41_ID.VALUE=41 +DRIVER.CAN.VAR.CAN_2_MESSAGE_33_ID.VALUE=33 +DRIVER.CAN.VAR.CAN_2_MESSAGE_25_ID.VALUE=25 +DRIVER.CAN.VAR.CAN_2_MESSAGE_17_ID.VALUE=17 +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_BRP_FREQ.VALUE=5.500 +DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_PORT_TX_DIR.VALUE=1 +DRIVER.CAN.VAR.CAN_1_MESSAGE_31_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_23_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_15_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_5_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_PROP_SEG.VALUE=4 +DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ID.VALUE=1 +DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_1_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_58_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_11_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_11_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_6_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_6_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_57_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_49_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_NOMINAL_BIT_RATE.VALUE=500.000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_64_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_56_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_48_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_57_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_50_ID.VALUE=50 +DRIVER.CAN.VAR.CAN_2_MESSAGE_49_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_42_ID.VALUE=42 +DRIVER.CAN.VAR.CAN_2_MESSAGE_34_ID.VALUE=34 +DRIVER.CAN.VAR.CAN_2_MESSAGE_26_ID.VALUE=26 +DRIVER.CAN.VAR.CAN_2_MESSAGE_18_ID.VALUE=18 +DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_PROPAGATION_DELAY.VALUE=700 +DRIVER.CAN.VAR.CAN_1_MESSAGE_40_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_32_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_24_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_16_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_58_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_50_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_42_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_34_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_26_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_18_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_60_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_52_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_44_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_36_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_28_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_61_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_53_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_45_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_37_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_29_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ID.VALUE=2 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_TIME.VALUE=11 +DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_7_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_58_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_58_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_SAMPLE_POINT.VALUE=72.727 +DRIVER.CAN.VAR.CAN_3_MESSAGE_61_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_53_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_45_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_37_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_29_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_20_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_12_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_40_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_9_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ID.VALUE=51 +DRIVER.CAN.VAR.CAN_2_MESSAGE_43_ID.VALUE=43 +DRIVER.CAN.VAR.CAN_2_MESSAGE_35_ID.VALUE=35 +DRIVER.CAN.VAR.CAN_2_MESSAGE_27_ID.VALUE=27 +DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_19_ID.VALUE=19 +DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_40_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_40_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_32_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_32_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_24_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_24_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_16_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_16_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_40_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_32_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_24_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_20_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_16_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_12_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_7_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_3_ID.VALUE=3 +DRIVER.CAN.VAR.CAN_2_PORT_RX_DOUT.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_2_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_59_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_BASE.VALUE=0xFFF7DE00 +DRIVER.CAN.VAR.CAN_1_RAMBASE.VALUE=0xFF1E0000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_20_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_12_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_7_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_7_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_PORT_RX_PULL.VALUE=2 +DRIVER.CAN.VAR.CAN_3_MESSAGE_9_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_IDENTIFIER_MODE.VALUE=0x40000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_41_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_33_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_25_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_17_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_60_ID.VALUE=60 +DRIVER.CAN.VAR.CAN_2_MESSAGE_58_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_52_ID.VALUE=52 +DRIVER.CAN.VAR.CAN_2_MESSAGE_44_ID.VALUE=44 +DRIVER.CAN.VAR.CAN_2_MESSAGE_36_ID.VALUE=36 +DRIVER.CAN.VAR.CAN_2_MESSAGE_28_ID.VALUE=28 +DRIVER.CAN.VAR.CAN_1_MESSAGE_41_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_33_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_25_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_17_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_59_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_20_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_12_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_11_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_6_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_62_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_54_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_46_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_38_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_4_ID.VALUE=4 +DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_21_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_13_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_8_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_59_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_59_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_AUTO_RETRANSMISSION.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_PORT_TX_FUN.VALUE=1 +DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_2_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_41_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_61_ID.VALUE=61 +DRIVER.CAN.VAR.CAN_2_MESSAGE_53_ID.VALUE=53 +DRIVER.CAN.VAR.CAN_2_MESSAGE_45_ID.VALUE=45 +DRIVER.CAN.VAR.CAN_2_MESSAGE_37_ID.VALUE=37 +DRIVER.CAN.VAR.CAN_2_MESSAGE_29_ID.VALUE=29 +DRIVER.CAN.VAR.CAN_1_MESSAGE_20_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_PORT_TX_PULL.VALUE=2 +DRIVER.CAN.VAR.CAN_1_MESSAGE_41_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_41_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_33_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_33_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_25_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_25_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_17_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_17_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_62_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_54_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_46_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_38_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_21_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_RATE.VALUE=500.000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_5_ID.VALUE=5 +DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_3_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_BRPE_FREQ.VALUE=5.500 +DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_21_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_21_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_13_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_13_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_8_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_8_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_PORT_RX_DIN.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_8_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_58_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_RAM_PARITY_ENA.VALUE=0x00000005 +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_PORT_TX_PDR.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_62_ID.VALUE=62 +DRIVER.CAN.VAR.CAN_2_MESSAGE_59_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_54_ID.VALUE=54 +DRIVER.CAN.VAR.CAN_2_MESSAGE_46_ID.VALUE=46 +DRIVER.CAN.VAR.CAN_2_MESSAGE_38_ID.VALUE=38 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_NOMINAL_BIT_TIME.VALUE=11 +DRIVER.CAN.VAR.CAN_1_MESSAGE_50_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_42_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_34_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_26_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_18_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_PORT_RX_DIR.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_61_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_59_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_53_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_45_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_37_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_29_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_TQ.VALUE=181.818 +DRIVER.CAN.VAR.CAN_3_MESSAGE_63_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_55_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_47_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_39_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_6_ID.VALUE=6 +DRIVER.CAN.VAR.CAN_2_MESSAGE_30_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_22_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_14_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_9_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_62_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_54_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_46_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_38_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_61_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_53_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_45_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_37_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_29_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_50_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_42_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_34_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_26_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_18_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_63_ID.VALUE=63 +DRIVER.CAN.VAR.CAN_2_MESSAGE_55_ID.VALUE=55 +DRIVER.CAN.VAR.CAN_2_MESSAGE_47_ID.VALUE=47 +DRIVER.CAN.VAR.CAN_2_MESSAGE_39_ID.VALUE=39 +DRIVER.CAN.VAR.CAN_1_MESSAGE_21_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_50_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_50_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_42_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_42_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_34_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_34_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_26_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_26_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_18_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_18_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_31_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_23_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_15_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_41_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_33_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_30_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_25_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_22_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_17_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_TQ.VALUE=181.818 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_BRPE.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ID.VALUE=7 +DRIVER.CAN.VAR.CAN_2_MESSAGE_4_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_BASE.VALUE=0xFFF7E000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_30_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_30_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_22_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_22_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_14_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_14_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_9_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_9_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_10_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_1_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_PORT_TX_PULDIS.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_20_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_64_ID.VALUE=64 +DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_56_ID.VALUE=56 +DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_48_ID.VALUE=48 +DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_PORT_TX_DOUT.VALUE=1 +DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_43_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_35_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_27_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_19_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_10_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_21_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_13_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_TQ.VALUE=181.818 +DRIVER.CAN.VAR.CAN_1_MESSAGE_60_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_52_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_44_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_36_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_28_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_64_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_56_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_48_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_8_ID.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_ID.VALUE=10 +DRIVER.CAN.VAR.CAN_2_MESSAGE_31_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_23_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_15_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_30_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_22_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_14_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_9_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_3_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_51_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_43_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_35_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_27_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_19_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_PORT_TX_PSL.VALUE=1 +DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ID.VALUE=57 +DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ID.VALUE=49 +DRIVER.CAN.VAR.CAN_1_MESSAGE_30_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_22_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT_REFERENCE.VALUE=75 +DRIVER.CAN.VAR.CAN_1_PROPAGATION_DELAY.VALUE=700 +DRIVER.CAN.VAR.CAN_1_MESSAGE_51_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_43_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_43_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_35_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_35_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_27_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_27_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_19_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_19_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_1_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_31_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_23_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_15_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_9_ID.VALUE=9 +DRIVER.CAN.VAR.CAN_2_MESSAGE_10_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_5_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ID.VALUE=11 +DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_TIME.VALUE=11 +DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_31_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_31_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_23_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_23_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_15_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_15_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_PORT_RX_FUN.VALUE=1 +DRIVER.CAN.VAR.CAN_3_MESSAGE_57_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_49_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_11_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_ENABLE.VALUE=1 +DRIVER.CAN.VAR.CAN_2_MESSAGE_59_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_PIN_MODE.VALUE=1 +DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ID.VALUE=58 +DRIVER.CAN.VAR.CAN_2_SAMPLE_POINT_REFERENCE.VALUE=75 +DRIVER.CAN.VAR.CAN_1_MESSAGE_60_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_52_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_44_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_11_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_PORT_RX_PULDIS.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_62_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_54_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_46_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_38_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_21_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_57_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_49_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ID.VALUE=20 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ID.VALUE=12 +DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_16_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_63_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_55_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_47_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_39_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_2_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_60_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_52_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_44_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_36_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_28_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_59_ID.VALUE=59 +DRIVER.CAN.VAR.CAN_1_PORT_RX_PDR.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_31_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_23_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_15_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT_REFERENCE.VALUE=75 +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_60_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_60_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_52_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_52_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_44_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_44_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_36_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_28_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_SHIFT.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_64_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_56_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_50_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_48_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_42_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_40_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_34_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_26_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_18_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_BRPE.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MASK.VALUE=0x1FFFFFFF +DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_11_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_6_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ID.VALUE=21 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ID.VALUE=13 +DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_40_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_32_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_24_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_16_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_16_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_50_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_42_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_34_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_26_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_20_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_18_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_12_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_21_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_61_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_53_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_BRPE_FREQ.VALUE=5.500 +DRIVER.CAN.VAR.CAN_1_BRP_FREQ.VALUE=5.500 +DRIVER.CAN.VAR.CAN_3_MESSAGE_20_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_12_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_30_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_22_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_14_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_4_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_58_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ID.VALUE=30 +DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ID.VALUE=22 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ID.VALUE=14 +DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_17_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_4_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_63_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_61_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_55_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_53_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_47_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_45_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_39_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_37_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_29_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_40_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_32_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_24_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_16_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_21_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_13_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_61_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_61_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_53_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_53_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_45_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_37_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_29_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_2_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_BAUDRATE.VALUE=500 +DRIVER.CAN.VAR.CAN_2_MESSAGE_41_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_41_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_33_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_33_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_25_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_25_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_17_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_17_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_20_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_12_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_7_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_31_ID.VALUE=31 +DRIVER.CAN.VAR.CAN_1_MESSAGE_23_ID.VALUE=23 +DRIVER.CAN.VAR.CAN_1_MESSAGE_15_ID.VALUE=15 +DRIVER.CAN.VAR.CAN_3_MESSAGE_1_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_41_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_33_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_25_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_17_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_17_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_PORT_TX_DIN.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_21_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_13_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_11_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_PORT_RX_PSL.VALUE=1 +DRIVER.CAN.VAR.CAN_1_MESSAGE_62_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_54_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_46_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_38_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_21_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_21_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_13_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_13_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT.VALUE=72.727 +DRIVER.CAN.VAR.CAN_1_PORT_TX_DIR.VALUE=1 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_RAM_PARITY_ENA.VALUE=0x00000005 +DRIVER.CAN.VAR.CAN_3_PHASE_SEG.VALUE=3 +DRIVER.CAN.VAR.CAN_1_MESSAGE_63_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_55_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_47_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_39_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_59_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_40_ID.VALUE=40 +DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ID.VALUE=32 +DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ID.VALUE=24 +DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ID.VALUE=16 +DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_42_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_34_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_26_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_18_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_1_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_1_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_64_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_56_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_48_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_62_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_54_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_46_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_40_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_38_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_32_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_24_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_16_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_PORT_RX_DOUT.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_41_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_33_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_25_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_17_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_30_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_22_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_14_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_PORT_RX_PULL.VALUE=2 +DRIVER.CAN.VAR.CAN_1_MESSAGE_62_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_62_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_54_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_54_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_46_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_46_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_38_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_38_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_BRPE.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_51_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_50_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_43_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_42_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_35_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_34_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_27_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_26_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_19_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_18_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_10_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_5_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MASK.VALUE=0x1FFFFFFF +DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_21_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_13_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_8_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_41_ID.VALUE=41 +DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ID.VALUE=33 +DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ID.VALUE=25 +DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ID.VALUE=17 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_50_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_42_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_42_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_34_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_34_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_26_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_26_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_18_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_18_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_59_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_30_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_22_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ID.VALUE=1 +DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_55_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_47_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_39_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_30_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_30_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_22_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_22_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_14_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_14_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_PORT_TX_PULDIS.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_61_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_53_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_45_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_37_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_31_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_29_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_23_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_15_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_50_ID.VALUE=50 +DRIVER.CAN.VAR.CAN_1_MESSAGE_42_ID.VALUE=42 +DRIVER.CAN.VAR.CAN_1_MESSAGE_34_ID.VALUE=34 +DRIVER.CAN.VAR.CAN_1_MESSAGE_26_ID.VALUE=26 +DRIVER.CAN.VAR.CAN_1_MESSAGE_18_ID.VALUE=18 +DRIVER.CAN.VAR.CAN_2_MESSAGE_51_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_43_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_35_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_27_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_2_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_BRP.VALUE=19 +DRIVER.CAN.VAR.CAN_3_MESSAGE_7_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_PROP_SEG.VALUE=4 +DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_10_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_5_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_63_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_55_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_47_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_39_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_10_ID.VALUE=10 +DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_50_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_42_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_34_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_26_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_18_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ID.VALUE=2 +DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TR.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_PORT_RX_DIN.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_63_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_55_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_55_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_47_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_47_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_39_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_39_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_3_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_43_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_35_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_27_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_19_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_58_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_30_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_22_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_14_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_9_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_51_ID.VALUE=51 +DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_43_ID.VALUE=43 +DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_35_ID.VALUE=35 +DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_27_ID.VALUE=27 +DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_19_ID.VALUE=19 +DRIVER.CAN.VAR.CAN_3_MESSAGE_3_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON_TIME.VALUE=0 +DRIVER.CAN.VAR.CAN_3_PORT_RX_DIR.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_51_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_51_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_43_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_43_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_35_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_35_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_27_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_27_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_19_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_PORT_TX_FUN.VALUE=1 +DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_31_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_23_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_15_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_60_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_52_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_44_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_36_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_28_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_11_ID.VALUE=11 +DRIVER.CAN.VAR.CAN_3_MESSAGE_10_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ID.VALUE=3 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_56_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_48_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_31_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_23_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_15_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_30_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_22_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_14_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_3_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_64_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_56_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_48_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_60_ID.VALUE=60 +DRIVER.CAN.VAR.CAN_1_MESSAGE_52_ID.VALUE=52 +DRIVER.CAN.VAR.CAN_1_MESSAGE_44_ID.VALUE=44 +DRIVER.CAN.VAR.CAN_1_MESSAGE_36_ID.VALUE=36 +DRIVER.CAN.VAR.CAN_1_MESSAGE_28_ID.VALUE=28 +DRIVER.CAN.VAR.CAN_2_MESSAGE_60_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_52_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_44_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_36_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_28_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_3_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_3_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_BRP.VALUE=19 +DRIVER.CAN.VAR.CAN_3_MESSAGE_57_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_49_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_PORT_RX_PULDIS.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_64_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_56_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_48_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_20_ID.VALUE=20 +DRIVER.CAN.VAR.CAN_3_MESSAGE_12_ID.VALUE=12 +DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_PORT_TX_PDR.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_51_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_43_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_35_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_27_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_19_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_ID.VALUE=4 +DRIVER.CAN.VAR.CAN_3_MESSAGE_40_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_32_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 +DRIVER.CAN.VAR.CAN_2_SHIFT.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_64_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_56_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_56_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_48_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_48_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MASK.VALUE=0x1FFFFFFF +DRIVER.CAN.VAR.CAN_2_MESSAGE_60_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_60_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_52_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_52_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_44_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_44_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_36_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_36_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_28_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_28_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_51_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_43_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_35_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_27_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_19_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_PORT_TX_DOUT.VALUE=1 +DRIVER.CAN.VAR.CAN_2_MESSAGE_31_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_23_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_15_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_61_ID.VALUE=61 +DRIVER.CAN.VAR.CAN_1_MESSAGE_53_ID.VALUE=53 +DRIVER.CAN.VAR.CAN_1_MESSAGE_45_ID.VALUE=45 +DRIVER.CAN.VAR.CAN_1_MESSAGE_37_ID.VALUE=37 +DRIVER.CAN.VAR.CAN_1_MESSAGE_29_ID.VALUE=29 +DRIVER.CAN.VAR.CAN_3_MESSAGE_4_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_60_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_60_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_52_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_52_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_44_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_44_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_36_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_36_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_28_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_28_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_PORT_TX_PULL.VALUE=2 +DRIVER.CAN.VAR.CAN_3_MESSAGE_40_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_32_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_24_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_16_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_21_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_13_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_8_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_31_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_23_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_15_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_21_ID.VALUE=21 +DRIVER.CAN.VAR.CAN_3_MESSAGE_13_ID.VALUE=13 +DRIVER.CAN.VAR.CAN_3_MESSAGE_11_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ID.VALUE=5 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_57_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_49_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_40_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_40_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_32_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_32_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_24_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_16_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_40_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_32_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_24_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_16_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_4_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_62_ID.VALUE=62 +DRIVER.CAN.VAR.CAN_1_MESSAGE_54_ID.VALUE=54 +DRIVER.CAN.VAR.CAN_1_MESSAGE_46_ID.VALUE=46 +DRIVER.CAN.VAR.CAN_1_MESSAGE_38_ID.VALUE=38 +DRIVER.CAN.VAR.CAN_2_MESSAGE_61_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_53_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_45_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_37_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_29_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_4_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_4_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_BRP.VALUE=19 +DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_64_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_56_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_48_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_IDENTIFIER_MODE.VALUE=0x40000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_11_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_6_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_PHASE_SEG.VALUE=3 +DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ID.VALUE=30 +DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ID.VALUE=22 +DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ID.VALUE=14 +DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_60_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_52_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_44_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_36_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_28_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ID.VALUE=6 +DRIVER.CAN.VAR.CAN_3_MESSAGE_41_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_33_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_25_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_17_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON_TIME.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_9_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_PORT_RX_FUN.VALUE=1 +DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_57_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_57_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_49_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_49_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_4_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_61_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_53_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_45_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_37_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_29_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_20_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_40_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_32_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_24_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_16_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_63_ID.VALUE=63 +DRIVER.CAN.VAR.CAN_1_MESSAGE_55_ID.VALUE=55 +DRIVER.CAN.VAR.CAN_1_MESSAGE_47_ID.VALUE=47 +DRIVER.CAN.VAR.CAN_1_MESSAGE_39_ID.VALUE=39 +DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_5_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_61_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_61_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_53_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_53_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_45_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_45_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_37_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_37_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_29_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_29_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_17_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_1_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_31_ID.VALUE=31 +DRIVER.CAN.VAR.CAN_3_MESSAGE_23_ID.VALUE=23 +DRIVER.CAN.VAR.CAN_3_MESSAGE_20_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_15_ID.VALUE=15 +DRIVER.CAN.VAR.CAN_3_MESSAGE_12_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_PORT_TX_PSL.VALUE=1 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ID.VALUE=7 +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_58_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_41_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_41_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_33_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_33_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_25_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_25_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_17_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_17_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_9_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_9_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_5_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_63_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_55_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_47_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_39_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_57_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_49_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_PORT_RX_PDR.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_64_ID.VALUE=64 +DRIVER.CAN.VAR.CAN_1_MESSAGE_56_ID.VALUE=56 +DRIVER.CAN.VAR.CAN_1_MESSAGE_48_ID.VALUE=48 +DRIVER.CAN.VAR.CAN_2_MESSAGE_62_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_54_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_46_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_38_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_5_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_5_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_58_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_41_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_33_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_25_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_17_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_9_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_40_ID.VALUE=40 +DRIVER.CAN.VAR.CAN_3_MESSAGE_32_ID.VALUE=32 +DRIVER.CAN.VAR.CAN_3_MESSAGE_24_ID.VALUE=24 +DRIVER.CAN.VAR.CAN_3_MESSAGE_16_ID.VALUE=16 +DRIVER.CAN.VAR.CAN_1_MESSAGE_61_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_53_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_45_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_37_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_29_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_ID.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_42_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_34_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_26_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_58_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_58_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_AUTO_RETRANSMISSION.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_3_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_62_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_61_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_54_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_53_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_46_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_45_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_38_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_37_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_29_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_41_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_33_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_25_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_17_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ID.VALUE=57 +DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ID.VALUE=49 +DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_62_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_62_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_54_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_54_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_46_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_46_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_38_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_38_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_26_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_18_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_62_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_54_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_46_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_40_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_38_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_32_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_24_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_16_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ID.VALUE=41 +DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ID.VALUE=33 +DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ID.VALUE=25 +DRIVER.CAN.VAR.CAN_3_MESSAGE_21_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_17_ID.VALUE=17 +DRIVER.CAN.VAR.CAN_3_MESSAGE_13_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ID.VALUE=9 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_SJW.VALUE=3 +DRIVER.CAN.VAR.CAN_3_MESSAGE_50_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_42_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_42_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_34_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_34_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_26_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_26_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_18_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_41_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_33_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_25_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_17_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_6_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_40_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_32_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_24_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_16_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_BAUDRATE.VALUE=500 +DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_9_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_IDENTIFIER_MODE.VALUE=0x40000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_1_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ID.VALUE=58 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TIME.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_6_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_10_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_20_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_12_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_7_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ID.VALUE=50 +DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ID.VALUE=42 +DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ID.VALUE=34 +DRIVER.CAN.VAR.CAN_3_MESSAGE_26_ID.VALUE=26 +DRIVER.CAN.VAR.CAN_3_MESSAGE_18_ID.VALUE=18 +DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_62_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_54_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_46_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_38_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_51_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_43_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_35_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_27_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_19_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_PORT_TX_DIN.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_59_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_59_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_5_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_PIN_MODE.VALUE=1 +DRIVER.CAN.VAR.CAN_2_MESSAGE_63_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_55_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_47_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_39_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_PORT_RX_PSL.VALUE=1 +DRIVER.CAN.VAR.CAN_2_MESSAGE_50_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_42_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_34_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_26_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_18_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON_TR.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ID.VALUE=59 +DRIVER.CAN.VAR.CAN_3_MESSAGE_7_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_PORT_TX_DIR.VALUE=1 +DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_63_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_55_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_47_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_39_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_27_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_19_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_31_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_23_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_15_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ID.VALUE=51 +DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ID.VALUE=43 +DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ID.VALUE=35 +DRIVER.CAN.VAR.CAN_3_MESSAGE_30_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_27_ID.VALUE=27 +DRIVER.CAN.VAR.CAN_3_MESSAGE_22_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_19_ID.VALUE=19 +DRIVER.CAN.VAR.CAN_3_MESSAGE_14_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_SJW.VALUE=3 +DRIVER.CAN.VAR.CAN_3_MESSAGE_51_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_51_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_43_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_43_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_35_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_35_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_27_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_27_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_19_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_19_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_4_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_58_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_2_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_64_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_56_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_48_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_PORT_RX_PULL.VALUE=1 +DRIVER.CAN.VAR.CAN_3_MESSAGE_7_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_7_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_59_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_58_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_60_ID.VALUE=60 +DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_52_ID.VALUE=52 +DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_44_ID.VALUE=44 +DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_36_ID.VALUE=36 +DRIVER.CAN.VAR.CAN_3_MESSAGE_28_ID.VALUE=28 +DRIVER.CAN.VAR.CAN_1_MESSAGE_63_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_55_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_47_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_39_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_60_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_52_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_44_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_36_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_28_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 +DRIVER.CAN.VAR.CAN_1_SYNC.VALUE=1 +DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_SHIFT.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_PORT_RX_PULDIS.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_60_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_52_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_44_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_36_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_28_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_64_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_62_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_56_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_54_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_48_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_46_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_38_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_51_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_43_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_35_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_27_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_19_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_1_ID.VALUE=1 +DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_BRP_FREQ.VALUE=5.500 +DRIVER.CAN.VAR.CAN_2_BRPE_FREQ.VALUE=5.500 +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_64_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_64_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_56_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_56_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_48_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_48_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_60_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_52_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_44_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_36_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_28_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_6_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_PROP_SEG.VALUE=4 +DRIVER.CAN.VAR.CAN_1_MESSAGE_41_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_33_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_25_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_17_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_61_ID.VALUE=61 +DRIVER.CAN.VAR.CAN_3_MESSAGE_53_ID.VALUE=53 +DRIVER.CAN.VAR.CAN_3_MESSAGE_45_ID.VALUE=45 +DRIVER.CAN.VAR.CAN_3_MESSAGE_37_ID.VALUE=37 +DRIVER.CAN.VAR.CAN_3_MESSAGE_31_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_29_ID.VALUE=29 +DRIVER.CAN.VAR.CAN_3_MESSAGE_23_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_15_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_SJW.VALUE=3 +DRIVER.CAN.VAR.CAN_2_MESSAGE_1_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_60_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_60_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_52_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_52_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_44_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_44_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_36_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_36_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_28_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_28_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_50_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_42_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_34_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_26_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_18_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_8_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_57_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_49_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_3_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_2_ID.VALUE=2 +DRIVER.CAN.VAR.CAN_2_MESSAGE_57_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_49_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_8_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT.VALUE=72.727 +DRIVER.CAN.VAR.CAN_2_MESSAGE_51_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_43_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_35_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_27_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_21_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_19_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_13_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_8_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_1_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_62_ID.VALUE=62 +DRIVER.CAN.VAR.CAN_3_MESSAGE_54_ID.VALUE=54 +DRIVER.CAN.VAR.CAN_3_MESSAGE_46_ID.VALUE=46 +DRIVER.CAN.VAR.CAN_3_MESSAGE_38_ID.VALUE=38 +DRIVER.CAN.VAR.CAN_1_MESSAGE_64_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_56_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_48_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_61_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_53_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_45_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_37_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_29_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_PORT_TX_FUN.VALUE=1 +DRIVER.CAN.VAR.CAN_2_MESSAGE_1_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_1_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_21_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_13_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_6_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_60_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_52_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_44_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_36_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_28_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_3_ID.VALUE=3 +DRIVER.CAN.VAR.CAN_1_PORT_RX_DOUT.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_9_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_57_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_57_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_49_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_49_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_61_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_53_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_45_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_37_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_29_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_63_ID.VALUE=63 +DRIVER.CAN.VAR.CAN_3_MESSAGE_55_ID.VALUE=55 +DRIVER.CAN.VAR.CAN_3_MESSAGE_47_ID.VALUE=47 +DRIVER.CAN.VAR.CAN_3_MESSAGE_40_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_39_ID.VALUE=39 +DRIVER.CAN.VAR.CAN_3_MESSAGE_32_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_24_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_16_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_RAMBASE.VALUE=0xFF1A0000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_2_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_61_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_61_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_53_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_53_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_45_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_45_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_37_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_37_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_29_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_29_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_PORT_RX_DIN.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_9_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_59_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_50_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_42_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_34_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_26_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_18_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_PORT_TX_PDR.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_4_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_4_ID.VALUE=4 +DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_58_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_9_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_9_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_PORT_RX_DIR.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_20_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_12_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_7_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_2_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_PORT_TX_DOUT.VALUE=1 +DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ID.VALUE=64 +DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ID.VALUE=56 +DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ID.VALUE=48 +DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_57_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_49_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_38_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_SYNC.VALUE=1 +DRIVER.CAN.VAR.CAN_2_PORT_TX_PULL.VALUE=2 +DRIVER.CAN.VAR.CAN_2_MESSAGE_2_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_2_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_63_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_55_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_47_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_39_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_61_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_53_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_45_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_37_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_29_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_10_ID.VALUE=10 +DRIVER.CAN.VAR.CAN_2_MESSAGE_5_ID.VALUE=5 +DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_58_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_58_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_63_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_62_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_55_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_54_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_47_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_46_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_39_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_38_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_50_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_42_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_34_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_26_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_18_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_57_ID.VALUE=57 +DRIVER.CAN.VAR.CAN_3_MESSAGE_49_ID.VALUE=49 +DRIVER.CAN.VAR.CAN_3_MESSAGE_41_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_33_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_25_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_17_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_9_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_3_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_62_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_54_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_46_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_38_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_38_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_51_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_43_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_35_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_27_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_19_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_9_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_5_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ID.VALUE=11 +DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ID.VALUE=6 +DRIVER.CAN.VAR.CAN_3_PROPAGATION_DELAY.VALUE=700 +DRIVER.CAN.VAR.CAN_2_MESSAGE_59_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_AUTO_RETRANSMISSION.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_20_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_30_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_22_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_14_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_9_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_3_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_58_ID.VALUE=58 +DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_58_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_63_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_55_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_47_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_39_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_3_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_3_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_7_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_2_MESSAGE_62_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_59_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_54_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_46_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_38_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_PORT_TX_PSL.VALUE=1 +DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_62_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_54_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_46_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_38_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_20_ID.VALUE=20 +DRIVER.CAN.VAR.CAN_2_MESSAGE_12_ID.VALUE=12 +DRIVER.CAN.VAR.CAN_2_MESSAGE_7_ID.VALUE=7 +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_2_MESSAGE_59_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_59_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_63_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_55_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_47_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_40_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_39_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_32_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_24_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_16_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_3_MESSAGE_10_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_MASK.VALUE=0x000007FF +DRIVER.CAN.VAR.CAN_3_MESSAGE_59_ID.VALUE=59 +DRIVER.CAN.VAR.CAN_3_MESSAGE_50_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_42_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_34_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_26_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_18_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON_TR.VALUE=0 +DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_4_DLC.VALUE=8 +DRIVER.CAN.VAR.CAN_3_MESSAGE_63_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_63_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_55_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_55_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_47_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_47_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_39_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_39_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_PORT_RX_FUN.VALUE=1 +DRIVER.CAN.VAR.CAN_3_MESSAGE_2_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_6_RTR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_2_MESSAGE_21_ID.VALUE=21 +DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ID.VALUE=13 +DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ID.VALUE=8 +DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_PRESCALER.VALUE=0 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN21_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN13_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 +DRIVER.ADC.VAR.ADC2_GROUP1_RESOLUTION.VALUE=12_BIT +DRIVER.ADC.VAR.ADC2_GROUP0_PIN3_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_PARITY_ENABLE.VALUE=0x00000005 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN17_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_DISCHARGE_TIME.VALUE=0.00 +DRIVER.ADC.VAR.ADC1_GROUP2_RESOLUTION.VALUE=12_BIT +DRIVER.ADC.VAR.ADC2_GROUP2_PIN7_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN10_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_RAM_PARITY_ENA.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN0_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_RAM_PARITY_ENA.VALUE=0 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN3_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_CHANNEL_TOTAL_TIME.VALUE=0.000000 +DRIVER.ADC.VAR.ADC1_GROUP1_FIFO_SIZE.VALUE=16 +DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_PRESCALER.VALUE=1 +DRIVER.ADC.VAR.ADC1_GROUP1_LENGTH.VALUE=16 +DRIVER.ADC.VAR.ADC2_GROUP1_ID_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_CONVERSION_TIME.VALUE=1.300 +DRIVER.ADC.VAR.ADC2_PORT_BIT0_DIR.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN4_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN11_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN7_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_ALT_TRIG.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN15_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN0_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_CONVERSION_TIME.VALUE=1.300 +DRIVER.ADC.VAR.ADC2_GROUP2_LENGTH.VALUE=32 +DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN4_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN22_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN14_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_PRESCALER.VALUE=1 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN12_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN18_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN8_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN11_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_BND.VALUE=2 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN1_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN23_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN15_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_PRESCALER.VALUE=1 +DRIVER.ADC.VAR.ADC2_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN5_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN8_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_ID_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC1_GROUP0_CONVERSION_TIME.VALUE=1.300 +DRIVER.ADC.VAR.ADC2_GROUP0_RESOLUTION.VALUE=12_BIT +DRIVER.ADC.VAR.ADC1_GROUP1_PIN1_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_RESOLUTION.VALUE=12_BIT +DRIVER.ADC.VAR.ADC2_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_CONVERSION_TIME.VALUE=1.300 +DRIVER.ADC.VAR.ADC2_BND.VALUE=2 +DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_PORT_BIT0_PDR.VALUE=0 +DRIVER.ADC.VAR.ADC2_ACTUAL_CYCLE_TIME.VALUE=100.00 +DRIVER.ADC.VAR.ADC2_GROUP1_SAMPLE_PRESCALER.VALUE=1 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN9_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP1_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN2_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP1_TRIGGER_MODE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN5_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_PRESCALER.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN13_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN9_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN19_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_RAM_PARITY_ENA.VALUE=0x00000005 +DRIVER.ADC.VAR.ADC2_GROUP1_SCAN_TIME.VALUE=0.000 +DRIVER.ADC.VAR.ADC2_GROUP0_CHANNEL_TOTAL_TIME.VALUE=0.000000 +DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC2_GROUP0_LENGTH.VALUE=16 +DRIVER.ADC.VAR.ADC1_GROUP0_SAMPLE_PRESCALER.VALUE=1 +DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN2_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN20_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN12_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN10_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN24_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN16_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN6_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_TRIGGER_MODE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_PORT_BIT0_PSL.VALUE=1 +DRIVER.ADC.VAR.ADC1_GROUP2_CHANNEL_TOTAL_TIME.VALUE=0.000000 +DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_TIME.VALUE=0.00 +DRIVER.ADC.VAR.ADC2_LENGTH.VALUE=64 +DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN21_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN13_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_PINS.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_TIME.VALUE=0.00 +DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_PRESCALER.VALUE=1 +DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_PRESCALER.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN3_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN6_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_RAMBASE.VALUE=0xFF3A0000 +DRIVER.ADC.VAR.ADC2_GROUP0_BND.VALUE=8 +DRIVER.ADC.VAR.ADC1_PORT_BIT0_DOUT.VALUE=0 +DRIVER.ADC.VAR.ADC1_GROUP1_SCAN_TIME.VALUE=0.000 +DRIVER.ADC.VAR.ADC1_GROUP0_RESOLUTION.VALUE=12_BIT +DRIVER.ADC.VAR.ADC2_GROUP2_FIFO_SIZE.VALUE=16 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN7_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN14_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE.VALUE=EVENT +DRIVER.ADC.VAR.ADC2_GROUP1_BND.VALUE=8 +DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT +DRIVER.ADC.VAR.ADC2_GROUP1_PIN0_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN3_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_ALT_TRIG_COMP.VALUE=1 +DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT +DRIVER.ADC.VAR.ADC2_GROUP1_PIN11_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN7_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN17_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_PARITY_ENABLE.VALUE=0x00000005 +DRIVER.ADC.VAR.ADC1_ACTUAL_CYCLE_TIME.VALUE=100.00 +DRIVER.ADC.VAR.ADC2_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT +DRIVER.ADC.VAR.ADC2_GROUP2_PIN15_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN0_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN10_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP1_PINS.VALUE=0 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN22_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN14_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN4_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN18_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN8_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN11_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN1_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_FIFO_SIZE.VALUE=16 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN4_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_RAMBASE.VALUE=0xFF3E0000 +DRIVER.ADC.VAR.ADC1_BASE.VALUE=0xFFF7C000 +DRIVER.ADC.VAR.ADC1_PORT_BIT0_DIR.VALUE=0 +DRIVER.ADC.VAR.ADC2_RAM_PARITY_ENA.VALUE=0x00000005 +DRIVER.ADC.VAR.ADC2_GROUP2_HW_TRIGGER_SOURCE.VALUE=EVENT +DRIVER.ADC.VAR.ADC2_GROUP2_ID_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC1_GROUP2_LENGTH.VALUE=32 +DRIVER.ADC.VAR.ADC1_GROUP0_BND.VALUE=8 +DRIVER.ADC.VAR.ADC2_GROUP2_CHANNEL_TOTAL_TIME.VALUE=0.000000 +DRIVER.ADC.VAR.ADC2_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN5_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN12_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN8_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_PINS.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_TIME.VALUE=0.00 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN1_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_EXTENDED_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_TIME.VALUE=0.00 +DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_MODE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_FIFO_SIZE.VALUE=16 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN5_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN23_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN15_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_BND.VALUE=8 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN13_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN19_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_PORT_BIT0_DOUT.VALUE=0 +DRIVER.ADC.VAR.ADC2_CYCLE_TIME.VALUE=100.00 +DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE.VALUE=EVENT +DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_PRESCALER.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN9_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_PRESCALE.VALUE=10 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN20_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN12_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_RAM_PARITY_ENA.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC2_BASE.VALUE=0xFFF7C200 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN2_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_RAM_PARITY_ENA.VALUE=0 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN24_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN16_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_ID_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN6_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN9_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_PORT_BIT0_PDR.VALUE=0 +DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN2_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_CONVERSION_TIME.VALUE=1.300 +DRIVER.ADC.VAR.ADC1_GROUP0_FIFO_SIZE.VALUE=16 +DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULL.VALUE=2 +DRIVER.ADC.VAR.ADC1_GROUP0_LENGTH.VALUE=16 +DRIVER.ADC.VAR.ADC2_GROUP1_CONVERSION_TIME.VALUE=1.300 +DRIVER.ADC.VAR.ADC1_GROUP0_PINS.VALUE=0 +DRIVER.ADC.VAR.ADC1_GROUP0_ACTUAL_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN3_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN10_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_ID_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN6_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_SCAN_TIME.VALUE=0.000 +DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE.VALUE=EVENT +DRIVER.ADC.VAR.ADC1_GROUP1_CHANNEL_TOTAL_TIME.VALUE=0.000000 +DRIVER.ADC.VAR.ADC1_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT +DRIVER.ADC.VAR.ADC2_GROUP1_PIN14_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_PORT_BIT0_PSL.VALUE=1 +DRIVER.ADC.VAR.ADC1_GROUP2_EXTENDED_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC2_GROUP1_LENGTH.VALUE=16 +DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT +DRIVER.ADC.VAR.ADC1_GROUP2_PIN3_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN21_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN13_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_ACTUAL_DISCHARGE_TIME.VALUE=0.00 +DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT +DRIVER.ADC.VAR.ADC2_GROUP2_PIN11_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN17_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN7_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN10_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_DISCHARGE_TIME.VALUE=0.00 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN0_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN22_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN14_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_CYCLE_TIME.VALUE=100.00 +DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_PRESCALER.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN4_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN7_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_TIME.VALUE=0.00 +DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE.VALUE=EVENT +DRIVER.ADC.VAR.ADC1_GROUP1_PIN0_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_ID_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_TIME.VALUE=0.00 +DRIVER.ADC.VAR.ADC1_GROUP2_SCAN_TIME.VALUE=0.000 +DRIVER.ADC.VAR.ADC1_GROUP1_PINS.VALUE=0 +DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_ALT_TRIG_COMP.VALUE=1 +DRIVER.ADC.VAR.ADC1_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN8_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN15_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_ALT_TRIG.VALUE=0 +DRIVER.ADC.VAR.ADC1_GROUP1_RAM_PARITY_ENA.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN1_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP1_RAM_PARITY_ENA.VALUE=0 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN4_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_PRESCALER.VALUE=0 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN12_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN8_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN18_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_RESOLUTION.VALUE=12_BIT +DRIVER.ADC.VAR.ADC1_GROUP2_PIN1_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN11_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_SCAN_TIME.VALUE=0.000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN23_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN15_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE.VALUE=EVENT +DRIVER.ADC.VAR.ADC2_GROUP0_PIN5_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN19_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_PRESCALE.VALUE=10 +DRIVER.ADC.VAR.ADC2_GROUP0_ACTUAL_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC1_GROUP2_PINS.VALUE=0 +DRIVER.ADC.VAR.ADC2_PORT_BIT0_PULL.VALUE=2 +DRIVER.ADC.VAR.ADC1_LENGTH.VALUE=64 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN9_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN20_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN12_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC2_GROUP1_CHANNEL_TOTAL_TIME.VALUE=0.000000 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN2_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN5_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC1_GROUP0_SCAN_TIME.VALUE=0.000 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN6_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_PIN13_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP0_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN9_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_SAMPLE_TIME.VALUE=300.00 +DRIVER.ADC.VAR.ADC2_GROUP1_FIFO_SIZE.VALUE=16 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN2_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP1_PIN10_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP2_PIN6_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN24_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_PIN16_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC2_GROUP2_PIN14_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_MODE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP0_ACTUAL_DISCHARGE_TIME.VALUE=0.00 +DRIVER.LIN.VAR.LIN_PORT_BIT0_DOUT.VALUE=0 +DRIVER.LIN.VAR.LIN_PEINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_TOAWUSINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_BEINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_TOA3WUSINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PORT_BIT1_DOUT.VALUE=0 +DRIVER.LIN.VAR.LIN_MAXPRESCALE.VALUE=4954 +DRIVER.LIN.VAR.LIN_LENGTH.VALUE=8 +DRIVER.LIN.VAR.LIN_PARITYENA.VALUE=0 +DRIVER.LIN.VAR.LIN_BREAKINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_TX_MASK.VALUE=0xFF +DRIVER.LIN.VAR.LIN_MSTMOD.VALUE=1 +DRIVER.LIN.VAR.LIN_SDEL.VALUE=1 +DRIVER.LIN.VAR.LIN_PORT_BIT2_DOUT.VALUE=0 +DRIVER.LIN.VAR.LIN_TOAWUSINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_WAKEINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_HGENCTRL.VALUE=1 +DRIVER.LIN.VAR.LIN_TOA3WUSINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PORT_BIT0_DIR.VALUE=0 +DRIVER.LIN.VAR.LIN_PORT_BIT0_PULL.VALUE=2 +DRIVER.LIN.VAR.LIN_CEINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_BREAKINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PBEINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PORT_BIT1_DIR.VALUE=0 +DRIVER.LIN.VAR.LIN_PORT_BIT0_FUN.VALUE=0 +DRIVER.LIN.VAR.LIN_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.LIN.VAR.LIN_PORT_BIT2_DIR.VALUE=0 +DRIVER.LIN.VAR.LIN_PORT_BIT1_PULL.VALUE=2 +DRIVER.LIN.VAR.LIN_WAKEINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PORT_BIT0_PDR.VALUE=0 +DRIVER.LIN.VAR.LIN_OEINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PORT_BIT1_FUN.VALUE=2 +DRIVER.LIN.VAR.LIN_NREINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PORT_BIT1_PDR.VALUE=0 +DRIVER.LIN.VAR.LIN_PORT_BIT2_FUN.VALUE=4 +DRIVER.LIN.VAR.LIN_CEINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PORT_BIT0_PSL.VALUE=1 +DRIVER.LIN.VAR.LIN_PORT_BIT2_PULL.VALUE=2 +DRIVER.LIN.VAR.LIN_PBEINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PORT_BIT2_PDR.VALUE=0 +DRIVER.LIN.VAR.LIN_BASE_PORT.VALUE=0xFFF7E440 +DRIVER.LIN.VAR.LIN_ACTUALBAUDRATE.VALUE=19.985 +DRIVER.LIN.VAR.LIN_PORT_BIT1_PSL.VALUE=2 +DRIVER.LIN.VAR.LIN_ISFEINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_FEINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PORT_BIT2_PSL.VALUE=4 +DRIVER.LIN.VAR.LIN_OEINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_TXINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_NREINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_IDINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_SBREAK.VALUE=13 +DRIVER.LIN.VAR.LIN_TOINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_BAUDRATE.VALUE=20.000 +DRIVER.LIN.VAR.LIN_RX_MASK.VALUE=0xFF +DRIVER.LIN.VAR.LIN_ISFEINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_RXINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_BASE.VALUE=0xFFF7E400 +DRIVER.LIN.VAR.LIN_FEINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_TXINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PORT_BIT2_PULDIS.VALUE=0 +DRIVER.LIN.VAR.LIN_IDINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PEINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_TOINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_MAXBAUDRATE.VALUE=22.204 +DRIVER.LIN.VAR.LIN_BEINTENA.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_RXINTLVL.VALUE=0x00000000 +DRIVER.LIN.VAR.LIN_PRESCALE.VALUE=343 +DRIVER.LIN.VAR.LIN_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.HET.VAR.HET2_EDGE5_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM5_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET2_PWM0_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT0_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_INT_X0.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE4_BOTH.VALUE=0 +DRIVER.HET.VAR.HET1_BIT1_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT6_HRSHARE.VALUE=0x00000008 +DRIVER.HET.VAR.HET2_INT_X1.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM2_DUTY.VALUE=50 +DRIVER.HET.VAR.HET1_BIT29_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT0_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_IGNORE_SUSPEND_ENABLE.VALUE=0x00020000 +DRIVER.HET.VAR.HET2_PWM3_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET2_PWM1_PIN_SELECT.VALUE=10 +DRIVER.HET.VAR.HET2_BIT12_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT3_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_INT_X2.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X3.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM2_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_INT_X4.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM6_ACTION.VALUE=3 +DRIVER.HET.VAR.HET1_PWM0_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT4_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_PWM3_ENA.VALUE=0 +DRIVER.HET.VAR.HET2_BIT4_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X5.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_IGNORE_SUSPEND_ENABLE.VALUE=0x00020000 +DRIVER.HET.VAR.HET1_BIT30_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT26_HRSHARE.VALUE=0x00002000 +DRIVER.HET.VAR.HET1_BIT22_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT18_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT14_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM4_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET2_BIT3_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X6.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE0_PIN_SELECT.VALUE=9 +DRIVER.HET.VAR.HET1_BIT28_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT7_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_INT_X7.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT7_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X8.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM3_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT18_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT10_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X9.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT11_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT11_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_PWM4_PIN_SELECT.VALUE=16 +DRIVER.HET.VAR.HET2_PWM4_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET1_RAM_BASE.VALUE=0xFF460000 +DRIVER.HET.VAR.HET2_EDGE6_BOTH.VALUE=0 +DRIVER.HET.VAR.HET2_PWM2_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT15_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE2_EVENT.VALUE=1 +DRIVER.HET.VAR.HET2_BIT11_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PIN_ENABLE.VALUE=0 +DRIVER.HET.VAR.HET1_CAP3_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_BIT24_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT16_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT5_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT27_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT19_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE6_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT24_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT16_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT2_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM6_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE3_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET2_EDGE5_PIN_SELECT.VALUE=10 +DRIVER.HET.VAR.HET2_BIT13_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM7_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET1_BIT27_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT19_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_CAP5_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET2_PWM4_ENA.VALUE=0 +DRIVER.HET.VAR.HET2_BIT8_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM1_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET2_CAP2_PIN_SELECT.VALUE=4 +DRIVER.HET.VAR.HET2_BIT4_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM0_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET1_BIT29_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT0_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT8_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM4_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET2_BIT1_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT12_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM7_ACTION.VALUE=3 +DRIVER.HET.VAR.HET2_PWM4_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET2_BIT18_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_BIT16_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM3_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM3_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET1_BIT0_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM1_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET2_BIT6_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_CAP5_PIN_SELECT.VALUE=26 +DRIVER.HET.VAR.HET1_BIT28_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT10_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_EDGE7_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM0_ACTION.VALUE=3 +DRIVER.HET.VAR.HET2_BIT1_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_EDGE7_EVENT.VALUE=1 +DRIVER.HET.VAR.HET1_EDGE5_BOTH.VALUE=0 +DRIVER.HET.VAR.HET1_PWM5_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET1_BIT3_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE7_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_EDGE1_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM3_DUTY.VALUE=50 +DRIVER.HET.VAR.HET1_PWM1_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT14_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT4_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_EDGE4_EVENT.VALUE=1 +DRIVER.HET.VAR.HET1_BIT5_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_MASTER.VALUE=1 +DRIVER.HET.VAR.HET2_EDGE5_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM5_ENA.VALUE=0 +DRIVER.HET.VAR.HET2_PWM0_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT2_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT5_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM7_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET1_BIT8_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT1_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_LR_ACTUALTIME.VALUE=1163.636 +DRIVER.HET.VAR.HET1_PWM5_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_PWM5_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM4_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET2_BIT9_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM3_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM0_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT5_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM6_PIN_SELECT.VALUE=18 +DRIVER.HET.VAR.HET2_BIT13_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT12_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_EDGE7_BOTH.VALUE=0 +DRIVER.HET.VAR.HET2_BIT17_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM6_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM0_ENA.VALUE=0 +DRIVER.HET.VAR.HET1_BIT30_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT27_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT22_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT19_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT14_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM1_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET2_BIT7_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE5_PIN_SELECT.VALUE=21 +DRIVER.HET.VAR.HET1_BIT29_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT0_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET_DIS_BLACKBOX.VALUE=0 +DRIVER.HET.VAR.HET2_PWM7_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_HR_ACTUALFREQUENCY.VALUE=110.000 +DRIVER.HET.VAR.HET2_PWM5_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM4_ACTION.VALUE=3 +DRIVER.HET.VAR.HET1_BIT25_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT17_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT4_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE0_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_CAP6_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_BIT20_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT12_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT15_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X10.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT28_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_INT_X11.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X20.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X12.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM3_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET2_PWM6_ENA.VALUE=0 +DRIVER.HET.VAR.HET2_BIT16_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X21.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X13.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_HR_PRESCALE.VALUE=0 +DRIVER.HET.VAR.HET1_EDGE6_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_PWM6_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_LR_PRESCALE.VALUE=7 +DRIVER.HET.VAR.HET2_PWM0_PIN_SELECT.VALUE=8 +DRIVER.HET.VAR.HET2_BIT6_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X30.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X22.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X14.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT2_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X31.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X23.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X15.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM3_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET2_INT_X24.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X16.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BASE_PORT.VALUE=0xFFF7B84C +DRIVER.HET.VAR.HET2_PWM5_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT0_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X25.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X17.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM4_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET1_PWM3_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT10_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT14_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X26.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X18.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X27.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X19.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT18_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X28.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM2_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM1_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET2_PWM0_DUTY.VALUE=50 +DRIVER.HET.VAR.HET2_BIT18_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_INT_X29.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM1_ENA.VALUE=0 +DRIVER.HET.VAR.HET2_CAP7_PIN_SELECT.VALUE=6 +DRIVER.HET.VAR.HET2_BIT8_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM5_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET1_PWM4_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET1_PWM3_PIN_SELECT.VALUE=14 +DRIVER.HET.VAR.HET1_BIT11_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT1_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM0_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_BIT2_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_EDGE6_BOTH.VALUE=0 +DRIVER.HET.VAR.HET1_BIT5_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM6_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET2_BIT14_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT6_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM4_DUTY.VALUE=50 +DRIVER.HET.VAR.HET1_BIT20_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT12_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PIN_ENABLE.VALUE=0 +DRIVER.HET.VAR.HET2_BIT16_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT5_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_PWM0_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET1_BIT6_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_PWM7_ENA.VALUE=0 +DRIVER.HET.VAR.HET1_PWM0_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT8_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE4_PIN_SELECT.VALUE=8 +DRIVER.HET.VAR.HET2_BIT7_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT9_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT3_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM5_ACTION.VALUE=3 +DRIVER.HET.VAR.HET2_BIT10_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_CAP1_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_EDGE6_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_CAP1_PIN_SELECT.VALUE=2 +DRIVER.HET.VAR.HET2_BIT15_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT13_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_EDGE3_EVENT.VALUE=1 +DRIVER.HET.VAR.HET1_PWM6_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM2_ENA.VALUE=0 +DRIVER.HET.VAR.HET2_BIT9_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT2_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE0_EVENT.VALUE=1 +DRIVER.HET.VAR.HET1_PWM2_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET1_BIT26_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT18_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT6_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE3_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT16_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT17_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_CAP4_PIN_SELECT.VALUE=24 +DRIVER.HET.VAR.HET1_BIT29_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT0_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_PWM2_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET2_EDGE3_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_BIT3_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT2_HRSHARE.VALUE=0x00000002 +DRIVER.HET.VAR.HET2_PWM6_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET2_BIT8_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM1_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET1_BIT4_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT4_HRSHARE.VALUE=0x00000004 +DRIVER.HET.VAR.HET1_BIT25_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT17_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT16_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM1_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_PWM4_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM2_ACTION.VALUE=3 +DRIVER.HET.VAR.HET2_PWM1_DUTY.VALUE=50 +DRIVER.HET.VAR.HET1_PWM7_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET1_PWM3_ENA.VALUE=0 +DRIVER.HET.VAR.HET1_BIT24_HRSHARE.VALUE=0x00001000 +DRIVER.HET.VAR.HET1_BIT16_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT10_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM5_PIN_SELECT.VALUE=17 +DRIVER.HET.VAR.HET1_BIT20_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT12_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT3_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X10.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X11.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT3_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_EDGE7_BOTH.VALUE=0 +DRIVER.HET.VAR.HET1_EDGE0_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT7_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X20.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X12.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT14_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM5_DUTY.VALUE=50 +DRIVER.HET.VAR.HET1_BIT10_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X21.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X13.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM5_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET2_BIT18_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT6_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_EDGE4_PIN_SELECT.VALUE=20 +DRIVER.HET.VAR.HET1_INT_X30.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X22.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X14.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM3_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET1_INT_X31.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X23.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X15.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE5_EVENT.VALUE=1 +DRIVER.HET.VAR.HET2_PWM1_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM7_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM6_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET1_BIT7_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_INT_X24.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X16.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_CAP2_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_PWM3_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT6_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X25.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X17.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT9_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT5_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X26.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X18.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X27.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X19.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT11_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_INT_X28.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM2_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_RAM_SIZE.VALUE=160 +DRIVER.HET.VAR.HET1_EDGE2_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_INT_X29.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT17_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT14_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_PWM3_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET2_PWM5_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET1_PWM1_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET1_BIT10_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_CAP4_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET2_BIT8_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT4_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM4_ENA.VALUE=0 +DRIVER.HET.VAR.HET1_PWM0_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET1_BIT4_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM1_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET1_EDGE1_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM1_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT27_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT19_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT8_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT14_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_CAP6_PIN_SELECT.VALUE=4 +DRIVER.HET.VAR.HET1_PWM2_PIN_SELECT.VALUE=12 +DRIVER.HET.VAR.HET1_BIT1_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_PWM3_ACTION.VALUE=3 +DRIVER.HET.VAR.HET2_PWM2_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET1_EDGE4_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT28_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT6_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE0_BOTH.VALUE=0 +DRIVER.HET.VAR.HET2_EDGE6_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET2_PWM5_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT8_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT4_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE3_PIN_SELECT.VALUE=6 +DRIVER.HET.VAR.HET2_PWM2_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET2_BIT18_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT11_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT10_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_EDGE1_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM7_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM2_DUTY.VALUE=50 +DRIVER.HET.VAR.HET1_PWM5_ENA.VALUE=0 +DRIVER.HET.VAR.HET1_BIT8_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_CAP0_PIN_SELECT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT21_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT13_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT5_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM4_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_BIT4_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_EDGE2_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM2_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM2_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET1_BIT9_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT6_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM6_DUTY.VALUE=50 +DRIVER.HET.VAR.HET1_BIT1_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM4_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET2_BIT7_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_PWM7_ACTION.VALUE=3 +DRIVER.HET.VAR.HET1_BIT8_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_PWM2_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT12_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT31_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT23_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT15_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_CAP3_PIN_SELECT.VALUE=6 +DRIVER.HET.VAR.HET1_BIT7_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM6_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_PWM4_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM1_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET2_BIT12_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_PWM0_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET1_PWM0_ACTION.VALUE=3 +DRIVER.HET.VAR.HET1_CAP5_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_BIT26_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT18_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT15_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_PWM0_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET1_EDGE4_EVENT.VALUE=1 +DRIVER.HET.VAR.HET1_BIT20_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT12_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT12_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE5_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_PWM6_ENA.VALUE=0 +DRIVER.HET.VAR.HET1_BIT6_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE1_EVENT.VALUE=1 +DRIVER.HET.VAR.HET2_PWM3_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE3_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT28_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_CAP7_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_PWM3_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET2_PWM4_PIN_SELECT.VALUE=16 +DRIVER.HET.VAR.HET1_BIT10_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT2_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_BIT9_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM5_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM0_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE3_PIN_SELECT.VALUE=15 +DRIVER.HET.VAR.HET1_PWM1_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET1_BIT8_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BASE.VALUE=0xFFF7B800 +DRIVER.HET.VAR.HET2_EDGE1_BOTH.VALUE=0 +DRIVER.HET.VAR.HET1_PWM6_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM5_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET2_BIT12_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT2_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT2_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM7_PIN_SELECT.VALUE=19 +DRIVER.HET.VAR.HET1_PWM5_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET1_LR_ACTUALTIME.VALUE=1163.636 +DRIVER.HET.VAR.HET1_BIT21_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT13_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT11_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_PWM3_DUTY.VALUE=50 +DRIVER.HET.VAR.HET1_PWM7_ENA.VALUE=0 +DRIVER.HET.VAR.HET1_HR_PRESCALE.VALUE=0 +DRIVER.HET.VAR.HET1_BIT30_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT22_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT14_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT7_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_HR_ACTUALFREQUENCY.VALUE=110.000 +DRIVER.HET.VAR.HET2_PWM1_ACTION.VALUE=3 +DRIVER.HET.VAR.HET2_BIT5_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_EDGE4_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_CAP0_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET2_BIT4_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE2_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM7_DUTY.VALUE=50 +DRIVER.HET.VAR.HET1_PWM2_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT8_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT11_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM7_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_EDGE6_EVENT.VALUE=1 +DRIVER.HET.VAR.HET2_MASTER.VALUE=1 +DRIVER.HET.VAR.HET1_PWM5_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM0_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT9_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_EDGE6_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT10_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_CAP5_PIN_SELECT.VALUE=2 +DRIVER.HET.VAR.HET1_PWM1_PIN_SELECT.VALUE=10 +DRIVER.HET.VAR.HET1_BIT9_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT13_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_PWM7_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET1_PWM5_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT24_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT16_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT6_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_RAM_PARITY_ENA.VALUE=0x00000005 +DRIVER.HET.VAR.HET2_BIT16_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT10_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM7_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE0_BOTH.VALUE=0 +DRIVER.HET.VAR.HET1_BIT30_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT22_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT14_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X0.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE2_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET2_PWM4_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT28_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT0_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT0_HRSHARE.VALUE=0x00000001 +DRIVER.HET.VAR.HET1_INT_X1.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE2_PIN_SELECT.VALUE=4 +DRIVER.HET.VAR.HET2_PWM2_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET1_BIT8_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X2.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_DIS_BLACKBOX.VALUE=0 +DRIVER.HET.VAR.HET2_LR_TIME.VALUE=800.000 +DRIVER.HET.VAR.HET1_INT_X3.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM6_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET1_EDGE5_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM5_ACTION.VALUE=3 +DRIVER.HET.VAR.HET1_BIT29_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT0_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_INT_X4.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT2_HRSHARE.VALUE=0x00000002 +DRIVER.HET.VAR.HET1_BIT21_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT13_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X5.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM2_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET1_BIT20_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT12_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT3_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_INT_X6.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM0_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET1_INT_X7.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BASE_PORT.VALUE=0xFFF7B94C +DRIVER.HET.VAR.HET1_INT_X8.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT17_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT2_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM6_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET1_BIT30_HRSHARE.VALUE=0x00008000 +DRIVER.HET.VAR.HET1_BIT22_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT14_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_INT_X9.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BASE.VALUE=0xFFF7B900 +DRIVER.HET.VAR.HET2_EDGE2_BOTH.VALUE=0 +DRIVER.HET.VAR.HET1_EDGE0_EVENT.VALUE=1 +DRIVER.HET.VAR.HET2_BIT10_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_CAP2_PIN_SELECT.VALUE=4 +DRIVER.HET.VAR.HET1_BIT11_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM2_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_PWM0_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT31_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT23_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT20_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT15_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT12_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_PWM4_DUTY.VALUE=50 +DRIVER.HET.VAR.HET2_BIT18_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_CAP1_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_BIT30_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT22_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT14_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM6_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET1_PWM6_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET1_BIT31_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT23_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT15_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT9_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT6_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_EDGE6_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT7_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE1_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_RAM_SIZE.VALUE=160 +DRIVER.HET.VAR.HET2_BIT9_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT21_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT13_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM2_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT0_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM3_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET2_CAP3_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET2_BIT0_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM3_PIN_SELECT.VALUE=14 +DRIVER.HET.VAR.HET2_PWM6_ACTION.VALUE=3 +DRIVER.HET.VAR.HET2_BIT14_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_EDGE7_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT17_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_EDGE2_PIN_SELECT.VALUE=13 +DRIVER.HET.VAR.HET1_BIT20_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT12_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_HR_FREQUENCY.VALUE=110.000 +DRIVER.HET.VAR.HET2_PWM2_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET1_EDGE5_EVENT.VALUE=1 +DRIVER.HET.VAR.HET1_EDGE1_BOTH.VALUE=0 +DRIVER.HET.VAR.HET1_PWM5_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT24_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT16_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM1_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET2_BIT18_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE0_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT0_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_PWM6_PIN_SELECT.VALUE=18 +DRIVER.HET.VAR.HET2_EDGE2_EVENT.VALUE=1 +DRIVER.HET.VAR.HET1_EDGE7_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT1_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_EDGE5_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET2_EDGE4_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT6_HRSHARE.VALUE=0x00000008 +DRIVER.HET.VAR.HET1_BIT30_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT22_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT14_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT4_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_BIT1_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM7_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT8_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT0_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT4_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE7_PIN_SELECT.VALUE=14 +DRIVER.HET.VAR.HET2_PWM7_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET2_PWM3_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET1_PWM3_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_EDGE3_BOTH.VALUE=0 +DRIVER.HET.VAR.HET1_PWM1_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM2_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT28_HRSHARE.VALUE=0x00004000 +DRIVER.HET.VAR.HET1_BIT26_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT18_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_CAP4_PIN_SELECT.VALUE=0 +DRIVER.HET.VAR.HET2_PWM0_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET1_PWM0_PIN_SELECT.VALUE=8 +DRIVER.HET.VAR.HET1_BIT21_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT13_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_LR_TIME.VALUE=800.000 +DRIVER.HET.VAR.HET2_EDGE0_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM3_ACTION.VALUE=3 +DRIVER.HET.VAR.HET1_BIT25_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT21_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT17_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT13_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_PWM5_DUTY.VALUE=50 +DRIVER.HET.VAR.HET2_PWM1_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT20_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT12_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT11_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT24_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT16_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_PWM5_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_RAM_BASE.VALUE=0xFF440000 +DRIVER.HET.VAR.HET2_PWM3_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT7_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_PWM4_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT15_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_CAP4_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_BIT8_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE1_PIN_SELECT.VALUE=2 +DRIVER.HET.VAR.HET1_CAP7_PIN_SELECT.VALUE=30 +DRIVER.HET.VAR.HET1_BIT31_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT23_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT15_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE7_EVENT.VALUE=1 +DRIVER.HET.VAR.HET2_BIT2_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE4_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET2_BIT15_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_BIT10_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_CAP6_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_PWM2_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET2_BIT18_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_BIT0_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM4_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET1_BIT30_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT22_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT14_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE1_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM7_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE2_BOTH.VALUE=0 +DRIVER.HET.VAR.HET1_BIT26_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT18_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM1_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT16_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT5_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_RAM_PARITY_ENA.VALUE=0x00000005 +DRIVER.HET.VAR.HET1_PWM7_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM0_DUTY.VALUE=50 +DRIVER.HET.VAR.HET2_PWM0_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET2_BIT1_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_CAP1_PIN_SELECT.VALUE=2 +DRIVER.HET.VAR.HET1_PWM7_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET1_BIT2_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_PWM6_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM4_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET2_BIT10_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM7_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT10_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE7_PIN_SELECT.VALUE=23 +DRIVER.HET.VAR.HET1_BIT24_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT16_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT5_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_PWM7_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET2_PWM7_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET2_PWM4_ACTION.VALUE=3 +DRIVER.HET.VAR.HET2_BIT3_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE5_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT6_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM6_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET2_EDGE4_BOTH.VALUE=0 +DRIVER.HET.VAR.HET2_PWM1_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT11_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE1_EVENT.VALUE=1 +DRIVER.HET.VAR.HET2_LR_PRESCALE.VALUE=7 +DRIVER.HET.VAR.HET2_PWM2_PIN_SELECT.VALUE=12 +DRIVER.HET.VAR.HET2_BIT1_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT31_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT23_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT15_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM6_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_EDGE2_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM4_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT30_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT27_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT22_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT19_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT14_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_EDGE2_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM6_DUTY.VALUE=50 +DRIVER.HET.VAR.HET2_BIT8_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM4_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT9_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE1_PIN_SELECT.VALUE=11 +DRIVER.HET.VAR.HET1_BIT25_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT17_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_BIT8_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_PWM4_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM0_ENA.VALUE=0 +DRIVER.HET.VAR.HET2_BIT14_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT2_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM5_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET2_BIT0_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM5_PIN_SELECT.VALUE=17 +DRIVER.HET.VAR.HET1_BIT25_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT17_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM6_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT4_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE1_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_CAP7_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_BIT28_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT24_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT16_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT16_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_BIT12_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM4_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET1_PWM1_ACTION.VALUE=3 +DRIVER.HET.VAR.HET2_BIT0_HRSHARE.VALUE=0x00000001 +DRIVER.HET.VAR.HET1_EDGE7_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_PWM1_DUTY_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE6_PIN_SELECT.VALUE=12 +DRIVER.HET.VAR.HET2_BIT2_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_DIS_BLACKBOX.VALUE=0 +DRIVER.HET.VAR.HET1_BIT24_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT16_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE3_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE6_EVENT.VALUE=1 +DRIVER.HET.VAR.HET1_EDGE3_BOTH.VALUE=0 +DRIVER.HET.VAR.HET1_PWM6_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET1_BIT28_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT13_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM5_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET1_PWM1_DUTY.VALUE=50 +DRIVER.HET.VAR.HET1_BIT20_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT12_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_CAP3_PIN_SELECT.VALUE=6 +DRIVER.HET.VAR.HET2_BIT10_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT2_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_PWM3_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET2_EDGE3_EVENT.VALUE=1 +DRIVER.HET.VAR.HET2_PWM6_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET2_PWM3_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET1_BIT3_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_PWM1_ENA.VALUE=0 +DRIVER.HET.VAR.HET2_BIT1_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT26_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT18_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT6_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_PWM1_DUTYTIME.VALUE=501.527 +DRIVER.HET.VAR.HET2_BIT5_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM7_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET2_BIT16_HRSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_CAP0_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET1_BIT4_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE0_PIN_SELECT.VALUE=0 +DRIVER.HET.VAR.HET2_BIT10_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_CAP6_PIN_SELECT.VALUE=28 +DRIVER.HET.VAR.HET1_PWM2_PERIOD.VALUE=1000.000 +DRIVER.HET.VAR.HET2_EDGE5_BOTH.VALUE=0 +DRIVER.HET.VAR.HET2_BIT13_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT3_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE0_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET2_PWM7_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET2_BIT3_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT25_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT17_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_EDGE4_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT31_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT29_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT23_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT15_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT0_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_CAP2_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET2_PWM7_DUTY.VALUE=50 +DRIVER.HET.VAR.HET2_BIT6_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM4_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT11_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT26_DOUT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT18_DOUT.VALUE=0 +DRIVER.HET.VAR.HET2_PWM6_PERIOD_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM2_ACTION.VALUE=3 +DRIVER.HET.VAR.HET2_BIT9_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_PWM7_DUTY_LVL.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM3_PERIOD_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM2_ENA.VALUE=0 +DRIVER.HET.VAR.HET2_BIT12_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE3_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM7_PIN_SELECT.VALUE=19 +DRIVER.HET.VAR.HET2_BIT2_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_CAP0_PIN_SELECT.VALUE=0 +DRIVER.HET.VAR.HET1_BIT27_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT19_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT6_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM0_DUTY_PRESCALER.VALUE=55296 +DRIVER.HET.VAR.HET2_EDGE7_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_PWM0_POLARITY.VALUE=3 +DRIVER.HET.VAR.HET1_BIT26_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT18_XORSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT10_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_EDGE6_PIN_SELECT.VALUE=22 +DRIVER.HET.VAR.HET1_PWM0_ACTUALPERIOD.VALUE=1000.727 +DRIVER.HET.VAR.HET2_HR_FREQUENCY.VALUE=110.000 +DRIVER.HET.VAR.HET2_BIT17_PULL.VALUE=1 +DRIVER.HET.VAR.HET2_BIT14_DIR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_PWM5_PERIOD_PRESCALER.VALUE=109952 +DRIVER.HET.VAR.HET2_EDGE4_POLARITY.VALUE=0 +DRIVER.HET.VAR.HET2_EDGE0_INTENA.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT7_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT4_HRSHARE.VALUE=0x00000004 +DRIVER.HET.VAR.HET1_BIT2_ANDSHARE.VALUE=0x00000000 +DRIVER.HET.VAR.HET2_BIT4_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT26_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT18_PSL.VALUE=0x00000000 +DRIVER.RTP.VAR.RTP_PORT_BIT1_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT3_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT1_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT5_DIR.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT14_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT11_DIR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT3_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT8_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT4_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT6_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT2_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT10_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT6_DIR.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT14_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT12_DIR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT17_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT4_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT10_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT2_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT5_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT3_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT11_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT7_DIR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT13_DIR.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT5_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT11_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT9_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT6_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT12_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT4_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT12_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT8_DIR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT10_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT15_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT14_DIR.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT18_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT6_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT0_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT4_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT12_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT3_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT7_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT5_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT13_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT9_DIR.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT11_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT15_DIR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT7_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT13_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT8_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT6_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT14_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT12_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT16_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT16_DIR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT17_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT8_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT1_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT10_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT14_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT4_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT9_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT7_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT15_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT9_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT13_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT10_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT17_DIR.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT2_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT9_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT15_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT8_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT16_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT14_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT18_DIR.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT17_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_BASE_PORT.VALUE=0xFFFFFA38 +DRIVER.RTP.VAR.RTP_PORT_BIT2_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT16_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT5_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT9_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT17_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT15_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT15_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT11_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT17_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT7_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT18_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT16_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT18_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT3_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT18_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT6_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT17_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT12_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT13_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT18_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT4_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT5_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT7_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT10_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT13_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT18_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT5_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT11_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT8_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT0_DIR.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT11_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT14_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT3_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT1_DIR.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT6_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT0_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT9_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT2_DIR.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT12_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT16_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT15_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT0_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT0_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT1_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_BASE.VALUE=0xFFFFFA00 +DRIVER.RTP.VAR.RTP_PORT_BIT3_DIR.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT8_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT1_PDR.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT7_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT2_FUN.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT0_PSL.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT4_DIR.VALUE=0 +DRIVER.RTP.VAR.RTP_BASE_RAM.VALUE=0xFFF83000 +DRIVER.RTP.VAR.RTP_PORT_BIT13_PULL.VALUE=2 +DRIVER.RTP.VAR.RTP_PORT_BIT10_DIR.VALUE=1 +DRIVER.RTP.VAR.RTP_PORT_BIT16_DOUT.VALUE=0 +DRIVER.RTP.VAR.RTP_PORT_BIT2_PDR.VALUE=0 +DRIVER.USB.VAR.USB1_MANUFACTURING_STRING_COUNT.VALUE=1 +DRIVER.USB.VAR.USB1_MANUFACTURING_STRING.VALUE=0 +DRIVER.USB.VAR.USB1_SERIAL_NUM_STRING_COUNT.VALUE=1 +DRIVER.USB.VAR.USB1_CONTROL_INTERFACE_STRING_COUNT.VALUE=1 +DRIVER.USB.VAR.USB1_POWER_TYPE.VALUE=USB_CONF_ATTR_SELF_PWR +DRIVER.USB.VAR.USB1_LANGUAGE.VALUE=USB_LANG_EN_UK +DRIVER.USB.VAR.USB1_VENDORID.VALUE=0x0000 +DRIVER.USB.VAR.USB1_CONFIG_STRING_COUNT.VALUE=1 +DRIVER.USB.VAR.USB_BASE.VALUE=0xFCF78A00 +DRIVER.USB.VAR.USB1_CONTROL_INTERFACE_STRING.VALUE=0 +DRIVER.USB.VAR.USB1_CONFIG_STRING.VALUE=0 +DRIVER.USB.VAR.USB1_CDC.VALUE=1 +DRIVER.USB.VAR.USB1_PRODUCT_STRING_COUNT.VALUE=1 +DRIVER.USB.VAR.USB1_PRODUCTID.VALUE=0x0000 +DRIVER.USB.VAR.USB1_PRODUCT_STRING.VALUE=0 +DRIVER.USB.VAR.USB1_UART_BUFFER_SIZE.VALUE=0x0001 +DRIVER.USB.VAR.USB1_SERIAL_NUM_STRING.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT14_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT17_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT17_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT4_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT1_DIR.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT18_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT0_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT15_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT4_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT2_DIR.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT7_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT15_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT18_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT0_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_BASE.VALUE=0xFFFFF700 +DRIVER.DMM.VAR.DMM_PORT_BIT1_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT3_DIR.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT9_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT1_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT2_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT2_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT0_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT5_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT4_DIR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT8_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT16_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT2_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT13_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT3_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_BASE_PORT.VALUE=0xFFFFF770 +DRIVER.DMM.VAR.DMM_PORT_BIT1_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT5_DIR.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT10_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT3_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT4_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT2_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT6_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT6_DIR.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT7_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT9_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT17_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT4_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT5_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT3_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT0_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT7_DIR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT18_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT11_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT11_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT5_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT6_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT4_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT8_DIR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT7_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT18_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT6_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT10_DIR.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT7_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT5_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT5_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT1_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT9_DIR.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT12_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT7_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT11_DIR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT8_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT16_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT6_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT8_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT10_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT8_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT12_DIR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT9_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT10_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT7_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT2_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT10_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT13_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT11_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT9_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT13_DIR.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT3_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT11_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT8_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT9_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT12_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT10_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT14_DIR.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT14_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT0_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT12_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT9_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT3_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT11_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT14_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT13_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT11_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT15_DIR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT13_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT8_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT14_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT12_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT16_DIR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT1_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT14_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT4_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT12_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT15_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT15_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT12_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT13_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT17_DIR.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT15_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT16_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT14_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT18_DIR.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT2_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT6_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT16_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT5_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT13_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT16_DOUT.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT17_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT15_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT17_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT17_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT10_PULDIS.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT18_FUN.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT16_PSL.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT3_PULL.VALUE=2 +DRIVER.DMM.VAR.DMM_PORT_BIT0_DIR.VALUE=1 +DRIVER.DMM.VAR.DMM_PORT_BIT18_PDR.VALUE=0 +DRIVER.DMM.VAR.DMM_PORT_BIT6_DOUT.VALUE=0 +DRIVER.I2C.VAR.I2C_PORT_BIT0_DIR.VALUE=0 +DRIVER.I2C.VAR.I2C_STOPBITS.VALUE=2 +DRIVER.I2C.VAR.I2C_PORT_BIT1_DIR.VALUE=0 +DRIVER.I2C.VAR.I2C_ICXRDYINTLVL.VALUE=0 +DRIVER.I2C.VAR.I2C_BASE_PORT.VALUE=0xFFF7D44C +DRIVER.I2C.VAR.I2C_DATACOUNT.VALUE=8 +DRIVER.I2C.VAR.I2C_ADDRMODE.VALUE=7BIT_AMODE +DRIVER.I2C.VAR.I2C_PORT_BIT0_FUN.VALUE=0 +DRIVER.I2C.VAR.I2C_PORT_BIT0_PDR.VALUE=0 +DRIVER.I2C.VAR.I2C_BC_VALUE.VALUE=0x0003 +DRIVER.I2C.VAR.I2C_PORT_BIT1_FUN.VALUE=0 +DRIVER.I2C.VAR.I2C_RM_ENA.VALUE=0 +DRIVER.I2C.VAR.I2C_BC.VALUE=8_BIT +DRIVER.I2C.VAR.I2C_PORT_BIT1_PDR.VALUE=0 +DRIVER.I2C.VAR.I2C_TXRX_VALUE.VALUE=0 +DRIVER.I2C.VAR.I2C_SCDLVL.VALUE=0 +DRIVER.I2C.VAR.I2C_PORT_BIT0_PSL.VALUE=1 +DRIVER.I2C.VAR.I2C_STPCND.VALUE=1 +DRIVER.I2C.VAR.I2C_ALINTENA.VALUE=0 +DRIVER.I2C.VAR.I2C_PRESCALE.VALUE=13 +DRIVER.I2C.VAR.I2C_PORT_BIT1_PSL.VALUE=1 +DRIVER.I2C.VAR.I2C_TXRX.VALUE=TRANSMITTER +DRIVER.I2C.VAR.I2C_PORT_BIT0_DOUT.VALUE=0 +DRIVER.I2C.VAR.I2C_ALINTLVL.VALUE=0 +DRIVER.I2C.VAR.I2C_RXDMA.VALUE=0 +DRIVER.I2C.VAR.I2C_PORT_BIT0_PULDIS.VALUE=0 +DRIVER.I2C.VAR.I2C_BASE.VALUE=0xFFF7D400 +DRIVER.I2C.VAR.I2C_ARDYINTENA.VALUE=0 +DRIVER.I2C.VAR.I2C_PORT_BIT1_DOUT.VALUE=0 +DRIVER.I2C.VAR.I2C_TXDMA.VALUE=0 +DRIVER.I2C.VAR.I2C_MSMODE.VALUE=1 +DRIVER.I2C.VAR.I2C_ICCH.VALUE=34 +DRIVER.I2C.VAR.I2C_AASLVL.VALUE=0 +DRIVER.I2C.VAR.I2C_ICCL.VALUE=34 +DRIVER.I2C.VAR.I2C_AAS.VALUE=0 +DRIVER.I2C.VAR.I2C_BCM.VALUE=0 +DRIVER.I2C.VAR.I2C_ADDRMODE_VALUE.VALUE=0x0001 +DRIVER.I2C.VAR.I2C_ICRRDYINTENA.VALUE=0 +DRIVER.I2C.VAR.I2C_FDF.VALUE=0 +DRIVER.I2C.VAR.I2C_ARDYINTLVL.VALUE=0 +DRIVER.I2C.VAR.I2C_PARITYENA.VALUE=0 +DRIVER.I2C.VAR.I2C_PORT_BIT0_PULL.VALUE=2 +DRIVER.I2C.VAR.I2C_LENGTH.VALUE=8 +DRIVER.I2C.VAR.I2C_NACKINTENA.VALUE=0 +DRIVER.I2C.VAR.I2C_SCD.VALUE=0 +DRIVER.I2C.VAR.I2C_PORT_BIT1_PULL.VALUE=2 +DRIVER.I2C.VAR.I2C_ICRRDYINTLVL.VALUE=0 +DRIVER.I2C.VAR.I2C_STACND.VALUE=1 +DRIVER.I2C.VAR.I2C_PORT_BIT1_PULDIS.VALUE=0 +DRIVER.I2C.VAR.I2C_ICXRDYINTENA.VALUE=0 +DRIVER.I2C.VAR.I2C_NACKINTLVL.VALUE=0 +DRIVER.I2C.VAR.I2C_EVENPARITY.VALUE=0 +DRIVER.I2C.VAR.I2C_BAUDRATE.VALUE=100 +DRIVER.I2C.VAR.I2C_MODCLK.VALUE=8 +DRIVER.DCC.VAR.DCC1_ENABLE_KEY.VALUE=10 +DRIVER.DCC.VAR.PINMUX_BASE.VALUE=0xFFFFEA00 +DRIVER.DCC.VAR.DCC1_DETECTION_TIME.VALUE=2500.00 +DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1_VALUE.VALUE=0x0002 +DRIVER.DCC.VAR.DCC1_ENABLE_ERROR_INTERRUPT.VALUE=0xA +DRIVER.DCC.VAR.DCC2_ENABLE.VALUE=0xA +DRIVER.DCC.VAR.PINMUX_BASE_PORT.VALUE=0xFFFFEA40 +DRIVER.DCC.VAR.DCC2_ENABLE_ERROR_INTERRUPT.VALUE=0xA +DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0_VALUE.VALUE=0x0001 +DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0_FREQ.VALUE=0 +DRIVER.DCC.VAR.DCC2_VALID0_SEED.VALUE=0 +DRIVER.DCC.VAR.DCC2_CLKT_N2HET2_0_FREQ.VALUE=1 +DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1_FREQ.VALUE=0 +DRIVER.DCC.VAR.DCC2_DETECTION_TIME.VALUE=2500.00 +DRIVER.DCC.VAR.DCC2_CLOCK_DRIFT.VALUE=1.0 +DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1_VALUE.VALUE=0x0002 +DRIVER.DCC.VAR.DCC1_CLKT_N2HET1_31_FREQ.VALUE=1 +DRIVER.DCC.VAR.DCC2_COUNT0_SEED.VALUE=0 +DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0.VALUE=OSCIN +DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1.VALUE=VCLK +DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0_FREQ.VALUE=16.0 +DRIVER.DCC.VAR.DCC1_VALID0_SEED.VALUE=792 +DRIVER.DCC.VAR.DCC1_BASE.VALUE=0xFFFFEC00 +DRIVER.DCC.VAR.DCC2_COUNT1_SEED.VALUE=0 +DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1_FREQ.VALUE=220.0 +DRIVER.DCC.VAR.DCC1_CLOCK_DRIFT.VALUE=1.0 +DRIVER.DCC.VAR.DCC1_ENABLE.VALUE=0xA +DRIVER.DCC.VAR.DCC1_ENABLE_SINGLESHOT_MODE.VALUE=0x5 +DRIVER.DCC.VAR.DCC2_ENABLE_SINGLESHOT_MODE.VALUE=0x5 +DRIVER.DCC.VAR.DCC2_BASE.VALUE=0xFFFFF400 +DRIVER.DCC.VAR.DCC1_DONE_INTERRUPT_ENABLE.VALUE=0xA +DRIVER.DCC.VAR.DCC2_DONE_INTERRUPT_ENABLE.VALUE=0xA +DRIVER.DCC.VAR.DCC2_ENABLE_KEY.VALUE=0xA +DRIVER.DCC.VAR.DCC1_COUNT0_SEED.VALUE=39204 +DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0_VALUE.VALUE=0x0001 +DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0.VALUE=OSCIN +DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1.VALUE=PLL1 +DRIVER.DCC.VAR.CLKT_TCK_FREQ.VALUE=12.0 +DRIVER.DCC.VAR.DCC1_COUNT1_SEED.VALUE=544500 +DRIVER.PINMUX.VAR.DMA_EIDXS_28.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_20.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_12.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_2.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_2.VALUE=0 +DRIVER.PINMUX.VAR.MUX61_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX53_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX45_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX37_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX29_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX7_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_29.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_21.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_13.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_3.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_3.VALUE=0 +DRIVER.PINMUX.VAR.MUX61_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX53_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX45_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX37_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX29_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX7_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_30.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_22.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_14.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_10.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_4.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_4.VALUE=0 +DRIVER.PINMUX.VAR.ETPWM_TIME_BASE_SELECT.VALUE=OFF +DRIVER.PINMUX.VAR.MUX61_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX53_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX50_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX45_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX42_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX37_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX34_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX29_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX26_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX18_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_31.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_29_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_27_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXD_23.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_19_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXD_15.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_11.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_7_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_5.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_5.VALUE=0 +DRIVER.PINMUX.VAR.MUX61_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX53_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX45_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX37_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX29_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_24.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_20.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_16.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_12.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_6.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_6.VALUE=0 +DRIVER.PINMUX.VAR.MUX61_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX53_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX45_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX37_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX29_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_25.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_21.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_17.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_13.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_7.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_7.VALUE=0 +DRIVER.PINMUX.VAR.MUX61_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX53_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX45_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX37_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX29_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_30.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_26.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_22.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_18.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_14.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_8.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_8.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_10.VALUE=1 +DRIVER.PINMUX.VAR.MUX99_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_96_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_88_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_5_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_31.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_27.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_23.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_21_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXD_19.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_15.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_13_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_9.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_9.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_11.VALUE=1 +DRIVER.PINMUX.VAR.DMA_FIDXD_28.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_24.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_16.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_12.VALUE=1 +DRIVER.PINMUX.VAR.MUX30_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX22_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX14_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_29.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_25.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_17.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_13.VALUE=1 +DRIVER.PINMUX.VAR.MUX30_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX22_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX14_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_26.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_18.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_14.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_10.VALUE=1 +DRIVER.PINMUX.VAR.MUX30_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX22_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX14_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_81_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_73_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_65_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_57_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_49_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_27.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_19.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_6_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_15.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTMP_14_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_11.VALUE=1 +DRIVER.PINMUX.VAR.DMA_CHPR_8_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TRIG_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX30_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX22_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX14_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_28.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_16.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_12.VALUE=1 +DRIVER.PINMUX.VAR.MUX30_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX22_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX14_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_29.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_13.VALUE=1 +DRIVER.PINMUX.VAR.MUX30_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX22_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX14_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_14.VALUE=1 +DRIVER.PINMUX.VAR.MUX101_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_50_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_42_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_34_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_26_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_18_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_28_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_9_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_8_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TRIG_16_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_15.VALUE=1 +DRIVER.PINMUX.VAR.DMA_ENABLEINT_1.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_16.VALUE=1 +DRIVER.PINMUX.VAR.DMA_ENABLEINT_2.VALUE=1 +DRIVER.PINMUX.VAR.DMA_ENABLEINT_3.VALUE=1 +DRIVER.PINMUX.VAR.DMA_PRITY_10.VALUE=FIXED +DRIVER.PINMUX.VAR.DMA_ENABLEINT_4.VALUE=1 +DRIVER.PINMUX.VAR.PINMUX10.VALUE=PINMUX_PIN_86_AD1EVT +DRIVER.PINMUX.VAR.MUX11_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_11_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_PRITY_11.VALUE=FIXED +DRIVER.PINMUX.VAR.DMA_CHPR_10_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_PRITY_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.PINMUX11.VALUE=PINMUX_PIN_91_HET1_24 +DRIVER.PINMUX.VAR.DMA_PRITY_12.VALUE=FIXED +DRIVER.PINMUX.VAR.PINMUX20.VALUE=PINMUX_PIN_130_MIBSPI1NCS_1 +DRIVER.PINMUX.VAR.PINMUX12.VALUE="PINMUX_PIN_92_HET1_26 | PINMUX_PIN_96_MIBSPI1NENA | PINMUX_PIN_97_MIBSPI5NENA" +DRIVER.PINMUX.VAR.DMA_PRITY_13.VALUE=FIXED +DRIVER.PINMUX.VAR.PINMUX21.VALUE=PINMUX_PIN_133_GIOB_1 +DRIVER.PINMUX.VAR.PINMUX13.VALUE="PINMUX_PIN_98_MIBSPI5SOMI_0 | PINMUX_PIN_99_MIBSPI5SIMO_0 | PINMUX_PIN_100_MIBSPI5CLK | PINMUX_PIN_105_MIBSPI1NCS_0" +DRIVER.PINMUX.VAR.DMA_PRITY_14.VALUE=FIXED +DRIVER.PINMUX.VAR.PINMUX14.VALUE="PINMUX_PIN_106_HET1_08 | PINMUX_PIN_107_HET1_28" +DRIVER.PINMUX.VAR.MUX92_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX84_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX76_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX68_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_21_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_13_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_10_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_PRITY_15.VALUE=FIXED +DRIVER.PINMUX.VAR.DMA_PRITY_16.VALUE=FIXED +DRIVER.PINMUX.VAR.PINMUX33.VALUE="PINMUX_PIN_36_HET1_04 | PINMUX_PIN_51_MIBSPI3SOMI | PINMUX_PIN_52_MIBSPI3SIMO | PINMUX_PIN_53_MIBSPI3CLK" +DRIVER.PINMUX.VAR.PINMUX17.VALUE="PINMUX_PIN_118_HET1_10 | PINMUX_PIN_124_HET1_12" +DRIVER.PINMUX.VAR.PINMUX34.VALUE="PINMUX_PIN_139_HET1_16 | PINMUX_PIN_140_HET1_18 | PINMUX_PIN_141_HET1_20" +DRIVER.PINMUX.VAR.PINMUX18.VALUE="PINMUX_PIN_125_HET1_14 | PINMUX_PIN_126_GIOB_0" +DRIVER.PINMUX.VAR.DMA_ADDMR_26_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_20_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_18_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_12_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_10_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.PINMUX35.VALUE=0 +DRIVER.PINMUX.VAR.PINMUX27.VALUE=PINMUX_PIN_32_MIBSPI5NCS_0 +DRIVER.PINMUX.VAR.PINMUX19.VALUE=PINMUX_PIN_127_HET1_30 +DRIVER.PINMUX.VAR.MUX98_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX98_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_10.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.MUX98_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX7_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_11.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_PRITY_10_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TRIG_9_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX98_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_20.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_12.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.MUX100_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX98_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_21.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_13.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.MUX100_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_30.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_22.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_14.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_FIDXS_0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_0.VALUE=ENABLED +DRIVER.PINMUX.VAR.MUX100_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_109_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_31.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_23.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_15.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_TTYPE_6_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXS_1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_1.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_ENABLEREG_1.VALUE=1 +DRIVER.PINMUX.VAR.MUX100_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_24.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_16.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_FIDXS_2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_2.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_ENABLEREG_2.VALUE=1 +DRIVER.PINMUX.VAR.MUX100_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX91_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX83_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX75_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX67_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX59_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_25.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_17.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_FIDXS_3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_3.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_ENABLEREG_3.VALUE=1 +DRIVER.PINMUX.VAR.MUX91_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX83_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX75_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX67_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX59_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_26.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_18.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_FIDXS_4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_4.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_ENABLEREG_4.VALUE=1 +DRIVER.PINMUX.VAR.MUX91_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX83_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX75_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX67_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX61_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX59_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX53_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX45_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX37_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX29_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_102_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_30_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_27.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_22_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_19.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_14_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_11_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXS_5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_5.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_ADDMR_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_0_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHPR_15_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_PRITY_6_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX91_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX83_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX75_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX67_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX59_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_28.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_FIDXS_6.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_6.VALUE=ENABLED +DRIVER.PINMUX.VAR.ETPWM2_EQEPERR12.VALUE=EQEPERR12 +DRIVER.PINMUX.VAR.MUX91_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX83_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX75_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX67_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX59_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX6_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_29.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_FIDXS_7.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_7.VALUE=ENABLED +DRIVER.PINMUX.VAR.MUX59_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX6_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXS_8.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_8.VALUE=ENABLED +DRIVER.PINMUX.VAR.MUX6_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_31_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_26_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_23_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_18_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_15_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXS_9.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_9.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_8_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX6_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX60_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX52_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX44_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX36_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX28_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX6_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX60_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX52_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX44_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX36_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX28_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX6_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_10.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_10.VALUE=0 +DRIVER.PINMUX.VAR.MUX60_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX52_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX44_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX36_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX28_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_31_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_25_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_23_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_17_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_15_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_11.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_11.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTASS_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX60_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX52_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX44_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX36_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX28_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_20.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_20.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_12.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_12.VALUE=0 +DRIVER.PINMUX.VAR.MUX60_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX52_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX44_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX36_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX28_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_21.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_21.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_13.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_13.VALUE=0 +DRIVER.PINMUX.VAR.MUX60_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX52_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX44_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX36_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX28_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_30.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_30.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_22.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_22.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_14.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_14.VALUE=0 +DRIVER.PINMUX.VAR.MUX104_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_94_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_86_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_78_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_3_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_31.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_31.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_23.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_23.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_15.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_15.VALUE=0 +DRIVER.PINMUX.VAR.DMA_PRITY_15_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_6_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ACC_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_STADD_1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_24.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_24.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_16.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_16.VALUE=0 +DRIVER.PINMUX.VAR.DMA_STADD_2.VALUE=0 +DRIVER.PINMUX.VAR.MUX21_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX13_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_25.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_25.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_17.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_17.VALUE=0 +DRIVER.PINMUX.VAR.DMA_STADD_3.VALUE=0 +DRIVER.PINMUX.VAR.MUX21_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX13_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_26.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_26.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_18.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_18.VALUE=0 +DRIVER.PINMUX.VAR.DMA_STADD_4.VALUE=0 +DRIVER.PINMUX.VAR.MUX30_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX22_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX21_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX14_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX13_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_71_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_63_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_55_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_47_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_39_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_27.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_27.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_19.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_19.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_10_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHPR_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX21_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX13_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_28.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_28.VALUE=0 +DRIVER.PINMUX.VAR.MUX21_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX13_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_29.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_29.VALUE=0 +DRIVER.PINMUX.VAR.MUX21_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX13_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_0.VALUE=0 +DRIVER.PINMUX.VAR.MUX95_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX87_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX79_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_40_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_32_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_24_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_16_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_27_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_24_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_19_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_16_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_8_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_5_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TRIG_12_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_2.VALUE=0 +DRIVER.PINMUX.VAR.ETPWM7_EQEPERR12.VALUE=EQEPERR12 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_0.VALUE=CONSTANT +DRIVER.PINMUX.VAR.ETPWM_TBCLK_SELECT.VALUE=OFF +DRIVER.PINMUX.VAR.DMA_TTYPE_28_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_1.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_6.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_2.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_7.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_3.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_8.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_4.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_0.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_28_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_9.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_8_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_5.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_1.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_ADDMR_6.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_2.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_ADDMR_7.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_3.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_ADDMR_8.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_4.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_ADDMR_30_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_22_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_14_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_9.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_5.VALUE=8BIT +DRIVER.PINMUX.VAR.GATE_EMIF_CLK.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_6.VALUE=8BIT +DRIVER.PINMUX.VAR.MUX97_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX89_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_7.VALUE=8BIT +DRIVER.PINMUX.VAR.MUX97_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX89_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_8.VALUE=8BIT +DRIVER.PINMUX.VAR.MUX97_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX89_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX80_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX72_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX64_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX56_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX48_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_9.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_ADDMW_7_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_15_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHPR_9_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TRIG_5_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX97_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX89_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX97_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX89_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_107_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_29_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_9_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX90_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX82_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX74_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX66_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX58_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_DEBUGMODE.VALUE=IGNORE_SUSPEND +DRIVER.PINMUX.VAR.MUX90_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX82_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX74_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX66_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX58_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_0.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_ERRACT.VALUE=IGNORE +DRIVER.PINMUX.VAR.MUX90_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX82_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX74_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX66_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX58_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX3_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_100_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_10_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_1.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_CHPR_11_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_PRITY_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX90_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX82_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX74_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX66_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX58_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_2.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_BASE_PORT.VALUE=0xFFFFF040 +DRIVER.PINMUX.VAR.MUX90_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX82_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX74_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX66_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX58_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX5_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_3.VALUE=CONSTANT +DRIVER.PINMUX.VAR.MUX58_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX5_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_4.VALUE=CONSTANT +DRIVER.PINMUX.VAR.MUX5_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_30_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_22_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_14_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_11_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_5.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTFTCEN_1.VALUE=1 +DRIVER.PINMUX.VAR.MUX5_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_6.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_INTFTCEN_2.VALUE=1 +DRIVER.PINMUX.VAR.MUX51_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX43_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX35_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX27_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX19_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX5_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_7.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_INTFTCEN_3.VALUE=1 +DRIVER.PINMUX.VAR.MUX51_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX43_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX35_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX27_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX19_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX5_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_8.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_INTEN_10.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTFTCEN_4.VALUE=1 +DRIVER.PINMUX.VAR.MUX51_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX43_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX41_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX35_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX33_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX27_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX25_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX19_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX17_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_99_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_8_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_27_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_21_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_19_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_13_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_11_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_9.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_INTEN_11.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTFTCEN_5.VALUE=1 +DRIVER.PINMUX.VAR.MUX51_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX43_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX35_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX27_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX19_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTEN_12.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTFTCEN_6.VALUE=1 +DRIVER.PINMUX.VAR.MUX51_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX43_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX35_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX27_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX19_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTEN_13.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTFTCEN_7.VALUE=1 +DRIVER.PINMUX.VAR.MUX51_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX43_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX35_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX27_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX19_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTEN_14.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTFTCEN_8.VALUE=1 +DRIVER.PINMUX.VAR.ALT_ADC_SELECT.VALUE=1 +DRIVER.PINMUX.VAR.MUX98_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_92_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_84_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_76_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_68_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_1_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTEN_15.VALUE=1 +DRIVER.PINMUX.VAR.DMA_PRITY_11_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTFTCEN_9.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTMP_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTEN_16.VALUE=1 +DRIVER.PINMUX.VAR.MUX20_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX12_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX20_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX12_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX20_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX12_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_61_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_53_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_45_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_37_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_29_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_7_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX20_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX12_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX20_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX12_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX20_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX12_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX100_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_30_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_22_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_14_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_31_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_23_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_20_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_15_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_12_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_0_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHPR_16_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_PRITY_7_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX10_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_27_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_24_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_19_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_16_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_9_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ENDADD_1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ENDADD_2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ENDADD_3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ENDADD_4.VALUE=0 +DRIVER.PINMUX.VAR.ETHERNET_SELECT.VALUE=RMII +DRIVER.PINMUX.VAR.MUX91_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX83_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX75_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX67_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX59_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_26_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_24_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_18_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_16_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTASS_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTASS_1.VALUE=TO_VIM +DRIVER.PINMUX.VAR.DMA_INTASS_2.VALUE=TO_VIM +DRIVER.PINMUX.VAR.ETPWM5_EQEPERR12.VALUE=EQEPERR12 +DRIVER.PINMUX.VAR.CONCOUNT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTASS_3.VALUE=TO_VIM +DRIVER.PINMUX.VAR.DMA_INTASS_4.VALUE=TO_VIM +DRIVER.PINMUX.VAR.DMA_ADDMR_10_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_PRITY_16_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_7_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHAS_1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ACC_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHAS_2.VALUE=0 +DRIVER.PINMUX.VAR.MUX96_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX88_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHAS_3.VALUE=0 +DRIVER.PINMUX.VAR.MUX96_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX88_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXS_10.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_10.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_0.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_CHAS_4.VALUE=0 +DRIVER.PINMUX.VAR.MUX96_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX88_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX6_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXS_11.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_11.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_ADDMW_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_1.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_INTMP_11_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHAS_5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHPR_5_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TRIG_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX96_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX88_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXS_20.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_20.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_FIDXS_12.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_12.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_2.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_CHAS_6.VALUE=0 +DRIVER.PINMUX.VAR.MUX96_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX88_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXS_21.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_21.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_FIDXS_13.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_13.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_3.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_CHAS_7.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXS_30.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_30.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_FIDXS_22.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_22.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_FIDXS_14.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_14.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_4.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_CHAS_8.VALUE=0 +DRIVER.PINMUX.VAR.GIOB_DISABLE_SELECT.VALUE=OFF +DRIVER.PINMUX.VAR.PIN_MUX_105_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXS_31.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_31.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_28_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_25_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXS_23.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_23.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_ADDMW_17_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXS_15.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_15.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_ADDMR_9_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_6_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_5_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_5.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_TRIG_13_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHAS_9.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXS_24.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_24.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_FIDXS_16.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_16.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_6.VALUE=8BIT +DRIVER.PINMUX.VAR.MUX81_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX73_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX65_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX57_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX49_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXS_25.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_25.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_FIDXS_17.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_17.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_7.VALUE=8BIT +DRIVER.PINMUX.VAR.MUX81_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX73_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX65_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX57_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX49_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXS_26.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_26.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_FIDXS_18.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_18.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_8.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_0.VALUE=0 +DRIVER.PINMUX.VAR.MUX81_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX73_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX65_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX60_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX57_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX52_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX49_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX44_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX36_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX28_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_29_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXS_27.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_27.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_FIDXS_19.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_19.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_9.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ENABLE1.VALUE=1 +DRIVER.PINMUX.VAR.MUX81_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX73_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX65_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX57_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX49_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXS_28.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_28.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_2.VALUE=0 +DRIVER.PINMUX.VAR.MUX81_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX73_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX65_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX57_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX49_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX4_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXS_29.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_29.VALUE=ENABLED +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_3.VALUE=0 +DRIVER.PINMUX.VAR.MUX57_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX49_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX4_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_BYP_10.VALUE=1 +DRIVER.PINMUX.VAR.ECAP.VALUE=0 +DRIVER.PINMUX.VAR.MUX4_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_29_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_10_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_9_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_0_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_BYP_11.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_1.VALUE=1 +DRIVER.PINMUX.VAR.MUX4_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_6.VALUE=0 +DRIVER.PINMUX.VAR.DMA_BYP_12.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_2.VALUE=1 +DRIVER.PINMUX.VAR.MUX50_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX42_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX34_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX26_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX18_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX4_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_7.VALUE=0 +DRIVER.PINMUX.VAR.DMA_BYP_13.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_3.VALUE=1 +DRIVER.PINMUX.VAR.MUX50_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX42_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX34_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX26_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX18_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX4_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_8.VALUE=0 +DRIVER.PINMUX.VAR.DMA_BYP_14.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_4.VALUE=1 +DRIVER.PINMUX.VAR.MUX50_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX42_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX34_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX26_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX18_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_97_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_89_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_6_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_31_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_23_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_15_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_IFT_COUNT_9.VALUE=0 +DRIVER.PINMUX.VAR.DMA_BYP_15.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_5.VALUE=1 +DRIVER.PINMUX.VAR.DMA_PRITY_1.VALUE=FIXED +DRIVER.PINMUX.VAR.MUX50_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX42_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX34_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX26_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX18_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_BYP_16.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_6.VALUE=1 +DRIVER.PINMUX.VAR.DMA_PRITY_2.VALUE=FIXED +DRIVER.PINMUX.VAR.MUX50_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX42_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX34_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX26_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX18_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_7.VALUE=1 +DRIVER.PINMUX.VAR.DMA_PRITY_3.VALUE=FIXED +DRIVER.PINMUX.VAR.MUX50_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX42_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX34_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX26_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX18_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_8.VALUE=1 +DRIVER.PINMUX.VAR.DMA_PRITY_4.VALUE=FIXED +DRIVER.PINMUX.VAR.MUX103_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_90_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_82_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_74_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_66_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_58_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_8_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_16_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTBTCEN_9.VALUE=1 +DRIVER.PINMUX.VAR.DMA_TRIG_6_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_PRITY_5.VALUE=FIXED +DRIVER.PINMUX.VAR.DMA_PRITY_6.VALUE=FIXED +DRIVER.PINMUX.VAR.MUX11_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_PRITY_7.VALUE=FIXED +DRIVER.PINMUX.VAR.MUX11_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_PRITY_8.VALUE=FIXED +DRIVER.PINMUX.VAR.MUX21_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX13_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX11_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_51_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_43_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_35_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_27_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_19_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_PRITY_9.VALUE=FIXED +DRIVER.PINMUX.VAR.MUX11_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX11_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.ETPWM_TBCLK_SYNC_ENABLE.VALUE=0 +DRIVER.PINMUX.VAR.AD1.VALUE=0 +DRIVER.PINMUX.VAR.MUX11_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.AD2.VALUE=0 +DRIVER.PINMUX.VAR.MUX94_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX86_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX78_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_20_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_12_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_11_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_0_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHPR_12_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_PRITY_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_31_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_23_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_20_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_15_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_12_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_5_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX9_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_30_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_28_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_22_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_20_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_14_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_12_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_0_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX104_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX104_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX104_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_PRITY_12_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.ALT_ADC.VALUE=0 +DRIVER.PINMUX.VAR.I2C.VALUE=0 +DRIVER.PINMUX.VAR.MUX104_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX104_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX95_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX87_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX79_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX95_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX87_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX79_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX95_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX87_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX79_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX71_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX63_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX55_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX47_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX39_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_8_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHPR_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_DEBUGMODE_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX95_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX87_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX79_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.ETPWM3_EQEPERR12.VALUE=EQEPERR12 +DRIVER.PINMUX.VAR.MUX95_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX87_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX79_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_10.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_103_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_24_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_21_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_16_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_13_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_11.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_5_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_PRITY_8_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_20.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_12.VALUE=0 +DRIVER.PINMUX.VAR.MUX80_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX72_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX64_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX56_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX48_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_21.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_13.VALUE=0 +DRIVER.PINMUX.VAR.HET1.VALUE=0 +DRIVER.PINMUX.VAR.MUX80_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX72_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX64_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX56_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX48_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_30.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_22.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_14.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_10.VALUE=0 +DRIVER.PINMUX.VAR.HET2.VALUE=0 +DRIVER.PINMUX.VAR.MUX80_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX72_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX64_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX56_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX48_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX2_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_31.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_28_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_25_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_23.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_17_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_15.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_11.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTEN_1.VALUE=1 +DRIVER.PINMUX.VAR.MUX80_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX72_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX64_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX56_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX48_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_24.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_20.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_16.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_12.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTEN_2.VALUE=1 +DRIVER.PINMUX.VAR.MUX80_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX72_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX64_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX56_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX48_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX3_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_25.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_21.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_17.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_13.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTEN_3.VALUE=1 +DRIVER.PINMUX.VAR.MUX56_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX48_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX3_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_30.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_26.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_22.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_18.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_14.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_10.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_INTEN_4.VALUE=1 +DRIVER.PINMUX.VAR.MUX3_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_31.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_27_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_27.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_25_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_EIDXD_23.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_19_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_19.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_17_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_EIDXD_15.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_11.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_AIM_5_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTEN_5.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTASS_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX3_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_28.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_24.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_20.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_EIDXD_16.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_12.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_INTEN_6.VALUE=1 +DRIVER.PINMUX.VAR.EMIF.VALUE=0 +DRIVER.PINMUX.VAR.MUX41_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX33_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX25_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX17_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX3_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CP0_ISADDR_29.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_25.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_21.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_EIDXD_17.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_13.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_INTEN_7.VALUE=1 +DRIVER.PINMUX.VAR.ETPWM_TZ1.VALUE=ASYNC +DRIVER.PINMUX.VAR.MUX41_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX33_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX25_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX17_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX3_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_30.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_EIDXD_26.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_22.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_EIDXD_18.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_14.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_10.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTEN_8.VALUE=1 +DRIVER.PINMUX.VAR.ETPWM_TZ2.VALUE=ASYNC +DRIVER.PINMUX.VAR.MUX41_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX40_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX33_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX32_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX25_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX24_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX17_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX16_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_95_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_87_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_79_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_4_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_31.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_EIDXD_27.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_23.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_EIDXD_19.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_15.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_ADDMR_11_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_IET_COUNT_11.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTEN_9.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTMP_8_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ACC_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.ETPWM_TZ3.VALUE=ASYNC +DRIVER.PINMUX.VAR.MUX41_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX33_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX25_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX17_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_28.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_24.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_20.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_16.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_12.VALUE=0 +DRIVER.PINMUX.VAR.MUX41_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX33_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX25_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX17_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_29.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_25.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_21.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_17.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_13.VALUE=0 +DRIVER.PINMUX.VAR.MUX41_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX33_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX25_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX17_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IET_COUNT_30.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_26.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_22.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_18.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_14.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_10.VALUE=8BIT +DRIVER.PINMUX.VAR.MUX97_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX89_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_80_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_72_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_64_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_56_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_48_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IET_COUNT_31.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_27.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_23.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_19.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_15.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_11.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_ADDMW_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_12_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHPR_6_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TRIG_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.GIOA.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_28.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_24.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_20.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_16.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_12.VALUE=8BIT +DRIVER.PINMUX.VAR.GIOB.VALUE=0 +DRIVER.PINMUX.VAR.MUX10_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_29.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_25.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_21.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_17.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_13.VALUE=8BIT +DRIVER.PINMUX.VAR.GIOB_DISABLE.VALUE=0 +DRIVER.PINMUX.VAR.MUX10_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_30.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_26.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_22.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_18.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_14.VALUE=8BIT +DRIVER.PINMUX.VAR.MUX10_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_41_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_33_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_25_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_17_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_31.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_29_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_IET_COUNT_27.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_26_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_23.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_19.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_18_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_15.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_CHANNEL_7_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_6_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TRIG_14_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX10_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IET_COUNT_28.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_24.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_16.VALUE=8BIT +DRIVER.PINMUX.VAR.MUX10_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IET_COUNT_29.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_25.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_17.VALUE=8BIT +DRIVER.PINMUX.VAR.MUX10_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_26.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_18.VALUE=8BIT +DRIVER.PINMUX.VAR.PIN_MUX_10_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_27.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_19.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_BYP_1.VALUE=1 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_28.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_BYP_2.VALUE=1 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_29.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_BYP_3.VALUE=1 +DRIVER.PINMUX.VAR.DMA_BYP_4.VALUE=1 +DRIVER.PINMUX.VAR.EQEP.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_11_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_BYP_5.VALUE=1 +DRIVER.PINMUX.VAR.DMA_BYP_6.VALUE=1 +DRIVER.PINMUX.VAR.DMA_BYP_7.VALUE=1 +DRIVER.PINMUX.VAR.DMA_BYP_8.VALUE=1 +DRIVER.PINMUX.VAR.MUX90_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX82_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX74_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX66_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX58_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_24_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_16_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_10_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_BYP_9.VALUE=1 +DRIVER.PINMUX.VAR.MIBSPI1.VALUE=0 +DRIVER.PINMUX.VAR.MUX103_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MIBSPI3.VALUE=0 +DRIVER.PINMUX.VAR.MUX103_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.OHCI0.VALUE=0 +DRIVER.PINMUX.VAR.MUX103_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_9_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TRIG_7_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MIBSPI5.VALUE=0 +DRIVER.PINMUX.VAR.DMM.VALUE=0 +DRIVER.PINMUX.VAR.W2FC.VALUE=0 +DRIVER.PINMUX.VAR.OHCI1.VALUE=0 +DRIVER.PINMUX.VAR.MUX103_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX103_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX94_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX86_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX78_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX94_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX86_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX78_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX94_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX86_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX78_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX5_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_108_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX94_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX86_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX78_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX94_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX86_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX78_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX9_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX9_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHPR_10.VALUE=HIGH +DRIVER.PINMUX.VAR.MUX9_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_101_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_20_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_12_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_EIDXD_1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHPR_13_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHPR_11.VALUE=HIGH +DRIVER.PINMUX.VAR.DMA_PRITY_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX9_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHPR_12.VALUE=HIGH +DRIVER.PINMUX.VAR.MUX71_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX63_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX55_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX47_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX39_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX9_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXD_3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHPR_13.VALUE=HIGH +DRIVER.PINMUX.VAR.MUX71_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX63_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX55_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX47_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX39_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX9_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_10.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_EIDXD_4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IET_COUNT_0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHPR_14.VALUE=HIGH +DRIVER.PINMUX.VAR.MUX71_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX63_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX55_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX51_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX47_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX43_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX39_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX35_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX27_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX19_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_24_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_21_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_16_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_13_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_11.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_6_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_EIDXD_5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IET_COUNT_1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHPR_15.VALUE=HIGH +DRIVER.PINMUX.VAR.MUX71_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX63_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX55_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX47_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX39_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_20.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_ADDMW_12.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_EIDXD_6.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IET_COUNT_2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHPR_16.VALUE=HIGH +DRIVER.PINMUX.VAR.ETPWM1_EQEPERR12.VALUE=EQEPERR12 +DRIVER.PINMUX.VAR.MUX71_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX63_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX55_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX47_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX39_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX2_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_21.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_ADDMW_13.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_EIDXD_7.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IET_COUNT_3.VALUE=0 +DRIVER.PINMUX.VAR.MUX63_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX55_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX47_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX39_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX2_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_30.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_ADDMW_22.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_ADDMW_14.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_EIDXD_8.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IET_COUNT_4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TRIG_10.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.MUX2_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_9_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_31.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_CHANNEL_31_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_29_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_23.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_CHANNEL_23_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_21_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_15.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_CHANNEL_15_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_13_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_EIDXD_9.VALUE=0 +DRIVER.PINMUX.VAR.DMA_IET_COUNT_5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TRIG_11.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.MUX2_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_24.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_ADDMW_16.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_6.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TRIG_12.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.MUX40_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX32_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX24_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX16_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX2_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_25.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_ADDMW_17.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_7.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TRIG_13.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.MUX40_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX32_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX24_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX16_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX2_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_26.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_ADDMW_18.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_8.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TRIG_14.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.DMA_INTFTCEN_10.VALUE=1 +DRIVER.PINMUX.VAR.MUX40_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX32_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX24_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX16_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_93_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_85_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_77_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_69_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_2_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_27.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_ADDMW_19.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_IET_COUNT_9.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TRIG_15.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.DMA_PRITY_13_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTFTCEN_11.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTMP_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX40_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX32_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX24_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX16_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_28.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_TRIG_16.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.DMA_INTFTCEN_12.VALUE=1 +DRIVER.PINMUX.VAR.MUX40_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX32_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX24_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX16_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_29.VALUE=CONSTANT +DRIVER.PINMUX.VAR.DMA_INTFTCEN_13.VALUE=1 +DRIVER.PINMUX.VAR.MUX40_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX32_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX24_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX16_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTFTCEN_14.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTHBCEN_10.VALUE=1 +DRIVER.PINMUX.VAR.MUX102_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_70_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_62_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_54_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_46_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_38_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_9_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_0_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTFTCEN_15.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTHBCEN_11.VALUE=1 +DRIVER.PINMUX.VAR.DMA_CHPR_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ERRACT_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MII.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTFTCEN_16.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTHBCEN_12.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTHBCEN_13.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTHBCEN_14.VALUE=1 +DRIVER.PINMUX.VAR.GATE_EMIF_CLK_SELECT.VALUE=OFF +DRIVER.PINMUX.VAR.MUX20_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX12_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_31_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_23_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_15_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_30_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_25_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_22_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_17_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_14_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_6_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTHBCEN_15.VALUE=1 +DRIVER.PINMUX.VAR.DMA_TRIG_10_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_PRITY_9_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHPR_1.VALUE=HIGH +DRIVER.PINMUX.VAR.DMA_INTHBCEN_16.VALUE=1 +DRIVER.PINMUX.VAR.DMA_CHPR_2.VALUE=HIGH +DRIVER.PINMUX.VAR.DMA_CHPR_3.VALUE=HIGH +DRIVER.PINMUX.VAR.ETPWM_TIME_BASE_SYNC_ENABLE.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTMP_10.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_CHPR_4.VALUE=HIGH +DRIVER.PINMUX.VAR.MUX93_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX85_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX77_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX69_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_29_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_26_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_18_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_11.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_CHPR_5.VALUE=HIGH +DRIVER.PINMUX.VAR.DMA_TRIG_1.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.ETPWM_EPWM1SYNCI.VALUE=ASYNC +DRIVER.PINMUX.VAR.DMA_INTMP_12.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_CHPR_6.VALUE=HIGH +DRIVER.PINMUX.VAR.DMA_TRIG_2.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.ETPWM6_EQEPERR12.VALUE=EQEPERR12 +DRIVER.PINMUX.VAR.DMA_INTMP_13.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_CHPR_7.VALUE=HIGH +DRIVER.PINMUX.VAR.DMA_TRIG_3.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.DMA_INTMP_14.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_CHPR_8.VALUE=HIGH +DRIVER.PINMUX.VAR.DMA_TRIG_4.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.DMA_CHANNEL_28_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_26_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_18_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_6_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_15.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_CHPR_9.VALUE=HIGH +DRIVER.PINMUX.VAR.DMA_TRIG_5.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.DMA_INTHBCEN_1.VALUE=1 +DRIVER.PINMUX.VAR.SCI.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTMP_16.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_TRIG_6.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.DMA_INTHBCEN_2.VALUE=1 +DRIVER.PINMUX.VAR.DMA_TRIG_7.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.DMA_INTHBCEN_3.VALUE=1 +DRIVER.PINMUX.VAR.DMA_TRIG_8.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.DMA_INTHBCEN_4.VALUE=1 +DRIVER.PINMUX.VAR.MUX8_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_20_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_12_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_9_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TRIG_9.VALUE=HARDWARE_TRIGGER +DRIVER.PINMUX.VAR.DMA_INTHBCEN_5.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTMP_1.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_INTHBCEN_6.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTMP_2.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_ENABLEPAR.VALUE=1 +DRIVER.PINMUX.VAR.MUX102_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTHBCEN_7.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTMP_3.VALUE=GROUP_A +DRIVER.PINMUX.VAR.MUX102_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTHBCEN_8.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTMP_4.VALUE=GROUP_A +DRIVER.PINMUX.VAR.MUX102_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_5_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_13_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTHBCEN_9.VALUE=1 +DRIVER.PINMUX.VAR.DMA_CHPR_7_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_5.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_TRIG_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ACC_1.VALUE=ALL +DRIVER.PINMUX.VAR.ETPWM.VALUE=0 +DRIVER.PINMUX.VAR.MUX102_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTMP_6.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_ACC_2.VALUE=ALL +DRIVER.PINMUX.VAR.MUX102_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX93_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX85_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX77_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX69_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTMP_7.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_ACC_3.VALUE=ALL +DRIVER.PINMUX.VAR.MUX93_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX85_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX77_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX69_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTMP_8.VALUE=GROUP_A +DRIVER.PINMUX.VAR.DMA_ACC_4.VALUE=ALL +DRIVER.PINMUX.VAR.MUX93_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX85_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX77_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX70_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX69_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX62_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX54_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX46_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX38_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_106_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_27_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_19_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_8_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_7_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_0_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TRIG_15_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTMP_9.VALUE=GROUP_A +DRIVER.PINMUX.VAR.MUX93_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX85_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX77_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX69_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX93_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX85_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX77_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX69_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX8_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX8_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX8_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_BASE.VALUE=0xFFFFF000 +DRIVER.PINMUX.VAR.MUX8_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX70_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX62_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX54_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX46_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX38_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX8_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX70_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX62_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX54_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX46_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX38_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX8_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX70_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX62_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX54_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX46_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX38_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX1_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_20_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_12_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX70_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX62_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX54_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX46_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX38_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX70_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX62_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX54_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX46_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX38_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX1_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX62_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX54_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX46_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX38_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX1_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX1_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_98_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_7_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_25_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_17_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_11_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX1_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX31_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX23_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX15_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX1_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX31_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX23_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX15_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX1_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX31_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX31_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX23_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX23_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX15_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX15_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_91_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_83_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_75_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_67_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_59_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TRIG_8_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX31_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX23_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX15_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX31_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX23_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX15_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX31_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX23_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.MUX15_OPTION5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_0.VALUE=0 +DRIVER.PINMUX.VAR.MUX96_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX88_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_60_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_52_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_44_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_36_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_28_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_5_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_EIDXS_1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_0.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_21_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_13_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_21_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_13_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMW_10_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_EIDXS_5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMR_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXD_1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHPR_14_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_PRITY_5_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_BASE_RAM.VALUE=0xFFF80000 +DRIVER.PINMUX.VAR.DMA_EIDXS_6.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_7.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_8.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHAS_10.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_30_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_25_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_22_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_AIM_17_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TTYPE_14_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_EIDXS_9.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_7_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXD_5.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHAS_11.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_1.VALUE=1 +DRIVER.PINMUX.VAR.DMA_FIDXD_6.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHAS_12.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_2.VALUE=1 +DRIVER.PINMUX.VAR.SPI2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_7.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHAS_13.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_3.VALUE=1 +DRIVER.PINMUX.VAR.DMA_FIDXD_8.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHAS_14.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_4.VALUE=1 +DRIVER.PINMUX.VAR.SPI4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_30_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_24_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_22_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_16_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_14_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXD_9.VALUE=0 +DRIVER.PINMUX.VAR.DMA_AIM_2_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHAS_15.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_5.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTASS_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.RMII.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHAS_16.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_6.VALUE=1 +DRIVER.PINMUX.VAR.PINMUX0.VALUE="PINMUX_PIN_1_GIOB_3 | PINMUX_PIN_2_GIOA_0 | PINMUX_PIN_3_MIBSPI3NCS_3 | PINMUX_PIN_4_MIBSPI3NCS_2" +DRIVER.PINMUX.VAR.MUX99_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_7.VALUE=1 +DRIVER.PINMUX.VAR.PINMUX1.VALUE="PINMUX_PIN_5_GIOA_1 | PINMUX_PIN_6_HET1_11" +DRIVER.PINMUX.VAR.MUX99_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_10.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_INTLFSEN_8.VALUE=1 +DRIVER.PINMUX.VAR.PINMUX2.VALUE="PINMUX_PIN_9_GIOA_2 | PINMUX_PIN_14_GIOA_5" +DRIVER.PINMUX.VAR.MUX99_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX81_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX73_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX65_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX57_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.MUX49_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_11.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_PRITY_14_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_INTLFSEN_9.VALUE=1 +DRIVER.PINMUX.VAR.DMA_INTMP_5_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ACC_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.PINMUX3.VALUE="PINMUX_PIN_15_HET1_22 | PINMUX_PIN_16_GIOA_6" +DRIVER.PINMUX.VAR.MUX99_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_20.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_12.VALUE=8BIT +DRIVER.PINMUX.VAR.ETPWM4_EQEPERR12.VALUE=EQEPERR12 +DRIVER.PINMUX.VAR.PINMUX4.VALUE="PINMUX_PIN_22_GIOA_7 | PINMUX_PIN_23_HET1_01 | PINMUX_PIN_24_HET1_03" +DRIVER.PINMUX.VAR.MUX101_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX99_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_21.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_13.VALUE=8BIT +DRIVER.PINMUX.VAR.PINMUX5.VALUE="PINMUX_PIN_25_HET1_0 | PINMUX_PIN_30_HET1_02 | PINMUX_PIN_31_HET1_05" +DRIVER.PINMUX.VAR.MUX101_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_30.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_22.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_14.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_EIDXS_10.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_0.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.PINMUX6.VALUE="PINMUX_PIN_33_HET1_07 | PINMUX_PIN_35_HET1_09" +DRIVER.PINMUX.VAR.MUX101_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_31.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_23.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_15.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_EIDXS_11.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_1_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_1.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_CHPR_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.ALT_ADC_A.VALUE=0 +DRIVER.PINMUX.VAR.PINMUX7.VALUE="PINMUX_PIN_37_MIBSPI3NCS_1 | PINMUX_PIN_38_HET1_06" +DRIVER.PINMUX.VAR.MUX101_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_24.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_EIDXS_20.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_16.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_EIDXS_12.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_2.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.ALT_ADC_B.VALUE=0 +DRIVER.PINMUX.VAR.PINMUX8.VALUE="PINMUX_PIN_39_HET1_13 | PINMUX_PIN_40_MIBSPI1NCS_2 | PINMUX_PIN_41_HET1_15" +DRIVER.PINMUX.VAR.MUX101_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX92_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX84_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX76_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX68_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_25.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_EIDXS_21.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_17.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_EIDXS_13.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_3.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.PINMUX9.VALUE="PINMUX_PIN_54_MIBSPI3NENA | PINMUX_PIN_55_MIBSPI3NCS_0" +DRIVER.PINMUX.VAR.MUX92_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX84_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX76_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX68_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_30.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_26.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_EIDXS_22.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_18.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_EIDXS_14.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_4.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.MUX92_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX84_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX76_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX68_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.MUX4_CONFLICT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_104_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_31.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_31_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_27.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_26_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_EIDXS_23.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_23_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_19.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_18_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_EIDXS_15.VALUE=0 +DRIVER.PINMUX.VAR.DMA_ADDMW_15_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_ADDMR_7_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_CHANNEL_5.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_4_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_3_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_TRIG_11_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.MUX92_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX84_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX76_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.MUX68_OPTION3.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_28.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_EIDXS_24.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_16.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_6.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.MUX92_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX84_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX76_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX68_OPTION4.VALUE=0 +DRIVER.PINMUX.VAR.MUX7_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_29.VALUE=8BIT +DRIVER.PINMUX.VAR.DMA_EIDXS_25.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_17.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_7.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.MUX7_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_26.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_18.VALUE=0 +DRIVER.PINMUX.VAR.DMA_FIDXD_10.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_8.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_TTYPE_0.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_0.VALUE=0 +DRIVER.PINMUX.VAR.MUX7_OPTION2.VALUE=0 +DRIVER.PINMUX.VAR.DMA_EIDXS_27.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_27_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_EIDXS_19.VALUE=0 +DRIVER.PINMUX.VAR.DMA_TTYPE_19_VALUE.VALUE=0x0001 +DRIVER.PINMUX.VAR.DMA_FIDXD_11.VALUE=0 +DRIVER.PINMUX.VAR.DMA_CHANNEL_9.VALUE=CHANNEL0 +DRIVER.PINMUX.VAR.DMA_TTYPE_1.VALUE=FRAME_TRANSFER +DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_1.VALUE=0 +DRIVER.PINMUX.VAR.MUX7_OPTION3.VALUE=0 +DRIVER.CRC.VAR.CRC_CH2_PSIH.VALUE=0 +DRIVER.CRC.VAR.HTU_CPB_7_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.CRC_CH2_PSIL.VALUE=0 +DRIVER.CRC.VAR.HTU_DCP0_TRDIR_1.VALUE=HET_TO_MAIN_MEM +DRIVER.CRC.VAR.CRC_CH1_CCI.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_ICPBL_7_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_ICPA_5_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_ICPB_1_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_DEBMOD_1.VALUE=0 +DRIVER.CRC.VAR.CRC_CH1_CFI.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_ICPAL_1_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_ENABUS_1.VALUE=0 +DRIVER.CRC.VAR.HTU_CPA_2_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.CRC_CH2_WDTO.VALUE=0x00000000 +DRIVER.CRC.VAR.CRC_CH2_CCI.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_MP1_ACC_1.VALUE=READ_ONLY +DRIVER.CRC.VAR.HTU_CONTPAR_1.VALUE=0 +DRIVER.CRC.VAR.CRC_CH2_CFI.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_ICPB_6_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_DCP0_EC_1.VALUE=0 +DRIVER.CRC.VAR.HTU_DCP0_CPBFULADD_1.VALUE=0 +DRIVER.CRC.VAR.HTU_ICPAL_6_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_CPA_7_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_CPB_3_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.CRC_CH1_DTE.VALUE=0 +DRIVER.CRC.VAR.HTU_DCP0_FC_1.VALUE=0 +DRIVER.CRC.VAR.CRC_CH1_CVH.VALUE=0x00000000 +DRIVER.CRC.VAR.CRC_CH1_PSSIH.VALUE=0 +DRIVER.CRC.VAR.HTU_BASE.VALUE=0xFFF7A400 +DRIVER.CRC.VAR.CRC_CH1_CVL.VALUE=0x00000000 +DRIVER.CRC.VAR.CRC_CH1_PSSIL.VALUE=0 +DRIVER.CRC.VAR.HTU_ICPBL_3_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_ICPA_1_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.CRC_CH2_DTE.VALUE=1 +DRIVER.CRC.VAR.CRC_CH2_CVH.VALUE=0x00000000 +DRIVER.CRC.VAR.CRC_CH2_CVL.VALUE=0x00000000 +DRIVER.CRC.VAR.CRC_CH1_PCP.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_ICPA_6_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_ICPB_2_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.CRC_CH1_SCP.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_DCP0_CPAFULADD_1.VALUE=0 +DRIVER.CRC.VAR.HTU_ICPAL_2_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.CRC_CH2_PCP.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_CPA_3_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.CRC_CH1_PSA.VALUE=1 +DRIVER.CRC.VAR.CRC_CH1_ORI.VALUE=0x00000000 +DRIVER.CRC.VAR.CRC_CH2_SCP.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_MP1_STADD_1.VALUE=0 +DRIVER.CRC.VAR.HTU_ICPB_7_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.CRC_CH1_TOE.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_ICPAL_7_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.CRC_CH2_PSA.VALUE=1 +DRIVER.CRC.VAR.CRC_CH2_ORI.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_CPB_4_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_MP0_ENA_1.VALUE=0 +DRIVER.CRC.VAR.CRC_CH2_MODE_VALUE.VALUE=0x0001 +DRIVER.CRC.VAR.CRC_CH1_URI.VALUE=0x00000000 +DRIVER.CRC.VAR.CRC_CH2_PSSIH.VALUE=0 +DRIVER.CRC.VAR.CRC_CH2_TOE.VALUE=0x00000000 +DRIVER.CRC.VAR.CRC_CH2_PSSIL.VALUE=0 +DRIVER.CRC.VAR.CRC_CH1_BCTO.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_ICPBL_4_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_ICPA_2_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_PAR_1.VALUE=0 +DRIVER.CRC.VAR.CRC_CH2_URI.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_CONT_1.VALUE=0 +DRIVER.CRC.VAR.HTU_ENAREQ_1.VALUE=0 +DRIVER.CRC.VAR.HTU_MP1_ERRENA_1.VALUE=0 +DRIVER.CRC.VAR.HTU_MP0_STADD_1.VALUE=0 +DRIVER.CRC.VAR.HTU_ICPA_7_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_ICPB_3_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_ICPAL_3_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_CPA_4_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_CPB_0_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.CRC_CH2_BCTO.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_DCP0_MMADD_1.VALUE=POST_INCREMENT +DRIVER.CRC.VAR.HTU_ENAINTMAP_1.VALUE=0 +DRIVER.CRC.VAR.CRC_CH1_MODE_VALUE.VALUE=0x0001 +DRIVER.CRC.VAR.HTU_ICPBL_0_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_CPB_5_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_MP1_ENA_1.VALUE=0 +DRIVER.CRC.VAR.HTU_DCP0_HETADD.VALUE=0 +DRIVER.CRC.VAR.HTU_ICPBL_5_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_ICPA_3_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_CPA_0_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_RES_1.VALUE=0 +DRIVER.CRC.VAR.HTU_DCP0_CPATMOD_1.VALUE=POST_INCREMENT +DRIVER.CRC.VAR.HTU_MP1_ENDADD_1.VALUE=0 +DRIVER.CRC.VAR.HTU_ICPB_4_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.CRC_BASE.VALUE=0xFE000000 +DRIVER.CRC.VAR.HTU_ICPAL_4_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.CRC_CH1_MODE.VALUE=FULL_CPU +DRIVER.CRC.VAR.HTU_CPA_5_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_CPB_1_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_VBHOLD_1.VALUE=0 +DRIVER.CRC.VAR.HTU_MP0_ERRENA_1.VALUE=0 +DRIVER.CRC.VAR.HTU_ICPBL_1_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_CPB_6_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.CRC_CH2_MODE.VALUE=FULL_CPU +DRIVER.CRC.VAR.HTU_DCP0_TRDAT_1.VALUE=32BIT +DRIVER.CRC.VAR.HTU_ICPBL_6_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_ICPA_4_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_ICPB_0_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_ICPAL_0_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_CPA_1_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_DCP0_CPBTMOD_1.VALUE=POST_INCREMENT +DRIVER.CRC.VAR.CRC_CH1_PSIH.VALUE=0 +DRIVER.CRC.VAR.HTU_MP0_ACC_1.VALUE=READ_ONLY +DRIVER.CRC.VAR.CRC_CH1_PSIL.VALUE=0 +DRIVER.CRC.VAR.HTU_ICPB_5_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_ICPAL_5_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_DCP0_ADMOD_1.VALUE=INCREMENT_16BIT +DRIVER.CRC.VAR.HTU_CPA_6_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_CPB_2_SEL_1.VALUE=ENABLE +DRIVER.CRC.VAR.HTU_ENA_1.VALUE=0 +DRIVER.CRC.VAR.CRC_CH1_WDTO.VALUE=0x00000000 +DRIVER.CRC.VAR.HTU_MP0_ENDADD_1.VALUE=0 +DRIVER.CRC.VAR.HTU_ICPBL_2_SEL_1.VALUE=HIGH +DRIVER.CRC.VAR.HTU_ICPA_0_SEL_1.VALUE=ENABLE +DRIVER.EMAC.VAR.EMAC_ADD1.VALUE=FF +DRIVER.EMAC.VAR.EMAC_ADD2.VALUE=FF +DRIVER.EMAC.VAR.EMAC_ADD3.VALUE=FF +DRIVER.EMAC.VAR.EMAC_ADD4.VALUE=FF +DRIVER.EMAC.VAR.EMAC_ADD5.VALUE=FF +DRIVER.EMAC.VAR.EMAC_ADD6.VALUE=FF +DRIVER.EMAC.VAR.EMAC_CTRL_BASE.VALUE=0xFCF78800 +DRIVER.EMAC.VAR.EMAC_LOOPBACK_ENA.VALUE=0 +DRIVER.EMAC.VAR.MDIO_BASE.VALUE=0xFCF78900 +DRIVER.EMAC.VAR.EMAC_BASE.VALUE=0xFCF78000 +DRIVER.EMAC.VAR.EMAC_BASE_PORT.VALUE=0xFFFFFFFF +DRIVER.EMAC.VAR.EMAC_TRANSMIT_ENA.VALUE=1 +DRIVER.EMAC.VAR.EMAC_CHANNELNUMBER.VALUE=0 +DRIVER.EMAC.VAR.EMAC_RX_PBUF_ALLOC.VALUE=10 +DRIVER.EMAC.VAR.EMAC_UNICAST_ENA.VALUE=1 +DRIVER.EMAC.VAR.EMAC_FULL_DUPLEX_ENA.VALUE=1 +DRIVER.EMAC.VAR.EMAC_PHYADDRESS.VALUE=0 +DRIVER.EMAC.VAR.EMAC_MII_ENA.VALUE=1 +DRIVER.EMAC.VAR.EMAC_CTRL_RAM_BASE.VALUE=0xFC520000 +DRIVER.EMAC.VAR.EMAC_BROADCAST_ENA.VALUE=1 +DRIVER.EMAC.VAR.EMAC_RECEIVE_ENA.VALUE=1 +DRIVER.EMIF.VAR.EMIF_ASYNC2_TAVAV.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_TD.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_EXTENDED_WAIT.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_TH.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_TA.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_WAIT.VALUE=pin0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_TD.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_NOR_FLASH.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_TEHQZ.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_TH.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_TA.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_TD.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ENA_SDRAM.VALUE=1 +DRIVER.EMIF.VAR.EMIF_ASYNC3_TH.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_TELQV.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_MODE.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_ENA.VALUE=1 +DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_CYCLES.VALUE=0 +DRIVER.EMIF.VAR.EMIF_AVAILABLE.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_TEHEL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_ENA.VALUE=1 +DRIVER.EMIF.VAR.EMIF_ASYNC1_R_STROBE.VALUE=63 +DRIVER.EMIF.VAR.EMIF_ASYNC3_TELEH.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_STROBE_MODE.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_ENA.VALUE=1 +DRIVER.EMIF.VAR.EMIF_ASYNC1_ASIZE.VALUE=8_bit +DRIVER.EMIF.VAR.EMIF_SDRAM_TRC_VAL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_TAVAV.VALUE=0 +DRIVER.EMIF.VAR.EMIF_SDRAM_BANKS.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_DELAY_VAL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS_VAL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD_VAL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_BASE.VALUE=0xFCFFE800 +DRIVER.EMIF.VAR.EMIF_ASYNC3_TEHQZ.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_W_STROBE.VALUE=63 +DRIVER.EMIF.VAR.EMIF_ASYNC3_TELQV.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_SIZE.VALUE=4_words +DRIVER.EMIF.VAR.EMIF_CLKFRQ.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_W_HOLD.VALUE=7 +DRIVER.EMIF.VAR.EMIF_ASYNC2_R_HOLD.VALUE=7 +DRIVER.EMIF.VAR.EMIF_SDRAM_TREFRESH_VAL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_R_SETUP.VALUE=15 +DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR_VAL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_TSU.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_EXTENDED_WAIT.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_ASIZE.VALUE=8_bit +DRIVER.EMIF.VAR.EMIF_ASYNC2_TSU.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_W_SETUP.VALUE=15 +DRIVER.EMIF.VAR.EMIF_ASYNC3_NOR_FLASH.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_DELAY_VAL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_W_HOLD.VALUE=7 +DRIVER.EMIF.VAR.EMIF_SDRAM_INIT_TIME.VALUE=200 +DRIVER.EMIF.VAR.EMIF_SDRAM_TREFRESH_DEFAULT.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_TSU.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_MODE.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_STROBE_MODE.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_R_SETUP.VALUE=15 +DRIVER.EMIF.VAR.EMIF_SDRAM_TWR_VAL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_R_STROBE.VALUE=63 +DRIVER.EMIF.VAR.EMIF_CLK.VALUE=0 +DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_W_SETUP.VALUE=15 +DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_ASIZE.VALUE=8_bit +DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_NOR_FLASH.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_DELAY.VALUE=0 +DRIVER.EMIF.VAR.EMIF_SDRAM_CAS_LATENCY.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC_WAIT_POLARITY0.VALUE=pin_low +DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD_VAL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC_WAIT_POLARITY1.VALUE=pin_high +DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_MODE.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_R_SETUP.VALUE=15 +DRIVER.EMIF.VAR.EMIF_SDRAM_TRC.VALUE=0 +DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_DELAY_VAL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_W_STROBE.VALUE=63 +DRIVER.EMIF.VAR.EMIF_ASYNC1_TEHEL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC_MAX_EXT_WAIT.VALUE=0 +DRIVER.EMIF.VAR.EMIF_SDRAM_TRP.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_SIZE.VALUE=4_words +DRIVER.EMIF.VAR.EMIF_ASYNC1_W_SETUP.VALUE=15 +DRIVER.EMIF.VAR.EMIF_ASYNC1_TELEH.VALUE=0 +DRIVER.EMIF.VAR.EMIF_MS.VALUE=0.001 +DRIVER.EMIF.VAR.EMIF_NS.VALUE=0.000000001 +DRIVER.EMIF.VAR.EMIF_SDRAM_TWR.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_EXTENDED_WAIT.VALUE=0 +DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_PERIOD.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC3_R_HOLD.VALUE=7 +DRIVER.EMIF.VAR.EMIF_ASYNC1_TAVAV.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_DELAY.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_WAIT.VALUE=pin0 +DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_TEHQZ.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_R_STROBE.VALUE=63 +DRIVER.EMIF.VAR.EMIF_ASYNC1_TELQV.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_STROBE_MODE.VALUE=0 +DRIVER.EMIF.VAR.EMIF_SDRAM_TRP_VAL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_W_HOLD.VALUE=7 +DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_SIZE.VALUE=4_words +DRIVER.EMIF.VAR.EMIF_ASYNC2_WAIT.VALUE=pin0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_TEHEL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC_VAL.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_R_HOLD.VALUE=7 +DRIVER.EMIF.VAR.EMIF_SDRAM_PAGE_SIZE.VALUE=elements_256 +DRIVER.EMIF.VAR.EMIF_ASYNC2_TELEH.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_DELAY.VALUE=0 +DRIVER.EMIF.VAR.EMIF_IBANK.VALUE=0 +DRIVER.EMIF.VAR.EMIF_ASYNC2_W_STROBE.VALUE=63 +DRIVER.EMIF.VAR.EMIF_ASYNC1_TA.VALUE=0 +DRIVER.POM.VAR.POM_OVRLY_START_ADD28.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD29.VALUE=0x00000000 +DRIVER.POM.VAR.POM_REGION_10_ENA.VALUE=0 +DRIVER.POM.VAR.POM_TIMEOUT_ENABLE.VALUE=0 +DRIVER.POM.VAR.POM_REGION_11_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_20_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_12_ENA.VALUE=0 +DRIVER.POM.VAR.POM_NO_OF_REGION.VALUE=1 +DRIVER.POM.VAR.POM_REGION_21_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_13_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_30_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_22_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_14_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_31_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_23_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_15_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_1_ENA.VALUE=1 +DRIVER.POM.VAR.POM_REGION_32_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_24_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_16_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_2_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_25_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_17_ENA.VALUE=0 +DRIVER.POM.VAR.POM_OVRLY_START_ADD1.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD2.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD3.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD4.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD5.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD6.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD7.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD8.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVLY_TRG_REGION.VALUE=INTERNAL_RAM +DRIVER.POM.VAR.POM_OVRLY_START_ADD9.VALUE=0x00000000 +DRIVER.POM.VAR.POM_REGION_3_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_26_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_18_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_4_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_27_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_19_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_5_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_28_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_6_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_SIZE10.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE11.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE20.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE12.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_29_ENA.VALUE=0 +DRIVER.POM.VAR.POM_REGION_SIZE21.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE13.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE30.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE22.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE14.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE31.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE23.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE15.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE32.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE24.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE16.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE25.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE17.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE26.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE18.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE27.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE19.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE28.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE29.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_7_ENA.VALUE=0 +DRIVER.POM.VAR.POM_BASE.VALUE=0xFFA04000 +DRIVER.POM.VAR.POM_PROG_START_ADD10.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD11.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD20.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD12.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD21.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD13.VALUE=0x00000000 +DRIVER.POM.VAR.POM_REGION_8_ENA.VALUE=0 +DRIVER.POM.VAR.POM_PROG_START_ADD30.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD22.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD14.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD31.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD23.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD15.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD32.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD24.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD16.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD25.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD17.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD26.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD18.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD27.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD19.VALUE=0x00000000 +DRIVER.POM.VAR.POM_REGION_SIZE1.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_PROG_START_ADD28.VALUE=0x00000000 +DRIVER.POM.VAR.POM_REGION_SIZE2.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_PROG_START_ADD29.VALUE=0x00000000 +DRIVER.POM.VAR.POM_REGION_SIZE3.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE4.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE5.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE6.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE7.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE8.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_SIZE9.VALUE=SIZE_64BYTES +DRIVER.POM.VAR.POM_REGION_9_ENA.VALUE=0 +DRIVER.POM.VAR.POM_PROG_START_ADD1.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD2.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD3.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD4.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD5.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD6.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD7.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD8.VALUE=0x00000000 +DRIVER.POM.VAR.POM_PROG_START_ADD9.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD10.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD11.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD20.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD12.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD21.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD13.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD30.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD22.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD14.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD31.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD23.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD15.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD32.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD24.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD16.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD25.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD17.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD26.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD18.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD27.VALUE=0x00000000 +DRIVER.POM.VAR.POM_OVRLY_START_ADD19.VALUE=0x00000000 +DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN2_ENABLE.VALUE=0 +DRIVER.PMM.VAR.PMM_PWR_DOMAIN5_ENABLE.VALUE=0 +DRIVER.PMM.VAR.PMM_PWR_DOMAIN3_ENABLE.VALUE=0 +DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN3_ENABLE.VALUE=0 +DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN1_ENABLE.VALUE=0 +DRIVER.PMM.VAR.PMM_PWR_DOMAIN4_ENABLE.VALUE=0 +DRIVER.PMM.VAR.PMM_PWR_DOMAIN2_ENABLE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD_REG.VALUE=1000 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_CLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_SOCA_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_INPUT.VALUE=PWMA_RED_FED +DRIVER.ETPWM.VAR.ETPWM7_BASE.VALUE=0xFCF79200 +DRIVER.ETPWM.VAR.ETPWM5_TB_ACTUALFREQUENCY.VALUE=80.000 +DRIVER.ETPWM.VAR.ETPWM6_DCBEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_DCBEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCA.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_CBC.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCB.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM6_RDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY_NEW.VALUE=50.0 +DRIVER.ETPWM.VAR.ETPWM7_SOCB_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM1_OSHT_ACTUAL_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM1_OSHT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_OSHT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCA.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_OSHT3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCB.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_OSHT4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM1_OSHT5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD_REG.VALUE=1000 +DRIVER.ETPWM.VAR.ETPWM1_OSHT6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM2_CBC.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_CLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_SOCB_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_MODE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL +DRIVER.ETPWM.VAR.ETPWM4_PWMB_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCA.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCB.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM5_DCAEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_DCAEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME.VALUE=50.000 +DRIVER.ETPWM.VAR.ETPWM6_OSHT_ACTUAL_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_OSHT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_OSHT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM1_SOCB_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_OSHT3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM3_CBC.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_TB_ACTUALFREQUENCY.VALUE=80.000 +DRIVER.ETPWM.VAR.ETPWM1_FDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_OSHT4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_OSHT5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_OSHT6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_INPUT.VALUE=PWMA_RED_FED +DRIVER.ETPWM.VAR.ETPWM6_SELECT_SOCA.VALUE=DCAEVT1 +DRIVER.ETPWM.VAR.ETPWM6_SELECT_SOCB.VALUE=DCBEVT1 +DRIVER.ETPWM.VAR.ETPWM6_SELECT_EVENT.VALUE=NO_EVENT +DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD_REG.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM5_DCBEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM5_DCBEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_MODE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_CLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_TB_FREQUENCY.VALUE=110.000 +DRIVER.ETPWM.VAR.ETPWM4_CBC.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_SELECT_SOCA.VALUE=DCAEVT1 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_SELECT_SOCB.VALUE=DCBEVT1 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL +DRIVER.ETPWM.VAR.ETPWM6_FDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_RDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME.VALUE=50.000 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM3_SELECT_EVENT.VALUE=NO_EVENT +DRIVER.ETPWM.VAR.ETPWM2_CLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_INPUT.VALUE=PWMA_RED_FED +DRIVER.ETPWM.VAR.ETPWM5_CBC.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_CBC1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_CBC2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_CBC3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTYTIME_REG.VALUE=3 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM1_CBC4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_CBC5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_CBC6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_DCAEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD_REG.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME_REG.VALUE=3 +DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_MODE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM4_DCAEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_TB_ACTUALFREQUENCY.VALUE=80.000 +DRIVER.ETPWM.VAR.ETPWM3_TB_FREQUENCY.VALUE=110.000 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME_REG.VALUE=3 +DRIVER.ETPWM.VAR.ETPWM2_OSHT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM1_HSPCLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_INTERRUPT_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM2_OSHT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_OSHT3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_OSHT4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME_REG.VALUE=3 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM2_OSHT5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL +DRIVER.ETPWM.VAR.ETPWM3_PWMB_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM2_OSHT6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_CBC.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME.VALUE=50.000 +DRIVER.ETPWM.VAR.ETPWM5_OSHT_ACTUAL_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM4_DCBEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_SOCA_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_DCBEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM7_OSHT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD_REG.VALUE=1000 +DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM7_OSHT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM7_CBC.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_OSHT3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_CBC1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_OSHT4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_CBC2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_HSPCLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_OSHT5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM2_CBC3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD_REG.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_CLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_OSHT6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_SOCA_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM2_CBC4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_OST.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_ACTUALPERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM3_FDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_CBC5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_CLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_CBC6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_INPUT.VALUE=PWMA_RED_FED +DRIVER.ETPWM.VAR.ETPWM6_INTERRUPT_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_ACTUALPERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCA.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM1_BASE.VALUE=0xFCF78C00 +DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCB.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_ACTUALPERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL +DRIVER.ETPWM.VAR.ETPWM4_TB_ACTUALFREQUENCY.VALUE=80.000 +DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_ACTUALPERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM6_SOCB_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME.VALUE=50.000 +DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM3_DCAEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_DCAEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_OST.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCA.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCB.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM5_RDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD_REG.VALUE=1000 +DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_SOCB_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_CBC1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_SELECT_EVENT.VALUE=NO_EVENT +DRIVER.ETPWM.VAR.ETPWM3_CBC2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_DCBEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_CBC3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_INTERRUPT_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM3_OST.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_DCBEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_CBC4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_INPUT.VALUE=PWMA_RED_FED +DRIVER.ETPWM.VAR.ETPWM3_CBC5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_CBC6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM2_BASE.VALUE=0xFCF78D00 +DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY_NEW.VALUE=50.0 +DRIVER.ETPWM.VAR.ETPWM7_CLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_MODE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_OSHT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_OSHT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_TB_FREQUENCY.VALUE=110.000 +DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCA.VALUE=DCAEVT1 +DRIVER.ETPWM.VAR.ETPWM3_OSHT3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME.VALUE=50.000 +DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCB.VALUE=DCBEVT1 +DRIVER.ETPWM.VAR.ETPWM4_OSHT_ACTUAL_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM3_OSHT4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM3_OSHT5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_OSHT6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_TB_ACTUALFREQUENCY.VALUE=80.000 +DRIVER.ETPWM.VAR.ETPWM5_CLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM4_OST.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD_REG.VALUE=1000 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM1_CLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCA.VALUE=DCAEVT1 +DRIVER.ETPWM.VAR.ETPWM4_SELECT_EVENT.VALUE=NO_EVENT +DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCB.VALUE=DCBEVT1 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM2_DCAEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_INTERRUPT_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM2_DCAEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_CBC1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM4_CBC2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_CBC3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_MODE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM5_OST.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_CBC4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_CBC5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_TB_FREQUENCY.VALUE=110.000 +DRIVER.ETPWM.VAR.ETPWM4_CBC6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY_NEW.VALUE=50.0 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM5_FDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_BASE.VALUE=0xFCF78E00 +DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME.VALUE=50.000 +DRIVER.ETPWM.VAR.ETPWM2_RDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM2_DCBEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM2_DCBEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM1_SELECT_EVENT.VALUE=NO_EVENT +DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD_REG.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM7_SOCA_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_OST.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_TB_ACTUALFREQUENCY.VALUE=80.000 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL +DRIVER.ETPWM.VAR.ETPWM3_INTERRUPT_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM7_RDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM1_TB_FREQUENCY.VALUE=110.000 +DRIVER.ETPWM.VAR.ETPWM3_CLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_CLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_SOCA_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM5_CBC1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM5_CBC2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM5_CBC3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY_NEW.VALUE=50.0 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM7_OST.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_CBC4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_CBC5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTYTIME.VALUE=50.000 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_INVERT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_CBC6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_OSHT_ACTUAL_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_INPUT.VALUE=PWMA_RED_FED +DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM4_BASE.VALUE=0xFCF78F00 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM4_OSHT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_DCAEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_OSHT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_SOCA_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM1_DCAEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_OSHT3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_OSHT4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD_REG.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM4_OSHT5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_OSHT6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCA.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCB.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_SOCB_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL +DRIVER.ETPWM.VAR.ETPWM2_INTERRUPT_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM2_FDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME_REG.VALUE=3 +DRIVER.ETPWM.VAR.ETPWM1_DCBEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM1_DCBEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_TB_ACTUALFREQUENCY.VALUE=80.000 +DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCA.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCB.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME_REG.VALUE=3 +DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTY_NEW.VALUE=50.0 +DRIVER.ETPWM.VAR.ETPWM6_CBC1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM6_CBC2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_CBC3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME_REG.VALUE=3 +DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_CBC4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_SOCB_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_CBC5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_CBC6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD_REG.VALUE=1000 +DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_MODE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCA.VALUE=DCAEVT1 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM5_BASE.VALUE=0xFCF79000 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCB.VALUE=DCBEVT1 +DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM1_CLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD_REG.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_FDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_RDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM7_DCAEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM7_DCAEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_CLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL +DRIVER.ETPWM.VAR.ETPWM1_INTERRUPT_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCA.VALUE=DCAEVT1 +DRIVER.ETPWM.VAR.ETPWM5_SELECT_EVENT.VALUE=NO_EVENT +DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCB.VALUE=DCBEVT1 +DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY_NEW.VALUE=50.0 +DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_ACTUALPERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM2_OSHT_ACTUAL_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM7_DCBEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_MODE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_DCBEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_ACTUALPERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_CBC1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM5_TB_FREQUENCY.VALUE=110.000 +DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCA.VALUE=DCAEVT1 +DRIVER.ETPWM.VAR.ETPWM7_CBC2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCB.VALUE=DCBEVT1 +DRIVER.ETPWM.VAR.ETPWM7_CBC3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD_REG.VALUE=1000 +DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_CBC4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_ACTUALPERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM7_CBC5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_CBC6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD_REG.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY.VALUE=9.091 +DRIVER.ETPWM.VAR.ETPWM6_BASE.VALUE=0xFCF79100 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_ENA.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM5_OSHT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM5_OSHT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_INPUT.VALUE=PWMA_RED_FED +DRIVER.ETPWM.VAR.ETPWM5_PWMB_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM5_OSHT3.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_OSHT4.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM2_SELECT_EVENT.VALUE=NO_EVENT +DRIVER.ETPWM.VAR.ETPWM5_OSHT5.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM5_OSHT6.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM7_OSHT_ACTUAL_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM6_CLKDIV.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV_REG.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY_NEW.VALUE=50.0 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM2_TB_FREQUENCY.VALUE=110.000 +DRIVER.ETPWM.VAR.ETPWM6_DCAEVT1.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM3_PWMA_POLARITY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_SOCA_PERIOD.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM6_DCAEVT2.VALUE=0x0000 +DRIVER.ETPWM.VAR.ETPWM4_FDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM1_RDELAY_SOURCE.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTYTIME.VALUE=500.000 +DRIVER.ECAP.VAR.ECAP1_PRESCALE_REG.VALUE=0 +DRIVER.ECAP.VAR.ECAP2_ENA_PWM.VALUE=0 +DRIVER.ECAP.VAR.ECAP4_PRD.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP5_PWM_DUTY.VALUE=50 +DRIVER.ECAP.VAR.ECAP5_PWM_PERIOD.VALUE=1000.000 +DRIVER.ECAP.VAR.ECAP4_CAP2_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP5_PRESCALE.VALUE=0 +DRIVER.ECAP.VAR.ECAP5_PRD.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP6_PWM_COMPARE.VALUE=50 +DRIVER.ECAP.VAR.ECAP5_CAP4_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP5_ENA_LOAD.VALUE=0 +DRIVER.ECAP.VAR.ECAP6_PWM_PERIOD_REG.VALUE=0 +DRIVER.ECAP.VAR.ECAP6_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 +DRIVER.ECAP.VAR.ECAP3_PWM_COMPARE.VALUE=50 +DRIVER.ECAP.VAR.ECAP2_CAP1_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP6_PRD.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP4_PWM_DUTYTIME.VALUE=500.000 +DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP3_CAP3_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP1_ENA_PWM.VALUE=0 +DRIVER.ECAP.VAR.ECAP3_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 +DRIVER.ECAP.VAR.ECAP2_PWM_PERIOD_REG.VALUE=0 +DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER.VALUE=0 +DRIVER.ECAP.VAR.ECAP5_CEVT1.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP4_CAPTURE_MODE.VALUE=ONE_SHOT +DRIVER.ECAP.VAR.ECAP5_CEVT2.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP5_CEVT3.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP5_CEVT4.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP1_PWM_DUTY.VALUE=50 +DRIVER.ECAP.VAR.ECAP1_CAP2_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP4_PWM_PERIOD.VALUE=1000.000 +DRIVER.ECAP.VAR.ECAP1_PWM_DUTYTIME.VALUE=500.000 +DRIVER.ECAP.VAR.ECAP5_CNTOVF.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP5_PRESCALE_REG.VALUE=0 +DRIVER.ECAP.VAR.ECAP2_CAP4_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP1_PRESCALE.VALUE=0 +DRIVER.ECAP.VAR.ECAP1_ENA_LOAD.VALUE=0 +DRIVER.ECAP.VAR.ECAP6_CAP2_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP1_CAPTURE_MODE.VALUE=ONE_SHOT +DRIVER.ECAP.VAR.ECAP2_PRESCALE_REG.VALUE=0 +DRIVER.ECAP.VAR.ECAP4_PWM_DUTY.VALUE=50 +DRIVER.ECAP.VAR.ECAP6_PWM_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ECAP.VAR.ECAP4_CAP1_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP1_CEVT1.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP1_CEVT2.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP1_CEVT3.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER.VALUE=0 +DRIVER.ECAP.VAR.ECAP1_CEVT4.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP4_PRESCALE.VALUE=0 +DRIVER.ECAP.VAR.ECAP5_CAP3_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP4_ENA_LOAD.VALUE=0 +DRIVER.ECAP.VAR.ECAP3_CNTOVF.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP3_PWM_PERIOD.VALUE=1000.000 +DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP6_CEVT1.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP3_PWM_PERIOD_REG.VALUE=0 +DRIVER.ECAP.VAR.ECAP6_CEVT2.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP6_CEVT3.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP6_CEVT4.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP5_PWM_COMPARE.VALUE=50 +DRIVER.ECAP.VAR.ECAP5_PWM_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ECAP.VAR.ECAP6_ENA_PWM.VALUE=0 +DRIVER.ECAP.VAR.ECAP3_CAP2_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP5_PWM_DUTYTIME.VALUE=500.000 +DRIVER.ECAP.VAR.ECAP1_BASE.VALUE=0xFCF79300 +DRIVER.ECAP.VAR.ECAP4_CAP4_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP2_PWM_COMPARE.VALUE=50 +DRIVER.ECAP.VAR.ECAP4_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 +DRIVER.ECAP.VAR.ECAP5_CAPTURE_MODE.VALUE=ONE_SHOT +DRIVER.ECAP.VAR.ECAP1_CAP1_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP4_PWM_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP1_CNTOVF.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP2_PWM_DUTYTIME.VALUE=500.000 +DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP2_CAP3_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP6_PRESCALE_REG.VALUE=0 +DRIVER.ECAP.VAR.ECAP2_BASE.VALUE=0xFCF79400 +DRIVER.ECAP.VAR.ECAP2_CEVT1.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP2_CEVT2.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP2_PWM_PERIOD.VALUE=1000.000 +DRIVER.ECAP.VAR.ECAP2_CEVT3.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP2_CEVT4.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP1_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 +DRIVER.ECAP.VAR.ECAP6_CAP1_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP5_ENA_PWM.VALUE=0 +DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER.VALUE=0 +DRIVER.ECAP.VAR.ECAP2_CAPTURE_MODE.VALUE=ONE_SHOT +DRIVER.ECAP.VAR.ECAP3_PWM_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ECAP.VAR.ECAP3_PWM_DUTY.VALUE=50 +DRIVER.ECAP.VAR.ECAP3_PRESCALE_REG.VALUE=0 +DRIVER.ECAP.VAR.ECAP1_CAP4_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP4_PWM_PERIOD_REG.VALUE=0 +DRIVER.ECAP.VAR.ECAP3_PRESCALE.VALUE=0 +DRIVER.ECAP.VAR.ECAP6_CNTOVF.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP3_BASE.VALUE=0xFCF79500 +DRIVER.ECAP.VAR.ECAP5_CAP2_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP3_ENA_LOAD.VALUE=0 +DRIVER.ECAP.VAR.ECAP6_CAP4_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP1_CMP.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP2_PWM_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ECAP.VAR.ECAP4_ENA_PWM.VALUE=0 +DRIVER.ECAP.VAR.ECAP3_CAP1_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP1_PWM_PERIOD.VALUE=1000.000 +DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER.VALUE=0 +DRIVER.ECAP.VAR.ECAP6_PWM_DUTY.VALUE=50 +DRIVER.ECAP.VAR.ECAP2_CMP.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP6_PWM_DUTYTIME.VALUE=500.000 +DRIVER.ECAP.VAR.ECAP4_CAP3_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP4_BASE.VALUE=0xFCF79600 +DRIVER.ECAP.VAR.ECAP6_PRESCALE.VALUE=0 +DRIVER.ECAP.VAR.ECAP4_PWM_COMPARE.VALUE=50 +DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP3_CEVT1.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP3_CEVT2.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP3_CEVT3.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP3_CEVT4.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP6_ENA_LOAD.VALUE=0 +DRIVER.ECAP.VAR.ECAP5_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 +DRIVER.ECAP.VAR.ECAP4_CNTOVF.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP3_CMP.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP1_PWM_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER.VALUE=0 +DRIVER.ECAP.VAR.ECAP6_CAPTURE_MODE.VALUE=ONE_SHOT +DRIVER.ECAP.VAR.ECAP1_PWM_COMPARE.VALUE=50 +DRIVER.ECAP.VAR.ECAP2_CAP2_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP3_PWM_DUTYTIME.VALUE=500.000 +DRIVER.ECAP.VAR.ECAP3_CAP4_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP4_CMP.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP1_PRD.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP5_PWM_PERIOD_REG.VALUE=0 +DRIVER.ECAP.VAR.ECAP6_PWM_PERIOD.VALUE=1000.000 +DRIVER.ECAP.VAR.ECAP5_BASE.VALUE=0xFCF79700 +DRIVER.ECAP.VAR.ECAP3_ENA_PWM.VALUE=0 +DRIVER.ECAP.VAR.ECAP2_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 +DRIVER.ECAP.VAR.ECAP3_CAPTURE_MODE.VALUE=ONE_SHOT +DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE +DRIVER.ECAP.VAR.ECAP5_CMP.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP2_PRD.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP2_PWM_DUTY.VALUE=50 +DRIVER.ECAP.VAR.ECAP1_CAP3_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP4_PRESCALE_REG.VALUE=0 +DRIVER.ECAP.VAR.ECAP2_PRESCALE.VALUE=0 +DRIVER.ECAP.VAR.ECAP2_CNTOVF.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP5_CAP1_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP1_PWM_PERIOD_REG.VALUE=0 +DRIVER.ECAP.VAR.ECAP6_CMP.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP2_ENA_LOAD.VALUE=0 +DRIVER.ECAP.VAR.ECAP3_PRD.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER.VALUE=0 +DRIVER.ECAP.VAR.ECAP6_BASE.VALUE=0xFCF79800 +DRIVER.ECAP.VAR.ECAP6_CAP3_POLARITY.VALUE=RISING_EDGE +DRIVER.ECAP.VAR.ECAP4_CEVT1.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP4_CEVT2.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP4_CEVT3.VALUE=0x0000 +DRIVER.ECAP.VAR.ECAP4_CEVT4.VALUE=0x0000 +DRIVER.EQEP.VAR.EQEP2_QUPRD.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_INDEX_EVT_INIT_ENABLE.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_IGATE.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_QPE_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_PC_RST_MODE.VALUE=MAX_POSITION +DRIVER.EQEP.VAR.EQEP1_UTO_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_SEL_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_INDEX_EVT_SELECT.VALUE=RISING_EDGE +DRIVER.EQEP.VAR.EQEP2_PCE_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_PCU_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_BASE.VALUE=0xFCF79900 +DRIVER.EQEP.VAR.EQEP1_INV_QEPS_POL.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_INV_QEPA_POL.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_PCSHDW.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_PC_INIT_VALUE.VALUE=0x00000000 +DRIVER.EQEP.VAR.EQEP2_PCR_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_BASE.VALUE=0xFCF79A00 +DRIVER.EQEP.VAR.EQEP1_ENABLE_CAPTURE.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_INV_QEPB_POL.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_MAXPC_VALUE.VALUE=0x00000000 +DRIVER.EQEP.VAR.EQEP1_PCM_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_PCPOL.VALUE=ACTIVE_HIGH +DRIVER.EQEP.VAR.EQEP2_UNIT_POS_PRESCALER.VALUE=PS_512 +DRIVER.EQEP.VAR.EQEP2_CAP_CLK_PRESCALER.VALUE=PS_8 +DRIVER.EQEP.VAR.EQEP1_PCSPW.VALUE=0x000 +DRIVER.EQEP.VAR.EQEP1_POSCMP.VALUE=0x00000000 +DRIVER.EQEP.VAR.EQEP2_PC_MODE.VALUE=DIRECTION_COUNT +DRIVER.EQEP.VAR.EQEP1_PCE_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_INV_QEPS_POL.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_SET_INIT_AT_STARTUP.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_ENABLE_CAPTURE.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_STROBE_EVT_SELECT.VALUE=DIRECTON_DEPENDENT +DRIVER.EQEP.VAR.EQEP2_PCPOL.VALUE=ACTIVE_HIGH +DRIVER.EQEP.VAR.EQEP2_INV_QEPA_POL.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_CAP_CLK_PRESCALER.VALUE=PS_8 +DRIVER.EQEP.VAR.EQEP2_QDC_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_QCLM.VALUE=ON_POSITION_COUNTER_READ +DRIVER.EQEP.VAR.EQEP1_PC_MODE.VALUE=DIRECTION_COUNT +DRIVER.EQEP.VAR.EQEP2_WTO_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_SWI_ENABLE.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_PCR_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_INV_QEPB_POL.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_IEL.VALUE=RISING_EDGE +DRIVER.EQEP.VAR.EQEP2_PCSPW.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_PC_INIT_VALUE.VALUE=0x00000000 +DRIVER.EQEP.VAR.EQEP1_PCLOAD.VALUE=QPOSCNT_EQ_QPSCMP +DRIVER.EQEP.VAR.EQEP2_IEL_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_IEL.VALUE=RISING_EDGE +DRIVER.EQEP.VAR.EQEP1_MAXPC_VALUE.VALUE=0x00000000 +DRIVER.EQEP.VAR.EQEP1_INV_QEPI_POL.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_QCLM.VALUE=ON_POSITION_COUNTER_READ +DRIVER.EQEP.VAR.EQEP1_STROBE_EVT_INIT_ENABLE.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_PCO_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_STROBE_EVT_INIT_ENABLE.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_EXT_CLK_RATE.VALUE=RESOLUTION_1x +DRIVER.EQEP.VAR.EQEP1_STROBE_EVT_SELECT.VALUE=DIRECTON_DEPENDENT +DRIVER.EQEP.VAR.EQEP1_UNIT_POS_PRESCALER.VALUE=PS_512 +DRIVER.EQEP.VAR.EQEP1_WDPRD.VALUE=0x0000 +DRIVER.EQEP.VAR.EQEP1_SEL.VALUE=RISING_EDGE +DRIVER.EQEP.VAR.EQEP1_SOEN.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_QPE_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_PC_RST_MODE.VALUE=MAX_POSITION +DRIVER.EQEP.VAR.EQEP1_WDE.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_SET_INIT_AT_STARTUP.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_UTO_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_SWI_ENABLE.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_POSITIVE_ROTATION.VALUE=CLOCKWISE +DRIVER.EQEP.VAR.EQEP2_SEL_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_SEL.VALUE=RISING_EDGE +DRIVER.EQEP.VAR.EQEP2_PCU_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_WDE.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_SPSEL.VALUE=INDEX_PIN +DRIVER.EQEP.VAR.EQEP1_PCSHDW.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_SWAP.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_SOEN.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_POSCMP.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_QUPRD.VALUE=0x00000000 +DRIVER.EQEP.VAR.EQEP1_IGATE.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_QDC_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_SWAP.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_WDPRD.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_WTO_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_POSITIVE_ROTATION.VALUE=CLOCKWISE +DRIVER.EQEP.VAR.EQEP2_INV_QEPI_POL.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_PCM_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP1_IEL_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_EXT_CLK_RATE.VALUE=RESOLUTION_1x +DRIVER.EQEP.VAR.EQEP2_SPSEL.VALUE=INDEX_PIN +DRIVER.EQEP.VAR.EQEP1_PCO_INT_ENA.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_INDEX_EVT_SELECT.VALUE=RISING_EDGE +DRIVER.EQEP.VAR.EQEP1_INDEX_EVT_INIT_ENABLE.VALUE=0 +DRIVER.EQEP.VAR.EQEP2_PCLOAD.VALUE=QPOSCNT_EQ_QPSCMP +DRIVER.FEE.VAR.FEE_START_SECTOR.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_BANK.VALUE=7 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_READ_CYCLE_COUNT.VALUE=10 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_NUMBER_OF_VIRTUAL_SECTORS.VALUE=4 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX15_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX4_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_FLASH_CRC_ENABLE.VALUE=STD_ON +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_NUMBER.VALUE=12 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_BANK.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_NUMBER.VALUE=3 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_NUMBER.VALUE=5 +DRIVER.FEE.VAR.FEE_SECTORS_EEP1.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_START.VALUE=4 +DRIVER.FEE.VAR.FEE_BLOCK_NUMBER.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_DRIVER_INDEX.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_VS5_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX9_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX13_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX2_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_NUMBER.VALUE=10 +DRIVER.FEE.VAR.FEE_NUMBER_OF_EEPS.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_NUMBER.VALUE=8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_NUMBER.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_DEVICE_INDEX.VALUE=0 +DRIVER.FEE.VAR.FEE_PAGE_OVERHEAD.VALUE=0 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_NUMBER.VALUE=3 +DRIVER.FEE.VAR.FEE_TI_FEE_SW_MAJOR_VERSION.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_END.VALUE=0 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_START.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_SECTOR_NUMBER.VALUE=1 +DRIVER.FEE.VAR.FEE_VIRTUALPAGE_SIZE.VALUE=8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_VS3_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX7_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_END.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX11_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_FLASH_WRITECOUNTER_SAVE.VALUE=STD_ON +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_VS_INDEX.VALUE=2 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_NUMBER.VALUE=15 +DRIVER.FEE.VAR.FEE_TI_FEE_SW_PATCH_VERSION.VALUE=0 +DRIVER.FEE.VAR.FEE_JOBERROR_NOTIFICATION.VALUE=JobErrorNotification +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_NUMBER.VALUE=6 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_END.VALUE=2 +DRIVER.FEE.VAR.FEE_BLOCK_SIZE.VALUE=0x10 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_TOTAL_BLOCKS_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_NUMBER.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_SIZE.VALUE=8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_END.VALUE=3 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_MAXIMUM_BLOCKING_TIME.VALUE=600 +DRIVER.FEE.VAR.FEE_VS1_ENABLE.VALUE=1 +DRIVER.FEE.VAR.FEE_NO_OF_UNCONFIGURED_BLOCKS_TO_COPY.VALUE=0 +DRIVER.FEE.VAR.FEE_FLASH_BANK_NUM.VALUE=7 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX16_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX5_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_NUMBER.VALUE=13 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_END.VALUE=4 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_START.VALUE=1 +DRIVER.FEE.VAR.FEE_SECTOR_OVERHEAD.VALUE=16 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_NUMBER.VALUE=4 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_TI_FEE_SW_MINOR_VERSION.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_VERSIONINFO_API.VALUE=STD_ON +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_DATASETS.VALUE=1 +DRIVER.FEE.VAR.MAX_BLOCK_TIME.VALUE=600 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_WRITE_CYCLES.VALUE=10 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_OFFSET.VALUE=16 +DRIVER.FEE.VAR.FEE_NUMBER_OF_BLOCKS.VALUE=1 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_BANK.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX14_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX3_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_NUMBER_OF_EIGHTBYTEWRITES.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_NUMBER.VALUE=11 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_NUMBER.VALUE=9 +DRIVER.FEE.VAR.FEE_END_SECTOR.VALUE=0 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_BANK.VALUE=7 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_NUMBER.VALUE=2 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_FLASH_ERROR_CORRECTION_HANDLING.VALUE=TI_Fee_None +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_NUMBER.VALUE=4 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_DEVERROR_DETECT.VALUE=STD_ON +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_START.VALUE=2 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_VS4_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX8_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_MAX_NUMBER_OF_LINKS.VALUE=256 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_EEP.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX12_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX1_ENABLE.VALUE=1 +DRIVER.FEE.VAR.FEE_FLASH_ERROR_CORRECTION_ENABLE.VALUE=STD_ON +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_BANK.VALUE=7 +DRIVER.FEE.VAR.FEE_DATASELECT_BITS.VALUE=0 +DRIVER.FEE.VAR.FEE_OPERATING_FREQ.VALUE=220.000 +DRIVER.FEE.VAR.FEE_TOTAL_SECTORS.VALUE=4 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_NUMBER.VALUE=16 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_NUMBER.VALUE=7 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_NUMBER.VALUE=2 +DRIVER.FEE.VAR.FEE_JOBEND_NOTIFICATION.VALUE=JobEndNotification +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_ENABLE_ECC.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_OVERHEAD.VALUE=24 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_DATASETS.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_OFFSET.VALUE=0 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_BANK.VALUE=7 +DRIVER.FEE.VAR.FEE_VS2_ENABLE.VALUE=1 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX6_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_DEVICE_INDEX.VALUE=0x00000000 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_SIZE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX10_ENABLE.VALUE=0 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_NUMBER.VALUE=14 +DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_START.VALUE=3 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_IMED_DATA.VALUE=TRUE +DRIVER.FEE.VAR.FEE_CHECK_BANK7_ACCESS.VALUE=STD_OFF +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_WRITE_CYCLES.VALUE=0x8 +DRIVER.FEE.VAR.FEE_POLLING_MODE.VALUE=STD_ON +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_NUMBER.VALUE=5 +DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_SIZE.VALUE=0 +DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_2.VALUE=0xFFFDFFFE +DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_3.VALUE=0xFFEFFFFF +DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_0.VALUE=0xEFFDFFFF +DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_1.VALUE=0xFFFFFFFF +DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_2.VALUE=0xFFFDFFFE +DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_3.VALUE=0xFFEFFFFF +DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_0.VALUE=PATTERN_NOT_REQUIRED +DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_ECC_BYTE_0.VALUE=0xED +DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_1.VALUE=PATTERN_NOT_REQUIRED +DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_ECC_BYTE_1.VALUE=0xC0 +DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_2.VALUE=PATTERN_NOT_REQUIRED +DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_3.VALUE=PATTERN_NOT_REQUIRED +DRIVER.AJSM.VAR.AJSM_NEW_KEY_ECC_BYTE_0.VALUE=0xED +DRIVER.AJSM.VAR.AJSM_NEW_KEY_ECC_BYTE_1.VALUE=0xC0 +DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN.VALUE=PATTERN_NOT_REQUIRED +DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_0.VALUE=0xEFFDFFFF +DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_1.VALUE=0xFFFFFFFF Index: firmware/BL.hcg =================================================================== diff -u --- firmware/BL.hcg (revision 0) +++ firmware/BL.hcg (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,899 @@ + + + + RM46x + RM46L852PGE + BL.dil + ti + + + 04.07.01 + + + + + + + + + + + + + + + + + + + + + + + + + hal_stdtypes.h + include\hal_stdtypes.h + + + sys_common.h + include\sys_common.h + + + reg_system.h + include\reg_system.h + + + reg_flash.h + include\reg_flash.h + + + reg_tcram.h + include\reg_tcram.h + + + reg_vim.h + include\reg_vim.h + + + reg_pbist.h + include\reg_pbist.h + + + reg_stc.h + include\reg_stc.h + + + reg_efc.h + include\reg_efc.h + + + reg_pcr.h + include\reg_pcr.h + + + reg_pmm.h + include\reg_pmm.h + + + reg_dma.h + include\reg_dma.h + + + system.h + include\system.h + + + sys_vim.h + include\sys_vim.h + + + sys_core.h + include\sys_core.h + + + sys_mpu.h + include\sys_mpu.h + + + sys_pmu.h + include\sys_pmu.h + + + sys_pcr.h + include\sys_pcr.h + + + sys_pmm.h + include\sys_pmm.h + + + sys_dma.h + include\sys_dma.h + + + sys_selftest.h + include\sys_selftest.h + + + sys_core.asm + source\sys_core.asm + + + sys_intvecs.asm + source\sys_intvecs.asm + + + sys_mpu.asm + source\sys_mpu.asm + + + sys_pmu.asm + source\sys_pmu.asm + + + dabort.asm + source\dabort.asm + + + sys_pcr.c + source\sys_pcr.c + + + sys_pmm.c + source\sys_pmm.c + + + sys_dma.c + source\sys_dma.c + + + system.c + source\system.c + + + sys_phantom.c + source\sys_phantom.c + + + sys_startup.c + source\sys_startup.c + + + sys_selftest.c + source\sys_selftest.c + + + sys_vim.c + source\sys_vim.c + + + sys_main.c + source\sys_main.c + + + notification.c + source\notification.c + + + sys_link.cmd + source\sys_link.cmd + + + HL_Test.h + + + errata_SSWF021_45.h + include\errata_SSWF021_45.h + + + errata_SSWF021_45_defs.h + include\errata_SSWF021_45_defs.h + + + errata_SSWF021_45.c + source\errata_SSWF021_45.c + + + reg_pinmux.h + + + pinmux.h + + + pinmux.c + + + reg_rti.h + + + rti.h + + + rti.c + + + reg_gio.h + + + gio.h + + + gio.c + + + reg_sci.h + + + sci.h + + + sci.c + + + reg_lin.h + + + lin.h + + + lin.c + + + reg_mibspi.h + + + mibspi.h + + + mibspi.c + + + reg_spi.h + + + spi.h + + + spi.c + + + reg_can.h + + + can.h + + + can.c + + + reg_adc.h + + + adc.h + + + adc.c + + + + + + + + + std_nhet.h + + + reg_het.h + + + het.h + + + reg_htu.h + + + htu.h + + + het.c + + + + + + + + + reg_esm.h + + + esm.h + + + esm.c + + + reg_i2c.h + + + i2c.h + + + i2c.c + + + emac.h + + + hw_emac.h + + + hw_emac_ctrl.h + + + hw_mdio.h + + + hw_reg_access.h + + + mdio.h + + + emac.c + + + mdio.c + + + phy_dp83640.c + + + phy_dp83640.h + + + reg_dcc.h + + + dcc.h + + + dcc.c + + + reg_pom.h + + + pom.h + + + pom.c + + + usbcdc.h + + + usb_serial_structs.h + + + usbdcdc.h + + + usbdevice.h + + + usbdevicepriv.h + + + usb-ids.h + + + usblib.h + + + usb.h + + + hw_usb.h + + + + + + + + + + + + reg_crc.h + + + crc.h + + + crc.c + + + reg_etpwm.h + + + etpwm.h + + + etpwm.c + + + reg_ecap.h + + + ecap.h + + + ecap.c + + + reg_eqep.h + + + eqep.h + + + eqep.c + + + Device_RM46.h + + + Device_header.h + + + Device_types.h + + + ti_fee_cfg.h + + + MemMap.h + + + ti_fee_types.h + + + ti_fee.h + + + fee_interface.h + + + + + + + + + + + + + + + + + + + + + + + include\reg_pinmux.h + + + include\pinmux.h + + + source\pinmux.c + + + + + + + include\reg_rti.h + + + include\rti.h + + + source\rti.c + + + + + + + include\reg_gio.h + + + include\gio.h + + + source\gio.c + + + + + + + include\reg_sci.h + + + include\sci.h + + + source\sci.c + + + + + + + include\reg_lin.h + + + include\lin.h + + + source\lin.c + + + + + + + include\reg_mibspi.h + + + include\mibspi.h + + + source\mibspi.c + + + + + + + include\reg_spi.h + + + include\spi.h + + + source\spi.c + + + + + + + include\reg_can.h + + + include\can.h + + + source\can.c + + + + + + + include\reg_adc.h + + + include\adc.h + + + source\adc.c + + + + + + + include\std_nhet.h + + + include\reg_het.h + + + include\het.h + + + include\reg_htu.h + + + include\htu.h + + + source\het.c + + + + + + + include\reg_esm.h + + + include\esm.h + + + source\esm.c + + + + + + + include\reg_i2c.h + + + include\i2c.h + + + source\i2c.c + + + + + + + include\emac.h + + + include\hw_emac.h + + + include\hw_emac_ctrl.h + + + include\hw_mdio.h + + + include\hw_reg_access.h + + + include\mdio.h + + + source\emac.c + + + source\mdio.c + + + source\phy_dp83640.c + + + include\phy_dp83640.h + + + + + + + include\reg_dcc.h + + + include\dcc.h + + + source\dcc.c + + + + + + + include\reg_pom.h + + + include\pom.h + + + source\pom.c + + + + + + + include\usbcdc.h + + + include\usb_serial_structs.h + + + include\usbdcdc.h + + + include\usbdevice.h + + + include\usbdevicepriv.h + + + include\usb-ids.h + + + include\usblib.h + + + include\usb.h + + + include\hw_usb.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + include\reg_crc.h + + + include\crc.h + + + source\crc.c + + + + + + + include\reg_etpwm.h + + + include\etpwm.h + + + source\etpwm.c + + + + + + + include\reg_ecap.h + + + include\ecap.h + + + source\ecap.c + + + + + + + include\reg_eqep.h + + + include\eqep.h + + + source\eqep.c + + + + + + + include\Device_RM46.h + + + include\Device_header.h + + + include\Device_types.h + + + include\ti_fee_cfg.h + + + include\MemMap.h + + + include\ti_fee_types.h + + + include\ti_fee.h + + + include\fee_interface.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: firmware/include/Device_RM46.h =================================================================== diff -u --- firmware/include/Device_RM46.h (revision 0) +++ firmware/include/Device_RM46.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,111 @@ +/********************************************************************************************************************** + * FILE DESCRIPTION + * ------------------------------------------------------------------------------------------------------------------- + * File: Device_RM46.c + * Project: Tms570_TIFEEDriver + * Module: TIFEEDriver + * Generator: None + * + * Description: This file defines the number of sectors. + *--------------------------------------------------------------------------------------------------------------------- + * Author: Vishwanath Reddy + *--------------------------------------------------------------------------------------------------------------------- + * Revision History + *--------------------------------------------------------------------------------------------------------------------- + * Version Date Author Change ID Description + *--------------------------------------------------------------------------------------------------------------------- + * 01.15.00 06Jun2014 Vishwanath Reddy History Added. + *********************************************************************************************************************/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + /********************************************************************************************************************* + * INCLUDES + *********************************************************************************************************************/ + +#ifndef DEVICE_RM46_H +#define DEVICE_RM46_H + + +/** @def DEVICE_CONFIGURATION_VERSION +* @brief Device Configuration Version +* +* @note Indicates the current version of the device files +*/ +#define DEVICE_CONFIGURATION_VERSION 0U /* Indicates the current version of the device files */ + +/** @def DEVICE_NUMBER_OF_FLASH_BANKS +* @brief Number of Flash Banks +* +* @note Defines the number of Flash Banks on the device +*/ +#define DEVICE_NUMBER_OF_FLASH_BANKS 1U /* Defines the number of Flash Banks on the device */ + + +/** @def DEVICE_BANK_MAX_NUMBER_OF_SECTORS +* @brief Maximum number of Sectors +* +* @note Defines the maxium number of sectors in all banks +*/ +#define DEVICE_BANK_MAX_NUMBER_OF_SECTORS 4U /* Defines the maxium number of sectors in all banks */ + +/** @def DEVICE_BANK1_NUMBER_OF_SECTORS +* @brief Number of Sectors +* +* @note Defines the number of sectors in bank1 +*/ +#define DEVICE_BANK1_NUMBER_OF_SECTORS 4U /* Defines the number of sectors in bank1 */ + + +/** @def DEVICE_NUMBER_OF_READ_CYCLE_THRESHOLDS +* @brief Number of Sectors +* +* @note Defines the number of Read Cycle Thresholds +*/ +#define DEVICE_NUMBER_OF_READ_CYCLE_THRESHOLDS 4U /* Defines the number of Read Cycle Thresholds */ + + +/* Include Files */ +#ifndef _PLATFORM_TYPES_H_ +#define _PLATFORM_TYPES_H_ +#endif +#include "F021.h" +#include "hal_stdtypes.h" +#include "Device_types.h" + +#endif /* DEVICE_RM46_H */ + +/* End of File */ Index: firmware/include/Device_header.h =================================================================== diff -u --- firmware/include/Device_header.h (revision 0) +++ firmware/include/Device_header.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,67 @@ +/********************************************************************************************************************** + * FILE DESCRIPTION + * ------------------------------------------------------------------------------------------------------------------- + * File: Device_header.h + * Project: Tms570_TIFEEDriver + * Module: TIFEEDriver + * Generator: None + * + * Description: This file includes the header file. + *--------------------------------------------------------------------------------------------------------------------- + * Author: Vishwanath Reddy + *--------------------------------------------------------------------------------------------------------------------- + * Revision History + *--------------------------------------------------------------------------------------------------------------------- + * Version Date Author Change ID Description + *--------------------------------------------------------------------------------------------------------------------- + * 01.15.00 06Jun2014 Vishwanath Reddy History Added. + *********************************************************************************************************************/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + /********************************************************************************************************************* + * INCLUDES + *********************************************************************************************************************/ + +#ifndef TI_FEE_DEVICEHEADER_H +#define TI_FEE_DEVICEHEADER_H + +/* Uncomment the appropriate include file depending on the device you are using */ +#include "Device_RM46.h" + +/* End of file */ +#endif + Index: firmware/include/Device_types.h =================================================================== diff -u --- firmware/include/Device_types.h (revision 0) +++ firmware/include/Device_types.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,116 @@ +/********************************************************************************************************************** + * FILE DESCRIPTION + * ------------------------------------------------------------------------------------------------------------------- + * File: Device_types.h + * Project: Tms570_TIFEEDriver + * Module: TIFEEDriver + * Generator: None + * + * Description: This file defines the structures. + *--------------------------------------------------------------------------------------------------------------------- + * Author: Vishwanath Reddy + *--------------------------------------------------------------------------------------------------------------------- + * Revision History + *--------------------------------------------------------------------------------------------------------------------- + * Version Date Author Change ID Description + *--------------------------------------------------------------------------------------------------------------------- + * 01.15.00 06Jun2014 Vishwanath Reddy History Added. + *********************************************************************************************************************/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + /********************************************************************************************************************* + * INCLUDES + *********************************************************************************************************************/ + + +#ifndef DEVICE_TYPES_H +#define DEVICE_TYPES_H + +#include "hal_stdtypes.h" + +/* Enum to describe the type of error handling on the device */ +typedef enum +{ + Device_ErrorHandlingNone, /* Device has no error handling */ + Device_ErrorHandlingParity, /* Device has parity error handling */ + Device_ErrorHandlingEcc /* Device has ECC error handling */ +} Device_FlashErrorCorrectionProcessType; + +/* Enum to describe the ARM core on the device*/ +typedef enum +{ + Device_CoreNone, /* To indicate that the device has a single core */ + Device_Arm7, /* To indicate that the device has a ARM7 core */ + Device_CortexR4, /* To indicate that the device has a CortexR4 core */ + Device_CortexM3 /* To indicate that the device has a CortexM3 core */ +}Device_ArmCoreType; + +/* Structure defines an individual sector within a bank */ +typedef struct +{ + Fapi_FlashSectorType Device_Sector; /* Sector number */ + uint32 Device_SectorStartAddress; /* Starting address of the sector */ + uint32 Device_SectorLength; /* Length of the sector */ + uint32 Device_MaxWriteCycles; /* Number of cycles the sector is rated for */ + uint32 Device_EccAddress; + uint32 Device_EccLength; +} Device_SectorType; + +/* Structure defines an individual bank */ +typedef struct +{ + Fapi_FmcRegistersType * Device_ControlRegister; + Fapi_FlashBankType Device_Core; /* Core number for this bank */ + Device_SectorType Device_SectorInfo[DEVICE_BANK_MAX_NUMBER_OF_SECTORS]; /* Array of the Sectors within a bank */ +} Device_BankType; + +/* Structure defines the Flash structure of the device */ +typedef struct +{ + uint8 Device_DeviceName[12]; /* Device name */ + uint32 Device_EngineeringId; /* Device Engineering ID */ + Device_FlashErrorCorrectionProcessType Device_FlashErrorHandlingProcessInfo; /* Indicates which type of bit Error handling is on the device */ + Device_ArmCoreType Device_MasterCore; /* Indicates the Master core type on the device */ + boolean Device_SupportsInterrupts; /* Indicates if the device supports Flash interrupts for processing Flash */ + uint32 Device_NominalWriteTime; /* Nominal time for one write command operation in uS */ + uint32 Device_MaximumWriteTime; /* Maximum time for one write command operation in uS */ + Device_BankType Device_BankInfo[DEVICE_NUMBER_OF_FLASH_BANKS]; /* Array of Banks on the device */ +} Device_FlashType; + +#endif /* DEVICE_TYPES_H */ + +/* End of File */ Index: firmware/include/MemMap.h =================================================================== diff -u --- firmware/include/MemMap.h (revision 0) +++ firmware/include/MemMap.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,70 @@ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +#ifndef __MEM_MAP_H__ +#define __MEM_MAP_H__ +/*FEE*/ +#ifdef FEE_START_SEC_VAR_INIT_UNSPECIFIED +#pragma SET_DATA_SECTION("FEE_DATA_SECTION") +#undef FEE_START_SEC_VAR_INIT_UNSPECIFIED +#endif + +#ifdef FEE_STOP_SEC_VAR_INIT_UNSPECIFIED +#pragma SET_DATA_SECTION() +#undef FEE_STOP_SEC_VAR_INIT_UNSPECIFIED +#endif + +#ifdef FEE_START_SEC_CONST_UNSPECIFIED +#pragma SET_DATA_SECTION("FEE_CONST_SECTION") +#undef FEE_START_SEC_CONST_UNSPECIFIED +#endif + +#ifdef FEE_STOP_SEC_CONST_UNSPECIFIED +#pragma SET_DATA_SECTION() +#undef FEE_STOP_SEC_CONST_UNSPECIFIED +#endif + +#ifdef FEE_START_SEC_CODE +#pragma SET_CODE_SECTION("FEE_TEXT_SECTION") +#undef FEE_START_SEC_CODE +#endif + +#ifdef FEE_STOP_SEC_CODE +#pragma SET_CODE_SECTION() +#undef FEE_STOP_SEC_CODE +#endif + + +#endif /* __MEM_MAP_H__ */ Index: firmware/include/adc.h =================================================================== diff -u --- firmware/include/adc.h (revision 0) +++ firmware/include/adc.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,334 @@ +/** @file adc.h +* @brief ADC Driver Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the ADC driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __ADC_H__ +#define __ADC_H__ + +#include "reg_adc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* ADC General Definitions */ + +/** @def adcGROUP0 +* @brief Alias name for ADC event group +* +* @note This value should be used for API argument @a group +*/ +#define adcGROUP0 0U + +/** @def adcGROUP1 +* @brief Alias name for ADC group 1 +* +* @note This value should be used for API argument @a group +*/ +#define adcGROUP1 1U + +/** @def adcGROUP2 +* @brief Alias name for ADC group 2 +* +* @note This value should be used for API argument @a group +*/ +#define adcGROUP2 2U + +/** @def ADC_12_BIT_MODE +* @brief Alias name for ADC 12-bit mode of operation +*/ +#define ADC_12_BIT_MODE 0x80000000U + +/** @enum adcResolution +* @brief Alias names for data resolution +* This enumeration is used to provide alias names for the data resolution: +* - 12 bit resolution +* - 10 bit resolution +* - 8 bit resolution +*/ +enum adcResolution +{ + ADC_12_BIT = 0x00000000U, /**< Alias for 12 bit data resolution */ + ADC_10_BIT = 0x00000100U, /**< Alias for 10 bit data resolution */ + ADC_8_BIT = 0x00000200U /**< Alias for 8 bit data resolution */ +}; + +/** @enum adcFiFoStatus +* @brief Alias names for FiFo status +* This enumeration is used to provide alias names for the current FiFo states: +* - FiFo is not full +* - FiFo is full +* - FiFo overflow occurred +*/ + +enum adcFiFoStatus +{ + ADC_FIFO_IS_NOT_FULL = 0U, /**< Alias for FiFo is not full */ + ADC_FIFO_IS_FULL = 1U, /**< Alias for FiFo is full */ + ADC_FIFO_OVERFLOW = 3U /**< Alias for FiFo overflow occurred */ +}; + +/** @enum adcConversionStatus +* @brief Alias names for conversion status +* This enumeration is used to provide alias names for the current conversion states: +* - Conversion is not finished +* - Conversion is finished +*/ + +enum adcConversionStatus +{ + ADC_CONVERSION_IS_NOT_FINISHED = 0U, /**< Alias for current conversion is not finished */ + ADC_CONVERSION_IS_FINISHED = 8U /**< Alias for current conversion is finished */ +}; + +/** @enum adc1HwTriggerSource +* @brief Alias names for hardware trigger source +* This enumeration is used to provide alias names for the hardware trigger sources: +*/ + +enum adc1HwTriggerSource +{ + ADC1_EVENT = 0U, /**< Alias for event pin */ + ADC1_HET1_8 = 1U, /**< Alias for HET1 pin 8 */ + ADC1_HET1_10 = 2U, /**< Alias for HET1 pin 10 */ + ADC1_RTI_COMP0 = 3U, /**< Alias for RTI compare 0 match */ + ADC1_HET1_12 = 4U, /**< Alias for HET1 pin 12 */ + ADC1_HET1_14 = 5U, /**< Alias for HET1 pin 14 */ + ADC1_GIOB0 = 6U, /**< Alias for GIO port b pin 0 */ + ADC1_GIOB1 = 7U, /**< Alias for GIO port b pin 1 */ + + ADC1_HET2_5 = 1U, /**< Alias for HET2 pin 5 */ + ADC1_HET1_27 = 2U, /**< Alias for HET1 pin 27 */ + ADC1_HET1_17 = 4U, /**< Alias for HET1 pin 17 */ + ADC1_HET1_19 = 5U, /**< Alias for HET1 pin 19 */ + ADC1_HET1_11 = 6U, /**< Alias for HET1 pin 11 */ + ADC1_HET2_13 = 7U, /**< Alias for HET2 pin 13 */ + + ADC1_EPWM_B = 1U, /**< Alias for B Signal EPWM */ + ADC1_EPWM_A1 = 3U, /**< Alias for A1 Signal EPWM */ + ADC1_HET2_1 = 5U, /**< Alias for HET2 pin 1 */ + ADC1_EPWM_A2 = 6U, /**< Alias for A2 Signal EPWM */ + ADC1_EPWM_AB = 7U /**< Alias for AB Signal EPWM */ + +}; + +/** @enum adc2HwTriggerSource +* @brief Alias names for hardware trigger source +* This enumeration is used to provide alias names for the hardware trigger sources: +*/ + +enum adc2HwTriggerSource +{ + ADC2_EVENT = 0U, /**< Alias for event pin */ + ADC2_HET1_8 = 1U, /**< Alias for HET1 pin 8 */ + ADC2_HET1_10 = 2U, /**< Alias for HET1 pin 10 */ + ADC2_RTI_COMP0 = 3U, /**< Alias for RTI compare 0 match */ + ADC2_HET1_12 = 4U, /**< Alias for HET1 pin 12 */ + ADC2_HET1_14 = 5U, /**< Alias for HET1 pin 14 */ + ADC2_GIOB0 = 6U, /**< Alias for GIO port b pin 0 */ + ADC2_GIOB1 = 7U, /**< Alias for GIO port b pin 1 */ + ADC2_HET2_5 = 1U, /**< Alias for HET2 pin 5 */ + ADC2_HET1_27 = 2U, /**< Alias for HET1 pin 27 */ + ADC2_HET1_17 = 4U, /**< Alias for HET1 pin 17 */ + ADC2_HET1_19 = 5U, /**< Alias for HET1 pin 19 */ + ADC2_HET1_11 = 6U, /**< Alias for HET1 pin 11 */ + ADC2_HET2_13 = 7U, /**< Alias for HET2 pin 13 */ + + ADC2_EPWM_B = 1U, /**< Alias for B Signal EPWM */ + ADC2_EPWM_A1 = 3U, /**< Alias for A1 Signal EPWM */ + ADC2_HET2_1 = 5U, /**< Alias for HET2 pin 1 */ + ADC2_EPWM_A2 = 6U, /**< Alias for A2 Signal EPWM */ + ADC2_EPWM_AB = 7U /**< Alias for AB Signal EPWM */ + +}; + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @struct adcData +* @brief ADC Conversion data structure +* +* This type is used to pass adc conversion data. +*/ +/** @typedef adcData_t +* @brief ADC Data Type Definition +*/ +typedef struct adcData +{ + uint32 id; /**< Channel/Pin Id */ + uint16 value; /**< Conversion data value */ +} adcData_t; + + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +typedef struct adc_config_reg +{ + uint32 CONFIG_OPMODECR; + uint32 CONFIG_CLOCKCR; + uint32 CONFIG_GxMODECR[3U]; + uint32 CONFIG_G0SRC; + uint32 CONFIG_G1SRC; + uint32 CONFIG_G2SRC; + uint32 CONFIG_BNDCR; + uint32 CONFIG_BNDEND; + uint32 CONFIG_G0SAMP; + uint32 CONFIG_G1SAMP; + uint32 CONFIG_G2SAMP; + uint32 CONFIG_G0SAMPDISEN; + uint32 CONFIG_G1SAMPDISEN; + uint32 CONFIG_G2SAMPDISEN; + uint32 CONFIG_PARCR; +}adc_config_reg_t; + +#define ADC1_OPMODECR_CONFIGVALUE 0x81140001U +#define ADC1_CLOCKCR_CONFIGVALUE (10U) + +#define ADC1_G0MODECR_CONFIGVALUE ((uint32)ADC_12_BIT | (uint32)0x00000000U | (uint32)0x00000000U) +#define ADC1_G1MODECR_CONFIGVALUE ((uint32)ADC_12_BIT | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U) +#define ADC1_G2MODECR_CONFIGVALUE ((uint32)ADC_12_BIT | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U) + +#define ADC1_G0SRC_CONFIGVALUE ((uint32)0x00000000U | (uint32)ADC1_EVENT) +#define ADC1_G1SRC_CONFIGVALUE ((uint32)0x00000000U | (uint32)ADC1_EVENT) +#define ADC1_G2SRC_CONFIGVALUE ((uint32)0x00000000U | (uint32)ADC1_EVENT) + +#define ADC1_BNDCR_CONFIGVALUE ((uint32)((uint32)8U << 16U)|(8U + 8U)) +#define ADC1_BNDEND_CONFIGVALUE (2U) + +#define ADC1_G0SAMP_CONFIGVALUE (1U) +#define ADC1_G1SAMP_CONFIGVALUE (1U) +#define ADC1_G2SAMP_CONFIGVALUE (1U) + +#define ADC1_G0SAMPDISEN_CONFIGVALUE ((uint32)((uint32)0U << 8U) | 0x00000000U) +#define ADC1_G1SAMPDISEN_CONFIGVALUE ((uint32)((uint32)0U << 8U) | 0x00000000U) +#define ADC1_G2SAMPDISEN_CONFIGVALUE ((uint32)((uint32)0U << 8U) | 0x00000000U) + +#define ADC1_PARCR_CONFIGVALUE (0x00000005U) + +#define ADC2_OPMODECR_CONFIGVALUE 0x81140001U +#define ADC2_CLOCKCR_CONFIGVALUE (10U) + +#define ADC2_G0MODECR_CONFIGVALUE ((uint32)ADC_12_BIT | (uint32)0x00000000U | (uint32)0x00000000U) +#define ADC2_G1MODECR_CONFIGVALUE ((uint32)ADC_12_BIT | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U) +#define ADC2_G2MODECR_CONFIGVALUE ((uint32)ADC_12_BIT | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U) + +#define ADC2_G0SRC_CONFIGVALUE ((uint32)0x00000000U | (uint32)ADC2_EVENT) +#define ADC2_G1SRC_CONFIGVALUE ((uint32)0x00000000U | (uint32)ADC2_EVENT) +#define ADC2_G2SRC_CONFIGVALUE ((uint32)0x00000000U | (uint32)ADC2_EVENT) + +#define ADC2_BNDCR_CONFIGVALUE ((uint32)((uint32)8U << 16U)|(8U + 8U)) +#define ADC2_BNDEND_CONFIGVALUE (2U) + +#define ADC2_G0SAMP_CONFIGVALUE (1U) +#define ADC2_G1SAMP_CONFIGVALUE (1U) +#define ADC2_G2SAMP_CONFIGVALUE (1U) + +#define ADC2_G0SAMPDISEN_CONFIGVALUE ((uint32)((uint32)0U << 8U) | 0x00000000U) +#define ADC2_G1SAMPDISEN_CONFIGVALUE ((uint32)((uint32)0U << 8U) | 0x00000000U) +#define ADC2_G2SAMPDISEN_CONFIGVALUE ((uint32)((uint32)0U << 8U) | 0x00000000U) + +#define ADC2_PARCR_CONFIGVALUE (0x00000005U) + +/** + * @defgroup ADC ADC + * @brief Analog To Digital Converter Module. + * + * The microcontroller includes two 12-bit ADC modules with selectable 10-bit or 12-bit resolution + * + * Related Files + * - reg_adc.h + * - adc.h + * - adc.c + * @addtogroup ADC + * @{ + */ + +/* ADC Interface Functions */ + +void adcInit(void); +void adcStartConversion(adcBASE_t *adc, uint32 group); +void adcStopConversion(adcBASE_t *adc, uint32 group); +void adcResetFiFo(adcBASE_t *adc, uint32 group); +uint32 adcGetData(adcBASE_t *adc, uint32 group, adcData_t *data); +uint32 adcIsFifoFull(adcBASE_t *adc, uint32 group); +uint32 adcIsConversionComplete(adcBASE_t *adc, uint32 group); +void adcEnableNotification(adcBASE_t *adc, uint32 group); +void adcDisableNotification(adcBASE_t *adc, uint32 group); +void adcCalibration(adcBASE_t *adc); +uint32 adcMidPointCalibration(adcBASE_t *adc); +void adcSetEVTPin(adcBASE_t *adc, uint32 value); +uint32 adcGetEVTPin(adcBASE_t *adc); + +void adc1GetConfigValue(adc_config_reg_t *config_reg, config_value_type_t type); +void adc2GetConfigValue(adc_config_reg_t *config_reg, config_value_type_t type); + +/** @fn void adcNotification(adcBASE_t *adc, uint32 group) +* @brief Group notification +* @param[in] adc Pointer to ADC node: +* - adcREG1: ADC1 module pointer +* - adcREG2: ADC2 module pointer +* @param[in] group number of ADC node: +* - adcGROUP0: ADC event group +* - adcGROUP1: ADC group 1 +* - adcGROUP2: ADC group 2 +* +* @note This function has to be provide by the user. +*/ +void adcNotification(adcBASE_t *adc, uint32 group); + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + +/**@}*/ +#ifdef __cplusplus +} +#endif +#endif Index: firmware/include/can.h =================================================================== diff -u --- firmware/include/can.h (revision 0) +++ firmware/include/can.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,1008 @@ +/** @file can.h +* @brief CAN Driver Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the CAN driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __CAN_H__ +#define __CAN_H__ + +#include "reg_can.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* CAN General Definitions */ + +/** @def canLEVEL_ACTIVE +* @brief Alias name for CAN error operation level active (Error counter 0-31) +*/ +#define canLEVEL_ACTIVE 0x00U + +/** @def canLEVEL_PASSIVE +* @brief Alias name for CAN error operation level passive (Error counter 32-63) +*/ +#define canLEVEL_PASSIVE 0x20U + +/** @def canLEVEL_WARNING +* @brief Alias name for CAN error operation level warning (Error counter 64-127) +*/ +#define canLEVEL_WARNING 0x40U + +/** @def canLEVEL_BUS_OFF +* @brief Alias name for CAN error operation level bus off (Error counter 128-255) +*/ +#define canLEVEL_BUS_OFF 0x80U + +/** @def canLEVEL_PARITY_ERR +* @brief Alias name for CAN Parity error (Error counter 256-511) +*/ +#define canLEVEL_PARITY_ERR 0x100U + +/** @def canLEVEL_TxOK +* @brief Alias name for CAN Sucessful Transmission +*/ +#define canLEVEL_TxOK 0x08U + +/** @def canLEVEL_RxOK +* @brief Alias name for CAN Sucessful Reception +*/ +#define canLEVEL_RxOK 0x10U + +/** @def canLEVEL_WakeUpPnd +* @brief Alias name for CAN Initiated a WakeUp to system +*/ +#define canLEVEL_WakeUpPnd 0x200U + +/** @def canLEVEL_PDA +* @brief Alias name for CAN entered low power mode successfully. +*/ +#define canLEVEL_PDA 0x400U + +/** @def canERROR_NO +* @brief Alias name for no CAN error occurred +*/ +#define canERROR_OK 0U + +/** @def canERROR_STUFF +* @brief Alias name for CAN stuff error an RX message +*/ +#define canERROR_STUFF 1U + +/** @def canERROR_FORMAT +* @brief Alias name for CAN form/format error an RX message +*/ +#define canERROR_FORMAT 2U + +/** @def canERROR_ACKNOWLEDGE +* @brief Alias name for CAN TX message wasn't acknowledged +*/ +#define canERROR_ACKNOWLEDGE 3U + +/** @def canERROR_BIT1 +* @brief Alias name for CAN TX message sending recessive level but monitoring dominant +*/ +#define canERROR_BIT1 4U + +/** @def canERROR_BIT0 +* @brief Alias name for CAN TX message sending dominant level but monitoring recessive +*/ +#define canERROR_BIT0 5U + +/** @def canERROR_CRC +* @brief Alias name for CAN RX message received wrong CRC +*/ +#define canERROR_CRC 6U + +/** @def canERROR_NO +* @brief Alias name for CAN no message has send or received since last call of CANGetLastError +*/ +#define canERROR_NO 7U + +/** @def canMESSAGE_BOX1 +* @brief Alias name for CAN message box 1 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX1 1U + +/** @def canMESSAGE_BOX2 +* @brief Alias name for CAN message box 2 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX2 2U + +/** @def canMESSAGE_BOX3 +* @brief Alias name for CAN message box 3 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX3 3U + +/** @def canMESSAGE_BOX4 +* @brief Alias name for CAN message box 4 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX4 4U + +/** @def canMESSAGE_BOX5 +* @brief Alias name for CAN message box 5 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX5 5U + +/** @def canMESSAGE_BOX6 +* @brief Alias name for CAN message box 6 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX6 6U + +/** @def canMESSAGE_BOX7 +* @brief Alias name for CAN message box 7 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX7 7U + +/** @def canMESSAGE_BOX8 +* @brief Alias name for CAN message box 8 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX8 8U + +/** @def canMESSAGE_BOX9 +* @brief Alias name for CAN message box 9 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX9 9U + +/** @def canMESSAGE_BOX10 +* @brief Alias name for CAN message box 10 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX10 10U + +/** @def canMESSAGE_BOX11 +* @brief Alias name for CAN message box 11 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX11 11U + +/** @def canMESSAGE_BOX12 +* @brief Alias name for CAN message box 12 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX12 12U + +/** @def canMESSAGE_BOX13 +* @brief Alias name for CAN message box 13 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX13 13U + +/** @def canMESSAGE_BOX14 +* @brief Alias name for CAN message box 14 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX14 14U + +/** @def canMESSAGE_BOX15 +* @brief Alias name for CAN message box 15 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX15 15U + +/** @def canMESSAGE_BOX16 +* @brief Alias name for CAN message box 16 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX16 16U + +/** @def canMESSAGE_BOX17 +* @brief Alias name for CAN message box 17 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX17 17U + +/** @def canMESSAGE_BOX18 +* @brief Alias name for CAN message box 18 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX18 18U + +/** @def canMESSAGE_BOX19 +* @brief Alias name for CAN message box 19 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX19 19U + +/** @def canMESSAGE_BOX20 +* @brief Alias name for CAN message box 20 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX20 20U + +/** @def canMESSAGE_BOX21 +* @brief Alias name for CAN message box 21 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX21 21U + +/** @def canMESSAGE_BOX22 +* @brief Alias name for CAN message box 22 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX22 22U + +/** @def canMESSAGE_BOX23 +* @brief Alias name for CAN message box 23 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX23 23U + +/** @def canMESSAGE_BOX24 +* @brief Alias name for CAN message box 24 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX24 24U + +/** @def canMESSAGE_BOX25 +* @brief Alias name for CAN message box 25 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX25 25U + +/** @def canMESSAGE_BOX26 +* @brief Alias name for CAN message box 26 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX26 26U + +/** @def canMESSAGE_BOX27 +* @brief Alias name for CAN message box 27 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX27 27U + +/** @def canMESSAGE_BOX28 +* @brief Alias name for CAN message box 28 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX28 28U + +/** @def canMESSAGE_BOX29 +* @brief Alias name for CAN message box 29 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX29 29U + +/** @def canMESSAGE_BOX30 +* @brief Alias name for CAN message box 30 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX30 30U + +/** @def canMESSAGE_BOX31 +* @brief Alias name for CAN message box 31 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX31 31U + +/** @def canMESSAGE_BOX32 +* @brief Alias name for CAN message box 32 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX32 32U + +/** @def canMESSAGE_BOX33 +* @brief Alias name for CAN message box 33 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX33 33U + +/** @def canMESSAGE_BOX34 +* @brief Alias name for CAN message box 34 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX34 34U + +/** @def canMESSAGE_BOX35 +* @brief Alias name for CAN message box 35 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX35 35U + +/** @def canMESSAGE_BOX36 +* @brief Alias name for CAN message box 36 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX36 36U + +/** @def canMESSAGE_BOX37 +* @brief Alias name for CAN message box 37 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX37 37U + +/** @def canMESSAGE_BOX38 +* @brief Alias name for CAN message box 38 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX38 38U + +/** @def canMESSAGE_BOX39 +* @brief Alias name for CAN message box 39 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX39 39U + +/** @def canMESSAGE_BOX40 +* @brief Alias name for CAN message box 40 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX40 40U + +/** @def canMESSAGE_BOX41 +* @brief Alias name for CAN message box 41 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX41 41U + +/** @def canMESSAGE_BOX42 +* @brief Alias name for CAN message box 42 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX42 42U + +/** @def canMESSAGE_BOX43 +* @brief Alias name for CAN message box 43 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX43 43U + +/** @def canMESSAGE_BOX44 +* @brief Alias name for CAN message box 44 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX44 44U + +/** @def canMESSAGE_BOX45 +* @brief Alias name for CAN message box 45 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX45 45U + +/** @def canMESSAGE_BOX46 +* @brief Alias name for CAN message box 46 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX46 46U + +/** @def canMESSAGE_BOX47 +* @brief Alias name for CAN message box 47 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX47 47U + +/** @def canMESSAGE_BOX48 +* @brief Alias name for CAN message box 48 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX48 48U + +/** @def canMESSAGE_BOX49 +* @brief Alias name for CAN message box 49 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX49 49U + +/** @def canMESSAGE_BOX50 +* @brief Alias name for CAN message box 50 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX50 50U + +/** @def canMESSAGE_BOX51 +* @brief Alias name for CAN message box 51 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX51 51U + +/** @def canMESSAGE_BOX52 +* @brief Alias name for CAN message box 52 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX52 52U + +/** @def canMESSAGE_BOX53 +* @brief Alias name for CAN message box 53 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX53 53U + +/** @def canMESSAGE_BOX54 +* @brief Alias name for CAN message box 54 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX54 54U + +/** @def canMESSAGE_BOX55 +* @brief Alias name for CAN message box 55 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX55 55U + +/** @def canMESSAGE_BOX56 +* @brief Alias name for CAN message box 56 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX56 56U + +/** @def canMESSAGE_BOX57 +* @brief Alias name for CAN message box 57 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX57 57U + +/** @def canMESSAGE_BOX58 +* @brief Alias name for CAN message box 58 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX58 58U + +/** @def canMESSAGE_BOX59 +* @brief Alias name for CAN message box 59 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX59 59U + +/** @def canMESSAGE_BOX60 +* @brief Alias name for CAN message box 60 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX60 60U + +/** @def canMESSAGE_BOX61 +* @brief Alias name for CAN message box 61 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX61 61U + +/** @def canMESSAGE_BOX62 +* @brief Alias name for CAN message box 62 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX62 62U + +/** @def canMESSAGE_BOX63 +* @brief Alias name for CAN message box 63 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX63 63U + +/** @def canMESSAGE_BOX64 +* @brief Alias name for CAN message box 64 +* +* @note This value should be used for API argument @a messageBox +*/ +#define canMESSAGE_BOX64 64U + + +/** @enum canloopBackType +* @brief canLoopback type definition +*/ +/** @typedef canloopBackType_t +* @brief canLoopback type Type Definition +* +* This type is used to select the can module Loopback type Digital or Analog loopback. +*/ +typedef enum canloopBackType +{ + Internal_Lbk = 0x00000010U, + External_Lbk = 0x00000100U, + Internal_Silent_Lbk = 0x00000018U +}canloopBackType_t; + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/* Configuration registers */ +typedef struct can_config_reg +{ + uint32 CONFIG_CTL; + uint32 CONFIG_ES; + uint32 CONFIG_BTR; + uint32 CONFIG_TEST; + uint32 CONFIG_ABOTR; + uint32 CONFIG_INTMUX0; + uint32 CONFIG_INTMUX1; + uint32 CONFIG_INTMUX2; + uint32 CONFIG_INTMUX3; + uint32 CONFIG_TIOC; + uint32 CONFIG_RIOC; +} can_config_reg_t; + + +/* Configuration registers initial value for CAN1*/ +#define CAN1_CTL_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)((uint32)0x00000005U << 10U) | 0x00020002U) +#define CAN1_ES_CONFIGVALUE 0x00000007U +#define CAN1_BTR_CONFIGVALUE ((uint32)((uint32)0U << 16U) \ + | (uint32)((uint32)(3U - 1U) << 12U) \ + | (uint32)((uint32)((4U + 3U) - 1U) << 8U) \ + | (uint32)((uint32)(3U - 1U) << 6U) | (uint32)19U) +#define CAN1_TEST_CONFIGVALUE 0x00000080U +#define CAN1_ABOTR_CONFIGVALUE ((uint32)(0U)) +#define CAN1_INTMUX0_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define CAN1_INTMUX1_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define CAN1_INTMUX2_CONFIGVALUE 0x00000000U +#define CAN1_INTMUX3_CONFIGVALUE 0x00000000U +#define CAN1_TIOC_CONFIGVALUE ((uint32)((uint32)1U << 18U ) \ + |(uint32)((uint32)0U << 17U ) \ + |(uint32)((uint32)0U << 16U ) \ + |(uint32)((uint32)1U << 3U ) \ + |(uint32)((uint32)1U << 2U ) \ + |(uint32)((uint32)1U << 1U )) +#define CAN1_RIOC_CONFIGVALUE ((uint32)((uint32)1U << 18U ) \ + |(uint32)((uint32)0U << 17U ) \ + |(uint32)((uint32)0U << 16U ) \ + |(uint32)((uint32)1U << 3U ) \ + |(uint32)((uint32)0U << 2U ) \ + |(uint32)((uint32)0U << 1U )) + + +/* Configuration registers initial value for CAN2*/ +#define CAN2_CTL_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)((uint32)0x00000005U << 10U) | 0x00020002U) +#define CAN2_ES_CONFIGVALUE 0x00000007U +#define CAN2_BTR_CONFIGVALUE ((uint32)((uint32)0U << 16U) \ + | (uint32)((uint32)(3U - 1U) << 12U) \ + | (uint32)((uint32)((4U + 3U) - 1U) << 8U) \ + | (uint32)((uint32)(3U - 1U) << 6U) | (uint32)19U) +#define CAN2_TEST_CONFIGVALUE 0x00000080U +#define CAN2_ABOTR_CONFIGVALUE ((uint32)(0U)) +#define CAN2_INTMUX0_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define CAN2_INTMUX1_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define CAN2_INTMUX2_CONFIGVALUE 0x00000000U +#define CAN2_INTMUX3_CONFIGVALUE 0x00000000U +#define CAN2_TIOC_CONFIGVALUE ((uint32)((uint32)1U << 18U ) \ + |(uint32)((uint32)0U << 17U ) \ + |(uint32)((uint32)0U << 16U )\ + |(uint32)((uint32)1U << 3U ) \ + |(uint32)((uint32)1U << 2U ) \ + |(uint32)((uint32)1U << 1U )) +#define CAN2_RIOC_CONFIGVALUE ((uint32)((uint32)1U << 18U ) \ + |(uint32)((uint32)0U << 17U ) \ + |(uint32)((uint32)0U << 16U )\ + |(uint32)((uint32)1U << 3U ) \ + |(uint32)((uint32)0U << 2U ) \ + |(uint32)((uint32)0U << 1U )) + +/* Configuration registers initial value for CAN3*/ +#define CAN3_CTL_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)((uint32)0x00000005U << 10U) | 0x00020002U) +#define CAN3_ES_CONFIGVALUE 0x00000007U +#define CAN3_BTR_CONFIGVALUE ((uint32)((uint32)0U << 16U) \ + | (uint32)((uint32)(3U - 1U) << 12U) \ + | (uint32)((uint32)((4U + 3U) - 1U) << 8U) \ + | (uint32)((uint32)(3U - 1U) << 6U) | (uint32)19U) +#define CAN3_TEST_CONFIGVALUE 0x00000080U +#define CAN3_ABOTR_CONFIGVALUE ((uint32)(0U)) +#define CAN3_INTMUX0_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define CAN3_INTMUX1_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define CAN3_INTMUX2_CONFIGVALUE 0x00000000U +#define CAN3_INTMUX3_CONFIGVALUE 0x00000000U +#define CAN3_TIOC_CONFIGVALUE ((uint32)((uint32)1U << 18U ) \ + |(uint32)((uint32)0U << 17U ) \ + |(uint32)((uint32)0U << 16U )\ + |(uint32)((uint32)1U << 3U ) \ + |(uint32)((uint32)1U << 2U ) \ + |(uint32)((uint32)1U << 1U )) +#define CAN3_RIOC_CONFIGVALUE ((uint32)((uint32)1U << 18U ) \ + |(uint32)((uint32)0U << 17U ) \ + |(uint32)((uint32)0U << 16U )\ + |(uint32)((uint32)1U << 3U ) \ + |(uint32)((uint32)0U << 2U ) \ + |(uint32)((uint32)0U << 1U )) + +/** + * @defgroup CAN CAN + * @brief Controller Area Network Module. + * + * The Controller Area Network is a high-integrity, serial, multi-master communication protocol for distributed + * real-time applications. This CAN module is implemented according to ISO 11898-1 and is suitable for + * industrial, automotive and general embedded communications + * + * Related Files + * - reg_can.h + * - can.h + * - can.c + * @addtogroup CAN + * @{ + */ + +/* CAN Interface Functions */ + +void canInit(void); +uint32 canTransmit(canBASE_t *node, uint32 messageBox, const uint8 * data); +uint32 canGetData(canBASE_t *node, uint32 messageBox, uint8 * const data); +uint32 canSendRemoteFrame(canBASE_t *node, uint32 messageBox); +uint32 canFillMessageObjectData(canBASE_t *node, uint32 messageBox, const uint8 * data); +uint32 canIsTxMessagePending(canBASE_t *node, uint32 messageBox); +uint32 canIsRxMessageArrived(canBASE_t *node, uint32 messageBox); +uint32 canIsMessageBoxValid(canBASE_t *node, uint32 messageBox); +uint32 canGetLastError(canBASE_t *node); +uint32 canGetErrorLevel(canBASE_t *node); +void canEnableErrorNotification(canBASE_t *node); +void canDisableErrorNotification(canBASE_t *node); +void canEnableStatusChangeNotification(canBASE_t *node); +void canDisableStatusChangeNotification(canBASE_t *node); +void canEnableloopback(canBASE_t *node, canloopBackType_t Loopbacktype); +void canDisableloopback(canBASE_t *node); +void canIoSetDirection(canBASE_t *node,uint32 TxDir,uint32 RxDir); +void canIoSetPort(canBASE_t *node, uint32 TxValue, uint32 RxValue); +uint32 canIoTxGetBit(canBASE_t *node); +uint32 canIoRxGetBit(canBASE_t *node); +uint32 canGetID(canBASE_t *node, uint32 messageBox); +void canUpdateID(canBASE_t *node, uint32 messageBox, uint32 msgBoxArbitVal); +void can1GetConfigValue(can_config_reg_t *config_reg, config_value_type_t type); +void can2GetConfigValue(can_config_reg_t *config_reg, config_value_type_t type); +void can3GetConfigValue(can_config_reg_t *config_reg, config_value_type_t type); + +/** @fn void canErrorNotification(canBASE_t *node, uint32 notification) +* @brief Error notification +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] notification Error notification code: +* - canLEVEL_PASSIVE (0x20) : When RX- or TX error counter are between 32 and 63 +* - canLEVEL_WARNING (0x40) : When RX- or TX error counter are between 64 and 127 +* - canLEVEL_BUS_OFF (0x80) : When RX- or TX error counter are between 128 and 255 +* - canLEVEL_PARITY_ERR (0x100): When RX- or TX error counter are above 256 +* +* @note This function has to be provide by the user. +*/ +void canErrorNotification(canBASE_t *node, uint32 notification); + +/** @fn void canStatusChangeNotification(canBASE_t *node, uint32 notification) +* @brief Status Change notification +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] notification Status change notification code: +* - canLEVEL_TxOK (0x08) : When successful transmission +* - canLEVEL_RxOK (0x10) : When successful reception +* - canLEVEL_WakeUpPnd (0x200): When successful WakeUp to system initiated +* - canLEVEL_PDA (0x400): When successful low power mode entrance +* +* @note This function has to be provide by the user. +*/ +void canStatusChangeNotification(canBASE_t *node, uint32 notification); + +/** @fn void canMessageNotification(canBASE_t *node, uint32 messageBox) +* @brief Message notification +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] messageBox Message box number of CAN node: +* - canMESSAGE_BOX1: CAN message box 1 +* - canMESSAGE_BOXn: CAN message box n [n: 1-64] +* - canMESSAGE_BOX64: CAN message box 64 +* +* @note This function has to be provide by the user. +*/ +void canMessageNotification(canBASE_t *node, uint32 messageBox); + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/**@}*/ +#ifdef __cplusplus +} +#endif + +#endif Index: firmware/include/crc.h =================================================================== diff -u --- firmware/include/crc.h (revision 0) +++ firmware/include/crc.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,326 @@ +/** @file CRC.h +* @brief CRC Driver Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the CRC driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __CRC_H__ +#define __CRC_H__ + +#include "reg_crc.h" + +#ifdef __cplusplus +extern "C" { +#endif +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* CRC General Definitions */ + +/** @def CRCLEVEL_ACTIVE +* @brief Alias name for CRC error operation level active +*/ +#define CRCLEVEL_ACTIVE 0x00U + + +/** @def CRC_AUTO +* @brief Alias name for CRC auto mode +*/ +#define CRC_AUTO 0x00000001U + + +/** @def CRC_SEMI_CPU +* @brief Alias name for semi cpu mode setting +*/ +#define CRC_SEMI_CPU 0x00000002U + + +/** @def CRC_FULL_CPU +* @brief Alias name for CRC cpu full mode +*/ +#define CRC_FULL_CPU 0x00000003U + + +/** @def CRC_CH4_TO +* @brief Alias name for channel4 time out interrupt flag +*/ +#define CRC_CH4_TO 0x10000000U + +/** @def CRC_CH4_UR +* @brief Alias name for channel4 underrun interrupt flag +*/ +#define CRC_CH4_UR 0x08000000U + +/** @def CRC_CH4_OR +* @brief Alias name for channel4 overrun interrupt flag +*/ +#define CRC_CH4_OR 0x04000000U + +/** @def CRC_CH4_FAIL +* @brief Alias name for channel4 crc fail interrupt flag +*/ +#define CRC_CH4_FAIL 0x02000000U + +/** @def CRC_CH4_CC +* @brief Alias name for channel4 compression complete interrupt flag +*/ +#define CRC_CH4_CC 0x01000000U + +/** @def CRC_CH3_TO +* @brief Alias name for channel3 time out interrupt flag +*/ +#define CRC_CH3_TO 0x00100000U + +/** @def CRC_CH3_UR +* @brief Alias name for channel3 underrun interrupt flag +*/ +#define CRC_CH3_UR 0x00080000U + +/** @def CRC_CH3_OR +* @brief Alias name for channel3 overrun interrupt flag +*/ +#define CRC_CH3_OR 0x00040000U + +/** @def CRC_CH3_FAIL +* @brief Alias name for channel3 crc fail interrupt flag +*/ +#define CRC_CH3_FAIL 0x00020000U + +/** @def CRC_CH3_CC +* @brief Alias name for channel3 compression complete interrupt flag +*/ +#define CRC_CH3_CC 0x00010000U + +/** @def CRC_CH2_TO +* @brief Alias name for channel2 time out interrupt flag +*/ +#define CRC_CH2_TO 0x00001000U + +/** @def CRC_CH2_UR +* @brief Alias name for channel2 underrun interrupt flag +*/ +#define CRC_CH2_UR 0x00000800U + +/** @def CRC_CH2_OR +* @brief Alias name for channel2 overrun interrupt flag +*/ +#define CRC_CH2_OR 0x00000400U + +/** @def CRC_CH2_FAIL +* @brief Alias name for channel2 crc fail interrupt flag +*/ +#define CRC_CH2_FAIL 0x00000200U + +/** @def CRC_CH2_CC +* @brief Alias name for channel2 compression complete interrupt flag +*/ +#define CRC_CH2_CC 0x00000100U + +/** @def CRC_CH1_TO +* @brief Alias name for channel1 time out interrupt flag +*/ +#define CRC_CH1_TO 0x00000010U + +/** @def CRC_CH1_UR +* @brief Alias name for channel1 underrun interrupt flag +*/ +#define CRC_CH1_UR 0x00000008U + + +/** @def CRC_CH1_OR +* @brief Alias name for channel1 overrun interrupt flag +*/ +#define CRC_CH1_OR 0x00000004U + +/** @def CRC_CH1_FAIL +* @brief Alias name for channel1 crc fail interrupt flag +*/ +#define CRC_CH1_FAIL 0x00000002U + +/** @def CRC_CH1_CC +* @brief Alias name for channel1 compression complete interrupt flag +*/ +#define CRC_CH1_CC 0x00000001U + +/** @def CRC_CH1 +* @brief Alias name for channel1 +*/ +#define CRC_CH1 0x00000000U + +/** @def CRC_CH1 +* @brief Alias name for channel2 +*/ +#define CRC_CH2 0x00000001U + +/** @def CRC_CH3 +* @brief Alias name for channel3 +*/ +#define CRC_CH3 0x00000002U + +/** @def CRC_CH4 +* @brief Alias name for channel4 +*/ +#define CRC_CH4 0x00000003U + +/** @struct crcModConfig +* @brief CRC mode specific parameters +* +* This type is used to pass crc mode specific parameters +*/ +/** @typedef crcModConfig_t +* @brief CRC Data Type Definition +*/ +typedef struct crcModConfig +{ + uint32 mode; /**< Mode of operation */ + uint32 crc_channel; /**< CRC channel-0,1 */ + uint64 * src_data_pat; /**< Pattern data */ + uint32 data_length; /**< Pattern data length.Number of 64 bit size word*/ +} crcModConfig_t; + +/** @struct crcConfig +* @brief CRC configuration for different modes +* +* This type is used to pass crc configuration +*/ +/** @typedef crcConfig_t +* @brief CRC Data Type Definition +*/ +typedef struct crcConfig +{ + uint32 crc_channel; /**< CRC channel-0,1 */ + uint32 mode; /**< Mode of operation */ + uint32 pcount; /**< Pattern count*/ + uint32 scount; /**< Sector count */ + uint32 wdg_preload; /**< Watchdog period */ + uint32 block_preload; /**< Block period*/ + +} crcConfig_t; + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +typedef struct crc_config_reg +{ + uint32 CONFIG_CTRL0; + uint32 CONFIG_CTRL1; + uint32 CONFIG_CTRL2; + uint32 CONFIG_INTS; + uint32 CONFIG_PCOUNT_REG1; + uint32 CONFIG_SCOUNT_REG1; + uint32 CONFIG_WDTOPLD1; + uint32 CONFIG_BCTOPLD1; + uint32 CONFIG_PCOUNT_REG2; + uint32 CONFIG_SCOUNT_REG2; + uint32 CONFIG_WDTOPLD2; + uint32 CONFIG_BCTOPLD2; +}crc_config_reg_t; + +#define CRC_CTRL0_CONFIGVALUE 0x00000000U +#define CRC_CTRL1_CONFIGVALUE 0x00000000U +#define CRC_CTRL2_CONFIGVALUE ((uint32)((uint32)0U << 4U) | (uint32)(CRC_FULL_CPU) | (uint32)((uint32)CRC_FULL_CPU << 8U)) +#define CRC_INTS_CONFIGVALUE (0x00000000U | 0x00000000U | 0x00000000U | 0x00000000U | 0x00000000U | 0x00000000U | 0x00000000U | 0x00000000U | 0x00000000U | 0x00000000U) +#define CRC_PCOUNT_REG1_CONFIGVALUE (0x00000000U) +#define CRC_SCOUNT_REG1_CONFIGVALUE (0x00000000U) +#define CRC_WDTOPLD1_CONFIGVALUE (0x00000000U) +#define CRC_BCTOPLD1_CONFIGVALUE (0x00000000U) +#define CRC_PCOUNT_REG2_CONFIGVALUE (0x00000000U) +#define CRC_SCOUNT_REG2_CONFIGVALUE (0x00000000U) +#define CRC_WDTOPLD2_CONFIGVALUE (0x00000000U) +#define CRC_BCTOPLD2_CONFIGVALUE (0x00000000U) + +/** + * @defgroup CRC CRC + * @brief Cyclic Redundancy Check Controller Module. + * + * The CRC controller is a module that is used to perform CRC (Cyclic Redundancy Check) to verify the + * integrity of memory system. A signature representing the contents of the memory is obtained when the + * contents of the memory are read into CRC controller. The responsibility of CRC controller is to calculate + * the signature for a set of data and then compare the calculated signature value against a pre-determined + * good signature value. CRC controller supports two channels to perform CRC calculation on multiple + * memories in parallel and can be used on any memory system. + * + * Related Files + * - reg_crc.h + * - crc.h + * - crc.c + * @addtogroup CRC + * @{ + */ + +/* CRC Interface Functions */ +void crcInit(void); +void crcSendPowerDown(crcBASE_t *crc); +void crcSignGen(crcBASE_t *crc,crcModConfig_t *param); +void crcSetConfig(crcBASE_t *crc,crcConfig_t *param); +uint64 crcGetPSASig(crcBASE_t *crc,uint32 channel); +uint64 crcGetSectorSig(crcBASE_t *crc,uint32 channel); +uint32 crcGetFailedSector(crcBASE_t *crc,uint32 channel); +uint32 crcGetIntrPend(crcBASE_t *crc,uint32 channel); +void crcChannelReset(crcBASE_t *crc,uint32 channel); +void crcEnableNotification(crcBASE_t *crc, uint32 flags); +void crcDisableNotification(crcBASE_t *crc, uint32 flags); +void crcGetConfigValue(crc_config_reg_t *config_reg, config_value_type_t type); + +/** @fn void crcNotification(crcBASE_t *crc, uint32 flags) +* @brief Interrupt callback +* @param[in] crc - crc module base address +* @param[in] flags - copy of error interrupt flags +* +* This is a callback that is provided by the application and is called upon +* an interrupt. The parameter passed to the callback is a copy of the +* interrupt flag register. +*/ +void crcNotification(crcBASE_t *crc, uint32 flags); + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/**@}*/ +#ifdef __cplusplus +} +#endif /*extern "C" */ + +#endif Index: firmware/include/dcc.h =================================================================== diff -u --- firmware/include/dcc.h (revision 0) +++ firmware/include/dcc.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,331 @@ +/** @file dcc.h +* @brief DCC Driver Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __DCC_H__ +#define __DCC_H__ + +#include "reg_dcc.h" +#ifdef __cplusplus +extern "C" { +#endif +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* DCC General Definitions */ + +/** @def dcc1CNT0_CLKSRC_HFLPO +* @brief Alias name for DCC1 Counter 0 Clock Source HFLPO +* +* This is an alias name for the Clock Source HFLPO for DCC1 Counter 0. +* +* @note This value should be used for API argument @a cnt0_Clock_Source +*/ +#define dcc1CNT0_CLKSRC_HFLPO 0x00000005U + +/** @def dcc1CNT0_CLKSRC_TCK +* @brief Alias name for DCC1 Counter 0 Clock Source TCK +* +* This is an alias name for the Clock Source TCK for DCC1 Counter 0. +* +* @note This value should be used for API argument @a cnt0_Clock_Source +*/ +#define dcc1CNT0_CLKSRC_TCK 0x0000000AU + +/** @def dcc1CNT0_CLKSRC_OSCIN +* @brief Alias name for DCC1 Counter 0 Clock Source OSCIN +* +* This is an alias name for the Clock Source OSCIN for DCC1 Counter 0. +* +* @note This value should be used for API argument @a cnt0_Clock_Source +*/ +#define dcc1CNT0_CLKSRC_OSCIN 0x0000000FU + +/** @def dcc1CNT1_CLKSRC_PLL1 +* @brief Alias name for DCC1 Counter 1 Clock Source PLL1 +* +* This is an alias name for the Clock Source PLL for DCC1 Counter 1. +* +* @note This value should be used for API argument @a cnt1_Clock_Source +*/ +#define dcc1CNT1_CLKSRC_PLL1 0x0000A000U + +/** @def dcc1CNT1_CLKSRC_PLL2 +* @brief Alias name for DCC1 Counter 1 Clock Source PLL2 +* +* This is an alias name for the Clock Source OSCIN for DCC1 Counter 1. +* +* @note This value should be used for API argument @a cnt1_Clock_Source +*/ +#define dcc1CNT1_CLKSRC_PLL2 0x0000A001U + +/** @def dcc1CNT1_CLKSRC_LFLPO +* @brief Alias name for DCC1 Counter 1 Clock Source LFLPO +* +* This is an alias name for the Clock Source LFLPO for DCC1 Counter 1. +* +* @note This value should be used for API argument @a cnt1_Clock_Source +*/ +#define dcc1CNT1_CLKSRC_LFLPO 0x0000A002U + +/** @def dcc1CNT1_CLKSRC_HFLPO +* @brief Alias name for DCC1 Counter 1 Clock Source HFLPO +* +* This is an alias name for the Clock Source HFLPO for DCC1 Counter 1. +* +* @note This value should be used for API argument @a cnt1_Clock_Source +*/ +#define dcc1CNT1_CLKSRC_HFLPO 0x0000A003U + +/** @def dcc1CNT1_CLKSRC_EXTCLKIN1 +* @brief Alias name for DCC1 Counter 1 Clock Source EXTCLKIN1 +* +* This is an alias name for the Clock Source EXTCLKIN1 for DCC1 Counter 1. +* +* @note This value should be used for API argument @a cnt1_Clock_Source +*/ +#define dcc1CNT1_CLKSRC_EXTCLKIN1 0x0000A005U + +/** @def dcc1CNT1_CLKSRC_EXTCLKIN2 +* @brief Alias name for DCC1 Counter 1 Clock Source EXTCLKIN2 +* +* This is an alias name for the Clock Source EXTCLKIN2 for DCC1 Counter 1. +* +* @note This value should be used for API argument @a cnt1_Clock_Source +*/ +#define dcc1CNT1_CLKSRC_EXTCLKIN2 0x0000A006U + +/** @def dcc1CNT1_CLKSRC_VCLK +* @brief Alias name for DCC1 Counter 1 Clock Source VCLK +* +* This is an alias name for the Clock Source VCLK for DCC1 Counter 1. +* +* @note This value should be used for API argument @a cnt1_Clock_Source +*/ +#define dcc1CNT1_CLKSRC_VCLK 0x0000A008U + +/** @def dcc1CNT1_CLKSRC_N2HET1_31 +* @brief Alias name for DCC1 Counter 1 Clock Source N2HET1_31 +* +* This is an alias name for the Clock Source N2HET1_31 for DCC1 Counter 1. +* +* @note This value should be used for API argument @a cnt1_Clock_Source +*/ +#define dcc1CNT1_CLKSRC_N2HET1_31 0x0000500FU + +/** @def dcc2CNT0_CLKSRC_TCK +* @brief Alias name for DCC2 Counter 0 Clock Source TCK +* +* This is an alias name for the Clock Source TCK for DCC2 Counter 0. +* +* @note This value should be used for API argument @a cnt0_Clock_Source +*/ +#define dcc2CNT0_CLKSRC_TCK 0x0000000AU + +/** @def dcc1CNT0_CLKSRC_OSCIN +* @brief Alias name for DCC1 Counter 0 Clock Source OSCIN +* +* This is an alias name for the Clock Source OSCIN for DCC2 Counter 0. +* +* @note This value should be used for API argument @a cnt0_Clock_Source +*/ +#define dcc2CNT0_CLKSRC_OSCIN 0x0000000FU + +/** @def dcc2CNT1_CLKSRC_VCLK +* @brief Alias name for DCC2 Counter 1 Clock Source VCLK +* +* This is an alias name for the Clock Source VCLK for DCC2 Counter 1. +* +* @note This value should be used for API argument @a cnt1_Clock_Source +*/ +#define dcc2CNT1_CLKSRC_VCLK 0x0000A008U + +/** @def dcc2CNT1_CLKSRC_N2HET1_0 +* @brief Alias name for DCC2 Counter 1 Clock Source N2HET2_0 +* +* This is an alias name for the Clock Source N2HET2_0 for DCC2 Counter 1. +* +* @note This value should be used for API argument @a cnt1_Clock_Source +*/ +#define dcc2CNT1_CLKSRC_N2HET1_0 0x0000500FU + +/** @def dccNOTIFICATION_DONE +* @brief Alias name for DCC Done notification +* +* This is an alias name for the DCC Done notification. +* +* @note This value should be used for API argument @a notification +*/ +#define dccNOTIFICATION_DONE 0x0000A000U + +/** @def dccNOTIFICATION_ERROR +* @brief Alias name for DCC Error notification +* +* This is an alias name for the DCC Error notification. +* +* @note This value should be used for API argument @a notification +*/ +#define dccNOTIFICATION_ERROR 0x000000A0U + + +/** @enum dcc1clocksource +* @brief Alias names for dcc clock sources +* +* This enumeration is used to provide alias names for the clock sources: +*/ +enum dcc1clocksource +{ + DCC1_CNT0_HF_LPO = 0x5U, /**< Alias for DCC1 CNT 0 CLOCK SOURCE 0*/ + DCC1_CNT0_TCK = 0xAU, /**< Alias for DCC1 CNT 0 CLOCK SOURCE 1*/ + DCC1_CNT0_OSCIN = 0xFU, /**< Alias for DCC1 CNT 0 CLOCK SOURCE 2*/ + + DCC1_CNT1_PLL1 = 0x0U, /**< Alias for DCC1 CNT 1 CLOCK SOURCE 0*/ + DCC1_CNT1_PLL2 = 0x1U, /**< Alias for DCC1 CNT 1 CLOCK SOURCE 1*/ + DCC1_CNT1_LF_LPO = 0x2U, /**< Alias for DCC1 CNT 1 CLOCK SOURCE 2*/ + DCC1_CNT1_HF_LPO = 0x3U, /**< Alias for DCC1 CNT 1 CLOCK SOURCE 3*/ + DCC1_CNT1_EXTCLKIN1 = 0x5U, /**< Alias for DCC1 CNT 1 CLOCK SOURCE 4*/ + DCC1_CNT1_EXTCLKIN2 = 0x6U, /**< Alias for DCC1 CNT 1 CLOCK SOURCE 6*/ + DCC1_CNT1_VCLK = 0x8U, /**< Alias for DCC1 CNT 1 CLOCK SOURCE 8*/ + DCC1_CNT1_N2HET1_31 = 0xAU /**< Alias for DCC1 CNT 1 CLOCK SOURCE 9*/ +}; + +/** @enum dcc2clocksource +* @brief Alias names for dcc clock sources +* +* This enumeration is used to provide alias names for the clock sources: +*/ +enum dcc2clocksource +{ + DCC2_CNT0_OSCIN = 0xFU, /**< Alias for DCC1 CNT 0 CLOCK SOURCE 0*/ + DCC2_CNT0_TCK = 0xAU, /**< Alias for DCC1 CNT 0 CLOCK SOURCE 2*/ + + DCC2_CNT1_VCLK = 0x8U, /**< Alias for DCC1 CNT 1 CLOCK SOURCE 8*/ + DCC2_CNT1_N2HET2_0 = 0xAU /**< Alias for DCC1 CNT 1 CLOCK SOURCE 9*/ +}; + +/* Configuration registers */ +typedef struct dcc_config_reg +{ + uint32 CONFIG_GCTRL; + uint32 CONFIG_CNT0SEED; + uint32 CONFIG_VALID0SEED; + uint32 CONFIG_CNT1SEED; + uint32 CONFIG_CNT1CLKSRC; + uint32 CONFIG_CNT0CLKSRC; +} dcc_config_reg_t; + + +/* Configuration registers initial value */ +#define DCC1_GCTRL_CONFIGVALUE ( (uint32)0xAU \ + | (uint32)((uint32)0xAU << 4U) \ + | (uint32)((uint32)0x5U << 8U) \ + | (uint32)((uint32)0xAU << 12U)) + +#define DCC1_CNT0SEED_CONFIGVALUE 39204U +#define DCC1_VALID0SEED_CONFIGVALUE 792U +#define DCC1_CNT1SEED_CONFIGVALUE 544500U +#define DCC1_CNT1CLKSRC_CONFIGVALUE ((uint32)((uint32)10U << 12U) | (uint32)DCC1_CNT1_PLL1) +/*SAFETYMCUSW 79 S MR:19.4 "Values come from GUI drop down option" */ +#define DCC1_CNT0CLKSRC_CONFIGVALUE ((uint32)DCC1_CNT0_OSCIN) + +#define DCC2_GCTRL_CONFIGVALUE ( (uint32)0xAU \ + | (uint32)((uint32)0xAU << 4U) \ + | (uint32)((uint32)0x5U << 8U) \ + | (uint32)((uint32)0xAU << 12U)) +#define DCC2_CNT0SEED_CONFIGVALUE 0U +#define DCC2_VALID0SEED_CONFIGVALUE 0U +#define DCC2_CNT1SEED_CONFIGVALUE 0U +#define DCC2_CNT1CLKSRC_CONFIGVALUE ((uint32)((uint32)0xAU << 12U) | (uint32)DCC2_CNT1_VCLK) +/*SAFETYMCUSW 79 S MR:19.4 "Values come from GUI drop down option" */ +#define DCC2_CNT0CLKSRC_CONFIGVALUE ((uint32)DCC2_CNT0_OSCIN) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** + * @defgroup DCC DCC + * @brief Dual-Clock Comparator Module + * + * The primary purpose of a DCC module is to measure the frequency of a clock signal using a second + * known clock signal as a reference. This capability can be used to ensure the correct frequency range for + * several different device clock sources, thereby enhancing the system safety metrics. + * + * Related Files + * - reg_dcc.h + * - dcc.h + * - dcc.c + * @addtogroup DCC + * @{ + */ + +/* DCC Interface Functions */ +void dccInit(void); +void dccSetCounter0Seed(dccBASE_t *dcc, uint32 cnt0seed); +void dccSetTolerance(dccBASE_t *dcc, uint32 valid0seed); +void dccSetCounter1Seed(dccBASE_t *dcc, uint32 cnt1seed); +void dccSetSeed(dccBASE_t *dcc, uint32 cnt0seed, uint32 valid0seed, uint32 cnt1seed); +void dccSelectClockSource(dccBASE_t *dcc, uint32 cnt0_Clock_Source, uint32 cnt1_Clock_Source); +void dccEnable(dccBASE_t *dcc); +void dccDisable(dccBASE_t *dcc); +uint32 dccGetErrStatus(dccBASE_t *dcc); + +void dccEnableNotification(dccBASE_t *dcc, uint32 notification); +void dccDisableNotification(dccBASE_t *dcc, uint32 notification); +void dcc1GetConfigValue(dcc_config_reg_t *config_reg, config_value_type_t type); +void dcc2GetConfigValue(dcc_config_reg_t *config_reg, config_value_type_t type); +/** @fn void dccNotification(dccBASE_t *dcc,uint32 flags) +* @brief Interrupt callback +* @param[in] dcc - dcc module base address +* @param[in] flags - status flags +* +* This is a callback function provided by the application. It is call when +* a dcc is complete or detected error. +*/ +void dccNotification(dccBASE_t *dcc,uint32 flags); + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ +/**@}*/ +#ifdef __cplusplus +} +#endif + +#endif Index: firmware/include/ecap.h =================================================================== diff -u --- firmware/include/ecap.h (revision 0) +++ firmware/include/ecap.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,260 @@ +/** @file ecap.h +* @brief ECAP Driver Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the ECAP driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __ECAP_H__ +#define __ECAP_H__ + +#include "reg_ecap.h" + + + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ +/** @brief Enumeration to define the capture (CAP) interrupts +*/ +typedef enum +{ + ecapInt_CTR_CMP = 0x0080U, /*< Denotes CTR = CMP interrupt */ + ecapInt_CTR_PRD = 0x0040U, /*< Denotes CTR = PRD interrupt */ + ecapInt_CTR_OVF = 0x0020U, /*< Denotes CTROVF interrupt */ + ecapInt_CEVT4 = 0x0010U, /*< Denotes CEVT4 interrupt */ + ecapInt_CEVT3 = 0x0008U, /*< Denotes CEVT3 interrupt */ + ecapInt_CEVT2 = 0x0004U, /*< Denotes CEVT2 interrupt */ + ecapInt_CEVT1 = 0x0002U, /*< Denotes CEVT1 interrupt */ + ecapInt_Global = 0x0001U, /*< Denotes Capture global interrupt */ + ecapInt_All = 0x00FFU /*< Denotes All interrupts */ +} ecapInterrupt_t; + +/** @brief Enumeration to define the capture (CAP) prescaler values +*/ +typedef enum +{ + ecapPrescale_By_1 = ((uint16)0U << 9U), /*< Divide by 1 */ + ecapPrescale_By_2 = ((uint16)1U << 9U), /*< Divide by 2 */ + ecapPrescale_By_4 = ((uint16)2U << 9U), /*< Divide by 4 */ + ecapPrescale_By_6 = ((uint16)3U << 9U), /*< Divide by 6 */ + ecapPrescale_By_8 = ((uint16)4U << 9U), /*< Divide by 8 */ + ecapPrescale_By_10 = ((uint16)5U << 9U), /*< Divide by 10 */ + ecapPrescale_By_12 = ((uint16)6U << 9U), /*< Divide by 12 */ + ecapPrescale_By_14 = ((uint16)7U << 9U), /*< Divide by 14 */ + ecapPrescale_By_16 = ((uint16)8U << 9U), /*< Divide by 16 */ + ecapPrescale_By_18 = ((uint16)9U << 9U), /*< Divide by 18 */ + ecapPrescale_By_20 = ((uint16)10U << 9U), /*< Divide by 20 */ + ecapPrescale_By_22 = ((uint16)11U << 9U), /*< Divide by 22 */ + ecapPrescale_By_24 = ((uint16)12U << 9U), /*< Divide by 24 */ + ecapPrescale_By_26 = ((uint16)13U << 9U), /*< Divide by 26 */ + ecapPrescale_By_28 = ((uint16)14U << 9U), /*< Divide by 28 */ + ecapPrescale_By_30 = ((uint16)15U << 9U), /*< Divide by 30 */ + ecapPrescale_By_32 = ((uint16)16U << 9U), /*< Divide by 32 */ + ecapPrescale_By_34 = ((uint16)17U << 9U), /*< Divide by 34 */ + ecapPrescale_By_36 = ((uint16)18U << 9U), /*< Divide by 36 */ + ecapPrescale_By_38 = ((uint16)19U << 9U), /*< Divide by 38 */ + ecapPrescale_By_40 = ((uint16)20U << 9U), /*< Divide by 40 */ + ecapPrescale_By_42 = ((uint16)21U << 9U), /*< Divide by 42 */ + ecapPrescale_By_44 = ((uint16)22U << 9U), /*< Divide by 44 */ + ecapPrescale_By_46 = ((uint16)23U << 9U), /*< Divide by 46 */ + ecapPrescale_By_48 = ((uint16)24U << 9U), /*< Divide by 48 */ + ecapPrescale_By_50 = ((uint16)25U << 9U), /*< Divide by 50 */ + ecapPrescale_By_52 = ((uint16)26U << 9U), /*< Divide by 52 */ + ecapPrescale_By_54 = ((uint16)27U << 9U), /*< Divide by 54 */ + ecapPrescale_By_56 = ((uint16)28U << 9U), /*< Divide by 56 */ + ecapPrescale_By_58 = ((uint16)29U << 9U), /*< Divide by 58 */ + ecapPrescale_By_60 = ((uint16)30U << 9U), /*< Divide by 60 */ + ecapPrescale_By_62 = ((uint16)31U << 9U) /*< Divide by 62 */ +} ecapPrescale_t; + +/** @brief Enumeration to define the Sync Out options +*/ +typedef enum +{ + SyncOut_SyncIn = ((uint16)0U << 6U), /*< Sync In used for Sync Out */ + SyncOut_CTRPRD = ((uint16)1U << 6U), /*< CTR = PRD used for Sync Out */ + SyncOut_None = ((uint16)2U << 6U) /*< Disables Sync Out */ +} ecapSyncOut_t; + +/** @brief Enumeration to define the Polarity +*/ +typedef enum +{ + RISING_EDGE = 0U, + FALLING_EDGE = 1U +}ecapEdgePolarity_t; + +typedef enum +{ + ACTIVE_HIGH = 0U, + ACTIVE_LOW = 1U +}ecapAPWMPolarity_t; + +/** @brief Enumeration to define the Mode of operation +*/ +typedef enum +{ + CONTINUOUS = 0U, + ONE_SHOT = 1U +}ecapMode_t; + +/** @brief Enumeration to define the capture events +*/ +typedef enum +{ + CAPTURE_EVENT1 = 0U, + CAPTURE_EVENT2 = 1U, + CAPTURE_EVENT3 = 2U, + CAPTURE_EVENT4 = 3U +}ecapEvent_t ; + +typedef enum +{ + RESET_ENABLE = 1U, + RESET_DISABLE = 0U +}ecapReset_t ; + +typedef struct ecap_config_reg + { + uint32 CONFIG_CTRPHS; + uint16 CONFIG_ECCTL1; + uint16 CONFIG_ECCTL2; + uint16 CONFIG_ECEINT; +}ecap_config_reg_t; + +#define ECAP1_CTRPHS_CONFIGVALUE 0x00000000U +#define ECAP1_ECCTL1_CONFIGVALUE ((uint16)((uint16)RISING_EDGE << 0U) | (uint16)((uint16)RESET_DISABLE << 1U) | (uint16)((uint16)RISING_EDGE << 2U) | (uint16)((uint16)RESET_DISABLE << 3U) | (uint16)((uint16)RISING_EDGE << 4U)| (uint16)((uint16)RESET_DISABLE << 5U) | (uint16)((uint16)RISING_EDGE << 6U) | (uint16)((uint16)RESET_DISABLE << 7U) | (uint16)((uint16)0U << 8U) | (uint16)((uint16)0U << 9U)) +#define ECAP1_ECCTL2_CONFIGVALUE ((uint16)((uint16)ONE_SHOT << 0U) | (uint16)((uint16)CAPTURE_EVENT1 << 1U) | (uint16)((uint16)0U << 9U) | (uint16)0x00000010U) +#define ECAP1_ECEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) + +#define ECAP2_CTRPHS_CONFIGVALUE 0x00000000U +#define ECAP2_ECCTL1_CONFIGVALUE ((uint16)((uint16)RISING_EDGE << 0U) | (uint16)((uint16)RESET_DISABLE << 1U) | (uint16)((uint16)RISING_EDGE << 2U) | (uint16)((uint16)RESET_DISABLE << 3U) | (uint16)((uint16)RISING_EDGE << 4U)| (uint16)((uint16)RESET_DISABLE << 5U) | (uint16)((uint16)RISING_EDGE << 6U) | (uint16)((uint16)RESET_DISABLE << 7U) | (uint16)((uint16)0U << 8U) | (uint16)((uint16)0U << 9U)) +#define ECAP2_ECCTL2_CONFIGVALUE ((uint16)((uint16)ONE_SHOT << 0U) | (uint16)((uint16)CAPTURE_EVENT1 << 1U) | (uint16)((uint16)0U << 9U) | (uint16)0x00000010U) +#define ECAP2_ECEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) + +#define ECAP3_CTRPHS_CONFIGVALUE 0x00000000U +#define ECAP3_ECCTL1_CONFIGVALUE ((uint16)((uint16)RISING_EDGE << 0U) | (uint16)((uint16)RESET_DISABLE << 1U) | (uint16)((uint16)RISING_EDGE << 2U) | (uint16)((uint16)RESET_DISABLE << 3U) | (uint16)((uint16)RISING_EDGE << 4U)| (uint16)((uint16)RESET_DISABLE << 5U) | (uint16)((uint16)RISING_EDGE << 6U) | (uint16)((uint16)RESET_DISABLE << 7U) | (uint16)((uint16)0U << 8U) | (uint16)((uint16)0U << 9U)) +#define ECAP3_ECCTL2_CONFIGVALUE ((uint16)((uint16)ONE_SHOT << 0U) | (uint16)((uint16)CAPTURE_EVENT1 << 1U) | (uint16)((uint16)0U << 9U) | (uint16)0x00000010U) +#define ECAP3_ECEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) + +#define ECAP4_CTRPHS_CONFIGVALUE 0x00000000U +#define ECAP4_ECCTL1_CONFIGVALUE ((uint16)((uint16)RISING_EDGE << 0U) | (uint16)((uint16)RESET_DISABLE << 1U) | (uint16)((uint16)RISING_EDGE << 2U) | (uint16)((uint16)RESET_DISABLE << 3U) | (uint16)((uint16)RISING_EDGE << 4U)| (uint16)((uint16)RESET_DISABLE << 5U) | (uint16)((uint16)RISING_EDGE << 6U) | (uint16)((uint16)RESET_DISABLE << 7U) | (uint16)((uint16)0U << 8U) | (uint16)((uint16)0U << 9U)) +#define ECAP4_ECCTL2_CONFIGVALUE ((uint16)((uint16)ONE_SHOT << 0U) | (uint16)((uint16)CAPTURE_EVENT1 << 1U) | (uint16)((uint16)0U << 9U) | (uint16)0x00000010U) +#define ECAP4_ECEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) + +#define ECAP5_CTRPHS_CONFIGVALUE 0x00000000U +#define ECAP5_ECCTL1_CONFIGVALUE ((uint16)((uint16)RISING_EDGE << 0U) | (uint16)((uint16)RESET_DISABLE << 1U) | (uint16)((uint16)RISING_EDGE << 2U) | (uint16)((uint16)RESET_DISABLE << 3U) | (uint16)((uint16)RISING_EDGE << 4U)| (uint16)((uint16)RESET_DISABLE << 5U) | (uint16)((uint16)RISING_EDGE << 6U) | (uint16)((uint16)RESET_DISABLE << 7U) | (uint16)((uint16)0U << 8U) | (uint16)((uint16)0U << 9U)) +#define ECAP5_ECCTL2_CONFIGVALUE ((uint16)((uint16)ONE_SHOT << 0U) | (uint16)((uint16)CAPTURE_EVENT1 << 1U) | (uint16)((uint16)0U << 9U) | (uint16)0x00000010U) +#define ECAP5_ECEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) + +#define ECAP6_CTRPHS_CONFIGVALUE 0x00000000U +#define ECAP6_ECCTL1_CONFIGVALUE ((uint16)((uint16)RISING_EDGE << 0U) | (uint16)((uint16)RESET_DISABLE << 1U) | (uint16)((uint16)RISING_EDGE << 2U) | (uint16)((uint16)RESET_DISABLE << 3U) | (uint16)((uint16)RISING_EDGE << 4U)| (uint16)((uint16)RESET_DISABLE << 5U) | (uint16)((uint16)RISING_EDGE << 6U) | (uint16)((uint16)RESET_DISABLE << 7U) | (uint16)((uint16)0U << 8U) | (uint16)((uint16)0U << 9U)) +#define ECAP6_ECCTL2_CONFIGVALUE ((uint16)((uint16)ONE_SHOT << 0U) | (uint16)((uint16)CAPTURE_EVENT1 << 1U) | (uint16)((uint16)0U << 9U) | (uint16)0x00000010U) +#define ECAP6_ECEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) + +/** + * @defgroup eCAP eCAP + * @brief Enhanced Capture Module. + * + * The enhanced Capture (eCAP) module is essential in systems where accurate timing of external events is + * important. This microcontroller implements 6 instances of the eCAP module. + * + * Related Files + * - reg_ecap.h + * - ecap.h + * - ecap.c + * @addtogroup eCAP + * @{ + */ +void ecapInit(void); +void ecapSetCounter(ecapBASE_t *ecap, uint32 value); +void ecapEnableCounterLoadOnSync(ecapBASE_t *ecap, uint32 phase); +void ecapDisableCounterLoadOnSync(ecapBASE_t *ecap); +void ecapSetEventPrescaler(ecapBASE_t *ecap, ecapPrescale_t prescale); +void ecapSetCaptureEvent1(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable); +void ecapSetCaptureEvent2(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable); +void ecapSetCaptureEvent3(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable); +void ecapSetCaptureEvent4(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable); +void ecapSetCaptureMode(ecapBASE_t *ecap, ecapMode_t capMode, ecapEvent_t event); +void ecapEnableCapture(ecapBASE_t *ecap); +void ecapDisableCapture(ecapBASE_t *ecap); +void ecapStartCounter(ecapBASE_t *ecap); +void ecapStopCounter(ecapBASE_t *ecap); +void ecapSetSyncOut(ecapBASE_t *ecap, ecapSyncOut_t syncOutSrc); +void ecapEnableAPWMmode(ecapBASE_t *ecap, ecapAPWMPolarity_t pwmPolarity, uint32 period, uint32 duty); +void ecapDisableAPWMMode(ecapBASE_t *ecap); +void ecapEnableInterrupt(ecapBASE_t *ecap, ecapInterrupt_t interrupts); +void ecapDisableInterrupt(ecapBASE_t *ecap, ecapInterrupt_t interrupts); +uint16 ecapGetEventStatus(ecapBASE_t *ecap, ecapInterrupt_t events); +void ecapClearFlag(ecapBASE_t *ecap, ecapInterrupt_t events); +uint32 ecapGetCAP1(ecapBASE_t *ecap); +uint32 ecapGetCAP2(ecapBASE_t *ecap); +uint32 ecapGetCAP3(ecapBASE_t *ecap); +uint32 ecapGetCAP4(ecapBASE_t *ecap); +void ecap1GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type); +void ecap2GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type); +void ecap3GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type); +void ecap4GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type); +void ecap5GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type); +void ecap6GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type); + +/** @brief Interrupt callback +* @param[in] ecap Handle to CAP object +* @param[in] flags Copy of interrupt flags +*/ +void ecapNotification(ecapBASE_t *ecap,uint16 flags); + +/**@}*/ + +#ifdef __cplusplus +} +#endif /*extern "C" */ + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ +#endif /*end of _CAP_H_ definition */ Index: firmware/include/emac.h =================================================================== diff -u --- firmware/include/emac.h (revision 0) +++ firmware/include/emac.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,404 @@ +/** + * \file emac.h + * + * \brief EMAC APIs and macros. + * + * This file contains the driver API prototypes and macro definitions. + */ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __EMAC_H__ +#define __EMAC_H__ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "sys_common.h" +#include "hw_reg_access.h" +#include "hw_emac.h" +#include "hw_emac_ctrl.h" +#include "mdio.h" +#include "phy_dp83640.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/*****************************************************************************/ +/* +** Macros which can be used as speed parameter to the API EMACRMIISpeedSet +*/ +#define EMAC_RMIISPEED_10MBPS (0x00000000U) +#define EMAC_RMIISPEED_100MBPS (0x00008000U) + +/* Macros for enabling taken as inputs from HALCoGen GUI. */ +#define EMAC_TX_ENABLE (1U) +#define EMAC_RX_ENABLE (1U) +#define EMAC_MII_ENABLE (1U) +#define EMAC_FULL_DUPLEX_ENABLE (1U) +#define EMAC_LOOPBACK_ENABLE (0U) +#define EMAC_BROADCAST_ENABLE (1U) +#define EMAC_UNICAST_ENABLE (1U) +#define EMAC_CHANNELNUMBER (0U) +#define EMAC_PHYADDRESS (0U) + +/* + * Macros to indicate EMAC Channel Numbers + */ +#define EMAC_CHANNEL_0 (0x00000000U) +#define EMAC_CHANNEL_1 (0x00000001U) +#define EMAC_CHANNEL_2 (0x00000002U) +#define EMAC_CHANNEL_3 (0x00000003U) +#define EMAC_CHANNEL_4 (0x00000004U) +#define EMAC_CHANNEL_5 (0x00000005U) +#define EMAC_CHANNEL_6 (0x00000006U) +#define EMAC_CHANNEL_7 (0x00000007U) +/* Macros which can be used as duplexMode parameter to the API +** EMACDuplexSet +*/ +#define EMAC_DUPLEX_FULL (0x00000001U) +#define EMAC_DUPLEX_HALF (0x00000000U) + +/* +** Macros which can be used as matchFilt parameters to the API +** EMACMACAddrSet +*/ +/* Address not used to match/filter incoming packets */ +#define EMAC_MACADDR_NO_MATCH_NO_FILTER (0x00000000U) + +/* Address will be used to filter incoming packets */ +#define EMAC_MACADDR_FILTER (0x00100000U) + +/* Address will be used to match incoming packets */ +#define EMAC_MACADDR_MATCH (0x00180000U) + +/* +** Macros which can be passed as eoiFlag to EMACRxIntAckToClear API +*/ +#define EMAC_INT_CORE0_RX (0x1U) +#define EMAC_INT_CORE1_RX (0x5U) +#define EMAC_INT_CORE2_RX (0x9U) + +/* +** Macros which can be passed as eoiFlag to EMACTxIntAckToClear API +*/ +#define EMAC_INT_CORE0_TX (0x2U) +#define EMAC_INT_CORE1_TX (0x6U) +#define EMAC_INT_CORE2_TX (0xAU) +/* Base Addresses */ +#define EMAC_CTRL_RAM_0_BASE 0xFC520000U +#define EMAC_0_BASE 0xFCF78000U +#define EMAC_CTRL_0_BASE 0xFCF78800U +#define MDIO_0_BASE 0xFCF78900U + +/*MAC address length*/ +#define EMAC_HWADDR_LEN 6U +#define MAX_EMAC_INSTANCE 1U +#define SIZE_EMAC_CTRL_RAM 0x2000U +#define MAX_TRANSFER_UNIT 1514U +#define MAX_RX_PBUF_ALLOC (10U) +#define MIN_PKT_LEN 60U +#define MIN_PACKET_SIZE (46U) + + + + +#define EMAC_BUF_DESC_OWNER 0x20000000U +#define EMAC_BUF_DESC_SOP 0x80000000U +#define EMAC_BUF_DESC_EOP 0x40000000U +#define EMAC_BUF_DESC_EOQ 0x10000000U + +#define EMAC_NETSTATREGS(n) ((uint32)0x200U + (uint32)((n)*4U)) + +/* Error Signalling Macros */ +#define EMAC_ERR_CONNECT 0x2U /* Not connected. */ +#define EMAC_ERR_OK 0x1U /* No error, everything OK. */ + + +/* Macros for Configuration Value Registers */ +#define EMAC_TXCONTROL_CONFIGVALUE 0x00000001U +#define EMAC_RXCONTROL_CONFIGVALUE 0x00000001U +#define EMAC_TXINTMASKSET_CONFIGVALUE 0x00000001U +#define EMAC_TXINTMASKCLEAR_CONFIGVALUE 0x00000001U +#define EMAC_RXINTMASKSET_CONFIGVALUE 0x00000001U +#define EMAC_RXINTMASKCLEAR_CONFIGVALUE 0x00000001U +#define EMAC_MACSRCADDRHI_CONFIGVALUE ((uint32)((uint32)0xFFU << 24U) | (uint32)((uint32)0xFFU << 16U) | (uint32)((uint32)0xFFU << 8U) | (uint32)((uint32)0xFFU)) +#define EMAC_MACSRCADDRLO_CONFIGVALUE ((uint32)((uint32)0xFFU << 8U) | (uint32)((uint32)0xFFU)) +#define EMAC_MDIOCONTROL_CONFIGVALUE 0x4114001FU +#define EMAC_C0RXEN_CONFIGVALUE 0x00000001U +#define EMAC_C0TXEN_CONFIGVALUE 0x00000001U + +/* Structure to store pending status from the Tx Interrupt Status Registers. */ +typedef struct emac_tx_int_status{ + volatile uint32 intstatmasked; /* Pending interrupt status read from the Transmit Interrupt Status (Masked) Register (TXINTSTATMASKED) */ + volatile uint32 intstatraw; /* Pending interrupt status read from the Transmit Interrupt Status (Unmasked) Register (TXINTSTATRAW) */ +}emac_tx_int_status_t; + +/* Structure to store pending status from the Rx Interrupt Status Registers. */ +typedef struct emac_rx_int_status{ + + volatile uint32 intstatmasked_pend; /* Reads RXnPEND value from the Receive Interrupt Status (Unmasked) Register (RXINTSTATRAW) */ + volatile uint32 intstatmasked_threshpend; /* Reads RXnTRHESHPEND value from the Receive Interrupt Status (Unmasked) Register (RXINTSTATRAW) */ + + volatile uint32 intstatraw_pend; /* Reads RXnPEND value from the Receive Interrupt Status (Unmasked) Register (RXINTSTATRAW) */ + volatile uint32 intstatraw_threshpend; /* Reads RXnTRHESHPEND value from the Receive Interrupt Status (Unmasked) Register (RXINTSTATRAW) */ + +}emac_rx_int_status_t; + +/* EMAC TX Buffer descriptor data structure - Refer TRM for details about the buffer descriptor structure.*/ +typedef struct emac_tx_bd { + volatile struct emac_tx_bd *next; + volatile uint32 bufptr; /* Pointer to the actual Buffer storing the data to be transmitted. */ + volatile uint32 bufoff_len; /*Buffer Offset and Buffer Length (16 bits each) */ + volatile uint32 flags_pktlen; /*Status flags and Packet Length. (16 bits each)*/ +}emac_tx_bd_t; + +/* EMAC RX Buffer descriptor data structure - Refer TRM for details about the buffer descriptor structure. */ +typedef struct emac_rx_bd { + volatile struct emac_rx_bd *next; /*Used as a pointer for next element in the linked list of descriptors.*/ + volatile uint32 bufptr; /*Pointer to the actual Buffer which will store the received data.*/ + volatile uint32 bufoff_len; /*Buffer Offset and Buffer Length (16 bits each)*/ + volatile uint32 flags_pktlen; /*Status flags and Packet Length. (16 bits each)*/ +}emac_rx_bd_t; + +/** + * Helper struct to hold the data used to operate on a particular + * receive channel + */ +typedef struct rxch_struct { + volatile emac_rx_bd_t *free_head; /*Used to point to the free buffer descriptor which can receive new data.*/ + volatile emac_rx_bd_t *active_head; /*Used to point to the active descriptor in the chain which is receiving.*/ + volatile emac_rx_bd_t *active_tail; /*Used to point to the last descriptor in the chain.*/ +}rxch_t; + +/** + * Helper struct to hold the data used to operate on a particular + * transmit channel + */ +typedef struct txch_struct { + volatile emac_tx_bd_t *free_head; /*Used to point to the free buffer descriptor which can transmit new data.*/ + volatile emac_tx_bd_t *active_tail; /*Used to point to the last descriptor in the chain.*/ + volatile emac_tx_bd_t *next_bd_to_process; /*Used to point to the next descriptor in the chain to be processed.*/ +}txch_t; +/** + * Helper struct to hold private data used to operate the ethernet interface. + */ +typedef struct hdkif_struct { + /* MAC Address of the Module. */ + uint8_t mac_addr[6]; + + /* emac base address */ + uint32 emac_base; + + /* emac controller base address */ + volatile uint32 emac_ctrl_base; + volatile uint32 emac_ctrl_ram; + + /* mdio base address */ + volatile uint32 mdio_base; + + /* phy parameters for this instance - for future use */ + uint32 phy_addr; + boolean (*phy_autoneg)(uint32 param1, uint32 param2, uint16 param3); + boolean (*phy_partnerability)(uint32 param4, uint32 param5, uint16* param6); + + /* The tx/rx channels for the interface */ + txch_t txchptr; + rxch_t rxchptr; +}hdkif_t; + +/*Ethernet Frame Structure */ +typedef struct ethernet_frame +{ + uint8 dest_addr[6]; /* Destination MAC Address */ + uint8 src_addr[6]; /*Source MAC Address. */ + uint16 frame_length; /* Data Frame Length */ + uint8 data[1500]; /* Data */ +}ethernet_frame_t; + +/* Struct used to take packet data input from the user for transmit APIs. */ +typedef struct pbuf_struct { + /** next pbuf in singly linked pbuf chain */ + struct pbuf_struct *next; + + /** + * Pointer to the actual ethernet packet/packet fragment to be transmitted. + * The packet needs to be in the following format: + * |Destination MAC Address (6 bytes)| Source MAC Address (6 bytes)| Length/Type (2 bytes)| Data (46- 1500 bytes) + * The data can be split up over multiple pbufs which are linked as a linked list. + **/ + uint8 *payload; + + /** + * total length of this buffer and all next buffers in chain + * belonging to the same packet. + * + * For non-queue packet chains this is the invariant: + * p->tot_len == p->len + (p->next? p->next->tot_len: 0) + */ + uint16 tot_len; + + /** length of this buffer */ + uint16 len; + +}pbuf_t; + +/* Structure to hold the values of the EMAC Configuration Registers. */ +typedef struct emac_config_reg_struct { +/* EMAC Module Register Values */ +uint32 TXCONTROL; /* Transmit Control Register. */ +uint32 RXCONTROL; /* Receive Control Register */ +uint32 TXINTMASKSET; /* Transmit Interrupt Mask Set Register */ +uint32 TXINTMASKCLEAR; /* Transmit Interrupt Clear Register */ +uint32 RXINTMASKSET; /* Receive Interrupt Mask Set Register */ +uint32 RXINTMASKCLEAR; /*Receive Interrupt Mask Clear Register*/ +uint32 MACSRCADDRHI; /*MAC Source Address High Bytes Register*/ +uint32 MACSRCADDRLO; /*MAC Source Address Low Bytes Register*/ + +/*MDIO Module Registers */ +uint32 MDIOCONTROL; /*MDIO Control Register. */ + +/* EMAC Control Module Registers */ +uint32 C0RXEN; /*EMAC Control Module Receive Interrupt Enable Register*/ +uint32 C0TXEN; /*EMAC Control Module Transmit Interrupt Enable Register*/ +}emac_config_reg_t; +/*****************************************************************************/ +/** + * @defgroup EMACMDIO EMAC/MDIO + * @brief Ethernet Media Access Controller/Management Data Input/Output. + * + * The EMAC controls the flow of packet data from the system to the PHY. The MDIO module controls PHY + * configuration and status monitoring. + * + * Both the EMAC and the MDIO modules interface to the system core through a custom interface that + * allows efficient data transmission and reception. This custom interface is referred to as the EMAC control + * module and is considered integral to the EMAC/MDIO peripheral + * + * Related Files + * - emac.h + * - emac.c + * - hw_emac.h + * - hw_emac_ctrl.h + * - hw_mdio.h + * - hw_reg_access.h + * - mdio.h + * - mdio.c + * @addtogroup EMACMDIO + * @{ + */ +/* +** Prototypes for the APIs +*/ +extern uint32 EMACLinkSetup(hdkif_t *hdkif); +extern void EMACInstConfig(hdkif_t *hdkif); +extern void EMACTxIntPulseEnable(uint32 emacBase, uint32 emacCtrlBase, + uint32 ctrlCore, uint32 channel); +extern void EMACTxIntPulseDisable(uint32 emacBase, uint32 emacCtrlBase, + uint32 ctrlCore, uint32 channel); +extern void EMACRxIntPulseEnable(uint32 emacBase, uint32 emacCtrlBase, + uint32 ctrlCore, uint32 channel); +extern void EMACRxIntPulseDisable(uint32 emacBase, uint32 emacCtrlBase, + uint32 ctrlCore, uint32 channel); +extern void EMACRMIISpeedSet(uint32 emacBase, uint32 speed); +extern void EMACDuplexSet(uint32 emacBase, uint32 duplexMode); +extern void EMACTxEnable(uint32 emacBase); +extern void EMACTxDisable(uint32 emacBase); +extern void EMACRxEnable(uint32 emacBase); +extern void EMACRxDisable(uint32 emacBase); +extern void EMACTxHdrDescPtrWrite(uint32 emacBase, uint32 descHdr, + uint32 channel); +extern void EMACRxHdrDescPtrWrite(uint32 emacBase, uint32 descHdr, + uint32 channel); +extern void EMACInit(uint32 emacCtrlBase, uint32 emacBase); +extern void EMACMACSrcAddrSet(uint32 emacBase, uint8 macAddr[6]); +extern void EMACMACAddrSet(uint32 emacBase, uint32 channel, + uint8 macAddr[6], uint32 matchFilt); +extern void EMACMIIEnable(uint32 emacBase); +extern void EMACMIIDisable(uint32 emacBase); +extern void EMACRxUnicastSet(uint32 emacBase, uint32 channel); +extern void EMACRxUnicastClear(uint32 emacBase, uint32 channel); +extern void EMACCoreIntAck(uint32 emacBase, uint32 eoiFlag); +extern void EMACTxCPWrite(uint32 emacBase, uint32 channel, + uint32 comPtr); +extern void EMACRxCPWrite(uint32 emacBase, uint32 channel, + uint32 comPtr); +extern void EMACRxBroadCastEnable(uint32 emacBase, uint32 channel); +extern void EMACRxBroadCastDisable(uint32 emacBase, uint32 channel); +extern void EMACRxMultiCastEnable(uint32 emacBase, uint32 channel); +extern void EMACRxMultiCastDisable(uint32 emacBase, uint32 channel); +extern void EMACNumFreeBufSet(uint32 emacBase, uint32 channel, + uint32 nBuf); +extern uint32 EMACIntVectorGet(uint32 emacBase); +uint32 EMACHWInit(uint8_t macaddr[6U]); +void EMACTxTeardown(uint32 emacBase, uint32 channel); +void EMACRxTeardown(uint32 emacBase, uint32 channel); +void EMACFrameSelect(uint32 emacBase, uint64 hashTable); +void EMACTxPrioritySelect(uint32 emacBase, uint32 txPType); +void EMACSoftReset(uint32 emacCtrlBase, uint32 emacBase); +void EMACEnableIdleState(uint32 emacBase); +void EMACDisableIdleState(uint32 emacBase); +void EMACEnableLoopback(uint32 emacBase); +void EMACDisableLoopback(uint32 emacBase); +void EMACTxFlowControlEnable(uint32 emacBase); +void EMACTxFlowControlDisable(uint32 emacBase); +void EMACRxFlowControlEnable(uint32 emacBase); +void EMACRxFlowControlDisable(uint32 emacBase); +void EMACRxSetFlowThreshold(uint32 emacBase, uint32 channel, uint32 threshold); +uint32 EMACReadNetStatRegisters(uint32 emacBase, uint32 statRegNo); +void EMACDMAInit(hdkif_t *hdkif); +boolean EMACTransmit(hdkif_t *hdkif, pbuf_t *pbuf); +void EMACTxIntHandler(hdkif_t *hdkif); +void EMACReceive(hdkif_t *hdkif); +/* Notification Function to which received packets are passed after processing */ +void emacTxNotification(hdkif_t *hdkif); +void emacRxNotification(hdkif_t *hdkif); +void EMACTxIntStat(uint32 emacBase, uint32 channel, emac_tx_int_status_t *txintstat); +void EMACRxIntStat(uint32 emacBase, uint32 channel, emac_rx_int_status_t *rxintstat); +void EMACGetConfigValue(emac_config_reg_t *config_reg, config_value_type_t type); + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +#ifdef __cplusplus +} +#endif + +/**@}*/ +#endif /* __EMAC_H__ */ Index: firmware/include/eqep.h =================================================================== diff -u --- firmware/include/eqep.h (revision 0) +++ firmware/include/eqep.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,716 @@ +/** @file eqep.h +* @brief EQEP Driver Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __eQEP_H__ +#define __eQEP_H__ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "reg_eqep.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/*QDECCTL Register */ +#define eQEP_QDECCTL_QSRC ((uint16)((uint16)3U << 14U)) /* "Reason - TI_Fee_Fix is a symbolic constant."*/ +#define TI_FEE_FLASH_ERROR_CORRECTION_HANDLING TI_Fee_Fix +#else +/*SAFETYMCUSW 79 S MR:19.4 "Reason - TI_Fee_None is a symbolic constant."*/ +#define TI_FEE_FLASH_ERROR_CORRECTION_HANDLING TI_Fee_None +#endif + +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_MAXIMUM_BLOCKING_TIME is a symbolic constant"*/ +#define TI_FEE_MAXIMUM_BLOCKING_TIME FEE_MAXIMUM_BLOCKING_TIME +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_OPERATING_FREQUENCY is a symbolic constant."*/ +#define TI_FEE_OPERATING_FREQUENCY FEE_OPERATING_FREQUENCY +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_FLASH_ERROR_CORRECTION_ENABLE is a symbolic constant."*/ +#define TI_FEE_FLASH_ERROR_CORRECTION_ENABLE FEE_FLASH_ERROR_CORRECTION_ENABLE +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_FLASH_CHECKSUM_ENABLE is a symbolic constant."*/ +#define TI_FEE_FLASH_CHECKSUM_ENABLE FEE_FLASH_CHECKSUM_ENABLE +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_FLASH_WRITECOUNTER_SAVE is a symbolic constant."*/ +#define TI_FEE_FLASH_WRITECOUNTER_SAVE FEE_FLASH_WRITECOUNTER_SAVE +/*SAFETYMCUSW 79 S MR:19.4 "Reason - NVM_DATASET_SELECTION_BITS is a symbolic constant."*/ +#define TI_FEE_DATASELECT_BITS NVM_DATASET_SELECTION_BITS +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_NUMBER_OF_EEPS is a symbolic constant."*/ +#define TI_FEE_NUMBER_OF_EEPS FEE_NUMBER_OF_EEPS +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_INDEX is a symbolic constant."*/ +#define TI_FEE_INDEX FEE_INDEX +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_PAGE_OVERHEAD is a symbolic constant."*/ +#define TI_FEE_PAGE_OVERHEAD FEE_PAGE_OVERHEAD +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_BLOCK_OVERHEAD is a symbolic constant."*/ +#define TI_FEE_BLOCK_OVERHEAD FEE_BLOCK_OVERHEAD +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_VIRTUAL_PAGE_SIZE is a symbolic constant."*/ +#define TI_FEE_VIRTUAL_PAGE_SIZE FEE_VIRTUAL_PAGE_SIZE +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_VIRTUAL_SECTOR_OVERHEAD is a symbolic constant."*/ +#define TI_FEE_VIRTUAL_SECTOR_OVERHEAD FEE_VIRTUAL_SECTOR_OVERHEAD +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_NUMBER_OF_UNCONFIGUREDBLOCKSTOCOPY is a symbolic constant."*/ +#define TI_FEE_NUMBER_OF_UNCONFIGUREDBLOCKSTOCOPY FEE_NUMBER_OF_UNCONFIGUREDBLOCKSTOCOPY +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_NUMBER_OF_EIGHTBYTEWRITES is a symbolic constant."*/ +#define TI_FEE_NUMBER_OF_EIGHTBYTEWRITES FEE_NUMBER_OF_EIGHTBYTEWRITES +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_NVM_JOB_END_NOTIFICATION is a symbolic constant."*/ +#define TI_FEE_NVM_JOB_END_NOTIFICATION FEE_NVM_JOB_END_NOTIFICATION +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_NVM_JOB_ERROR_NOTIFICATION is a symbolic constant."*/ +#define TI_FEE_NVM_JOB_ERROR_NOTIFICATION FEE_NVM_JOB_ERROR_NOTIFICATION +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_POLLING_MODE is a symbolic constant."*/ +#define TI_FEE_POLLING_MODE FEE_POLLING_MODE +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_CHECK_BANK7_ACCESS is a symbolic constant."*/ +#ifndef FEE_CHECK_BANK7_ACCESS +#define TI_FEE_CHECK_BANK7_ACCESS STD_ON +#else +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_CHECK_BANK7_ACCESS is a symbolic constant."*/ +#define TI_FEE_CHECK_BANK7_ACCESS STD_ON +#endif +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_TOTAL_BLOCKS_DATASETS is a symbolic constant."*/ +#define TI_FEE_TOTAL_BLOCKS_DATASETS FEE_TOTAL_BLOCKS_DATASETS +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_VIRTUALSECTOR_SIZE is a symbolic constant."*/ +#define TI_FEE_VIRTUALSECTOR_SIZE FEE_VIRTUALSECTOR_SIZE +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_PHYSICALSECTOR_SIZE is a symbolic constant."*/ +#define TI_FEE_PHYSICALSECTOR_SIZE FEE_PHYSICALSECTOR_SIZE +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_GENERATE_DEVICEANDVIRTUALSECTORSTRUC is a symbolic constant."*/ +#define TI_FEE_GENERATE_DEVICEANDVIRTUALSECTORSTRUC FEE_GENERATE_DEVICEANDVIRTUALSECTORSTRUC +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_USEPARTIALERASEDSECTOR is a symbolic constant."*/ +#define TI_FEE_USEPARTIALERASEDSECTOR FEE_USEPARTIALERASEDSECTOR + +/*----------------------------------------------------------------------------*/ +/* Virtual Sector Configuration */ + +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_NUMBER_OF_VIRTUAL_SECTORS is a symbolic constant."*/ +/*SAFETYMCUSW 61 X MR:1.4,5.1 "Reason - Similar Identifier name is required here."*/ +#define TI_FEE_NUMBER_OF_VIRTUAL_SECTORS FEE_NUMBER_OF_VIRTUAL_SECTORS +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_NUMBER_OF_VIRTUAL_SECTORS_EEP1 is a symbolic constant."*/ +/*SAFETYMCUSW 384 S MR:1.4,5.1 "Reason - Similar Identifier name is required here."*/ +/*SAFETYMCUSW 61 X MR:1.4,5.1 "Reason - Similar Identifier name is required here."*/ +#define TI_FEE_NUMBER_OF_VIRTUAL_SECTORS_EEP1 FEE_NUMBER_OF_VIRTUAL_SECTORS_EEP1 + + +/*----------------------------------------------------------------------------*/ +/* Block Configuration */ +/*SAFETYMCUSW 79 S MR:19.4 "Reason - FEE_NUMBER_OF_BLOCKS is a symbolic constant."*/ +#define TI_FEE_NUMBER_OF_BLOCKS FEE_NUMBER_OF_BLOCKS +/*SAFETYMCUSW 79 S MR:19.4 "Reason - TI_FEE_VARIABLE_DATASETS is a symbolic constant."*/ +#define TI_FEE_VARIABLE_DATASETS STD_ON + + +#endif /* TI_FEE_DRIVER */ + +#endif /* FEE_INTERFACE_H */ +/********************************************************************************************************************** + * END OF FILE: fee_interface.h + *********************************************************************************************************************/ Index: firmware/include/gio.h =================================================================== diff -u --- firmware/include/gio.h (revision 0) +++ firmware/include/gio.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,174 @@ +/** @file gio.h +* @brief GIO Driver Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __GIO_H__ +#define __GIO_H__ + +#include "reg_gio.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +typedef struct gio_config_reg +{ + uint32 CONFIG_INTDET; + uint32 CONFIG_POL; + uint32 CONFIG_INTENASET; + uint32 CONFIG_LVLSET; + + uint32 CONFIG_PORTADIR; + uint32 CONFIG_PORTAPDR; + uint32 CONFIG_PORTAPSL; + uint32 CONFIG_PORTAPULDIS; + + uint32 CONFIG_PORTBDIR; + uint32 CONFIG_PORTBPDR; + uint32 CONFIG_PORTBPSL; + uint32 CONFIG_PORTBPULDIS; +}gio_config_reg_t; + +#define GIO_INTDET_CONFIGVALUE 0U +#define GIO_POL_CONFIGVALUE ((uint32)((uint32)0U << 0U) \ + | (uint32)((uint32)0U << 1U) \ + | (uint32)((uint32)0U << 2U) \ + | (uint32)((uint32)0U << 3U) \ + | (uint32)((uint32)0U << 4U) \ + | (uint32)((uint32)0U << 5U) \ + | (uint32)((uint32)0U << 6U) \ + | (uint32)((uint32)0U << 7U) \ + | (uint32)((uint32)0U << 8U) \ + | (uint32)((uint32)0U << 9U) \ + | (uint32)((uint32)0U << 10U)\ + | (uint32)((uint32)0U << 11U)\ + | (uint32)((uint32)0U << 12U)\ + | (uint32)((uint32)0U << 13U)\ + | (uint32)((uint32)0U << 14U)\ + | (uint32)((uint32)0U << 15U)) + + +#define GIO_INTENASET_CONFIGVALUE ((uint32)((uint32)0U << 0U) \ + | (uint32)((uint32)0U << 1U) \ + | (uint32)((uint32)0U << 2U) \ + | (uint32)((uint32)0U << 3U) \ + | (uint32)((uint32)0U << 4U) \ + | (uint32)((uint32)0U << 5U) \ + | (uint32)((uint32)0U << 6U) \ + | (uint32)((uint32)0U << 7U) \ + | (uint32)((uint32)0U << 8U) \ + | (uint32)((uint32)0U << 9U) \ + | (uint32)((uint32)0U << 10U)\ + | (uint32)((uint32)0U << 11U)\ + | (uint32)((uint32)0U << 12U)\ + | (uint32)((uint32)0U << 13U)\ + | (uint32)((uint32)0U << 14U)\ + | (uint32)((uint32)0U << 15U)) + +#define GIO_LVLSET_CONFIGVALUE ((uint32)((uint32)0U << 0U) \ + | (uint32)((uint32)0U << 1U) \ + | (uint32)((uint32)0U << 2U) \ + | (uint32)((uint32)0U << 3U) \ + | (uint32)((uint32)0U << 4U) \ + | (uint32)((uint32)0U << 5U) \ + | (uint32)((uint32)0U << 6U) \ + | (uint32)((uint32)0U << 7U) \ + | (uint32)((uint32)0U << 8U) \ + | (uint32)((uint32)0U << 9U) \ + | (uint32)((uint32)0U << 10U)\ + | (uint32)((uint32)0U << 11U)\ + | (uint32)((uint32)0U << 12U)\ + | (uint32)((uint32)0U << 13U)\ + | (uint32)((uint32)0U << 14U)\ + | (uint32)((uint32)0U << 15U)) + +#define GIO_PORTADIR_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 7U)) +#define GIO_PORTAPDR_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 7U)) +#define GIO_PORTAPSL_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 7U)) +#define GIO_PORTAPULDIS_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) |(uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 7U)) + +#define GIO_PORTBDIR_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 7U)) +#define GIO_PORTBPDR_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 7U)) +#define GIO_PORTBPSL_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 7U)) +#define GIO_PORTBPULDIS_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) |(uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 7U)) + + +/** + * @defgroup GIO GIO + * @brief General-Purpose Input/Output Module. + * + * The GIO module provides the family of devices with input/output (I/O) capability. + * The I/O pins are bidirectional and bit-programmable. + * The GIO module also supports external interrupt capability. + * + * Related Files + * - reg_gio.h + * - gio.h + * - gio.c + * @addtogroup GIO + * @{ + */ + +/* GIO Interface Functions */ +void gioInit(void); +void gioSetDirection(gioPORT_t *port, uint32 dir); +void gioSetBit(gioPORT_t *port, uint32 bit, uint32 value); +void gioSetPort(gioPORT_t *port, uint32 value); +uint32 gioGetBit(gioPORT_t *port, uint32 bit); +uint32 gioGetPort(gioPORT_t *port); +void gioToggleBit(gioPORT_t *port, uint32 bit); +void gioEnableNotification(gioPORT_t *port, uint32 bit); +void gioDisableNotification(gioPORT_t *port, uint32 bit); +void gioNotification(gioPORT_t *port, uint32 bit); +void gioGetConfigValue(gio_config_reg_t *config_reg, config_value_type_t type); + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/**@}*/ +#ifdef __cplusplus +} +#endif /*extern "C" */ + +#endif Index: firmware/include/hal_stdtypes.h =================================================================== diff -u --- firmware/include/hal_stdtypes.h (revision 0) +++ firmware/include/hal_stdtypes.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,196 @@ +/** @file hal_stdtypes.h +* @brief HALCoGen standard types header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Type and Global definitions which are relevant for all drivers. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __HAL_STDTYPES_H__ +#define __HAL_STDTYPES_H__ + +#include +#include + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ +/************************************************************/ +/* Type Definitions */ +/************************************************************/ +#ifndef _UINT64_DECLARED +typedef uint64_t uint64; +#define _UINT64_DECLARED +#endif + +#ifndef _UINT32_DECLARED +typedef uint32_t uint32; +#define _UINT32_DECLARED +#endif + +#ifndef _UINT16_DECLARED +typedef uint16_t uint16; +#define _UINT16_DECLARED +#endif + +#ifndef _UINT8_DECLARED +typedef uint8_t uint8; +#define _UINT8_DECLARED +#endif + +#ifndef _BOOLEAN_DECLARED +#ifdef __cplusplus +typedef bool boolean; +#else +typedef _Bool boolean; +#endif +#define _BOOLEAN_DECLARED +#endif + +#ifndef _SINT64_DECLARED +typedef int64_t sint64; +#define _SINT64_DECLARED +#endif + +#ifndef _SINT32_DECLARED +typedef int32_t sint32; +#define _SINT32_DECLARED +#endif + +#ifndef _SINT16_DECLARED +typedef int16_t sint16; +#define _SINT16_DECLARED +#endif + +#ifndef _SINT8_DECLARED +typedef int8_t sint8; +#define _SINT8_DECLARED +#endif + +#ifndef _FLOAT32_DECLARED +typedef float float32; +#define _FLOAT32_DECLARED +#endif + +#ifndef _FLOAT64_DECLARED +typedef double float64; +#define _FLOAT64_DECLARED +#endif + + +typedef uint8 Std_ReturnType; + +typedef struct +{ + uint16 vendorID; + uint16 moduleID; + uint8 instanceID; + uint8 sw_major_version; + uint8 sw_minor_version; + uint8 sw_patch_version; +} Std_VersionInfoType; + +/*****************************************************************************/ +/* SYMBOL DEFINITIONS */ +/*****************************************************************************/ +#ifndef STATUSTYPEDEFINED + #define STATUSTYPEDEFINED + #define E_OK 0x00U + + typedef unsigned char StatusType; +#endif + +#ifndef E_NOT_OK +#define E_NOT_OK 0x01U +#endif + +#ifndef STD_ON +#define STD_ON 0x01U +#endif + +#ifndef STD_OFF +#define STD_OFF 0x00U +#endif + + +/************************************************************/ +/* Global Definitions */ +/************************************************************/ +/** @def NULL +* @brief NULL definition +*/ + +#ifndef NULL + /*SAFETYMCUSW 218 S MR:20.2 "Custom Type Definition." */ + #define NULL ((void *) 0U) +#endif + +/*****************************************************************************/ +/* Define: NULL_PTR */ +/* Description: Void pointer to 0 */ +/*****************************************************************************/ +#ifndef NULL_PTR + #define NULL_PTR ((void *)0x0) +#endif + +/** @def TRUE +* @brief definition for TRUE +*/ +#ifndef TRUE + #define TRUE true +#endif + +/** @def FALSE +* @brief BOOLEAN definition for FALSE +*/ +#ifndef FALSE + #define FALSE false +#endif + +/*****************************************************************************/ +/* Define: NULL_PTR */ +/* Description: Void pointer to 0 */ +/*****************************************************************************/ +#ifndef NULL_PTR +#define NULL_PTR ((void *)0x0U) +#endif + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +#endif /* __HAL_STDTYPES_H__ */ Index: firmware/include/het.h =================================================================== diff -u --- firmware/include/het.h (revision 0) +++ firmware/include/het.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,864 @@ +/** @file het.h +* @brief HET Driver Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +#ifndef __HET_H__ +#define __HET_H__ + +#include "reg_het.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/** @def pwm0 +* @brief Pwm signal 0 +* +* Alias for pwm signal 0 +*/ +#define pwm0 0U + +/** @def pwm1 +* @brief Pwm signal 1 +* +* Alias for pwm signal 1 +*/ +#define pwm1 1U + +/** @def pwm2 +* @brief Pwm signal 2 +* +* Alias for pwm signal 2 +*/ +#define pwm2 2U + +/** @def pwm3 +* @brief Pwm signal 3 +* +* Alias for pwm signal 3 +*/ +#define pwm3 3U + +/** @def pwm4 +* @brief Pwm signal 4 +* +* Alias for pwm signal 4 +*/ +#define pwm4 4U + +/** @def pwm5 +* @brief Pwm signal 5 +* +* Alias for pwm signal 5 +*/ +#define pwm5 5U + +/** @def pwm6 +* @brief Pwm signal 6 +* +* Alias for pwm signal 6 +*/ +#define pwm6 6U + +/** @def pwm7 +* @brief Pwm signal 7 +* +* Alias for pwm signal 7 +*/ +#define pwm7 7U + + +/** @def edge0 +* @brief Edge signal 0 +* +* Alias for edge signal 0 +*/ +#define edge0 0U + +/** @def edge1 +* @brief Edge signal 1 +* +* Alias for edge signal 1 +*/ +#define edge1 1U + +/** @def edge2 +* @brief Edge signal 2 +* +* Alias for edge signal 2 +*/ +#define edge2 2U + +/** @def edge3 +* @brief Edge signal 3 +* +* Alias for edge signal 3 +*/ +#define edge3 3U + +/** @def edge4 +* @brief Edge signal 4 +* +* Alias for edge signal 4 +*/ +#define edge4 4U + +/** @def edge5 +* @brief Edge signal 5 +* +* Alias for edge signal 5 +*/ +#define edge5 5U + +/** @def edge6 +* @brief Edge signal 6 +* +* Alias for edge signal 6 +*/ +#define edge6 6U + +/** @def edge7 +* @brief Edge signal 7 +* +* Alias for edge signal 7 +*/ +#define edge7 7U + + +/** @def cap0 +* @brief Capture signal 0 +* +* Alias for capture signal 0 +*/ +#define cap0 0U + +/** @def cap1 +* @brief Capture signal 1 +* +* Alias for capture signal 1 +*/ +#define cap1 1U + +/** @def cap2 +* @brief Capture signal 2 +* +* Alias for capture signal 2 +*/ +#define cap2 2U + +/** @def cap3 +* @brief Capture signal 3 +* +* Alias for capture signal 3 +*/ +#define cap3 3U + +/** @def cap4 +* @brief Capture signal 4 +* +* Alias for capture signal 4 +*/ +#define cap4 4U + +/** @def cap5 +* @brief Capture signal 5 +* +* Alias for capture signal 5 +*/ +#define cap5 5U + +/** @def cap6 +* @brief Capture signal 6 +* +* Alias for capture signal 6 +*/ +#define cap6 6U + +/** @def cap7 +* @brief Capture signal 7 +* +* Alias for capture signal 7 +*/ +#define cap7 7U + +/** @def pwmEND_OF_DUTY +* @brief Pwm end of duty +* +* Alias for pwm end of duty notification +*/ +#define pwmEND_OF_DUTY 2U + +/** @def pwmEND_OF_PERIOD +* @brief Pwm end of period +* +* Alias for pwm end of period notification +*/ +#define pwmEND_OF_PERIOD 4U + +/** @def pwmEND_OF_BOTH +* @brief Pwm end of duty and period +* +* Alias for pwm end of duty and period notification +*/ +#define pwmEND_OF_BOTH 6U + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @struct hetBase +* @brief HET Register Definition +* +* This structure is used to access the HET module registers. +*/ +/** @typedef hetBASE_t +* @brief HET Register Frame Type Definition +* +* This type is used to access the HET Registers. +*/ + +enum hetPinSelect +{ + PIN_HET_0 = 0U, + PIN_HET_1 = 1U, + PIN_HET_2 = 2U, + PIN_HET_3 = 3U, + PIN_HET_4 = 4U, + PIN_HET_5 = 5U, + PIN_HET_6 = 6U, + PIN_HET_7 = 7U, + PIN_HET_8 = 8U, + PIN_HET_9 = 9U, + PIN_HET_10 = 10U, + PIN_HET_11 = 11U, + PIN_HET_12 = 12U, + PIN_HET_13 = 13U, + PIN_HET_14 = 14U, + PIN_HET_15 = 15U, + PIN_HET_16 = 16U, + PIN_HET_17 = 17U, + PIN_HET_18 = 18U, + PIN_HET_19 = 19U, + PIN_HET_20 = 20U, + PIN_HET_21 = 21U, + PIN_HET_22 = 22U, + PIN_HET_23 = 23U, + PIN_HET_24 = 24U, + PIN_HET_25 = 25U, + PIN_HET_26 = 26U, + PIN_HET_27 = 27U, + PIN_HET_28 = 28U, + PIN_HET_29 = 29U, + PIN_HET_30 = 30U, + PIN_HET_31 = 31U +}; + + +/** @struct hetSignal +* @brief HET Signal Definition +* +* This structure is used to define a pwm signal. +*/ +/** @typedef hetSIGNAL_t +* @brief HET Signal Type Definition +* +* This type is used to access HET Signal Information. +*/ +typedef struct hetSignal +{ + uint32 duty; /**< Duty cycle in % of the period */ + float64 period; /**< Period in us */ +} hetSIGNAL_t; + + +/* Configuration registers */ +typedef struct het_config_reg +{ + uint32 CONFIG_GCR; + uint32 CONFIG_PFR; + uint32 CONFIG_INTENAS; + uint32 CONFIG_INTENAC; + uint32 CONFIG_PRY; + uint32 CONFIG_AND; + uint32 CONFIG_HRSH; + uint32 CONFIG_XOR; + uint32 CONFIG_DIR; + uint32 CONFIG_PDR; + uint32 CONFIG_PULDIS; + uint32 CONFIG_PSL; + uint32 CONFIG_PCR; +} het_config_reg_t; + +/* Configuration registers initial value for HET1*/ +#define HET1_DIR_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET1_PDR_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET1_PULDIS_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET1_PSL_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET1_HRSH_CONFIGVALUE ((uint32)0x00008000U \ + | (uint32)0x00004000U \ + | (uint32)0x00002000U \ + | (uint32)0x00001000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000008U \ + | (uint32)0x00000004U \ + | (uint32)0x00000002U \ + | (uint32)0x00000001U) + +#define HET1_AND_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET1_XOR_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET1_PFR_CONFIGVALUE (((uint32)7U << 8U) | (uint32)0U) + + +#define HET1_PRY_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET1_INTENAC_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET1_INTENAS_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET1_PCR_CONFIGVALUE ((uint32)0x00000005U) +#define HET1_GCR_CONFIGVALUE 0x00030001U + + +/* Configuration registers initial value for HET2*/ +#define HET2_DIR_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET2_PDR_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET2_PULDIS_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET2_PSL_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET2_HRSH_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000008U \ + | (uint32)0x00000004U \ + | (uint32)0x00000002U \ + | (uint32)0x00000001U) + +#define HET2_AND_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET2_XOR_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET2_PFR_CONFIGVALUE (((uint32)7U << 8U) | (uint32)0U) + + +#define HET2_PRY_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET2_INTENAC_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET2_INTENAS_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U \ + | (uint32)0x00000000U) + +#define HET2_PCR_CONFIGVALUE ((uint32)0x00000005U) +#define HET2_GCR_CONFIGVALUE 0x00030001U + + + +/** + * @defgroup HET HET + * @brief HighEnd Timer Module. + * + * The HET is a software-controlled timer with a dedicated specialized timer micromachine and a set of 30 instructions. + * The HET micromachine is connected to a port of up to 32 input/output (I/O) pins. + * + * Related Files + * - reg_het.h + * - het.h + * - het.c + * - reg_htu.h + * - htu.h + * - std_nhet.h + * @addtogroup HET + * @{ + */ + +/* HET Interface Functions */ +void hetInit(void); + +/* PWM Interface Functions */ +void pwmStart(hetRAMBASE_t * hetRAM,uint32 pwm); +void pwmStop(hetRAMBASE_t * hetRAM,uint32 pwm); +void pwmSetDuty(hetRAMBASE_t * hetRAM,uint32 pwm, uint32 pwmDuty); +void pwmSetSignal(hetRAMBASE_t * hetRAM,uint32 pwm, hetSIGNAL_t signal); +void pwmGetSignal(hetRAMBASE_t * hetRAM,uint32 pwm, hetSIGNAL_t *signal); +void pwmEnableNotification(hetBASE_t * hetREG,uint32 pwm, uint32 notification); +void pwmDisableNotification(hetBASE_t * hetREG,uint32 pwm, uint32 notification); +void pwmNotification(hetBASE_t * hetREG,uint32 pwm, uint32 notification); + +/* Edge Interface Functions */ +void edgeResetCounter(hetRAMBASE_t * hetRAM,uint32 edge); +uint32 edgeGetCounter(hetRAMBASE_t * hetRAM,uint32 edge); +void edgeEnableNotification(hetBASE_t * hetREG,uint32 edge); +void edgeDisableNotification(hetBASE_t * hetREG,uint32 edge); +void edgeNotification(hetBASE_t * hetREG,uint32 edge); + +/* Captured Signal Interface Functions */ +void capGetSignal(hetRAMBASE_t * hetRAM, uint32 cap, hetSIGNAL_t *signal); + +/* Timestamp Interface Functions */ +void hetResetTimestamp(hetRAMBASE_t * hetRAM); +uint32 hetGetTimestamp(hetRAMBASE_t * hetRAM); +void het1GetConfigValue(het_config_reg_t *config_reg, config_value_type_t type); +void het2GetConfigValue(het_config_reg_t *config_reg, config_value_type_t type); + +/** @fn void hetNotification(hetBASE_t *het, uint32 offset) +* @brief het interrupt callback +* @param[in] het - Het module base address +* - hetREG1: HET1 module base address pointer +* - hetREG2: HET2 module base address pointer +* @param[in] offset - het interrupt offset / Source number +* +* @note This function has to be provide by the user. +* +* This is a interrupt callback that is provided by the application and is call upon +* an het interrupt. The parameter passed to the callback is a copy of the interrupt +* offset register which is used to decode the interrupt source. +*/ +void hetNotification(hetBASE_t *het, uint32 offset); + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/**@}*/ +#ifdef __cplusplus +} +#endif /*extern "C" */ + +#endif Index: firmware/include/htu.h =================================================================== diff -u --- firmware/include/htu.h (revision 0) +++ firmware/include/htu.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,71 @@ +/** @file htu.h +* @brief HTU Driver Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +#ifndef __HTU_H__ +#define __HTU_H__ + +#include "reg_htu.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* HTU General Definitions */ + +#define HTU1PARLOC (*(volatile uint32 *)0xFF4E0200U) +#define HTU2PARLOC (*(volatile uint32 *)0xFF4C0200U) + +#define HTU1RAMLOC (*(volatile uint32 *)0xFF4E0000U) +#define HTU2RAMLOC (*(volatile uint32 *)0xFF4C0000U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +#ifdef __cplusplus +} +#endif /*extern "C" */ + +#endif Index: firmware/include/hw_emac.h =================================================================== diff -u --- firmware/include/hw_emac.h (revision 0) +++ firmware/include/hw_emac.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,1489 @@ +/* + * hw_emac1.h + */ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef _HW_EMAC_H_ +#define _HW_EMAC_H_ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +#define EMAC_BASE (0xFCF78000U) +#define EMAC_CTRL_BASE (0xFCF78800U) +#define EMAC_CTRL_RAM_BASE (0xFC520000U) + +#define EMAC_TXREVID (0x0U) +#define EMAC_TXCONTROL (0x4U) +#define EMAC_TXTEARDOWN (0x8U) +#define EMAC_RXREVID (0x10U) +#define EMAC_RXCONTROL (0x14U) +#define EMAC_RXTEARDOWN (0x18U) +#define EMAC_TXINTSTATRAW (0x80U) +#define EMAC_TXINTSTATMASKED (0x84U) +#define EMAC_TXINTMASKSET (0x88U) +#define EMAC_TXINTMASKCLEAR (0x8CU) +#define EMAC_MACINVECTOR (0x90U) +#define EMAC_MACEOIVECTOR (0x94U) +#define EMAC_RXINTSTATRAW (0xA0U) +#define EMAC_RXINTSTATMASKED (0xA4U) +#define EMAC_RXINTMASKSET (0xA8U) +#define EMAC_RXINTMASKCLEAR (0xACU) +#define EMAC_MACINTSTATRAW (0xB0U) +#define EMAC_MACINTSTATMASKED (0xB4U) +#define EMAC_MACINTMASKSET (0xB8U) +#define EMAC_MACINTMASKCLEAR (0xBCU) +#define EMAC_RXMBPENABLE (0x100U) +#define EMAC_RXUNICASTSET (0x104U) +#define EMAC_RXUNICASTCLEAR (0x108U) +#define EMAC_RXMAXLEN (0x10CU) +#define EMAC_RXBUFFEROFFSET (0x110U) +#define EMAC_RXFILTERLOWTHRESH (0x114U) +#define EMAC_RXFLOWTHRESH(n) ((uint32)0x120U + (uint32)((n) * 4U)) +#define EMAC_RXFREEBUFFER(n) ((uint32)0x140U + (uint32)((n) * 4U)) +#define EMAC_MACCONTROL (0x160U) +#define EMAC_MACSTATUS (0x164U) +#define EMAC_EMCONTROL (0x168U) +#define EMAC_FIFOCONTROL (0x16CU) +#define EMAC_MACCONFIG (0x170U) +#define EMAC_SOFTRESET (0x174U) +#define EMAC_MACSRCADDRLO (0x1D0U) +#define EMAC_MACSRCADDRHI (0x1D4U) +#define EMAC_MACHASH1 (0x1D8U) +#define EMAC_MACHASH2 (0x1DCU) +#define EMAC_BOFFTEST (0x1E0U) +#define EMAC_TPACETEST (0x1E4U) +#define EMAC_RXPAUSE (0x1E8U) +#define EMAC_TXPAUSE (0x1ECU) +#define EMAC_RXGOODFRAMES (0x200U) +#define EMAC_RXBCASTFRAMES (0x204U) +#define EMAC_RXMCASTFRAMES (0x208U) +#define EMAC_RXPAUSEFRAMES (0x20CU) +#define EMAC_RXCRCERRORS (0x210U) +#define EMAC_RXALIGNCODEERRORS (0x214U) +#define EMAC_RXOVERSIZED (0x218U) +#define EMAC_RXJABBER (0x21CU) +#define EMAC_RXUNDERSIZED (0x220U) +#define EMAC_RXFRAGMENTS (0x224U) +#define EMAC_RXFILTERED (0x228U) +#define EMAC_RXQOSFILTERED (0x22CU) +#define EMAC_RXOCTETS (0x230U) +#define EMAC_TXGOODFRAMES (0x234U) +#define EMAC_TXBCASTFRAMES (0x238U) +#define EMAC_TXMCASTFRAMES (0x23CU) +#define EMAC_TXPAUSEFRAMES (0x240U) +#define EMAC_TXDEFERRED (0x244U) +#define EMAC_TXCOLLISION (0x248U) +#define EMAC_TXSINGLECOLL (0x24CU) +#define EMAC_TXMULTICOLL (0x250U) +#define EMAC_TXEXCESSIVECOLL (0x254U) +#define EMAC_TXLATECOLL (0x258U) +#define EMAC_TXUNDERRUN (0x25CU) +#define EMAC_TXCARRIERSENSE (0x260U) +#define EMAC_TXOCTETS (0x264U) +#define EMAC_FRAME64 (0x268U) +#define EMAC_FRAME65T127 (0x26CU) +#define EMAC_FRAME128T255 (0x270U) +#define EMAC_FRAME256T511 (0x274U) +#define EMAC_FRAME512T1023 (0x278U) +#define EMAC_FRAME1024TUP (0x27CU) +#define EMAC_NETOCTETS (0x208U) +#define EMAC_RXSOFOVERRUNS (0x284U) +#define EMAC_RXMOFOVERRUNS (0x288U) +#define EMAC_RXDMAOVERRUNS (0x28CU) +#define EMAC_MACADDRLO (0x500U) +#define EMAC_MACADDRHI (0x504U) +#define EMAC_MACINDEX (0x508U) +#define EMAC_TXHDP(n) ((uint32)0x600U + (uint32)((n) * 4U)) +#define EMAC_RXHDP(n) ((uint32)0x620U + (uint32)((n) * 4U)) +#define EMAC_TXCP(n) ((uint32)0x640U + (uint32)((n) * 4U)) +#define EMAC_RXCP(n) ((uint32)0x660U + (uint32)((n) * 4U)) + +/**************************************************************************\ +* Field Definition Macros +\**************************************************************************/ + +/* TXREVID */ + +#define EMAC_TXREVID_TXREV (0xFFFFFFFFU) +#define EMAC_TXREVID_TXREV_SHIFT (0x00000000U) + + +/* TXCONTROL */ + + +#define EMAC_TXCONTROL_TXEN (0x00000001U) +#define EMAC_TXCONTROL_TXEN_SHIFT (0x00000000U) +#define EMAC_TXCONTROL_TXDIS (0x00000000U) + + +/* TXTEARDOWN */ + +#define EMAC_TXTEARDOWN_TXTDNCH (0x00000007U) +#define EMAC_TXTEARDOWN_TXTDNCH_SHIFT (0x00000000U) +#define EMAC_TXTEARDOWN_TXTDNCH_CHA0 (0x00000000U) +#define EMAC_TXTEARDOWN_TXTDNCH_CHA1 (0x00000001U) +#define EMAC_TXTEARDOWN_TXTDNCH_CHA2 (0x00000002U) +#define EMAC_TXTEARDOWN_TXTDNCH_CHA3 (0x00000003U) +#define EMAC_TXTEARDOWN_TXTDNCH_CHA4 (0x00000004U) +#define EMAC_TXTEARDOWN_TXTDNCH_CHA5 (0x00000005U) +#define EMAC_TXTEARDOWN_TXTDNCH_CHA6 (0x00000006U) +#define EMAC_TXTEARDOWN_TXTDNCH_CHA7 (0x00000007U) + + +/* RXREVID */ + +#define EMAC_RXREVID_RXREV (0xFFFFFFFFU) +#define EMAC_RXREVID_RXREV_SHIFT (0x00000000U) + + +/* RXCONTROL */ + + +#define EMAC_RXCONTROL_RXEN (0x00000001U) +#define EMAC_RXCONTROL_RXEN_SHIFT (0x00000000U) +#define EMAC_RXCONTROL_RXDIS (0x00000000U) + +/* RXTEARDOWN */ + + + +#define EMAC_RXTEARDOWN_RXTDNCH (0x00000007U) +#define EMAC_RXTEARDOWN_RXTDNCH_SHIFT (0x00000000U) +#define EMAC_RXTEARDOWN_RXTDNCH_CHA0 (0x00000000U) +#define EMAC_RXTEARDOWN_RXTDNCH_CHA1 (0x00000001U) +#define EMAC_RXTEARDOWN_RXTDNCH_CHA2 (0x00000002U) +#define EMAC_RXTEARDOWN_RXTDNCH_CHA3 (0x00000003U) +#define EMAC_RXTEARDOWN_RXTDNCH_CHA4 (0x00000004U) +#define EMAC_RXTEARDOWN_RXTDNCH_CHA5 (0x00000005U) +#define EMAC_RXTEARDOWN_RXTDNCH_CHA6 (0x00000006U) +#define EMAC_RXTEARDOWN_RXTDNCH_CHA7 (0x00000007U) + + +/* TXINTSTATRAW */ + + +#define EMAC_TXINTSTATRAW_TX7PEND (0x00000080U) +#define EMAC_TXINTSTATRAW_TX7PEND_SHIFT (0x00000007U) + +#define EMAC_TXINTSTATRAW_TX6PEND (0x00000040U) +#define EMAC_TXINTSTATRAW_TX6PEND_SHIFT (0x00000006U) + +#define EMAC_TXINTSTATRAW_TX5PEND (0x00000020U) +#define EMAC_TXINTSTATRAW_TX5PEND_SHIFT (0x00000005U) + +#define EMAC_TXINTSTATRAW_TX4PEND (0x00000010U) +#define EMAC_TXINTSTATRAW_TX4PEND_SHIFT (0x00000004U) + +#define EMAC_TXINTSTATRAW_TX3PEND (0x00000008U) +#define EMAC_TXINTSTATRAW_TX3PEND_SHIFT (0x00000003U) + +#define EMAC_TXINTSTATRAW_TX2PEND (0x00000004U) +#define EMAC_TXINTSTATRAW_TX2PEND_SHIFT (0x00000002U) + +#define EMAC_TXINTSTATRAW_TX1PEND (0x00000002U) +#define EMAC_TXINTSTATRAW_TX1PEND_SHIFT (0x00000001U) + +#define EMAC_TXINTSTATRAW_TX0PEND (0x00000001U) +#define EMAC_TXINTSTATRAW_TX0PEND_SHIFT (0x00000000U) + + +/* TXINTSTATMASKED */ + + +#define EMAC_TXINTSTATMASKED_TX7PEND (0x00000080U) +#define EMAC_TXINTSTATMASKED_TX7PEND_SHIFT (0x00000007U) + +#define EMAC_TXINTSTATMASKED_TX6PEND (0x00000040U) +#define EMAC_TXINTSTATMASKED_TX6PEND_SHIFT (0x00000006U) + +#define EMAC_TXINTSTATMASKED_TX5PEND (0x00000020U) +#define EMAC_TXINTSTATMASKED_TX5PEND_SHIFT (0x00000005U) + +#define EMAC_TXINTSTATMASKED_TX4PEND (0x00000010U) +#define EMAC_TXINTSTATMASKED_TX4PEND_SHIFT (0x00000004U) + +#define EMAC_TXINTSTATMASKED_TX3PEND (0x00000008U) +#define EMAC_TXINTSTATMASKED_TX3PEND_SHIFT (0x00000003U) + +#define EMAC_TXINTSTATMASKED_TX2PEND (0x00000004U) +#define EMAC_TXINTSTATMASKED_TX2PEND_SHIFT (0x00000002U) + +#define EMAC_TXINTSTATMASKED_TX1PEND (0x00000002U) +#define EMAC_TXINTSTATMASKED_TX1PEND_SHIFT (0x00000001U) + +#define EMAC_TXINTSTATMASKED_TX0PEND (0x00000001U) +#define EMAC_TXINTSTATMASKED_TX0PEND_SHIFT (0x00000000U) + + +/* TXINTMASKSET */ + + +#define EMAC_TXINTMASKSET_TX7MASK (0x00000080U) +#define EMAC_TXINTMASKSET_TX7MASK_SHIFT (0x00000007U) + +#define EMAC_TXINTMASKSET_TX6MASK (0x00000040U) +#define EMAC_TXINTMASKSET_TX6MASK_SHIFT (0x00000006U) + +#define EMAC_TXINTMASKSET_TX5MASK (0x00000020U) +#define EMAC_TXINTMASKSET_TX5MASK_SHIFT (0x00000005U) + +#define EMAC_TXINTMASKSET_TX4MASK (0x00000010U) +#define EMAC_TXINTMASKSET_TX4MASK_SHIFT (0x00000004U) + +#define EMAC_TXINTMASKSET_TX3MASK (0x00000008U) +#define EMAC_TXINTMASKSET_TX3MASK_SHIFT (0x00000003U) + +#define EMAC_TXINTMASKSET_TX2MASK (0x00000004U) +#define EMAC_TXINTMASKSET_TX2MASK_SHIFT (0x00000002U) + +#define EMAC_TXINTMASKSET_TX1MASK (0x00000002U) +#define EMAC_TXINTMASKSET_TX1MASK_SHIFT (0x00000001U) + +#define EMAC_TXINTMASKSET_TX0MASK (0x00000001U) +#define EMAC_TXINTMASKSET_TX0MASK_SHIFT (0x00000000U) + + +/* TXINTMASKCLEAR */ + + +#define EMAC_TXINTMASKCLEAR_TX7MASK (0x00000080U) +#define EMAC_TXINTMASKCLEAR_TX7MASK_SHIFT (0x00000007U) + +#define EMAC_TXINTMASKCLEAR_TX6MASK (0x00000040U) +#define EMAC_TXINTMASKCLEAR_TX6MASK_SHIFT (0x00000006U) + +#define EMAC_TXINTMASKCLEAR_TX5MASK (0x00000020U) +#define EMAC_TXINTMASKCLEAR_TX5MASK_SHIFT (0x00000005U) + +#define EMAC_TXINTMASKCLEAR_TX4MASK (0x00000010U) +#define EMAC_TXINTMASKCLEAR_TX4MASK_SHIFT (0x00000004U) + +#define EMAC_TXINTMASKCLEAR_TX3MASK (0x00000008U) +#define EMAC_TXINTMASKCLEAR_TX3MASK_SHIFT (0x00000003U) + +#define EMAC_TXINTMASKCLEAR_TX2MASK (0x00000004U) +#define EMAC_TXINTMASKCLEAR_TX2MASK_SHIFT (0x00000002U) + +#define EMAC_TXINTMASKCLEAR_TX1MASK (0x00000002U) +#define EMAC_TXINTMASKCLEAR_TX1MASK_SHIFT (0x00000001U) + +#define EMAC_TXINTMASKCLEAR_TX0MASK (0x00000001U) +#define EMAC_TXINTMASKCLEAR_TX0MASK_SHIFT (0x00000000U) + + +/* MACINVECTOR */ + + +#define EMAC_MACINVECTOR_STATPEND (0x08000000U) +#define EMAC_MACINVECTOR_STATPEND_SHIFT (0x0000001BU) + +#define EMAC_MACINVECTOR_HOSTPEND (0x04000000U) +#define EMAC_MACINVECTOR_HOSTPEND_SHIFT (0x0000001AU) + +#define EMAC_MACINVECTOR_LINKINT0 (0x02000000U) +#define EMAC_MACINVECTOR_LINKINT0_SHIFT (0x00000019U) + +#define EMAC_MACINVECTOR_USERINT0 (0x01000000U) +#define EMAC_MACINVECTOR_USERINT0_SHIFT (0x00000018U) + +#define EMAC_MACINVECTOR_TXPEND (0x00FF0000U) +#define EMAC_MACINVECTOR_TXPEND_SHIFT (0x00000010U) + +#define EMAC_MACINVECTOR_RXTHRESHPEND (0x0000FF00U) +#define EMAC_MACINVECTOR_RXTHRESHPEND_SHIFT (0x00000008U) + +#define EMAC_MACINVECTOR_RXPEND (0x000000FFU) +#define EMAC_MACINVECTOR_RXPEND_SHIFT (0x00000000U) + + +/* MACEOIVECTOR */ + + +#define EMAC_MACEOIVECTOR_INTVECT (0x0000001FU) +#define EMAC_MACEOIVECTOR_INTVECT_SHIFT (0x00000000U) +/*----INTVECT Tokens----*/ +#define EMAC_MACEOIVECTOR_INTVECT_C0RXTHRESH (0x00000000U) +#define EMAC_MACEOIVECTOR_INTVECT_C0RX (0x00000001U) +#define EMAC_MACEOIVECTOR_INTVECT_C0TX (0x00000002U) +#define EMAC_MACEOIVECTOR_INTVECT_C0MISC (0x00000003U) +#define EMAC_MACEOIVECTOR_INTVECT_C1RXTHRESH (0x00000004U) +#define EMAC_MACEOIVECTOR_INTVECT_C1RX (0x00000005U) +#define EMAC_MACEOIVECTOR_INTVECT_C1TX (0x00000006U) +#define EMAC_MACEOIVECTOR_INTVECT_C1MISC (0x00000007U) + + +/* RXINTSTATRAW */ + + +#define EMAC_RXINTSTATRAW_RX7THRESHPEND (0x00008000U) +#define EMAC_RXINTSTATRAW_RX7THRESHPEND_SHIFT (0x0000000FU) + +#define EMAC_RXINTSTATRAW_RX6THRESHPEND (0x00004000U) +#define EMAC_RXINTSTATRAW_RX6THRESHPEND_SHIFT (0x0000000EU) + +#define EMAC_RXINTSTATRAW_RX5THRESHPEND (0x00002000U) +#define EMAC_RXINTSTATRAW_RX5THRESHPEND_SHIFT (0x0000000DU) + +#define EMAC_RXINTSTATRAW_RX4THRESHPEND (0x00001000U) +#define EMAC_RXINTSTATRAW_RX4THRESHPEND_SHIFT (0x0000000CU) + +#define EMAC_RXINTSTATRAW_RX3THRESHPEND (0x00000800U) +#define EMAC_RXINTSTATRAW_RX3THRESHPEND_SHIFT (0x0000000BU) + +#define EMAC_RXINTSTATRAW_RX2THRESHPEND (0x00000400U) +#define EMAC_RXINTSTATRAW_RX2THRESHPEND_SHIFT (0x0000000AU) + +#define EMAC_RXINTSTATRAW_RX1THRESHPEND (0x00000200U) +#define EMAC_RXINTSTATRAW_RX1THRESHPEND_SHIFT (0x00000009U) + +#define EMAC_RXINTSTATRAW_RX0THRESHPEND (0x00000100U) +#define EMAC_RXINTSTATRAW_RX0THRESHPEND_SHIFT (0x00000008U) + +#define EMAC_RXINTSTATRAW_RX7PEND (0x00000080U) +#define EMAC_RXINTSTATRAW_RX7PEND_SHIFT (0x00000007U) + +#define EMAC_RXINTSTATRAW_RX6PEND (0x00000040U) +#define EMAC_RXINTSTATRAW_RX6PEND_SHIFT (0x00000006U) + +#define EMAC_RXINTSTATRAW_RX5PEND (0x00000020U) +#define EMAC_RXINTSTATRAW_RX5PEND_SHIFT (0x00000005U) + +#define EMAC_RXINTSTATRAW_RX4PEND (0x00000010U) +#define EMAC_RXINTSTATRAW_RX4PEND_SHIFT (0x00000004U) + +#define EMAC_RXINTSTATRAW_RX3PEND (0x00000008U) +#define EMAC_RXINTSTATRAW_RX3PEND_SHIFT (0x00000003U) + +#define EMAC_RXINTSTATRAW_RX2PEND (0x00000004U) +#define EMAC_RXINTSTATRAW_RX2PEND_SHIFT (0x00000002U) + +#define EMAC_RXINTSTATRAW_RX1PEND (0x00000002U) +#define EMAC_RXINTSTATRAW_RX1PEND_SHIFT (0x00000001U) + +#define EMAC_RXINTSTATRAW_RX0PEND (0x00000001U) +#define EMAC_RXINTSTATRAW_RX0PEND_SHIFT (0x00000000U) + + +/* RXINTSTATMASKED */ + + +#define EMAC_RXINTSTATMASKED_RX7THRESHPEND (0x00008000U) +#define EMAC_RXINTSTATMASKED_RX7THRESHPEND_SHIFT (0x0000000FU) + +#define EMAC_RXINTSTATMASKED_RX6THRESHPEND (0x00004000U) +#define EMAC_RXINTSTATMASKED_RX6THRESHPEND_SHIFT (0x0000000EU) + +#define EMAC_RXINTSTATMASKED_RX5THRESHPEND (0x00002000U) +#define EMAC_RXINTSTATMASKED_RX5THRESHPEND_SHIFT (0x0000000DU) + +#define EMAC_RXINTSTATMASKED_RX4THRESHPEND (0x00001000U) +#define EMAC_RXINTSTATMASKED_RX4THRESHPEND_SHIFT (0x0000000CU) + +#define EMAC_RXINTSTATMASKED_RX3THRESHPEND (0x00000800U) +#define EMAC_RXINTSTATMASKED_RX3THRESHPEND_SHIFT (0x0000000BU) + +#define EMAC_RXINTSTATMASKED_RX2THRESHPEND (0x00000400U) +#define EMAC_RXINTSTATMASKED_RX2THRESHPEND_SHIFT (0x0000000AU) + +#define EMAC_RXINTSTATMASKED_RX1THRESHPEND (0x00000200U) +#define EMAC_RXINTSTATMASKED_RX1THRESHPEND_SHIFT (0x00000009U) + +#define EMAC_RXINTSTATMASKED_RX0THRESHPEND (0x00000100U) +#define EMAC_RXINTSTATMASKED_RX0THRESHPEND_SHIFT (0x00000008U) + +#define EMAC_RXINTSTATMASKED_RX7PEND (0x00000080U) +#define EMAC_RXINTSTATMASKED_RX7PEND_SHIFT (0x00000007U) + +#define EMAC_RXINTSTATMASKED_RX6PEND (0x00000040U) +#define EMAC_RXINTSTATMASKED_RX6PEND_SHIFT (0x00000006U) + +#define EMAC_RXINTSTATMASKED_RX5PEND (0x00000020U) +#define EMAC_RXINTSTATMASKED_RX5PEND_SHIFT (0x00000005U) + +#define EMAC_RXINTSTATMASKED_RX4PEND (0x00000010U) +#define EMAC_RXINTSTATMASKED_RX4PEND_SHIFT (0x00000004U) + +#define EMAC_RXINTSTATMASKED_RX3PEND (0x00000008U) +#define EMAC_RXINTSTATMASKED_RX3PEND_SHIFT (0x00000003U) + +#define EMAC_RXINTSTATMASKED_RX2PEND (0x00000004U) +#define EMAC_RXINTSTATMASKED_RX2PEND_SHIFT (0x00000002U) + +#define EMAC_RXINTSTATMASKED_RX1PEND (0x00000002U) +#define EMAC_RXINTSTATMASKED_RX1PEND_SHIFT (0x00000001U) + +#define EMAC_RXINTSTATMASKED_RX0PEND (0x00000001U) +#define EMAC_RXINTSTATMASKED_RX0PEND_SHIFT (0x00000000U) + + +/* RXINTMASKSET */ + + +#define EMAC_RXINTMASKSET_RX7THRESHMASK (0x00008000U) +#define EMAC_RXINTMASKSET_RX7THRESHMASK_SHIFT (0x0000000FU) + +#define EMAC_RXINTMASKSET_RX6THRESHMASK (0x00004000U) +#define EMAC_RXINTMASKSET_RX6THRESHMASK_SHIFT (0x0000000EU) + +#define EMAC_RXINTMASKSET_RX5THRESHMASK (0x00002000U) +#define EMAC_RXINTMASKSET_RX5THRESHMASK_SHIFT (0x0000000DU) + +#define EMAC_RXINTMASKSET_RX4THRESHMASK (0x00001000U) +#define EMAC_RXINTMASKSET_RX4THRESHMASK_SHIFT (0x0000000CU) + +#define EMAC_RXINTMASKSET_RX3THRESHMASK (0x00000800U) +#define EMAC_RXINTMASKSET_RX3THRESHMASK_SHIFT (0x0000000BU) + +#define EMAC_RXINTMASKSET_RX2THRESHMASK (0x00000400U) +#define EMAC_RXINTMASKSET_RX2THRESHMASK_SHIFT (0x0000000AU) + +#define EMAC_RXINTMASKSET_RX1THRESHMASK (0x00000200U) +#define EMAC_RXINTMASKSET_RX1THRESHMASK_SHIFT (0x00000009U) + +#define EMAC_RXINTMASKSET_RX0THRESHMASK (0x00000100U) +#define EMAC_RXINTMASKSET_RX0THRESHMASK_SHIFT (0x00000008U) + +#define EMAC_RXINTMASKSET_RX7MASK (0x00000080U) +#define EMAC_RXINTMASKSET_RX7MASK_SHIFT (0x00000007U) + +#define EMAC_RXINTMASKSET_RX6MASK (0x00000040U) +#define EMAC_RXINTMASKSET_RX6MASK_SHIFT (0x00000006U) + +#define EMAC_RXINTMASKSET_RX5MASK (0x00000020U) +#define EMAC_RXINTMASKSET_RX5MASK_SHIFT (0x00000005U) + +#define EMAC_RXINTMASKSET_RX4MASK (0x00000010U) +#define EMAC_RXINTMASKSET_RX4MASK_SHIFT (0x00000004U) + +#define EMAC_RXINTMASKSET_RX3MASK (0x00000008U) +#define EMAC_RXINTMASKSET_RX3MASK_SHIFT (0x00000003U) + +#define EMAC_RXINTMASKSET_RX2MASK (0x00000004U) +#define EMAC_RXINTMASKSET_RX2MASK_SHIFT (0x00000002U) + +#define EMAC_RXINTMASKSET_RX1MASK (0x00000002U) +#define EMAC_RXINTMASKSET_RX1MASK_SHIFT (0x00000001U) + +#define EMAC_RXINTMASKSET_RX0MASK (0x00000001U) +#define EMAC_RXINTMASKSET_RX0MASK_SHIFT (0x00000000U) + + +/* RXINTMASKCLEAR */ + + +#define EMAC_RXINTMASKCLEAR_RX7THRESHMASK (0x00008000U) +#define EMAC_RXINTMASKCLEAR_RX7THRESHMASK_SHIFT (0x0000000FU) + +#define EMAC_RXINTMASKCLEAR_RX6THRESHMASK (0x00004000U) +#define EMAC_RXINTMASKCLEAR_RX6THRESHMASK_SHIFT (0x0000000EU) + +#define EMAC_RXINTMASKCLEAR_RX5THRESHMASK (0x00002000U) +#define EMAC_RXINTMASKCLEAR_RX5THRESHMASK_SHIFT (0x0000000DU) + +#define EMAC_RXINTMASKCLEAR_RX4THRESHMASK (0x00001000U) +#define EMAC_RXINTMASKCLEAR_RX4THRESHMASK_SHIFT (0x0000000CU) + +#define EMAC_RXINTMASKCLEAR_RX3THRESHMASK (0x00000800U) +#define EMAC_RXINTMASKCLEAR_RX3THRESHMASK_SHIFT (0x0000000BU) + +#define EMAC_RXINTMASKCLEAR_RX2THRESHMASK (0x00000400U) +#define EMAC_RXINTMASKCLEAR_RX2THRESHMASK_SHIFT (0x0000000AU) + +#define EMAC_RXINTMASKCLEAR_RX1THRESHMASK (0x00000200U) +#define EMAC_RXINTMASKCLEAR_RX1THRESHMASK_SHIFT (0x00000009U) + +#define EMAC_RXINTMASKCLEAR_RX0THRESHMASK (0x00000100U) +#define EMAC_RXINTMASKCLEAR_RX0THRESHMASK_SHIFT (0x00000008U) + +#define EMAC_RXINTMASKCLEAR_RX7MASK (0x00000080U) +#define EMAC_RXINTMASKCLEAR_RX7MASK_SHIFT (0x00000007U) + +#define EMAC_RXINTMASKCLEAR_RX6MASK (0x00000040U) +#define EMAC_RXINTMASKCLEAR_RX6MASK_SHIFT (0x00000006U) + +#define EMAC_RXINTMASKCLEAR_RX5MASK (0x00000020U) +#define EMAC_RXINTMASKCLEAR_RX5MASK_SHIFT (0x00000005U) + +#define EMAC_RXINTMASKCLEAR_RX4MASK (0x00000010U) +#define EMAC_RXINTMASKCLEAR_RX4MASK_SHIFT (0x00000004U) + +#define EMAC_RXINTMASKCLEAR_RX3MASK (0x00000008U) +#define EMAC_RXINTMASKCLEAR_RX3MASK_SHIFT (0x00000003U) + +#define EMAC_RXINTMASKCLEAR_RX2MASK (0x00000004U) +#define EMAC_RXINTMASKCLEAR_RX2MASK_SHIFT (0x00000002U) + +#define EMAC_RXINTMASKCLEAR_RX1MASK (0x00000002U) +#define EMAC_RXINTMASKCLEAR_RX1MASK_SHIFT (0x00000001U) + +#define EMAC_RXINTMASKCLEAR_RX0MASK (0x00000001U) +#define EMAC_RXINTMASKCLEAR_RX0MASK_SHIFT (0x00000000U) + + +/* MACINTSTATRAW */ + + +#define EMAC_MACINTSTATRAW_HOSTPEND (0x00000002U) +#define EMAC_MACINTSTATRAW_HOSTPEND_SHIFT (0x00000001U) + +#define EMAC_MACINTSTATRAW_STATPEND (0x00000001U) +#define EMAC_MACINTSTATRAW_STATPEND_SHIFT (0x00000000U) + + +/* MACINTSTATMASKED */ + + +#define EMAC_MACINTSTATMASKED_HOSTPEND (0x00000002U) +#define EMAC_MACINTSTATMASKED_HOSTPEND_SHIFT (0x00000001U) + +#define EMAC_MACINTSTATMASKED_STATPEND (0x00000001U) +#define EMAC_MACINTSTATMASKED_STATPEND_SHIFT (0x00000000U) + + +/* MACINTMASKSET */ + + +#define EMAC_MACINTMASKSET_HOSTMASK (0x00000002U) +#define EMAC_MACINTMASKSET_HOSTMASK_SHIFT (0x00000001U) + +#define EMAC_MACINTMASKSET_STATMASK (0x00000001U) +#define EMAC_MACINTMASKSET_STATMASK_SHIFT (0x00000000U) + + +/* MACINTMASKCLEAR */ + + +#define EMAC_MACINTMASKCLEAR_HOSTMASK (0x00000002U) +#define EMAC_MACINTMASKCLEAR_HOSTMASK_SHIFT (0x00000001U) + +#define EMAC_MACINTMASKCLEAR_STATMASK (0x00000001U) +#define EMAC_MACINTMASKCLEAR_STATMASK_SHIFT (0x00000000U) + + +/* RXMBPENABLE */ + + +#define EMAC_RXMBPENABLE_RXPASSCRC (0x40000000U) +#define EMAC_RXMBPENABLE_RXPASSCRC_SHIFT (0x0000001EU) +#define EMAC_RXMBPENABLE_RXQOSEN (0x20000000U) +#define EMAC_RXMBPENABLE_RXQOSEN_SHIFT (0x0000001DU) +#define EMAC_RXMBPENABLE_RXNOCHAIN (0x10000000U) +#define EMAC_RXMBPENABLE_RXNOCHAIN_SHIFT (0x0000001CU) +#define EMAC_RXMBPENABLE_RXCMFEN (0x01000000U) +#define EMAC_RXMBPENABLE_RXCMFEN_SHIFT (0x00000018U) +#define EMAC_RXMBPENABLE_RXCSFEN (0x00800000U) +#define EMAC_RXMBPENABLE_RXCSFEN_SHIFT (0x00000017U) +#define EMAC_RXMBPENABLE_RXCEFEN (0x00400000U) +#define EMAC_RXMBPENABLE_RXCEFEN_SHIFT (0x00000016U) +#define EMAC_RXMBPENABLE_RXCAFEN (0x00200000U) +#define EMAC_RXMBPENABLE_RXCAFEN_SHIFT (0x00000015U) +/*----RXCAFEN Tokens----*/ +#define EMAC_RXMBPENABLE_RXPROMCH (0x00070000U) +#define EMAC_RXMBPENABLE_RXPROMCH_SHIFT (0x00000010U) +#define EMAC_RXMBPENABLE_RXPROMCH_CHA0 (0x00000000U) +#define EMAC_RXMBPENABLE_RXPROMCH_CHA1 (0x00000001U) +#define EMAC_RXMBPENABLE_RXPROMCH_CHA2 (0x00000002U) +#define EMAC_RXMBPENABLE_RXPROMCH_CHA3 (0x00000003U) +#define EMAC_RXMBPENABLE_RXPROMCH_CHA4 (0x00000004U) +#define EMAC_RXMBPENABLE_RXPROMCH_CHA5 (0x00000005U) +#define EMAC_RXMBPENABLE_RXPROMCH_CHA6 (0x00000006U) +#define EMAC_RXMBPENABLE_RXPROMCH_CHA7 (0x00000007U) + + +#define EMAC_RXMBPENABLE_RXBROADEN (0x00002000U) +#define EMAC_RXMBPENABLE_RXBROADEN_SHIFT (0x0000000DU) +#define EMAC_RXMBPENABLE_RXBROADCH (0x00000700U) +#define EMAC_RXMBPENABLE_RXBROADCH_SHIFT (0x00000008U) +/*----RXBROADCH Tokens----*/ +#define EMAC_RXMBPENABLE_RXBROADCH_CHA0 (0x00000000U) +#define EMAC_RXMBPENABLE_RXBROADCH_CHA1 (0x00000001U) +#define EMAC_RXMBPENABLE_RXBROADCH_CHA2 (0x00000002U) +#define EMAC_RXMBPENABLE_RXBROADCH_CHA3 (0x00000003U) +#define EMAC_RXMBPENABLE_RXBROADCH_CHA4 (0x00000004U) +#define EMAC_RXMBPENABLE_RXBROADCH_CHA5 (0x00000005U) +#define EMAC_RXMBPENABLE_RXBROADCH_CHA6 (0x00000006U) +#define EMAC_RXMBPENABLE_RXBROADCH_CHA7 (0x00000007U) + + +#define EMAC_RXMBPENABLE_RXMULTEN (0x00000020U) +#define EMAC_RXMBPENABLE_RXMULTEN_SHIFT (0x00000005U) +#define EMAC_RXMBPENABLE_RXMULTCH (0x00000007U) +#define EMAC_RXMBPENABLE_RXMULTCH_SHIFT (0x00000000U) +/*----RXMULTCH Tokens----*/ +#define EMAC_RXMBPENABLE_RXMULTCH_CHA0 (0x00000000U) +#define EMAC_RXMBPENABLE_RXMULTCH_CHA1 (0x00000001U) +#define EMAC_RXMBPENABLE_RXMULTCH_CHA2 (0x00000002U) +#define EMAC_RXMBPENABLE_RXMULTCH_CHA3 (0x00000003U) +#define EMAC_RXMBPENABLE_RXMULTCH_CHA4 (0x00000004U) +#define EMAC_RXMBPENABLE_RXMULTCH_CHA5 (0x00000005U) +#define EMAC_RXMBPENABLE_RXMULTCH_CHA6 (0x00000006U) +#define EMAC_RXMBPENABLE_RXMULTCH_CHA7 (0x00000007U) + + +/* RXUNICASTSET */ + + +#define EMAC_RXUNICASTSET_RXCH7EN (0x00000080U) +#define EMAC_RXUNICASTSET_RXCH7EN_SHIFT (0x00000007U) +#define EMAC_RXUNICASTSET_RXCH6EN (0x00000040U) +#define EMAC_RXUNICASTSET_RXCH6EN_SHIFT (0x00000006U) +#define EMAC_RXUNICASTSET_RXCH5EN (0x00000020U) +#define EMAC_RXUNICASTSET_RXCH5EN_SHIFT (0x00000005U) +#define EMAC_RXUNICASTSET_RXCH4EN (0x00000010U) +#define EMAC_RXUNICASTSET_RXCH4EN_SHIFT (0x00000004U) +#define EMAC_RXUNICASTSET_RXCH3EN (0x00000008U) +#define EMAC_RXUNICASTSET_RXCH3EN_SHIFT (0x00000003U) +#define EMAC_RXUNICASTSET_RXCH2EN (0x00000004U) +#define EMAC_RXUNICASTSET_RXCH2EN_SHIFT (0x00000002U) +#define EMAC_RXUNICASTSET_RXCH1EN (0x00000002U) +#define EMAC_RXUNICASTSET_RXCH1EN_SHIFT (0x00000001U) +#define EMAC_RXUNICASTSET_RXCH0EN (0x00000001U) +#define EMAC_RXUNICASTSET_RXCH0EN_SHIFT (0x00000000U) + +/* RXUNICASTCLEAR */ + + +#define EMAC_RXUNICASTCLEAR_RXCH7EN (0x00000080U) +#define EMAC_RXUNICASTCLEAR_RXCH7EN_SHIFT (0x00000007U) +#define EMAC_RXUNICASTCLEAR_RXCH6EN (0x00000040U) +#define EMAC_RXUNICASTCLEAR_RXCH6EN_SHIFT (0x00000006U) +#define EMAC_RXUNICASTCLEAR_RXCH5EN (0x00000020U) +#define EMAC_RXUNICASTCLEAR_RXCH5EN_SHIFT (0x00000005U) +#define EMAC_RXUNICASTCLEAR_RXCH4EN (0x00000010U) +#define EMAC_RXUNICASTCLEAR_RXCH4EN_SHIFT (0x00000004U) +#define EMAC_RXUNICASTCLEAR_RXCH3EN (0x00000008U) +#define EMAC_RXUNICASTCLEAR_RXCH3EN_SHIFT (0x00000003U) +#define EMAC_RXUNICASTCLEAR_RXCH2EN (0x00000004U) +#define EMAC_RXUNICASTCLEAR_RXCH2EN_SHIFT (0x00000002U) +#define EMAC_RXUNICASTCLEAR_RXCH1EN (0x00000002U) +#define EMAC_RXUNICASTCLEAR_RXCH1EN_SHIFT (0x00000001U) +#define EMAC_RXUNICASTCLEAR_RXCH0EN (0x00000001U) +#define EMAC_RXUNICASTCLEAR_RXCH0EN_SHIFT (0x00000000U) + +/* RXMAXLEN */ + + +#define EMAC_RXMAXLEN_RXMAXLEN (0x0000FFFFU) +#define EMAC_RXMAXLEN_RXMAXLEN_SHIFT (0x00000000U) + + +/* RXBUFFEROFFSET */ + + +#define EMAC_RXBUFFEROFFSET_RXBUFFEROFFSET (0x0000FFFFU) +#define EMAC_RXBUFFEROFFSET_RXBUFFEROFFSET_SHIFT (0x00000000U) + + +/* RXFILTERLOWTHRESH */ + + +#define EMAC_RXFILTERLOWTHRESH_RXFILTERTHRESH (0x000000FFU) +#define EMAC_RXFILTERLOWTHRESH_RXFILTERTHRESH_SHIFT (0x00000000U) + + +/* RX0FLOWTHRESH */ + + +#define EMAC_RX0FLOWTHRESH_RX0FLOWTHRESH (0x000000FFU) +#define EMAC_RX0FLOWTHRESH_RX0FLOWTHRESH_SHIFT (0x00000000U) + + +/* RX1FLOWTHRESH */ + + +#define EMAC_RX1FLOWTHRESH_RX1FLOWTHRESH (0x000000FFU) +#define EMAC_RX1FLOWTHRESH_RX1FLOWTHRESH_SHIFT (0x00000000U) + + +/* RX2FLOWTHRESH */ + + +#define EMAC_RX2FLOWTHRESH_RX2FLOWTHRESH (0x000000FFU) +#define EMAC_RX2FLOWTHRESH_RX2FLOWTHRESH_SHIFT (0x00000000U) + + +/* RX3FLOWTHRESH */ + + +#define EMAC_RX3FLOWTHRESH_RX3FLOWTHRESH (0x000000FFU) +#define EMAC_RX3FLOWTHRESH_RX3FLOWTHRESH_SHIFT (0x00000000U) + + +/* RX4FLOWTHRESH */ + + +#define EMAC_RX4FLOWTHRESH_RX4FLOWTHRESH (0x000000FFU) +#define EMAC_RX4FLOWTHRESH_RX4FLOWTHRESH_SHIFT (0x00000000U) + + +/* RX5FLOWTHRESH */ + + +#define EMAC_RX5FLOWTHRESH_RX5FLOWTHRESH (0x000000FFU) +#define EMAC_RX5FLOWTHRESH_RX5FLOWTHRESH_SHIFT (0x00000000U) + + +/* RX6FLOWTHRESH */ + + +#define EMAC_RX6FLOWTHRESH_RX6FLOWTHRESH (0x000000FFU) +#define EMAC_RX6FLOWTHRESH_RX6FLOWTHRESH_SHIFT (0x00000000U) + + +/* RX7FLOWTHRESH */ + + +#define EMAC_RX7FLOWTHRESH_RX7FLOWTHRESH (0x000000FFU) +#define EMAC_RX7FLOWTHRESH_RX7FLOWTHRESH_SHIFT (0x00000000U) + + +/* RX0FREEBUFFER */ + + +#define EMAC_RX0FREEBUFFER_RX0FREEBUF (0x0000FFFFU) +#define EMAC_RX0FREEBUFFER_RX0FREEBUF_SHIFT (0x00000000U) + + +/* RX1FREEBUFFER */ + + +#define EMAC_RX1FREEBUFFER_RX1FREEBUF (0x0000FFFFU) +#define EMAC_RX1FREEBUFFER_RX1FREEBUF_SHIFT (0x00000000U) + + +/* RX2FREEBUFFER */ + + +#define EMAC_RX2FREEBUFFER_RX2FREEBUF (0x0000FFFFU) +#define EMAC_RX2FREEBUFFER_RX2FREEBUF_SHIFT (0x00000000U) + + +/* RX3FREEBUFFER */ + + +#define EMAC_RX3FREEBUFFER_RX3FREEBUF (0x0000FFFFU) +#define EMAC_RX3FREEBUFFER_RX3FREEBUF_SHIFT (0x00000000U) + + +/* RX4FREEBUFFER */ + + +#define EMAC_RX4FREEBUFFER_RX4FREEBUF (0x0000FFFFU) +#define EMAC_RX4FREEBUFFER_RX4FREEBUF_SHIFT (0x00000000U) + + +/* RX5FREEBUFFER */ + + +#define EMAC_RX5FREEBUFFER_RX5FREEBUF (0x0000FFFFU) +#define EMAC_RX5FREEBUFFER_RX5FREEBUF_SHIFT (0x00000000U) + + +/* RX6FREEBUFFER */ + + +#define EMAC_RX6FREEBUFFER_RX6FREEBUF (0x0000FFFFU) +#define EMAC_RX6FREEBUFFER_RX6FREEBUF_SHIFT (0x00000000U) + + +/* RX7FREEBUFFER */ + + +#define EMAC_RX7FREEBUFFER_RX7FREEBUF (0x0000FFFFU) +#define EMAC_RX7FREEBUFFER_RX7FREEBUF_SHIFT (0x00000000U) + + +/* MACCONTROL */ + + + + + +#define EMAC_MACCONTROL_RMIISPEED (0x00008000U) +#define EMAC_MACCONTROL_RMIISPEED_SHIFT (0x0000000FU) +#define EMAC_MACCONTROL_RXOFFLENBLOCK (0x00004000U) +#define EMAC_MACCONTROL_RXOFFLENBLOCK_SHIFT (0x0000000EU) +#define EMAC_MACCONTROL_RXOWNERSHIP (0x00002000U) +#define EMAC_MACCONTROL_RXOWNERSHIP_SHIFT (0x0000000DU) +#define EMAC_MACCONTROL_CMDIDLE (0x00000800U) +#define EMAC_MACCONTROL_CMDIDLE_SHIFT (0x0000000BU) +#define EMAC_MACCONTROL_TXSHORTGAPEN (0x00000400U) +#define EMAC_MACCONTROL_TXSHORTGAPEN_SHIFT (0x0000000AU) +#define EMAC_MACCONTROL_TXPTYPE (0x00000200U) +#define EMAC_MACCONTROL_TXPTYPE_SHIFT (0x00000009U) +#define EMAC_MACCONTROL_TXPACE (0x00000040U) +#define EMAC_MACCONTROL_TXPACE_SHIFT (0x00000006U) +#define EMAC_MACCONTROL_GMIIEN (0x00000020U) +#define EMAC_MACCONTROL_GMIIEN_SHIFT (0x00000005U) +#define EMAC_MACCONTROL_TXFLOWEN (0x00000010U) +#define EMAC_MACCONTROL_TXFLOWEN_SHIFT (0x00000004U) +#define EMAC_MACCONTROL_RXBUFFERFLOWEN (0x00000008U) +#define EMAC_MACCONTROL_RXBUFFERFLOWEN_SHIFT (0x00000003U) +#define EMAC_MACCONTROL_LOOPBACK (0x00000002U) +#define EMAC_MACCONTROL_LOOPBACK_SHIFT (0x00000001U) +#define EMAC_MACCONTROL_FULLDUPLEX (0x00000001U) +#define EMAC_MACCONTROL_FULLDUPLEX_SHIFT (0x00000000U) + + +/* MACSTATUS */ + +#define EMAC_MACSTATUS_IDLE (0x80000000U) +#define EMAC_MACSTATUS_IDLE_SHIFT (0x0000001FU) +#define EMAC_MACSTATUS_TXERRCODE (0x00F00000U) +#define EMAC_MACSTATUS_TXERRCODE_SHIFT (0x00000014U) +/*----TXERRCODE Tokens----*/ +#define EMAC_MACSTATUS_TXERRCODE_NOERROR (0x00000000U) +#define EMAC_MACSTATUS_TXERRCODE_SOPERROR (0x00000001U) +#define EMAC_MACSTATUS_TXERRCODE_OWNERSHIP (0x00000002U) +#define EMAC_MACSTATUS_TXERRCODE_NOEOP (0x00000003U) +#define EMAC_MACSTATUS_TXERRCODE_NULLPTR (0x00000004U) +#define EMAC_MACSTATUS_TXERRCODE_NULLEN (0x00000005U) +#define EMAC_MACSTATUS_TXERRCODE_LENERROR (0x00000006U) + + +#define EMAC_MACSTATUS_TXERRCH (0x00070000U) +#define EMAC_MACSTATUS_TXERRCH_SHIFT (0x00000010U) +/*----TXERRCH Tokens----*/ +#define EMAC_MACSTATUS_TXERRCH_CHA0 (0x00000000U) +#define EMAC_MACSTATUS_TXERRCH_CHA1 (0x00000001U) +#define EMAC_MACSTATUS_TXERRCH_CHA2 (0x00000002U) +#define EMAC_MACSTATUS_TXERRCH_CHA3 (0x00000003U) +#define EMAC_MACSTATUS_TXERRCH_CHA4 (0x00000004U) +#define EMAC_MACSTATUS_TXERRCH_CHA5 (0x00000005U) +#define EMAC_MACSTATUS_TXERRCH_CHA6 (0x00000006U) +#define EMAC_MACSTATUS_TXERRCH_CHA7 (0x00000007U) + +#define EMAC_MACSTATUS_RXERRCODE (0x0000F000U) +#define EMAC_MACSTATUS_RXERRCODE_SHIFT (0x0000000CU) +/*----RXERRCODE Tokens----*/ +#define EMAC_MACSTATUS_RXERRCODE_NOERROR (0x00000000U) +#define EMAC_MACSTATUS_RXERRCODE_OWNERSHIP (0x00000002U) +#define EMAC_MACSTATUS_RXERRCODE_NULLPTR (0x00000004U) + + +#define EMAC_MACSTATUS_RXERRCH (0x00000700U) +#define EMAC_MACSTATUS_RXERRCH_SHIFT (0x00000008U) +/*----RXERRCH Tokens----*/ +#define EMAC_MACSTATUS_RXERRCH_CHA0 (0x00000000U) +#define EMAC_MACSTATUS_RXERRCH_CHA1 (0x00000001U) +#define EMAC_MACSTATUS_RXERRCH_CHA2 (0x00000002U) +#define EMAC_MACSTATUS_RXERRCH_CHA3 (0x00000003U) +#define EMAC_MACSTATUS_RXERRCH_CHA4 (0x00000004U) +#define EMAC_MACSTATUS_RXERRCH_CHA5 (0x00000005U) +#define EMAC_MACSTATUS_RXERRCH_CHA6 (0x00000006U) +#define EMAC_MACSTATUS_RXERRCH_CHA7 (0x00000007U) + + + + +#define EMAC_MACSTATUS_RXQOSACT (0x00000004U) +#define EMAC_MACSTATUS_RXQOSACT_SHIFT (0x00000002U) +#define EMAC_MACSTATUS_RXFLOWACT (0x00000002U) +#define EMAC_MACSTATUS_RXFLOWACT_SHIFT (0x00000001U) +#define EMAC_MACSTATUS_TXFLOWACT (0x00000001U) +#define EMAC_MACSTATUS_TXFLOWACT_SHIFT (0x00000000U) + +/* EMCONTROL */ + + +#define EMAC_EMCONTROL_SOFT (0x00000002U) +#define EMAC_EMCONTROL_SOFT_SHIFT (0x00000001U) + +#define EMAC_EMCONTROL_FREE (0x00000001U) +#define EMAC_EMCONTROL_FREE_SHIFT (0x00000000U) + + +/* FIFOCONTROL */ + + +#define EMAC_FIFOCONTROL_TXCELLTHRESH (0x00000003U) +#define EMAC_FIFOCONTROL_TXCELLTHRESH_SHIFT (0x00000000U) + + +/* MACCONFIG */ + +#define EMAC_MACCONFIG_TXCELLDEPTH (0xFF000000U) +#define EMAC_MACCONFIG_TXCELLDEPTH_SHIFT (0x00000018U) + +#define EMAC_MACCONFIG_RXCELLDEPTH (0x00FF0000U) +#define EMAC_MACCONFIG_RXCELLDEPTH_SHIFT (0x00000010U) + +#define EMAC_MACCONFIG_ADDRESSTYPE (0x0000FF00U) +#define EMAC_MACCONFIG_ADDRESSTYPE_SHIFT (0x00000008U) + +#define EMAC_MACCONFIG_MACCFIG (0x000000FFU) +#define EMAC_MACCONFIG_MACCFIG_SHIFT (0x00000000U) + + +/* SOFTRESET */ + + +#define EMAC_SOFTRESET_SOFTRESET (0x00000001U) +#define EMAC_SOFTRESET_SOFTRESET_SHIFT (0x00000000U) + +/* MACSRCADDRLO */ + + +#define EMAC_MACSRCADDRLO_MACSRCADDR0 (0x0000FF00U) +#define EMAC_MACSRCADDRLO_MACSRCADDR0_SHIFT (0x00000008U) +#define EMAC_MACSRCADDRLO_MACSRCADDR1 (0x000000FFU) +#define EMAC_MACSRCADDRLO_MACSRCADDR1_SHIFT (0x00000000U) + + +/* MACSRCADDRHI */ + +#define EMAC_MACSRCADDRHI_MACSRCADDR2 (0xFF000000U) +#define EMAC_MACSRCADDRHI_MACSRCADDR2_SHIFT (0x00000018U) + +#define EMAC_MACSRCADDRHI_MACSRCADDR3 (0x00FF0000U) +#define EMAC_MACSRCADDRHI_MACSRCADDR3_SHIFT (0x00000010U) + +#define EMAC_MACSRCADDRHI_MACSRCADDR4 (0x0000FF00U) +#define EMAC_MACSRCADDRHI_MACSRCADDR4_SHIFT (0x00000008U) + +#define EMAC_MACSRCADDRHI_MACSRCADDR5 (0x000000FFU) +#define EMAC_MACSRCADDRHI_MACSRCADDR5_SHIFT (0x00000000U) + + +/* MACHASH1 */ + +#define EMAC_MACHASH1_MACHASH1 (0xFFFFFFFFU) +#define EMAC_MACHASH1_MACHASH1_SHIFT (0x00000000U) + + +/* MACHASH2 */ + +#define EMAC_MACHASH2_MACHASH2 (0xFFFFFFFFU) +#define EMAC_MACHASH2_MACHASH2_SHIFT (0x00000000U) + + +/* BOFFTEST */ + + +#define EMAC_BOFFTEST_RNDNUM (0x03FF0000U) +#define EMAC_BOFFTEST_RNDNUM_SHIFT (0x00000010U) + +#define EMAC_BOFFTEST_COLLCOUNT (0x0000F000U) +#define EMAC_BOFFTEST_COLLCOUNT_SHIFT (0x0000000CU) + + +#define EMAC_BOFFTEST_TXBACKOFF (0x000003FFU) +#define EMAC_BOFFTEST_TXBACKOFF_SHIFT (0x00000000U) + + +/* TPACETEST */ + + +#define EMAC_TPACETEST_PACEVAL (0x0000001FU) +#define EMAC_TPACETEST_PACEVAL_SHIFT (0x00000000U) + + +/* RXPAUSE */ + + +#define EMAC_RXPAUSE_PAUSETIMER (0x0000FFFFU) +#define EMAC_RXPAUSE_PAUSETIMER_SHIFT (0x00000000U) + + +/* TXPAUSE */ + + +#define EMAC_TXPAUSE_PAUSETIMER (0x0000FFFFU) +#define EMAC_TXPAUSE_PAUSETIMER_SHIFT (0x00000000U) + + +/* RXGOODFRAMES */ + +#define EMAC_RXGOODFRAMES_COUNT (0xFFFFFFFFU) +#define EMAC_RXGOODFRAMES_COUNT_SHIFT (0x00000000U) + + +/* RXBCASTFRAMES */ + +#define EMAC_RXBCASTFRAMES_COUNT (0xFFFFFFFFU) +#define EMAC_RXBCASTFRAMES_COUNT_SHIFT (0x00000000U) + + +/* RXMCASTFRAMES */ + +#define EMAC_RXMCASTFRAMES_COUNT (0xFFFFFFFFU) +#define EMAC_RXMCASTFRAMES_COUNT_SHIFT (0x00000000U) + + +/* RXPAUSEFRAMES */ + +#define EMAC_RXPAUSEFRAMES_COUNT (0xFFFFFFFFU) +#define EMAC_RXPAUSEFRAMES_COUNT_SHIFT (0x00000000U) + + +/* RXCRCERRORS */ + +#define EMAC_RXCRCERRORS_COUNT (0xFFFFFFFFU) +#define EMAC_RXCRCERRORS_COUNT_SHIFT (0x00000000U) + + +/* RXALIGNCODEERRORS */ + +#define EMAC_RXALIGNCODEERRORS_COUNT (0xFFFFFFFFU) +#define EMAC_RXALIGNCODEERRORS_COUNT_SHIFT (0x00000000U) + + +/* RXOVERSIZED */ + +#define EMAC_RXOVERSIZED_COUNT (0xFFFFFFFFU) +#define EMAC_RXOVERSIZED_COUNT_SHIFT (0x00000000U) + + +/* RXJABBER */ + +#define EMAC_RXJABBER_COUNT (0xFFFFFFFFU) +#define EMAC_RXJABBER_COUNT_SHIFT (0x00000000U) + + +/* RXUNDERSIZED */ + +#define EMAC_RXUNDERSIZED_COUNT (0xFFFFFFFFU) +#define EMAC_RXUNDERSIZED_COUNT_SHIFT (0x00000000U) + + +/* RXFRAGMENTS */ + +#define EMAC_RXFRAGMENTS_COUNT (0xFFFFFFFFU) +#define EMAC_RXFRAGMENTS_COUNT_SHIFT (0x00000000U) + + +/* RXFILTERED */ + +#define EMAC_RXFILTERED_COUNT (0xFFFFFFFFU) +#define EMAC_RXFILTERED_COUNT_SHIFT (0x00000000U) + + +/* RXQOSFILTERED */ + +#define EMAC_RXQOSFILTERED_COUNT (0xFFFFFFFFU) +#define EMAC_RXQOSFILTERED_COUNT_SHIFT (0x00000000U) + + +/* RXOCTETS */ + +#define EMAC_RXOCTETS_COUNT (0xFFFFFFFFU) +#define EMAC_RXOCTETS_COUNT_SHIFT (0x00000000U) + + +/* TXGOODFRAMES */ + +#define EMAC_TXGOODFRAMES_COUNT (0xFFFFFFFFU) +#define EMAC_TXGOODFRAMES_COUNT_SHIFT (0x00000000U) + + +/* TXBCASTFRAMES */ + +#define EMAC_TXBCASTFRAMES_COUNT (0xFFFFFFFFU) +#define EMAC_TXBCASTFRAMES_COUNT_SHIFT (0x00000000U) + + +/* TXMCASTFRAMES */ + +#define EMAC_TXMCASTFRAMES_COUNT (0xFFFFFFFFU) +#define EMAC_TXMCASTFRAMES_COUNT_SHIFT (0x00000000U) + + +/* TXPAUSEFRAMES */ + +#define EMAC_TXPAUSEFRAMES_COUNT (0xFFFFFFFFU) +#define EMAC_TXPAUSEFRAMES_COUNT_SHIFT (0x00000000U) + + +/* TXDEFERRED */ + +#define EMAC_TXDEFERRED_COUNT (0xFFFFFFFFU) +#define EMAC_TXDEFERRED_COUNT_SHIFT (0x00000000U) + + +/* TXCOLLISION */ + +#define EMAC_TXCOLLISION_COUNT (0xFFFFFFFFU) +#define EMAC_TXCOLLISION_COUNT_SHIFT (0x00000000U) + + +/* TXSINGLECOLL */ + +#define EMAC_TXSINGLECOLL_COUNT (0xFFFFFFFFU) +#define EMAC_TXSINGLECOLL_COUNT_SHIFT (0x00000000U) + + +/* TXMULTICOLL */ + +#define EMAC_TXMULTICOLL_COUNT (0xFFFFFFFFU) +#define EMAC_TXMULTICOLL_COUNT_SHIFT (0x00000000U) + + +/* TXEXCESSIVECOLL */ + +#define EMAC_TXEXCESSIVECOLL_COUNT (0xFFFFFFFFU) +#define EMAC_TXEXCESSIVECOLL_COUNT_SHIFT (0x00000000U) + + +/* TXLATECOLL */ + +#define EMAC_TXLATECOLL_COUNT (0xFFFFFFFFU) +#define EMAC_TXLATECOLL_COUNT_SHIFT (0x00000000U) + + +/* TXUNDERRUN */ + +#define EMAC_TXUNDERRUN_COUNT (0xFFFFFFFFU) +#define EMAC_TXUNDERRUN_COUNT_SHIFT (0x00000000U) + + +/* TXCARRIERSENSE */ + +#define EMAC_TXCARRIERSENSE_COUNT (0xFFFFFFFFU) +#define EMAC_TXCARRIERSENSE_COUNT_SHIFT (0x00000000U) + + +/* TXOCTETS */ + +#define EMAC_TXOCTETS_COUNT (0xFFFFFFFFU) +#define EMAC_TXOCTETS_COUNT_SHIFT (0x00000000U) + + +/* FRAME64 */ + +#define EMAC_FRAME64_COUNT (0xFFFFFFFFU) +#define EMAC_FRAME64_COUNT_SHIFT (0x00000000U) + + +/* FRAME65T127 */ + +#define EMAC_FRAME65T127_COUNT (0xFFFFFFFFU) +#define EMAC_FRAME65T127_COUNT_SHIFT (0x00000000U) + + +/* FRAME128T255 */ + +#define EMAC_FRAME128T255_COUNT (0xFFFFFFFFU) +#define EMAC_FRAME128T255_COUNT_SHIFT (0x00000000U) + + +/* FRAME256T511 */ + +#define EMAC_FRAME256T511_COUNT (0xFFFFFFFFU) +#define EMAC_FRAME256T511_COUNT_SHIFT (0x00000000U) + + +/* FRAME512T1023 */ + +#define EMAC_FRAME512T1023_COUNT (0xFFFFFFFFU) +#define EMAC_FRAME512T1023_COUNT_SHIFT (0x00000000U) + + +/* FRAME1024TUP */ + +#define EMAC_FRAME1024TUP_COUNT (0xFFFFFFFFU) +#define EMAC_FRAME1024TUP_COUNT_SHIFT (0x00000000U) + + +/* NETOCTETS */ + +#define EMAC_NETOCTETS_COUNT (0xFFFFFFFFU) +#define EMAC_NETOCTETS_COUNT_SHIFT (0x00000000U) + + +/* RXSOFOVERRUNS */ + +#define EMAC_RXSOFOVERRUNS_COUNT (0xFFFFFFFFU) +#define EMAC_RXSOFOVERRUNS_COUNT_SHIFT (0x00000000U) + + +/* RXMOFOVERRUNS */ + +#define EMAC_RXMOFOVERRUNS_COUNT (0xFFFFFFFFU) +#define EMAC_RXMOFOVERRUNS_COUNT_SHIFT (0x00000000U) + + +/* RXDMAOVERRUNS */ + +#define EMAC_RXDMAOVERRUNS_COUNT (0xFFFFFFFFU) +#define EMAC_RXDMAOVERRUNS_COUNT_SHIFT (0x00000000U) + + +/* MACADDRLO */ + + +#define EMAC_MACADDRLO_VALID (0x00100000U) +#define EMAC_MACADDRLO_VALID_SHIFT (0x00000014U) +#define EMAC_MACADDRLO_MATCHFILT (0x00080000U) +#define EMAC_MACADDRLO_MATCHFILT_SHIFT (0x00000013U) +#define EMAC_MACADDRLO_CHANNEL (0x00070000U) +#define EMAC_MACADDRLO_CHANNEL_SHIFT (0x00000010U) +#define EMAC_MACADDRLO_MACADDR0 (0x0000FF00U) +#define EMAC_MACADDRLO_MACADDR0_SHIFT (0x00000008U) +#define EMAC_MACADDRLO_MACADDR1 (0x000000FFU) +#define EMAC_MACADDRLO_MACADDR1_SHIFT (0x00000000U) + + +/* MACADDRHI */ + +#define EMAC_MACADDRHI_MACADDR2 (0xFF000000U) +#define EMAC_MACADDRHI_MACADDR2_SHIFT (0x00000018U) + +#define EMAC_MACADDRHI_MACADDR3 (0x00FF0000U) +#define EMAC_MACADDRHI_MACADDR3_SHIFT (0x00000010U) + +#define EMAC_MACADDRHI_MACADDR4 (0x0000FF00U) +#define EMAC_MACADDRHI_MACADDR4_SHIFT (0x00000008U) + +#define EMAC_MACADDRHI_MACADDR5 (0x000000FFU) +#define EMAC_MACADDRHI_MACADDR5_SHIFT (0x00000000U) + + +/* MACINDEX */ + + +#define EMAC_MACINDEX_MACINDEX (0x0000001FU) +#define EMAC_MACINDEX_MACINDEX_SHIFT (0x00000000U) + + +/* TX0HDP */ + +#define EMAC_TX0HDP_TX0HDP (0xFFFFFFFFU) +#define EMAC_TX0HDP_TX0HDP_SHIFT (0x00000000U) + + +/* TX1HDP */ + +#define EMAC_TX1HDP_TX1HDP (0xFFFFFFFFU) +#define EMAC_TX1HDP_TX1HDP_SHIFT (0x00000000U) + + +/* TX2HDP */ + +#define EMAC_TX2HDP_TX2HDP (0xFFFFFFFFU) +#define EMAC_TX2HDP_TX2HDP_SHIFT (0x00000000U) + + +/* TX3HDP */ + +#define EMAC_TX3HDP_TX3HDP (0xFFFFFFFFU) +#define EMAC_TX3HDP_TX3HDP_SHIFT (0x00000000U) + + +/* TX4HDP */ + +#define EMAC_TX4HDP_TX4HDP (0xFFFFFFFFU) +#define EMAC_TX4HDP_TX4HDP_SHIFT (0x00000000U) + + +/* TX5HDP */ + +#define EMAC_TX5HDP_TX5HDP (0xFFFFFFFFU) +#define EMAC_TX5HDP_TX5HDP_SHIFT (0x00000000U) + + +/* TX6HDP */ + +#define EMAC_TX6HDP_TX6HDP (0xFFFFFFFFU) +#define EMAC_TX6HDP_TX6HDP_SHIFT (0x00000000U) + + +/* TX7HDP */ + +#define EMAC_TX7HDP_TX7HDP (0xFFFFFFFFU) +#define EMAC_TX7HDP_TX7HDP_SHIFT (0x00000000U) + + +/* RX0HDP */ + +#define EMAC_RX0HDP_RX0HDP (0xFFFFFFFFU) +#define EMAC_RX0HDP_RX0HDP_SHIFT (0x00000000U) + + +/* RX1HDP */ + +#define EMAC_RX1HDP_RX1HDP (0xFFFFFFFFU) +#define EMAC_RX1HDP_RX1HDP_SHIFT (0x00000000U) + + +/* RX2HDP */ + +#define EMAC_RX2HDP_RX2HDP (0xFFFFFFFFU) +#define EMAC_RX2HDP_RX2HDP_SHIFT (0x00000000U) + + +/* RX3HDP */ + +#define EMAC_RX3HDP_RX3HDP (0xFFFFFFFFU) +#define EMAC_RX3HDP_RX3HDP_SHIFT (0x00000000U) + + +/* RX4HDP */ + +#define EMAC_RX4HDP_RX4HDP (0xFFFFFFFFU) +#define EMAC_RX4HDP_RX4HDP_SHIFT (0x00000000U) + + +/* RX5HDP */ + +#define EMAC_RX5HDP_RX5HDP (0xFFFFFFFFU) +#define EMAC_RX5HDP_RX5HDP_SHIFT (0x00000000U) + + +/* RX6HDP */ + +#define EMAC_RX6HDP_RX6HDP (0xFFFFFFFFU) +#define EMAC_RX6HDP_RX6HDP_SHIFT (0x00000000U) + + +/* RX7HDP */ + +#define EMAC_RX7HDP_RX7HDP (0xFFFFFFFFU) +#define EMAC_RX7HDP_RX7HDP_SHIFT (0x00000000U) + + +/* TX0CP */ + +#define EMAC_TX0CP_TX0CP (0xFFFFFFFFU) +#define EMAC_TX0CP_TX0CP_SHIFT (0x00000000U) + + +/* TX1CP */ + +#define EMAC_TX1CP_TX1CP (0xFFFFFFFFU) +#define EMAC_TX1CP_TX1CP_SHIFT (0x00000000U) + + +/* TX2CP */ + +#define EMAC_TX2CP_TX2CP (0xFFFFFFFFU) +#define EMAC_TX2CP_TX2CP_SHIFT (0x00000000U) + + +/* TX3CP */ + +#define EMAC_TX3CP_TX3CP (0xFFFFFFFFU) +#define EMAC_TX3CP_TX3CP_SHIFT (0x00000000U) + + +/* TX4CP */ + +#define EMAC_TX4CP_TX4CP (0xFFFFFFFFU) +#define EMAC_TX4CP_TX4CP_SHIFT (0x00000000U) + + +/* TX5CP */ + +#define EMAC_TX5CP_TX5CP (0xFFFFFFFFU) +#define EMAC_TX5CP_TX5CP_SHIFT (0x00000000U) + + +/* TX6CP */ + +#define EMAC_TX6CP_TX6CP (0xFFFFFFFFU) +#define EMAC_TX6CP_TX6CP_SHIFT (0x00000000U) + + +/* TX7CP */ + +#define EMAC_TX7CP_TX7CP (0xFFFFFFFFU) +#define EMAC_TX7CP_TX7CP_SHIFT (0x00000000U) + + +/* RX0CP */ + +#define EMAC_RX0CP_RX0CP (0xFFFFFFFFU) +#define EMAC_RX0CP_RX0CP_SHIFT (0x00000000U) + + +/* RX1CP */ + +#define EMAC_RX1CP_RX1CP (0xFFFFFFFFU) +#define EMAC_RX1CP_RX1CP_SHIFT (0x00000000U) + + +/* RX2CP */ + +#define EMAC_RX2CP_RX2CP (0xFFFFFFFFU) +#define EMAC_RX2CP_RX2CP_SHIFT (0x00000000U) + + +/* RX3CP */ + +#define EMAC_RX3CP_RX3CP (0xFFFFFFFFU) +#define EMAC_RX3CP_RX3CP_SHIFT (0x00000000U) + + +/* RX4CP */ + +#define EMAC_RX4CP_RX4CP (0xFFFFFFFFU) +#define EMAC_RX4CP_RX4CP_SHIFT (0x00000000U) + + +/* RX5CP */ + +#define EMAC_RX5CP_RX5CP (0xFFFFFFFFU) +#define EMAC_RX5CP_RX5CP_SHIFT (0x00000000U) + + +/* RX6CP */ + +#define EMAC_RX6CP_RX6CP (0xFFFFFFFFU) +#define EMAC_RX6CP_RX6CP_SHIFT (0x00000000U) + + +/* RX7CP */ + +#define EMAC_RX7CP_RX7CP (0xFFFFFFFFU) +#define EMAC_RX7CP_RX7CP_SHIFT (0x00000000U) + +/**@}*/ +#ifdef __cplusplus +} +#endif + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +#endif Index: firmware/include/hw_emac_ctrl.h =================================================================== diff -u --- firmware/include/hw_emac_ctrl.h (revision 0) +++ firmware/include/hw_emac_ctrl.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,91 @@ +/* + * hw_emac1.h + */ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef _HW_EMAC_CTRL_H_ +#define _HW_EMAC_CTRL_H_ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +#define EMAC_CTRL_REVID (0x0U) +#define EMAC_CTRL_SOFTRESET (0x4U) +#define EMAC_CTRL_INTCONTROL (0xCU) +#define EMAC_CTRL_C0RXTHRESHEN (0x10U) +#define EMAC_CTRL_CnRXEN(n) ((uint32)0x14u + (uint32)((uint32)(n) << 4)) +#define EMAC_CTRL_CnTXEN(n) ((uint32)0x18u + (uint32)((uint32)(n) << 4)) +#define EMAC_CTRL_CnMISCEN(n) ((uint32)0x1Cu + (uint32)((uint32)(n) << 4)) +#define EMAC_CTRL_CnRXTHRESHEN(n) ((uint32)0x20u + (uint32)((uint32)(n) << 4)) +#define EMAC_CTRL_C0RXTHRESHSTAT (0x40U) +#define EMAC_CTRL_C0RXSTAT (0x44U) +#define EMAC_CTRL_C0TXSTAT (0x48U) +#define EMAC_CTRL_C0MISCSTAT (0x4CU) +#define EMAC_CTRL_C1RXTHRESHSTAT (0x50U) +#define EMAC_CTRL_C1RXSTAT (0x54U) +#define EMAC_CTRL_C1TXSTAT (0x58U) +#define EMAC_CTRL_C1MISCSTAT (0x5CU) +#define EMAC_CTRL_C2RXTHRESHSTAT (0x60U) +#define EMAC_CTRL_C2RXSTAT (0x64U) +#define EMAC_CTRL_C2TXSTAT (0x68U) +#define EMAC_CTRL_C2MISCSTAT (0x6CU) +#define EMAC_CTRL_C0RXIMAX (0x70U) +#define EMAC_CTRL_C0TXIMAX (0x74U) +#define EMAC_CTRL_C1RXIMAX (0x78U) +#define EMAC_CTRL_C1TXIMAX (0x7CU) +#define EMAC_CTRL_C2RXIMAX (0x80U) +#define EMAC_CTRL_C2TXIMAX (0x84U) + +/**************************************************************************\ +* Field Definition Macros +\**************************************************************************/ + +#ifdef __cplusplus +} +#endif + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +#endif Index: firmware/include/hw_mdio.h =================================================================== diff -u --- firmware/include/hw_mdio.h (revision 0) +++ firmware/include/hw_mdio.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,264 @@ +/* + * hw_mdio.h + */ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef _HW_MDIO_H_ +#define _HW_MDIO_H_ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +#define MDIO_BASE (0xFCF78900U) + +#define MDIO_REVID (0x0U) +#define MDIO_CONTROL (0x4U) +#define MDIO_ALIVE (0x8U) +#define MDIO_LINK (0xCU) +#define MDIO_LINKINTRAW (0x10U) +#define MDIO_LINKINTMASKED (0x14U) +#define MDIO_USERINTRAW (0x20U) +#define MDIO_USERINTMASKED (0x24U) +#define MDIO_USERINTMASKSET (0x28U) +#define MDIO_USERINTMASKCLEAR (0x2CU) +#define MDIO_USERACCESS0 (0x80U) +#define MDIO_USERPHYSEL0 (0x84U) +#define MDIO_USERACCESS1 (0x88U) +#define MDIO_USERPHYSEL1 (0x8CU) + +/**************************************************************************\ +* Field Definition Macros +\**************************************************************************/ + +/* REVID */ + +#define MDIO_REVID_REV (0xFFFFFFFFU) +#define MDIO_REVID_REV_SHIFT (0x00000000U) + + +/* CONTROL */ + +#define MDIO_CONTROL_IDLE (0x80000000U) +#define MDIO_CONTROL_IDLE_SHIFT (0x0000001FU) +/*----IDLE Tokens----*/ +#define MDIO_CONTROL_IDLE_NO (0x00000000U) +#define MDIO_CONTROL_IDLE_YES (0x00000001U) + +#define MDIO_CONTROL_ENABLE (0x40000000U) +#define MDIO_CONTROL_ENABLE_SHIFT (0x0000001EU) + +#define MDIO_CONTROL_HIGHEST_USER_CHANNEL (0x1F000000U) +#define MDIO_CONTROL_HIGHEST_USER_CHANNEL_SHIFT (0x00000018U) + + +#define MDIO_CONTROL_PREAMBLE (0x00100000U) +#define MDIO_CONTROL_PREAMBLE_SHIFT (0x00000014U) +/*----PREAMBLE Tokens----*/ + +#define MDIO_CONTROL_FAULT (0x00080000U) +#define MDIO_CONTROL_FAULT_SHIFT (0x00000013U) + +#define MDIO_CONTROL_FAULTENB (0x00040000U) +#define MDIO_CONTROL_FAULTENB_SHIFT (0x00000012U) +/*----FAULTENB Tokens----*/ + + + +#define MDIO_CONTROL_CLKDIV (0x0000FFFFU) +#define MDIO_CONTROL_CLKDIV_SHIFT (0x00000000U) +/*----CLKDIV Tokens----*/ + + +/* ALIVE */ + +#define MDIO_ALIVE_REGVAL (0xFFFFFFFFU) +#define MDIO_ALIVE_REGVAL_SHIFT (0x00000000U) + + +/* LINK */ + +#define MDIO_LINK_REGVAL (0xFFFFFFFFU) +#define MDIO_LINK_REGVAL_SHIFT (0x00000000U) + + +/* LINKINTRAW */ + + +#define MDIO_LINKINTRAW_USERPHY1 (0x00000002U) +#define MDIO_LINKINTRAW_USERPHY1_SHIFT (0x00000001U) + +#define MDIO_LINKINTRAW_USERPHY0 (0x00000001U) +#define MDIO_LINKINTRAW_USERPHY0_SHIFT (0x00000000U) + + +/* LINKINTMASKED */ + + +#define MDIO_LINKINTMASKED_USERPHY1 (0x00000002U) +#define MDIO_LINKINTMASKED_USERPHY1_SHIFT (0x00000001U) + +#define MDIO_LINKINTMASKED_USERPHY0 (0x00000001U) +#define MDIO_LINKINTMASKED_USERPHY0_SHIFT (0x00000000U) + + +/* USERINTRAW */ + + +#define MDIO_USERINTRAW_USERACCESS1 (0x00000002U) +#define MDIO_USERINTRAW_USERACCESS1_SHIFT (0x00000001U) + +#define MDIO_USERINTRAW_USERACCESS0 (0x00000001U) +#define MDIO_USERINTRAW_USERACCESS0_SHIFT (0x00000000U) + + +/* USERINTMASKED */ + + +#define MDIO_USERINTMASKED_USERACCESS1 (0x00000002U) +#define MDIO_USERINTMASKED_USERACCESS1_SHIFT (0x00000001U) + +#define MDIO_USERINTMASKED_USERACCESS0 (0x00000001U) +#define MDIO_USERINTMASKED_USERACCESS0_SHIFT (0x00000000U) + + +/* USERINTMASKSET */ + + +#define MDIO_USERINTMASKSET_USERACCESS1 (0x00000002U) +#define MDIO_USERINTMASKSET_USERACCESS1_SHIFT (0x00000001U) + +#define MDIO_USERINTMASKSET_USERACCESS0 (0x00000001U) +#define MDIO_USERINTMASKSET_USERACCESS0_SHIFT (0x00000000U) + + +/* USERINTMASKCLEAR */ + + +#define MDIO_USERINTMASKCLEAR_USERACCESS1 (0x00000002U) +#define MDIO_USERINTMASKCLEAR_USERACCESS1_SHIFT (0x00000001U) + +#define MDIO_USERINTMASKCLEAR_USERACCESS0 (0x00000001U) +#define MDIO_USERINTMASKCLEAR_USERACCESS0_SHIFT (0x00000000U) + + +/* USERACCESS0 */ + +#define MDIO_USERACCESS0_GO (0x80000000U) +#define MDIO_USERACCESS0_GO_SHIFT (0x0000001FU) + +#define MDIO_USERACCESS0_WRITE (0x40000000U) +#define MDIO_USERACCESS0_READ (0x00000000U) +#define MDIO_USERACCESS0_WRITE_SHIFT (0x0000001EU) + +#define MDIO_USERACCESS0_ACK (0x20000000U) +#define MDIO_USERACCESS0_ACK_SHIFT (0x0000001DU) + + +#define MDIO_USERACCESS0_REGADR (0x03E00000U) +#define MDIO_USERACCESS0_REGADR_SHIFT (0x00000015U) + +#define MDIO_USERACCESS0_PHYADR (0x001F0000U) +#define MDIO_USERACCESS0_PHYADR_SHIFT (0x00000010U) + +#define MDIO_USERACCESS0_DATA (0x0000FFFFU) +#define MDIO_USERACCESS0_DATA_SHIFT (0x00000000U) + + +/* USERPHYSEL0 */ + + +#define MDIO_USERPHYSEL0_LINKSEL (0x00000080U) +#define MDIO_USERPHYSEL0_LINKSEL_SHIFT (0x00000007U) + +#define MDIO_USERPHYSEL0_LINKINTENB (0x00000040U) +#define MDIO_USERPHYSEL0_LINKINTENB_SHIFT (0x00000006U) + + +#define MDIO_USERPHYSEL0_PHYADRMON (0x0000001FU) +#define MDIO_USERPHYSEL0_PHYADRMON_SHIFT (0x00000000U) + + +/* USERACCESS1 */ + +#define MDIO_USERACCESS1_GO (0x80000000U) +#define MDIO_USERACCESS1_GO_SHIFT (0x0000001FU) + +#define MDIO_USERACCESS1_WRITE (0x40000000U) +#define MDIO_USERACCESS1_WRITE_SHIFT (0x0000001EU) + +#define MDIO_USERACCESS1_ACK (0x20000000U) +#define MDIO_USERACCESS1_ACK_SHIFT (0x0000001DU) + + +#define MDIO_USERACCESS1_REGADR (0x03E00000U) +#define MDIO_USERACCESS1_REGADR_SHIFT (0x00000015U) + +#define MDIO_USERACCESS1_PHYADR (0x001F0000U) +#define MDIO_USERACCESS1_PHYADR_SHIFT (0x00000010U) + +#define MDIO_USERACCESS1_DATA (0x0000FFFFU) +#define MDIO_USERACCESS1_DATA_SHIFT (0x00000000U) + + +/* USERPHYSEL1 */ + + +#define MDIO_USERPHYSEL1_LINKSEL (0x00000080U) +#define MDIO_USERPHYSEL1_LINKSEL_SHIFT (0x00000007U) + +#define MDIO_USERPHYSEL1_LINKINTENB (0x00000040U) +#define MDIO_USERPHYSEL1_LINKINTENB_SHIFT (0x00000006U) + + +#define MDIO_USERPHYSEL1_PHYADRMON (0x0000001FU) +#define MDIO_USERPHYSEL1_PHYADRMON_SHIFT (0x00000000U) + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +#ifdef __cplusplus +} +#endif + +#endif Index: firmware/include/hw_reg_access.h =================================================================== diff -u --- firmware/include/hw_reg_access.h (revision 0) +++ firmware/include/hw_reg_access.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,81 @@ +/* + * hw_reg_access.h + */ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef _HW_REG_ACCESS_H_ +#define _HW_REG_ACCESS_H_ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/******************************************************************************* +* +* Macros for hardware access, both direct and via the bit-band region. +* +*****************************************************************************/ +#define HWREG(x) \ + (*((volatile uint32 *)(x))) +#define HWREGH(x) \ + (*((volatile uint16 *)(x))) +#define HWREGB(x) \ + (*((volatile uint8 *)(x))) +#define HWREGBITW(x, b) \ + (HWREG(((uint32)(x) & 0xF0000000U) | (uint32)0x02000000U | \ + (((uint32)(x) & 0x000FFFFFU) << 5U) | (uint32)((uint32)(b) << 2U))) +#define HWREGBITH(x, b) \ + (HWREGH(((uint32)(x) & 0xF0000000U) | (uint32)0x02000000U | \ + (((uint32)(x) & 0x000FFFFFU) << 5U) | (uint32)((uint32)(b) << 2U))) +#define HWREGBITB(x, b) \ + (HWREGB(((uint32)(x) & 0xF0000000U) | (uint32)0x02000000U | \ + (((uint32)(x) & 0x000FFFFFU) << 5U) | (uint32)((uint32)(b) << 2U))) + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +#ifdef __cplusplus +} +#endif + +#endif /* __HW_TYPES_H__ */ Index: firmware/include/hw_usb.h =================================================================== diff -u --- firmware/include/hw_usb.h (revision 0) +++ firmware/include/hw_usb.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,276 @@ +/****************************************************************************** + * + * hw_usb.h - Macros for use in accessing the USB registers. + * +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __HW_USB_H__ +#define __HW_USB_H__ + +/** @brief Base address of memmory mapped Registers */ +#define USBD_0_BASE 0xFCF78A00u +#define USB0_BASE USBD_0_BASE + +typedef volatile struct { + uint16 rev; /* Revision */ + + /** Endpoint registers ***************************************************/ + uint16 epnum; /* Endpoint selection */ + uint16 data; /* Data */ + uint16 ctrl; /* Control */ + uint16 stat_flag; /* Status */ + uint16 rxf_stat; /* RX FIFO Status */ + uint16 syscon1; /* System configuration 1 */ + uint16 syscon2; /* System configuration 2 */ + uint16 dev_stat; /* Device status */ + uint16 sof; /* Start of frame */ + uint16 irq_en; /* Interrupt enable */ + uint16 dma_irqen; /* DMA Interrupt enable */ + uint16 irqsrc; /* Interrupt source */ + uint16 epn_stat; /* Non-ISO EP interrupt enable */ + uint16 dman_stat; /* Non-ISO DMA interrupt enable */ + uint16 _rsvd1[1]; /* Reserved for reg holes */ + + /** DMA Configuration ***************************************************/ + uint16 rxdma_cfg; /* DMA Rx channels configuration */ + uint16 txdma_cfg; /* DMA Tx channels configuration */ + uint16 data_dma; /* DMA FIFO data */ + uint16 txdma0; /* Transmit DMA control 0 */ + uint16 txdma1; /* Transmit DMA control 1 */ + uint16 txdma2; /* Transmit DMA control 2 */ + uint16 _rsvd2[2]; /* Reserved for reg holes */ + + uint16 dman_rxdma0; /* Receive DMA control 0 */ + uint16 dman_rxdma1; /* Receive DMA control 1 */ + uint16 dman_rxdma2; /* Receive DMA control 2 */ + uint16 _rsvd3[5]; /* Reserved */ + + /** Endpoint Configuration ***********************************************/ + uint16 ep0; /* Endpoint 0 Configuration */ + + uint16 epn_rx[15]; /* RX EP configurations... */ + uint16 _rsvd4[1]; /* Reserved for reg holes */ + + uint16 epn_tx[15]; /* TX EP configurations... */ +} usbdRegs; + +/******************************************************************************\ +* Register Bit Masks +* (USBD___ +\******************************************************************************/ + +/* Endpoint selection *********************************************************/ +#define USBD_EP_NUM_SETUP_SEL (0x0040u) +#define USBD_EP_NUM_EP_SEL (0x0020u) +#define USBD_EP_NUM_EP_DIR (0x0010u) +#define USBD_EP_NUM_EP_NUM_MASK (0x000Fu) + +/* Data ***********************************************************************/ +#define USBD_DATA_DATA (0xFFFFu) + +/* Control ********************************************************************/ +#define USBD_CTRL_CLR_HALT (0x0080u) +#define USBD_CTRL_SET_HALT (0x0040u) +#define USBD_CTRL_SET_FIFO_EN (0x0004u) +#define USBD_CTRL_CLR_EP (0x0002u) +#define USBD_CTRL_RESET_EP (0x0001u) + +/* Status *********************************************************************/ +#define USBD_STAT_FLG_NO_RXPACKET (0x8000u) +#define USBD_STAT_FLG_MISS_IN (0x4000u) +#define USBD_STAT_FLG_DATA_FLUSH (0x2000u) +#define USBD_STAT_FLG_ISO_ERR (0x1000u) +#define USBD_STAT_FLG_ISO_FIFO_EMPTY (0x0200u) +#define USBD_STAT_FLG_ISO_FIFO_FULL (0x0100u) +#define USBD_STAT_FLG_EP_HALTED (0x0040u) +#define USBD_STAT_FLG_STALL (0x0020u) +#define USBD_STAT_FLG_NAK (0x0010u) +#define USBD_STAT_FLG_ACK (0x0008u) +#define USBD_STAT_FLG_FIFO_EN (0x0004u) +#define USBD_STAT_FLG_NON_ISO_FIFO_EMPTY (0x0002u) +#define USBD_STAT_FLG_NON_ISO_FIFO_FULL (0x0001u) + +/* RX FIFO Status */ +#define USBD_RXFSTAT_RXF_COUNT (0x03FFu) + +/* System configuration 1 *****************************************************/ +#define USBD_SYSCON1_CFG_LOCK (0x0100u) +#define USBD_SYSCON1_DATA_ENDIAN (0x0080u) +#define USBD_SYSCON1_DMA_ENDIAN (0x0040u) +#define USBD_SYSCON1_NAK_EN (0x0010u) +#define USBD_SYSCON1_AUTODEC_DIS (0x0008u) +#define USBD_SYSCON1_SELF_PWR (0x0004u) +#define USBD_SYSCON1_SOFF_DIS (0x0002u) +#define USBD_SYSCON1_PULLUP_EN (0x0001u) + +/* System configuration 2 *****************************************************/ +#define USBD_SYSCON2_RMT_WKP (0x0040u) +#define USBD_SYSCON2_STALL_CMD (0x0020u) +#define USBD_SYSCON2_DEV_CFG (0x0008u) +#define USBD_SYSCON2_CLR_CFG (0x0004u) + +/* Device status **************************************************************/ +#define USBD_DEVSTAT_B_HNP_ENABLE (0x0200u) +#define USBD_DEVSTAT_A_HNP_SUPPORT (0x0100u) +#define USBD_DEVSTAT_A_ALT_HNP_SUPPORT (0x0080u) +#define USBD_DEVSTAT_R_WK_OK (0x0040u) +#define USBD_DEVSTAT_USB_RESET (0x0020u) +#define USBD_DEVSTAT_SUS (0x0010u) +#define USBD_DEVSTAT_CFG (0x0008u) +#define USBD_DEVSTAT_ADD (0x0004u) +#define USBD_DEVSTAT_DEF (0x0002u) +#define USBD_DEVSTAT_ATT (0x0001u) + + +/* Start of frame *************************************************************/ +#define USBD_SOF_FT_LOCK (0x1000u) +#define USBD_SOF_TS_OK (0x0800u) +#define USBD_SOF_TS (0x07FFu) + +/* Interrupt enable ***********************************************************/ +#define USBD_IRQ_EN_SOF_IE (0x0080u) +#define USBD_IRQ_EN_EPN_RX_IE (0x0020u) +#define USBD_IRQ_EN_EPN_TX_IE (0x0010u) +#define USBD_IRQ_EN_DS_CHG_IE (0x0008u) +#define USBD_IRQ_EN_EP0_IE (0x0001u) + +/* DMA Interrupt enable *******************************************************/ +#define USBD_DMA_IRQ_EN_TX2_DONE_IE (0x0400u) +#define USBD_DMA_IRQ_EN_RX2_CNT_IE (0x0200u) +#define USBD_DMA_IRQ_EN_RX2_EOT_IE (0x0100u) +#define USBD_DMA_IRQ_EN_TX1_DONE_IE (0x0040u) +#define USBD_DMA_IRQ_EN_RX1_CNT_IE (0x0020u) +#define USBD_DMA_IRQ_EN_RX1_EOT_IE (0x0010u) +#define USBD_DMA_IRQ_EN_TX0_DONE_IE (0x0004u) +#define USBD_DMA_IRQ_EN_RX0_CNT_IE (0x0002u) +#define USBD_DMA_IRQ_EN_RX0_EOT_IE (0x0001u) + +/* Interrupt source ***********************************************************/ +#define USBD_IRQ_SRC_TXN_DONE (0x0400u) +#define USBD_IRQ_SRC_RXN_CNT (0x0200u) +#define USBD_IRQ_SRC_RXN_EOT (0x0100u) +#define USBD_IRQ_SRC_SOF (0x0080u) +#define USBD_IRQ_SRC_EPN_RX (0x0020u) +#define USBD_IRQ_SRC_EPN_TX (0x0010u) +#define USBD_IRQ_SRC_DS_CHG (0x0008u) +#define USBD_IRQ_SRC_SETUP (0x0004u) +#define USBD_IRQ_SRC_EP0_RX (0x0002u) +#define USBD_IRQ_SRC_EP0_TX (0x0001u) + +/* Non-ISO endpoint interrupt enable ******************************************/ +#define USBD_EPN_STAT_RX_IT_SRC (0x0F00u) +#define USBD_EPN_STAT_TX_IT_SRC (0x000Fu) + +/* Non-ISO DMA interrupt enable ***********************************************/ +#define USBD_DMAN_STAT_RX_SB (0x1000u) +#define USBD_DMAN_STAT_RX_IT_SRC (0x0F00u) +#define USBD_DMAN_STAT_TX_IT_SRC (0x000Fu) + +/* DMA Receive channels configuration *****************************************/ +#define USBD_RXDMA_CFG_RX_REQ (0x1000u) +#define USBD_RXDMA_CFG_RXDMA2_EP (0x0F00u) +#define USBD_RXDMA_CFG_RXDMA1_EP (0x00F0u) +#define USBD_RXDMA_CFG_RXDMA0_EP (0x000Fu) + +/* DMA Transmit channels configuration ****************************************/ +#define USBD_TXDMA_CFG_TX_REQ (0x1000u) +#define USBD_TXDMA_CFG_TXDMA2_EP (0x0F00u) +#define USBD_TXDMA_CFG_TXDMA1_EP (0x00F0u) +#define USBD_TXDMA_CFG_TXDMA0_EP (0x000Fu) + +/* DMA FIFO data **************************************************************/ +#define USBD_DATA_DMA_DATA_DMA (0xFFFFu) + +/* Transmit DMA control 0 *****************************************************/ +#define USBD_TXDMA0_TX0_EOT (0x8000u) +#define USBD_TXDMA0_TX0_START (0x4000u) +#define USBD_TXDMA0_TX0_TSC (0x03FFu) + +/* Transmit DMA control 1 *****************************************************/ +#define USBD_TXDMA1_TX1_EOT (0x8000u) +#define USBD_TXDMA1_TX1_START (0x4000u) +#define USBD_TXDMA1_TX1_TSC (0x03FFu) +#define USBD_TXDMA1_TX1_TSC_SHIFT (0x0000u) + +/* Transmit DMA control 2 *****************************************************/ +#define USBD_TXDMA2_TX2_EOT (0x8000u) +#define USBD_TXDMA2_TX2_START (0x4000u) +#define USBD_TXDMA2_TX2_TSC (0x03FFu) + +/* Receive DMA control 0 ******************************************************/ +#define USBD_RXDMA0_RX0_STOP (0x8000u) +#define USBD_RXDMA0_RX0_TC (0x00FFu) + +/* Receive DMA control 1 ******************************************************/ +#define USBD_RXDMA1_RX10_STOP (0x8000u) +#define USBD_RXDMA1_RX1_TC (0x00FFu) + +/* Receive DMA control 2 ******************************************************/ +#define USBD_RXDMA2_RX2_STOP (0x8000u) +#define USBD_RXDMA2_RX2_TC (0x00FFu) + +/* Endpoint 0 Configuration ***************************************************/ +#define USBD_EP0_SIZE (0x3000u) +#define USBD_EP0_PTR (0x07FFu) + +/* Receive endpoint configurations... *****************************************/ +#define USBD_RX_EP_VALID (0x8000u) +#define USBD_RX_EP_SIZEDB (0x4000u) +#define USBD_RX_EP_SIZE (0x3000u) +#define USBD_RX_EP_ISO (0x0800u) +#define USBD_RX_EP_PTR (0x07FFu) + +/* Transmit endpoint configurations... ****************************************/ +#define USBD_TX_EP_VALID (0x8000u) +#define USBD_TX_EP_SIZEDB (0x4000u) +#define USBD_TX_EP_SIZE (0x3000u) +#define USBD_TX_EP_ISO (0x0800u) +#define USBD_TX_EP_PTR (0x07FFu) + +#define USBD_MAX_EP0_PTR (0xFFu) +#define USBD_EP_RX_MAX (15u) +#define USBD_EP_TX_MAX (15u) + +/** @brief Macro for setting a bit/s in a register (read, modify & write) */ +#define USBD_REG_BIT_SET(reg,bit) reg |= ((uint16)(bit)) +/** @brief Macro for clearing a bit/s in a register (read, modify & write) */ +#define USBD_REG_BIT_CLR(reg,bit) reg &= ((uint16)~((uint16)bit)) +/** @brief Macro for setting a bit/s in a register (write) */ +#define USBD_REG_SET_ONE(reg,value) reg = ((uint16)value) + +#endif /* __HW_USB_H__ */ Index: firmware/include/i2c.h =================================================================== diff -u --- firmware/include/i2c.h (revision 0) +++ firmware/include/i2c.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,266 @@ +/** @file I2C.h +* @brief I2C Driver Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __I2C_H__ +#define __I2C_H__ + +#include "reg_i2c.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/** @enum i2cMode +* @brief Alias names for i2c modes +* This enumeration is used to provide alias names for I2C modes: +*/ + +enum i2cMode +{ + I2C_FD_FORMAT = 0x0008U, /* Free Data Format */ + I2C_START_BYTE = 0x0010U, + I2C_RESET_OUT = 0x0020U, I2C_RESET_IN = 0x0000U, + I2C_DLOOPBACK = 0x0040U, + I2C_REPEATMODE = 0x0080U, /* In Master Mode only */ + I2C_10BIT_AMODE = 0x0100U, I2C_7BIT_AMODE = 0x0000U, + I2C_TRANSMITTER = 0x0200U, I2C_RECEIVER = 0x0000U, + I2C_MASTER = 0x0400U, I2C_SLAVE = 0x0000U, + I2C_STOP_COND = 0x0800U, /* In Master Mode only */ + I2C_START_COND = 0x2000U, /* In Master Mode only */ + I2C_FREE_RUN = 0x4000U, + I2C_NACK_MODE = 0x8000U +}; + + +/** @enum i2cBitCount +* @brief Alias names for i2c bit count +* This enumeration is used to provide alias names for I2C bit count: +*/ + +enum i2cBitCount +{ + I2C_2_BIT = 0x2U, + I2C_3_BIT = 0x3U, + I2C_4_BIT = 0x4U, + I2C_5_BIT = 0x5U, + I2C_6_BIT = 0x6U, + I2C_7_BIT = 0x7U, + I2C_8_BIT = 0x0U +}; + + + +/** @enum i2cIntFlags +* @brief Interrupt Flag Definitions +* +* Used with I2CEnableNotification, I2CDisableNotification +*/ +enum i2cIntFlags +{ + I2C_AL_INT = 0x0001U, /* arbitration lost */ + I2C_NACK_INT = 0x0002U, /* no acknowledgment */ + I2C_ARDY_INT = 0x0004U, /* access ready */ + I2C_RX_INT = 0x0008U, /* receive data ready */ + I2C_TX_INT = 0x0010U, /* transmit data ready */ + I2C_SCD_INT = 0x0020U, /* stop condition detect */ + I2C_AAS_INT = 0x0040U /* address as slave */ +}; + + +/** @enum i2cStatFlags +* @brief Interrupt Status Definitions +* +*/ +enum i2cStatFlags +{ + I2C_AL = 0x0001U, /* arbitration lost */ + I2C_NACK = 0x0002U, /* no acknowledgement */ + I2C_ARDY = 0x0004U, /* access ready */ + I2C_RX = 0x0008U, /* receive data ready */ + I2C_TX = 0x0010U, /* transmit data ready */ + I2C_SCD = 0x0020U, /* stop condition detect */ + I2C_AD0 = 0x0100U, /* address Zero Status */ + I2C_AAS = 0x0200U, /* address as slave */ + I2C_XSMT = 0x0400U, /* Transmit shift empty not */ + I2C_RXFULL = 0x0800U, /* receive full */ + I2C_BUSBUSY = 0x1000U, /* bus busy */ + I2C_NACKSNT = 0x2000U, /* No Ack Sent */ + I2C_SDIR = 0x4000U /* Slave Direction */ +}; + + +/** @enum i2cDMA +* @brief I2C DMA definitions +* +* Used before i2c transfer +*/ +enum i2cDMA +{ + I2C_TXDMA = 0x20U, + I2C_RXDMA = 0x10U +}; + +/* Configuration registers */ +typedef struct i2c_config_reg +{ + uint32 CONFIG_OAR; + uint32 CONFIG_IMR; + uint32 CONFIG_CLKL; + uint32 CONFIG_CLKH; + uint32 CONFIG_CNT; + uint32 CONFIG_SAR; + uint32 CONFIG_MDR; + uint32 CONFIG_EMDR; + uint32 CONFIG_PSC; + uint32 CONFIG_DMAC; + uint32 CONFIG_FUN; + uint32 CONFIG_DIR; + uint32 CONFIG_ODR; + uint32 CONFIG_PD; + uint32 CONFIG_PSL; +} i2c_config_reg_t; + + +/* Configuration registers initial value for I2C*/ +#define I2C_OAR_CONFIGVALUE 0x00000000U +#define I2C_IMR_CONFIGVALUE (((uint32)0U << 6U) \ + | ((uint32)0U << 5U) \ + | ((uint32)0U << 4U) \ + | ((uint32)0U << 3U) \ + | ((uint32)0U << 2U) \ + | ((uint32)0U << 1U) \ + | ((uint32)0U)) + +#define I2C_CLKL_CONFIGVALUE 34U +#define I2C_CLKH_CONFIGVALUE 34U +#define I2C_CNT_CONFIGVALUE 8U +#define I2C_SAR_CONFIGVALUE 0x000003FFU +#define I2C_MDR_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)((uint32)1U <<11U) \ + | (uint32)((uint32)1U <<10U) \ + | (uint32)((uint32)I2C_TRANSMITTER) \ + | (uint32)((uint32)I2C_7BIT_AMODE) \ + | (uint32)((uint32)0U << 7U) \ + | (uint32)((uint32)0U) \ + | (uint32)((uint32)I2C_8_BIT) \ + | (uint32)I2C_RESET_OUT) + +#define I2C_EMDR_CONFIGVALUE 0U +#define I2C_PSC_CONFIGVALUE 13U +#define I2C_DMAC_CONFIGVALUE 0x00000000U +#define I2C_FUN_CONFIGVALUE 0U +#define I2C_DIR_CONFIGVALUE ((uint32)((uint32)0U << 1U) \ + | (uint32)((uint32)0U)) +#define I2C_ODR_CONFIGVALUE ((uint32)((uint32)0U << 1U) \ + | (uint32)((uint32)0U)) +#define I2C_PD_CONFIGVALUE ((uint32)((uint32)0U << 1U) \ + | (uint32)((uint32)0U)) +#define I2C_PSL_CONFIGVALUE ((uint32)((uint32)1U << 1U) \ + | (uint32)((uint32)1U)) + + +/** + * @defgroup I2C I2C + * @brief Inter-Integrated Circuit Module. + * + * The I2C is a multi-master communication module providing an interface between the Texas Instruments (TI) microcontroller + * and devices compliant with Philips Semiconductor I2C-bus specification version 2.1 and connected by an I2Cbus. + * This module will support any slave or master I2C compatible device. + * + * Related Files + * - reg_i2c.h + * - i2c.h + * - i2c.c + * @addtogroup I2C + * @{ + */ + +/* I2C Interface Functions */ +void i2cInit(void); +void i2cSetOwnAdd(i2cBASE_t *i2c, uint32 oadd); +void i2cSetSlaveAdd(i2cBASE_t *i2c, uint32 sadd); +void i2cSetBaudrate(i2cBASE_t *i2c, uint32 baud); +uint32 i2cIsTxReady(i2cBASE_t *i2c); +void i2cSendByte(i2cBASE_t *i2c, uint8 byte); +void i2cSend(i2cBASE_t *i2c, uint32 length, uint8 * data); +uint32 i2cIsRxReady(i2cBASE_t *i2c); +uint32 i2cIsStopDetected(i2cBASE_t *i2c); +void i2cClearSCD(i2cBASE_t *i2c); +uint32 i2cRxError(i2cBASE_t *i2c); +uint8 i2cReceiveByte(i2cBASE_t *i2c); +void i2cReceive(i2cBASE_t *i2c, uint32 length, uint8 * data); +void i2cEnableNotification(i2cBASE_t *i2c, uint32 flags); +void i2cDisableNotification(i2cBASE_t *i2c, uint32 flags); +void i2cSetStart(i2cBASE_t *i2c); +void i2cSetStop(i2cBASE_t *i2c); +void i2cSetCount(i2cBASE_t *i2c ,uint32 cnt); +void i2cEnableLoopback(i2cBASE_t *i2c); +void i2cDisableLoopback(i2cBASE_t *i2c); +void i2cSetMode(i2cBASE_t *i2c, uint32 mode); +void i2cGetConfigValue(i2c_config_reg_t *config_reg, config_value_type_t type); +void i2cSetDirection(i2cBASE_t *i2c, uint32 dir); +bool i2cIsMasterReady(i2cBASE_t *i2c); +bool i2cIsBusBusy(i2cBASE_t *i2c); + +/** @fn void i2cNotification(i2cBASE_t *i2c, uint32 flags) +* @brief Interrupt callback +* @param[in] i2c - I2C module base address +* @param[in] flags - copy of error interrupt flags +* +* This is a callback that is provided by the application and is called apon +* an interrupt. The parameter passed to the callback is a copy of the +* interrupt flag register. +*/ +void i2cNotification(i2cBASE_t *i2c, uint32 flags); + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/**@}*/ +#ifdef __cplusplus +} +#endif /*extern "C" */ + +#endif Index: firmware/include/lin.h =================================================================== diff -u --- firmware/include/lin.h (revision 0) +++ firmware/include/lin.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,333 @@ +/** @file lin.h +* @brief LIN Driver Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +#ifndef __LIN_H__ +#define __LIN_H__ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "reg_lin.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @def LIN_BREAK_INT +* @brief Alias for break detect interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_BREAK_INT 0x00000001U + + +/** @def LIN_WAKEUP_INT +* @brief Alias for wakeup interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_WAKEUP_INT 0x00000002U + + +/** @def LIN_TO_INT +* @brief Alias for time out interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_TO_INT 0x00000010U + + +/** @def LIN_TOAWUS_INT +* @brief Alias for time out after wakeup signal interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_TOAWUS_INT 0x00000040U + + +/** @def LIN_TOA3WUS_INT +* @brief Alias for time out after 3 wakeup signals interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_TOA3WUS_INT 0x00000080U + + +/** @def LIN_TX_READY +* @brief Alias for transmit buffer ready flag +* +* Used with linIsTxReady. +*/ +#define LIN_TX_READY 0x00000100U + + +/** @def LIN_RX_INT +* @brief Alias for receive buffer ready interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_RX_INT 0x00000200U + + +/** @def LIN_ID_INT +* @brief Alias for received matching identifier interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_ID_INT 0x00002000U + + +/** @def LIN_PE_INT +* @brief Alias for parity error interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_PE_INT 0x01000000U + + +/** @def LIN_OE_INT +* @brief Alias for overrun error interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_OE_INT 0x02000000U + + +/** @def LIN_FE_INT +* @brief Alias for framing error interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_FE_INT 0x04000000U + + +/** @def LIN_NRE_INT +* @brief Alias for no response error interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_NRE_INT 0x08000000U + + +/** @def LIN_ISFE_INT +* @brief Alias for inconsistent sync field error interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_ISFE_INT 0x10000000U + + +/** @def LIN_CE_INT +* @brief Alias for checksum error interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_CE_INT 0x20000000U + + +/** @def LIN_PBE_INT +* @brief Alias for physical bus error interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_PBE_INT 0x40000000U + + +/** @def LIN_BE_INT +* @brief Alias for bit error interrupt flag +* +* Used with linEnableNotification, linDisableNotification. +*/ +#define LIN_BE_INT 0x80000000U + + +/** @struct linBase +* @brief LIN Register Definition +* +* This structure is used to access the LIN module registers. +*/ +/** @typedef linBASE_t +* @brief LIN Register Frame Type Definition +* +* This type is used to access the LIN Registers. +*/ + +enum linPinSelect +{ + PIN_LIN_TX = 4U, + PIN_LIN_RX = 2U +}; + +/* Configuration registers */ +typedef struct lin_config_reg +{ + uint32 CONFIG_GCR0; + uint32 CONFIG_GCR1; + uint32 CONFIG_GCR2; + uint32 CONFIG_SETINT; + uint32 CONFIG_SETINTLVL; + uint32 CONFIG_FORMAT; + uint32 CONFIG_BRSR; + uint32 CONFIG_FUN; + uint32 CONFIG_DIR; + uint32 CONFIG_ODR; + uint32 CONFIG_PD; + uint32 CONFIG_PSL; + uint32 CONFIG_COMP; + uint32 CONFIG_MASK; + uint32 CONFIG_MBRSR; +} lin_config_reg_t; + +/* Configuration registers initial value for LIN*/ +#define LIN_GCR0_CONFIGVALUE 0x00000001U +#define LIN_GCR1_CONFIGVALUE (0x03000CC0U \ + | (uint32)((uint32)1U << 12U) \ + | (uint32)((uint32)0U << 2U)\ + | (uint32)((uint32)1U << 5U)) +#define LIN_GCR2_CONFIGVALUE 0x00000000U +#define LIN_SETINTLVL_CONFIGVALUE (0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U) + +#define LIN_SETINT_CONFIGVALUE (0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U) + +#define LIN_FORMAT_CONFIGVALUE ((uint32)((uint32)(8U - 1U) << 16U)) +#define LIN_BRSR_CONFIGVALUE (343U) +#define LIN_COMP_CONFIGVALUE ((uint32)((uint32)(1U - 1U) << 8U) | (13U - 13U)) +#define LIN_MASK_CONFIGVALUE ((uint32)((uint32)0xFFU << 16U) | 0xFFU) +#define LIN_MBRSR_CONFIGVALUE (4954U) +#define LIN_FUN_CONFIGVALUE (4U | 2U | 0U) +#define LIN_DIR_CONFIGVALUE (0U | 0U | 0U) +#define LIN_ODR_CONFIGVALUE (0U | 0U | 0U) +#define LIN_PD_CONFIGVALUE (0U | 0U | 0U) +#define LIN_PSL_CONFIGVALUE (4U | 2U | 1U) + +/** + * @defgroup LIN LIN + * @brief Local Interconnect Network Module. + * + * The LIN standard is based on the SCI (UART) serial data link format. The communication concept is + * single-master/multiple-slave with a message identification for multi-cast transmission between any network + * nodes. + * + * Related Files + * - reg_lin.h + * - lin.h + * - lin.c + * @addtogroup LIN + * @{ + */ + +/* LIN Interface Functions */ +void linInit(void); +void linSetFunctional(linBASE_t *lin, uint32 port); +void linSendHeader(linBASE_t *lin, uint8 identifier); +void linSendWakupSignal(linBASE_t *lin); +void linEnterSleep(linBASE_t *lin); +void linSoftwareReset(linBASE_t *lin); +uint32 linIsTxReady(linBASE_t *lin); +void linSetLength(linBASE_t *lin, uint32 length); +void linSend(linBASE_t *lin, uint8 * data); +uint32 linIsRxReady(linBASE_t *lin); +uint32 linTxRxError(linBASE_t *lin); +uint32 linGetIdentifier(linBASE_t *lin); +void linGetData(linBASE_t *lin, uint8 * const data); +void linEnableNotification(linBASE_t *lin, uint32 flags); +void linDisableNotification(linBASE_t *lin, uint32 flags); +void linEnableLoopback(linBASE_t *lin, loopBackType_t Loopbacktype); +void linDisableLoopback(linBASE_t *lin); +void linGetConfigValue(lin_config_reg_t *config_reg, config_value_type_t type); +uint32 linGetStatusFlag(linBASE_t *lin); +void linClearStatusFlag(linBASE_t *lin, uint32 flags); + +/** @fn void linNotification(linBASE_t *lin, uint32 flags) +* @brief Interrupt callback +* @param[in] lin - lin module base address +* @param[in] flags - copy of error interrupt flags +* +* This is a callback that is provided by the application and is called upon +* an interrupt. The parameter passed to the callback is a copy of the +* interrupt flag register. +*/ +void linNotification(linBASE_t *lin, uint32 flags); + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/**@}*/ +#ifdef __cplusplus +} +#endif + +#endif Index: firmware/include/mdio.h =================================================================== diff -u --- firmware/include/mdio.h (revision 0) +++ firmware/include/mdio.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,92 @@ +/** + * \file mdio.h + * + * \brief MDIO APIs and macros. + * + * This file contains the driver API prototypes and macro definitions. + */ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __MDIO_H__ +#define __MDIO_H__ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "sys_common.h" +#include "system.h" +#include "hw_mdio.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/* MDIO input and output frequencies in Hz */ +#define MDIO_FREQ_INPUT ((uint32)(VCLK3_FREQ * 1000000.00F)) +#define MDIO_FREQ_OUTPUT 1000000U +/*****************************************************************************/ + +/** + * @addtogroup EMACMDIO + * @{ + */ +/* +** Prototypes for the APIs +*/ +extern uint32 MDIOPhyAliveStatusGet(uint32 baseAddr); +extern uint32 MDIOPhyLinkStatusGet(uint32 baseAddr); +extern void MDIOInit(uint32 baseAddr, uint32 mdioInputFreq, + uint32 mdioOutputFreq); +extern boolean MDIOPhyRegRead(uint32 baseAddr, uint32 phyAddr, + uint32 regNum, volatile uint16 * dataPtr); +extern void MDIOPhyRegWrite(uint32 baseAddr, uint32 phyAddr, + uint32 regNum, uint16 RegVal); +extern void MDIOEnable(uint32 baseAddr); +extern void MDIODisable(uint32 baseAddr); + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +#ifdef __cplusplus +} +#endif + +/**@}*/ +#endif /* __MDIO_H__ */ Index: firmware/include/mibspi.h =================================================================== diff -u --- firmware/include/mibspi.h (revision 0) +++ firmware/include/mibspi.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,349 @@ +/** @file mibspi.h +* @brief MIBSPI Driver Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +#ifndef __MIBSPI_H__ +#define __MIBSPI_H__ + +#include "reg_mibspi.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/** @enum triggerEvent +* @brief Transfer Group Trigger Event +*/ +enum triggerEvent +{ + TRG_NEVER = 0U, + TRG_RISING = 1U, + TRG_FALLING = 2U, + TRG_BOTH = 3U, + TRG_HIGH = 5U, + TRG_LOW = 6U, + TRG_ALWAYS = 7U +}; + +/** @enum triggerSource +* @brief Transfer Group Trigger Source +*/ +enum triggerSource +{ + TRG_DISABLED, + TRG_GIOA0, + TRG_GIOA1, + TRG_GIOA2, + TRG_GIOA3, + TRG_GIOA4, + TRG_GIOA5, + TRG_GIOA6, + TRG_GIOA7, + TRG_HET1_8, + TRG_HET1_10, + TRG_HET1_12, + TRG_HET1_14, + TRG_HET1_16, + TRG_HET1_18, + TRG_TICK +}; + + +/** @enum mibspiPinSelect +* @brief mibspi Pin Select +*/ +enum mibspiPinSelect +{ + PIN_CS0 = 0U, + PIN_CS1 = 1U, + PIN_CS2 = 2U, + PIN_CS3 = 3U, + PIN_CS4 = 4U, + PIN_CS5 = 5U, + PIN_CS6 = 6U, + PIN_CS7 = 7U, + PIN_ENA = 8U, + PIN_CLK = 9U, + PIN_SIMO = 10U, + PIN_SOMI = 11U, + PIN_SIMO_1 = 17U, + PIN_SIMO_2 = 18U, + PIN_SIMO_3 = 19U, + PIN_SIMO_4 = 20U, + PIN_SIMO_5 = 21U, + PIN_SIMO_6 = 22U, + PIN_SIMO_7 = 23U, + PIN_SOMI_1 = 25U, + PIN_SOMI_2 = 26U, + PIN_SOMI_3 = 27U, + PIN_SOMI_4 = 28U, + PIN_SOMI_5 = 29U, + PIN_SOMI_6 = 30U, + PIN_SOMI_7 = 31U +}; + + +/** @enum chipSelect +* @brief Transfer Group Chip Select +*/ +enum chipSelect +{ + CS_NONE = 0xFFU, + CS_0 = 0xFEU, + CS_1 = 0xFDU, + CS_2 = 0xFBU, + CS_3 = 0xF7U, + CS_4 = 0xEFU, + CS_5 = 0xDFU, + CS_6 = 0xBFU, + CS_7 = 0x7FU +}; + +/** @typedef mibspiPmode_t +* @brief Mibspi Parellel mode Type Definition +* +* This type is used to represent Mibspi Parellel mode. +*/ +typedef enum mibspiPmode +{ + PMODE_NORMAL = 0x0U, + PMODE_2_DATALINE = 0x1U, + PMODE_4_DATALINE = 0x2U, + PMODE_8_DATALINE = 0x3U +}mibspiPmode_t; + +/** @typedef mibspiDFMT_t +* @brief Mibspi Data format selection Type Definition +* +* This type is used to represent Mibspi Data format selection. +*/ +typedef enum mibspiDFMT +{ + DATA_FORMAT0 = 0x0U, + DATA_FORMAT1 = 0x1U, + DATA_FORMAT2 = 0x2U, + DATA_FORMAT3 = 0x3U +}mibspiDFMT_t; + +typedef struct mibspi_config_reg +{ + uint32 CONFIG_GCR1; + uint32 CONFIG_INT0; + uint32 CONFIG_LVL; + uint32 CONFIG_PCFUN; + uint32 CONFIG_PCDIR; + uint32 CONFIG_PCPDR; + uint32 CONFIG_PCDIS; + uint32 CONFIG_PCPSL; + uint32 CONFIG_DELAY; + uint32 CONFIG_FMT0; + uint32 CONFIG_FMT1; + uint32 CONFIG_FMT2; + uint32 CONFIG_FMT3; + uint32 CONFIG_MIBSPIE; + uint32 CONFIG_LTGPEND; + uint32 CONFIG_TGCTRL[8U]; + uint32 CONFIG_UERRCTRL; +}mibspi_config_reg_t; + +#define MIBSPI1_GCR1_CONFIGVALUE (0x01000000U | (uint32)((uint32)1U << 1U) | 1U) +#define MIBSPI1_INT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) +#define MIBSPI1_LVL_CONFIGVALUE ((uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) + +#define MIBSPI1_PCFUN_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U) | (uint32)((uint32)1U << 17U) | (uint32)((uint32)1U << 25U)) +#define MIBSPI1_PCDIR_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)1U << 4U) | (uint32)((uint32)1U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 25U)) +#define MIBSPI1_PCPDR_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 25U)) +#define MIBSPI1_PCDIS_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 25U)) +#define MIBSPI1_PCPSL_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)1U << 4U) | (uint32)((uint32)1U << 5U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U) | (uint32)((uint32)1U << 17U) | (uint32)((uint32)1U << 25U)) + +#define MIBSPI1_DELAY_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 0U)) + +#define MIBSPI1_FMT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) +#define MIBSPI1_FMT1_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) +#define MIBSPI1_FMT2_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) +#define MIBSPI1_FMT3_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) + +#define MIBSPI1_MIBSPIE_CONFIGVALUE 1U +#define MIBSPI1_LTGPEND_CONFIGVALUE ((uint32)((uint32)((8U+0U+0U+0U+0U+0U+0U+0U)-1U) << 8U)) + +#define MIBSPI1_TGCTRL0_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)0U << 8U))) +#define MIBSPI1_TGCTRL1_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)8U << 8U))) +#define MIBSPI1_TGCTRL2_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U) << 8U))) +#define MIBSPI1_TGCTRL3_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U) << 8U))) +#define MIBSPI1_TGCTRL4_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U) << 8U))) +#define MIBSPI1_TGCTRL5_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U+0U) << 8U))) +#define MIBSPI1_TGCTRL6_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U+0U+0U) << 8U))) +#define MIBSPI1_TGCTRL7_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U+0U+0U+0U) << 8U))) + +#define MIBSPI1_UERRCTRL_CONFIGVALUE (0x00000005U) + + +#define MIBSPI3_GCR1_CONFIGVALUE (0x01000000U | (uint32)((uint32)1U << 1U) | 1U) +#define MIBSPI3_INT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) +#define MIBSPI3_LVL_CONFIGVALUE ((uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) + +#define MIBSPI3_PCFUN_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U)) +#define MIBSPI3_PCDIR_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)1U << 4U) | (uint32)((uint32)1U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U)) +#define MIBSPI3_PCPDR_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U)) +#define MIBSPI3_PCDIS_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U)) +#define MIBSPI3_PCPSL_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)1U << 4U) | (uint32)((uint32)1U << 5U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U)) + +#define MIBSPI3_DELAY_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 0U)) + +#define MIBSPI3_FMT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) +#define MIBSPI3_FMT1_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) +#define MIBSPI3_FMT2_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) +#define MIBSPI3_FMT3_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) + +#define MIBSPI3_MIBSPIE_CONFIGVALUE 1U +#define MIBSPI3_LTGPEND_CONFIGVALUE ((uint32)((uint32)((8U+0U+0U+0U+0U+0U+0U+0U)-1U) << 8U)) + +#define MIBSPI3_TGCTRL0_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)0U << 8U))) +#define MIBSPI3_TGCTRL1_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)8U << 8U))) +#define MIBSPI3_TGCTRL2_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U) << 8U))) +#define MIBSPI3_TGCTRL3_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U) << 8U))) +#define MIBSPI3_TGCTRL4_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U) << 8U))) +#define MIBSPI3_TGCTRL5_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U+0U) << 8U))) +#define MIBSPI3_TGCTRL6_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U+0U+0U) << 8U))) +#define MIBSPI3_TGCTRL7_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U+0U+0U+0U) << 8U))) + +#define MIBSPI3_UERRCTRL_CONFIGVALUE (0x00000005U) + +#define MIBSPI5_GCR1_CONFIGVALUE (0x01000000U | (uint32)((uint32)1U << 1U) | 1U) +#define MIBSPI5_INT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) +#define MIBSPI5_LVL_CONFIGVALUE ((uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) + +#define MIBSPI5_PCFUN_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U) | (uint32)((uint32)1U << 17U) | (uint32)((uint32)1U << 18U) | (uint32)((uint32)1U << 19U) | (uint32)((uint32)1U << 25U) | (uint32)((uint32)1U << 26U) | (uint32)((uint32)1U << 27U)) +#define MIBSPI5_PCDIR_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 18U) | (uint32)((uint32)0U << 19U) | (uint32)((uint32)0U << 25U) | (uint32)((uint32)0U << 26U) | (uint32)((uint32)0U << 27U)) +#define MIBSPI5_PCPDR_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 18U) | (uint32)((uint32)0U << 19U) | (uint32)((uint32)0U << 25U) | (uint32)((uint32)0U << 26U) | (uint32)((uint32)0U << 27U)) +#define MIBSPI5_PCDIS_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 18U) | (uint32)((uint32)0U << 19U) | (uint32)((uint32)0U << 25U) | (uint32)((uint32)0U << 26U) | (uint32)((uint32)0U << 27U)) +#define MIBSPI5_PCPSL_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U) | (uint32)((uint32)1U << 17U) | (uint32)((uint32)1U << 18U) | (uint32)((uint32)1U << 19U) | (uint32)((uint32)1U << 25U) | (uint32)((uint32)1U << 26U) | (uint32)((uint32)1U << 27U)) + +#define MIBSPI5_DELAY_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 0U)) + +#define MIBSPI5_FMT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) +#define MIBSPI5_FMT1_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) +#define MIBSPI5_FMT2_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) +#define MIBSPI5_FMT3_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) + +#define MIBSPI5_MIBSPIE_CONFIGVALUE 1U +#define MIBSPI5_LTGPEND_CONFIGVALUE ((uint32)((uint32)((8U+0U+0U+0U+0U+0U+0U+0U)-1U) << 8U)) + +#define MIBSPI5_TGCTRL0_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)0U << 8U))) +#define MIBSPI5_TGCTRL1_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)8U << 8U))) +#define MIBSPI5_TGCTRL2_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U) << 8U))) +#define MIBSPI5_TGCTRL3_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U) << 8U))) +#define MIBSPI5_TGCTRL4_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U) << 8U))) +#define MIBSPI5_TGCTRL5_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U+0U) << 8U))) +#define MIBSPI5_TGCTRL6_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U+0U+0U) << 8U))) +#define MIBSPI5_TGCTRL7_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U+0U+0U+0U) << 8U))) + +#define MIBSPI5_UERRCTRL_CONFIGVALUE (0x00000005U) + +/** + * @defgroup MIBSPI MIBSPI + * @brief Multi-Buffered Serial Peripheral Interface Module. + * + * The MibSPI/MibSPIP is a high-speed synchronous serial input/output port that allows a serial bit stream of + * programmed length (2 to 16 bits) to be shifted in and out of the device at a programmed bit-transfer rate. + * The MibSPI has a programmable buffer memory that enables programmed transmission to be completed + * without CPU intervention + * + * Related Files + * - reg_mibspi.h + * - mibspi.h + * - mibspi.c + * @addtogroup MIBSPI + * @{ + */ + +/* MIBSPI Interface Functions */ +void mibspiInit(void); +void mibspiSetFunctional(mibspiBASE_t *mibspi, uint32 port); +void mibspiSetData(mibspiBASE_t *mibspi, uint32 group, uint16 * data); +uint32 mibspiGetData(mibspiBASE_t *mibspi, uint32 group, uint16 * data); +void mibspiTransfer(mibspiBASE_t *mibspi, uint32 group); +boolean mibspiIsTransferComplete(mibspiBASE_t *mibspi, uint32 group); +void mibspiEnableGroupNotification(mibspiBASE_t *mibspi, uint32 group, uint32 level); +void mibspiDisableGroupNotification(mibspiBASE_t *mibspi, uint32 group); +void mibspiEnableLoopback(mibspiBASE_t *mibspi, loopBackType_t Loopbacktype); +void mibspiDisableLoopback(mibspiBASE_t *mibspi); +void mibspiPmodeSet(mibspiBASE_t *mibspi, mibspiPmode_t Pmode, mibspiDFMT_t DFMT); +void mibspi1GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type); +void mibspi3GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type); +void mibspi5GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type); + +/** @fn void mibspiNotification(mibspiBASE_t *mibspi, uint32 flags) +* @brief Error interrupt callback +* @param[in] mibspi - mibSpi module base address +* @param[in] flags - Copy of error interrupt flags +* +* This is a error callback that is provided by the application and is call upon +* an error interrupt. The paramer passed to the callback is a copy of the error +* interrupt flag register. +*/ +void mibspiNotification(mibspiBASE_t *mibspi, uint32 flags); + + +/** @fn void mibspiGroupNotification(mibspiBASE_t *mibspi, uint32 group) +* @brief Transfer complete notification callback +* @param[in] mibspi - mibSpi module base address +* @param[in] group - Transfer group +* +* This is a callback function provided by the application. It is call when +* a transfer is complete. The parameter is the transfer group that triggered +* the interrupt. +*/ +void mibspiGroupNotification(mibspiBASE_t *mibspi, uint32 group); + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/**@}*/ +#ifdef __cplusplus +} +#endif + +#endif Index: firmware/include/phy_dp83640.h =================================================================== diff -u --- firmware/include/phy_dp83640.h (revision 0) +++ firmware/include/phy_dp83640.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,132 @@ +/* + * DP83640.h + */ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef _PHY_DP83640_H_ +#define _PHY_DP83640_H_ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @enum PHY_timestamp +* @brief Alias names for transmit and receive timestamps +* This enumeration is used to provide alias names for getting the transmit and receive timestamps from the Dp83640GetTimeStamp API. +*/ +typedef enum phyTimeStamp +{ + Txtimestamp = 1, /*Transmit Timestamp*/ + Rxtimestamp = 2 /*Receive Timestamp */ +}phyTimeStamp_t; +/* PHY register offset definitions */ +#define PHY_BCR (0u) +#define PHY_BSR (1u) +#define PHY_ID1 (2u) +#define PHY_ID2 (3u) +#define PHY_AUTONEG_ADV (4u) +#define PHY_LINK_PARTNER_ABLTY (5u) +#define PHY_LINK_PARTNER_SPD (16u) +#define PHY_TXTS (28u) +#define PHY_RXTS (29u) + +/* PHY status definitions */ +#define PHY_ID_SHIFT (16u) +#define PHY_SOFTRESET (0x8000U) +#define PHY_AUTONEG_ENABLE (0x1000u) +#define PHY_AUTONEG_RESTART (0x0200u) +#define PHY_AUTONEG_COMPLETE (0x0020u) +#define PHY_AUTONEG_INCOMPLETE (0x0000u) +#define PHY_AUTONEG_STATUS (0x0020u) +#define PHY_AUTONEG_ABLE (0x0008u) +#define PHY_LPBK_ENABLE (0x4000u) +#define PHY_LINK_STATUS (0x0004u) +#define PHY_INVALID_TYPE (0x0u) + + +/* PHY ID. The LSB nibble will vary between different phy revisions */ +#define DP83640_PHY_ID (0x0007C0F0u) +#define DP83640_PHY_ID_REV_MASK (0x0000000Fu) + +/* Pause operations */ +#define DP83640_PAUSE_NIL (0x0000u) +#define DP83640_PAUSE_SYM (0x0400u) +#define DP83640_PAUSE_ASYM (0x0800u) +#define DP83640_PAUSE_BOTH_SYM_ASYM (0x0C00u) + +/* 100 Base TX Full Duplex capablity */ +#define DP83640_100BTX_HD (0x0000u) +#define DP83640_100BTX_FD (0x0100u) + +/* 100 Base TX capability */ +#define DP83640_NO_100BTX (0x0000u) +#define DP83640_100BTX (0x0080u) + +/* 10 BaseT duplex capabilities */ +#define DP83640_10BT_HD (0x0000u) +#define DP83640_10BT_FD (0x0040u) + +/* 10 BaseT ability*/ +#define DP83640_NO_10BT (0x0000u) +#define DP83640_10BT (0x0020u) + +/************************************************************************** + API function Prototypes +***************************************************************************/ +extern uint32 Dp83640IDGet(uint32 mdioBaseAddr, uint32 phyAddr); +extern void Dp83640Reset(uint32 mdioBaseAddr, uint32 phyAddr); +extern boolean Dp83640AutoNegotiate(uint32 mdioBaseAddr, uint32 phyAddr, uint16 advVal); +extern boolean Dp83640PartnerAbilityGet(uint32 mdioBaseAddr, uint32 phyAddr,uint16 *ptnerAblty); +extern boolean Dp83640LinkStatusGet(uint32 mdioBaseAddr, uint32 phyAddr,volatile uint32 retries); +extern uint64 Dp83640GetTimeStamp(uint32 mdioBaseAddr, uint32 phyAddr, phyTimeStamp_t type); +extern void Dp83640EnableLoopback(uint32 mdioBaseAddr, uint32 phyAddr); +extern void Dp83640DisableLoopback(uint32 mdioBaseAddr, uint32 phyAddr); +extern boolean Dp83640PartnerSpdGet(uint32 mdioBaseAddr, uint32 phyAddr, uint16 *ptnerAblty); + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +#ifdef __cplusplus +} +#endif +#endif Index: firmware/include/pinmux.h =================================================================== diff -u --- firmware/include/pinmux.h (revision 0) +++ firmware/include/pinmux.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,575 @@ +/** @file pinmux.h +* @brief PINMUX Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __PINMUX_H__ +#define __PINMUX_H__ + +#include "reg_pinmux.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define PINMUX_PIN_1_SHIFT 0U +#define PINMUX_PIN_2_SHIFT 8U +#define PINMUX_PIN_3_SHIFT 16U +#define PINMUX_PIN_4_SHIFT 24U +#define PINMUX_PIN_5_SHIFT 0U +#define PINMUX_PIN_6_SHIFT 8U +#define PINMUX_PIN_9_SHIFT 0U +#define PINMUX_PIN_14_SHIFT 24U +#define PINMUX_PIN_15_SHIFT 8U +#define PINMUX_PIN_16_SHIFT 16U +#define PINMUX_PIN_22_SHIFT 0U +#define PINMUX_PIN_23_SHIFT 16U +#define PINMUX_PIN_24_SHIFT 24U +#define PINMUX_PIN_25_SHIFT 0U +#define PINMUX_PIN_30_SHIFT 8U +#define PINMUX_PIN_31_SHIFT 16U +#define PINMUX_PIN_32_SHIFT 0U +#define PINMUX_PIN_33_SHIFT 0U +#define PINMUX_PIN_35_SHIFT 16U +#define PINMUX_PIN_36_SHIFT 0U +#define PINMUX_PIN_37_SHIFT 8U +#define PINMUX_PIN_38_SHIFT 16U +#define PINMUX_PIN_39_SHIFT 0U +#define PINMUX_PIN_40_SHIFT 8U +#define PINMUX_PIN_41_SHIFT 16U +#define PINMUX_PIN_51_SHIFT 8U +#define PINMUX_PIN_52_SHIFT 16U +#define PINMUX_PIN_53_SHIFT 24U +#define PINMUX_PIN_54_SHIFT 8U +#define PINMUX_PIN_55_SHIFT 16U +#define PINMUX_PIN_86_SHIFT 0U +#define PINMUX_PIN_91_SHIFT 24U +#define PINMUX_PIN_92_SHIFT 0U +#define PINMUX_PIN_96_SHIFT 16U +#define PINMUX_PIN_97_SHIFT 24U +#define PINMUX_PIN_98_SHIFT 0U +#define PINMUX_PIN_99_SHIFT 8U +#define PINMUX_PIN_100_SHIFT 16U +#define PINMUX_PIN_105_SHIFT 24U +#define PINMUX_PIN_106_SHIFT 0U +#define PINMUX_PIN_107_SHIFT 8U +#define PINMUX_PIN_118_SHIFT 0U +#define PINMUX_PIN_124_SHIFT 16U +#define PINMUX_PIN_125_SHIFT 8U +#define PINMUX_PIN_126_SHIFT 24U +#define PINMUX_PIN_127_SHIFT 8U +#define PINMUX_PIN_130_SHIFT 16U +#define PINMUX_PIN_133_SHIFT 8U +#define PINMUX_PIN_139_SHIFT 0U +#define PINMUX_PIN_140_SHIFT 8U +#define PINMUX_PIN_141_SHIFT 16U + + +#define PINMUX_GATE_EMIF_CLK_SHIFT 8U +#define PINMUX_GIOB_DISABLE_HET2_SHIFT 16U +#define PINMUX_ALT_ADC_TRIGGER_SHIFT 0U +#define PINMUX_ETHERNET_SHIFT 24U +#define PINMUX_ETPWM1_SHIFT 0U +#define PINMUX_ETPWM2_SHIFT 8U +#define PINMUX_ETPWM3_SHIFT 16U +#define PINMUX_ETPWM4_SHIFT 24U +#define PINMUX_ETPWM5_SHIFT 0U +#define PINMUX_ETPWM6_SHIFT 8U +#define PINMUX_ETPWM7_SHIFT 16U +#define PINMUX_ETPWM_TIME_BASE_SYNC_SHIFT 24U +#define PINMUX_ETPWM_TBCLK_SYNC_SHIFT 0U +#define PINMUX_TZ1_SHIFT 16U +#define PINMUX_TZ2_SHIFT 24U +#define PINMUX_TZ3_SHIFT 0U +#define PINMUX_EPWM1SYNCI_SHIFT 8U + +#define PINMUX_PIN_1_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_1_SHIFT)) +#define PINMUX_PIN_2_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_2_SHIFT)) +#define PINMUX_PIN_3_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_3_SHIFT)) +#define PINMUX_PIN_4_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_4_SHIFT)) +#define PINMUX_PIN_5_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_5_SHIFT)) +#define PINMUX_PIN_6_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_6_SHIFT)) +#define PINMUX_PIN_9_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_9_SHIFT)) +#define PINMUX_PIN_14_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_14_SHIFT)) +#define PINMUX_PIN_15_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_15_SHIFT)) +#define PINMUX_PIN_16_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_16_SHIFT)) +#define PINMUX_PIN_22_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_22_SHIFT)) +#define PINMUX_PIN_23_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_23_SHIFT)) +#define PINMUX_PIN_24_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_24_SHIFT)) +#define PINMUX_PIN_25_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_25_SHIFT)) +#define PINMUX_PIN_30_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_30_SHIFT)) +#define PINMUX_PIN_31_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_31_SHIFT)) +#define PINMUX_PIN_32_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_32_SHIFT)) +#define PINMUX_PIN_33_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_33_SHIFT)) +#define PINMUX_PIN_35_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_35_SHIFT)) +#define PINMUX_PIN_36_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_36_SHIFT)) +#define PINMUX_PIN_37_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_37_SHIFT)) +#define PINMUX_PIN_38_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_38_SHIFT)) +#define PINMUX_PIN_39_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_39_SHIFT)) +#define PINMUX_PIN_40_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_40_SHIFT)) +#define PINMUX_PIN_41_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_41_SHIFT)) +#define PINMUX_PIN_51_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_51_SHIFT)) +#define PINMUX_PIN_52_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_52_SHIFT)) +#define PINMUX_PIN_53_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_53_SHIFT)) +#define PINMUX_PIN_54_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_54_SHIFT)) +#define PINMUX_PIN_55_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_55_SHIFT)) +#define PINMUX_PIN_86_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_86_SHIFT)) +#define PINMUX_PIN_91_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_91_SHIFT)) +#define PINMUX_PIN_92_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_92_SHIFT)) +#define PINMUX_PIN_96_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_96_SHIFT)) +#define PINMUX_PIN_97_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_97_SHIFT)) +#define PINMUX_PIN_98_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_98_SHIFT)) +#define PINMUX_PIN_99_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_99_SHIFT)) +#define PINMUX_PIN_100_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_100_SHIFT)) +#define PINMUX_PIN_105_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_105_SHIFT)) +#define PINMUX_PIN_106_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_106_SHIFT)) +#define PINMUX_PIN_107_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_107_SHIFT)) +#define PINMUX_PIN_118_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_118_SHIFT)) +#define PINMUX_PIN_124_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_124_SHIFT)) +#define PINMUX_PIN_125_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_125_SHIFT)) +#define PINMUX_PIN_126_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_126_SHIFT)) +#define PINMUX_PIN_127_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_127_SHIFT)) +#define PINMUX_PIN_130_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_130_SHIFT)) +#define PINMUX_PIN_133_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_133_SHIFT)) +#define PINMUX_PIN_139_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_139_SHIFT)) +#define PINMUX_PIN_140_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_140_SHIFT)) +#define PINMUX_PIN_141_MASK (~(uint32)((uint32)0xFFU << PINMUX_PIN_141_SHIFT)) + +#define PINMUX_GATE_EMIF_CLK_MASK (~(uint32)((uint32)0xFFU << PINMUX_GATE_EMIF_CLK_SHIFT)) +#define PINMUX_GIOB_DISABLE_HET2_MASK (~(uint32)((uint32)0xFFU << PINMUX_GIOB_DISABLE_HET2_SHIFT)) +#define PINMUX_ALT_ADC_TRIGGER_MASK (~(uint32)((uint32)0xFFU << PINMUX_ALT_ADC_TRIGGER_SHIFT)) +#define PINMUX_ETHERNET_MASK (~(uint32)((uint32)0xFFU << PINMUX_ETHERNET_SHIFT)) + + + +#define PINMUX_ETPWM1_MASK (~(uint32)((uint32)0xFFU << PINMUX_ETPWM1_SHIFT)) +#define PINMUX_ETPWM2_MASK (~(uint32)((uint32)0xFFU << PINMUX_ETPWM2_SHIFT)) +#define PINMUX_ETPWM3_MASK (~(uint32)((uint32)0xFFU << PINMUX_ETPWM3_SHIFT)) +#define PINMUX_ETPWM4_MASK (~(uint32)((uint32)0xFFU << PINMUX_ETPWM4_SHIFT)) +#define PINMUX_ETPWM5_MASK (~(uint32)((uint32)0xFFU << PINMUX_ETPWM5_SHIFT)) +#define PINMUX_ETPWM6_MASK (~(uint32)((uint32)0xFFU << PINMUX_ETPWM6_SHIFT)) +#define PINMUX_ETPWM7_MASK (~(uint32)((uint32)0xFFU << PINMUX_ETPWM7_SHIFT)) +#define PINMUX_ETPWM_TIME_BASE_SYNC_MASK (~(uint32)((uint32)0xFFU << PINMUX_ETPWM_TIME_BASE_SYNC_SHIFT)) +#define PINMUX_ETPWM_TBCLK_SYNC_MASK (~(uint32)((uint32)0xFFU << PINMUX_ETPWM_TBCLK_SYNC_SHIFT)) +#define PINMUX_TZ1_MASK (~(uint32)((uint32)0xFFU << PINMUX_TZ1_SHIFT)) +#define PINMUX_TZ2_MASK (~(uint32)((uint32)0xFFU << PINMUX_TZ2_SHIFT)) +#define PINMUX_TZ3_MASK (~(uint32)((uint32)0xFFU << PINMUX_TZ3_SHIFT)) +#define PINMUX_EPWM1SYNCI_MASK (~(uint32)((uint32)0xFFU << PINMUX_EPWM1SYNCI_SHIFT)) + +#define PINMUX_PIN_1_GIOB_3 ((uint32)((uint32)0x1U << PINMUX_PIN_1_SHIFT)) +#define PINMUX_PIN_1_OHCI_PRT_RcvData_1 ((uint32)((uint32)0x2U << PINMUX_PIN_1_SHIFT)) +#define PINMUX_PIN_1_W2FC_RXDI ((uint32)((uint32)0x4U << PINMUX_PIN_1_SHIFT)) + +#define PINMUX_PIN_2_GIOA_0 ((uint32)((uint32)0x1U << PINMUX_PIN_2_SHIFT)) +#define PINMUX_PIN_2_OHCI_PRT_RcvDpls_1 ((uint32)((uint32)0x2U << PINMUX_PIN_2_SHIFT)) +#define PINMUX_PIN_2_W2FC_RXDPI ((uint32)((uint32)0x4U << PINMUX_PIN_2_SHIFT)) + +#define PINMUX_PIN_3_MIBSPI3NCS_3 ((uint32)((uint32)0x1U << PINMUX_PIN_3_SHIFT)) +#define PINMUX_PIN_3_I2C_SCL ((uint32)((uint32)0x2U << PINMUX_PIN_3_SHIFT)) +#define PINMUX_PIN_3_HET1_29 ((uint32)((uint32)0x4U << PINMUX_PIN_3_SHIFT)) +#define PINMUX_PIN_3_nTZ1 ((uint32)((uint32)0x8U << PINMUX_PIN_3_SHIFT)) + +#define PINMUX_PIN_4_MIBSPI3NCS_2 ((uint32)((uint32)0x1U << PINMUX_PIN_4_SHIFT)) +#define PINMUX_PIN_4_I2C_SDA ((uint32)((uint32)0x2U << PINMUX_PIN_4_SHIFT)) +#define PINMUX_PIN_4_HET1_27 ((uint32)((uint32)0x4U << PINMUX_PIN_4_SHIFT)) +#define PINMUX_PIN_4_nTZ2 ((uint32)((uint32)0x8U << PINMUX_PIN_4_SHIFT)) + +#define PINMUX_PIN_5_GIOA_1 ((uint32)((uint32)0x1U << PINMUX_PIN_5_SHIFT)) +#define PINMUX_PIN_5_OHCI_PRT_RcvDmns_1 ((uint32)((uint32)0x2U << PINMUX_PIN_5_SHIFT)) +#define PINMUX_PIN_5_W2FC_RXDMI ((uint32)((uint32)0x4U << PINMUX_PIN_5_SHIFT)) + +#define PINMUX_PIN_6_HET1_11 ((uint32)((uint32)0x1U << PINMUX_PIN_6_SHIFT)) +#define PINMUX_PIN_6_MIBSPI3NCS_4 ((uint32)((uint32)0x2U << PINMUX_PIN_6_SHIFT)) +#define PINMUX_PIN_6_HET2_18 ((uint32)((uint32)0x4U << PINMUX_PIN_6_SHIFT)) +#define PINMUX_PIN_6_OHCI_PRT_OvrCurrent_1 ((uint32)((uint32)0x8U << PINMUX_PIN_6_SHIFT)) +#define PINMUX_PIN_6_W2FC_VBUSI ((uint32)((uint32)0x10U << PINMUX_PIN_6_SHIFT)) +#define PINMUX_PIN_6_ETPWM1SYNCO ((uint32)((uint32)0x20U << PINMUX_PIN_6_SHIFT)) + +#define PINMUX_PIN_9_GIOA_2 ((uint32)((uint32)0x1U << PINMUX_PIN_9_SHIFT)) +#define PINMUX_PIN_9_OHCI_RCFG_txdPls_1 ((uint32)((uint32)0x2U << PINMUX_PIN_9_SHIFT)) +#define PINMUX_PIN_9_W2FC_TXDO ((uint32)((uint32)0x4U << PINMUX_PIN_9_SHIFT)) +#define PINMUX_PIN_9_HET2_0 ((uint32)((uint32)0x8U << PINMUX_PIN_9_SHIFT)) +#define PINMUX_PIN_9_EQEP2I ((uint32)((uint32)0x10U << PINMUX_PIN_9_SHIFT)) + +#define PINMUX_PIN_14_GIOA_5 ((uint32)((uint32)0x1U << PINMUX_PIN_14_SHIFT)) +#define PINMUX_PIN_14_EXTCLKIN ((uint32)((uint32)0x2U << PINMUX_PIN_14_SHIFT)) +#define PINMUX_PIN_14_ETPWM1A ((uint32)((uint32)0x4U << PINMUX_PIN_14_SHIFT)) + +#define PINMUX_PIN_15_HET1_22 ((uint32)((uint32)0x1U << PINMUX_PIN_15_SHIFT)) +#define PINMUX_PIN_15_OHCI_RCFG_txSe0_1 ((uint32)((uint32)0x2U << PINMUX_PIN_15_SHIFT)) +#define PINMUX_PIN_15_W2FC_SE0O ((uint32)((uint32)0x4U << PINMUX_PIN_15_SHIFT)) + +#define PINMUX_PIN_16_GIOA_6 ((uint32)((uint32)0x1U << PINMUX_PIN_16_SHIFT)) +#define PINMUX_PIN_16_HET2_4 ((uint32)((uint32)0x2U << PINMUX_PIN_16_SHIFT)) +#define PINMUX_PIN_16_ETPWM1B ((uint32)((uint32)0x4U << PINMUX_PIN_16_SHIFT)) + +#define PINMUX_PIN_22_GIOA_7 ((uint32)((uint32)0x1U << PINMUX_PIN_22_SHIFT)) +#define PINMUX_PIN_22_HET2_6 ((uint32)((uint32)0x2U << PINMUX_PIN_22_SHIFT)) +#define PINMUX_PIN_22_ETPWM2A ((uint32)((uint32)0x4U << PINMUX_PIN_22_SHIFT)) + +#define PINMUX_PIN_23_HET1_01 ((uint32)((uint32)0x1U << PINMUX_PIN_23_SHIFT)) +#define PINMUX_PIN_23_SPI4NENA ((uint32)((uint32)0x2U << PINMUX_PIN_23_SHIFT)) +#define PINMUX_PIN_23_OHCI_RCFG_txEnL_1 ((uint32)((uint32)0x4U << PINMUX_PIN_23_SHIFT)) +#define PINMUX_PIN_23_W2FC_PUENO ((uint32)((uint32)0x8U << PINMUX_PIN_23_SHIFT)) +#define PINMUX_PIN_23_HET2_8 ((uint32)((uint32)0x10U << PINMUX_PIN_23_SHIFT)) +#define PINMUX_PIN_23_EQEP2A ((uint32)((uint32)0x20U << PINMUX_PIN_23_SHIFT)) + +#define PINMUX_PIN_24_HET1_03 ((uint32)((uint32)0x1U << PINMUX_PIN_24_SHIFT)) +#define PINMUX_PIN_24_SPI4NCS_0 ((uint32)((uint32)0x2U << PINMUX_PIN_24_SHIFT)) +#define PINMUX_PIN_24_OHCI_RCFG_speed_1 ((uint32)((uint32)0x4U << PINMUX_PIN_24_SHIFT)) +#define PINMUX_PIN_24_W2FC_PUENON ((uint32)((uint32)0x8U << PINMUX_PIN_24_SHIFT)) +#define PINMUX_PIN_24_HET2_10 ((uint32)((uint32)0x10U << PINMUX_PIN_24_SHIFT)) +#define PINMUX_PIN_24_EQEP2B ((uint32)((uint32)0x20U << PINMUX_PIN_24_SHIFT)) + +#define PINMUX_PIN_25_HET1_0 ((uint32)((uint32)0x1U << PINMUX_PIN_25_SHIFT)) +#define PINMUX_PIN_25_SPI4CLK ((uint32)((uint32)0x2U << PINMUX_PIN_25_SHIFT)) +#define PINMUX_PIN_25_ETPWM2B ((uint32)((uint32)0x4U << PINMUX_PIN_25_SHIFT)) + +#define PINMUX_PIN_30_HET1_02 ((uint32)((uint32)0x1U << PINMUX_PIN_30_SHIFT)) +#define PINMUX_PIN_30_SPI4SIMO ((uint32)((uint32)0x2U << PINMUX_PIN_30_SHIFT)) +#define PINMUX_PIN_30_ETPWM3A ((uint32)((uint32)0x4U << PINMUX_PIN_30_SHIFT)) + +#define PINMUX_PIN_31_HET1_05 ((uint32)((uint32)0x1U << PINMUX_PIN_31_SHIFT)) +#define PINMUX_PIN_31_SPI4SOMI ((uint32)((uint32)0x2U << PINMUX_PIN_31_SHIFT)) +#define PINMUX_PIN_31_HET2_12 ((uint32)((uint32)0x4U << PINMUX_PIN_31_SHIFT)) +#define PINMUX_PIN_31_ETPWM3B ((uint32)((uint32)0x8U << PINMUX_PIN_31_SHIFT)) + +#define PINMUX_PIN_32_MIBSPI5NCS_0 ((uint32)((uint32)0x1U << PINMUX_PIN_32_SHIFT)) +#define PINMUX_PIN_32_ETPWM4A ((uint32)((uint32)0x4U << PINMUX_PIN_32_SHIFT)) + +#define PINMUX_PIN_33_HET1_07 ((uint32)((uint32)0x1U << PINMUX_PIN_33_SHIFT)) +#define PINMUX_PIN_33_OHCI_RCFG_PrtPower_1 ((uint32)((uint32)0x2U << PINMUX_PIN_33_SHIFT)) +#define PINMUX_PIN_33_W2FC_GZO ((uint32)((uint32)0x4U << PINMUX_PIN_33_SHIFT)) +#define PINMUX_PIN_33_HET2_14 ((uint32)((uint32)0x8U << PINMUX_PIN_33_SHIFT)) +#define PINMUX_PIN_33_ETPWM7B ((uint32)((uint32)0x10U << PINMUX_PIN_33_SHIFT)) + +#define PINMUX_PIN_35_HET1_09 ((uint32)((uint32)0x1U << PINMUX_PIN_35_SHIFT)) +#define PINMUX_PIN_35_HET2_16 ((uint32)((uint32)0x2U << PINMUX_PIN_35_SHIFT)) +#define PINMUX_PIN_35_OHCI_RCFG_suspend_1 ((uint32)((uint32)0x4U << PINMUX_PIN_35_SHIFT)) +#define PINMUX_PIN_35_W2FC_SUSPENDO ((uint32)((uint32)0x8U << PINMUX_PIN_35_SHIFT)) +#define PINMUX_PIN_35_ETPWM7A ((uint32)((uint32)0x10U << PINMUX_PIN_35_SHIFT)) + +#define PINMUX_PIN_36_HET1_04 ((uint32)((uint32)0x1U << PINMUX_PIN_36_SHIFT)) +#define PINMUX_PIN_36_ETPWM4B ((uint32)((uint32)0x2U << PINMUX_PIN_36_SHIFT)) + +#define PINMUX_PIN_37_MIBSPI3NCS_1 ((uint32)((uint32)0x1U << PINMUX_PIN_37_SHIFT)) +#define PINMUX_PIN_37_HET1_25 ((uint32)((uint32)0x2U << PINMUX_PIN_37_SHIFT)) +#define PINMUX_PIN_37_MDCLK ((uint32)((uint32)0x4U << PINMUX_PIN_37_SHIFT)) + +#define PINMUX_PIN_38_HET1_06 ((uint32)((uint32)0x1U << PINMUX_PIN_38_SHIFT)) +#define PINMUX_PIN_38_SCIRX ((uint32)((uint32)0x2U << PINMUX_PIN_38_SHIFT)) +#define PINMUX_PIN_38_ETPWM5A ((uint32)((uint32)0x4U << PINMUX_PIN_38_SHIFT)) + +#define PINMUX_PIN_39_HET1_13 ((uint32)((uint32)0x1U << PINMUX_PIN_39_SHIFT)) +#define PINMUX_PIN_39_SCITX ((uint32)((uint32)0x2U << PINMUX_PIN_39_SHIFT)) +#define PINMUX_PIN_39_ETPWM5B ((uint32)((uint32)0x4U << PINMUX_PIN_39_SHIFT)) + +#define PINMUX_PIN_40_MIBSPI1NCS_2 ((uint32)((uint32)0x1U << PINMUX_PIN_40_SHIFT)) +#define PINMUX_PIN_40_HET1_19 ((uint32)((uint32)0x2U << PINMUX_PIN_40_SHIFT)) +#define PINMUX_PIN_40_MDIO ((uint32)((uint32)0x4U << PINMUX_PIN_40_SHIFT)) + +#define PINMUX_PIN_41_HET1_15 ((uint32)((uint32)0x1U << PINMUX_PIN_41_SHIFT)) +#define PINMUX_PIN_41_MIBSPI1NCS_4 ((uint32)((uint32)0x2U << PINMUX_PIN_41_SHIFT)) +#define PINMUX_PIN_41_ECAP1 ((uint32)((uint32)0x4U << PINMUX_PIN_41_SHIFT)) + +#define PINMUX_PIN_51_MIBSPI3SOMI ((uint32)((uint32)0x1U << PINMUX_PIN_51_SHIFT)) +#define PINMUX_PIN_51_AWM_EXT_ENA ((uint32)((uint32)0x2U << PINMUX_PIN_51_SHIFT)) +#define PINMUX_PIN_51_ECAP2 ((uint32)((uint32)0x4U << PINMUX_PIN_51_SHIFT)) + +#define PINMUX_PIN_52_MIBSPI3SIMO ((uint32)((uint32)0x1U << PINMUX_PIN_52_SHIFT)) +#define PINMUX_PIN_52_AWM_EXT_SEL_0 ((uint32)((uint32)0x2U << PINMUX_PIN_52_SHIFT)) +#define PINMUX_PIN_52_ECAP3 ((uint32)((uint32)0x4U << PINMUX_PIN_52_SHIFT)) + +#define PINMUX_PIN_53_MIBSPI3CLK ((uint32)((uint32)0x1U << PINMUX_PIN_53_SHIFT)) +#define PINMUX_PIN_53_AWM_EXT_SEL_1 ((uint32)((uint32)0x2U << PINMUX_PIN_53_SHIFT)) +#define PINMUX_PIN_53_EQEP1A ((uint32)((uint32)0x4U << PINMUX_PIN_53_SHIFT)) + +#define PINMUX_PIN_54_MIBSPI3NENA ((uint32)((uint32)0x1U << PINMUX_PIN_54_SHIFT)) +#define PINMUX_PIN_54_MIBSPI3NCS_5 ((uint32)((uint32)0x2U << PINMUX_PIN_54_SHIFT)) +#define PINMUX_PIN_54_HET1_31 ((uint32)((uint32)0x4U << PINMUX_PIN_54_SHIFT)) +#define PINMUX_PIN_54_EQEP1B ((uint32)((uint32)0x8U << PINMUX_PIN_54_SHIFT)) + +#define PINMUX_PIN_55_MIBSPI3NCS_0 ((uint32)((uint32)0x1U << PINMUX_PIN_55_SHIFT)) +#define PINMUX_PIN_55_AD2EVT ((uint32)((uint32)0x2U << PINMUX_PIN_55_SHIFT)) +#define PINMUX_PIN_55_GIOB_2 ((uint32)((uint32)0x4U << PINMUX_PIN_55_SHIFT)) +#define PINMUX_PIN_55_EQEP1I ((uint32)((uint32)0x8U << PINMUX_PIN_55_SHIFT)) + +#define PINMUX_PIN_86_AD1EVT ((uint32)((uint32)0x1U << PINMUX_PIN_86_SHIFT)) +#define PINMUX_PIN_86_MII_RX_ER ((uint32)((uint32)0x2U << PINMUX_PIN_86_SHIFT)) +#define PINMUX_PIN_86_RMII_RX_ER ((uint32)((uint32)0x4U << PINMUX_PIN_86_SHIFT)) + +#define PINMUX_PIN_91_HET1_24 ((uint32)((uint32)0x1U << PINMUX_PIN_91_SHIFT)) +#define PINMUX_PIN_91_MIBSPI1NCS_5 ((uint32)((uint32)0x2U << PINMUX_PIN_91_SHIFT)) +#define PINMUX_PIN_91_MII_RXD_0 ((uint32)((uint32)0x4U << PINMUX_PIN_91_SHIFT)) +#define PINMUX_PIN_91_RMII_RXD_0 ((uint32)((uint32)0x8U << PINMUX_PIN_91_SHIFT)) + +#define PINMUX_PIN_92_HET1_26 ((uint32)((uint32)0x1U << PINMUX_PIN_92_SHIFT)) +#define PINMUX_PIN_92_MII_RXD_1 ((uint32)((uint32)0x2U << PINMUX_PIN_92_SHIFT)) +#define PINMUX_PIN_92_RMII_RXD_1 ((uint32)((uint32)0x4U << PINMUX_PIN_92_SHIFT)) + +#define PINMUX_PIN_96_MIBSPI1NENA ((uint32)((uint32)0x1U << PINMUX_PIN_96_SHIFT)) +#define PINMUX_PIN_96_HET1_23 ((uint32)((uint32)0x2U << PINMUX_PIN_96_SHIFT)) +#define PINMUX_PIN_96_MII_RXD_2 ((uint32)((uint32)0x4U << PINMUX_PIN_96_SHIFT)) +#define PINMUX_PIN_96_OHCI_PRT_RcvDpls_0 ((uint32)((uint32)0x8U << PINMUX_PIN_96_SHIFT)) +#define PINMUX_PIN_96_ECAP4 ((uint32)((uint32)0x10U << PINMUX_PIN_96_SHIFT)) + +#define PINMUX_PIN_97_MIBSPI5NENA ((uint32)((uint32)0x1U << PINMUX_PIN_97_SHIFT)) +#define PINMUX_PIN_97_MII_RXD_3 ((uint32)((uint32)0x4U << PINMUX_PIN_97_SHIFT)) +#define PINMUX_PIN_97_OHCI_PRT_RcvDmns_0 ((uint32)((uint32)0x8U << PINMUX_PIN_97_SHIFT)) +#define PINMUX_PIN_97_MIBSPI5SOMI_1 ((uint32)((uint32)0x10U << PINMUX_PIN_97_SHIFT)) +#define PINMUX_PIN_97_ECAP5 ((uint32)((uint32)0x20U << PINMUX_PIN_97_SHIFT)) + +#define PINMUX_PIN_98_MIBSPI5SOMI_0 ((uint32)((uint32)0x1U << PINMUX_PIN_98_SHIFT)) +#define PINMUX_PIN_98_MII_TXD_0 ((uint32)((uint32)0x4U << PINMUX_PIN_98_SHIFT)) +#define PINMUX_PIN_98_RMII_TXD_0 ((uint32)((uint32)0x8U << PINMUX_PIN_98_SHIFT)) + +#define PINMUX_PIN_99_MIBSPI5SIMO_0 ((uint32)((uint32)0x1U << PINMUX_PIN_99_SHIFT)) +#define PINMUX_PIN_99_MII_TXD_1 ((uint32)((uint32)0x4U << PINMUX_PIN_99_SHIFT)) +#define PINMUX_PIN_99_RMII_TXD_1 ((uint32)((uint32)0x8U << PINMUX_PIN_99_SHIFT)) +#define PINMUX_PIN_99_MIBSPI5SOMI_2 ((uint32)((uint32)0x10U << PINMUX_PIN_99_SHIFT)) + +#define PINMUX_PIN_100_MIBSPI5CLK ((uint32)((uint32)0x1U << PINMUX_PIN_100_SHIFT)) +#define PINMUX_PIN_100_MII_TXEN ((uint32)((uint32)0x4U << PINMUX_PIN_100_SHIFT)) +#define PINMUX_PIN_100_RMII_TXEN ((uint32)((uint32)0x8U << PINMUX_PIN_100_SHIFT)) + +#define PINMUX_PIN_105_MIBSPI1NCS_0 ((uint32)((uint32)0x1U << PINMUX_PIN_105_SHIFT)) +#define PINMUX_PIN_105_MIBSPI1SOMI_1 ((uint32)((uint32)0x2U << PINMUX_PIN_105_SHIFT)) +#define PINMUX_PIN_105_MII_TXD_2 ((uint32)((uint32)0x4U << PINMUX_PIN_105_SHIFT)) +#define PINMUX_PIN_105_OHCI_PRT_RcvData_0 ((uint32)((uint32)0x8U << PINMUX_PIN_105_SHIFT)) +#define PINMUX_PIN_105_ECAP6 ((uint32)((uint32)0x10U << PINMUX_PIN_105_SHIFT)) + +#define PINMUX_PIN_106_HET1_08 ((uint32)((uint32)0x1U << PINMUX_PIN_106_SHIFT)) +#define PINMUX_PIN_106_MIBSPI1SIMO_1 ((uint32)((uint32)0x2U << PINMUX_PIN_106_SHIFT)) +#define PINMUX_PIN_106_MII_TXD_3 ((uint32)((uint32)0x4U << PINMUX_PIN_106_SHIFT)) +#define PINMUX_PIN_106_OHCI_PRT_OvrCurrent_0 ((uint32)((uint32)0x8U << PINMUX_PIN_106_SHIFT)) + +#define PINMUX_PIN_107_HET1_28 ((uint32)((uint32)0x1U << PINMUX_PIN_107_SHIFT)) +#define PINMUX_PIN_107_MII_RXCLK ((uint32)((uint32)0x2U << PINMUX_PIN_107_SHIFT)) +#define PINMUX_PIN_107_RMII_REFCLK ((uint32)((uint32)0x4U << PINMUX_PIN_107_SHIFT)) +#define PINMUX_PIN_107_MII_RX_AVCLK4 ((uint32)((uint32)0x8U << PINMUX_PIN_107_SHIFT)) + +#define PINMUX_PIN_118_HET1_10 ((uint32)((uint32)0x1U << PINMUX_PIN_118_SHIFT)) +#define PINMUX_PIN_118_MII_TX_CLK ((uint32)((uint32)0x2U << PINMUX_PIN_118_SHIFT)) +#define PINMUX_PIN_118_OHCI_RCFG_txEnL_0 ((uint32)((uint32)0x4U << PINMUX_PIN_118_SHIFT)) +#define PINMUX_PIN_118_MII_TX_AVCLK4 ((uint32)((uint32)0x8U << PINMUX_PIN_118_SHIFT)) +#define PINMUX_PIN_118_nTZ3 ((uint32)((uint32)0x10U << PINMUX_PIN_118_SHIFT)) + +#define PINMUX_PIN_124_HET1_12 ((uint32)((uint32)0x1U << PINMUX_PIN_124_SHIFT)) +#define PINMUX_PIN_124_MII_CRS ((uint32)((uint32)0x2U << PINMUX_PIN_124_SHIFT)) +#define PINMUX_PIN_124_RMII_CRS_DV ((uint32)((uint32)0x4U << PINMUX_PIN_124_SHIFT)) + +#define PINMUX_PIN_125_HET1_14 ((uint32)((uint32)0x1U << PINMUX_PIN_125_SHIFT)) +#define PINMUX_PIN_125_OHCI_RCFG_txSe0_0 ((uint32)((uint32)0x2U << PINMUX_PIN_125_SHIFT)) + +#define PINMUX_PIN_126_GIOB_0 ((uint32)((uint32)0x1U << PINMUX_PIN_126_SHIFT)) +#define PINMUX_PIN_126_OHCI_RCFG_txDpls_0 ((uint32)((uint32)0x2U << PINMUX_PIN_126_SHIFT)) + +#define PINMUX_PIN_127_HET1_30 ((uint32)((uint32)0x1U << PINMUX_PIN_127_SHIFT)) +#define PINMUX_PIN_127_MII_RX_DV ((uint32)((uint32)0x2U << PINMUX_PIN_127_SHIFT)) +#define PINMUX_PIN_127_OHCI_RCFG_speed_0 ((uint32)((uint32)0x4U << PINMUX_PIN_127_SHIFT)) +#define PINMUX_PIN_127_EQEP2S ((uint32)((uint32)0x8U << PINMUX_PIN_127_SHIFT)) + +#define PINMUX_PIN_130_MIBSPI1NCS_1 ((uint32)((uint32)0x1U << PINMUX_PIN_130_SHIFT)) +#define PINMUX_PIN_130_HET1_17 ((uint32)((uint32)0x2U << PINMUX_PIN_130_SHIFT)) +#define PINMUX_PIN_130_MII_COL ((uint32)((uint32)0x4U << PINMUX_PIN_130_SHIFT)) +#define PINMUX_PIN_130_OHCI_RCFG_suspend_0 ((uint32)((uint32)0x8U << PINMUX_PIN_130_SHIFT)) +#define PINMUX_PIN_130_EQEP1S ((uint32)((uint32)0x10U << PINMUX_PIN_130_SHIFT)) + +#define PINMUX_PIN_133_GIOB_1 ((uint32)((uint32)0x1U << PINMUX_PIN_133_SHIFT)) +#define PINMUX_PIN_133_OHCI_RCFG_PrtPower_0 ((uint32)((uint32)0x2U << PINMUX_PIN_133_SHIFT)) + +#define PINMUX_PIN_139_HET1_16 ((uint32)((uint32)0x1U << PINMUX_PIN_139_SHIFT)) +#define PINMUX_PIN_139_ETPWM1SYNCI ((uint32)((uint32)0x2U << PINMUX_PIN_139_SHIFT)) +#define PINMUX_PIN_139_ETPWM1SYNCO ((uint32)((uint32)0x4U << PINMUX_PIN_139_SHIFT)) + +#define PINMUX_PIN_140_HET1_18 ((uint32)((uint32)0x1U << PINMUX_PIN_140_SHIFT)) +#define PINMUX_PIN_140_ETPWM6A ((uint32)((uint32)0x2U << PINMUX_PIN_140_SHIFT)) + +#define PINMUX_PIN_141_HET1_20 ((uint32)((uint32)0x1U << PINMUX_PIN_141_SHIFT)) +#define PINMUX_PIN_141_ETPWM6B ((uint32)((uint32)0x2U << PINMUX_PIN_141_SHIFT)) + +#define PINMUX_PIN_133_GIOB_1 ((uint32)((uint32)0x1U << PINMUX_PIN_133_SHIFT)) + +#define PINMUX_PIN_1_GIOB_3 ((uint32)((uint32)0x1U << PINMUX_PIN_1_SHIFT)) + +#define PINMUX_PIN_2_GIOA_0 ((uint32)((uint32)0x1U << PINMUX_PIN_2_SHIFT)) + +#define PINMUX_PIN_5_GIOA_1 ((uint32)((uint32)0x1U << PINMUX_PIN_5_SHIFT)) + +#define PINMUX_PIN_15_HET1_22 ((uint32)((uint32)0x1U << PINMUX_PIN_15_SHIFT)) + +#define PINMUX_PIN_125_HET1_14 ((uint32)((uint32)0x1U << PINMUX_PIN_125_SHIFT)) + +#define PINMUX_PIN_126_GIOB_0 ((uint32)((uint32)0x1U << PINMUX_PIN_126_SHIFT)) + +#define PINMUX_GATE_EMIF_CLK_ON ((uint32)((uint32)0x0 << PINMUX_GATE_EMIF_CLK_SHIFT)) +#define PINMUX_GIOB_DISABLE_HET2_ON ((uint32)((uint32)0x1U << PINMUX_GIOB_DISABLE_HET2_SHIFT)) +#define PINMUX_GATE_EMIF_CLK_OFF ((uint32)((uint32)0x1U << PINMUX_GATE_EMIF_CLK_SHIFT)) +#define PINMUX_GIOB_DISABLE_HET2_OFF ((uint32)((uint32)0x0 << PINMUX_GIOB_DISABLE_HET2_SHIFT)) +#define PINMUX_ALT_ADC_TRIGGER_1 ((uint32)((uint32)0x1U << PINMUX_ALT_ADC_TRIGGER_SHIFT)) +#define PINMUX_ALT_ADC_TRIGGER_2 ((uint32)((uint32)0x2U << PINMUX_ALT_ADC_TRIGGER_SHIFT)) +#define PINMUX_ETHERNET_MII ((uint32)((uint32)0x0 << PINMUX_ETHERNET_SHIFT)) +#define PINMUX_ETHERNET_RMII ((uint32)((uint32)0x1U << PINMUX_ETHERNET_SHIFT)) + +#define PINMUX_ETPWM1_EQEPERR12 ((uint32)((uint32)0x1U << PINMUX_ETPWM1_SHIFT)) +#define PINMUX_ETPWM1_EQEPERR1 ((uint32)((uint32)0x2U << PINMUX_ETPWM1_SHIFT)) +#define PINMUX_ETPWM1_EQEPERR2 ((uint32)((uint32)0x4U << PINMUX_ETPWM1_SHIFT)) +#define PINMUX_ETPWM2_EQEPERR12 ((uint32)((uint32)0x1U << PINMUX_ETPWM2_SHIFT)) +#define PINMUX_ETPWM2_EQEPERR1 ((uint32)((uint32)0x2U << PINMUX_ETPWM2_SHIFT)) +#define PINMUX_ETPWM2_EQEPERR2 ((uint32)((uint32)0x4U << PINMUX_ETPWM2_SHIFT)) +#define PINMUX_ETPWM3_EQEPERR12 ((uint32)((uint32)0x1U << PINMUX_ETPWM3_SHIFT)) +#define PINMUX_ETPWM3_EQEPERR1 ((uint32)((uint32)0x2U << PINMUX_ETPWM3_SHIFT)) +#define PINMUX_ETPWM3_EQEPERR2 ((uint32)((uint32)0x4U << PINMUX_ETPWM3_SHIFT)) +#define PINMUX_ETPWM4_EQEPERR12 ((uint32)((uint32)0x1U << PINMUX_ETPWM4_SHIFT)) +#define PINMUX_ETPWM4_EQEPERR1 ((uint32)((uint32)0x2U << PINMUX_ETPWM4_SHIFT)) +#define PINMUX_ETPWM4_EQEPERR2 ((uint32)((uint32)0x4U << PINMUX_ETPWM4_SHIFT)) +#define PINMUX_ETPWM5_EQEPERR12 ((uint32)((uint32)0x1U << PINMUX_ETPWM5_SHIFT)) +#define PINMUX_ETPWM5_EQEPERR1 ((uint32)((uint32)0x2U << PINMUX_ETPWM5_SHIFT)) +#define PINMUX_ETPWM5_EQEPERR2 ((uint32)((uint32)0x4U << PINMUX_ETPWM5_SHIFT)) +#define PINMUX_ETPWM6_EQEPERR12 ((uint32)((uint32)0x1U << PINMUX_ETPWM6_SHIFT)) +#define PINMUX_ETPWM6_EQEPERR1 ((uint32)((uint32)0x2U << PINMUX_ETPWM6_SHIFT)) +#define PINMUX_ETPWM6_EQEPERR2 ((uint32)((uint32)0x4U << PINMUX_ETPWM6_SHIFT)) +#define PINMUX_ETPWM7_EQEPERR12 ((uint32)((uint32)0x1U << PINMUX_ETPWM7_SHIFT)) +#define PINMUX_ETPWM7_EQEPERR1 ((uint32)((uint32)0x2U << PINMUX_ETPWM7_SHIFT)) +#define PINMUX_ETPWM7_EQEPERR2 ((uint32)((uint32)0x4U << PINMUX_ETPWM7_SHIFT)) +#define PINMUX_ETPWM_TIME_BASE_SYNC_ON ((uint32)((uint32)0x2U << PINMUX_ETPWM_TIME_BASE_SYNC_SHIFT)) +#define PINMUX_ETPWM_TBCLK_SYNC_ON ((uint32)((uint32)0x2U << PINMUX_ETPWM_TBCLK_SYNC_SHIFT)) +#define PINMUX_ETPWM_TIME_BASE_SYNC_OFF ((uint32)((uint32)0x0 << PINMUX_ETPWM_TIME_BASE_SYNC_SHIFT)) +#define PINMUX_ETPWM_TBCLK_SYNC_OFF ((uint32)((uint32)0x0 << PINMUX_ETPWM_TBCLK_SYNC_SHIFT)) +#define PINMUX_TZ1_ASYNC ((uint32)((uint32)0x1U << PINMUX_TZ1_SHIFT)) +#define PINMUX_TZ1_SYNC ((uint32)((uint32)0x2U << PINMUX_TZ1_SHIFT)) +#define PINMUX_TZ1_FILTERED ((uint32)((uint32)0x4U << PINMUX_TZ1_SHIFT)) +#define PINMUX_TZ2_ASYNC ((uint32)((uint32)0x1U << PINMUX_TZ2_SHIFT)) +#define PINMUX_TZ2_SYNC ((uint32)((uint32)0x2U << PINMUX_TZ2_SHIFT)) +#define PINMUX_TZ2_FILTERED ((uint32)((uint32)0x4U << PINMUX_TZ2_SHIFT)) +#define PINMUX_TZ3_ASYNC ((uint32)((uint32)0x1U << PINMUX_TZ3_SHIFT)) +#define PINMUX_TZ3_SYNC ((uint32)((uint32)0x2U << PINMUX_TZ3_SHIFT)) +#define PINMUX_TZ3_FILTERED ((uint32)((uint32)0x4U << PINMUX_TZ3_SHIFT)) +#define PINMUX_EPWM1SYNCI_ASYNC ((uint32)((uint32)0x1U << PINMUX_EPWM1SYNCI_SHIFT)) +#define PINMUX_EPWM1SYNCI_SYNC ((uint32)((uint32)0x2U << PINMUX_EPWM1SYNCI_SHIFT)) +#define PINMUX_EPWM1SYNCI_FILTERED ((uint32)((uint32)0x4U << PINMUX_EPWM1SYNCI_SHIFT)) + +typedef struct pinmux_config_reg +{ + uint32 CONFIG_PINMMR0; + uint32 CONFIG_PINMMR1; + uint32 CONFIG_PINMMR2; + uint32 CONFIG_PINMMR3; + uint32 CONFIG_PINMMR4; + uint32 CONFIG_PINMMR5; + uint32 CONFIG_PINMMR6; + uint32 CONFIG_PINMMR7; + uint32 CONFIG_PINMMR8; + uint32 CONFIG_PINMMR9; + uint32 CONFIG_PINMMR10; + uint32 CONFIG_PINMMR11; + uint32 CONFIG_PINMMR12; + uint32 CONFIG_PINMMR13; + uint32 CONFIG_PINMMR14; + uint32 CONFIG_PINMMR15; + uint32 CONFIG_PINMMR16; + uint32 CONFIG_PINMMR17; + uint32 CONFIG_PINMMR18; + uint32 CONFIG_PINMMR19; + uint32 CONFIG_PINMMR20; + uint32 CONFIG_PINMMR21; + uint32 CONFIG_PINMMR22; + uint32 CONFIG_PINMMR23; + uint32 CONFIG_PINMMR24; + uint32 CONFIG_PINMMR25; + uint32 CONFIG_PINMMR26; + uint32 CONFIG_PINMMR27; + uint32 CONFIG_PINMMR28; + uint32 CONFIG_PINMMR29; + uint32 CONFIG_PINMMR30; + uint32 CONFIG_PINMMR31; + uint32 CONFIG_PINMMR32; + uint32 CONFIG_PINMMR33; + uint32 CONFIG_PINMMR34; + uint32 CONFIG_PINMMR35; + uint32 CONFIG_PINMMR36; + uint32 CONFIG_PINMMR37; + uint32 CONFIG_PINMMR38; + uint32 CONFIG_PINMMR39; + uint32 CONFIG_PINMMR40; + uint32 CONFIG_PINMMR41; + uint32 CONFIG_PINMMR42; + uint32 CONFIG_PINMMR43; + uint32 CONFIG_PINMMR44; + uint32 CONFIG_PINMMR45; + uint32 CONFIG_PINMMR46; + uint32 CONFIG_PINMMR47; +}pinmux_config_reg_t; + +/** + * @defgroup IOMM IOMM + * @brief I/O Multiplexing and Control Module. + * + * The IOMM contains memory-mapped registers (MMR) that control device-specific multiplexed functions. + * The safety and diagnostic features of the IOMM are: + * - Kicker mechanism to protect the MMRs from accidental writes + * - Master-id checker to only allow the CPU to write to the MMRs + * - Error indication for access violations + * + * Related Files + * - reg_pinmux.h + * - pinmux.h + * - pinmux.c + * @addtogroup IOMM + * @{ + */ + +/** @fn void muxInit(void) +* @brief Initializes the PINMUX Driver +* +* This function initializes the PINMUX module and configures the selected +* pinmux settings as per the user selection in the GUI +*/ +void muxInit(void); +void pinmuxGetConfigValue(pinmux_config_reg_t *config_reg, config_value_type_t type); +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/**@}*/ +#ifdef __cplusplus +} +#endif /*extern "C" */ +#endif Index: firmware/include/pom.h =================================================================== diff -u --- firmware/include/pom.h (revision 0) +++ firmware/include/pom.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,342 @@ +/** @file pom.h +* @brief POM Driver Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __POM_H__ +#define __POM_H__ + +#include "reg_pom.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/** @enum pom_region_size +* @brief Alias names for pom region size +* This enumeration is used to provide alias names for POM region size: +*/ +enum pom_region_size +{ + SIZE_32BYTES = 0U, + SIZE_64BYTES = 1U, + SIZE_128BYTES = 2U, + SIZE_256BYTES = 3U, + SIZE_512BYTES = 4U, + SIZE_1KB = 5U, + SIZE_2KB = 6U, + SIZE_4KB = 7U, + SIZE_8KB = 8U, + SIZE_16KB = 9U, + SIZE_32KB = 10U, + SIZE_64KB = 11U, + SIZE_128KB = 12U, + SIZE_256KB = 13U +}; + +/** @def INTERNAL_RAM +* @brief Alias name for Internal RAM +*/ +#define INTERNAL_RAM 0x08000000U + +/** @def SDRAM +* @brief Alias name for SD RAM +*/ +#define SDRAM 0x80000000U + +/** @def ASYNC_MEMORY +* @brief Alias name for Async RAM +*/ +#define ASYNC_MEMORY 0x60000000U + + +typedef uint32 REGION_t; + +/** @struct REGION_CONFIG_ST +* @brief POM region configuration +*/ +typedef struct +{ + uint32 Prog_Reg_Sta_Addr; + uint32 Ovly_Reg_Sta_Addr; + uint32 Reg_Size; +}REGION_CONFIG_t; + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +/* Configuration registers */ +typedef struct pom_config_reg +{ + uint32 CONFIG_POMGLBCTRL; + uint32 CONFIG_POMPROGSTART0; + uint32 CONFIG_POMOVLSTART0; + uint32 CONFIG_POMREGSIZE0; + uint32 CONFIG_POMPROGSTART1; + uint32 CONFIG_POMOVLSTART1; + uint32 CONFIG_POMREGSIZE1; + uint32 CONFIG_POMPROGSTART2; + uint32 CONFIG_POMOVLSTART2; + uint32 CONFIG_POMREGSIZE2; + uint32 CONFIG_POMPROGSTART3; + uint32 CONFIG_POMOVLSTART3; + uint32 CONFIG_POMREGSIZE3; + uint32 CONFIG_POMPROGSTART4; + uint32 CONFIG_POMOVLSTART4; + uint32 CONFIG_POMREGSIZE4; + uint32 CONFIG_POMPROGSTART5; + uint32 CONFIG_POMOVLSTART5; + uint32 CONFIG_POMREGSIZE5; + uint32 CONFIG_POMPROGSTART6; + uint32 CONFIG_POMOVLSTART6; + uint32 CONFIG_POMREGSIZE6; + uint32 CONFIG_POMPROGSTART7; + uint32 CONFIG_POMOVLSTART7; + uint32 CONFIG_POMREGSIZE7; + uint32 CONFIG_POMPROGSTART8; + uint32 CONFIG_POMOVLSTART8; + uint32 CONFIG_POMREGSIZE8; + uint32 CONFIG_POMPROGSTART9; + uint32 CONFIG_POMOVLSTART9; + uint32 CONFIG_POMREGSIZE9; + uint32 CONFIG_POMPROGSTART10; + uint32 CONFIG_POMOVLSTART10; + uint32 CONFIG_POMREGSIZE10; + uint32 CONFIG_POMPROGSTART11; + uint32 CONFIG_POMOVLSTART11; + uint32 CONFIG_POMREGSIZE11; + uint32 CONFIG_POMPROGSTART12; + uint32 CONFIG_POMOVLSTART12; + uint32 CONFIG_POMREGSIZE12; + uint32 CONFIG_POMPROGSTART13; + uint32 CONFIG_POMOVLSTART13; + uint32 CONFIG_POMREGSIZE13; + uint32 CONFIG_POMPROGSTART14; + uint32 CONFIG_POMOVLSTART14; + uint32 CONFIG_POMREGSIZE14; + uint32 CONFIG_POMPROGSTART15; + uint32 CONFIG_POMOVLSTART15; + uint32 CONFIG_POMREGSIZE15; + uint32 CONFIG_POMPROGSTART16; + uint32 CONFIG_POMOVLSTART16; + uint32 CONFIG_POMREGSIZE16; + uint32 CONFIG_POMPROGSTART17; + uint32 CONFIG_POMOVLSTART17; + uint32 CONFIG_POMREGSIZE17; + uint32 CONFIG_POMPROGSTART18; + uint32 CONFIG_POMOVLSTART18; + uint32 CONFIG_POMREGSIZE18; + uint32 CONFIG_POMPROGSTART19; + uint32 CONFIG_POMOVLSTART19; + uint32 CONFIG_POMREGSIZE19; + uint32 CONFIG_POMPROGSTART20; + uint32 CONFIG_POMOVLSTART20; + uint32 CONFIG_POMREGSIZE20; + uint32 CONFIG_POMPROGSTART21; + uint32 CONFIG_POMOVLSTART21; + uint32 CONFIG_POMREGSIZE21; + uint32 CONFIG_POMPROGSTART22; + uint32 CONFIG_POMOVLSTART22; + uint32 CONFIG_POMREGSIZE22; + uint32 CONFIG_POMPROGSTART23; + uint32 CONFIG_POMOVLSTART23; + uint32 CONFIG_POMREGSIZE23; + uint32 CONFIG_POMPROGSTART24; + uint32 CONFIG_POMOVLSTART24; + uint32 CONFIG_POMREGSIZE24; + uint32 CONFIG_POMPROGSTART25; + uint32 CONFIG_POMOVLSTART25; + uint32 CONFIG_POMREGSIZE25; + uint32 CONFIG_POMPROGSTART26; + uint32 CONFIG_POMOVLSTART26; + uint32 CONFIG_POMREGSIZE26; + uint32 CONFIG_POMPROGSTART27; + uint32 CONFIG_POMOVLSTART27; + uint32 CONFIG_POMREGSIZE27; + uint32 CONFIG_POMPROGSTART28; + uint32 CONFIG_POMOVLSTART28; + uint32 CONFIG_POMREGSIZE28; + uint32 CONFIG_POMPROGSTART29; + uint32 CONFIG_POMOVLSTART29; + uint32 CONFIG_POMREGSIZE29; + uint32 CONFIG_POMPROGSTART30; + uint32 CONFIG_POMOVLSTART30; + uint32 CONFIG_POMREGSIZE30; + uint32 CONFIG_POMPROGSTART31; + uint32 CONFIG_POMOVLSTART31; + uint32 CONFIG_POMREGSIZE31; +} pom_config_reg_t; + + +/* Configuration registers initial value for POM*/ +#define POM_POMGLBCTRL_CONFIGVALUE ((uint32)INTERNAL_RAM | 0x00000005U) +#define POM_POMPROGSTART0_CONFIGVALUE (0x00000000U & 0x003FFFFFU) +#define POM_POMOVLSTART0_CONFIGVALUE (0x00000000U & 0x003FFFFFU) +/*SAFETYMCUSW 79 S MR:19.4 "Values come from GUI drop down option" */ +#define POM_POMREGSIZE0_CONFIGVALUE ((uint32)SIZE_64BYTES) +#define POM_POMPROGSTART1_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART1_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE1_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART2_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART2_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE2_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART3_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART3_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE3_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART4_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART4_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE4_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART5_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART5_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE5_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART6_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART6_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE6_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART7_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART7_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE7_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART8_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART8_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE8_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART9_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART9_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE9_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART10_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART10_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE10_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART11_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART11_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE11_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART12_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART12_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE12_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART13_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART13_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE13_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART14_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART14_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE14_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART15_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART15_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE15_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART16_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART16_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE16_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART17_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART17_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE17_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART18_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART18_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE18_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART19_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART19_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE19_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART20_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART20_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE20_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART21_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART21_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE21_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART22_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART22_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE22_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART23_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART23_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE23_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART24_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART24_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE24_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART25_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART25_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE25_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART26_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART26_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE26_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART27_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART27_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE27_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART28_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART28_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE28_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART29_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART29_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE29_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART30_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART30_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE30_CONFIGVALUE 0x00000000U +#define POM_POMPROGSTART31_CONFIGVALUE 0x00000000U +#define POM_POMOVLSTART31_CONFIGVALUE 0x00000000U +#define POM_POMREGSIZE31_CONFIGVALUE 0x00000000U + +/** + * @defgroup POM POM + * @brief Parameter Overlay Module. + * + * The POM provides a mechanism to redirect accesses to non-volatile memory into a volatile memory + * internal or external to the device. The data requested by the CPU will be fetched from the overlay memory + * instead of the main non-volatile memory. + * + * Related Files + * - reg_pom.h + * - pom.h + * - pom.c + * @addtogroup POM + * @{ + */ + +/* POM Interface Functions */ +void POM_Region_Config(REGION_CONFIG_t *Reg_Config_Ptr,REGION_t Region_Num); +void POM_Reset(void); +void POM_Init(void); +void POM_Enable(void); +void pomGetConfigValue(pom_config_reg_t *config_reg, config_value_type_t type); + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/**@}*/ +#ifdef __cplusplus +} +#endif /*extern "C" */ +#endif /* __POM_H_*/ Index: firmware/include/reg_adc.h =================================================================== diff -u --- firmware/include/reg_adc.h (revision 0) +++ firmware/include/reg_adc.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,261 @@ +/** @file reg_adc.h +* @brief ADC Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the ADC driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_ADC_H__ +#define __REG_ADC_H__ + +#include "sys_common.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Adc Register Frame Definition */ +/** @struct adcBase +* @brief ADC Register Frame Definition +* +* This type is used to access the ADC Registers. +*/ +/** @typedef adcBASE_t +* @brief ADC Register Frame Type Definition +* +* This type is used to access the ADC Registers. +*/ +typedef volatile struct adcBase +{ + uint32 RSTCR; /**< 0x0000: Reset control register */ + uint32 OPMODECR; /**< 0x0004: Operating mode control register */ + uint32 CLOCKCR; /**< 0x0008: Clock control register */ + uint32 CALCR; /**< 0x000C: Calibration control register */ + uint32 GxMODECR[3U]; /**< 0x0010,0x0014,0x0018: Group 0-2 mode control register */ + uint32 EVSRC; /**< 0x001C: Group 0 trigger source control register */ + uint32 G1SRC; /**< 0x0020: Group 1 trigger source control register */ + uint32 G2SRC; /**< 0x0024: Group 2 trigger source control register */ + uint32 GxINTENA[3U]; /**< 0x0028,0x002C,0x0030: Group 0-2 interrupt enable register */ + uint32 GxINTFLG[3U]; /**< 0x0034,0x0038,0x003C: Group 0-2 interrupt flag register */ + uint32 GxINTCR[3U]; /**< 0x0040-0x0048: Group 0-2 interrupt threshold register */ + uint32 EVDMACR; /**< 0x004C: Group 0 DMA control register */ + uint32 G1DMACR; /**< 0x0050: Group 1 DMA control register */ + uint32 G2DMACR; /**< 0x0054: Group 2 DMA control register */ + uint32 BNDCR; /**< 0x0058: Buffer boundary control register */ + uint32 BNDEND; /**< 0x005C: Buffer boundary end register */ + uint32 EVSAMP; /**< 0x0060: Group 0 sample window register */ + uint32 G1SAMP; /**< 0x0064: Group 1 sample window register */ + uint32 G2SAMP; /**< 0x0068: Group 2 sample window register */ + uint32 EVSR; /**< 0x006C: Group 0 status register */ + uint32 G1SR; /**< 0x0070: Group 1 status register */ + uint32 G2SR; /**< 0x0074: Group 2 status register */ + uint32 GxSEL[3U]; /**< 0x0078-0x007C: Group 0-2 channel select register */ + uint32 CALR; /**< 0x0084: Calibration register */ + uint32 SMSTATE; /**< 0x0088: State machine state register */ + uint32 LASTCONV; /**< 0x008C: Last conversion register */ + struct + { + uint32 BUF0; /**< 0x0090,0x00B0,0x00D0: Group 0-2 result buffer 1 register */ + uint32 BUF1; /**< 0x0094,0x00B4,0x00D4: Group 0-2 result buffer 1 register */ + uint32 BUF2; /**< 0x0098,0x00B8,0x00D8: Group 0-2 result buffer 2 register */ + uint32 BUF3; /**< 0x009C,0x00BC,0x00DC: Group 0-2 result buffer 3 register */ + uint32 BUF4; /**< 0x00A0,0x00C0,0x00E0: Group 0-2 result buffer 4 register */ + uint32 BUF5; /**< 0x00A4,0x00C4,0x00E4: Group 0-2 result buffer 5 register */ + uint32 BUF6; /**< 0x00A8,0x00C8,0x00E8: Group 0-2 result buffer 6 register */ + uint32 BUF7; /**< 0x00AC,0x00CC,0x00EC: Group 0-2 result buffer 7 register */ + } GxBUF[3U]; + uint32 EVEMUBUFFER; /**< 0x00F0: Group 0 emulation result buffer */ + uint32 G1EMUBUFFER; /**< 0x00F4: Group 1 emulation result buffer */ + uint32 G2EMUBUFFER; /**< 0x00F8: Group 2 emulation result buffer */ + uint32 EVTDIR; /**< 0x00FC: Event pin direction register */ + uint32 EVTOUT; /**< 0x0100: Event pin digital output register */ + uint32 EVTIN; /**< 0x0104: Event pin digital input register */ + uint32 EVTSET; /**< 0x0108: Event pin set register */ + uint32 EVTCLR; /**< 0x010C: Event pin clear register */ + uint32 EVTPDR; /**< 0x0110: Event pin open drain register */ + uint32 EVTDIS; /**< 0x0114: Event pin pull disable register */ + uint32 EVTPSEL; /**< 0x0118: Event pin pull select register */ + uint32 EVSAMPDISEN; /**< 0x011C: Group 0 sample discharge register */ + uint32 G1SAMPDISEN; /**< 0x0120: Group 1 sample discharge register */ + uint32 G2SAMPDISEN; /**< 0x0124: Group 2 sample discharge register */ + uint32 MAGINTCR1; /**< 0x0128: Magnitude interrupt control register 1 */ + uint32 MAGINT1MASK; /**< 0x012C: Magnitude interrupt mask register 1 */ + uint32 MAGINTCR2; /**< 0x0130: Magnitude interrupt control register 2 */ + uint32 MAGINT2MASK; /**< 0x0134: Magnitude interrupt mask register 2 */ + uint32 MAGINTCR3; /**< 0x0138: Magnitude interrupt control register 3 */ + uint32 MAGINT3MASK; /**< 0x013C: Magnitude interrupt mask register 3 */ + uint32 rsvd1; /**< 0x0140: Reserved */ + uint32 rsvd2; /**< 0x0144: Reserved */ + uint32 rsvd3; /**< 0x0148: Reserved */ + uint32 rsvd4; /**< 0x014C: Reserved */ + uint32 rsvd5; /**< 0x0150: Reserved */ + uint32 rsvd6; /**< 0x0154: Reserved */ + uint32 MAGTHRINTENASET; /**< 0x0158: Magnitude interrupt set register */ + uint32 MAGTHRINTENACLR; /**< 0x015C: Magnitude interrupt clear register */ + uint32 MAGTHRINTFLG; /**< 0x0160: Magnitude interrupt flag register */ + uint32 MAGTHRINTOFFSET; /**< 0x0164: Magnitude interrupt offset register */ + uint32 GxFIFORESETCR[3U]; /**< 0x0168,0x016C,0x0170: Group 0-2 fifo reset register */ + uint32 EVRAMADDR; /**< 0x0174: Group 0 RAM pointer register */ + uint32 G1RAMADDR; /**< 0x0178: Group 1 RAM pointer register */ + uint32 G2RAMADDR; /**< 0x017C: Group 2 RAM pointer register */ + uint32 PARCR; /**< 0x0180: Parity control register */ + uint32 PARADDR; /**< 0x0184: Parity error address register */ + uint32 PWRUPDLYCTRL; /**< 0x0188: Power-Up delay control register */ + uint32 rsvd7; /**< 0x018C: Reserved */ + uint32 ADEVCHNSELMODECTRL; /**< 0x0190: Event Group Channel Selection Mode Control Register */ + uint32 ADG1CHNSELMODECTRL; /**< 0x0194: Group1 Channel Selection Mode Control Register */ + uint32 ADG2CHNSELMODECTRL; /**< 0x0198: Group2 Channel Selection Mode Control Register */ + uint32 ADEVCURRCOUNT; /**< 0x019C: Event Group Current Count Register */ + uint32 ADEVMAXCOUNT; /**< 0x01A0: Event Group Max Count Register */ + uint32 ADG1CURRCOUNT; /**< 0x01A4: Group1 Current Count Register */ + uint32 ADG1MAXCOUNT; /**< 0x01A8: Group1 Max Count Register */ + uint32 ADG2CURRCOUNT; /**< 0x01AC: Group2 Current Count Register */ + uint32 ADG2MAXCOUNT; /**< 0x01B0: Group2 Max Count Register */ +} adcBASE_t; + + +/** @struct adcLUTEntry +* @brief ADC Look-Up Table Entry +* +* This type is used to access ADC Look-Up Table Entry +*/ +/** @typedef adcLUTEntry_t +* @brief ADC Look-Up Table Entry +* +* This type is used to access the Look-Up Table Entry. +*/ +typedef struct adcLUTEntry +{ +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + uint8 EV_INT_CHN_MUX_SEL; + uint8 EV_EXT_CHN_MUX_SEL; + uint16 rsvd; +#else + uint16 rsvd; + uint8 EV_EXT_CHN_MUX_SEL; + uint8 EV_INT_CHN_MUX_SEL; +#endif +}adcLUTEntry_t; + + +/** @struct adcLUT +* @brief ADC Look-Up Table +* +* This type is used to access ADC Look-Up Table +*/ +/** @typedef adcLUT_t +* @brief ADC Look-Up Table +* +* This type is used to access the ADC Look-Up Table. +*/ +typedef volatile struct adcLUT +{ + adcLUTEntry_t eventGroup[32]; + adcLUTEntry_t Group1[32]; + adcLUTEntry_t Group2[32]; +} adcLUT_t; + + +/** @def adcREG1 +* @brief ADC1 Register Frame Pointer +* +* This pointer is used by the ADC driver to access the ADC1 registers. +*/ +#define adcREG1 ((adcBASE_t *)0xFFF7C000U) + +/** @def adcREG2 +* @brief ADC2 Register Frame Pointer +* +* This pointer is used by the ADC driver to access the ADC2 registers. +*/ +#define adcREG2 ((adcBASE_t *)0xFFF7C200U) + +/** @def adcRAM1 +* @brief ADC1 RAM Pointer +* +* This pointer is used by the ADC driver to access the ADC1 RAM. +*/ +#define adcRAM1 (*(volatile uint32 *)0xFF3E0000U) + +/** @def adcRAM2 +* @brief ADC2 RAM Pointer +* +* This pointer is used by the ADC driver to access the ADC2 RAM. +*/ +#define adcRAM2 (*(volatile uint32 *)0xFF3A0000U) + +/** @def adcPARRAM1 +* @brief ADC1 Parity RAM Pointer +* +* This pointer is used by the ADC driver to access the ADC1 Parity RAM. +*/ +#define adcPARRAM1 (*(volatile uint32 *)(0xFF3E0000U + 0x1000U)) + +/** @def adcPARRAM2 +* @brief ADC2 Parity RAM Pointer +* +* This pointer is used by the ADC driver to access the ADC2 Parity RAM. +*/ +#define adcPARRAM2 (*(volatile uint32 *)(0xFF3A0000U + 0x1000U)) + +/** @def adcLUT1 +* @brief ADC1 Look-Up Table +* +* This pointer is used by the ADC driver to access the ADC1 Look-Up Table. +*/ +#define adcLUT1 ((adcLUT_t *) 0xFF3E2000U) + +/** @def adcLUT2 +* @brief ADC2 Look-Up Table +* +* This pointer is used by the ADC driver to access the ADC2 Look-Up Table. +*/ +#define adcLUT2 ((adcLUT_t *) 0xFF3A2000U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_can.h =================================================================== diff -u --- firmware/include/reg_can.h (revision 0) +++ firmware/include/reg_can.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,208 @@ +/** @file reg_can.h +* @brief CAN Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the CAN driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_CAN_H__ +#define __REG_CAN_H__ + +#include "sys_common.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Can Register Frame Definition */ +/** @struct canBase +* @brief CAN Register Frame Definition +* +* This type is used to access the CAN Registers. +*/ +/** @typedef canBASE_t +* @brief CAN Register Frame Type Definition +* +* This type is used to access the CAN Registers. +*/ +typedef volatile struct canBase +{ + uint32 CTL; /**< 0x0000: Control Register */ + uint32 ES; /**< 0x0004: Error and Status Register */ + uint32 EERC; /**< 0x0008: Error Counter Register */ + uint32 BTR; /**< 0x000C: Bit Timing Register */ + uint32 INT; /**< 0x0010: Interrupt Register */ + uint32 TEST; /**< 0x0014: Test Register */ + uint32 rsvd1; /**< 0x0018: Reserved */ + uint32 PERR; /**< 0x001C: Parity/SECDED Error Code Register */ + uint32 rsvd2[24]; /**< 0x002C - 0x7C: Reserved */ + uint32 ABOTR; /**< 0x0080: Auto Bus On Time Register */ + uint32 TXRQX; /**< 0x0084: Transmission Request X Register */ + uint32 TXRQx[4U]; /**< 0x0088-0x0094: Transmission Request Registers */ + uint32 NWDATX; /**< 0x0098: New Data X Register */ + uint32 NWDATx[4U]; /**< 0x009C-0x00A8: New Data Registers */ + uint32 INTPNDX; /**< 0x00AC: Interrupt Pending X Register */ + uint32 INTPNDx[4U]; /**< 0x00B0-0x00BC: Interrupt Pending Registers */ + uint32 MSGVALX; /**< 0x00C0: Message Valid X Register */ + uint32 MSGVALx[4U]; /**< 0x00C4-0x00D0: Message Valid Registers */ + uint32 rsvd3; /**< 0x00D4: Reserved */ + uint32 INTMUXx[4U]; /**< 0x00D8-0x00E4: Interrupt Multiplexer Registers */ + uint32 rsvd4[6]; /**< 0x00E8: Reserved */ +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + uint8 IF1NO; /**< 0x0100: IF1 Command Register, Msg Number */ + uint8 IF1STAT; /**< 0x0100: IF1 Command Register, Status */ + uint8 IF1CMD; /**< 0x0100: IF1 Command Register, Command */ + uint8 rsvd9; /**< 0x0100: IF1 Command Register, Reserved */ +#else + uint8 rsvd9; /**< 0x0100: IF1 Command Register, Reserved */ + uint8 IF1CMD; /**< 0x0100: IF1 Command Register, Command */ + uint8 IF1STAT; /**< 0x0100: IF1 Command Register, Status */ + uint8 IF1NO; /**< 0x0100: IF1 Command Register, Msg Number */ +#endif + uint32 IF1MSK; /**< 0x0104: IF1 Mask Register */ + uint32 IF1ARB; /**< 0x0108: IF1 Arbitration Register */ + uint32 IF1MCTL; /**< 0x010C: IF1 Message Control Register */ + uint8 IF1DATx[8U]; /**< 0x0110-0x0114: IF1 Data A and B Registers */ + uint32 rsvd5[2]; /**< 0x0118: Reserved */ +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + uint8 IF2NO; /**< 0x0120: IF2 Command Register, Msg No */ + uint8 IF2STAT; /**< 0x0120: IF2 Command Register, Status */ + uint8 IF2CMD; /**< 0x0120: IF2 Command Register, Command */ + uint8 rsvd10; /**< 0x0120: IF2 Command Register, Reserved */ +#else + uint8 rsvd10; /**< 0x0120: IF2 Command Register, Reserved */ + uint8 IF2CMD; /**< 0x0120: IF2 Command Register, Command */ + uint8 IF2STAT; /**< 0x0120: IF2 Command Register, Status */ + uint8 IF2NO; /**< 0x0120: IF2 Command Register, Msg Number */ +#endif + uint32 IF2MSK; /**< 0x0124: IF2 Mask Register */ + uint32 IF2ARB; /**< 0x0128: IF2 Arbitration Register */ + uint32 IF2MCTL; /**< 0x012C: IF2 Message Control Register */ + uint8 IF2DATx[8U]; /**< 0x0130-0x0134: IF2 Data A and B Registers */ + uint32 rsvd6[2]; /**< 0x0138: Reserved */ + uint32 IF3OBS; /**< 0x0140: IF3 Observation Register */ + uint32 IF3MSK; /**< 0x0144: IF3 Mask Register */ + uint32 IF3ARB; /**< 0x0148: IF3 Arbitration Register */ + uint32 IF3MCTL; /**< 0x014C: IF3 Message Control Register */ + uint8 IF3DATx[8U]; /**< 0x0150-0x0154: IF3 Data A and B Registers */ + uint32 rsvd7[2]; /**< 0x0158: Reserved */ + uint32 IF3UEy[4U]; /**< 0x0160-0x016C: IF3 Update Enable Registers */ + uint32 rsvd8[28]; /**< 0x0170: Reserved */ + uint32 TIOC; /**< 0x01E0: TX IO Control Register */ + uint32 RIOC; /**< 0x01E4: RX IO Control Register */ +} canBASE_t; + + +/** @def canREG1 +* @brief CAN1 Register Frame Pointer +* +* This pointer is used by the CAN driver to access the CAN1 registers. +*/ +#define canREG1 ((canBASE_t *)0xFFF7DC00U) + +/** @def canREG2 +* @brief CAN2 Register Frame Pointer +* +* This pointer is used by the CAN driver to access the CAN2 registers. +*/ +#define canREG2 ((canBASE_t *)0xFFF7DE00U) + +/** @def canREG3 +* @brief CAN3 Register Frame Pointer +* +* This pointer is used by the CAN driver to access the CAN3 registers. +*/ +#define canREG3 ((canBASE_t *)0xFFF7E000U) + +/** @def canRAM1 +* @brief CAN1 Mailbox RAM Pointer +* +* This pointer is used by the CAN driver to access the CAN1 RAM. +*/ +#define canRAM1 (*(volatile uint32 *)0xFF1E0000U) + +/** @def canRAM2 +* @brief CAN2 Mailbox RAM Pointer +* +* This pointer is used by the CAN driver to access the CAN2 RAM. +*/ +#define canRAM2 (*(volatile uint32 *)0xFF1C0000U) + +/** @def canRAM3 +* @brief CAN3 Mailbox RAM Pointer +* +* This pointer is used by the CAN driver to access the CAN3 RAM. +*/ +#define canRAM3 (*(volatile uint32 *)0xFF1A0000U) + +/** @def canPARRAM1 +* @brief CAN1 Mailbox Parity RAM Pointer +* +* This pointer is used by the CAN driver to access the CAN1 Parity RAM +* for testing RAM parity error detect logic. +*/ +#define canPARRAM1 (*(volatile uint32 *)(0xFF1E0000U + 0x10U)) + +/** @def canPARRAM2 +* @brief CAN2 Mailbox Parity RAM Pointer +* +* This pointer is used by the CAN driver to access the CAN2 Parity RAM +* for testing RAM parity error detect logic. +*/ +#define canPARRAM2 (*(volatile uint32 *)(0xFF1C0000U + 0x10U)) + +/** @def canPARRAM3 +* @brief CAN3 Mailbox Parity RAM Pointer +* +* This pointer is used by the CAN driver to access the CAN3 Parity RAM +* for testing RAM parity error detect logic. +*/ +#define canPARRAM3 (*(volatile uint32 *)(0xFF1A0000U + 0x10U)) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_crc.h =================================================================== diff -u --- firmware/include/reg_crc.h (revision 0) +++ firmware/include/reg_crc.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,127 @@ +/** @file reg_crc.h +* @brief CRC Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the CRC driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_CRC_H__ +#define __REG_CRC_H__ + +#include "sys_common.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Crc Register Frame Definition */ +/** @struct crcBase +* @brief CRC Register Frame Definition +* +* This type is used to access the CRC Registers. +*/ +/** @typedef crcBASE_t +* @brief CRC Register Frame Type Definition +* +* This type is used to access the CRC Registers. +*/ +typedef volatile struct crcBase +{ + uint32 CTRL0; /**< 0x0000: Global Control Register 0 >**/ + uint32 rvd1; /**< 0x0004: reserved >**/ + uint32 CTRL1; /**< 0x0008: Global Control Register 1 >**/ + uint32 rvd2; /**< 0x000C: reserved >**/ + uint32 CTRL2; /**< 0x0010: Global Control Register 2 >**/ + uint32 rvd3; /**< 0x0014: reserved >**/ + uint32 INTS; /**< 0x0018: Interrupt Enable Set Register >**/ + uint32 rvd4; /**< 0x001C: reserved >**/ + uint32 INTR; /**< 0x0020: Interrupt Enable Reset Register >**/ + uint32 rvd5; /**< 0x0024: reserved >**/ + uint32 STATUS; /**< 0x0028: Interrupt Status Register >**/ + uint32 rvd6; /**< 0x002C: reserved >**/ + uint32 INT_OFFSET_REG; /**< 0x0030: Interrupt Offset >**/ + uint32 rvd7; /**< 0x0034: reserved >**/ + uint32 BUSY; /**< 0x0038: CRC Busy Register >**/ + uint32 rvd8; /**< 0x003C: reserved >**/ + uint32 PCOUNT_REG1; /**< 0x0040: Pattern Counter Preload Register1 >**/ + uint32 SCOUNT_REG1; /**< 0x0044: Sector Counter Preload Register1 >**/ + uint32 CURSEC_REG1; /**< 0x0048: Current Sector Register 1 >**/ + uint32 WDTOPLD1; /**< 0x004C: Channel 1 Watchdog Timeout Preload Register A >**/ + uint32 BCTOPLD1; /**< 0x0050: Channel 1 Block Complete Timeout Preload Register B >**/ + uint32 rvd9[3]; /**< 0x0054: reserved >**/ + uint32 PSA_SIGREGL1; /**< 0x0060: Channel 1 PSA signature low register >**/ + uint32 PSA_SIGREGH1; /**< 0x0064: Channel 1 PSA signature high register >**/ + uint32 REGL1; /**< 0x0068: Channel 1 CRC value low register >**/ + uint32 REGH1; /**< 0x006C: Channel 1 CRC value high register >**/ + uint32 PSA_SECSIGREGL1; /**< 0x0070: Channel 1 PSA sector signature low register >**/ + uint32 PSA_SECSIGREGH1; /**< 0x0074: Channel 1 PSA sector signature high register >**/ + uint32 RAW_DATAREGL1; /**< 0x0078: Channel 1 Raw Data Low Register >**/ + uint32 RAW_DATAREGH1; /**< 0x007C: Channel 1 Raw Data High Register >**/ + uint32 PCOUNT_REG2; /**< 0x0080: CRC Pattern Counter Preload Register2 >**/ + uint32 SCOUNT_REG2; /**< 0x0084: Sector Counter Preload Register2 >**/ + uint32 CURSEC_REG2; /**< 0x0088: Current Sector Register 2>**/ + uint32 WDTOPLD2; /**< 0x008C: Channel 2 Watchdog Timeout Preload Register A >**/ + uint32 BCTOPLD2; /**< 0x0090: Channel 2 Block Complete Timeout Preload Register B >**/ + uint32 rvd10[3]; /**< 0x0094: reserved >**/ + uint32 PSA_SIGREGL2; /**< 0x00A0: Channel 2 PSA signature low register >**/ + uint32 PSA_SIGREGH2; /**< 0x00A4: Channel 2 PSA signature high register >**/ + uint32 REGL2; /**< 0x00A8: Channel 2 CRC value low register >**/ + uint32 REGH2; /**< 0x00AC: Channel 2 CRC value high register >**/ + uint32 PSA_SECSIGREGL2; /**< 0x00B0: Channel 2 PSA sector signature low register >**/ + uint32 PSA_SECSIGREGH2; /**< 0x00B4: Channel 2 PSA sector signature high register >**/ + uint32 RAW_DATAREGL2; /**< 0x00B8: Channel 2 Raw Data Low Register >**/ + uint32 RAW_DATAREGH2; /**< 0x00BC: Channel 2 Raw Data High Register >**/ +}crcBASE_t; + +/** @def crcREG +* @brief CRC Register Frame Pointer +* +* This pointer is used by the CRC driver to access the CRC registers. +*/ +#define crcREG ((crcBASE_t *)0xFE000000U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_dcc.h =================================================================== diff -u --- firmware/include/reg_dcc.h (revision 0) +++ firmware/include/reg_dcc.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,103 @@ +/** @file reg_dcc.h +* @brief DCC Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the DCC driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_DCC_H__ +#define __REG_DCC_H__ + +#include "sys_common.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Dcc Register Frame Definition */ +/** @struct dccBase +* @brief DCC Base Register Definition +* +* This structure is used to access the DCC module registers. +*/ +/** @typedef dccBASE_t +* @brief DCC Register Frame Type Definition +* +* This type is used to access the DCC Registers. +*/ +typedef volatile struct dccBase +{ + uint32 GCTRL; /**< 0x0000: DCC Control Register */ + uint32 REV; /**< 0x0004: DCC Revision Id Register */ + uint32 CNT0SEED; /**< 0x0008: DCC Counter0 Seed Register */ + uint32 VALID0SEED; /**< 0x000C: DCC Valid0 Seed Register */ + uint32 CNT1SEED; /**< 0x0010: DCC Counter1 Seed Register */ + uint32 STAT; /**< 0x0014: DCC Status Register */ + uint32 CNT0; /**< 0x0018: DCC Counter0 Value Register */ + uint32 VALID0; /**< 0x001C: DCC Valid0 Value Register */ + uint32 CNT1; /**< 0x0020: DCC Counter1 Value Register */ + uint32 CNT1CLKSRC; /**< 0x0024: DCC Counter1 Clock Source Selection Register */ + uint32 CNT0CLKSRC; /**< 0x0028: DCC Counter0 Clock Source Selection Register */ +} dccBASE_t; + + +/** @def dccREG1 +* @brief DCC1 Register Frame Pointer +* +* This pointer is used by the DCC driver to access the dcc2 module registers. +*/ +#define dccREG1 ((dccBASE_t *)0xFFFFEC00U) + + +/** @def dccREG2 +* @brief DCC2 Register Frame Pointer +* +* This pointer is used by the DCC driver to access the dcc2 module registers. +*/ +#define dccREG2 ((dccBASE_t *)0xFFFFF400U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_dma.h =================================================================== diff -u --- firmware/include/reg_dma.h (revision 0) +++ firmware/include/reg_dma.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,185 @@ +/** @file reg_dma.h +* @brief DMA Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* . +* which are relevant for the DMA driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_DMA_H__ +#define __REG_DMA_H__ + +#include "sys_common.h" + +#ifdef __cplusplus +extern "C" { +#endif +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* DMA Register Frame Definition */ +/** @struct dmaBase +* @brief DMA Register Frame Definition +* +* This type is used to access the DMA Registers. +*/ +/** @struct dmaBASE_t +* @brief DMA Register Definition +* +* This structure is used to access the DMA module egisters. +*/ +typedef volatile struct dmaBase +{ + + uint32 GCTRL; /**< 0x0000: Global Control Register */ + uint32 PEND; /**< 0x0004: Channel Pending Register */ + uint32 FBREG; /**< 0x0008: Fall Back Register */ + uint32 DMASTAT; /**< 0x000C: Status Register */ + uint32 rsvd1; /**< 0x0010: Reserved */ + uint32 HWCHENAS; /**< 0x0014: HW Channel Enable Set */ + uint32 rsvd2; /**< 0x0018: Reserved */ + uint32 HWCHENAR; /**< 0x001C: HW Channel Enable Reset */ + uint32 rsvd3; /**< 0x0020: Reserved */ + uint32 SWCHENAS; /**< 0x0024: SW Channel Enable Set */ + uint32 rsvd4; /**< 0x0028: Reserved */ + uint32 SWCHENAR; /**< 0x002C: SW Channel Enable Reset */ + uint32 rsvd5; /**< 0x0030: Reserved */ + uint32 CHPRIOS; /**< 0x0034: Channel Priority Set */ + uint32 rsvd6; /**< 0x0038: Reserved */ + uint32 CHPRIOR; /**< 0x003C: Channel Priority Reset */ + uint32 rsvd7; /**< 0x0040: Reserved */ + uint32 GCHIENAS; /**< 0x0044: Global Channel Interrupt Enable Set */ + uint32 rsvd8; /**< 0x0048: Reserved */ + uint32 GCHIENAR; /**< 0x004C: Global Channel Interrupt Enable Reset */ + uint32 rsvd9; /**< 0x0050: Reserved */ + uint32 DREQASI[8U]; /**< 0x0054 - 0x70: DMA Request Assignment Register */ + uint32 rsvd10[8U]; /**< 0x0074 - 0x90: Reserved */ + uint32 PAR[4U]; /**< 0x0094 - 0xA0: Port Assignment Register */ + uint32 rsvd11[4U]; /**< 0x00A4 - 0xB0: Reserved */ + uint32 FTCMAP; /**< 0x00B4: FTC Interrupt Mapping Register */ + uint32 rsvd12; /**< 0x00B8: Reserved */ + uint32 LFSMAP; /**< 0x00BC: LFS Interrupt Mapping Register */ + uint32 rsvd13; /**< 0x00C0: Reserved */ + uint32 HBCMAP; /**< 0x00C4: HBC Interrupt Mapping Register */ + uint32 rsvd14; /**< 0x00C8: Reserved */ + uint32 BTCMAP; /**< 0x00CC: BTC Interrupt Mapping Register */ + uint32 rsvd15; /**< 0x00D0: Reserved */ + uint32 BERMAP; /**< 0x00D4: BER Interrupt Mapping Register */ + uint32 rsvd16; /**< 0x00D8: Reserved */ + uint32 FTCINTENAS; /**< 0x00DC: FTC Interrupt Enable Set */ + uint32 rsvd17; /**< 0x00E0: Reserved */ + uint32 FTCINTENAR; /**< 0x00E4: FTC Interrupt Enable Reset */ + uint32 rsvd18; /**< 0x00E8: Reserved */ + uint32 LFSINTENAS; /**< 0x00EC: LFS Interrupt Enable Set */ + uint32 rsvd19; /**< 0x00F0: Reserved */ + uint32 LFSINTENAR; /**< 0x00F4: LFS Interrupt Enable Reset */ + uint32 rsvd20; /**< 0x00F8: Reserved */ + uint32 HBCINTENAS; /**< 0x00FC: HBC Interrupt Enable Set */ + uint32 rsvd21; /**< 0x0100: Reserved */ + uint32 HBCINTENAR; /**< 0x0104: HBC Interrupt Enable Reset */ + uint32 rsvd22; /**< 0x0108: Reserved */ + uint32 BTCINTENAS; /**< 0x010C: BTC Interrupt Enable Set */ + uint32 rsvd23; /**< 0x0110: Reserved */ + uint32 BTCINTENAR; /**< 0x0114: BTC Interrupt Enable Reset */ + uint32 rsvd24; /**< 0x0118: Reserved */ + uint32 GINTFLAG; /**< 0x011C: Global Interrupt Flag Register */ + uint32 rsvd25; /**< 0x0120: Reserved */ + uint32 FTCFLAG; /**< 0x0124: FTC Interrupt Flag Register */ + uint32 rsvd26; /**< 0x0128: Reserved */ + uint32 LFSFLAG; /**< 0x012C: LFS Interrupt Flag Register */ + uint32 rsvd27; /**< 0x0130: Reserved */ + uint32 HBCFLAG; /**< 0x0134: HBC Interrupt Flag Register */ + uint32 rsvd28; /**< 0x0138: Reserved */ + uint32 BTCFLAG; /**< 0x013C: BTC Interrupt Flag Register */ + uint32 rsvd29; /**< 0x0140: Reserved */ + uint32 BERFLAG; /**< 0x0144: BER Interrupt Flag Register */ + uint32 rsvd30; /**< 0x0148: Reserved */ + uint32 FTCAOFFSET; /**< 0x014C: FTCA Interrupt Channel Offset Register */ + uint32 LFSAOFFSET; /**< 0x0150: LFSA Interrupt Channel Offset Register */ + uint32 HBCAOFFSET; /**< 0x0154: HBCA Interrupt Channel Offset Register */ + uint32 BTCAOFFSET; /**< 0x0158: BTCA Interrupt Channel Offset Register */ + uint32 BERAOFFSET; /**< 0x015C: BERA Interrupt Channel Offset Register */ + uint32 FTCBOFFSET; /**< 0x0160: FTCB Interrupt Channel Offset Register */ + uint32 LFSBOFFSET; /**< 0x0164: LFSB Interrupt Channel Offset Register */ + uint32 HBCBOFFSET; /**< 0x0168: HBCB Interrupt Channel Offset Register */ + uint32 BTCBOFFSET; /**< 0x016C: BTCB Interrupt Channel Offset Register */ + uint32 BERBOFFSET; /**< 0x0170: BERB Interrupt Channel Offset Register */ + uint32 rsvd31; /**< 0x0174: Reserved */ + uint32 PTCRL; /**< 0x0178: Port Control Register */ + uint32 RTCTRL; /**< 0x017C: RAM Test Control Register */ + uint32 DCTRL; /**< 0x0180: Debug Control */ + uint32 WPR; /**< 0x0184: Watch Point Register */ + uint32 WMR; /**< 0x0188: Watch Mask Register */ + uint32 PAACSADDR; /**< 0x018C: */ + uint32 PAACDADDR; /**< 0x0190: */ + uint32 PAACTC; /**< 0x0194: */ + uint32 PBACSADDR; /**< 0x0198: Port B Active Channel Source Address Register */ + uint32 PBACDADDR; /**< 0x019C: Port B Active Channel Destination Address Register */ + uint32 PBACTC; /**< 0x01A0: Port B Active Channel Transfer Count Register */ + uint32 rsvd32; /**< 0x01A4: Reserved */ + uint32 DMAPCR; /**< 0x01A8: Parity Control Register */ + uint32 DMAPAR; /**< 0x01AC: DMA Parity Error Address Register */ + uint32 DMAMPCTRL; /**< 0x01B0: DMA Memory Protection Control Register */ + uint32 DMAMPST; /**< 0x01B4: DMA Memory Protection Status Register */ + struct + { + uint32 STARTADD; /**< 0x01B8, 0x01C0, 0x01C8, 0x1D0: DMA Memory Protection Region Start Address Register */ + uint32 ENDADD; /**< 0x01B8, 0x01C0, 0x01C8, 0x1D0: DMA Memory Protection Region Start Address Register */ + }DMAMPR[4U]; +} dmaBASE_t; + + +/** @def dmaREG +* @brief DMA1 Register Frame Pointer +* +* This pointer is used by the DMA driver to access the DMA module registers. +*/ +#define dmaREG ((dmaBASE_t *)0xFFFFF000U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +#ifdef __cplusplus +} +#endif + +#endif Index: firmware/include/reg_ecap.h =================================================================== diff -u --- firmware/include/reg_ecap.h (revision 0) +++ firmware/include/reg_ecap.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,159 @@ +/** @file reg_ecap.h +* @brief ECAP Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the ECAP driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_ECAP_H__ +#define __REG_ECAP_H__ + +#include "sys_common.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Ecap Register Frame Definition */ +/** @struct ecapBASE +* @brief ECAP Register Frame Definition +* +* This type is used to access the ECAP Registers. +*/ +/** @typedef ecapBASE_t +* @brief ECAP Register Frame Type Definition +* +* This type is used to access the ECAP Registers. +*/ +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + +typedef volatile struct ecapBASE + { + uint32 TSCTR; /**< 0x0000 Time stamp counter Register*/ + uint32 CTRPHS; /**< 0x0004 Counter phase Register*/ + uint32 CAP1; /**< 0x0008 Capture 1 Register*/ + uint32 CAP2; /**< 0x000C Capture 2 Register*/ + uint32 CAP3; /**< 0x0010 Capture 3 Register*/ + uint32 CAP4; /**< 0x0014 Capture 4 Register*/ + uint16 rsvd1[8U]; /**< 0x0018 Reserved*/ + uint16 ECCTL1; /**< 0x0028 Capture Control Reg 1 Register*/ + uint16 ECCTL2; /**< 0x002A Capture Control Reg 2 Register*/ + uint16 ECEINT; /**< 0x002C Interrupt enable Register*/ + uint16 ECFLG; /**< 0x002E Interrupt flags Register*/ + uint16 ECCLR; /**< 0x0030 Interrupt clear Register*/ + uint16 ECFRC; /**< 0x0032 Interrupt force Register*/ + uint16 rsvd2[6U]; /**< 0x0034 Reserved*/ + +}ecapBASE_t; + +#else + +typedef volatile struct ecapBASE + { + uint32 TSCTR; /**< 0x0000 Time stamp counter Register*/ + uint32 CTRPHS; /**< 0x0004 Counter phase Register*/ + uint32 CAP1; /**< 0x0008 Capture 1 Register*/ + uint32 CAP2; /**< 0x000C Capture 2 Register*/ + uint32 CAP3; /**< 0x0010 Capture 3 Register*/ + uint32 CAP4; /**< 0x0014 Capture 4 Register*/ + uint16 rsvd1[8U]; /**< 0x0018 Reserved*/ + uint16 ECCTL2; /**< 0x002A Capture Control Reg 2 Register*/ + uint16 ECCTL1; /**< 0x0028 Capture Control Reg 1 Register*/ + uint16 ECFLG; /**< 0x002E Interrupt flags Register*/ + uint16 ECEINT; /**< 0x002C Interrupt enable Register*/ + uint16 ECFRC; /**< 0x0032 Interrupt force Register*/ + uint16 ECCLR; /**< 0x0030 Interrupt clear Register*/ + uint16 rsvd2[6U]; /**< 0x0034 Reserved*/ + +}ecapBASE_t; + +#endif +/** @def ecapREG1 +* @brief ECAP1 Register Frame Pointer +* +* This pointer is used by the ECAP driver to access the ECAP1 registers. +*/ +#define ecapREG1 ((ecapBASE_t *)0xFCF79300U) + +/** @def ecapREG2 +* @brief ECAP2 Register Frame Pointer +* +* This pointer is used by the ECAP driver to access the ECAP2 registers. +*/ +#define ecapREG2 ((ecapBASE_t *)0xFCF79400U) + +/** @def ecapREG3 +* @brief ECAP3 Register Frame Pointer +* +* This pointer is used by the ECAP driver to access the ECAP3 registers. +*/ +#define ecapREG3 ((ecapBASE_t *)0xFCF79500U) + +/** @def ecapREG4 +* @brief ECAP4 Register Frame Pointer +* +* This pointer is used by the ECAP driver to access the ECAP4 registers. +*/ +#define ecapREG4 ((ecapBASE_t *)0xFCF79600U) + +/** @def ecapREG5 +* @brief ECAP5 Register Frame Pointer +* +* This pointer is used by the ECAP driver to access the ECAP5 registers. +*/ +#define ecapREG5 ((ecapBASE_t *)0xFCF79700U) + +/** @def ecapREG6 +* @brief ECAP6 Register Frame Pointer +* +* This pointer is used by the ECAP driver to access the ECAP6 registers. +*/ +#define ecapREG6 ((ecapBASE_t *)0xFCF79800U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_efc.h =================================================================== diff -u --- firmware/include/reg_efc.h (revision 0) +++ firmware/include/reg_efc.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,96 @@ +/** @file reg_efc.h +* @brief EFC Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_EFC_H__ +#define __REG_EFC_H__ + +#include "sys_common.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Efc Register Frame Definition */ +/** @struct efcBase +* @brief Efc Register Frame Definition +* +* This type is used to access the Efc Registers. +*/ +/** @typedef efcBASE_t +* @brief Efc Register Frame Type Definition +* +* This type is used to access the Efc Registers. +*/ +typedef volatile struct efcBase +{ + uint32 INSTRUCTION; /* 0x0 INSTRUCTION AN DUMPWORD REGISTER */ + uint32 ADDRESS; /* 0x4 ADDRESS REGISTER */ + uint32 DATA_UPPER; /* 0x8 DATA UPPER REGISTER */ + uint32 DATA_LOWER; /* 0xc DATA LOWER REGISTER */ + uint32 SYSTEM_CONFIG; /* 0x10 SYSTEM CONFIG REGISTER */ + uint32 SYSTEM_STATUS; /* 0x14 SYSTEM STATUS REGISTER */ + uint32 ACCUMULATOR; /* 0x18 ACCUMULATOR REGISTER */ + uint32 BOUNDARY; /* 0x1C BOUNDARY REGISTER */ + uint32 KEY_FLAG; /* 0x20 KEY FLAG REGISTER */ + uint32 KEY; /* 0x24 KEY REGISTER */ + uint32 rsvd1; /* 0x28 RESERVED */ + uint32 PINS; /* 0x2C PINS REGISTER */ + uint32 CRA; /* 0x30 CRA */ + uint32 READ; /* 0x34 READ REGISTER */ + uint32 PROGRAMME; /* 0x38 PROGRAMME REGISTER */ + uint32 ERROR; /* 0x3C ERROR STATUS REGISTER */ + uint32 SINGLE_BIT; /* 0x40 SINGLE BIT ERROR */ + uint32 TWO_BIT_ERROR; /* 0x44 DOUBLE BIT ERROR */ + uint32 SELF_TEST_CYCLES; /* 0x48 SELF TEST CYCLEX */ + uint32 SELF_TEST_SIGN; /* 0x4C SELF TEST SIGNATURE */ +} efcBASE_t; + +#define efcREG ((efcBASE_t *)0xFFF8C000U) +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_eqep.h =================================================================== diff -u --- firmware/include/reg_eqep.h (revision 0) +++ firmware/include/reg_eqep.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,151 @@ +/** @file reg_eqep.h +* @brief EQEP Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the EQEP driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_EQEP_H__ +#define __REG_EQEP_H__ + +#include "sys_common.h" + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Eqep Register Frame Definition */ +/** @struct eqepBASE +* @brief EQEP Register Frame Definition +* +* This type is used to access the EQEP Registers. +*/ +/** @typedef eqepBASE_t +* @brief EQEP Register Frame Type Definition +* +* This type is used to access the EQEP Registers. +*/ +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + +typedef volatile struct eqepBASE +{ + uint32 QPOSCNT; /*< 0x0000 eQEP Position Counter*/ + uint32 QPOSINIT; /*< 0x0004 eQEP Initialization Position Count*/ + uint32 QPOSMAX; /*< 0x0008 eQEP Maximum Position Count*/ + uint32 QPOSCMP; /*< 0x000C eQEP Position Compare*/ + uint32 QPOSILAT; /*< 0x0010 eQEP Index Position Latch*/ + uint32 QPOSSLAT; /*< 0x0014 eQEP Strobe Position Latch*/ + uint32 QPOSLAT; /*< 0x0018 eQEP Position Latch*/ + uint32 QUTMR; /*< 0x001C eQEP Unit Timer*/ + uint32 QUPRD; /*< 0x0020 eQEP Unit Period*/ + uint16 QWDTMR; /*< 0x0024 eQEP Watchdog Timer*/ + uint16 QWDPRD; /*< 0x0026 eQEP Watchdog Period*/ + uint16 QDECCTL; /*< 0x0028 eQEP Decoder Control*/ + uint16 QEPCTL; /*< 0x002A eQEP Control*/ + uint16 QCAPCTL; /*< 0x002C eQEP Capture Control*/ + uint16 QPOSCTL; /*< 0x002E eQEP Position Compare Control*/ + uint16 QEINT; /*< 0x0030 eQEP Interrupt Enable Register*/ + uint16 QFLG; /*< 0x0032 eQEP Interrupt Flag Register*/ + uint16 QCLR; /*< 0x0034 eQEP Interrupt Clear Register*/ + uint16 QFRC; /*< 0x0036 eQEP Interrupt Force Register*/ + uint16 QEPSTS; /*< 0x0038 eQEP Status Register*/ + uint16 QCTMR; /*< 0x003A eQEP Capture Timer*/ + uint16 QCPRD; /*< 0x003C eQEP Capture Period*/ + uint16 QCTMRLAT; /*< 0x003E eQEP Capture Timer Latch*/ + uint16 QCPRDLAT; /*< 0x0040 eQEP Capture Period Latch*/ + uint16 rsvd_1; /*< 0x0042 Reserved*/ +} eqepBASE_t; + +#else + +typedef volatile struct eqepBASE +{ + uint32 QPOSCNT; /*< 0x0000 eQEP Position Counter*/ + uint32 QPOSINIT; /*< 0x0004 eQEP Initialization Position Count*/ + uint32 QPOSMAX; /*< 0x0008 eQEP Maximum Position Count*/ + uint32 QPOSCMP; /*< 0x000C eQEP Position Compare*/ + uint32 QPOSILAT; /*< 0x0010 eQEP Index Position Latch*/ + uint32 QPOSSLAT; /*< 0x0014 eQEP Strobe Position Latch*/ + uint32 QPOSLAT; /*< 0x0018 eQEP Position Latch*/ + uint32 QUTMR; /*< 0x001C eQEP Unit Timer*/ + uint32 QUPRD; /*< 0x0020 eQEP Unit Period*/ + uint16 QWDPRD; /*< 0x0026 eQEP Watchdog Period*/ + uint16 QWDTMR; /*< 0x0024 eQEP Watchdog Timer*/ + uint16 QEPCTL; /*< 0x002A eQEP Control*/ + uint16 QDECCTL; /*< 0x0028 eQEP Decoder Control*/ + uint16 QPOSCTL; /*< 0x002E eQEP Position Compare Control*/ + uint16 QCAPCTL; /*< 0x002C eQEP Capture Control*/ + uint16 QFLG; /*< 0x0032 eQEP Interrupt Flag Register*/ + uint16 QEINT; /*< 0x0030 eQEP Interrupt Enable Register*/ + uint16 QFRC; /*< 0x0036 eQEP Interrupt Force Register*/ + uint16 QCLR; /*< 0x0034 eQEP Interrupt Clear Register*/ + uint16 QCTMR; /*< 0x003A eQEP Capture Timer*/ + uint16 QEPSTS; /*< 0x0038 eQEP Status Register*/ + uint16 QCTMRLAT; /*< 0x003E eQEP Capture Timer Latch*/ + uint16 QCPRD; /*< 0x003C eQEP Capture Period*/ + uint16 rsvd_1; /*< 0x0042 Reserved*/ + uint16 QCPRDLAT; /*< 0x0040 eQEP Capture Period Latch*/ +} eqepBASE_t; + +#endif + +/** @def eqepREG1 +* @brief eQEP1 Register Frame Pointer +* +* This pointer is used by the eQEP driver to access the eQEP1 registers. +*/ +#define eqepREG1 ((eqepBASE_t *)0xFCF79900U) + +/** @def eqepREG2 +* @brief eQEP2 Register Frame Pointer +* +* This pointer is used by the eQEP driver to access the eQEP2 registers. +*/ +#define eqepREG2 ((eqepBASE_t *)0xFCF79A00U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_esm.h =================================================================== diff -u --- firmware/include/reg_esm.h (revision 0) +++ firmware/include/reg_esm.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,106 @@ +/** @file reg_esm.h +* @brief ESM Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the ESM driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_ESM_H__ +#define __REG_ESM_H__ + +#include "sys_common.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Esm Register Frame Definition */ +/** @struct esmBase +* @brief Esm Register Frame Definition +* +* This type is used to access the Esm Registers. +*/ +/** @typedef esmBASE_t +* @brief Esm Register Frame Type Definition +* +* This type is used to access the Esm Registers. +*/ +typedef volatile struct esmBase +{ + uint32 EEPAPR1; /* 0x0000 */ + uint32 DEPAPR1; /* 0x0004 */ + uint32 IESR1; /* 0x0008 */ + uint32 IECR1; /* 0x000C */ + uint32 ILSR1; /* 0x0010 */ + uint32 ILCR1; /* 0x0014 */ + uint32 SR1[3U]; /* 0x0018, 0x001C, 0x0020 */ + uint32 EPSR; /* 0x0024 */ + uint32 IOFFHR; /* 0x0028 */ + uint32 IOFFLR; /* 0x002C */ + uint32 LTCR; /* 0x0030 */ + uint32 LTCPR; /* 0x0034 */ + uint32 EKR; /* 0x0038 */ + uint32 SSR2; /* 0x003C */ + uint32 IEPSR4; /* 0x0040 */ + uint32 IEPCR4; /* 0x0044 */ + uint32 IESR4; /* 0x0048 */ + uint32 IECR4; /* 0x004C */ + uint32 ILSR4; /* 0x0050 */ + uint32 ILCR4; /* 0x0054 */ + uint32 SR4[3U]; /* 0x0058, 0x005C, 0x0060 */ +} esmBASE_t; + +/** @def esmREG +* @brief Esm Register Frame Pointer +* +* This pointer is used by the Esm driver to access the Esm registers. +*/ +#define esmREG ((esmBASE_t *)0xFFFFF500U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_etpwm.h =================================================================== diff -u --- firmware/include/reg_etpwm.h (revision 0) +++ firmware/include/reg_etpwm.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,225 @@ +/** @file reg_etpwm.h +* @brief ETPWM Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the ETPWM driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_ETPWM_H__ +#define __REG_ETPWM_H__ + +#include "sys_common.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* ETPWM Register Frame Definition */ +/** @struct etpwmBASE +* @brief ETPWM Register Frame Definition +* +* This type is used to access the ETPWM Registers. +*/ +/** @typedef etpwmBASE_t +* @brief ETPWM Register Frame Type Definition +* +* This type is used to access the ETPWM Registers. +*/ +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + +typedef volatile struct etpwmBASE +{ + uint16 TBCTL; /**< 0x0000 Time-Base Control Register*/ + uint16 TBSTS; /**< 0x0002 Time-Base Status Register*/ + uint16 rsvd1; /**< 0x0004 Reserved*/ + uint16 TBPHS; /**< 0x0006 Time-Base Phase Register*/ + uint16 TBCTR; /**< 0x0008 Time-Base Counter Register*/ + uint16 TBPRD; /**< 0x000A Time-Base Period Register*/ + uint16 rsvd2; /**< 0x000C Reserved*/ + uint16 CMPCTL; /**< 0x000E Counter-Compare Control Register*/ + uint16 rsvd3; /**< 0x0010 Reserved*/ + uint16 CMPA; /**< 0x0012 Counter-Compare A Register*/ + uint16 CMPB; /**< 0x0014 Counter-Compare B Register*/ + uint16 AQCTLA; /**< 0x0016 Action-Qualifier Control Register for Output A (ETPWMxA)*/ + uint16 AQCTLB; /**< 0x0018 Action-Qualifier Control Register for Output B (ETPWMxB)*/ + uint16 AQSFRC; /**< 0x001A Action-Qualifier Software Force Register*/ + uint16 AQCSFRC; /**< 0x001C Action-Qualifier Continuous S/W Force Register Set*/ + uint16 DBCTL; /**< 0x001E Dead-Band Generator Control Register*/ + uint16 DBRED; /**< 0x0020 Dead-Band Generator Rising Edge Delay Count Register*/ + uint16 DBFED; /**< 0x0022 Dead-Band Generator Falling Edge Delay Count Register*/ + uint16 TZSEL; /**< 0x0024 Trip-Zone Select Register*/ + uint16 TZDCSEL; /**< 0x0026 Trip Zone Digital Compare Select Register*/ + uint16 TZCTL; /**< 0x0028 Trip-Zone Control Register*/ + uint16 TZEINT; /**< 0x002A Trip-Zone Enable Interrupt Register*/ + uint16 TZFLG; /**< 0x002C Trip-Zone Flag Register*/ + uint16 TZCLR; /**< 0x002E Trip-Zone Clear Register*/ + uint16 TZFRC; /**< 0x0030 Trip-Zone Force Register*/ + uint16 ETSEL; /**< 0x0032 Event-Trigger Selection Register*/ + uint16 ETPS; /**< 0x0034 Event-Trigger Pre-Scale Register*/ + uint16 ETFLG; /**< 0x0036 Event-Trigger Flag Register*/ + uint16 ETCLR; /**< 0x0038 Event-Trigger Clear Register*/ + uint16 ETFRC; /**< 0x003A Event-Trigger Force Register*/ + uint16 PCCTL; /**< 0x003C PWM-Chopper Control Register*/ + uint16 rsvd4; /**< 0x003E Reserved*/ + uint16 rsvd5[16U]; /**< 0x0040 Reserved*/ + uint16 DCTRIPSEL; /**< 0x0060 Digital Compare Trip Select Register*/ + uint16 DCACTL; /**< 0x0062 Digital Compare A Control Register*/ + uint16 DCBCTL; /**< 0x0064 Digital Compare B Control Register*/ + uint16 DCFCTL; /**< 0x0066 Digital Compare Filter Control Register*/ + uint16 DCCAPCTL; /**< 0x0068 Digital Compare Capture Control Register*/ + uint16 DCFOFFSET; /**< 0x006A Digital Compare Filter Offset Register*/ + uint16 DCFOFFSETCNT; /**< 0x006C Digital Compare Filter Offset Counter Register*/ + uint16 DCFWINDOW; /**< 0x006E Digital Compare Filter Window Register*/ + uint16 DCFWINDOWCNT; /**< 0x0070 Digital Compare Filter Window Counter Register*/ + uint16 DCCAP; /**< 0x0072 Digital Compare Counter Capture Register*/ +} etpwmBASE_t; + +#else + +typedef volatile struct etpwmBASE +{ + uint16 TBSTS; /**< 0x0000 Time-Base Status Register*/ + uint16 TBCTL; /**< 0x0002 Time-Base Control Register*/ + uint16 TBPHS; /**< 0x0004 Time-Base Phase Register*/ + uint16 rsvd1; /**< 0x0006 Reserved*/ + uint16 TBPRD; /**< 0x0008 Time-Base Period Register*/ + uint16 TBCTR; /**< 0x000A Time-Base Counter Register*/ + uint16 CMPCTL; /**< 0x000C Counter-Compare Control Register*/ + uint16 rsvd2; /**< 0x000E Reserved*/ + uint16 CMPA; /**< 0x0010 Counter-Compare A Register*/ + uint16 rsvd3; /**< 0x0012 Reserved*/ + uint16 AQCTLA; /**< 0x0014 Action-Qualifier Control Register for Output A (ETPWMxA)*/ + uint16 CMPB; /**< 0x0016 Counter-Compare B Register*/ + uint16 AQSFRC; /**< 0x0018 Action-Qualifier Software Force Register*/ + uint16 AQCTLB; /**< 0x001A Action-Qualifier Control Register for Output B (ETPWMxB)*/ + uint16 DBCTL; /**< 0x001C Dead-Band Generator Control Register*/ + uint16 AQCSFRC; /**< 0x001E Action-Qualifier Continuous S/W Force Register Set*/ + uint16 DBFED; /**< 0x0020 Dead-Band Generator Falling Edge Delay Count Register*/ + uint16 DBRED; /**< 0x0022 Dead-Band Generator Rising Edge Delay Count Register*/ + uint16 TZDCSEL; /**< 0x0024 Trip Zone Digital Compare Select Register*/ + uint16 TZSEL; /**< 0x0026 Trip-Zone Select Register*/ + uint16 TZEINT; /**< 0x0028 Trip-Zone Enable Interrupt Register*/ + uint16 TZCTL; /**< 0x002A Trip-Zone Control Register*/ + uint16 TZCLR; /**< 0x002C Trip-Zone Clear Register*/ + uint16 TZFLG; /**< 0x002E Trip-Zone Flag Register*/ + uint16 ETSEL; /**< 0x0030 Event-Trigger Selection Register*/ + uint16 TZFRC; /**< 0x0032 Trip-Zone Force Register*/ + uint16 ETFLG; /**< 0x0034 Event-Trigger Flag Register*/ + uint16 ETPS; /**< 0x0036 Event-Trigger Pre-Scale Register*/ + uint16 ETFRC; /**< 0x0038 Event-Trigger Force Register*/ + uint16 ETCLR; /**< 0x003A Event-Trigger Clear Register*/ + uint16 rsvd4; /**< 0x003C Reserved*/ + uint16 PCCTL; /**< 0x003E PWM-Chopper Control Register*/ + uint16 rsvd5[16U]; /**< 0x0040 Reserved*/ + uint16 DCACTL; /**< 0x0060 Digital Compare A Control Register*/ + uint16 DCTRIPSEL; /**< 0x0062 Digital Compare Trip Select Register*/ + uint16 DCFCTL; /**< 0x0064 Digital Compare Filter Control Register*/ + uint16 DCBCTL; /**< 0x0066 Digital Compare B Control Register*/ + uint16 DCFOFFSET; /**< 0x0068 Digital Compare Filter Offset Register*/ + uint16 DCCAPCTL; /**< 0x006A Digital Compare Capture Control Register*/ + uint16 DCFWINDOW; /**< 0x006C Digital Compare Filter Window Register*/ + uint16 DCFOFFSETCNT; /**< 0x006E Digital Compare Filter Offset Counter Register*/ + uint16 DCCAP; /**< 0x0070 Digital Compare Counter Capture Register*/ + uint16 DCFWINDOWCNT; /**< 0x0072 Digital Compare Filter Window Counter Register*/ +} etpwmBASE_t; + +#endif + + + +/** @def etpwmREG1 +* @brief ETPWM1 Register Frame Pointer +* +* This pointer is used by the ETPWM driver to access the ETPWM1 registers. +*/ +#define etpwmREG1 ((etpwmBASE_t *)0xFCF78C00U) + +/** @def etpwmREG2 +* @brief ETPWM2 Register Frame Pointer +* +* This pointer is used by the ETPWM driver to access the ETPWM2 registers. +*/ +#define etpwmREG2 ((etpwmBASE_t *)0xFCF78D00U) + +/** @def etpwmREG3 +* @brief ETPWM3 Register Frame Pointer +* +* This pointer is used by the ETPWM driver to access the ETPWM3 registers. +*/ +#define etpwmREG3 ((etpwmBASE_t *)0xFCF78E00U) + +/** @def etpwmREG4 +* @brief ETPWM4 Register Frame Pointer +* +* This pointer is used by the ETPWM driver to access the ETPWM4 registers. +*/ +#define etpwmREG4 ((etpwmBASE_t *)0xFCF78F00U) + +/** @def etpwmREG5 +* @brief ETPWM5 Register Frame Pointer +* +* This pointer is used by the ETPWM driver to access the ETPWM5 registers. +*/ +#define etpwmREG5 ((etpwmBASE_t *)0xFCF79000U) + +/** @def etpwmREG6 +* @brief ETPWM6 Register Frame Pointer +* +* This pointer is used by the ETPWM driver to access the ETPWM6 registers. +*/ +#define etpwmREG6 ((etpwmBASE_t *)0xFCF79100U) + +/** @def etpwmREG7 +* @brief ETPWM7 Register Frame Pointer +* +* This pointer is used by the ETPWM driver to access the ETPWM7 registers. +*/ +#define etpwmREG7 ((etpwmBASE_t *)0xFCF79200U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_flash.h =================================================================== diff -u --- firmware/include/reg_flash.h (revision 0) +++ firmware/include/reg_flash.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,134 @@ +/** @file reg_flash.h +* @brief Flash Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_FLASH_H__ +#define __REG_FLASH_H__ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "sys_common.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/* Flash Register Frame Definition */ +/** @struct flashWBase +* @brief Flash Wrapper Register Frame Definition +* +* This type is used to access the Flash Wrapper Registers. +*/ +/** @typedef flashWBASE_t +* @brief Flash Wrapper Register Frame Type Definition +* +* This type is used to access the Flash Wrapper Registers. +*/ +typedef volatile struct flashWBase +{ + uint32 FRDCNTL; /* 0x0000 */ + uint32 rsvd1; /* 0x0004 */ + uint32 FEDACCTRL1; /* 0x0008 */ + uint32 FEDACCTRL2; /* 0x000C */ + uint32 FCORERRCNT; /* 0x0010 */ + uint32 FCORERRADD; /* 0x0014 */ + uint32 FCORERRPOS; /* 0x0018 */ + uint32 FEDACSTATUS; /* 0x001C */ + uint32 FUNCERRADD; /* 0x0020 */ + uint32 FEDACSDIS; /* 0x0024 */ + uint32 FPRIMADDTAG; /* 0x0028 */ + uint32 FREDUADDTAG; /* 0x002C */ + uint32 FBPROT; /* 0x0030 */ + uint32 FBSE; /* 0x0034 */ + uint32 FBBUSY; /* 0x0038 */ + uint32 FBAC; /* 0x003C */ + uint32 FBFALLBACK; /* 0x0040 */ + uint32 FBPRDY; /* 0x0044 */ + uint32 FPAC1; /* 0x0048 */ + uint32 FPAC2; /* 0x004C */ + uint32 FMAC; /* 0x0050 */ + uint32 FMSTAT; /* 0x0054 */ + uint32 FEMUDMSW; /* 0x0058 */ + uint32 FEMUDLSW; /* 0x005C */ + uint32 FEMUECC; /* 0x0060 */ + uint32 FLOCK; /* 0x0064 */ + uint32 FEMUADDR; /* 0x0068 */ + uint32 FDIAGCTRL; /* 0x006C */ + uint32 FRAWDATAH; /* 0x0070 */ + uint32 FRAWDATAL; /* 0x0074 */ + uint32 FRAWECC; /* 0x0078 */ + uint32 FPAROVR; /* 0x007C */ + uint32 rsvd2[16U]; /* 0x009C */ + uint32 FEDACSDIS2; /* 0x00C0 */ + uint32 rsvd3[15U]; /* 0x00C4 */ + uint32 rsvd4[13U]; /* 0x0100 */ + uint32 rsvd5[85U]; /* 0x0134 */ + uint32 FSMWRENA; /* 0x0288 */ + uint32 rsvd6[6U]; /* 0x028C */ + uint32 FSMSECTOR; /* 0x02A4 */ + uint32 rsvd7[4U]; /* 0x02A8 */ + uint32 EEPROMCONFIG; /* 0x02B8 */ + uint32 rsvd8[19U]; /* 0x02BC */ + uint32 EECTRL1; /* 0x0308 */ + uint32 EECTRL2; /* 0x030C */ + uint32 EECORRERRCNT; /* 0x0310 */ + uint32 EECORRERRADD; /* 0x0314 */ + uint32 EECORRERRPOS; /* 0x0318 */ + uint32 EESTATUS; /* 0x031C */ + uint32 EEUNCERRADD; /* 0x0320 */ +} flashWBASE_t; + +/** @def flashWREG +* @brief Flash Wrapper Register Frame Pointer +* +* This pointer is used by the system driver to access the flash wrapper registers. +*/ +#define flashWREG ((flashWBASE_t *)(0xFFF87000U)) + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +#endif Index: firmware/include/reg_gio.h =================================================================== diff -u --- firmware/include/reg_gio.h (revision 0) +++ firmware/include/reg_gio.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,134 @@ +/** @file reg_gio.h +* @brief GIO Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the GIO driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_GIO_H__ +#define __REG_GIO_H__ + +#include "sys_common.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Gio Register Frame Definition */ +/** @struct gioBase +* @brief GIO Base Register Definition +* +* This structure is used to access the GIO module registers. +*/ +/** @typedef gioBASE_t +* @brief GIO Register Frame Type Definition +* +* This type is used to access the GIO Registers. +*/ +typedef volatile struct gioBase +{ + uint32 GCR0; /**< 0x0000: Global Control Register */ + uint32 rsvd; /**< 0x0004: Reserved*/ + uint32 INTDET; /**< 0x0008: Interrupt Detect Register*/ + uint32 POL; /**< 0x000C: Interrupt Polarity Register */ + uint32 ENASET; /**< 0x0010: Interrupt Enable Set Register */ + uint32 ENACLR; /**< 0x0014: Interrupt Enable Clear Register */ + uint32 LVLSET; /**< 0x0018: Interrupt Priority Set Register */ + uint32 LVLCLR; /**< 0x001C: Interrupt Priority Clear Register */ + uint32 FLG; /**< 0x0020: Interrupt Flag Register */ + uint32 OFF1; /**< 0x0024: Interrupt Offset A Register */ + uint32 OFF2; /**< 0x0028: Interrupt Offset B Register */ + uint32 EMU1; /**< 0x002C: Emulation 1 Register */ + uint32 EMU2; /**< 0x0030: Emulation 2 Register */ +} gioBASE_t; + + +/** @struct gioPort +* @brief GIO Port Register Definition +*/ +/** @typedef gioPORT_t +* @brief GIO Port Register Type Definition +* +* This type is used to access the GIO Port Registers. +*/ +typedef volatile struct gioPort +{ + uint32 DIR; /**< 0x0000: Data Direction Register */ + uint32 DIN; /**< 0x0004: Data Input Register */ + uint32 DOUT; /**< 0x0008: Data Output Register */ + uint32 DSET; /**< 0x000C: Data Output Set Register */ + uint32 DCLR; /**< 0x0010: Data Output Clear Register */ + uint32 PDR; /**< 0x0014: Open Drain Register */ + uint32 PULDIS; /**< 0x0018: Pullup Disable Register */ + uint32 PSL; /**< 0x001C: Pull Up/Down Selection Register */ +} gioPORT_t; + + +/** @def gioREG +* @brief GIO Register Frame Pointer +* +* This pointer is used by the GIO driver to access the gio module registers. +*/ +#define gioREG ((gioBASE_t *)0xFFF7BC00U) + +/** @def gioPORTA +* @brief GIO Port (A) Register Pointer +* +* Pointer used by the GIO driver to access PORTA +*/ +#define gioPORTA ((gioPORT_t *)0xFFF7BC34U) + +/** @def gioPORTB +* @brief GIO Port (B) Register Pointer +* +* Pointer used by the GIO driver to access PORTB +*/ +#define gioPORTB ((gioPORT_t *)0xFFF7BC54U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_het.h =================================================================== diff -u --- firmware/include/reg_het.h (revision 0) +++ firmware/include/reg_het.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,203 @@ +/** @file reg_het.h +* @brief HET Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the HET driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_HET_H__ +#define __REG_HET_H__ + +#include "sys_common.h" +#include "reg_gio.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Het Register Frame Definition */ +/** @struct hetBase +* @brief HET Base Register Definition +* +* This structure is used to access the HET module registers. +*/ +/** @typedef hetBASE_t +* @brief HET Register Frame Type Definition +* +* This type is used to access the HET Registers. +*/ + +typedef volatile struct hetBase +{ + uint32 GCR; /**< 0x0000: Global control register */ + uint32 PFR; /**< 0x0004: Prescale factor register */ + uint32 ADDR; /**< 0x0008: Current address register */ + uint32 OFF1; /**< 0x000C: Interrupt offset register 1 */ + uint32 OFF2; /**< 0x0010: Interrupt offset register 2 */ + uint32 INTENAS; /**< 0x0014: Interrupt enable set register */ + uint32 INTENAC; /**< 0x0018: Interrupt enable clear register */ + uint32 EXC1; /**< 0x001C: Exception control register 1 */ + uint32 EXC2; /**< 0x0020: Exception control register 2 */ + uint32 PRY; /**< 0x0024: Interrupt priority register */ + uint32 FLG; /**< 0x0028: Interrupt flag register */ + uint32 AND; /**< 0x002C: AND share control register */ + uint32 rsvd1; /**< 0x0030: Reserved */ + uint32 HRSH; /**< 0x0034: High resolution share register */ + uint32 XOR; /**< 0x0038: XOR share register */ + uint32 REQENS; /**< 0x003C: Request enable set register */ + uint32 REQENC; /**< 0x0040: Request enable clear register */ + uint32 REQDS; /**< 0x0044: Request destination select register */ + uint32 rsvd2; /**< 0x0048: Reserved */ + uint32 DIR; /**< 0x004C: Direction register */ + uint32 DIN; /**< 0x0050: Data input register */ + uint32 DOUT; /**< 0x0054: Data output register */ + uint32 DSET; /**< 0x0058: Data output set register */ + uint32 DCLR; /**< 0x005C: Data output clear register */ + uint32 PDR; /**< 0x0060: Open drain register */ + uint32 PULDIS; /**< 0x0064: Pull disable register */ + uint32 PSL; /**< 0x0068: Pull select register */ + uint32 rsvd3; /**< 0x006C: Reserved */ + uint32 rsvd4; /**< 0x0070: Reserved */ + uint32 PCR; /**< 0x0074: Parity control register */ + uint32 PAR; /**< 0x0078: Parity address register */ + uint32 PPR; /**< 0x007C: Parity pin select register */ + uint32 SFPRLD; /**< 0x0080: Suppression filter preload register */ + uint32 SFENA; /**< 0x0084: Suppression filter enable register */ + uint32 rsvd5; /**< 0x0088: Reserved */ + uint32 LBPSEL; /**< 0x008C: Loop back pair select register */ + uint32 LBPDIR; /**< 0x0090: Loop back pair direction register */ + uint32 PINDIS; /**< 0x0094: Pin disable register */ +} hetBASE_t; + + +/** @struct hetInstructionBase +* @brief HET Instruction Definition +* +* This structure is used to access the HET RAM. +*/ +/** @typedef hetINSTRUCTION_t +* @brief HET Instruction Type Definition +* +* This type is used to access a HET Instruction. +*/ +typedef volatile struct hetInstructionBase +{ + uint32 Program; + uint32 Control; + uint32 Data; + uint32 rsvd1; +} hetINSTRUCTION_t; + + +/** @struct hetRamBase +* @brief HET RAM Definition +* +* This structure is used to access the HET RAM. +*/ +/** @typedef hetRAMBASE_t +* @brief HET RAM Type Definition +* +* This type is used to access the HET RAM. +*/ +typedef volatile struct het1RamBase +{ + hetINSTRUCTION_t Instruction[160U]; +} hetRAMBASE_t; + + +/** @def hetREG1 +* @brief HET Register Frame Pointer +* +* This pointer is used by the HET driver to access the het module registers. +*/ +#define hetREG1 ((hetBASE_t *)0xFFF7B800U) + + +/** @def hetPORT1 +* @brief HET GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of HET1 +* (use the GIO drivers to access the port pins). +*/ +#define hetPORT1 ((gioPORT_t *)0xFFF7B84CU) + +/** @def hetRAM1 +* @brief NHET1 RAM Pointer +* +* This pointer is used by the HET driver to access the NHET1 memory. +*/ +#define hetRAM1 ((hetRAMBASE_t *)0xFF460000U) + +#define NHET1RAMPARLOC (*(volatile uint32 *)0xFF462000U) +#define NHET1RAMLOC (*(volatile uint32 *)0xFF460000U) + +/** @def hetREG2 +* @brief HET2 Register Frame Pointer +* +* This pointer is used by the HET driver to access the het module registers. +*/ +#define hetREG2 ((hetBASE_t *)0xFFF7B900U) + +/** @def hetPORT2 +* @brief HET2 GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of HET2 +* (use the GIO drivers to access the port pins). +*/ +#define hetPORT2 ((gioPORT_t *)0xFFF7B94CU) + +/** @def hetRAM2 +* @brief NHET1 RAM Pointer +* +* This pointer is used by the HET driver to access the NHET2 memory. +*/ +#define hetRAM2 ((hetRAMBASE_t *)0xFF440000U) + +#define NHET2RAMPARLOC (*(volatile uint32 *)0xFF442000U) +#define NHET2RAMLOC (*(volatile uint32 *)0xFF440000U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_htu.h =================================================================== diff -u --- firmware/include/reg_htu.h (revision 0) +++ firmware/include/reg_htu.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,141 @@ +/** @file reg_htu.h +* @brief HTU Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the HTU driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_HTU_H__ +#define __REG_HTU_H__ + +#include "sys_common.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* htu Register Frame Definition */ +/** @struct htuBase +* @brief HTU Base Register Definition +* +* This structure is used to access the HTU module registers. +*/ +/** @typedef htuBASE_t +* @brief HTU Register Frame Type Definition +* +* This type is used to access the HTU Registers. +*/ +typedef volatile struct htuBase +{ + uint32 GC; /** 0x00 */ + uint32 CPENA; /** 0x04 */ + uint32 BUSY0; /** 0x08 */ + uint32 BUSY1; /** 0x0C */ + uint32 BUSY2; /** 0x10 */ + uint32 BUSY3; /** 0x14 */ + uint32 ACPE; /** 0x18 */ + uint32 rsvd1; /** 0x1C */ + uint32 RLBECTRL; /** 0x20 */ + uint32 BFINTS; /** 0x24 */ + uint32 BFINTC; /** 0x28 */ + uint32 INTMAP; /** 0x2C */ + uint32 rsvd2; /** 0x30 */ + uint32 INTOFF0; /** 0x34 */ + uint32 INTOFF1; /** 0x38 */ + uint32 BIM; /** 0x3C */ + uint32 RLOSTFL; /** 0x40 */ + uint32 BFINTFL; /** 0x44 */ + uint32 BERINTFL; /** 0x48 */ + uint32 MP1S; /** 0x4C */ + uint32 MP1E; /** 0x50 */ + uint32 DCTRL; /** 0x54 */ + uint32 WPR; /** 0x58 */ + uint32 WMR; /** 0x5C */ + uint32 ID; /** 0x60 */ + uint32 PCR; /** 0x64 */ + uint32 PAR; /** 0x68 */ + uint32 rsvd3; /** 0x6C */ + uint32 MPCS; /** 0x70 */ + uint32 MP0S; /** 0x74 */ + uint32 MP0E; /** 0x78 */ +} htuBASE_t; + +typedef volatile struct +{ + struct /* 0x00-0x7C */ + { + uint32 IFADDRA; + uint32 IFADDRB; + uint32 IHADDRCT; + uint32 ITCOUNT; + }DCP[8U]; + + struct /* 0x80-0xFC */ + { + uint32 res[32U]; + } RESERVED; + + struct /* 0x100-0x17C */ + { + uint32 CFADDRA; + uint32 CFADDRB; + uint32 CFCOUNT; + uint32 rsvd4; + }CDCP[8U]; + +} htuRAMBASE_t; + +#define htuREG1 ((htuBASE_t *)0xFFF7A400U) +#define htuREG2 ((htuBASE_t *)0xFFF7A500U) + +#define htuRAM1 ((htuRAMBASE_t *)0xFF4E0000U) +#define htuRAM2 ((htuRAMBASE_t *)0xFF4C0000U) + + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_i2c.h =================================================================== diff -u --- firmware/include/reg_i2c.h (revision 0) +++ firmware/include/reg_i2c.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,147 @@ +/** @file reg_i2c.h +* @brief I2C Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the I2C driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_I2C_H__ +#define __REG_I2C_H__ + +#include "sys_common.h" +#include "reg_gio.h" + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* I2c Register Frame Definition */ +/** @struct i2cBase +* @brief I2C Base Register Definition +* +* This structure is used to access the I2C module registers. +*/ +/** @typedef i2cBASE_t +* @brief I2C Register Frame Type Definition +* +* This type is used to access the I2C Registers. +*/ +typedef volatile struct i2cBase +{ + + uint32 OAR; /**< 0x0000 I2C Own Address register */ + uint32 IMR; /**< 0x0004 I2C Interrupt Mask/Status register */ + uint32 STR; /**< 0x0008 I2C Interrupt Status register */ + uint32 CKL; /**< 0x000C I2C Clock Divider Low register */ + uint32 CKH; /**< 0x0010 I2C Clock Divider High register */ + uint32 CNT; /**< 0x0014 I2C Data Count register */ +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + uint8 DRR; /**< 0x0018: I2C Data Receive register, */ + uint8 rsvd1; /**< 0x0018: I2C Data Receive register, Reserved */ + uint8 rsvd2; /**< 0x0018: I2C Data Receive register, Reserved */ + uint8 rsvd3; /**< 0x0018: I2C Data Receive register, Reserved */ +#else + uint8 rsvd3; /**< 0x0018: I2C Data Receive register, Reserved */ + uint8 rsvd2; /**< 0x0018: I2C Data Receive register, Reserved */ + uint8 rsvd1; /**< 0x0018: I2C Data Receive register, Reserved */ + uint8 DRR; /**< 0x0018: I2C Data Receive register, */ +#endif + uint32 SAR; /**< 0x001C I2C Slave Address register */ +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + uint8 DXR; /**< 0x0020: I2C Data Transmit register, */ + uint8 rsvd4; /**< 0x0020: I2C Data Transmit register, Reserved */ + uint8 rsvd5; /**< 0x0020: I2C Data Transmit register, Reserved */ + uint8 rsvd6; /**< 0x0020: I2C Data Transmit register, Reserved */ +#else + uint8 rsvd6; /**< 0x0020: I2C Data Transmit register, Reserved */ + uint8 rsvd5; /**< 0x0020: I2C Data Transmit register, Reserved */ + uint8 rsvd4; /**< 0x0020: I2C Data Transmit register, Reserved */ + uint8 DXR; /**< 0x0020: I2C Data Transmit register, */ +#endif + uint32 MDR; /**< 0x0024 I2C Mode register */ + uint32 IVR; /**< 0x0028 I2C Interrupt Vector register */ + uint32 EMDR; /**< 0x002C I2C Extended Mode register */ + uint32 PSC; /**< 0x0030 I2C Prescaler register */ + uint32 PID11; /**< 0x0034 I2C Peripheral ID register 1 */ + uint32 PID12; /**< 0x0038 I2C Peripheral ID register 2 */ + uint32 DMACR; /**< 0x003C I2C DMA Control Register */ + uint32 rsvd7; /**< 0x0040 Reserved */ + uint32 rsvd8; /**< 0x0044 Reserved */ + uint32 PFNC; /**< 0x0048 Pin Function Register */ + uint32 DIR; /**< 0x004C Pin Direction Register */ + uint32 DIN; /**< 0x0050 Pin Data In Register */ + uint32 DOUT; /**< 0x0054 Pin Data Out Register */ + uint32 SET; /**< 0x0058 Pin Data Set Register */ + uint32 CLR; /**< 0x005C Pin Data Clr Register */ + uint32 PDR; /**< 0x0060 Pin Open Drain Output Enable Register */ + uint32 PDIS; /**< 0x0064 Pin Pullup/Pulldown Disable Register */ + uint32 PSEL; /**< 0x0068 Pin Pullup/Pulldown Selection Register */ + uint32 PSRS; /**< 0x006C Pin Slew Rate Select Register */ +} i2cBASE_t; + + +/** @def i2cREG1 +* @brief I2C Register Frame Pointer +* +* This pointer is used by the I2C driver to access the I2C module registers. +*/ +#define i2cREG1 ((i2cBASE_t *)0xFFF7D400U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +/** @def i2cPORT1 +* @brief I2C GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of I2C +* (use the GIO drivers to access the port pins). +*/ +#define i2cPORT1 ((gioPORT_t *)0xFFF7D44CU) + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_lin.h =================================================================== diff -u --- firmware/include/reg_lin.h (revision 0) +++ firmware/include/reg_lin.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,129 @@ +/** @file reg_lin.h +* @brief LIN Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the LIN driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_LIN_H__ +#define __REG_LIN_H__ + +#include "sys_common.h" +#include "reg_gio.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Lin Register Frame Definition */ +/** @struct linBase +* @brief LIN Base Register Definition +* +* This structure is used to access the LIN module registers. +*/ +/** @typedef linBASE_t +* @brief LIN Register Frame Type Definition +* +* This type is used to access the LIN Registers. +*/ + +typedef volatile struct linBase +{ + uint32 GCR0; /**< 0x0000: Global control register 0 */ + uint32 GCR1; /**< 0x0004: Global control register 1 */ + uint32 GCR2; /**< 0x0008: Global control register 2 */ + uint32 SETINT; /**< 0x000C: Set interrupt enable register */ + uint32 CLEARINT; /**< 0x0010: Clear interrupt enable register */ + uint32 SETINTLVL; /**< 0x0014: Set interrupt level register */ + uint32 CLEARINTLVL; /**< 0x0018: Set interrupt level register */ + uint32 FLR; /**< 0x001C: interrupt flag register */ + uint32 INTVECT0; /**< 0x0020: interrupt vector Offset 0 */ + uint32 INTVECT1; /**< 0x0024: interrupt vector Offset 1 */ + uint32 FORMAT; /**< 0x0028: Format Control Register */ + uint32 BRS; /**< 0x002C: Baud rate selection register */ + uint32 ED; /**< 0x0030: Emulation register */ + uint32 RD; /**< 0x0034: Receive data register */ + uint32 TD; /**< 0x0038: Transmit data register */ + uint32 PIO0; /**< 0x003C: Pin function register */ + uint32 PIO1; /**< 0x0040: Pin direction register */ + uint32 PIO2; /**< 0x0044: Pin data in register */ + uint32 PIO3; /**< 0x0048: Pin data out register */ + uint32 PIO4; /**< 0x004C: Pin data set register */ + uint32 PIO5; /**< 0x0050: Pin data clr register */ + uint32 PIO6; /**< 0x0054: Pin open drain output enable register */ + uint32 PIO7; /**< 0x0058: Pin pullup/pulldown disable register */ + uint32 PIO8; /**< 0x005C: Pin pullup/pulldown selection register */ + uint32 COMP; /**< 0x0060: Compare register */ + uint8 RDx[8U]; /**< 0x0064-0x0068: RX buffer register */ + uint32 MASK; /**< 0x006C: Mask register */ + uint32 ID; /**< 0x0070: Identification Register */ + uint8 TDx[8U]; /**< 0x0074-0x0078: TX buffer register */ + uint32 MBRSR; /**< 0x007C: Maximum baud rate selection register */ + uint32 rsvd1[4U]; /**< 0x0080 - 0x8C: Reserved */ + uint32 IODFTCTRL; /**< 0x0090: IODFT loopback register */ +} linBASE_t; + + +/** @def linREG +* @brief LIN Register Frame Pointer +* +* This pointer is used by the LIN driver to access the lin module registers. +*/ +#define linREG ((linBASE_t *)0xFFF7E400U) + + +/** @def linPORT +* @brief LIN GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of LIN +* (use the GIO drivers to access the port pins). +*/ +#define linPORT ((gioPORT_t *)0xFFF7E440U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_mibspi.h =================================================================== diff -u --- firmware/include/reg_mibspi.h (revision 0) +++ firmware/include/reg_mibspi.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,257 @@ +/** @file reg_mibspi.h +* @brief MIBSPI Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the MIBSPI driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_MIBSPI_H__ +#define __REG_MIBSPI_H__ + +#include "sys_common.h" +#include "reg_gio.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Mibspi Register Frame Definition */ +/** @struct mibspiBase +* @brief MIBSPI Register Definition +* +* This structure is used to access the MIBSPI module registers. +*/ +/** @typedef mibspiBASE_t +* @brief MIBSPI Register Frame Type Definition +* +* This type is used to access the MIBSPI Registers. +*/ +typedef volatile struct mibspiBase +{ + uint32 GCR0; /**< 0x0000: Global Control 0 */ + uint32 GCR1; /**< 0x0004: Global Control 1 */ + uint32 INT0; /**< 0x0008: Interrupt Register */ + uint32 LVL; /**< 0x000C: Interrupt Level */ + uint32 FLG; /**< 0x0010: Interrupt flags */ + uint32 PC0; /**< 0x0014: Function Pin Enable */ + uint32 PC1; /**< 0x0018: Pin Direction */ + uint32 PC2; /**< 0x001C: Pin Input Latch */ + uint32 PC3; /**< 0x0020: Pin Output Latch */ + uint32 PC4; /**< 0x0024: Output Pin Set */ + uint32 PC5; /**< 0x0028: Output Pin Clr */ + uint32 PC6; /**< 0x002C: Open Drain Output Enable */ + uint32 PC7; /**< 0x0030: Pullup/Pulldown Disable */ + uint32 PC8; /**< 0x0034: Pullup/Pulldown Selection */ + uint32 DAT0; /**< 0x0038: Transmit Data */ + uint32 DAT1; /**< 0x003C: Transmit Data with Format and Chip Select */ + uint32 BUF; /**< 0x0040: Receive Buffer */ + uint32 EMU; /**< 0x0044: Emulation Receive Buffer */ + uint32 DELAY; /**< 0x0048: Delays */ + uint32 DEF; /**< 0x004C: Default Chip Select */ + uint32 FMT0; /**< 0x0050: Data Format 0 */ + uint32 FMT1; /**< 0x0054: Data Format 1 */ + uint32 FMT2; /**< 0x0058: Data Format 2 */ + uint32 FMT3; /**< 0x005C: Data Format 3 */ + uint32 INTVECT0; /**< 0x0060: Interrupt Vector 0 */ + uint32 INTVECT1; /**< 0x0064: Interrupt Vector 1 */ + uint32 SRSEL; /**< 0x0068: Slew Rate Select */ + uint32 PMCTRL; /**< 0x006C: Parallel Mode Control */ + uint32 MIBSPIE; /**< 0x0070: Multi-buffer Mode Enable */ + uint32 TGITENST; /**< 0x0074: TG Interrupt Enable Set */ + uint32 TGITENCR; /**< 0x0078: TG Interrupt Enable Clear */ + uint32 TGITLVST; /**< 0x007C: Transfer Group Interrupt Level Set */ + uint32 TGITLVCR; /**< 0x0080: Transfer Group Interrupt Level Clear */ + uint32 TGINTFLG; /**< 0x0084: Transfer Group Interrupt Flag */ + uint32 rsvd1[2U]; /**< 0x0088: Reserved */ + uint32 TICKCNT; /**< 0x0090: Tick Counter */ + uint32 LTGPEND; /**< 0x0090: Last TG End Pointer */ + uint32 TGCTRL[16U]; /**< 0x0098 - 0x00D4: Transfer Group Control */ + uint32 DMACTRL[8U]; /**< 0x00D8 - 0x00F4: DMA Control */ + uint32 DMACOUNT[8U]; /**< 0x00F8 - 0x0114: DMA Count */ + uint32 DMACNTLEN; /**< 0x0118 - 0x0114: DMA Control length */ + uint32 rsvd2; /**< 0x011C: Reserved */ + uint32 UERRCTRL; /**< 0x0120: Multi-buffer RAM Uncorrectable Parity Error Control */ + uint32 UERRSTAT; /**< 0x0124: Multi-buffer RAM Uncorrectable Parity Error Status */ + uint32 UERRADDRRX; /**< 0x0128: RXRAM Uncorrectable Parity Error Address */ + uint32 UERRADDRTX; /**< 0x012C: TXRAM Uncorrectable Parity Error Address */ + uint32 RXOVRN_BUF_ADDR; /**< 0x0130: RXRAM Overrun Buffer Address */ + uint32 IOLPKTSTCR; /**< 0x0134: IO loopback */ + uint32 EXT_PRESCALE1; /**< 0x0138: */ + uint32 EXT_PRESCALE2; /**< 0x013C: */ +} mibspiBASE_t; + + +/** @def mibspiREG1 +* @brief MIBSPI1 Register Frame Pointer +* +* This pointer is used by the MIBSPI driver to access the mibspi module registers. +*/ +#define mibspiREG1 ((mibspiBASE_t *)0xFFF7F400U) + + +/** @def mibspiPORT1 +* @brief MIBSPI1 GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of MIBSPI1 +* (use the GIO drivers to access the port pins). +*/ +#define mibspiPORT1 ((gioPORT_t *)0xFFF7F418U) + +/** @def mibspiREG3 +* @brief MIBSPI3 Register Frame Pointer +* +* This pointer is used by the MIBSPI driver to access the mibspi module registers. +*/ +#define mibspiREG3 ((mibspiBASE_t *)0xFFF7F800U) + + +/** @def mibspiPORT3 +* @brief MIBSPI3 GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of MIBSPI3 +* (use the GIO drivers to access the port pins). +*/ +#define mibspiPORT3 ((gioPORT_t *)0xFFF7F818U) + +/** @def mibspiREG5 +* @brief MIBSPI5 Register Frame Pointer +* +* This pointer is used by the MIBSPI driver to access the mibspi module registers. +*/ +#define mibspiREG5 ((mibspiBASE_t *)0xFFF7FC00U) + + +/** @def mibspiPORT5 +* @brief MIBSPI5 GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of MIBSPI5 +* (use the GIO drivers to access the port pins). +*/ +#define mibspiPORT5 ((gioPORT_t *)0xFFF7FC18U) + + +/** @struct mibspiRamBase +* @brief MIBSPI Buffer RAM Definition +* +* This structure is used to access the MIBSPI buffer memory. +*/ +/** @typedef mibspiRAM_t +* @brief MIBSPI RAM Type Definition +* +* This type is used to access the MIBSPI RAM. +*/ +typedef volatile struct mibspiRamBase +{ + struct + { +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + uint16 data; /**< tx buffer data */ + uint16 control; /**< tx buffer control */ +#else + uint16 control; /**< tx buffer control */ + uint16 data; /**< tx buffer data */ +#endif + } tx[128]; + struct + { +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + uint16 data; /**< rx buffer data */ + uint16 flags; /**< rx buffer flags */ +#else + uint16 flags; /**< rx buffer flags */ + uint16 data; /**< rx buffer data */ +#endif + } rx[128]; +} mibspiRAM_t; + + +/** @def mibspiRAM1 +* @brief MIBSPI1 Buffer RAM Pointer +* +* This pointer is used by the MIBSPI driver to access the mibspi buffer memory. +*/ +#define mibspiRAM1 ((mibspiRAM_t *)0xFF0E0000U) + +/** @def mibspiRAM3 +* @brief MIBSPI3 Buffer RAM Pointer +* +* This pointer is used by the MIBSPI driver to access the mibspi buffer memory. +*/ +#define mibspiRAM3 ((mibspiRAM_t *)0xFF0C0000U) + +/** @def mibspiRAM5 +* @brief MIBSPI5 Buffer RAM Pointer +* +* This pointer is used by the MIBSPI driver to access the mibspi buffer memory. +*/ +#define mibspiRAM5 ((mibspiRAM_t *)0xFF0A0000U) + +/** @def mibspiPARRAM1 +* @brief MIBSPI1 Buffer RAM PARITY Pointer +* +* This pointer is used by the MIBSPI driver to access the mibspi buffer memory. +*/ +#define mibspiPARRAM1 (*(volatile uint32 *)(0xFF0E0000U + 0x00000400U)) + +/** @def mibspiPARRAM3 +* @brief MIBSPI3 Buffer RAM PARITY Pointer +* +* This pointer is used by the MIBSPI driver to access the mibspi buffer memory. +*/ +#define mibspiPARRAM3 (*(volatile uint32 *)(0xFF0C0000U + 0x00000400U)) + + +/** @def mibspiPARRAM5 +* @brief MIBSPI5 Buffer RAM PARITY Pointer +* +* This pointer is used by the MIBSPI driver to access the mibspi buffer memory. +*/ +#define mibspiPARRAM5 (*(volatile uint32 *)(0xFF0A0000U + 0x00000400U)) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_pbist.h =================================================================== diff -u --- firmware/include/reg_pbist.h (revision 0) +++ firmware/include/reg_pbist.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,98 @@ +/** @file reg_pbist.h +* @brief PBIST Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_PBIST_H__ +#define __REG_PBIST_H__ + +#include "sys_common.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* PBIST Register Frame Definition */ +/** @struct pbistBase +* @brief PBIST Base Register Definition +* +* This structure is used to access the PBIST module registers. +*/ +/** @typedef pbistBASE_t +* @brief PBIST Register Frame Type Definition +* +* This type is used to access the PBIST Registers. +*/ +typedef volatile struct pbistBase +{ + uint32 RAMT; /* 0x0160: RAM Configuration Register */ + uint32 DLR; /* 0x0164: Datalogger Register */ + uint32 rsvd1[6U]; /* 0x0168 */ + uint32 PACT; /* 0x0180: PBIST Activate Register */ + uint32 PBISTID; /* 0x0184: PBIST ID Register */ + uint32 OVER; /* 0x0188: Override Register */ + uint32 rsvd2; /* 0x018C */ + uint32 FSRF0; /* 0x0190: Fail Status Fail Register 0 */ + uint32 rsvd5; /* 0x0194 */ + uint32 FSRC0; /* 0x0198: Fail Status Count Register 0 */ + uint32 FSRC1; /* 0x019C: Fail Status Count Register 1 */ + uint32 FSRA0; /* 0x01A0: Fail Status Address 0 Register */ + uint32 FSRA1; /* 0x01A4: Fail Status Address 1 Register */ + uint32 FSRDL0; /* 0x01A8: Fail Status Data Register 0 */ + uint32 rsvd3; /* 0x01AC */ + uint32 FSRDL1; /* 0x01B0: Fail Status Data Register 1 */ + uint32 rsvd4[3U]; /* 0x01B4 */ + uint32 ROM; /* 0x01C0: ROM Mask Register */ + uint32 ALGO; /* 0x01C4: Algorithm Mask Register */ + uint32 RINFOL; /* 0x01C8: RAM Info Mask Lower Register */ + uint32 RINFOU; /* 0x01CC: RAM Info Mask Upper Register */ +} pbistBASE_t; + +#define pbistREG ((pbistBASE_t *)0xFFFFE560U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_pcr.h =================================================================== diff -u --- firmware/include/reg_pcr.h (revision 0) +++ firmware/include/reg_pcr.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,113 @@ +/** @file reg_pcr.h +* @brief PCR Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_PCR_H__ +#define __REG_PCR_H__ + +#include "sys_common.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Pcr Register Frame Definition */ +/** @struct pcrBase +* @brief Pcr Register Frame Definition +* +* This type is used to access the Pcr Registers. +*/ +/** @typedef pcrBASE_t +* @brief PCR Register Frame Type Definition +* +* This type is used to access the PCR Registers. +*/ +typedef volatile struct pcrBase +{ + uint32 PMPROTSET0; /* 0x0000 */ + uint32 PMPROTSET1; /* 0x0004 */ + uint32 rsvd1[2U]; /* 0x0008 */ + uint32 PMPROTCLR0; /* 0x0010 */ + uint32 PMPROTCLR1; /* 0x0014 */ + uint32 rsvd2[2U]; /* 0x0018 */ + uint32 PPROTSET0; /* 0x0020 */ + uint32 PPROTSET1; /* 0x0024 */ + uint32 PPROTSET2; /* 0x0028 */ + uint32 PPROTSET3; /* 0x002C */ + uint32 rsvd3[4U]; /* 0x0030 */ + uint32 PPROTCLR0; /* 0x0040 */ + uint32 PPROTCLR1; /* 0x0044 */ + uint32 PPROTCLR2; /* 0x0048 */ + uint32 PPROTCLR3; /* 0x004C */ + uint32 rsvd4[4U]; /* 0x0050 */ + uint32 PCSPWRDWNSET0; /* 0x0060 */ + uint32 PCSPWRDWNSET1; /* 0x0064 */ + uint32 rsvd5[2U]; /* 0x0068 */ + uint32 PCSPWRDWNCLR0; /* 0x0070 */ + uint32 PCSPWRDWNCLR1; /* 0x0074 */ + uint32 rsvd6[2U]; /* 0x0078 */ + uint32 PSPWRDWNSET0; /* 0x0080 */ + uint32 PSPWRDWNSET1; /* 0x0084 */ + uint32 PSPWRDWNSET2; /* 0x0088 */ + uint32 PSPWRDWNSET3; /* 0x008C */ + uint32 rsvd7[4U]; /* 0x0090 */ + uint32 PSPWRDWNCLR0; /* 0x00A0 */ + uint32 PSPWRDWNCLR1; /* 0x00A4 */ + uint32 PSPWRDWNCLR2; /* 0x00A8 */ + uint32 PSPWRDWNCLR3; /* 0x00AC */ +} pcrBASE_t; + +/** @def pcrREG +* @brief Pcr Register Frame Pointer +* +* This pointer is used by the system driver to access the Pcr registers. +*/ +#define pcrREG ((pcrBASE_t *)0xFFFFE000U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_pinmux.h =================================================================== diff -u --- firmware/include/reg_pinmux.h (revision 0) +++ firmware/include/reg_pinmux.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,180 @@ +/** @file reg_pinmux.h +* @brief PINMUX Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the PINMUX driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_PINMUX_H__ +#define __REG_PINMUX_H__ + +#include "sys_common.h" + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* IOMM Revision and Boot Register */ +#define REVISION_REG (*(volatile uint32 *)0xFFFFEA00U) +#define ENDIAN_REG (*(volatile uint32 *)0xFFFFEA20U) + +/* IOMM Error and Fault Registers */ +/** @struct iommErrFault +* @brief IOMM Error and Fault Register Definition +* +* This structure is used to access the IOMM Error and Fault registers. +*/ +typedef volatile struct iommErrFault +{ + uint32 ERR_RAW_STATUS_REG; /* Error Raw Status / Set Register */ + uint32 ERR_ENABLED_STATUS_REG; /* Error Enabled Status / Clear Register */ + uint32 ERR_ENABLE_REG; /* Error Signaling Enable Register */ + uint32 ERR_ENABLE_CLR_REG; /* Error Signaling Enable Clear Register */ + uint32 rsvd; /* Reserved */ + uint32 FAULT_ADDRESS_REG; /* Fault Address Register */ + uint32 FAULT_STATUS_REG; /* Fault Status Register */ + uint32 FAULT_CLEAR_REG; /* Fault Clear Register */ +} iommErrFault_t; + +/* Pinmux Register Frame Definition */ +/** @struct pinMuxKicker +* @brief Pin Muxing Kicker Register Definition +* +* This structure is used to access the Pin Muxing Kicker registers. +*/ +typedef volatile struct pinMuxKicker +{ + uint32 KICKER0; /* kicker 0 register */ + uint32 KICKER1; /* kicker 1 register */ +} pinMuxKICKER_t; + +/** @struct pinMuxBase +* @brief PINMUX Register Definition +* +* This structure is used to access the PINMUX module egisters. +*/ +/** @typedef pinMuxBASE_t +* @brief PINMUX Register Frame Type Definition +* +* This type is used to access the PINMUX Registers. +*/ +typedef volatile struct pinMuxBase +{ + uint32 PINMMR0; /**< 0xEB10 Pin Mux 0 register*/ + uint32 PINMMR1; /**< 0xEB14 Pin Mux 1 register*/ + uint32 PINMMR2; /**< 0xEB18 Pin Mux 2 register*/ + uint32 PINMMR3; /**< 0xEB1C Pin Mux 3 register*/ + uint32 PINMMR4; /**< 0xEB20 Pin Mux 4 register*/ + uint32 PINMMR5; /**< 0xEB24 Pin Mux 5 register*/ + uint32 PINMMR6; /**< 0xEB28 Pin Mux 6 register*/ + uint32 PINMMR7; /**< 0xEB2C Pin Mux 7 register*/ + uint32 PINMMR8; /**< 0xEB30 Pin Mux 8 register*/ + uint32 PINMMR9; /**< 0xEB34 Pin Mux 9 register*/ + uint32 PINMMR10; /**< 0xEB38 Pin Mux 10 register*/ + uint32 PINMMR11; /**< 0xEB3C Pin Mux 11 register*/ + uint32 PINMMR12; /**< 0xEB40 Pin Mux 12 register*/ + uint32 PINMMR13; /**< 0xEB44 Pin Mux 13 register*/ + uint32 PINMMR14; /**< 0xEB48 Pin Mux 14 register*/ + uint32 PINMMR15; /**< 0xEB4C Pin Mux 15 register*/ + uint32 PINMMR16; /**< 0xEB50 Pin Mux 16 register*/ + uint32 PINMMR17; /**< 0xEB54 Pin Mux 17 register*/ + uint32 PINMMR18; /**< 0xEB58 Pin Mux 18 register*/ + uint32 PINMMR19; /**< 0xEB5C Pin Mux 19 register*/ + uint32 PINMMR20; /**< 0xEB60 Pin Mux 20 register*/ + uint32 PINMMR21; /**< 0xEB64 Pin Mux 21 register*/ + uint32 PINMMR22; /**< 0xEB68 Pin Mux 22 register*/ + uint32 PINMMR23; /**< 0xEB6C Pin Mux 23 register*/ + uint32 PINMMR24; /**< 0xEB70 Pin Mux 24 register*/ + uint32 PINMMR25; /**< 0xEB74 Pin Mux 25 register*/ + uint32 PINMMR26; /**< 0xEB78 Pin Mux 26 register*/ + uint32 PINMMR27; /**< 0xEB7C Pin Mux 27 register*/ + uint32 PINMMR28; /**< 0xEB80 Pin Mux 28 register*/ + uint32 PINMMR29; /**< 0xEB84 Pin Mux 29 register*/ + uint32 PINMMR30; /**< 0xEB88 Pin Mux 30 register*/ + uint32 PINMMR31; /**< 0xEB8C Pin Mux 31 register*/ + uint32 PINMMR32; /**< 0xEB90 Pin Mux 32 register*/ + uint32 PINMMR33; /**< 0xEB94 Pin Mux 33 register*/ + uint32 PINMMR34; /**< 0xEB98 Pin Mux 34 register*/ + uint32 PINMMR35; /**< 0xEB9C Pin Mux 35 register*/ + uint32 PINMMR36; /**< 0xEBA0 Pin Mux 36 register*/ + uint32 PINMMR37; /**< 0xEBA4 Pin Mux 37 register*/ + uint32 PINMMR38; /**< 0xEBA8 Pin Mux 38 register*/ + uint32 PINMMR39; /**< 0xEBAC Pin Mux 39 register*/ + uint32 PINMMR40; /**< 0xEBB0 Pin Mux 40 register*/ + uint32 PINMMR41; /**< 0xEBB4 Pin Mux 41 register*/ + uint32 PINMMR42; /**< 0xEBB8 Pin Mux 42 register*/ + uint32 PINMMR43; /**< 0xEBBC Pin Mux 43 register*/ + uint32 PINMMR44; /**< 0xEBC0 Pin Mux 44 register*/ + uint32 PINMMR45; /**< 0xEBC4 Pin Mux 45 register*/ + uint32 PINMMR46; /**< 0xEBC8 Pin Mux 46 register*/ + uint32 PINMMR47; /**< 0xEBCC Pin Mux 47 register*/ +}pinMuxBASE_t; + + +/** @def iommErrFaultReg +* @brief IOMM Error Fault Register Frame Pointer +* +* This pointer is used to control IOMM Error and Fault across the device. +*/ +#define iommErrFaultReg ((iommErrFault_t *) 0xFFFFEAE0U) + +/** @def kickerReg +* @brief Pin Muxing Kicker Register Frame Pointer +* +* This pointer is used to enable and disable muxing accross the device. +*/ +#define kickerReg ((pinMuxKICKER_t *) 0xFFFFEA38U) + +/** @def pinMuxReg +* @brief Pin Muxing Control Register Frame Pointer +* +* This pointer is used to set the muxing registers accross the device. +*/ +#define pinMuxReg ((pinMuxBASE_t *) 0xFFFFEB10U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_pmm.h =================================================================== diff -u --- firmware/include/reg_pmm.h (revision 0) +++ firmware/include/reg_pmm.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,111 @@ +/** @file reg_pmm.h +* @brief PMM Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* . +* which are relevant for the PMM driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_PMM_H__ +#define __REG_PMM_H__ + +#include "sys_common.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Pmm Register Frame Definition */ +/** @struct pmmBase +* @brief Pmm Register Frame Definition +* +* This type is used to access the Pmm Registers. +*/ +/** @typedef pmmBase_t +* @brief Pmm Register Frame Type Definition +* +* This type is used to access the Pmm Registers. +*/ +typedef volatile struct pmmBase +{ + uint32 LOGICPDPWRCTRL0; /**< 0x0000: Logic Power Domain Control Register 0 */ + uint32 rsvd1[3U]; /**< 0x0004: Reserved*/ + uint32 MEMPDPWRCTRL0; /**< 0x0010: Memory Power Domain Control Register 0 */ + uint32 rsvd2[3U]; /**< 0x0014: Reserved*/ + uint32 PDCLKDISREG; /**< 0x0020: Power Domain Clock Disable Register */ + uint32 PDCLKDISSETREG; /**< 0x0024: Power Domain Clock Disable Set Register */ + uint32 PDCLKDISCLRREG; /**< 0x0028: Power Domain Clock Disable Clear Register */ + uint32 rsvd3[5U]; /**< 0x002C: Reserved */ + uint32 LOGICPDPWRSTAT[4U]; /**< 0x0040, 0x0044, 0x0048, 0x004C: Logic Power Domain Power Status Register + - 0: PD2 + - 1: PD3 + - 2: PD4 + - 3: PD5 */ + uint32 rsvd4[12U]; /**< 0x0050: Reserved*/ + uint32 MEMPDPWRSTAT[3U]; /**< 0x0080, 0x0084, 0x0088: Memory Power Domain Power Status Register + - 0: RAM_PD1 + - 1: RAM_PD2 + - 2: RAM_PD3 */ + uint32 rsvd5[5U]; /**< 0x008C: Reserved */ + uint32 GLOBALCTRL1; /**< 0x00A0: Global Control Register 1 */ + uint32 rsvd6; /**< 0x00A4: Reserved */ + uint32 GLOBALSTAT; /**< 0x00A8: Global Status Register */ + uint32 PRCKEYREG; /**< 0x00AC: PSCON Diagnostic Compare Key Register */ + uint32 LPDDCSTAT1; /**< 0x00B0: LogicPD PSCON Diagnostic Compare Status Register 1 */ + uint32 LPDDCSTAT2; /**< 0x00B4: LogicPD PSCON Diagnostic Compare Status Register 2 */ + uint32 MPDDCSTAT1; /**< 0x00B8: Memory PD PSCON Diagnostic Compare Status Register 1 */ + uint32 MPDDCSTAT2; /**< 0x00BC: Memory PD PSCON Diagnostic Compare Status Register 2 */ + uint32 ISODIAGSTAT; /**< 0x00C0: Isolation Diagnostic Status Register */ +}pmmBase_t; + + +/** @def pmmREG +* @brief Pmm Register Frame Pointer +* +* This pointer is used by the Pmm driver to access the Pmm registers. +*/ +#define pmmREG ((pmmBase_t *)0xFFFF0000U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_pom.h =================================================================== diff -u --- firmware/include/reg_pom.h (revision 0) +++ firmware/include/reg_pom.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,127 @@ +/** @file reg_pom.h +* @brief POM Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the POM driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_POM_H__ +#define __REG_POM_H__ + +#include "sys_common.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Pom Register Frame Definition */ +/** @struct POMBase +* @brief POM Register Frame Definition +* +* This structure is used to access the POM module registers(POM Register Map). +*/ +typedef struct +{ + uint32 POMGLBCTRL; /* 0x00 */ + uint32 POMREV; /* 0x04 */ + uint32 POMCLKCTRL; /* 0x08 */ + uint32 POMFLG; /* 0x0C */ + struct + { + uint32 rsdv1; + }RESERVED_REG[124U]; + struct /* 0x200 ... */ + { + uint32 POMPROGSTART; + uint32 POMOVLSTART; + uint32 POMREGSIZE; + uint32 rsdv2; + }POMRGNCONF_ST[32U]; +}pomBASE_t; + + +/** @struct POM_CORESIGHT_ST +* @brief POM_CORESIGHT_ST Register Definition +* +* This structure is used to access the POM module registers(POM CoreSight Registers ). +*/ +typedef struct +{ + uint32 POMITCTRL; /* 0xF00 */ + struct /* 0xF04 to 0xF9C */ + { + uint32 Reserved_Reg; + }Reserved1_ST[39U]; + uint32 POMCLAIMSET; /* 0xFA0 */ + uint32 POMCLAIMCLR; /* 0xFA4 */ + uint32 rsvd1[2U]; /* 0xFA8 */ + uint32 POMLOCKACCESS; /* 0xFB0 */ + uint32 POMLOCKSTATUS; /* 0xFB4 */ + uint32 POMAUTHSTATUS; /* 0xFB8 */ + uint32 rsvd2[3U]; /* 0xFBC */ + uint32 POMDEVID; /* 0xFC8 */ + uint32 POMDEVTYPE; /* 0xFCC */ + uint32 POMPERIPHERALID4; /* 0xFD0 */ + uint32 POMPERIPHERALID5; /* 0xFD4 */ + uint32 POMPERIPHERALID6; /* 0xFD8 */ + uint32 POMPERIPHERALID7; /* 0xFDC */ + uint32 POMPERIPHERALID0; /* 0xFE0 */ + uint32 POMPERIPHERALID1; /* 0xFE4 */ + uint32 POMPERIPHERALID2; /* 0xFE8 */ + uint32 POMPERIPHERALID3; /* 0xFEC */ + uint32 POMCOMPONENTID0; /* 0xFF0 */ + uint32 POMCOMPONENTID1; /* 0xFF4 */ + uint32 POMCOMPONENTID2; /* 0xFF8 */ + uint32 POMCOMPONENTID3; /* 0xFFC */ +}POM_CORESIGHT_ST; + + +#define pomREG ((pomBASE_t *)0xFFA04000U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_rti.h =================================================================== diff -u --- firmware/include/reg_rti.h (revision 0) +++ firmware/include/reg_rti.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,129 @@ +/** @file reg_rti.h +* @brief RTI Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the RTI driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_RTI_H__ +#define __REG_RTI_H__ + +#include "sys_common.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Rti Register Frame Definition */ +/** @struct rtiBase +* @brief RTI Register Frame Definition +* +* This type is used to access the RTI Registers. +*/ +/** @typedef rtiBASE_t +* @brief RTI Register Frame Type Definition +* +* This type is used to access the RTI Registers. +*/ +typedef volatile struct rtiBase +{ + uint32 GCTRL; /**< 0x0000: Global Control Register */ + uint32 TBCTRL; /**< 0x0004: Timebase Control Register */ + uint32 CAPCTRL; /**< 0x0008: Capture Control Register */ + uint32 COMPCTRL; /**< 0x000C: Compare Control Register */ + struct + { + uint32 FRCx; /**< 0x0010,0x0030: Free Running Counter x Register */ + uint32 UCx; /**< 0x0014,0x0034: Up Counter x Register */ + uint32 CPUCx; /**< 0x0018,0x0038: Compare Up Counter x Register */ + uint32 rsvd1; /**< 0x001C,0x003C: Reserved */ + uint32 CAFRCx; /**< 0x0020,0x0040: Capture Free Running Counter x Register */ + uint32 CAUCx; /**< 0x0024,0x0044: Capture Up Counter x Register */ + uint32 rsvd2[2U]; /**< 0x0028,0x0048: Reserved */ + } CNT[2U]; /**< Counter x selection: + - 0: Counter 0 + - 1: Counter 1 */ + struct + { + uint32 COMPx; /**< 0x0050,0x0058,0x0060,0x0068: Compare x Register */ + uint32 UDCPx; /**< 0x0054,0x005C,0x0064,0x006C: Update Compare x Register */ + } CMP[4U]; /**< Compare x selection: + - 0: Compare 0 + - 1: Compare 1 + - 2: Compare 2 + - 3: Compare 3 */ + uint32 TBLCOMP; /**< 0x0070: External Clock Timebase Low Compare Register */ + uint32 TBHCOMP; /**< 0x0074: External Clock Timebase High Compare Register */ + uint32 rsvd3[2U]; /**< 0x0078: Reserved */ + uint32 SETINTENA; /**< 0x0080: Set/Status Interrupt Register */ + uint32 CLEARINTENA; /**< 0x0084: Clear/Status Interrupt Register */ + uint32 INTFLAG; /**< 0x0088: Interrupt Flag Register */ + uint32 rsvd4; /**< 0x008C: Reserved */ + uint32 DWDCTRL; /**< 0x0090: Digital Watchdog Control Register */ + uint32 DWDPRLD; /**< 0x0094: Digital Watchdog Preload Register */ + uint32 WDSTATUS; /**< 0x0098: Watchdog Status Register */ + uint32 WDKEY; /**< 0x009C: Watchdog Key Register */ + uint32 DWDCNTR; /**< 0x00A0: Digital Watchdog Down Counter */ + uint32 WWDRXNCTRL; /**< 0x00A4: Digital Windowed Watchdog Reaction Control */ + uint32 WWDSIZECTRL; /**< 0x00A8: Digital Windowed Watchdog Window Size Control */ + uint32 INTCLRENABLE; /**< 0x00AC: RTI Compare Interrupt Clear Enable Register */ + uint32 COMP0CLR; /**< 0x00B0: RTI Compare 0 Clear Register */ + uint32 COMP1CLR; /**< 0x00B4: RTI Compare 1 Clear Register */ + uint32 COMP2CLR; /**< 0x00B8: RTI Compare 2 Clear Register */ + uint32 COMP3CLR; /**< 0x00BC: RTI Compare 3 Clear Register */ +} rtiBASE_t; + +/** @def rtiREG1 +* @brief RTI1 Register Frame Pointer +* +* This pointer is used by the RTI driver to access the RTI1 registers. +*/ +#define rtiREG1 ((rtiBASE_t *)0xFFFFFC00U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_sci.h =================================================================== diff -u --- firmware/include/reg_sci.h (revision 0) +++ firmware/include/reg_sci.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,139 @@ +/** @file reg_sci.h +* @brief SCI Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the SCI driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_SCI_H__ +#define __REG_SCI_H__ + +#include "sys_common.h" +#include "reg_gio.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Sci Register Frame Definition */ +/** @struct sciBase +* @brief SCI Base Register Definition +* +* This structure is used to access the SCI module registers. +*/ +/** @typedef sciBASE_t +* @brief SCI Register Frame Type Definition +* +* This type is used to access the SCI Registers. +*/ +typedef volatile struct sciBase +{ + uint32 GCR0; /**< 0x0000 Global Control Register 0 */ + uint32 GCR1; /**< 0x0004 Global Control Register 1 */ + uint32 GCR2; /**< 0x0008 Global Control Register 2. Note: Applicable only to LIN � SCI Compatibility Mode,Reserved for standalone SCI*/ + uint32 SETINT; /**< 0x000C Set Interrupt Enable Register */ + uint32 CLEARINT; /**< 0x0010 Clear Interrupt Enable Register */ + uint32 SETINTLVL; /**< 0x0014 Set Interrupt Level Register */ + uint32 CLEARINTLVL; /**< 0x0018 Set Interrupt Level Register */ + uint32 FLR; /**< 0x001C Interrupt Flag Register */ + uint32 INTVECT0; /**< 0x0020 Interrupt Vector Offset 0 */ + uint32 INTVECT1; /**< 0x0024 Interrupt Vector Offset 1 */ + uint32 FORMAT; /**< 0x0028 Format Control Register */ + uint32 BRS; /**< 0x002C Baud Rate Selection Register */ + uint32 ED; /**< 0x0030 Emulation Register */ + uint32 RD; /**< 0x0034 Receive Data Buffer */ + uint32 TD; /**< 0x0038 Transmit Data Buffer */ + uint32 PIO0; /**< 0x003C Pin Function Register */ + uint32 PIO1; /**< 0x0040 Pin Direction Register */ + uint32 PIO2; /**< 0x0044 Pin Data In Register */ + uint32 PIO3; /**< 0x0048 Pin Data Out Register */ + uint32 PIO4; /**< 0x004C Pin Data Set Register */ + uint32 PIO5; /**< 0x0050 Pin Data Clr Register */ + uint32 PIO6; /**< 0x0054: Pin Open Drain Output Enable Register */ + uint32 PIO7; /**< 0x0058: Pin Pullup/Pulldown Disable Register */ + uint32 PIO8; /**< 0x005C: Pin Pullup/Pulldown Selection Register */ + uint32 rsdv2[12U]; /**< 0x0060: Reserved */ + uint32 IODFTCTRL; /**< 0x0090: I/O Error Enable Register */ +} sciBASE_t; + + +/** @def sciREG +* @brief Register Frame Pointer +* +* This pointer is used by the SCI driver to access the sci module registers. +*/ +#define sciREG ((sciBASE_t *)0xFFF7E500U) + + +/** @def sciPORT +* @brief SCI GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of SCI +* (use the GIO drivers to access the port pins). +*/ +#define sciPORT ((gioPORT_t *)0xFFF7E540U) + + +/** @def scilinREG +* @brief SCILIN (LIN - Compatibility Mode) Register Frame Pointer +* +* This pointer is used by the SCI driver to access the sci module registers. +*/ +#define scilinREG ((sciBASE_t *)0xFFF7E400U) + + +/** @def scilinPORT +* @brief SCILIN (LIN - Compatibility Mode) Register Frame Pointer +* +* Pointer used by the GIO driver to access I/O PORT of LIN +* (use the GIO drivers to access the port pins). +*/ +#define scilinPORT ((gioPORT_t *)0xFFF7E440U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_spi.h =================================================================== diff -u --- firmware/include/reg_spi.h (revision 0) +++ firmware/include/reg_spi.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,187 @@ +/** @file reg_spi.h +* @brief SPI Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the SPI driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_SPI_H__ +#define __REG_SPI_H__ + +#include "sys_common.h" +#include "reg_gio.h" + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Spi Register Frame Definition */ +/** @struct spiBase +* @brief SPI Register Definition +* +* This structure is used to access the SPI module registers. +*/ +/** @typedef spiBASE_t +* @brief SPI Register Frame Type Definition +* +* This type is used to access the SPI Registers. +*/ +typedef volatile struct spiBase +{ + uint32 GCR0; /**< 0x0000: Global Control 0 */ + uint32 GCR1; /**< 0x0004: Global Control 1 */ + uint32 INT0; /**< 0x0008: Interrupt Register */ + uint32 LVL; /**< 0x000C: Interrupt Level */ + uint32 FLG; /**< 0x0010: Interrupt flags */ + uint32 PC0; /**< 0x0014: Function Pin Enable */ + uint32 PC1; /**< 0x0018: Pin Direction */ + uint32 PC2; /**< 0x001C: Pin Input Latch */ + uint32 PC3; /**< 0x0020: Pin Output Latch */ + uint32 PC4; /**< 0x0024: Output Pin Set */ + uint32 PC5; /**< 0x0028: Output Pin Clr */ + uint32 PC6; /**< 0x002C: Open Drain Output Enable */ + uint32 PC7; /**< 0x0030: Pullup/Pulldown Disable */ + uint32 PC8; /**< 0x0034: Pullup/Pulldown Selection */ + uint32 DAT0; /**< 0x0038: Transmit Data */ + uint32 DAT1; /**< 0x003C: Transmit Data with Format and Chip Select */ + uint32 BUF; /**< 0x0040: Receive Buffer */ + uint32 EMU; /**< 0x0044: Emulation Receive Buffer */ + uint32 DELAY; /**< 0x0048: Delays */ + uint32 DEF; /**< 0x004C: Default Chip Select */ + uint32 FMT0; /**< 0x0050: Data Format 0 */ + uint32 FMT1; /**< 0x0054: Data Format 1 */ + uint32 FMT2; /**< 0x0058: Data Format 2 */ + uint32 FMT3; /**< 0x005C: Data Format 3 */ + uint32 INTVECT0; /**< 0x0060: Interrupt Vector 0 */ + uint32 INTVECT1; /**< 0x0064: Interrupt Vector 1 */ + uint32 RESERVED[51U]; /**< 0x0068 to 0x0130: Reserved */ + uint32 IOLPKTSTCR; /**< 0x0134: IO loopback */ +} spiBASE_t; + +/** @def spiREG1 +* @brief SPI1 (MIBSPI - Compatibility Mode) Register Frame Pointer +* +* This pointer is used by the SPI driver to access the spi module registers. +*/ +#define spiREG1 ((spiBASE_t *)0xFFF7F400U) + + +/** @def spiPORT1 +* @brief SPI1 (MIBSPI - Compatibility Mode) GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of SPI1 +* (use the GIO drivers to access the port pins). +*/ +#define spiPORT1 ((gioPORT_t *)0xFFF7F418U) + +/** @def spiREG2 +* @brief SPI2 Register Frame Pointer +* +* This pointer is used by the SPI driver to access the spi module registers. +*/ +#define spiREG2 ((spiBASE_t *)0xFFF7F600U) + + +/** @def spiPORT2 +* @brief SPI2 GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of SPI2 +* (use the GIO drivers to access the port pins). +*/ +#define spiPORT2 ((gioPORT_t *)0xFFF7F618U) + +/** @def spiREG3 +* @brief SPI3 (MIBSPI - Compatibility Mode) Register Frame Pointer +* +* This pointer is used by the SPI driver to access the spi module registers. +*/ +#define spiREG3 ((spiBASE_t *)0xFFF7F800U) + + +/** @def spiPORT3 +* @brief SPI3 (MIBSPI - Compatibility Mode) GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of SPI3 +* (use the GIO drivers to access the port pins). +*/ +#define spiPORT3 ((gioPORT_t *)0xFFF7F818U) + +/** @def spiREG4 +* @brief SPI4 Register Frame Pointer +* +* This pointer is used by the SPI driver to access the spi module registers. +*/ +#define spiREG4 ((spiBASE_t *)0xFFF7FA00U) + + +/** @def spiPORT4 +* @brief SPI4 GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of SPI4 +* (use the GIO drivers to access the port pins). +*/ +#define spiPORT4 ((gioPORT_t *)0xFFF7FA18U) + +/** @def spiREG5 +* @brief SPI5 (MIBSPI - Compatibility Mode) Register Frame Pointer +* +* This pointer is used by the SPI driver to access the spi module registers. +*/ +#define spiREG5 ((spiBASE_t *)0xFFF7FC00U) + + +/** @def spiPORT5 +* @brief SPI5 (MIBSPI - Compatibility Mode) GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of SPI5 +* (use the GIO drivers to access the port pins). +*/ +#define spiPORT5 ((gioPORT_t *)0xFFF7FC18U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_stc.h =================================================================== diff -u --- firmware/include/reg_stc.h (revision 0) +++ firmware/include/reg_stc.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,93 @@ +/** @file reg_stc.h +* @brief STC Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_STC_H__ +#define __REG_STC_H__ + +#include "sys_common.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Stc Register Frame Definition */ +/** @struct stcBase +* @brief STC Base Register Definition +* +* This structure is used to access the STC module registers. +*/ +/** @typedef stcBASE_t +* @brief STC Register Frame Type Definition +* +* This type is used to access the STC Registers. +*/ +typedef volatile struct stcBase +{ + uint32 STCGCR0; /**< 0x0000: STC Control Register 0 */ + uint32 STCGCR1; /**< 0x0004: STC Control Register 1 */ + uint32 STCTPR; /**< 0x0008: STC Self-Test Run Timeout Counter Preload Register */ + uint32 STCCADDR; /**< 0x000C: STC Self-Test Current ROM Address Register */ + uint32 STCCICR; /**< 0x0010: STC Self-Test Current Interval Count Register */ + uint32 STCGSTAT; /**< 0x0014: STC Self-Test Global Status Register */ + uint32 STCFSTAT; /**< 0x0018: STC Self-Test Fail Status Register */ + uint32 CPU1_CURMISR3; /**< 0x001C: STC CPU1 Current MISR Register */ + uint32 CPU1_CURMISR2; /**< 0x0020: STC CPU1 Current MISR Register */ + uint32 CPU1_CURMISR1; /**< 0x0024: STC CPU1 Current MISR Register */ + uint32 CPU1_CURMISR0; /**< 0x0028: STC CPU1 Current MISR Register */ + uint32 CPU2_CURMISR3; /**< 0x002C: STC CPU1 Current MISR Register */ + uint32 CPU2_CURMISR2; /**< 0x0030: STC CPU1 Current MISR Register */ + uint32 CPU2_CURMISR1; /**< 0x0034: STC CPU1 Current MISR Register */ + uint32 CPU2_CURMISR0; /**< 0x0038: STC CPU1 Current MISR Register */ + uint32 STCSCSCR; /**< 0x003C: STC Signature Compare Self-Check Register */ +} stcBASE_t; + +#define stcREG ((stcBASE_t *)0xFFFFE600U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/reg_system.h =================================================================== diff -u --- firmware/include/reg_system.h (revision 0) +++ firmware/include/reg_system.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,191 @@ +/** @file reg_system.h +* @brief System Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_SYSTEM_H__ +#define __REG_SYSTEM_H__ + +#include "sys_common.h" +#include "reg_gio.h" + + +/* System Register Frame 1 Definition */ +/** @struct systemBase1 +* @brief System Register Frame 1 Definition +* +* This type is used to access the System 1 Registers. +*/ +/** @typedef systemBASE1_t +* @brief System Register Frame 1 Type Definition +* +* This type is used to access the System 1 Registers. +*/ +typedef volatile struct systemBase1 +{ + uint32 SYSPC1; /* 0x0000 */ + uint32 SYSPC2; /* 0x0004 */ + uint32 SYSPC3; /* 0x0008 */ + uint32 SYSPC4; /* 0x000C */ + uint32 SYSPC5; /* 0x0010 */ + uint32 SYSPC6; /* 0x0014 */ + uint32 SYSPC7; /* 0x0018 */ + uint32 SYSPC8; /* 0x001C */ + uint32 SYSPC9; /* 0x0020 */ + uint32 SSWPLL1; /* 0x0024 */ + uint32 SSWPLL2; /* 0x0028 */ + uint32 SSWPLL3; /* 0x002C */ + uint32 CSDIS; /* 0x0030 */ + uint32 CSDISSET; /* 0x0034 */ + uint32 CSDISCLR; /* 0x0038 */ + uint32 CDDIS; /* 0x003C */ + uint32 CDDISSET; /* 0x0040 */ + uint32 CDDISCLR; /* 0x0044 */ + uint32 GHVSRC; /* 0x0048 */ + uint32 VCLKASRC; /* 0x004C */ + uint32 RCLKSRC; /* 0x0050 */ + uint32 CSVSTAT; /* 0x0054 */ + uint32 MSTGCR; /* 0x0058 */ + uint32 MINITGCR; /* 0x005C */ + uint32 MSINENA; /* 0x0060 */ + uint32 MSTFAIL; /* 0x0064 */ + uint32 MSTCGSTAT; /* 0x0068 */ + uint32 MINISTAT; /* 0x006C */ + uint32 PLLCTL1; /* 0x0070 */ + uint32 PLLCTL2; /* 0x0074 */ + uint32 SYSPC10; /* 0x0078 */ + uint32 DIEIDL; /* 0x007C */ + uint32 DIEIDH; /* 0x0080 */ + uint32 VRCTL; /* 0x0084 */ + uint32 LPOMONCTL; /* 0x0088 */ + uint32 CLKTEST; /* 0x008C */ + uint32 DFTCTRLREG1; /* 0x0090 */ + uint32 DFTCTRLREG2; /* 0x0094 */ + uint32 rsvd1; /* 0x0098 */ + uint32 rsvd2; /* 0x009C */ + uint32 GPREG1; /* 0x00A0 */ + uint32 BTRMSEL; /* 0x00A4 */ + uint32 IMPFASTS; /* 0x00A8 */ + uint32 IMPFTADD; /* 0x00AC */ + uint32 SSISR1; /* 0x00B0 */ + uint32 SSISR2; /* 0x00B4 */ + uint32 SSISR3; /* 0x00B8 */ + uint32 SSISR4; /* 0x00BC */ + uint32 RAMGCR; /* 0x00C0 */ + uint32 BMMCR1; /* 0x00C4 */ + uint32 BMMCR2; /* 0x00C8 */ + uint32 CPURSTCR; /* 0x00CC */ + uint32 CLKCNTL; /* 0x00D0 */ + uint32 ECPCNTL; /* 0x00D4 */ + uint32 DSPGCR; /* 0x00D8 */ + uint32 DEVCR1; /* 0x00DC */ + uint32 SYSECR; /* 0x00E0 */ + uint32 SYSESR; /* 0x00E4 */ + uint32 SYSTASR; /* 0x00E8 */ + uint32 GBLSTAT; /* 0x00EC */ + uint32 DEV; /* 0x00F0 */ + uint32 SSIVEC; /* 0x00F4 */ + uint32 SSIF; /* 0x00F8 */ +} systemBASE1_t; + + +/** @def systemREG1 +* @brief System Register Frame 1 Pointer +* +* This pointer is used by the system driver to access the system frame 1 registers. +*/ +#define systemREG1 ((systemBASE1_t *)0xFFFFFF00U) + +/** @def systemPORT +* @brief ECLK GIO Port Register Pointer +* +* Pointer used by the GIO driver to access I/O PORT of System/Eclk +* (use the GIO drivers to access the port pins). +*/ +#define systemPORT ((gioPORT_t *)0xFFFFFF04U) + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* System Register Frame 2 Definition */ +/** @struct systemBase2 +* @brief System Register Frame 2 Definition +* +* This type is used to access the System 2 Registers. +*/ +/** @typedef systemBASE2_t +* @brief System Register Frame 2 Type Definition +* +* This type is used to access the System 2 Registers. +*/ +typedef volatile struct systemBase2 +{ + uint32 PLLCTL3; /* 0x0000 */ + uint32 rsvd1; /* 0x0004 */ + uint32 STCCLKDIV; /* 0x0008 */ + uint32 rsvd2[6U]; /* 0x000C */ + uint32 ECPCNTRL0; /* 0x0024 */ + uint32 rsvd3[5U]; /* 0x0028 */ + uint32 CLK2CNTL; /* 0x003C */ + uint32 VCLKACON1; /* 0x0040 */ + uint32 rsvd4[11U]; /* 0x0044 */ + uint32 CLKSLIP; /* 0x0070 */ + uint32 rsvd5[30U]; /* 0x0074 */ + uint32 EFC_CTLEN; /* 0x00EC */ + uint32 DIEIDL_REG0; /* 0x00F0 */ + uint32 DIEIDH_REG1; /* 0x00F4 */ + uint32 DIEIDL_REG2; /* 0x00F8 */ + uint32 DIEIDH_REG3; /* 0x00FC */ +} systemBASE2_t; + +/** @def systemREG2 +* @brief System Register Frame 2 Pointer +* +* This pointer is used by the system driver to access the system frame 2 registers. +*/ +#define systemREG2 ((systemBASE2_t *)0xFFFFE100U) + + +#endif Index: firmware/include/reg_tcram.h =================================================================== diff -u --- firmware/include/reg_tcram.h (revision 0) +++ firmware/include/reg_tcram.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,94 @@ +/** @file reg_tcram.h +* @brief TCRAM Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_TCRAM_H__ +#define __REG_TCRAM_H__ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "sys_common.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/* Tcram Register Frame Definition */ +/** @struct tcramBase +* @brief TCRAM Wrapper Register Frame Definition +* +* This type is used to access the TCRAM Wrapper Registers. +*/ +/** @typedef tcramBASE_t +* @brief TCRAM Wrapper Register Frame Type Definition +* +* This type is used to access the TCRAM Wrapper Registers. +*/ + +typedef volatile struct tcramBase +{ + uint32 RAMCTRL; /* 0x0000 */ + uint32 RAMTHRESHOLD; /* 0x0004 */ + uint32 RAMOCCUR; /* 0x0008 */ + uint32 RAMINTCTRL; /* 0x000C */ + uint32 RAMERRSTATUS; /* 0x0010 */ + uint32 RAMSERRADDR; /* 0x0014 */ + uint32 rsvd1; /* 0x0018 */ + uint32 RAMUERRADDR; /* 0x001C */ + uint32 rsvd2[4U]; /* 0x0020 */ + uint32 RAMTEST; /* 0x0030 */ + uint32 rsvd3; /* 0x0034 */ + uint32 RAMADDRDECVECT; /* 0x0038 */ + uint32 RAMPERADDR; /* 0x003C */ +} tcramBASE_t; + +#define tcram1REG ((tcramBASE_t *)(0xFFFFF800U)) +#define tcram2REG ((tcramBASE_t *)(0xFFFFF900U)) + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +#endif Index: firmware/include/reg_vim.h =================================================================== diff -u --- firmware/include/reg_vim.h (revision 0) +++ firmware/include/reg_vim.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,110 @@ +/** @file reg_vim.h +* @brief VIM Register Layer Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __REG_VIM_H__ +#define __REG_VIM_H__ + +#include "sys_common.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Vim Register Frame Definition */ +/** @struct vimBase +* @brief Vim Register Frame Definition +* +* This type is used to access the Vim Registers. +*/ +/** @typedef vimBASE_t +* @brief VIM Register Frame Type Definition +* +* This type is used to access the VIM Registers. +*/ +typedef volatile struct vimBase +{ + uint32 IRQINDEX; /* 0x0000 */ + uint32 FIQINDEX; /* 0x0004 */ + uint32 rsvd1; /* 0x0008 */ + uint32 rsvd2; /* 0x000C */ + uint32 FIRQPR0; /* 0x0010 */ + uint32 FIRQPR1; /* 0x0014 */ + uint32 FIRQPR2; /* 0x0018 */ + uint32 FIRQPR3; /* 0x001C */ + uint32 INTREQ0; /* 0x0020 */ + uint32 INTREQ1; /* 0x0024 */ + uint32 INTREQ2; /* 0x0028 */ + uint32 INTREQ3; /* 0x002C */ + uint32 REQMASKSET0; /* 0x0030 */ + uint32 REQMASKSET1; /* 0x0034 */ + uint32 REQMASKSET2; /* 0x0038 */ + uint32 REQMASKSET3; /* 0x003C */ + uint32 REQMASKCLR0; /* 0x0040 */ + uint32 REQMASKCLR1; /* 0x0044 */ + uint32 REQMASKCLR2; /* 0x0048 */ + uint32 REQMASKCLR3; /* 0x004C */ + uint32 WAKEMASKSET0; /* 0x0050 */ + uint32 WAKEMASKSET1; /* 0x0054 */ + uint32 WAKEMASKSET2; /* 0x0058 */ + uint32 WAKEMASKSET3; /* 0x005C */ + uint32 WAKEMASKCLR0; /* 0x0060 */ + uint32 WAKEMASKCLR1; /* 0x0064 */ + uint32 WAKEMASKCLR2; /* 0x0068 */ + uint32 WAKEMASKCLR3; /* 0x006C */ + uint32 IRQVECREG; /* 0x0070 */ + uint32 FIQVECREG; /* 0x0074 */ + uint32 CAPEVT; /* 0x0078 */ + uint32 rsvd3; /* 0x007C */ + uint32 CHANCTRL[32U]; /* 0x0080-0x0FC */ +} vimBASE_t; + +#define vimREG ((vimBASE_t *)0xFFFFFE00U) + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +#endif Index: firmware/include/rti.h =================================================================== diff -u --- firmware/include/rti.h (revision 0) +++ firmware/include/rti.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,326 @@ +/** @file rti.h +* @brief RTI Driver Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the RTI driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +#ifndef __RTI_H__ +#define __RTI_H__ + +#include "reg_rti.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* RTI General Definitions */ + +/** @def rtiCOUNTER_BLOCK0 +* @brief Alias name for RTI counter block 0 +* +* This is an alias name for the RTI counter block 0. +* +* @note This value should be used for API argument @a counter +*/ +#define rtiCOUNTER_BLOCK0 0U + +/** @def rtiCOUNTER_BLOCK1 +* @brief Alias name for RTI counter block 1 +* +* This is an alias name for the RTI counter block 1. +* +* @note This value should be used for API argument @a counter +*/ +#define rtiCOUNTER_BLOCK1 1U + +/** @def rtiCOMPARE0 +* @brief Alias name for RTI compare 0 +* +* This is an alias name for the RTI compare 0. +* +* @note This value should be used for API argument @a compare +*/ +#define rtiCOMPARE0 0U + +/** @def rtiCOMPARE1 +* @brief Alias name for RTI compare 1 +* +* This is an alias name for the RTI compare 1. +* +* @note This value should be used for API argument @a compare +*/ +#define rtiCOMPARE1 1U + +/** @def rtiCOMPARE2 +* @brief Alias name for RTI compare 2 +* +* This is an alias name for the RTI compare 2. +* +* @note This value should be used for API argument @a compare +*/ +#define rtiCOMPARE2 2U + +/** @def rtiCOMPARE3 +* @brief Alias name for RTI compare 3 +* +* This is an alias name for the RTI compare 3. +* +* @note This value should be used for API argument @a compare +*/ +#define rtiCOMPARE3 3U + +/** @def rtiNOTIFICATION_COMPARE0 +* @brief Alias name for RTI compare 0 notification +* +* This is an alias name for the RTI compare 0 notification. +* +* @note This value should be used for API argument @a notification +*/ +#define rtiNOTIFICATION_COMPARE0 1U + +/** @def rtiNOTIFICATION_COMPARE1 +* @brief Alias name for RTI compare 1 notification +* +* This is an alias name for the RTI compare 1 notification. +* +* @note This value should be used for API argument @a notification +*/ +#define rtiNOTIFICATION_COMPARE1 2U + +/** @def rtiNOTIFICATION_COMPARE2 +* @brief Alias name for RTI compare 2 notification +* +* This is an alias name for the RTI compare 2 notification. +* +* @note This value should be used for API argument @a notification +*/ +#define rtiNOTIFICATION_COMPARE2 4U + +/** @def rtiNOTIFICATION_COMPARE3 +* @brief Alias name for RTI compare 3 notification +* +* This is an alias name for the RTI compare 3 notification. +* +* @note This value should be used for API argument @a notification +*/ +#define rtiNOTIFICATION_COMPARE3 8U + +/** @def rtiNOTIFICATION_TIMEBASE +* @brief Alias name for RTI timebase notification +* +* This is an alias name for the RTI timebase notification. +* +* @note This value should be used for API argument @a notification +*/ +#define rtiNOTIFICATION_TIMEBASE 0x10000U + +/** @def rtiNOTIFICATION_COUNTER0 +* @brief Alias name for RTI counter block 0 overflow notification +* +* This is an alias name for the RTI counter block 0 overflow notification. +* +* @note This value should be used for API argument @a notification +*/ +#define rtiNOTIFICATION_COUNTER0 0x20000U + +/** @def rtiNOTIFICATION_COUNTER1 +* @brief Alias name for RTI counter block 1 overflow notification +* +* This is an alias name for the RTI counter block 1 overflow notification. +* +* @note This value should be used for API argument @a notification +*/ +#define rtiNOTIFICATION_COUNTER1 0x40000U + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @enum dwdViolationTag +* @brief DWD Violations +*/ +typedef enum dwdViolationTag +{ + NoTime_Violation = 0U, + Time_Window_Violation = 1U, + EndTime_Window_Violation = 2U, + StartTime_Window_Violation = 3U, + Key_Seq_Violation = 4U +}dwdViolation_t; + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/** @enum dwdResetStatusTag +* @brief DWD Reset status +*/ +typedef enum dwdResetStatusTag +{ + No_Reset_Generated = 0U, + Reset_Generated = 1U +}dwdResetStatus_t; + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + +/** @enum dwwdReactionTag +* @brief DWWD Reaction on vioaltion +*/ +typedef enum dwwdReactionTag +{ + Generate_Reset = 0x00000005U, + Generate_NMI = 0x0000000AU +}dwwdReaction_t; + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + +/** @enum dwwdWindowSizeTag +* @brief DWWD Window size +*/ +typedef enum dwwdWindowSizeTag +{ + Size_100_Percent = 0x00000005U, + Size_50_Percent = 0x00000050U, + Size_25_Percent = 0x00000500U, + Size_12_5_Percent = 0x00005000U, + Size_6_25_Percent = 0x00050000U, + Size_3_125_Percent = 0x00500000U +}dwwdWindowSize_t; + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + +/* Configuration registers */ +typedef struct rti_config_reg +{ + uint32 CONFIG_GCTRL; + uint32 CONFIG_TBCTRL; + uint32 CONFIG_CAPCTRL; + uint32 CONFIG_COMPCTRL; + uint32 CONFIG_UDCP0; + uint32 CONFIG_UDCP1; + uint32 CONFIG_UDCP2; + uint32 CONFIG_UDCP3; +} rti_config_reg_t; + + +/* Configuration registers initial value */ +#define RTI_GCTRL_CONFIGVALUE ((uint32)((uint32)0x0U << 16U) | 0x00000000U) +#define RTI_TBCTRL_CONFIGVALUE 0x00000000U +#define RTI_CAPCTRL_CONFIGVALUE (0U | 0U) +#define RTI_COMPCTRL_CONFIGVALUE (0x00001000U | 0x00000100U | 0x00000000U | 0x00000000U) +#define RTI_UDCP0_CONFIGVALUE 10000U +#define RTI_UDCP1_CONFIGVALUE 50000U +#define RTI_UDCP2_CONFIGVALUE 80000U +#define RTI_UDCP3_CONFIGVALUE 100000U + + +/** + * @defgroup RTI RTI + * @brief Real Time Interrupt Module. + * + * The real-time interrupt (RTI) module provides timer functionality for operating systems and for + * benchmarking code. The RTI module can incorporate several counters that define the timebases needed + * for scheduling in the operating system. + * + * Related Files + * - reg_rti.h + * - rti.h + * - rti.c + * @addtogroup RTI + * @{ + */ + +/* RTI Interface Functions */ + +void rtiInit(void); +void rtiStartCounter(uint32 counter); +void rtiStopCounter(uint32 counter); +uint32 rtiResetCounter(uint32 counter); +void rtiSetPeriod(uint32 compare, uint32 period); +uint32 rtiGetPeriod(uint32 compare); +uint32 rtiGetCurrentTick(uint32 compare); +void rtiEnableNotification(uint32 notification); +void rtiDisableNotification(uint32 notification); +void dwdInit(uint16 dwdPreload); +void dwwdInit(dwwdReaction_t Reaction, uint16 dwdPreload, dwwdWindowSize_t Window_Size); +uint32 dwwdGetCurrentDownCounter(void); +void dwdCounterEnable(void); +void dwdSetPreload(uint16 dwdPreload); +void dwdReset(void); +void dwdGenerateSysReset(void); +boolean IsdwdKeySequenceCorrect(void); +dwdResetStatus_t dwdGetStatus(void); +dwdViolation_t dwdGetViolationStatus(void); +void dwdClearFlag(void); +void rtiGetConfigValue(rti_config_reg_t *config_reg, config_value_type_t type); +/** @fn void rtiNotification(uint32 notification) +* @brief Notification of RTI module +* @param[in] notification Select notification of RTI module: +* - rtiNOTIFICATION_COMPARE0: RTI compare 0 notification +* - rtiNOTIFICATION_COMPARE1: RTI compare 1 notification +* - rtiNOTIFICATION_COMPARE2: RTI compare 2 notification +* - rtiNOTIFICATION_COMPARE3: RTI compare 3 notification +* - rtiNOTIFICATION_TIMEBASE: RTI Timebase notification +* - rtiNOTIFICATION_COUNTER0: RTI counter 0 overflow notification +* - rtiNOTIFICATION_COUNTER1: RTI counter 1 overflow notification +* +* @note This function has to be provide by the user. +*/ +void rtiNotification(uint32 notification); + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + +/**@}*/ +#ifdef __cplusplus +} +#endif /*extern "C" */ + +#endif Index: firmware/include/sci.h =================================================================== diff -u --- firmware/include/sci.h (revision 0) +++ firmware/include/sci.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,203 @@ +/** @file sci.h +* @brief SCI Driver Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +#ifndef __SCI_H__ +#define __SCI_H__ + +#include "reg_sci.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/** @enum sciIntFlags +* @brief Interrupt Flag Definitions +* +* Used with sciEnableNotification, sciDisableNotification +*/ +enum sciIntFlags +{ + SCI_FE_INT = 0x04000000U, /* framing error */ + SCI_OE_INT = 0x02000000U, /* overrun error */ + SCI_PE_INT = 0x01000000U, /* parity error */ + SCI_RX_INT = 0x00000200U, /* receive buffer ready */ + SCI_TX_INT = 0x00000100U, /* transmit buffer ready */ + SCI_WAKE_INT = 0x00000002U, /* wakeup */ + SCI_BREAK_INT = 0x00000001U /* break detect */ +}; + +/** @def SCI_IDLE +* @brief Alias name for the SCI IDLE Flag +* +* This is an alias name for the SCI IDLE Flag. +* +*/ +#define SCI_IDLE 0x00000004U + +/** @struct sciBase +* @brief SCI Register Definition +* +* This structure is used to access the SCI module registers. +*/ +/** @typedef sciBASE_t +* @brief SCI Register Frame Type Definition +* +* This type is used to access the SCI Registers. +*/ + +enum sciPinSelect +{ + PIN_SCI_TX = 4U, + PIN_SCI_RX = 2U +}; + + +/* Configuration registers */ +typedef struct sci_config_reg +{ + uint32 CONFIG_GCR0; + uint32 CONFIG_GCR1; + uint32 CONFIG_SETINT; + uint32 CONFIG_SETINTLVL; + uint32 CONFIG_FORMAT; + uint32 CONFIG_BRS; + uint32 CONFIG_PIO0; + uint32 CONFIG_PIO1; + uint32 CONFIG_PIO6; + uint32 CONFIG_PIO7; + uint32 CONFIG_PIO8; +} sci_config_reg_t; + + +/* Configuration registers initial value for SCI*/ +#define SCI_GCR0_CONFIGVALUE 0x00000001U +#define SCI_GCR1_CONFIGVALUE ((uint32)((uint32)1U << 5U) \ + |(uint32)((uint32)(2U-1U) << 4U) \ + |(uint32)((uint32)0U << 3U) \ + |(uint32)((uint32)0U << 2U) \ + |(uint32)((uint32)1U << 1U) \ + |(uint32)((uint32)0U << 2U) \ + |(uint32)(0x03000080U)) + +#define SCI_SETINTLVL_CONFIGVALUE ((uint32)((uint32)0U << 26U) \ + |(uint32)((uint32)0U << 25U) \ + |(uint32)((uint32)0U << 24U) \ + |(uint32)((uint32)0U << 9U) \ + |(uint32)((uint32)0U << 8U) \ + |(uint32)((uint32)0U << 1U) \ + |(uint32)((uint32)0U << 0U)) + +#define SCI_SETINT_CONFIGVALUE ((uint32)((uint32)0U << 26U) \ + |(uint32)((uint32)0U << 25U) \ + |(uint32)((uint32)0U << 24U) \ + |(uint32)((uint32)0U << 9U) \ + |(uint32)((uint32)0U << 1U) \ + |(uint32)((uint32)0U << 0U)) + +#define SCI_FORMAT_CONFIGVALUE (8U - 1U) +#define SCI_BRS_CONFIGVALUE (715U) +#define SCI_PIO0_CONFIGVALUE ((uint32)((uint32)1U << 2U ) | (uint32)((uint32)1U << 1U)) +#define SCI_PIO1_CONFIGVALUE ((uint32)((uint32)0U << 2U ) | (uint32)((uint32)0U << 1U)) +#define SCI_PIO6_CONFIGVALUE ((uint32)((uint32)0U << 2U ) | (uint32)((uint32)0U << 1U)) +#define SCI_PIO7_CONFIGVALUE ((uint32)((uint32)0U << 2U ) | (uint32)((uint32)0U << 1U)) +#define SCI_PIO8_CONFIGVALUE ((uint32)((uint32)1U << 2U ) | (uint32)((uint32)1U << 1U)) + + + + +/** + * @defgroup SCI SCI + * @brief Serial Communication Interface Module. + * + * The SCI module is a universal asynchronous receiver-transmitter that implements the standard nonreturn + * to zero format. The SCI can be used to communicate, for example, through an RS-232 port or over a K-line. + * + * Related Files + * - reg_sci.h + * - sci.h + * - sci.c + * @addtogroup SCI + * @{ + */ + +/* SCI Interface Functions */ +void sciInit(void); +void sciSetFunctional(sciBASE_t *sci, uint32 port); +void sciSetBaudrate(sciBASE_t *sci, uint32 baud); +uint32 sciIsTxReady(sciBASE_t *sci); +void sciSendByte(sciBASE_t *sci, uint8 byte); +void sciSend(sciBASE_t *sci, uint32 length, uint8 * data); +uint32 sciIsRxReady(sciBASE_t *sci); +uint32 sciIsIdleDetected(sciBASE_t *sci); +uint32 sciRxError(sciBASE_t *sci); +uint32 sciReceiveByte(sciBASE_t *sci); +void sciReceive(sciBASE_t *sci, uint32 length, uint8 * data); +void sciEnableNotification(sciBASE_t *sci, uint32 flags); +void sciDisableNotification(sciBASE_t *sci, uint32 flags); +void sciEnableLoopback(sciBASE_t *sci, loopBackType_t Loopbacktype); +void sciDisableLoopback(sciBASE_t *sci); +void sciEnterResetState(sciBASE_t *sci); +void sciExitResetState(sciBASE_t *sci); +void sciGetConfigValue(sci_config_reg_t *config_reg, config_value_type_t type); +/** @fn void sciNotification(sciBASE_t *sci, uint32 flags) +* @brief Interrupt callback +* @param[in] sci - sci module base address +* @param[in] flags - copy of error interrupt flags +* +* This is a callback that is provided by the application and is called upon +* an interrupt. The parameter passed to the callback is a copy of the +* interrupt flag register. +*/ +void sciNotification(sciBASE_t *sci, uint32 flags); + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ +/**@}*/ +#ifdef __cplusplus +} +#endif + +#endif Index: firmware/include/spi.h =================================================================== diff -u --- firmware/include/spi.h (revision 0) +++ firmware/include/spi.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,240 @@ +/** @file spi.h +* @brief SPI Driver Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __SPI_H__ +#define __SPI_H__ + +#include "reg_spi.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/** @enum chipSelect +* @brief Transfer Group Chip Select +*/ +enum spiChipSelect +{ + SPI_CS_NONE = 0xFFU, + SPI_CS_0 = 0xFEU, + SPI_CS_1 = 0xFDU, + SPI_CS_2 = 0xFBU, + SPI_CS_3 = 0xF7U, + SPI_CS_4 = 0xEFU, + SPI_CS_5 = 0xDFU, + SPI_CS_6 = 0xBFU, + SPI_CS_7 = 0x7FU +}; + +/** @enum spiPinSelect +* @brief spi Pin Select +*/ +enum spiPinSelect +{ + SPI_PIN_CS0 = 0U, + SPI_PIN_CS1 = 1U, + SPI_PIN_CS2 = 2U, + SPI_PIN_CS3 = 3U, + SPI_PIN_CS4 = 4U, + SPI_PIN_CS5 = 5U, + SPI_PIN_CS6 = 6U, + SPI_PIN_CS7 = 7U, + SPI_PIN_ENA = 8U, + SPI_PIN_CLK = 9U, + SPI_PIN_SIMO = 10U, + SPI_PIN_SOMI = 11U, + SPI_PIN_SIMO_1 = 17U, + SPI_PIN_SIMO_2 = 18U, + SPI_PIN_SIMO_3 = 19U, + SPI_PIN_SIMO_4 = 20U, + SPI_PIN_SIMO_5 = 21U, + SPI_PIN_SIMO_6 = 22U, + SPI_PIN_SIMO_7 = 23U, + SPI_PIN_SOMI_1 = 25U, + SPI_PIN_SOMI_2 = 26U, + SPI_PIN_SOMI_3 = 27U, + SPI_PIN_SOMI_4 = 28U, + SPI_PIN_SOMI_5 = 29U, + SPI_PIN_SOMI_6 = 30U, + SPI_PIN_SOMI_7 = 31U +}; + +/** @enum dataformat +* @brief SPI dataformat register select +*/ +typedef enum dataformat +{ + SPI_FMT_0 = 0U, + SPI_FMT_1 = 1U, + SPI_FMT_2 = 2U, + SPI_FMT_3 = 3U +}SPIDATAFMT_t; + +/** @struct spiDAT1RegConfig +* @brief SPI data register configuration +*/ +typedef struct spiDAT1RegConfig +{ + boolean CS_HOLD; + boolean WDEL; + SPIDATAFMT_t DFSEL; + uint8 CSNR; +}spiDAT1_t; + +/** @enum SpiTxRxDataStatus +* @brief SPI Data Status +*/ +typedef enum SpiTxRxDataStatus +{ + SPI_READY = 0U, + SPI_PENDING = 1U, + SPI_COMPLETED = 2U +}SpiDataStatus_t; + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +typedef struct spi_config_reg +{ + uint32 CONFIG_GCR1; + uint32 CONFIG_INT0; + uint32 CONFIG_LVL; + uint32 CONFIG_PC0; + uint32 CONFIG_PC1; + uint32 CONFIG_PC6; + uint32 CONFIG_PC7; + uint32 CONFIG_PC8; + uint32 CONFIG_DELAY; + uint32 CONFIG_FMT0; + uint32 CONFIG_FMT1; + uint32 CONFIG_FMT2; + uint32 CONFIG_FMT3; +}spi_config_reg_t; + + + + + + + +#define SPI4_GCR1_CONFIGVALUE (0x01000000U | (uint32)((uint32)1U << 1U) | 1U) + +#define SPI4_INT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) +#define SPI4_LVL_CONFIGVALUE ((uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) + +#define SPI4_PC0_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U)) +#define SPI4_PC1_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U)) +#define SPI4_PC6_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U)) +#define SPI4_PC7_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U)) +#define SPI4_PC8_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U)) + +#define SPI4_DELAY_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 0U)) + +#define SPI4_FMT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) +#define SPI4_FMT1_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) +#define SPI4_FMT2_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) +#define SPI4_FMT3_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)109U << 8U) | (uint32)((uint32)16U << 0U)) + + + +/** + * @defgroup SPI SPI + * @brief Serial Peripheral Interface Module. + * + * SPI is a high-speed synchronous serial input/output port that allows a serial bit stream of + * programmed length (2 to 16 bits) to be shifted in and out of the device at a programmed bit-transfer rate. + * + * Related Files + * - reg_spi.h + * - spi.h + * - spi.c + * @addtogroup SPI + * @{ + */ + +/* SPI Interface Functions */ +void spiInit(void); +void spiSetFunctional(spiBASE_t *spi, uint32 port); +void spiEnableNotification(spiBASE_t *spi, uint32 flags); +void spiDisableNotification(spiBASE_t *spi, uint32 flags); +uint32 spiTransmitData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff); +void spiSendData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff); +uint32 spiReceiveData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * destbuff); +void spiGetData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * destbuff); +uint32 spiTransmitAndReceiveData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff, uint16 * destbuff); +void spiSendAndGetData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff, uint16 * destbuff); +void spiEnableLoopback(spiBASE_t *spi, loopBackType_t Loopbacktype); +void spiDisableLoopback(spiBASE_t *spi); +SpiDataStatus_t SpiTxStatus(spiBASE_t *spi); +SpiDataStatus_t SpiRxStatus(spiBASE_t *spi); +void spi4GetConfigValue(spi_config_reg_t *config_reg, config_value_type_t type); + +/** @fn void spiNotification(spiBASE_t *spi, uint32 flags) +* @brief Interrupt callback +* @param[in] spi - Spi module base address +* @param[in] flags - Copy of error interrupt flags +* +* This is a callback that is provided by the application and is called upon +* an interrupt. The parameter passed to the callback is a copy of the +* interrupt flag register. +*/ +void spiNotification(spiBASE_t *spi, uint32 flags); + +/** @fn void spiEndNotification(spiBASE_t *spi) +* @brief Interrupt callback for End of TX or RX data length. +* @param[in] spi - Spi module base address +* +* This is a callback that is provided by the application and is called upon +* an interrupt at the End of TX or RX data length. +*/ +void spiEndNotification(spiBASE_t *spi); + +/**@}*/ +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +#ifdef __cplusplus +} +#endif /*extern "C" */ + +#endif Index: firmware/include/std_nhet.h =================================================================== diff -u --- firmware/include/std_nhet.h (revision 0) +++ firmware/include/std_nhet.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,2499 @@ +/** @file std_nhet.h +* @brief NHET Instruction Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +#ifndef __STD_NHET_H__ +#define __STD_NHET_H__ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "sys_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +#ifndef HET_v2 +# define HET_v2 0 +#endif + +#if ((__little_endian__ == 0) || (__LITTLE_ENDIAN__ == 0) || defined(_TMS470_BIG) || defined(__big_endian__)) + +#ifndef HETBYTE +# define HETBYTE uint8 +#endif + +typedef struct memory_format +{ + uint32 program_word ; + uint32 control_word ; + uint32 data_word ; + uint32 reserved_word ; +} HET_MEMORY ; + +/*---------------------------------------------*/ +/* ACMP INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct acmp_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 : 9 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 coutprv : 1 ; + uint32 : 2 ; + uint32 en_pin_action : 1 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + uint32 ext_reg : 1 ; + uint32 : 2 ; + uint32 pin_action : 1 ; + uint32 : 1 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + uint32 data : 25 ; + uint32 : 7 ; + +} ACMP_FIELDS; + +typedef union +{ + ACMP_FIELDS acmp ; + HET_MEMORY memory ; +} ACMP_INSTRUCTION; + + +/*---------------------------------------------*/ +/* ECMP INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct ecmp_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 hr_lr : 1 ; + uint32 angle_compare : 1 ; + uint32 : 7 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 : 3 ; + uint32 en_pin_action : 1 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + uint32 : 1 ; + uint32 sub_opcode : 2 ; + uint32 pin_action : 1 ; + uint32 opposite_action : 1 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} ECMP_FIELDS; + +typedef union +{ + ECMP_FIELDS ecmp ; + HET_MEMORY memory ; +} ECMP_INSTRUCTION; + + +/*---------------------------------------------*/ +/* SCMP INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct scmp_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 : 2 ; + uint32 : 2 ; + uint32 : 5 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 coutprv : 1 ; + uint32 : 2 ; + uint32 en_pin_action : 1 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + uint32 : 1 ; + uint32 compare_mode : 2 ; + uint32 pin_action : 1 ; + uint32 : 2 ; + uint32 restart_en : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 : 7 ; + +} SCMP_FIELDS ; + +typedef union +{ + SCMP_FIELDS scmp ; + HET_MEMORY memory ; +} SCMP_INSTRUCTION; + + +/*---------------------------------------------*/ +/* MCMP INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct mcmp_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 hr_lr : 1 ; + uint32 angle_compare : 1 ; + uint32 : 1 ; + uint32 save_subtract : 1 ; + uint32 : 5 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 : 3 ; + uint32 en_pin_action : 1 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + uint32 : 1 ; + uint32 sub_opcode : 1 ; + uint32 order : 1 ; + uint32 pin_action : 1 ; + uint32 opposite_action : 1 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} MCMP_FIELDS ; + +typedef union +{ + MCMP_FIELDS mcmp ; + HET_MEMORY memory ; +} MCMP_INSTRUCTION; + + +/*---------------------------------------------*/ +/* MOV64 INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct mov64_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 : 3 ; + uint32 en_pin_action : 1 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + uint32 : 1 ; + uint32 compare_mode : 2 ; + uint32 pin_action : 1 ; + uint32 opposite_action : 1 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} MOV64_FIELDS ; + +typedef union +{ + MOV64_FIELDS mov64 ; + HET_MEMORY memory ; +} MOV64_INSTRUCTION; + + +/*---------------------------------------------*/ +/* DADM64 INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct dadm64_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 : 3 ; + uint32 en_pin_action : 1 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + uint32 : 1 ; + uint32 compare_mode : 2 ; + uint32 pin_action : 1 ; + uint32 opposite_action : 1 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} DADM64_FIELDS ; + +typedef union +{ + DADM64_FIELDS dadm64 ; + HET_MEMORY memory ; +} DADM64_INSTRUCTION; + + +/*---------------------------------------------*/ +/* RADM64 INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct RADM64_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 : 3 ; + uint32 en_pin_action : 1 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + uint32 : 1 ; + uint32 compare_mode : 2 ; + uint32 pin_action : 1 ; + uint32 opposite_action : 1 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} RADM64_FIELDS ; + + +typedef union +{ + RADM64_FIELDS radm64 ; + HET_MEMORY memory ; +} RADM64_INSTRUCTION; + + +/*---------------------------------------------*/ +/* MOV32 INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct MOV32_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 5 ; + uint32 auto_read_clear : 1 ; + uint32 : 3 ; + uint32 z_flag : 1 ; + uint32 : 15 ; + uint32 init_flag : 1 ; + uint32 sub_opcode : 1 ; + uint32 move_type : 2 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} MOV32_FIELDS ; + + +typedef union +{ + MOV32_FIELDS mov32 ; + HET_MEMORY memory ; +} MOV32_INSTRUCTION; + + +/*---------------------------------------------*/ +/* ADM32 INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct ADM32_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 5 ; + uint32 auto_read_clear : 1 ; + uint32 : 19 ; + uint32 init_flag : 1 ; + uint32 sub_opcode : 1 ; + uint32 move_type : 2 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} ADM32_FIELDS ; + + +typedef union +{ + ADM32_FIELDS adm32 ; + HET_MEMORY memory ; +} ADM32_INSTRUCTION; + + +/*---------------------------------------------*/ +/* ADCNST INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct ADCNST_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 5 ; + uint32 control : 1 ; /* pk */ + uint32 : 1 ; + uint32 constant : 25 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} ADCNST_FIELDS ; + + +typedef union +{ + ADCNST_FIELDS adcnst ; + HET_MEMORY memory ; +} ADCNST_INSTRUCTION; + + +/*----------------------------------------------*/ +/* ADD INSTRUCTION */ +/*----------------------------------------------*/ + +typedef struct ADD_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 5 ; + uint32 control : 1; + uint32 sub_opcode3 : 3 ; + uint32 src_1 : 4 ; + uint32 src_2 : 3 ; + uint32 shft_mode : 3 ; + uint32 shft_cnt : 5 ; + uint32 reg_ext : 1 ; + uint32 init_flag : 1 ; + uint32 sub_opcode1 : 1 ; + uint32 rem_dest : 2 ; + uint32 reg : 2 ; + uint32 : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} ADD_FIELDS ; + + +typedef union +{ + ADD_FIELDS add ; + HET_MEMORY memory ; +} ADD_INSTRUCTION; + + + +/*----------------------------------------------*/ +/* ADC INSTRUCTION */ +/*----------------------------------------------*/ + +typedef struct ADC_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 5 ; + uint32 control : 1; + uint32 sub_opcode3 : 3 ; + uint32 src_1 : 4 ; + uint32 src_2 : 3 ; + uint32 shft_mode : 3 ; + uint32 shft_cnt : 5 ; + uint32 reg_ext : 1 ; + uint32 init_flag : 1 ; + uint32 sub_opcode1 : 1 ; + uint32 rem_dest : 2 ; + uint32 reg : 2 ; + uint32 : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} ADC_FIELDS ; + + +typedef union +{ + ADC_FIELDS adc ; + HET_MEMORY memory ; +} ADC_INSTRUCTION; + + + +/*----------------------------------------------*/ +/* SUB INSTRUCTION */ +/*----------------------------------------------*/ + +typedef struct SUB_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 5 ; + uint32 control : 1; + uint32 sub_opcode3 : 3 ; + uint32 src_1 : 4 ; + uint32 src_2 : 3 ; + uint32 shft_mode : 3 ; + uint32 shft_cnt : 5 ; + uint32 reg_ext : 1 ; + uint32 init_flag : 1 ; + uint32 sub_opcode1 : 1 ; + uint32 rem_dest : 2 ; + uint32 reg : 2 ; + uint32 : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} SUB_FIELDS ; + + +typedef union +{ + SUB_FIELDS sub ; + HET_MEMORY memory ; +} SUB_INSTRUCTION; + + + +/*----------------------------------------------*/ +/* SBB INSTRUCTION */ +/*----------------------------------------------*/ + +typedef struct SBB_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 5 ; + uint32 control : 1; + uint32 sub_opcode3 : 3 ; + uint32 src_1 : 4 ; + uint32 src_2 : 3 ; + uint32 shft_mode : 3 ; + uint32 shft_cnt : 5 ; + uint32 reg_ext : 1 ; + uint32 init_flag : 1 ; + uint32 sub_opcode1 : 1 ; + uint32 rem_dest : 2 ; + uint32 reg : 2 ; + uint32 : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} SBB_FIELDS ; + + +typedef union +{ + SBB_FIELDS sbb ; + HET_MEMORY memory ; +} SBB_INSTRUCTION; + + + +/*----------------------------------------------*/ +/* AND INSTRUCTION */ +/*----------------------------------------------*/ + +typedef struct AND_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 5 ; + uint32 control : 1; + uint32 sub_opcode3 : 3 ; + uint32 src_1 : 4 ; + uint32 src_2 : 3 ; + uint32 shft_mode : 3 ; + uint32 shft_cnt : 5 ; + uint32 reg_ext : 1 ; + uint32 init_flag : 1 ; + uint32 sub_opcode1 : 1 ; + uint32 rem_dest : 2 ; + uint32 reg : 2 ; + uint32 : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} AND_FIELDS ; + + +typedef union +{ +#ifdef __cplusplus + AND_FIELDS and_cpp ; +#else + AND_FIELDS and ; +#endif + HET_MEMORY memory ; +} AND_INSTRUCTION; + + + +/*----------------------------------------------*/ +/* OR INSTRUCTION */ +/*----------------------------------------------*/ + + +typedef struct OR_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 5 ; + uint32 control : 1; + uint32 sub_opcode3 : 3 ; + uint32 src_1 : 4 ; + uint32 src_2 : 3 ; + uint32 shft_mode : 3 ; + uint32 shft_cnt : 5 ; + uint32 reg_ext : 1 ; + uint32 init_flag : 1 ; + uint32 sub_opcode1 : 1 ; + uint32 rem_dest : 2 ; + uint32 reg : 2 ; + uint32 : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} OR_FIELDS ; + + +typedef union +{ +#ifdef __cplusplus + OR_FIELDS or_cpp ; +#else + OR_FIELDS or ; +#endif + HET_MEMORY memory ; +} OR_INSTRUCTION; + + + +/*----------------------------------------------*/ +/* XOR INSTRUCTION */ +/*----------------------------------------------*/ + +typedef struct XOR_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 remote_address : 9 ; + + uint32 : 5 ; + uint32 control : 1; + uint32 sub_opcode3 : 3 ; + uint32 src_1 : 4 ; + uint32 src_2 : 3 ; + uint32 shft_mode : 3 ; + uint32 shft_cnt : 5 ; + uint32 reg_ext : 1 ; + uint32 init_flag : 1 ; + uint32 sub_opcode1 : 1 ; + uint32 rem_dest : 2 ; + uint32 reg : 2 ; + uint32 : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} XOR_FIELDS ; + + +typedef union +{ +#ifdef __cplusplus + XOR_FIELDS xor_cpp ; +#else + XOR_FIELDS xor ; +#endif + HET_MEMORY memory ; +} XOR_INSTRUCTION; + + + +/*---------------------------------------------*/ +/* CNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct CNT_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 angle_cnt : 1 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 : 4 ; + uint32 interrupt_enable : 1 ; + + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 : 1 ; + uint32 max : 25 ; + + + uint32 data : 25 ; + uint32 : 7 ; + +} CNT_FIELDS ; + +typedef union +{ + CNT_FIELDS cnt ; + HET_MEMORY memory ; +} CNT_INSTRUCTION; + + +/*---------------------------------------------*/ +/* APCNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct apcnt_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 interrupt_enable : 1 ; + uint32 edge_select : 2 ; + uint32 : 6 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 previous_bit : 1 ; + uint32 count : 25 ; + + + uint32 data : 25 ; + uint32 : 7 ; + +} APCNT_FIELDS ; + +typedef union +{ + APCNT_FIELDS apcnt ; + HET_MEMORY memory ; +} APCNT_INSTRUCTION; + + + +/*---------------------------------------------*/ +/* PCNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct pcnt_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 interrupt_enable : 1 ; + uint32 period_pulse_select : 2 ; + uint32 : 1 ; + uint32 pin_select : 5 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 previous_bit : 1 ; + uint32 count : 25 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} PCNT_FIELDS ; + +typedef union +{ + PCNT_FIELDS pcnt ; + HET_MEMORY memory ; +} PCNT_INSTRUCTION; + + +/*---------------------------------------------*/ +/* SCNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct scnt_format +{ + uint32 : 9 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 : 1 ; + uint32 count_mode : 2 ; + uint32 step_width : 2 ; + uint32 : 4 ; + + uint32 : 5 ; + uint32 auto_read_clear : 1 ; + uint32 : 1 ; + uint32 gap_start : 25 ; + + + uint32 data : 25 ; + uint32 : 7 ; + +} SCNT_FIELDS ; + +typedef union +{ + SCNT_FIELDS scnt ; + HET_MEMORY memory ; +} SCNT_INSTRUCTION; + + + +/*---------------------------------------------*/ +/* ACNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct acnt_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 edge_select : 1 ; + uint32 : 7 ; + uint32 interrupt_enable : 1 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 previous_bit : 1 ; + uint32 gap_end : 25 ; + + + uint32 data : 25 ; + uint32 : 7 ; + +} ACNT_FIELDS ; + +typedef union +{ + ACNT_FIELDS acnt ; + HET_MEMORY memory ; +} ACNT_INSTRUCTION; + + +/*---------------------------------------------*/ +/* ECNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct ecnt_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 : 1 ; + uint32 count_mode : 2 ; + uint32 : 6 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 previous_bit : 1 ; + uint32 : 3 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + uint32 : 1 ; + uint32 count_cond : 3 ; + uint32 : 1 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 : 7 ; + +} ECNT_FIELDS ; + +typedef union +{ + ECNT_FIELDS ecnt ; + HET_MEMORY memory ; +} ECNT_INSTRUCTION; + + + +/*---------------------------------------------*/ +/* RCNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct rcnt_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 : 1 ; + uint32 count_mode : 2 ; + uint32 : 5 ; + uint32 count_mode1 : 1 ; + + uint32 : 3 ; + uint32 : 2 ; + uint32 control : 1 ; + uint32 : 1 ; + uint32 divisor : 25 ; + + + uint32 data : 25 ; + uint32 : 7 ; + +} RCNT_FIELDS ; + +typedef union +{ + RCNT_FIELDS rcnt ; + HET_MEMORY memory ; +} RCNT_INSTRUCTION; + + +/*---------------------------------------------*/ +/* DJNZ INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct djnz_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 : 1 ; + uint32 sub_opcode : 2 ; + uint32 : 6 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 : 4 ; + uint32 cond_addr : 9 ; + uint32 : 10 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 : 7 ; + +} DJNZ_FIELDS ; + +typedef union +{ + DJNZ_FIELDS djnz ; + HET_MEMORY memory ; +} DJNZ_INSTRUCTION; + + +/*---------------------------------------------*/ +/* DJZ INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct djz_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 : 1 ; + uint32 sub_opcode : 2 ; + uint32 : 6 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 : 4 ; + uint32 cond_addr : 9 ; + uint32 : 10 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 : 7 ; + +} DJZ_FIELDS ; + +typedef union +{ + DJZ_FIELDS djz ; + HET_MEMORY memory ; +} DJZ_INSTRUCTION; + +/*---------------------------------------------*/ +/* PWCNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct pwcnt_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 hr_lr : 1 ; + uint32 count_mode : 2 ; + uint32 : 6 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 : 3 ; + uint32 en_pin_action : 1 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + uint32 : 3 ; + uint32 pin_action : 1 ; + uint32 opposite_action : 1 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} PWCNT_FIELDS ; + +typedef union +{ + PWCNT_FIELDS pwcnt ; + HET_MEMORY memory ; +} PWCNT_INSTRUCTION; + + +/*---------------------------------------------*/ +/* WCAP INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct wcap_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 hr_lr : 1 ; + uint32 : 8 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 previous_bit : 1 ; + uint32 : 3 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + uint32 : 1 ; + uint32 capture_condition : 2 ; + uint32 : 2 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} WCAP_FIELDS ; + +typedef union +{ + WCAP_FIELDS wcap ; + HET_MEMORY memory ; +} WCAP_INSTRUCTION; + +/*----------------------------------------------*/ +/* WCAPE INSTRUCTION */ +/*----------------------------------------------*/ +typedef struct wcape_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 : 9 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 previous_bit : 1 ; + uint32 : 3 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + uint32 : 1 ; + uint32 capture_condition : 2 ; + uint32 : 2 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 ts_data : 25 ; + uint32 ec_data : 7 ; + +} WCAPE_FIELDS ; + +typedef union +{ + WCAPE_FIELDS wcape ; + HET_MEMORY memory ; +} WCAPE_INSTRUCTION; + + +/*---------------------------------------------*/ +/* BR INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct br_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 : 9 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 previous_bit : 1 ; + uint32 : 3 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + +#if HET_v2 + uint32 branch_condition : 5 ; +#else + uint32 branch_condition : 3 ; + uint32 : 1 ; + uint32 : 1 ; +#endif + + uint32 : 2 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 hr_data : 7 ; + +} BR_FIELDS ; + +typedef union +{ + BR_FIELDS br ; + HET_MEMORY memory ; +} BR_INSTRUCTION; + + +/*---------------------------------------------*/ +/* SHFT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct shft_format +{ + uint32 : 6 ; + uint32 reqnum : 3 ; + uint32 brk : 1 ; + uint32 next_program_address : 9 ; + uint32 op_code : 4 ; + uint32 : 5 ; + uint32 shift_mode : 4 ; + + uint32 : 3 ; + uint32 request : 2 ; + uint32 auto_read_clear : 1 ; + uint32 previous_bit : 1 ; + uint32 : 3 ; + uint32 cond_addr : 9 ; + uint32 pin_select : 5 ; + uint32 : 1 ; + uint32 shift_condition : 2 ; + uint32 : 2 ; + uint32 t_register_select : 1 ; + uint32 ab_register_select : 1 ; + uint32 interrupt_enable : 1 ; + + + uint32 data : 25 ; + uint32 : 7 ; + +} SHFT_FIELDS ; + +typedef union +{ + SHFT_FIELDS shft ; + HET_MEMORY memory ; +} SHFT_INSTRUCTION; + +/* ---------------------------------------------------------------------------------------------------- */ + +#else + +#ifndef HETBYTE +# define HETBYTE uint8 +#endif + +typedef struct memory_format +{ + uint32 program_word ; + uint32 control_word ; + uint32 data_word ; + uint32 reserved_word ; +} HET_MEMORY ; + +/*---------------------------------------------*/ +/* ACMP INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct acmp_format +{ + uint32 : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 : 1 ; + uint32 pin_action : 1 ; + uint32 : 3 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 en_pin_action : 1 ; + uint32 : 2 ; + uint32 coutprv : 1 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 : 7 ; + uint32 data : 25 ; + +} ACMP_FIELDS; + +typedef union +{ + ACMP_FIELDS acmp ; + HET_MEMORY memory ; +} ACMP_INSTRUCTION; + + +/*---------------------------------------------*/ +/* ECMP INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct ecmp_format +{ + uint32 : 7 ; + uint32 angle_compare : 1 ; + uint32 hr_lr : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 opposite_action : 1 ; + uint32 pin_action : 1 ; + uint32 sub_opcode : 2 ; + uint32 : 1 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 en_pin_action : 1 ; + uint32 : 3 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + +} ECMP_FIELDS; + +typedef union +{ + ECMP_FIELDS ecmp ; + HET_MEMORY memory ; +} ECMP_INSTRUCTION; + + +/*---------------------------------------------*/ +/* SCMP INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct scmp_format +{ + uint32 : 5 ; + uint32 : 2 ; + uint32 : 2 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 interrupt_enable : 1 ; + uint32 restart_en : 1 ; + uint32 : 2 ; + uint32 pin_action : 1 ; + uint32 compare_mode : 2 ; + uint32 : 1 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 en_pin_action : 1 ; + uint32 : 2 ; + uint32 coutprv : 1 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 : 7 ; + uint32 data : 25 ; + +} SCMP_FIELDS ; + +typedef union +{ + SCMP_FIELDS scmp ; + HET_MEMORY memory ; +} SCMP_INSTRUCTION; + + +/*---------------------------------------------*/ +/* MCMP INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct mcmp_format +{ + uint32 : 5 ; + uint32 save_subtract : 1 ; + uint32 : 1 ; + uint32 angle_compare : 1 ; + uint32 hr_lr : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 opposite_action : 1 ; + uint32 pin_action : 1 ; + uint32 order : 1 ; + uint32 sub_opcode : 1 ; + uint32 : 1 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 en_pin_action : 1 ; + uint32 : 3 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + + uint32 hr_data : 7 ; + uint32 data : 25 ; + +} MCMP_FIELDS ; + +typedef union +{ + MCMP_FIELDS mcmp ; + HET_MEMORY memory ; +} MCMP_INSTRUCTION; + +/*---------------------------------------------*/ +/* MOV64 INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct mov64_format +{ + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 opposite_action : 1 ; + uint32 pin_action : 1 ; + uint32 compare_mode : 2 ; + uint32 : 1 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 en_pin_action : 1 ; + uint32 : 3 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + +} MOV64_FIELDS ; + +typedef union +{ + MOV64_FIELDS mov64 ; + HET_MEMORY memory ; +} MOV64_INSTRUCTION; + + +/*---------------------------------------------*/ +/* DADM64 INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct dadm64_format +{ + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 opposite_action : 1 ; + uint32 pin_action : 1 ; + uint32 compare_mode : 2 ; + uint32 : 1 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 en_pin_action : 1 ; + uint32 : 3 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + +} DADM64_FIELDS ; + +typedef union +{ + DADM64_FIELDS dadm64 ; + HET_MEMORY memory ; +} DADM64_INSTRUCTION; + + +/*---------------------------------------------*/ +/* RADM64 INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct RADM64_format +{ + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 opposite_action : 1 ; + uint32 pin_action : 1 ; + uint32 compare_mode : 2 ; + uint32 : 1 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 en_pin_action : 1 ; + uint32 : 3 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + +} RADM64_FIELDS ; + + +typedef union +{ + RADM64_FIELDS radm64 ; + HET_MEMORY memory ; +} RADM64_INSTRUCTION; + + +/*---------------------------------------------*/ +/* MOV32 INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct MOV32_format +{ + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 move_type : 2 ; + uint32 sub_opcode : 1 ; + uint32 init_flag : 1 ; + uint32 : 15 ; + uint32 z_flag : 1 ; + uint32 : 3 ; + uint32 auto_read_clear : 1 ; + uint32 : 5 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + +} MOV32_FIELDS ; + + +typedef union +{ + MOV32_FIELDS mov32 ; + HET_MEMORY memory ; +} MOV32_INSTRUCTION; + + +/*---------------------------------------------*/ +/* ADM32 INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct ADM32_format +{ + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 move_type : 2 ; + uint32 sub_opcode : 1 ; + uint32 init_flag : 1 ; + uint32 : 19 ; + uint32 auto_read_clear : 1 ; + uint32 : 5 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + +} ADM32_FIELDS ; + + +typedef union +{ + ADM32_FIELDS adm32 ; + HET_MEMORY memory ; +} ADM32_INSTRUCTION; + + +/*---------------------------------------------*/ +/* ADCNST INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct ADCNST_format +{ + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 constant : 25 ; + uint32 : 1 ; + uint32 : 5 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + +} ADCNST_FIELDS ; + + +typedef union +{ + ADCNST_FIELDS adcnst ; + HET_MEMORY memory ; +} ADCNST_INSTRUCTION; + + + +/*----------------------------------------------*/ +/* ADD INSTRUCTION */ +/*----------------------------------------------*/ +typedef struct ADD_format +{ + + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 : 1 ; + uint32 reg : 2 ; + uint32 rem_dest : 2 ; + uint32 sub_opcode1 : 1 ; + uint32 init_flag : 1 ; + uint32 reg_ext : 1 ; + uint32 shft_cnt : 5 ; + uint32 shft_mode : 3 ; + uint32 src_2 : 3 ; + uint32 src_1 : 4 ; + uint32 sub_opcode3 : 3 ; + uint32 control : 1 ; + uint32 : 5 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + + +} ADD_FIELDS ; + + +typedef union +{ + ADD_FIELDS add ; + HET_MEMORY memory ; +} ADD_INSTRUCTION; + + + + +/*----------------------------------------------*/ +/* ADC INSTRUCTION */ +/*----------------------------------------------*/ + + +typedef struct ADC_format +{ + + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 : 1 ; + uint32 reg : 2 ; + uint32 rem_dest : 2 ; + uint32 sub_opcode1 : 1 ; + uint32 init_flag : 1 ; + uint32 reg_ext : 1 ; + uint32 shft_cnt : 5 ; + uint32 shft_mode : 3 ; + uint32 src_2 : 3 ; + uint32 src_1 : 4 ; + uint32 sub_opcode3 : 3 ; + uint32 control : 1 ; + uint32 : 5 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + + +} ADC_FIELDS ; + + +typedef union +{ + ADC_FIELDS adc ; + HET_MEMORY memory ; +} ADC_INSTRUCTION; + + + + +/*----------------------------------------------*/ +/* SUB INSTRUCTION */ +/*----------------------------------------------*/ + +typedef struct SUB_format +{ + + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 : 1 ; + uint32 reg : 2 ; + uint32 rem_dest : 2 ; + uint32 sub_opcode1 : 1 ; + uint32 init_flag : 1 ; + uint32 reg_ext : 1 ; + uint32 shft_cnt : 5 ; + uint32 shft_mode : 3 ; + uint32 src_2 : 3 ; + uint32 src_1 : 4 ; + uint32 sub_opcode3 : 3 ; + uint32 control : 1 ; + uint32 : 5 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + + +} SUB_FIELDS ; + + +typedef union +{ + SUB_FIELDS sub ; + HET_MEMORY memory ; +} SUB_INSTRUCTION; + + + + + +/*----------------------------------------------*/ +/* SBB INSTRUCTION */ +/*----------------------------------------------*/ + +typedef struct SBB_format +{ + + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 : 1 ; + uint32 reg : 2 ; + uint32 rem_dest : 2 ; + uint32 sub_opcode1 : 1 ; + uint32 init_flag : 1 ; + uint32 reg_ext : 1 ; + uint32 shft_cnt : 5 ; + uint32 shft_mode : 3 ; + uint32 src_2 : 3 ; + uint32 src_1 : 4 ; + uint32 sub_opcode3 : 3 ; + uint32 control : 1 ; + uint32 : 5 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + + +} SBB_FIELDS ; + + +typedef union +{ + SBB_FIELDS sbb ; + HET_MEMORY memory ; +} SBB_INSTRUCTION; + + + + +/*----------------------------------------------*/ +/* AND INSTRUCTION */ +/*----------------------------------------------*/ + +typedef struct AND_format +{ + + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 : 1 ; + uint32 reg : 2 ; + uint32 rem_dest : 2 ; + uint32 sub_opcode1 : 1 ; + uint32 init_flag : 1 ; + uint32 reg_ext : 1 ; + uint32 shft_cnt : 5 ; + uint32 shft_mode : 3 ; + uint32 src_2 : 3 ; + uint32 src_1 : 4 ; + uint32 sub_opcode3 : 3 ; + uint32 control : 1 ; + uint32 : 5 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + + +} AND_FIELDS ; + + +typedef union +{ +#ifdef __cplusplus + AND_FIELDS and_cpp ; +#else + AND_FIELDS and ; +#endif + HET_MEMORY memory ; +} AND_INSTRUCTION; + + + +/*----------------------------------------------*/ +/* OR INSTRUCTION */ +/*----------------------------------------------*/ + +typedef struct OR_format +{ + + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 : 1 ; + uint32 reg : 2 ; + uint32 rem_dest : 2 ; + uint32 sub_opcode1 : 1 ; + uint32 init_flag : 1 ; + uint32 reg_ext : 1 ; + uint32 shft_cnt : 5 ; + uint32 shft_mode : 3 ; + uint32 src_2 : 3 ; + uint32 src_1 : 4 ; + uint32 sub_opcode3 : 3 ; + uint32 control : 1 ; + uint32 : 5 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + + +} OR_FIELDS ; + + +typedef union +{ +#ifdef __cplusplus + OR_FIELDS or_cpp ; +#else + OR_FIELDS or ; +#endif + HET_MEMORY memory ; +} OR_INSTRUCTION; + + + +/*----------------------------------------------*/ +/* XOR INSTRUCTION */ +/*----------------------------------------------*/ + +typedef struct XOR_format +{ + + uint32 remote_address : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 : 1 ; + uint32 reg : 2 ; + uint32 rem_dest : 2 ; + uint32 sub_opcode1 : 1 ; + uint32 init_flag : 1 ; + uint32 reg_ext : 1 ; + uint32 shft_cnt : 5 ; + uint32 shft_mode : 3 ; + uint32 src_2 : 3 ; + uint32 src_1 : 4 ; + uint32 sub_opcode3 : 3 ; + uint32 control : 1 ; + uint32 : 5 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + + +} XOR_FIELDS ; + + +typedef union +{ +#ifdef __cplusplus + XOR_FIELDS xor_cpp ; +#else + XOR_FIELDS xor ; +#endif + HET_MEMORY memory ; +} XOR_INSTRUCTION; + + + + +/*---------------------------------------------*/ +/* CNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct CNT_format +{ + uint32 interrupt_enable : 1 ; + uint32 : 4 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 angle_cnt : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 max : 25 ; + uint32 : 1 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 : 7 ; + uint32 data : 25 ; + +} CNT_FIELDS ; + +typedef union +{ + CNT_FIELDS cnt ; + HET_MEMORY memory ; +} CNT_INSTRUCTION; + + +/*---------------------------------------------*/ +/* APCNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct apcnt_format +{ + uint32 : 6 ; + uint32 edge_select : 2 ; + uint32 interrupt_enable : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 count : 25 ; + uint32 previous_bit : 1 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 : 7 ; + uint32 data : 25 ; + +} APCNT_FIELDS ; + +typedef union +{ + APCNT_FIELDS apcnt ; + HET_MEMORY memory ; +} APCNT_INSTRUCTION; + + + +/*---------------------------------------------*/ +/* PCNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct pcnt_format +{ + uint32 pin_select : 5 ; + uint32 : 1 ; + uint32 period_pulse_select : 2 ; + uint32 interrupt_enable : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 count : 25 ; + uint32 previous_bit : 1 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + +} PCNT_FIELDS ; + +typedef union +{ + PCNT_FIELDS pcnt ; + HET_MEMORY memory ; +} PCNT_INSTRUCTION; + + +/*---------------------------------------------*/ +/* SCNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct scnt_format +{ + uint32 : 4 ; + uint32 step_width : 2 ; + uint32 count_mode : 2 ; + uint32 : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 : 9 ; + + uint32 gap_start : 25 ; + uint32 : 1 ; + uint32 auto_read_clear : 1 ; + uint32 : 5 ; + + uint32 : 7 ; + uint32 data : 25 ; + +} SCNT_FIELDS ; + +typedef union +{ + SCNT_FIELDS scnt ; + HET_MEMORY memory ; +} SCNT_INSTRUCTION; + +/*---------------------------------------------*/ +/* ACNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct acnt_format +{ + uint32 interrupt_enable : 1 ; + uint32 : 7 ; + uint32 edge_select : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 gap_end : 25 ; + uint32 previous_bit : 1 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 : 7 ; + uint32 data : 25 ; + +} ACNT_FIELDS ; + +typedef union +{ + ACNT_FIELDS acnt ; + HET_MEMORY memory ; +} ACNT_INSTRUCTION; + + +/*---------------------------------------------*/ +/* ECNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct ecnt_format +{ + uint32 : 6 ; + uint32 count_mode : 2 ; + uint32 : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 : 1 ; + uint32 count_cond : 3 ; + uint32 : 1 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 : 3 ; + uint32 previous_bit : 1 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 : 7 ; + uint32 data : 25 ; + + +} ECNT_FIELDS ; + +typedef union +{ + ECNT_FIELDS ecnt ; + HET_MEMORY memory ; +} ECNT_INSTRUCTION; + +/*---------------------------------------------*/ +/* RCNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct rcnt_format +{ + + uint32 count_mode1 : 1 ; + uint32 : 5 ; + uint32 count_mode : 2 ; + uint32 : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + + uint32 divisor : 25 ; + uint32 : 1 ; + uint32 control : 1 ; + uint32 : 2 ; + uint32 : 3 ; + + uint32 : 7 ; + uint32 data : 25 ; + + +} RCNT_FIELDS ; + +typedef union +{ + RCNT_FIELDS rcnt ; + HET_MEMORY memory ; +} RCNT_INSTRUCTION; + + +/*---------------------------------------------*/ +/* DJNZ INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct djnz_format +{ + uint32 : 6 ; + uint32 sub_opcode : 2 ; + uint32 : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 : 10 ; + uint32 cond_addr : 9 ; + uint32 : 4 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 : 7 ; + uint32 data : 25 ; + +} DJNZ_FIELDS ; + +typedef union +{ + DJNZ_FIELDS djnz ; + HET_MEMORY memory ; +} DJNZ_INSTRUCTION; + + +/*---------------------------------------------*/ +/* DJZ INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct djz_format +{ + uint32 : 6 ; + uint32 sub_opcode : 2 ; + uint32 : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 : 10 ; + uint32 cond_addr : 9 ; + uint32 : 4 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 : 7 ; + uint32 data : 25 ; + +} DJZ_FIELDS ; + +typedef union +{ + DJZ_FIELDS djz ; + HET_MEMORY memory ; +} DJZ_INSTRUCTION; + +/*---------------------------------------------*/ +/* PWCNT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct pwcnt_format +{ + uint32 : 6 ; + uint32 count_mode : 2 ; + uint32 hr_lr : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 opposite_action : 1 ; + uint32 pin_action : 1 ; + uint32 : 3 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 en_pin_action : 1 ; + uint32 : 3 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + + uint32 hr_data : 7 ; + uint32 data : 25 ; + +} PWCNT_FIELDS ; + +typedef union +{ + PWCNT_FIELDS pwcnt ; + HET_MEMORY memory ; +} PWCNT_INSTRUCTION; + + +/*---------------------------------------------*/ +/* WCAP INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct wcap_format +{ + uint32 : 8 ; + uint32 hr_lr : 1 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 : 2 ; + uint32 capture_condition : 2 ; + uint32 : 1 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 : 3 ; + uint32 previous_bit : 1 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + +} WCAP_FIELDS ; + +typedef union +{ + WCAP_FIELDS wcap ; + HET_MEMORY memory ; +} WCAP_INSTRUCTION; + +/*----------------------------------------------*/ +/* WCAPE INSTRUCTION */ +/*----------------------------------------------*/ +typedef struct wcape_format +{ + uint32 : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 : 2 ; + uint32 capture_condition : 2 ; + uint32 : 1 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 previous_bit : 1 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 ec_data : 7 ; + uint32 ts_data : 25 ; + +} WCAPE_FIELDS ; + +typedef union +{ + WCAPE_FIELDS wcape ; + HET_MEMORY memory ; +} WCAPE_INSTRUCTION; + + +/*---------------------------------------------*/ +/* BR INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct br_format +{ + uint32 : 9 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 interrupt_enable : 1 ; + uint32 : 2 ; + uint32 : 1 ; + uint32 : 1 ; + uint32 branch_condition : 3 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 : 3 ; + uint32 previous_bit : 1 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 hr_data : 7 ; + uint32 data : 25 ; + +} BR_FIELDS ; + +typedef union +{ + BR_FIELDS br ; + HET_MEMORY memory ; +} BR_INSTRUCTION; + + +/*---------------------------------------------*/ +/* SHFT INSTRUCTION */ +/*---------------------------------------------*/ +typedef struct shft_format +{ + uint32 shift_mode : 4 ; + uint32 : 5 ; + uint32 op_code : 4 ; + uint32 next_program_address : 9 ; + uint32 brk : 1 ; + uint32 reqnum : 3 ; + uint32 : 6 ; + + uint32 interrupt_enable : 1 ; + uint32 ab_register_select : 1 ; + uint32 t_register_select : 1 ; + uint32 : 2 ; + uint32 shift_condition : 2 ; + uint32 : 1 ; + uint32 pin_select : 5 ; + uint32 cond_addr : 9 ; + uint32 : 3 ; + uint32 previous_bit : 1 ; + uint32 auto_read_clear : 1 ; + uint32 request : 2 ; + uint32 : 3 ; + + uint32 : 7 ; + uint32 data : 25 ; + +} SHFT_FIELDS ; + +typedef union +{ + SHFT_FIELDS shft ; + HET_MEMORY memory ; +} SHFT_INSTRUCTION; + +#endif + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +#ifdef __cplusplus +} +#endif /*extern "C" */ + +#endif +/*--------------------------- End Of File ----------------------------------*/ Index: firmware/include/sys_common.h =================================================================== diff -u --- firmware/include/sys_common.h (revision 0) +++ firmware/include/sys_common.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,130 @@ +/** @file sys_common.h +* @brief Common Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - General Definitions +* . +* which are relevant for all drivers. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __SYS_COMMON_H__ +#define __SYS_COMMON_H__ + +#include "hal_stdtypes.h" + +#ifdef __cplusplus +extern "C" { +#endif +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/************************************************************/ +/* Type Definitions */ +/************************************************************/ + +#ifndef _TBOOLEAN_DECLARED +typedef boolean tBoolean; +#define _TBOOLEAN_DECLARED +#endif + +/** @enum loopBackType +* @brief Loopback type definition +*/ +/** @typedef loopBackType_t +* @brief Loopback type Type Definition +* +* This type is used to select the module Loopback type Digital or Analog loopback. +*/ +typedef enum loopBackType +{ + Digital_Lbk = 0U, + Analog_Lbk = 1U +}loopBackType_t; + +/** @enum config_value_type +* @brief config type definition +*/ +/** @typedef config_value_type_t +* @brief config type Type Definition +* +* This type is used to specify the Initial and Current value. +*/ +typedef enum config_value_type +{ + InitialValue, + CurrentValue +}config_value_type_t; + +#ifndef __little_endian__ +#define __little_endian__ 1 +#endif +#ifndef __LITTLE_ENDIAN__ +#define __LITTLE_ENDIAN__ 1 +#endif + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/********************************************************************************/ +/* The ASSERT macro, which does the actual assertion checking. Typically, this */ +/* will be for procedure arguments. */ +/********************************************************************************/ +#ifdef DEBUG +#define ASSERT(expr) { \ + if(!(expr)) \ + { \ + __error__(__FILE__, __LINE__); \ + } \ + } +#else +#define ASSERT(expr) +#endif + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ +#ifdef __cplusplus +} +#endif + + +#endif Index: firmware/include/sys_core.h =================================================================== diff -u --- firmware/include/sys_core.h (revision 0) +++ firmware/include/sys_core.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,358 @@ +/** @file sys_core.h +* @brief System Core Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Core Interface Functions +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __SYS_CORE_H__ +#define __SYS_CORE_H__ + +#include "sys_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/** @def USER_STACK_LENGTH +* @brief USER Mode Stack length (in bytes) +* +* Alias for USER Mode Stack length (in bytes) +* +* @note: Use this macro for USER Mode Stack length (in bytes) +*/ +#define USER_STACK_LENGTH 0x00001000U + +/** @def SVC_STACK_LENGTH +* @brief SVC Mode Stack length (in bytes) +* +* Alias for SVC Mode Stack length (in bytes) +* +* @note: Use this macro for SVC Mode Stack length (in bytes) +*/ +#define SVC_STACK_LENGTH 0x00000100U + +/** @def FIQ_STACK_LENGTH +* @brief FIQ Mode Stack length (in bytes) +* +* Alias for FIQ Mode Stack length (in bytes) +* +* @note: Use this macro for FIQ Mode Stack length (in bytes) +*/ +#define FIQ_STACK_LENGTH 0x00000100U + +/** @def IRQ_STACK_LENGTH +* @brief IRQ Mode Stack length (in bytes) +* +* Alias for IRQ Mode Stack length (in bytes) +* +* @note: Use this macro for IRQ Mode Stack length (in bytes) +*/ +#define IRQ_STACK_LENGTH 0x00000100U + +/** @def ABORT_STACK_LENGTH +* @brief ABORT Mode Stack length (in bytes) +* +* Alias for ABORT Mode Stack length (in bytes) +* +* @note: Use this macro for ABORT Mode Stack length (in bytes) +*/ +#define ABORT_STACK_LENGTH 0x00000100U + +/** @def UNDEF_STACK_LENGTH +* @brief UNDEF Mode Stack length (in bytes) +* +* Alias for UNDEF Mode Stack length (in bytes) +* +* @note: Use this macro for UNDEF Mode Stack length (in bytes) +*/ +#define UNDEF_STACK_LENGTH 0x00000100U + +/* System Core Interface Functions */ + +/** @fn void _coreInitRegisters_(void) +* @brief Initialize Core register +*/ +void _coreInitRegisters_(void); + +/** @fn void _coreInitStackPointer_(void) +* @brief Initialize Core stack pointer +*/ +void _coreInitStackPointer_(void); + +/** @fn void _getCPSRValue_(void) +* @brief Get CPSR Value +*/ +uint32 _getCPSRValue_(void); + +/** @fn void _gotoCPUIdle_(void) +* @brief Take CPU to Idle state +*/ +void _gotoCPUIdle_(void); + +/** @fn void _coreEnableIrqVicOffset_(void) +* @brief Enable Irq offset propagation via Vic controller +*/ +void _coreEnableIrqVicOffset_(void); + +/** @fn void _coreEnableVfp_(void) +* @brief Enable vector floating point unit +*/ +void _coreEnableVfp_(void); + +/** @fn void _coreEnableEventBusExport_(void) +* @brief Enable event bus export for external monitoring modules +* @note It is required to enable event bus export to process ecc issues. +* +* This function enables event bus exports to external monitoring modules +* like tightly coupled RAM wrapper, Flash wrapper and error signaling module. +*/ +void _coreEnableEventBusExport_(void); + +/** @fn void _coreDisableEventBusExport_(void) +* @brief Disable event bus export for external monitoring modules +* +* This function disables event bus exports to external monitoring modules +* like tightly coupled RAM wrapper, Flash wrapper and error signaling module. +*/ +void _coreDisableEventBusExport_(void); + +/** @fn void _coreEnableRamEcc_(void) +* @brief Enable external ecc error for RAM odd and even bank +* @note It is required to enable event bus export to process ecc issues. +*/ +void _coreEnableRamEcc_(void); + +/** @fn void _coreDisableRamEcc_(void) +* @brief Disable external ecc error for RAM odd and even bank +*/ +void _coreDisableRamEcc_(void); + +/** @fn void _coreEnableFlashEcc_(void) +* @brief Enable external ecc error for the Flash +* @note It is required to enable event bus export to process ecc issues. +*/ +void _coreEnableFlashEcc_(void); + +/** @fn void _coreDisableFlashEcc_(void) +* @brief Disable external ecc error for the Flash +*/ +void _coreDisableFlashEcc_(void); + +/** @fn uint32 _coreGetDataFault_(void) +* @brief Get core data fault status register +* @return The function will return the data fault status register value: +* - bit [10,3..0]: +* - 0b00001: Alignment -> address is valid +* - 0b00000: Background -> address is valid +* - 0b01101: Permission -> address is valid +* - 0b01000: Precise External Abort -> address is valid +* - 0b10110: Imprecise External Abort -> address is unpredictable +* - 0b11001: Precise ECC Error -> address is valid +* - 0b11000: Imprecise ECC Error -> address is unpredictable +* - 0b00010: Debug -> address is unchanged +* - bit [11]: +* - 0: Read +* - 1: Write +* - bit [12]: +* - 0: AXI Decode Error (DECERR) +* - 1: AXI Slave Error (SLVERR) +*/ +uint32 _coreGetDataFault_(void); + +/** @fn void _coreClearDataFault_(void) +* @brief Clear core data fault status register +*/ +void _coreClearDataFault_(void); + +/** @fn uint32 _coreGetInstructionFault_(void) +* @brief Get core instruction fault status register +* @return The function will return the instruction fault status register value: +* - bit [10,3..0]: +* - 0b00001: Alignment -> address is valid +* - 0b00000: Background -> address is valid +* - 0b01101: Permission -> address is valid +* - 0b01000: Precise External Abort -> address is valid +* - 0b10110: Imprecise External Abort -> address is unpredictable +* - 0b11001: Precise ECC Error -> address is valid +* - 0b11000: Imprecise ECC Error -> address is unpredictable +* - 0b00010: Debug -> address is unchanged +* - bit [12]: +* - 0: AXI Decode Error (DECERR) +* - 1: AXI Slave Error (SLVERR) +*/ +uint32 _coreGetInstructionFault_(void); + +/** @fn void _coreClearInstructionFault_(void) +* @brief Clear core instruction fault status register +*/ +void _coreClearInstructionFault_(void); + +/** @fn uint32 _coreGetDataFaultAddress_(void) +* @brief Get core data fault address register +* @return The function will return the data fault address: +*/ +uint32 _coreGetDataFaultAddress_(void); + +/** @fn void _coreClearDataFaultAddress_(void) +* @brief Clear core data fault address register +*/ +void _coreClearDataFaultAddress_(void); + +/** @fn uint32 _coreGetInstructionFaultAddress_(void) +* @brief Get core instruction fault address register +* @return The function will return the instruction fault address: +*/ +uint32 _coreGetInstructionFaultAddress_(void); + +/** @fn void _coreClearInstructionFaultAddress_(void) +* @brief Clear core instruction fault address register +*/ +void _coreClearInstructionFaultAddress_(void); + +/** @fn uint32 _coreGetAuxiliaryDataFault_(void) +* @brief Get core auxiliary data fault status register +* @return The function will return the auxiliary data fault status register value: +* - bit [13..5]: +* - Index value for access giving error +* - bit [21]: +* - 0: Unrecoverable error +* - 1: Recoverable error +* - bit [23..22]: +* - 0: Side cache +* - 1: Side ATCM (Flash) +* - 2: Side BTCM (RAM) +* - 3: Reserved +* - bit [27..24]: +* - Cache way or way in which error occurred +*/ +uint32 _coreGetAuxiliaryDataFault_(void); + +/** @fn void _coreClearAuxiliaryDataFault_(void) +* @brief Clear core auxiliary data fault status register +*/ +void _coreClearAuxiliaryDataFault_(void); + +/** @fn uint32 _coreGetAuxiliaryInstructionFault_(void) +* @brief Get core auxiliary instruction fault status register +* @return The function will return the auxiliary instruction fault status register value: +* - bit [13..5]: +* - Index value for access giving error +* - bit [21]: +* - 0: Unrecoverable error +* - 1: Recoverable error +* - bit [23..22]: +* - 0: Side cache +* - 1: Side ATCM (Flash) +* - 2: Side BTCM (RAM) +* - 3: Reserved +* - bit [27..24]: +* - Cache way or way in which error occurred +*/ +uint32 _coreGetAuxiliaryInstructionFault_(void); + +/** @fn void _coreClearAuxiliaryInstructionFault_(void) +* @brief Clear core auxiliary instruction fault status register +*/ +void _coreClearAuxiliaryInstructionFault_(void); + +/** @fn void _disable_interrupt_(void) +* @brief Disable IRQ and FIQ Interrupt mode in CPSR register +* +* This function disables IRQ and FIQ Interrupt mode in CPSR register. +*/ +void _disable_interrupt_(void); + +/** @fn void _disable_IRQ_interrupt_(void) +* @brief Disable IRQ Interrupt mode in CPSR register +* +* This function disables IRQ Interrupt mode in CPSR register. +*/ +void _disable_IRQ_interrupt_(void); + +/** @fn void _disable_FIQ_interrupt_(void) +* @brief Disable FIQ Interrupt mode in CPSR register +* +* This function disables IRQ Interrupt mode in CPSR register. +*/ +void _disable_FIQ_interrupt_(void); + +/** @fn void _enable_interrupt_(void) +* @brief Enable IRQ and FIQ Interrupt mode in CPSR register +* +* This function Enables IRQ and FIQ Interrupt mode in CPSR register. +* User must call this function to enable Interrupts in non-OS environments. +*/ +void _enable_interrupt_(void); + +/** @fn void _esmCcmErrorsClear_(void) +* @brief Clears ESM Error caused due to CCM Errata in RevA Silicon +* +* This function Clears ESM Error caused due to CCM Errata +* in RevA Silicon immediately after powerup. +*/ +void _esmCcmErrorsClear_(void); + +/** @fn void _errata_CORTEXR4_66_(void) +* @brief Work Around for Errata CORTEX-R4#66 +* +* This function Disable out-of-order completion for divide +* instructions in Auxiliary Control register. +*/ +void _errata_CORTEXR4_66_(void); + +/** @fn void _errata_CORTEXR4_57_(void) +* @brief Work Around for Errata CORTEX-R4#57 +* +* Disable out-of-order single-precision floating point +* multiply-accumulate instruction completion. +*/ +void _errata_CORTEXR4_57_(void); + +#ifdef __cplusplus +} +#endif + +#endif Index: firmware/include/sys_dma.h =================================================================== diff -u --- firmware/include/sys_dma.h (revision 0) +++ firmware/include/sys_dma.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,367 @@ +/** @file dma.h +* @brief DMA Driver Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __DMA_H__ +#define __DMA_H__ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "reg_dma.h" + +#ifdef __cplusplus +extern "C" { +#endif +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @def BLOCK_TRANSFER +* @brief Alias name for DMA Block transfer +* @note This value should be used while setting the DMA control packet +*/ +#define BLOCK_TRANSFER 1U + +/** @def FRAME_TRANSFER +* @brief Alias name for DMA Frame transfer +* @note This value should be used while setting the DMA control packet +*/ +#define FRAME_TRANSFER 0U + +/** @def AUTOINIT_ON +* @brief Alias name for Auto Initialization ON +* @note This value should be used while setting the DMA control packet +*/ +#define AUTOINIT_ON 1U + +/** @def AUTOINIT_OFF +* @brief Alias name for Auto Initialization OFF +* @note This value should be used while setting the DMA control packet +*/ +#define AUTOINIT_OFF 0U + +/** @def ADDR_FIXED +* @brief Alias name for Fixed Addressing mode +* @note This value should be used while setting the DMA control packet +*/ +#define ADDR_FIXED 0U + +/** @def ADDR_INC1 +* @brief Alias name for Post-increment Addressing mode +* @note This value should be used while setting the DMA control packet +*/ +#define ADDR_INC1 1U + +/** @def ADDR_OFFSET +* @brief Alias name for Offset Addressing mode +* @note This value should be used while setting the DMA control packet +*/ +#define ADDR_OFFSET 3U + +/** @def INTERRUPT_ENABLE +* @brief Alias name for Interrupt enable +* @note @note This value should be used for API argument @a intenable +*/ +#define INTERRUPT_ENABLE 1U + +/** @def INTERRUPT_DISABLE +* @brief Alias name for Interrupt disable +* @note @note This value should be used for API argument @a intenable +*/ +#define INTERRUPT_DISABLE 0U + + +/** @def DMA_GCTRL_BUSBUSY +* @brief Bit mask for BUS BUSY in GCTRL Register +* @note @note This value should be used for API argument @a intenable +*/ +#define DMA_GCTRL_BUSBUSY (0x00004000U) + +/** @enum dmaREQTYPE +* @brief DMA TRANSFER Type definitions +* +* Used to define DMA transfer type +*/ +enum dmaREQTYPE +{ + DMA_HW = 0x0U, /**< Hardware trigger */ + DMA_SW = 0x1U /**< Software trigger */ +}; + + +/** @enum dmaCHANNEL +* @brief DMA CHANNEL definitions +* +* Used to define DMA Channel Number +*/ +enum dmaCHANNEL +{ + DMA_CH0 = 0x00U, + DMA_CH1 = 0x01U, + DMA_CH2 = 0x02U, + DMA_CH3 = 0x03U, + DMA_CH4 = 0x04U, + DMA_CH5 = 0x05U, + DMA_CH6 = 0x06U, + DMA_CH7 = 0x07U, + DMA_CH8 = 0x08U, + DMA_CH9 = 0x09U, + DMA_CH10 = 0x0AU, + DMA_CH11 = 0x0BU, + DMA_CH12 = 0x0CU, + DMA_CH13 = 0x0DU, + DMA_CH14 = 0x0EU, + DMA_CH15 = 0x0FU, + DMA_CH16 = 0x10U, + DMA_CH17 = 0x11U, + DMA_CH18 = 0x12U, + DMA_CH19 = 0x13U, + DMA_CH20 = 0x14U, + DMA_CH21 = 0x15U, + DMA_CH22 = 0x16U, + DMA_CH23 = 0x17U, + DMA_CH24 = 0x18U, + DMA_CH25 = 0x19U, + DMA_CH26 = 0x1AU, + DMA_CH27 = 0x1BU, + DMA_CH28 = 0x1CU, + DMA_CH29 = 0x1DU, + DMA_CH30 = 0x1EU, + DMA_CH31 = 0x1FU +}; + +/** @enum dmaACCESS +* @brief DMA ACESS WIDTH definitions +* +* Used to define DMA access width +*/ +typedef enum dmaACCESS +{ + ACCESS_8_BIT = 0U, + ACCESS_16_BIT = 1U, + ACCESS_32_BIT = 2U, + ACCESS_64_BIT = 3U +}dmaACCESS_t; + + +/** @enum dmaPRIORITY +* @brief DMA Channel Priority +* +* Used to define to which priority queue a DMA channel is assigned to +*/ +typedef enum dmaPRIORITY +{ + LOWPRIORITY = 0U, + HIGHPRIORITY = 1U +}dmaPRIORITY_t; + + +/** @enum dmaREGION +* @brief DMA Memory Protection Region +* +* Used to define DMA Memory Protection Region +*/ +typedef enum dmaREGION +{ + DMA_REGION0 = 0U, + DMA_REGION1 = 1U, + DMA_REGION2 = 2U, + DMA_REGION3 = 3U +}dmaREGION_t; + + +/** @enum dmaRegionAccess +* @brief DMA Memory Protection Region Access +* +* Used to define access permission of DMA memory protection regions +*/ +typedef enum dmaRegionAccess +{ + FULLACCESS = 0U, + READONLY = 1U, + WRITEONLY = 2U, + NOACCESS = 3U +}dmaRegionAccess_t; + + +/** @enum dmaInterrupt +* @brief DMA Interrupt +* +* Used to define DMA interrupts +*/ +typedef enum dmaInterrupt +{ + FTC = 1U, /**< Frame transfer complete Interrupt */ + LFS = 2U, /**< Last frame transfer started Interrupt */ + HBC = 3U, /**< First half of block complete Interrupt */ + BTC = 4U /**< Block transfer complete Interrupt */ +}dmaInterrupt_t; + +/** @struct g_dmaCTRL +* @brief Interrupt mode globals +* +*/ +typedef struct dmaCTRLPKT +{ + uint32 SADD; /* initial source address */ + uint32 DADD; /* initial destination address */ + uint32 CHCTRL; /* next ctrl packet to be trigger + 1 */ + uint32 FRCNT; /* frame count */ + uint32 ELCNT; /* element count */ + uint32 ELDOFFSET; /* element destination offset */ + uint32 ELSOFFSET; /* element source offset */ + uint32 FRDOFFSET; /* frame detination offset */ + uint32 FRSOFFSET; /* frame source offset */ + uint32 PORTASGN; /* dma port */ + uint32 RDSIZE; /* read element size */ + uint32 WRSIZE; /* write element size */ + uint32 TTYPE; /* trigger type - frame/block */ + uint32 ADDMODERD; /* addresssing mode for source */ + uint32 ADDMODEWR; /* addresssing mode for destination */ + uint32 AUTOINIT; /* auto-init mode */ + uint32 COMBO; /* next ctrl packet trigger(Not used) */ +} g_dmaCTRL; + +typedef volatile struct +{ + + struct /* 0x000-0x400 */ + { + uint32 ISADDR; + uint32 IDADDR; + uint32 ITCOUNT; + uint32 rsvd1; + uint32 CHCTRL; + uint32 EIOFF; + uint32 FIOFF; + uint32 rsvd2; + }PCP[32U]; + + struct /* 0x400-0x800 */ + { + uint32 res[256U]; + } RESERVED; + + struct /* 0x800-0xA00 */ + { + uint32 CSADDR; + uint32 CDADDR; + uint32 CTCOUNT; + uint32 rsvd3; + }WCP[32U]; + +} dmaRAMBASE_t; + +#define dmaRAMREG ((dmaRAMBASE_t *)0xFFF80000U) + +typedef struct dma_config_reg +{ + uint32 CONFIG_CHPRIOS; + uint32 CONFIG_GCHIENAS; + uint32 CONFIG_DREQASI[8U]; + uint32 CONFIG_FTCINTENAS; + uint32 CONFIG_LFSINTENAS; + uint32 CONFIG_HBCINTENAS; + uint32 CONFIG_BTCINTENAS; + uint32 CONFIG_DMAPCR; + uint32 CONFIG_DMAMPCTRL; +} dma_config_reg_t; + + +/** + * @defgroup DMA DMA + * @brief Direct Memory Access Controller + * + * The DMA controller is used to transfer data between two locations in the memory map in the background + * of CPU operations. Typically, the DMA is used to: + * - Transfer blocks of data between external and internal data memories + * - Restructure portions of internal data memory + * - Continually service a peripheral + * - Page program sections to internal program memory + * + * Related files: + * - reg_dma.h + * - sys_dma.h + * - sys_dma.c + * + * @addtogroup DMA + * @{ + */ +/* DMA Interface Functions */ +void dmaEnable(void); +void dmaDisable(void); +void dmaSetCtrlPacket(uint32 channel, g_dmaCTRL g_dmaCTRLPKT); +void dmaSetChEnable(uint32 channel,uint32 type); +void dmaReqAssign(uint32 channel,uint32 reqline); +uint32 dmaGetReq(uint32 channel); +void dmaSetPriority(uint32 channel, dmaPRIORITY_t priority); +void dmaEnableInterrupt(uint32 channel, dmaInterrupt_t inttype); +void dmaDisableInterrupt(uint32 channel, dmaInterrupt_t inttype); +void dmaDefineRegion(dmaREGION_t region, uint32 start_add, uint32 end_add); +void dmaEnableRegion(dmaREGION_t region, dmaRegionAccess_t access, boolean intenable); +void dmaDisableRegion(dmaREGION_t region); +void dmaEnableParityCheck(void); +void dmaDisableParityCheck(void); +void dmaGetConfigValue(dma_config_reg_t *config_reg, config_value_type_t type); + +/** @fn void dmaGroupANotification(dmaInterrupt_t inttype, uint32 channel) +* @brief Interrupt callback +* @param[in] inttype Interrupt type +* - FTC +* - LFS +* - HBC +* - BTC +* @param[in] channel channel number 0..15 +* This is a callback that is provided by the application and is called apon +* an interrupt. The parameter passed to the callback is a copy of the +* interrupt flag register. +*/ +void dmaGroupANotification(dmaInterrupt_t inttype, uint32 channel); + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/**@}*/ +#ifdef __cplusplus +} +#endif + +#endif Index: firmware/include/sys_mpu.h =================================================================== diff -u --- firmware/include/sys_mpu.h (revision 0) +++ firmware/include/sys_mpu.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,517 @@ +/** @file sys_mpu.h +* @brief System Mpu Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Mpu Interface Functions +* . +* which are relevant for the memory protection unit driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __SYS_MPU_H__ +#define __SYS_MPU_H__ + +#include "sys_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/** @def mpuREGION1 +* @brief Mpu region 1 +* +* Alias for Mpu region 1 +*/ +#define mpuREGION1 0U + +/** @def mpuREGION2 +* @brief Mpu region 2 +* +* Alias for Mpu region 1 +*/ +#define mpuREGION2 1U + +/** @def mpuREGION3 +* @brief Mpu region 3 +* +* Alias for Mpu region 3 +*/ +#define mpuREGION3 2U + +/** @def mpuREGION4 +* @brief Mpu region 4 +* +* Alias for Mpu region 4 +*/ +#define mpuREGION4 3U + +/** @def mpuREGION5 +* @brief Mpu region 5 +* +* Alias for Mpu region 5 +*/ +#define mpuREGION5 4U + +/** @def mpuREGION6 +* @brief Mpu region 6 +* +* Alias for Mpu region 6 +*/ +#define mpuREGION6 5U + +/** @def mpuREGION7 +* @brief Mpu region 7 +* +* Alias for Mpu region 7 +*/ +#define mpuREGION7 6U + +/** @def mpuREGION8 +* @brief Mpu region 8 +* +* Alias for Mpu region 8 +*/ +#define mpuREGION8 7U + +/** @def mpuREGION9 +* @brief Mpu region 9 +* +* Alias for Mpu region 9 +*/ +#define mpuREGION9 8U + +/** @def mpuREGION10 +* @brief Mpu region 10 +* +* Alias for Mpu region 10 +*/ +#define mpuREGION10 9U + +/** @def mpuREGION11 +* @brief Mpu region 11 +* +* Alias for Mpu region 11 +*/ +#define mpuREGION11 10U + +/** @def mpuREGION12 +* @brief Mpu region 12 +* +* Alias for Mpu region 12 +*/ +#define mpuREGION12 11U + +/** @def mpuREGION_ENABLE +* @brief Enable MPU Region +* +* Alias for MPU region enable. +* +* @note This should be used as the parameter of the API _mpuSetRegionSizeRegister_ +*/ +#define mpuREGION_ENABLE 1U + +/** @def mpuREGION_DISABLE +* @brief Disable MPU Region +* +* Alias for MPU region disable. +* +* @note This should be used as the parameter of the API _mpuSetRegionSizeRegister_ +*/ +#define mpuREGION_DISABLE 0U + +/** @def mpuSUBREGION0_DISABLE +* @brief Disable MPU Sub Region0 +* +* Alias for MPU subregion0 disable. +* +* @note This should be used as the parameter of the API _mpuSetRegionSizeRegister_ +*/ +#define mpuSUBREGION0_DISABLE 0x100U + +/** @def mpuSUBREGION1_DISABLE +* @brief Disable MPU Sub Region1 +* +* Alias for MPU subregion1 disable. +* +* @note This should be used as the parameter of the API _mpuSetRegionSizeRegister_ +*/ +#define mpuSUBREGION1_DISABLE 0x200U + +/** @def mpuSUBREGION2_DISABLE +* @brief Disable MPU Sub Region2 +* +* Alias for MPU subregion2 disable. +* +* @note This should be used as the parameter of the API _mpuSetRegionSizeRegister_ +*/ +#define mpuSUBREGION2_DISABLE 0x400U + +/** @def mpuSUBREGION3_DISABLE +* @brief Disable MPU Sub Region3 +* +* Alias for MPU subregion3 disable. +* +* @note This should be used as the parameter of the API _mpuSetRegionSizeRegister_ +*/ +#define mpuSUBREGION3_DISABLE 0x800U + +/** @def mpuSUBREGION4_DISABLE +* @brief Disable MPU Sub Region4 +* +* Alias for MPU subregion4 disable. +* +* @note This should be used as the parameter of the API _mpuSetRegionSizeRegister_ +*/ +#define mpuSUBREGION4_DISABLE 0x1000U + +/** @def mpuSUBREGION5_DISABLE +* @brief Disable MPU Sub Region5 +* +* Alias for MPU subregion5 disable. +* +* @note This should be used as the parameter of the API _mpuSetRegionSizeRegister_ +*/ +#define mpuSUBREGION5_DISABLE 0x2000U + +/** @def mpuSUBREGION6_DISABLE +* @brief Disable MPU Sub Region6 +* +* Alias for MPU subregion6 disable. +* +* @note This should be used as the parameter of the API _mpuSetRegionSizeRegister_ +*/ +#define mpuSUBREGION6_DISABLE 0x4000U + +/** @def mpuSUBREGION7_DISABLE +* @brief Disable MPU Sub Region7 +* +* Alias for MPU subregion7 disable. +* +* @note This should be used as the parameter of the API _mpuSetRegionSizeRegister_ +*/ +#define mpuSUBREGION7_DISABLE 0x8000U + + + +/** @enum mpuRegionAccessPermission +* @brief Alias names for mpu region access permissions +* +* This enumeration is used to provide alias names for the mpu region access permission: +* - MPU_PRIV_NA_USER_NA_EXEC no access in privileged mode, no access in user mode and execute +* - MPU_PRIV_RW_USER_NA_EXEC read/write in privileged mode, no access in user mode and execute +* - MPU_PRIV_RW_USER_RO_EXEC read/write in privileged mode, read only in user mode and execute +* - MPU_PRIV_RW_USER_RW_EXEC read/write in privileged mode, read/write in user mode and execute +* - MPU_PRIV_RO_USER_NA_EXEC read only in privileged mode, no access in user mode and execute +* - MPU_PRIV_RO_USER_RO_EXEC read only in privileged mode, read only in user mode and execute +* - MPU_PRIV_NA_USER_NA_NOEXEC no access in privileged mode, no access in user mode and no execution +* - MPU_PRIV_RW_USER_NA_NOEXEC read/write in privileged mode, no access in user mode and no execution +* - MPU_PRIV_RW_USER_RO_NOEXEC read/write in privileged mode, read only in user mode and no execution +* - MPU_PRIV_RW_USER_RW_NOEXEC read/write in privileged mode, read/write in user mode and no execution +* - MPU_PRIV_RO_USER_NA_NOEXEC read only in privileged mode, no access in user mode and no execution +* - MPU_PRIV_RO_USER_RO_NOEXEC read only in privileged mode, read only in user mode and no execution +* +*/ +enum mpuRegionAccessPermission +{ + MPU_PRIV_NA_USER_NA_EXEC = 0x0000U, /**< Alias no access in privileged mode, no access in user mode and execute */ + MPU_PRIV_RW_USER_NA_EXEC = 0x0100U, /**< Alias no read/write in privileged mode, no access in user mode and execute */ + MPU_PRIV_RW_USER_RO_EXEC = 0x0200U, /**< Alias no read/write in privileged mode, read only in user mode and execute */ + MPU_PRIV_RW_USER_RW_EXEC = 0x0300U, /**< Alias no read/write in privileged mode, read/write in user mode and execute */ + MPU_PRIV_RO_USER_NA_EXEC = 0x0500U, /**< Alias no read only in privileged mode, no access in user mode and execute */ + MPU_PRIV_RO_USER_RO_EXEC = 0x0600U, /**< Alias no read only in privileged mode, read only in user mode and execute */ + MPU_PRIV_NA_USER_NA_NOEXEC = 0x1000U, /**< Alias no access in privileged mode, no access in user mode and no execution */ + MPU_PRIV_RW_USER_NA_NOEXEC = 0x1100U, /**< Alias no read/write in privileged mode, no access in user mode and no execution */ + MPU_PRIV_RW_USER_RO_NOEXEC = 0x1200U, /**< Alias no read/write in privileged mode, read only in user mode and no execution */ + MPU_PRIV_RW_USER_RW_NOEXEC = 0x1300U, /**< Alias no read/write in privileged mode, read/write in user mode and no execution */ + MPU_PRIV_RO_USER_NA_NOEXEC = 0x1500U, /**< Alias no read only in privileged mode, no access in user mode and no execution */ + MPU_PRIV_RO_USER_RO_NOEXEC = 0x1600U /**< Alias no read only in privileged mode, read only in user mode and no execution */ +}; + +/** @enum mpuRegionType +* @brief Alias names for mpu region type +* +* This enumeration is used to provide alias names for the mpu region type: +* - MPU_STRONGLYORDERED_SHAREABLE Memory type strongly ordered and sharable +* - MPU_DEVICE_SHAREABLE Memory type device and sharable +* - MPU_NORMAL_OIWTNOWA_NONSHARED Memory type normal outer and inner write-through, no write allocate and non shared +* - MPU_NORMAL_OIWTNOWA_SHARED Memory type normal outer and inner write-through, no write allocate and shared +* - MPU_NORMAL_OIWBNOWA_NONSHARED Memory type normal outer and inner write-back, no write allocate and non shared +* - MPU_NORMAL_OIWBNOWA_SHARED Memory type normal outer and inner write-back, no write allocate and shared +* - MPU_NORMAL_OINC_NONSHARED Memory type normal outer and inner non-cachable and non shared +* - MPU_NORMAL_OINC_SHARED Memory type normal outer and inner non-cachable and shared +* - MPU_NORMAL_OIWBWA_NONSHARED Memory type normal outer and inner write-back, write allocate and non shared +* - MPU_NORMAL_OIWBWA_SHARED Memory type normal outer and inner write-back, write allocate and shared +* - MPU_DEVICE_NONSHAREABLE Memory type device and non sharable +*/ +enum mpuRegionType +{ + MPU_STRONGLYORDERED_SHAREABLE = 0x0000U, /**< Memory type strongly ordered and sharable */ + MPU_DEVICE_SHAREABLE = 0x0001U, /**< Memory type device and sharable */ + MPU_NORMAL_OIWTNOWA_NONSHARED = 0x0002U, /**< Memory type normal outer and inner write-through, no write allocate and non shared */ + MPU_NORMAL_OIWBNOWA_NONSHARED = 0x0003U, /**< Memory type normal outer and inner write-back, no write allocate and non shared */ + MPU_NORMAL_OIWTNOWA_SHARED = 0x0006U, /**< Memory type normal outer and inner write-through, no write allocate and shared */ + MPU_NORMAL_OIWBNOWA_SHARED = 0x0007U, /**< Memory type normal outer and inner write-back, no write allocate and shared */ + MPU_NORMAL_OINC_NONSHARED = 0x0008U, /**< Memory type normal outer and inner non-cachable and non shared */ + MPU_NORMAL_OIWBWA_NONSHARED = 0x000BU, /**< Memory type normal outer and inner write-back, write allocate and non shared */ + MPU_NORMAL_OINC_SHARED = 0x000CU, /**< Memory type normal outer and inner non-cachable and shared */ + MPU_NORMAL_OIWBWA_SHARED = 0x000FU, /**< Memory type normal outer and inner write-back, write allocate and shared */ + MPU_DEVICE_NONSHAREABLE = 0x0010U /**< Memory type device and non sharable */ +}; + +/** @enum mpuRegionSize +* @brief Alias names for mpu region type +* +* This enumeration is used to provide alias names for the mpu region type: +* - MPU_STRONGLYORDERED_SHAREABLE Memory type strongly ordered and sharable +* - MPU_32_BYTES Memory size in bytes +* - MPU_64_BYTES Memory size in bytes +* - MPU_128_BYTES Memory size in bytes +* - MPU_256_BYTES Memory size in bytes +* - MPU_512_BYTES Memory size in bytes +* - MPU_1_KB Memory size in kB +* - MPU_2_KB Memory size in kB +* - MPU_4_KB Memory size in kB +* - MPU_8_KB Memory size in kB +* - MPU_16_KB Memory size in kB +* - MPU_32_KB Memory size in kB +* - MPU_64_KB Memory size in kB +* - MPU_128_KB Memory size in kB +* - MPU_256_KB Memory size in kB +* - MPU_512_KB Memory size in kB +* - MPU_1_MB Memory size in MB +* - MPU_2_MB Memory size in MB +* - MPU_4_MB Memory size in MB +* - MPU_8_MBv Memory size in MB +* - MPU_16_MB Memory size in MB +* - MPU_32_MB Memory size in MB +* - MPU_64_MB Memory size in MB +* - MPU_128_MB Memory size in MB +* - MPU_256_MB Memory size in MB +* - MPU_512_MB Memory size in MB +* - MPU_1_GB Memory size in GB +* - MPU_2_GB Memory size in GB +* - MPU_4_GB Memory size in GB +*/ +enum mpuRegionSize +{ + MPU_32_BYTES = 0x04U << 1U, /**< Memory size in bytes */ + MPU_64_BYTES = 0x05U << 1U, /**< Memory size in bytes */ + MPU_128_BYTES = 0x06U << 1U, /**< Memory size in bytes */ + MPU_256_BYTES = 0x07U << 1U, /**< Memory size in bytes */ + MPU_512_BYTES = 0x08U << 1U, /**< Memory size in bytes */ + MPU_1_KB = 0x09U << 1U, /**< Memory size in kB */ + MPU_2_KB = 0x0AU << 1U, /**< Memory size in kB */ + MPU_4_KB = 0x0BU << 1U, /**< Memory size in kB */ + MPU_8_KB = 0x0CU << 1U, /**< Memory size in kB */ + MPU_16_KB = 0x0DU << 1U, /**< Memory size in kB */ + MPU_32_KB = 0x0EU << 1U, /**< Memory size in kB */ + MPU_64_KB = 0x0FU << 1U, /**< Memory size in kB */ + MPU_128_KB = 0x10U << 1U, /**< Memory size in kB */ + MPU_256_KB = 0x11U << 1U, /**< Memory size in kB */ + MPU_512_KB = 0x12U << 1U, /**< Memory size in kB */ + MPU_1_MB = 0x13U << 1U, /**< Memory size in MB */ + MPU_2_MB = 0x14U << 1U, /**< Memory size in MB */ + MPU_4_MB = 0x15U << 1U, /**< Memory size in MB */ + MPU_8_MB = 0x16U << 1U, /**< Memory size in MB */ + MPU_16_MB = 0x17U << 1U, /**< Memory size in MB */ + MPU_32_MB = 0x18U << 1U, /**< Memory size in MB */ + MPU_64_MB = 0x19U << 1U, /**< Memory size in MB */ + MPU_128_MB = 0x1AU << 1U, /**< Memory size in MB */ + MPU_256_MB = 0x1BU << 1U, /**< Memory size in MB */ + MPU_512_MB = 0x1CU << 1U, /**< Memory size in MB */ + MPU_1_GB = 0x1DU << 1U, /**< Memory size in GB */ + MPU_2_GB = 0x1EU << 1U, /**< Memory size in GB */ + MPU_4_GB = 0x1FU << 1U /**< Memory size in GB */ +}; + +/** @fn void _mpuInit_(void) +* @brief Initialize Mpu +* +* This function initializes memory protection unit. +*/ +void _mpuInit_(void); + +/** @fn void _mpuEnable_(void) +* @brief Enable Mpu +* +* This function enables memory protection unit. +*/ +void _mpuEnable_(void); + +/** @fn void _mpuDisable_(void) +* @brief Disable Mpu +* +* This function disables memory protection unit. +*/ +void _mpuDisable_(void); + +/** @fn void _mpuEnableBackgroundRegion_(void) +* @brief Enable Mpu background region +* +* This function enables background region of the memory protection unit. +*/ +void _mpuEnableBackgroundRegion_(void); + +/** @fn void _mpuDisableBackgroundRegion_(void) +* @brief Disable Mpu background region +* +* This function disables background region of the memory protection unit. +*/ +void _mpuDisableBackgroundRegion_(void); + +/** @fn uint32 _mpuGetNumberOfRegions_(void) +* @brief Returns number of implemented Mpu regions +* @return Number of implemented mpu regions +* +* This function returns the number of implemented mpu regions. +*/ +uint32 _mpuGetNumberOfRegions_(void); + +/** @fn uint32 _mpuAreRegionsSeparate_(void) +* @brief Returns the type of the implemented mpu regions +* @return Mpu type of regions +* +* This function returns 0 when mpu regions are of type unified otherwise regions are of type separate. +*/ +uint32 _mpuAreRegionsSeparate_(void); + +/** @fn void _mpuSetRegion_(uint32 region) +* @brief Set mpu region number +* @param[in] region Region number: mpuREGION1..mpuREGION12 +* +* This function selects one of the implemented mpu regions. +*/ +void _mpuSetRegion_(uint32 region); + +/** @fn uint32 _mpuGetRegion_(void) +* @brief Returns the currently selected mpu region +* @return Mpu region number +* +* This function returns currently selected mpu region number. +*/ +uint32 _mpuGetRegion_(void); + +/** @fn void _mpuSetRegionBaseAddress_(uint32 address) +* @brief Set base address of currently selected mpu region +* @param[in] address Base address of the MPU region +* @note The base address must always aligned with region size +* +* This function sets the base address of currently selected mpu region. +*/ +void _mpuSetRegionBaseAddress_(uint32 address); + +/** @fn uint32 _mpuGetRegionBaseAddress_(void) +* @brief Returns base address of currently selected mpu region +* @return Current base address of selected mpu region +* +* This function returns the base address of currently selected mpu region. +*/ +uint32 _mpuGetRegionBaseAddress_(void); + +/** @fn void _mpuSetRegionTypeAndPermission_(uint32 type, uint32 permission) +* @brief Set type of currently selected mpu region +* @param[in] type Region Type +* - MPU_STRONGLYORDERED_SHAREABLE : Memory type strongly ordered and sharable +* - MPU_DEVICE_SHAREABLE : Memory type device and sharable +* - MPU_NORMAL_OIWTNOWA_NONSHARED : Memory type normal outer and inner write-through, no write allocate and non shared +* - MPU_NORMAL_OIWBNOWA_NONSHARED : Memory type normal outer and inner write-back, no write allocate and non shared +* - MPU_NORMAL_OIWTNOWA_SHARED : Memory type normal outer and inner write-through, no write allocate and shared +* - MPU_NORMAL_OIWBNOWA_SHARED : Memory type normal outer and inner write-back, no write allocate and shared +* - MPU_NORMAL_OINC_NONSHARED : Memory type normal outer and inner non-cachable and non shared +* - MPU_NORMAL_OIWBWA_NONSHARED : Memory type normal outer and inner write-back, write allocate and non shared +* - MPU_NORMAL_OINC_SHARED : Memory type normal outer and inner non-cachable and shared +* - MPU_NORMAL_OIWBWA_SHARED : Memory type normal outer and inner write-back, write allocate and shared +* - MPU_DEVICE_NONSHAREABLE : Memory type device and non sharable +* +* @param[in] permission Region Access permission +* - MPU_PRIV_NA_USER_NA_EXEC : Alias no access in privileged mode, no access in user mode and execute +* - MPU_PRIV_RW_USER_NA_EXEC : Alias no read/write in privileged mode, no access in user mode and execute +* - MPU_PRIV_RW_USER_RO_EXEC : Alias no read/write in privileged mode, read only in user mode and execute +* - MPU_PRIV_RW_USER_RW_EXEC : Alias no read/write in privileged mode, read/write in user mode and execute +* - MPU_PRIV_RO_USER_NA_EXEC : Alias no read only in privileged mode, no access in user mode and execute +* - MPU_PRIV_RO_USER_RO_EXEC : Alias no read only in privileged mode, read only in user mode and execute +* - MPU_PRIV_NA_USER_NA_NOEXEC : Alias no access in privileged mode, no access in user mode and no execution +* - MPU_PRIV_RW_USER_NA_NOEXEC : Alias no read/write in privileged mode, no access in user mode and no execution +* - MPU_PRIV_RW_USER_RO_NOEXEC : Alias no read/write in privileged mode, read only in user mode and no execution +* - MPU_PRIV_RW_USER_RW_NOEXEC : Alias no read/write in privileged mode, read/write in user mode and no execution +* - MPU_PRIV_RO_USER_NA_NOEXEC : Alias no read only in privileged mode, no access in user mode and no execution +* - MPU_PRIV_RO_USER_RO_NOEXEC : Alias no read only in privileged mode, read only in user mode and no execution +* +* This function sets the type of currently selected mpu region. +*/ +void _mpuSetRegionTypeAndPermission_(uint32 type, uint32 permission); + +/** @fn uint32 _mpuGetRegionType_(void) +* @brief Returns the type of currently selected mpu region +* @return Current type of selected mpu region +* +* This function returns the type of currently selected mpu region. +*/ +uint32 _mpuGetRegionType_(void); + +/** @fn uint32 _mpuGetRegionPermission_(void) +* @brief Returns permission of currently selected mpu region +* @return Current type of selected mpu region +* +* This function returns permission of currently selected mpu region. +*/ +uint32 _mpuGetRegionPermission_(void); + +/** @fn void _mpuSetRegionSizeRegister_(uint32 value) +* @brief Set mpu region size register value +* @param[in] value Value to be written in the MPU Region Size and Enable register +* +* This function sets mpu region size register value. +* +* Sample usuage: +* _mpuSetRegion_(mpuREGION5); +* _mpuSetRegionSizeRegister_(mpuREGION_ENABLE | MPU_16_KB | mpuSUBREGION3_DISABLE | mpuSUBREGION4_DISABLE); +*/ +void _mpuSetRegionSizeRegister_(uint32 value); + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ +#ifdef __cplusplus +} +#endif + +#endif Index: firmware/include/sys_pcr.h =================================================================== diff -u --- firmware/include/sys_pcr.h (revision 0) +++ firmware/include/sys_pcr.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,297 @@ +/** @file sys_pcr.h +* @brief PCR Driver Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __SYS_PCR_H__ +#define __SYS_PCR_H__ + +#include "reg_pcr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* PCR General Definitions */ + +typedef uint32 peripheralFrame_CS_t; + +#define PeripheralFrame_CS0 0U +#define PeripheralFrame_CS1 1U +#define PeripheralFrame_CS2 2U +#define PeripheralFrame_CS3 3U +#define PeripheralFrame_CS4 4U +#define PeripheralFrame_CS5 5U +#define PeripheralFrame_CS6 6U +#define PeripheralFrame_CS7 7U +#define PeripheralFrame_CS8 8U +#define PeripheralFrame_CS9 9U +#define PeripheralFrame_CS10 10U +#define PeripheralFrame_CS11 11U +#define PeripheralFrame_CS12 12U +#define PeripheralFrame_CS13 13U +#define PeripheralFrame_CS14 14U +#define PeripheralFrame_CS15 15U +#define PeripheralFrame_CS16 16U +#define PeripheralFrame_CS17 17U +#define PeripheralFrame_CS18 18U +#define PeripheralFrame_CS19 19U +#define PeripheralFrame_CS20 20U +#define PeripheralFrame_CS21 21U +#define PeripheralFrame_CS22 22U +#define PeripheralFrame_CS23 23U +#define PeripheralFrame_CS24 24U +#define PeripheralFrame_CS25 25U +#define PeripheralFrame_CS26 26U +#define PeripheralFrame_CS27 27U +#define PeripheralFrame_CS28 28U +#define PeripheralFrame_CS29 29U +#define PeripheralFrame_CS30 30U +#define PeripheralFrame_CS31 31U + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +typedef uint32 quadrant_Select_t; +#define Quadrant0 1U +#define Quadrant1 2U +#define Quadrant2 4U +#define Quadrant3 8U + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/** @typedef peripheral_Frame_Select_t +* @brief PCR Peripheral Frame Type Definition +* +* This type is used to access the PCR peripheral Frame configuration register. +*/ +typedef struct peripheral_Frame_Select +{ + peripheralFrame_CS_t Peripheral_CS; + quadrant_Select_t Peripheral_Quadrant; +}peripheral_Frame_Select_t; + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + +/** @typedef peripheral_Quad_ChipSelect_t +* @brief PCR Peripheral Frame registers Type Definition +* +* This type is used to access all the PCR peripheral Frame configuration registers. +*/ +typedef struct peripheral_Quad_ChipSelect +{ + uint32 Peripheral_Quad0_3_CS0_7; + uint32 Peripheral_Quad4_7_CS8_15; + uint32 Peripheral_Quad8_11_CS16_23; + uint32 Peripheral_Quad12_15_CS24_31; +}peripheral_Quad_ChipSelect_t; + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + +/** @typedef peripheral_Memory_ChipSelect_t +* @brief PCR Peripheral Memory Frame registers Type Definition +* +* This type is used to access all the PCR peripheral Memory Frame configuration registers. +*/ +typedef struct peripheral_Memory_ChipSelect +{ + uint32 Peripheral_Mem_CS0_31; + uint32 Peripheral_Mem_CS32_63; +}peripheral_Memory_ChipSelect_t; + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + +typedef uint32 peripheral_MemoryFrame_CS_t; + +#define PeripheralMemoryFrame_CS0 0U +#define PeripheralMemoryFrame_CS1 1U +#define PeripheralMemoryFrame_CS2 2U +#define PeripheralMemoryFrame_CS3 3U +#define PeripheralMemoryFrame_CS4 4U +#define PeripheralMemoryFrame_CS5 5U +#define PeripheralMemoryFrame_CS6 6U +#define PeripheralMemoryFrame_CS7 7U +#define PeripheralMemoryFrame_CS8 8U +#define PeripheralMemoryFrame_CS9 9U +#define PeripheralMemoryFrame_CS10 10U +#define PeripheralMemoryFrame_CS11 11U +#define PeripheralMemoryFrame_CS12 12U +#define PeripheralMemoryFrame_CS13 13U +#define PeripheralMemoryFrame_CS14 14U +#define PeripheralMemoryFrame_CS15 15U +#define PeripheralMemoryFrame_CS16 16U +#define PeripheralMemoryFrame_CS17 17U +#define PeripheralMemoryFrame_CS18 18U +#define PeripheralMemoryFrame_CS19 19U +#define PeripheralMemoryFrame_CS20 20U +#define PeripheralMemoryFrame_CS21 21U +#define PeripheralMemoryFrame_CS22 22U +#define PeripheralMemoryFrame_CS23 23U +#define PeripheralMemoryFrame_CS24 24U +#define PeripheralMemoryFrame_CS25 25U +#define PeripheralMemoryFrame_CS26 26U +#define PeripheralMemoryFrame_CS27 27U +#define PeripheralMemoryFrame_CS28 28U +#define PeripheralMemoryFrame_CS29 29U +#define PeripheralMemoryFrame_CS30 30U +#define PeripheralMemoryFrame_CS31 31U +#define PeripheralMemoryFrame_CS32 32U +#define PeripheralMemoryFrame_CS33 33U +#define PeripheralMemoryFrame_CS34 34U +#define PeripheralMemoryFrame_CS35 35U +#define PeripheralMemoryFrame_CS36 36U +#define PeripheralMemoryFrame_CS37 37U +#define PeripheralMemoryFrame_CS38 38U +#define PeripheralMemoryFrame_CS39 39U +#define PeripheralMemoryFrame_CS40 40U +#define PeripheralMemoryFrame_CS41 41U +#define PeripheralMemoryFrame_CS42 42U +#define PeripheralMemoryFrame_CS43 43U +#define PeripheralMemoryFrame_CS44 44U +#define PeripheralMemoryFrame_CS45 45U +#define PeripheralMemoryFrame_CS46 46U +#define PeripheralMemoryFrame_CS47 47U +#define PeripheralMemoryFrame_CS48 48U +#define PeripheralMemoryFrame_CS49 49U +#define PeripheralMemoryFrame_CS50 50U +#define PeripheralMemoryFrame_CS51 51U +#define PeripheralMemoryFrame_CS52 52U +#define PeripheralMemoryFrame_CS53 53U +#define PeripheralMemoryFrame_CS54 54U +#define PeripheralMemoryFrame_CS55 55U +#define PeripheralMemoryFrame_CS56 56U +#define PeripheralMemoryFrame_CS57 57U +#define PeripheralMemoryFrame_CS58 58U +#define PeripheralMemoryFrame_CS59 59U +#define PeripheralMemoryFrame_CS60 60U +#define PeripheralMemoryFrame_CS61 61U +#define PeripheralMemoryFrame_CS62 62U +#define PeripheralMemoryFrame_CS63 63U + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + +typedef struct pcr_config_reg +{ + uint32 CONFIG_PMPROTSET0; + uint32 CONFIG_PMPROTSET1; + uint32 CONFIG_PPROTSET0; + uint32 CONFIG_PPROTSET1; + uint32 CONFIG_PPROTSET2; + uint32 CONFIG_PPROTSET3; + uint32 CONFIG_PCSPWRDWNSET0; + uint32 CONFIG_PCSPWRDWNSET1; + uint32 CONFIG_PSPWRDWNSET0; + uint32 CONFIG_PSPWRDWNSET1; + uint32 CONFIG_PSPWRDWNSET2; + uint32 CONFIG_PSPWRDWNSET3; +} pcr_config_reg_t; + +/** + * @defgroup PCR PCR + * @brief Peripheral Central Resource Controller + * + * The PCR manages the accesses to the peripheral registers and peripheral + * memories. It provides a global reset for all the peripherals. It also supports the + * capability to selectively enable or disable the clock for each peripheral + * individually. The PCR also manages the accesses to the system module + * registers required to configure the device�s clocks, interrupts, and so on. The + * system module registers also include status flags for indicating exception + * conditions � resets, aborts, errors, interrupts. + * + * Related files: + * - reg_pcr.h + * - sys_pcr.h + * - sys_pcr.c + * + * @addtogroup PCR + * @{ + */ + +/* PCR Interface Functions */ + +void peripheral_Frame_Protection_Set(peripheral_Frame_Select_t peripheral_Frame); +void peripheral_Frame_Protection_Clr(peripheral_Frame_Select_t peripheral_Frame); +void peripheral_Frame_Powerdown_Set(peripheral_Frame_Select_t peripheral_Frame); +void peripheral_Frame_Powerdown_Clr(peripheral_Frame_Select_t peripheral_Frame); + +void peripheral_Protection_Set(peripheral_Quad_ChipSelect_t peripheral_Quad_CS); +void peripheral_Protection_Clr(peripheral_Quad_ChipSelect_t peripheral_Quad_CS); +void peripheral_Protection_Status(peripheral_Quad_ChipSelect_t* peripheral_Quad_CS); +void peripheral_Powerdown_Set(peripheral_Quad_ChipSelect_t peripheral_Quad_CS); +void peripheral_Powerdown_Clr(peripheral_Quad_ChipSelect_t peripheral_Quad_CS); +void peripheral_Powerdown_Status(peripheral_Quad_ChipSelect_t* peripheral_Quad_CS); + +void peripheral_Memory_Protection_Set(peripheral_Memory_ChipSelect_t peripheral_Memory_CS); +void peripheral_Memory_Protection_Clr(peripheral_Memory_ChipSelect_t peripheral_Memory_CS); +void peripheral_Memory_Protection_Status(peripheral_Memory_ChipSelect_t* peripheral_Memory_CS); +void peripheral_Memory_Powerdown_Set(peripheral_Memory_ChipSelect_t peripheral_Memory_CS); +void peripheral_Memory_Powerdown_Clr(peripheral_Memory_ChipSelect_t peripheral_Memory_CS); +void peripheral_Memory_Powerdown_Status(peripheral_Memory_ChipSelect_t* peripheral_Memory_CS); + +void peripheral_Mem_Frame_Prot_Set(peripheral_MemoryFrame_CS_t peripheral_Memory_Frame_CS); +void peripheral_Mem_Frame_Prot_Clr(peripheral_MemoryFrame_CS_t peripheral_Memory_Frame_CS); +void peripheral_Mem_Frame_Pwrdwn_Set(peripheral_MemoryFrame_CS_t peripheral_Memory_Frame_CS); +void peripheral_Mem_Frame_Pwrdwn_Clr (peripheral_MemoryFrame_CS_t peripheral_Memory_Frame_CS); + +void pcrGetConfigValue(pcr_config_reg_t *config_reg, config_value_type_t type); + +/**@}*/ +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + +#ifdef __cplusplus +} +#endif + +#endif Index: firmware/include/sys_pmm.h =================================================================== diff -u --- firmware/include/sys_pmm.h (revision 0) +++ firmware/include/sys_pmm.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,182 @@ +/** @file sys_pmm.h +* @brief PMM Driver Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __SYS_PMM_H__ +#define __SYS_PMM_H__ + +#include "reg_pmm.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Bit Masks */ +#define PMM_LOGICPDPWRCTRL0_LOGICPDON0 0x0F000000U /*PD2*/ +#define PMM_LOGICPDPWRCTRL0_LOGICPDON1 0x000F0000U /*PD3*/ +#define PMM_LOGICPDPWRCTRL0_LOGICPDON2 0x00000F00U /*PD4*/ +#define PMM_LOGICPDPWRCTRL0_LOGICPDON3 0x0000000FU /*PD5*/ + +#define PMM_MEMPDPWRCTRL0_MEMPDON0 0x0F000000U /*RAM_PD1*/ +#define PMM_MEMPDPWRCTRL0_MEMPDON1 0x000F0000U /*RAM_PD2*/ +#define PMM_MEMPDPWRCTRL0_MEMPDON2 0x00000F00U /*RAM_PD3*/ + +#define PMM_LOGICPDPWRSTAT_DOMAINON 0x00000100U +#define PMM_LOGICPDPWRSTAT_LOGICPDPWRSTAT 0x00000003U +#define PMM_MEMPDPWRSTAT_DOMAINON 0x00000100U +#define PMM_MEMPDPWRSTAT_MEMPDPWRSTAT 0x00000003U +#define PMM_GLOBALCTRL1_AUTOCLKWAKEENA 0x00000001U + +/* Configuration registers initial value */ +#define PMM_LOGICPDPWRCTRL0_CONFIGVALUE ( (uint32)((uint32)0x5U << 24U) \ + | (uint32)((uint32)0x5U << 16U) \ + | (uint32)((uint32)0xAU << 8U) \ + | (uint32)((uint32)0x5U << 0U) ) +#define PMM_MEMPDPWRCTRL0_CONFIGVALUE ( (uint32)((uint32)0x5U << 24U) \ + | (uint32)((uint32)0x5U << 16U) \ + ) + +#define PMM_PDCLKDISREG_CONFIGVALUE ( (uint32)((uint32)(1U-1U) << 0U) \ + | (uint32)((uint32)(1U-1U) << 1U) \ + | (uint32)((uint32)(1U-0U) << 2U) \ + | (uint32)((uint32)(1U-1U) << 3U) ) + +#define PMM_GLOBALCTRL1_CONFIGVALUE ( (uint32)((uint32)0U << 8U) \ + | (uint32)((uint32)0U << 0U)) + + +/** @enum pmmLogicPDTag +* @brief PMM Logic Power Domain +* +* Used to define PMM Logic Power Domain +*/ +typedef enum pmmLogicPDTag +{ + PMM_LOGICPD1 = 4U, /*-- NOT USED*/ + PMM_LOGICPD2 = 0U, + PMM_LOGICPD3 = 1U, + PMM_LOGICPD4 = 2U, + PMM_LOGICPD5 = 3U +}pmm_LogicPD_t; + + +/** @enum pmmMemPDTag +* @brief PMM Memory-Only Power Domain +* +* Used to define PMM Memory-Only Power Domain +*/ +typedef enum pmmMemPDTag +{ + PMM_MEMPD1 = 0U, + PMM_MEMPD2 = 1U, + PMM_MEMPD3 = 2U +}pmm_MemPD_t; + + +/** @enum pmmModeTag +* @brief PSCON operating mode +* +* Used to define the operating mode of PSCON Compare Block +*/ +typedef enum pmmModeTag +{ + LockStep = 0x0U, + SelfTest = 0x6U, + ErrorForcing = 0x9U, + SelfTestErrorForcing = 0xFU +}pmm_Mode_t; + + +typedef struct pmm_config_reg +{ + uint32 CONFIG_LOGICPDPWRCTRL0; + uint32 CONFIG_MEMPDPWRCTRL0; + uint32 CONFIG_PDCLKDISREG; + uint32 CONFIG_GLOBALCTRL1; +}pmm_config_reg_t; + +/** + * @defgroup PMM PMM + * @brief Power Management Module + * + * The PMM provides memory-mapped registers that control the states of the supported power domains. + * The PMM includes interfaces to the Power Mode Controller (PMC) and the Power State Controller (PSCON). + * The PMC and PSCON control the power up/down sequence of each power domain. + * + * Related files: + * - reg_pmm.h + * - sys_pmm.h + * - sys_pmm.c + * + * @addtogroup PMM + * @{ + */ + +/* Pmm Interface Functions */ +void pmmInit(void); +void pmmTurnONLogicPowerDomain(pmm_LogicPD_t logicPD); +void pmmTurnONMemPowerDomain(pmm_MemPD_t memPD); +void pmmTurnOFFLogicPowerDomain(pmm_LogicPD_t logicPD); +void pmmTurnOFFMemPowerDomain(pmm_MemPD_t memPD); +boolean pmmIsLogicPowerDomainActive(pmm_LogicPD_t logicPD); +boolean pmmIsMemPowerDomainActive(pmm_MemPD_t memPD); +void pmmGetConfigValue(pmm_config_reg_t *config_reg, config_value_type_t type); +void pmmSetMode(pmm_Mode_t mode); +boolean pmmPerformSelfTest(void); + +/**@}*/ +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +#ifdef __cplusplus +} +#endif /*extern "C" */ + +#endif + Index: firmware/include/sys_pmu.h =================================================================== diff -u --- firmware/include/sys_pmu.h (revision 0) +++ firmware/include/sys_pmu.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,241 @@ +/** @file sys_pmu.h +* @brief System Pmu Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Pmu Interface Functions +* . +* which are relevant for the performance monitor unit driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __SYS_PMU_H__ +#define __SYS_PMU_H__ + +#include "sys_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/** @def pmuCOUNTER0 +* @brief pmu event counter 0 mask +* +* Alias for pmu event counter 0 mask +* +* @note: Use this macro as a parameter 'counters' in APIs _pmuStartCounters_ and _pmuStopCounters_ +*/ +#define pmuCOUNTER0 0x00000001U + +/** @def pmuCOUNTER1 +* @brief pmu event counter 1 mask +* +* Alias for pmu event counter 1 mask +* +* @note: Use this macro as a parameter 'counters' in APIs _pmuStartCounters_ and _pmuStopCounters_ +*/ +#define pmuCOUNTER1 0x00000002U + +/** @def pmuCOUNTER2 +* @brief pmu event counter 2 mask +* +* Alias for pmu event counter 2 mask +* +* @note: Use this macro as a parameter 'counters' in APIs _pmuStartCounters_ and _pmuStopCounters_ +*/ +#define pmuCOUNTER2 0x00000004U + +/** @def pmuCYCLE_COUNTER +* @brief pmu cycle counter mask +* +* Alias for pmu event counter mask +* +* @note: Use this macro as a parameter 'counters' in APIs _pmuStartCounters_ and _pmuStopCounters_ +*/ +#define pmuCYCLE_COUNTER 0x80000000U + +/** @enum pmuEvent +* @brief pmu event +* +* Alias for pmu event counter increment source +*/ +enum pmuEvent +{ + PMU_INST_CACHE_MISS = 0x01U, + PMU_DATA_CACHE_MISS = 0x03U, + PMU_DATA_CACHE_ACCESS = 0x04U, + PMU_DATA_READ_ARCH_EXECUTED = 0x06U, + PMU_DATA_WRITE_ARCH_EXECUTED = 0x07U, + PMU_INST_ARCH_EXECUTED = 0x08U, + PMU_EXCEPTION_TAKEN = 0x09U, + PMU_EXCEPTION_RETURN_ARCH_EXECUTED = 0x0AU, + PMU_CHANGE_TO_CONTEXT_ID_EXECUTED = 0x0BU, + PMU_SW_CHANGE_OF_PC_ARCH_EXECUTED = 0x0CU, + PMU_BRANCH_IMM_INST_ARCH_EXECUTED = 0x0DU, + PMU_PROC_RETURN_ARCH_EXECUTED = 0x0EU, + PMU_UNALIGNED_ACCESS_ARCH_EXECUTED = 0x0FU, + PMU_BRANCH_MISSPREDICTED = 0x10U, + PMU_CYCLE_COUNT = 0x11U, + PMU_PREDICTABLE_BRANCHES = 0x12U, + PMU_INST_BUFFER_STALL = 0x40U, + PMU_DATA_DEPENDENCY_INST_STALL = 0x41U, + PMU_DATA_CACHE_WRITE_BACK = 0x42U, + PMU_EXT_MEMORY_REQUEST = 0x43U, + PMU_LSU_BUSY_STALL = 0x44U, + PMU_FORCED_DRAIN_OFSTORE_BUFFER = 0x45U, + PMU_FIQ_DISABLED_CYCLE_COUNT = 0x46U, + PMU_IRQ_DISABLED_CYCLE_COUNT = 0x47U, + PMU_ETMEXTOUT_0 = 0x48U, + PMU_ETMEXTOUT_1 = 0x49U, + PMU_INST_CACHE_TAG_ECC_ERROR = 0x4AU, + PMU_INST_CACHE_DATA_ECC_ERROR = 0x4BU, + PMU_DATA_CACHE_TAG_ECC_ERROR = 0x4CU, + PMU_DATA_CACHE_DATA_ECC_ERROR = 0x4DU, + PMU_TCM_FATAL_ECC_ERROR_PREFETCH = 0x4EU, + PMU_TCM_FATAL_ECC_ERROR_LOAD_STORE = 0x4FU, + PMU_STORE_BUFFER_MERGE = 0x50U, + PMU_LSU_STALL_STORE_BUFFER_FULL = 0x51U, + PMU_LSU_STALL_STORE_QUEUE_FULL = 0x52U, + PMU_INTEGER_DIV_EXECUTED = 0x53U, + PMU_STALL_INTEGER_DIV = 0x54U, + PMU_PLD_INST_LINE_FILL = 0x55U, + PMU_PLD_INST_NO_LINE_FILL = 0x56U, + PMU_NON_CACHEABLE_ACCESS_AXI_MASTER = 0x57U, + PMU_INST_CACHE_ACCESS = 0x58U, + PMU_DOUBLE_DATA_CACHE_ISSUE = 0x59U, + PMU_DUAL_ISSUE_CASE_A = 0x5AU, + PMU_DUAL_ISSUE_CASE_B1_B2_F2_F2D = 0x5BU, + PMU_DUAL_ISSUE_OTHER = 0x5CU, + PMU_DP_FLOAT_INST_EXCECUTED = 0x5DU, + PMU_DUAL_ISSUED_PAIR_INST_ARCH_EXECUTED = 0x5EU, + PMU_DATA_CACHE_DATA_FATAL_ECC_ERROR = 0x60U, + PMU_DATA_CACHE_TAG_FATAL_ECC_ERROR = 0x61U, + PMU_PROCESSOR_LIVE_LOCK = 0x62U, + PMU_ATCM_MULTI_BIT_ECC_ERROR = 0x64U, + PMU_B0TCM_MULTI_BIT_ECC_ERROR = 0x65U, + PMU_B1TCM_MULTI_BIT_ECC_ERROR = 0x66U, + PMU_ATCM_SINGLE_BIT_ECC_ERROR = 0x67U, + PMU_B0TCM_SINGLE_BIT_ECC_ERROR = 0x68U, + PMU_B1TCM_SINGLE_BIT_ECC_ERROR = 0x69U, + PMU_TCM_COR_ECC_ERROR_LOAD_STORE = 0x6AU, + PMU_TCM_COR_ECC_ERROR_PREFETCH = 0x6BU, + PMU_TCM_FATAL_ECC_ERROR_AXI_SLAVE = 0x6CU, + PMU_TCM_COR_ECC_ERROR_AXI_SLAVE = 0x6DU +}; + +/** @fn void _pmuInit_(void) +* @brief Initialize Performance Monitor Unit +*/ +void _pmuInit_(void); + +/** @fn void _pmuEnableCountersGlobal_(void) +* @brief Enable and reset cycle counter and all 3 event counters +*/ +void _pmuEnableCountersGlobal_(void); + +/** @fn void _pmuDisableCountersGlobal_(void) +* @brief Disable cycle counter and all 3 event counters +*/ +void _pmuDisableCountersGlobal_(void); + +/** @fn void _pmuResetCycleCounter_(void) +* @brief Reset cycle counter +*/ +void _pmuResetCycleCounter_(void); + +/** @fn void _pmuResetEventCounters_(void) +* @brief Reset event counters 0-2 +*/ +void _pmuResetEventCounters_(void); + +/** @fn void _pmuResetCounters_(void) +* @brief Reset cycle counter and event counters 0-2 +*/ +void _pmuResetCounters_(void); + +/** @fn void _pmuStartCounters_(uint32 counters) +* @brief Starts selected counters +* @param[in] counters - Counter mask +*/ +void _pmuStartCounters_(uint32 counters); + +/** @fn void _pmuStopCounters_(uint32 counters) +* @brief Stops selected counters +* @param[in] counters - Counter mask +*/ +void _pmuStopCounters_(uint32 counters); + +/** @fn void _pmuSetCountEvent_(uint32 counter, uint32 event) +* @brief Set event counter count event +* @param[in] counter - Counter select 0..2 +* @param[in] event - Count event +*/ +void _pmuSetCountEvent_(uint32 counter, uint32 event); + +/** @fn uint32 _pmuGetCycleCount_(void) +* @brief Returns current cycle counter value +* +* @return cycle count. +*/ +uint32 _pmuGetCycleCount_(void); + +/** @fn uint32 _pmuGetEventCount_(uint32 counter) +* @brief Returns current event counter value +* @param[in] counter - Counter select 0..2 +* +* @return event counter count. +*/ +uint32 _pmuGetEventCount_(uint32 counter); + +/** @fn uint32 _pmuGetOverflow_(void) +* @brief Returns current overflow register and clear flags +* +* @return overflow flags. +*/ +uint32 _pmuGetOverflow_(void); + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +#ifdef __cplusplus +} +#endif /*extern "C" */ +#endif Index: firmware/include/sys_selftest.h =================================================================== diff -u --- firmware/include/sys_selftest.h (revision 0) +++ firmware/include/sys_selftest.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,471 @@ +/** @file sys_selftest.h +* @brief System Memory Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Efuse Self Test Functions +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __sys_selftest_H__ +#define __sys_selftest_H__ + +#include "reg_pbist.h" +#include "reg_stc.h" +#include "reg_efc.h" +#include "sys_core.h" +#include "system.h" +#include "sys_vim.h" +#include "adc.h" +#include "can.h" +#include "mibspi.h" +#include "het.h" +#include "htu.h" +#include "esm.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#define flash1bitError (*(volatile uint32 *)(0xF00803F0U)) +#define flash2bitError (*(volatile uint32 *)(0xF00803F8U)) + +#define tcramA1bitError (*(volatile uint32 *)(0x08400000U)) +#define tcramA2bitError (*(volatile uint32 *)(0x08400010U)) + +#define tcramB1bitError (*(volatile uint32 *)(0x08400008U)) +#define tcramB2bitError (*(volatile uint32 *)(0x08400018U)) + +#define tcramA1bit (*(volatile uint64 *)(0x08000000U)) +#define tcramA2bit (*(volatile uint64 *)(0x08000010U)) + +#define tcramB1bit (*(volatile uint64 *)(0x08000008U)) +#define tcramB2bit (*(volatile uint64 *)(0x08000018U)) + +#define flashBadECC1 (*(volatile uint32 *)(0x20000000U)) +#define flashBadECC2 (*(volatile uint32 *)(0x20000010U)) + +#define CCMSR (*(volatile uint32 *)(0xFFFFF600U)) +#define CCMKEYR (*(volatile uint32 *)(0xFFFFF604U)) + +#define DMA_PARCR (*(volatile uint32 *)(0xFFFFF1A8U)) +#define DMA_PARADDR (*(volatile uint32 *)(0xFFFFF1ACU)) +#define DMARAMLOC (*(volatile uint32 *)(0xFFF80000U)) +#define DMARAMPARLOC (*(volatile uint32 *)(0xFFF80A00U)) + +#define MIBSPI1RAMLOC (*(volatile uint32 *)(0xFF0E0000U)) +#define MIBSPI3RAMLOC (*(volatile uint32 *)(0xFF0C0000U)) +#define MIBSPI5RAMLOC (*(volatile uint32 *)(0xFF0A0000U)) + + +#ifndef __PBIST_H__ +#define __PBIST_H__ + +/** @enum pbistPort +* @brief Alias names for pbist Port number +* +* This enumeration is used to provide alias names for the pbist Port number +* - PBIST_PORT0 +* - PBIST_PORT1 +* +* @note Check the datasheet for the port avaiability +*/ +enum pbistPort +{ + PBIST_PORT0 = 0U, /**< Alias for PBIST Port 0 */ + PBIST_PORT1 = 1U /**< Alias for PBIST Port 1 < Check datasheet for Port 1 availability > */ +}; +/** @enum pbistAlgo +* @brief Alias names for pbist Algorithm +* +* This enumeration is used to provide alias names for the pbist Algorithm +*/ +enum pbistAlgo +{ + PBIST_TripleReadSlow = 0x00000001U, /**>16U) +#define SYS_EXCEPTION (*(volatile uint32 *)0xFFFFFFE4U) + +#define POWERON_RESET 0x8000U +#define OSC_FAILURE_RESET 0x4000U +#define WATCHDOG_RESET 0x2000U +#define ICEPICK_RESET 0x2000U +#define CPU_RESET 0x0020U +#define SW_RESET 0x0010U + +#define WATCHDOG_STATUS (*(volatile uint32 *)0xFFFFFC98U) +#define DEVICE_ID_REV (*(volatile uint32 *)0xFFFFFFF0U) + +/** @def OSC_FREQ +* @brief Oscillator clock source exported from HALCoGen GUI +* +* Oscillator clock source exported from HALCoGen GUI +*/ +#define OSC_FREQ 16.0F + +/** @def PLL1_FREQ +* @brief PLL 1 clock source exported from HALCoGen GUI +* +* PLL 1 clock source exported from HALCoGen GUI +*/ +#define PLL1_FREQ 220.00F + +/** @def LPO_LF_FREQ +* @brief LPO Low Freq Oscillator source exported from HALCoGen GUI +* +* LPO Low Freq Oscillator source exported from HALCoGen GUI +*/ +#define LPO_LF_FREQ 0.080F + +/** @def LPO_HF_FREQ +* @brief LPO High Freq Oscillator source exported from HALCoGen GUI +* +* LPO High Freq Oscillator source exported from HALCoGen GUI +*/ +#define LPO_HF_FREQ 10.000F + +/** @def PLL1_FREQ +* @brief PLL 2 clock source exported from HALCoGen GUI +* +* PLL 2 clock source exported from HALCoGen GUI +*/ +#define PLL2_FREQ 220.00F + +/** @def GCLK_FREQ +* @brief GCLK domain frequency exported from HALCoGen GUI +* +* GCLK domain frequency exported from HALCoGen GUI +*/ +#define GCLK_FREQ 220.000F + +/** @def HCLK_FREQ +* @brief HCLK domain frequency exported from HALCoGen GUI +* +* HCLK domain frequency exported from HALCoGen GUI +*/ +#define HCLK_FREQ 220.000F + +/** @def RTI_FREQ +* @brief RTI Clock frequency exported from HALCoGen GUI +* +* RTI Clock frequency exported from HALCoGen GUI +*/ +#define RTI_FREQ 110.000F + +/** @def AVCLK1_FREQ +* @brief AVCLK1 Domain frequency exported from HALCoGen GUI +* +* AVCLK Domain frequency exported from HALCoGen GUI +*/ +#define AVCLK1_FREQ 110.000F + +/** @def AVCLK2_FREQ +* @brief AVCLK2 Domain frequency exported from HALCoGen GUI +* +* AVCLK2 Domain frequency exported from HALCoGen GUI +*/ +#define AVCLK2_FREQ 0.000F + +/** @def AVCLK3_FREQ +* @brief AVCLK3 Domain frequency exported from HALCoGen GUI +* +* AVCLK3 Domain frequency exported from HALCoGen GUI +*/ +#define AVCLK3_FREQ 110.000F + +/** @def AVCLK4_FREQ +* @brief AVCLK4 Domain frequency exported from HALCoGen GUI +* +* AVCLK4 Domain frequency exported from HALCoGen GUI +*/ +#define AVCLK4_FREQ 110.000F + +/** @def VCLK1_FREQ +* @brief VCLK1 Domain frequency exported from HALCoGen GUI +* +* VCLK1 Domain frequency exported from HALCoGen GUI +*/ +#define VCLK1_FREQ 110.000F + +/** @def VCLK2_FREQ +* @brief VCLK2 Domain frequency exported from HALCoGen GUI +* +* VCLK2 Domain frequency exported from HALCoGen GUI +*/ +#define VCLK2_FREQ 110.000F + +/** @def VCLK3_FREQ +* @brief VCLK3 Domain frequency exported from HALCoGen GUI +* +* VCLK3 Domain frequency exported from HALCoGen GUI +*/ +#define VCLK3_FREQ 110.000F + +/** @def VCLK4_FREQ +* @brief VCLK4 Domain frequency exported from HALCoGen GUI +* +* VCLK4 Domain frequency exported from HALCoGen GUI +*/ +#define VCLK4_FREQ 110.000F + + +/** @def SYS_PRE1 +* @brief Alias name for RTI1CLK PRE clock source +* +* This is an alias name for the RTI1CLK pre clock source. +* This can be either: +* - Oscillator +* - Pll +* - 32 kHz Oscillator +* - External +* - Low Power Oscillator Low +* - Low Power Oscillator High +* - Flexray Pll +*/ +/*SAFETYMCUSW 79 S MR:19.4 " Value comes from GUI drop down option " */ +#define SYS_PRE1 (SYS_PLL1) + +/** @def SYS_PRE2 +* @brief Alias name for RTI2CLK pre clock source +* +* This is an alias name for the RTI2CLK pre clock source. +* This can be either: +* - Oscillator +* - Pll +* - 32 kHz Oscillator +* - External +* - Low Power Oscillator Low +* - Low Power Oscillator High +* - Flexray Pll +*/ +/*SAFETYMCUSW 79 S MR:19.4 " Value comes from GUI drop down option " */ +#define SYS_PRE2 (SYS_PLL1) + +/* Configuration registers */ +typedef struct system_config_reg +{ + uint32 CONFIG_SYSPC1; + uint32 CONFIG_SYSPC2; + uint32 CONFIG_SYSPC7; + uint32 CONFIG_SYSPC8; + uint32 CONFIG_SYSPC9; + uint32 CONFIG_CSDIS; + uint32 CONFIG_CDDIS; + uint32 CONFIG_GHVSRC; + uint32 CONFIG_VCLKASRC; + uint32 CONFIG_RCLKSRC; + uint32 CONFIG_MSTGCR; + uint32 CONFIG_MINITGCR; + uint32 CONFIG_MSINENA; + uint32 CONFIG_PLLCTL1; + uint32 CONFIG_PLLCTL2; + uint32 CONFIG_UERFLAG; + uint32 CONFIG_LPOMONCTL; + uint32 CONFIG_CLKTEST; + uint32 CONFIG_DFTCTRLREG1; + uint32 CONFIG_DFTCTRLREG2; + uint32 CONFIG_GPREG1; + uint32 CONFIG_RAMGCR; + uint32 CONFIG_BMMCR1; + uint32 CONFIG_MMUGCR; + uint32 CONFIG_CLKCNTL; + uint32 CONFIG_ECPCNTL; + uint32 CONFIG_DEVCR1; + uint32 CONFIG_SYSECR; + uint32 CONFIG_PLLCTL3; + uint32 CONFIG_STCCLKDIV; + uint32 CONFIG_CLK2CNTL; + uint32 CONFIG_VCLKACON1; + uint32 CONFIG_CLKSLIP; + uint32 CONFIG_EFC_CTLEN; +} system_config_reg_t; + +/* Configuration registers initial value */ +#define SYS_SYSPC1_CONFIGVALUE 0U + +#define SYS_SYSPC2_CONFIGVALUE 1U + +#define SYS_SYSPC7_CONFIGVALUE 0U + +#define SYS_SYSPC8_CONFIGVALUE 0U + +#define SYS_SYSPC9_CONFIGVALUE 1U + +#define SYS_CSDIS_CONFIGVALUE ( 0x00000000U\ + | 0x00000000U \ + | 0x00000008U \ + | 0x00000080U \ + | 0x00000000U \ + | 0x00000000U \ + | 0x00000000U\ + | 0x4U ) + +#define SYS_CDDIS_CONFIGVALUE ( (uint32)((uint32)0U << 4U )\ + | (uint32)((uint32)1U << 5U )\ + | (uint32)((uint32)0U << 8U )\ + | (uint32)((uint32)0U << 9U )\ + | (uint32)((uint32)0U << 10U)\ + | (uint32)((uint32)0U << 11U) ) + +#define SYS_GHVSRC_CONFIGVALUE ( (uint32)((uint32)SYS_OSC << 24U) \ + | (uint32)((uint32)SYS_OSC << 16U) \ + | (uint32)((uint32)SYS_PLL1 << 0U) ) + +#define SYS_VCLKASRC_CONFIGVALUE ( (uint32)((uint32)SYS_VCLK << 8U)\ + | (uint32)((uint32)SYS_VCLK << 0U) ) + +#define SYS_RCLKSRC_CONFIGVALUE ( (uint32)((uint32)1U << 24U)\ + | (uint32)((uint32)SYS_VCLK << 16U)\ + | (uint32)((uint32)1U << 8U)\ + | (uint32)((uint32)SYS_VCLK << 0U) ) + +#define SYS_MSTGCR_CONFIGVALUE 0x00000105U + +#define SYS_MINITGCR_CONFIGVALUE 0x5U + +#define SYS_MSINENA_CONFIGVALUE 0U + +#define SYS_PLLCTL1_CONFIGVALUE_1 ( (uint32)0x00000000U \ + | (uint32)0x20000000U \ + | (uint32)((uint32)0x1FU << 24U) \ + | (uint32)0x00000000U \ + | (uint32)((uint32)(6U - 1U)<< 16U)\ + | (uint32)(0xA400U)) + +#define SYS_PLLCTL1_CONFIGVALUE_2 (((SYS_PLLCTL1_CONFIGVALUE_1) & 0xE0FFFFFFU) | (uint32)((uint32)(1U - 1U) << 24U)) + +#define SYS_PLLCTL2_CONFIGVALUE ( (uint32)0x00000000U\ + | (uint32)((uint32)255U << 22U)\ + | (uint32)((uint32)7U << 12U)\ + | (uint32)((uint32)(2U - 1U)<< 9U)\ + | (uint32)61U) + +#define SYS_UERFLAG_CONFIGVALUE 0U + +#define SYS_LPOMONCTL_CONFIGVALUE_1 ((uint32)((uint32)1U << 24U) | LPO_TRIM_VALUE) +#define SYS_LPOMONCTL_CONFIGVALUE_2 ((uint32)((uint32)1U << 24U) | (uint32)((uint32)16U << 8U) | 16U) + +#define SYS_CLKTEST_CONFIGVALUE 0x000A0000U + +#define SYS_DFTCTRLREG1_CONFIGVALUE 0x00002205U + +#define SYS_DFTCTRLREG2_CONFIGVALUE 0x5U + +#define SYS_GPREG1_CONFIGVALUE 0x0005FFFFU + +#define SYS_RAMGCR_CONFIGVALUE 0x00050000U + +#define SYS_BMMCR1_CONFIGVALUE 0xAU + +#define SYS_MMUGCR_CONFIGVALUE 0U + +#define SYS_CLKCNTL_CONFIGVALUE ( 0x00000100U \ + | (uint32)((uint32)1U << 16U) \ + | (uint32)((uint32)1U << 24U) ) + +#define SYS_ECPCNTL_CONFIGVALUE ( (uint32)((uint32)0U << 24U)\ + | (uint32)((uint32)0U << 23U)\ + | (uint32)((uint32)(8U - 1U) & 0xFFFFU) ) + +#define SYS_DEVCR1_CONFIGVALUE 0xAU + +#define SYS_SYSECR_CONFIGVALUE 0x00004000U +#define SYS2_PLLCTL3_CONFIGVALUE_1 ( (uint32)((uint32)(2U - 1U) << 29U)\ + | (uint32)((uint32)0x1FU << 24U) \ + | (uint32)((uint32)(6U - 1U)<< 16U) \ + | (uint32)(0xA400U)) + +#define SYS2_PLLCTL3_CONFIGVALUE_2 (((SYS2_PLLCTL3_CONFIGVALUE_1) & 0xE0FFFFFFU) | (uint32)((uint32)(1U - 1U) << 24U)) +#define SYS2_STCCLKDIV_CONFIGVALUE 0U +#define SYS2_CLK2CNTL_CONFIGVALUE (1U | 0x00000100U) +#define SYS2_VCLKACON1_CONFIGVALUE ( (uint32)((uint32)1U << 24U) \ + | (uint32)((uint32)1U << 20U) \ + | (uint32)((uint32)SYS_VCLK << 16U)\ + | (uint32)((uint32)1U << 8U)\ + | (uint32)((uint32)1U << 4U) \ + | (uint32)((uint32)SYS_VCLK << 0U) ) +#define SYS2_CLKSLIP_CONFIGVALUE 0x5U +#define SYS2_EFC_CTLEN_CONFIGVALUE 0x5U + +void systemGetConfigValue(system_config_reg_t *config_reg, config_value_type_t type); + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/* FlashW General Definitions */ + + +/** @enum flashWPowerModes +* @brief Alias names for flash bank power modes +* +* This enumeration is used to provide alias names for the flash bank power modes: +* - sleep +* - standby +* - active +*/ +enum flashWPowerModes +{ + SYS_SLEEP = 0U, /**< Alias for flash bank power mode sleep */ + SYS_STANDBY = 1U, /**< Alias for flash bank power mode standby */ + SYS_ACTIVE = 3U /**< Alias for flash bank power mode active */ +}; + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + +#define FSM_WR_ENA_HL (*(volatile uint32 *)0xFFF87288U) +#define EEPROM_CONFIG_HL (*(volatile uint32 *)0xFFF872B8U) + +/* Configuration registers */ +typedef struct tcmflash_config_reg +{ + uint32 CONFIG_FRDCNTL; + uint32 CONFIG_FEDACCTRL1; + uint32 CONFIG_FEDACCTRL2; + uint32 CONFIG_FEDACSDIS; + uint32 CONFIG_FBPROT; + uint32 CONFIG_FBSE; + uint32 CONFIG_FBAC; + uint32 CONFIG_FBFALLBACK; + uint32 CONFIG_FPAC1; + uint32 CONFIG_FPAC2; + uint32 CONFIG_FMAC; + uint32 CONFIG_FLOCK; + uint32 CONFIG_FDIAGCTRL; + uint32 CONFIG_FEDACSDIS2; +} tcmflash_config_reg_t; + +/* Configuration registers initial value */ +#define TCMFLASH_FRDCNTL_CONFIGVALUE (0x00000000U | (uint32)((uint32)3U << 8U) | (uint32)((uint32)1U << 4U) | 1U) +#define TCMFLASH_FEDACCTRL1_CONFIGVALUE 0x000A0005U +#define TCMFLASH_FEDACCTRL2_CONFIGVALUE 0U +#define TCMFLASH_FEDACSDIS_CONFIGVALUE 0U +#define TCMFLASH_FBPROT_CONFIGVALUE 0U +#define TCMFLASH_FBSE_CONFIGVALUE 0U +#define TCMFLASH_FBAC_CONFIGVALUE 0xFU +#define TCMFLASH_FBFALLBACK_CONFIGVALUE ( (uint32)((uint32)SYS_ACTIVE << 14U) \ + | (uint32)((uint32)3U << 12U) \ + | (uint32)((uint32)3U << 10U) \ + | (uint32)((uint32)3U << 8U) \ + | (uint32)((uint32)3U << 6U) \ + | (uint32)((uint32)3U << 4U) \ + | (uint32)((uint32)SYS_ACTIVE << 2U) \ + | (uint32)((uint32)SYS_ACTIVE << 0U) ) + +#define TCMFLASH_FPAC1_CONFIGVALUE 0x00C80001U +#define TCMFLASH_FPAC2_CONFIGVALUE 0U +#define TCMFLASH_FMAC_CONFIGVALUE 0U +#define TCMFLASH_FLOCK_CONFIGVALUE 0x55AAU +#define TCMFLASH_FDIAGCTRL_CONFIGVALUE 0x000A0000U +#define TCMFLASH_FEDACSDIS2_CONFIGVALUE 0U + +void tcmflashGetConfigValue(tcmflash_config_reg_t *config_reg, config_value_type_t type); + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + + +/* System Interface Functions */ +void setupPLL(void); +void trimLPO(void); +void customTrimLPO(void); +void setupFlash(void); +void periphInit(void); +void mapClocks(void); +void systemInit(void); +void systemPowerDown(uint32 mode); + +/*Configuration registers +* index 0: Even RAM +* index 1: Odd RAM +*/ +typedef struct sram_config_reg +{ + uint32 CONFIG_RAMCTRL[2U]; + uint32 CONFIG_RAMTHRESHOLD[2U]; + uint32 CONFIG_RAMINTCTRL[2U]; + uint32 CONFIG_RAMTEST[2U]; + uint32 CONFIG_RAMADDRDECVECT[2U]; +} sram_config_reg_t; + +/* Configuration registers initial value */ +#define SRAM_RAMCTRL_CONFIGVALUE 0x0005000AU +#define SRAM_RAMTHRESHOLD_CONFIGVALUE 1U +#define SRAM_RAMINTCTRL_CONFIGVALUE 1U +#define SRAM_RAMTEST_CONFIGVALUE 0x5U +#define SRAM_RAMADDRDECVECT_CONFIGVALUE 0U + +void sramGetConfigValue(sram_config_reg_t *config_reg, config_value_type_t type); +#ifdef __cplusplus +} +#endif /*extern "C" */ +#endif Index: firmware/include/ti_fee.h =================================================================== diff -u --- firmware/include/ti_fee.h (revision 0) +++ firmware/include/ti_fee.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,504 @@ +/********************************************************************************************************************** + * FILE DESCRIPTION + * ------------------------------------------------------------------------------------------------------------------- + * File: ti_fee.h + * Project: Tms570_TIFEEDriver + * Module: TIFEEDriver + * Generator: None + * + * Description: This file implements the TI FEE Api. + *--------------------------------------------------------------------------------------------------------------------- + * Author: Vishwanath Reddy + *--------------------------------------------------------------------------------------------------------------------- + * Revision History + *--------------------------------------------------------------------------------------------------------------------- + * Version Date Author Change ID Description + *--------------------------------------------------------------------------------------------------------------------- + * 00.01.00 31Aug2012 Vishwanath Reddy 0000000000000 Initial Version + * 00.01.01 29Oct2012 Vishwanath Reddy 0000000000000 Changes for implementing Error Recovery + * 00.01.02 30Nov2012 Vishwanath Reddy SDOCM00097786 Misra Fixes, Memory segmentation changes. + * 00.01.03 14Jan2013 Vishwanath Reddy SDOCM00098510 Changes as requested by Vector. + * 00.01.04 12Feb2012 Vishwanath Reddy SDOCM00099152 Integration issues fix. + * 00.01.05 04Mar2013 Vishwanath Reddy SDOCM00099152 Added Deleting a block feature, bug fixes. + * 00.01.06 11Mar2013 Vishwanath Reddy SDOCM00099152 Added feature : copying of unconfigured blocks. + * 00.01.07 15Mar2013 Vishwanath Reddy SDOCM00099152 Added feature : Number of 8 bytes writes, fixed + issue with copy blocks. + * 00.01.08 05Apr2013 Vishwanath Reddy SDOCM00099152 Added feature : CRC check for unconfigured blocks, + Main function modified to complete writes as fast + as possible, Added Non polling mode support. + * 00.01.09 19Apr2013 Vishwanath Reddy SDOCM00099152 Warning removal, Added feature comparision of data + during write. + * 00.01.10 11Jun2013 Vishwanath Reddy SDOCM00101845 Updated version information. + * 00.01.11 05Jul2013 Vishwanath Reddy SDOCM00101643 Updated version information. + * 01.12.00 13Dec2013 Vishwanath Reddy SDOCM00105412 Traceability tags added. + * MISRA C fixes. Version info corrected. + * 01.13.00 30Dec2013 Vishwanath Reddy 0000000000000 Undated version info for SDOCM00107976 + * and SDOCM00105795. + * 01.13.01 19May2014 Vishwanath Reddy 0000000000000 Updated version info for SDOCM00107913 + * and SDOCM00107622. + * 01.13.02 12Jun2014 Vishwanath Reddy 0000000000000 Updated version info for SDOCM00108238 + * 01.14.00 26Mar2014 Vishwanath Reddy Update version info for SDOCM00107161. + * 01.15.00 06Jun2014 Vishwanath Reddy Support for Conqueror. + * 01.16.00 15Jul2014 Vishwanath Reddy SDOCM00112141 Remove MISRA warnings. + * 01.16.01 12Sep2014 Vishwanath Reddy SDOCM00112930 Prototype for TI_Fee_SuspendResumeErase added. + * TI_Fee_EraseCommandType enum added. + * extern added for TI_Fee_bEraseSuspended. + * 01.17.00 15Oct2014 Vishwanath Reddy SDOCM00113379 RAM Optimization changes. + * 01.17.01 30Oct2014 Vishwanath Reddy SDOCM00113536 Support for TMS570LS07xx,TMS570LS09xx, + * TMS570LS05xx, RM44Lx. + * 01.17.02 26Dec2014 Vishwanath Reddy SDOCM00114102 FLEE Errata Fix. + * SDOCM00114104 Change ALL 1's OK check condition. + * Updated version info. Added new macros. + * SDOCM00114423 Add new enum TI_Fee_DeviceType. + * Add new variable TI_Fee_MaxSectors and + * prototype TI_FeeInternal_PopulateStructures. + * 01.18.00 12Oct2015 Vishwanath Reddy SDOCM00119455 Update version history. + * Update ti_fee_util.c file for the + * bugfix "If morethan one data set is config- + * ured, then a valid block may get invalidated if + * multiple valid blocks are present in FEE memory. + * 01.18.01 17Nov2015 Vishwanath Reddy SDOCM00120161 Update version history. + * In TI_FeeInternal_FeeManager, do not change the + * state to IDLE,after completing the copy operation. + * 01.18.02 05Feb2016 Vishwanath Reddy SDOCM00121158 Update version history. + * Add a call of TI_FeeInternal_PollFlashStatus() + * before reading data from FEE bank in + * TI_FeeInternal_UpdateBlockOffsetArray(), + * TI_Fee_WriteAsync(),TI_Fee_WriteSync(), + * TI_Fee_ReadSync(), TI_Fee_Read() + * 01.18.03 30June2016 Vishwanath Reddy SDOCM00122388 Update patch version TI_FEE_SW_PATCH_VERSION. + * TI_FEE_FLASH_CRC_ENABLE is renamed to + * TI_FEE_FLASH_CHECKSUM_ENABLE. + * SDOCM00122429 In ti_fee_types.h, add error when endianess + * is not defined. + * 01.19.00 08Augu2016 Vishwanath Reddy SDOCM00122592 Update patch version TI_FEE_MINOR_VERSION. + * Code for using partially ersed sector is now + * removed. + * Bugfix for FEE reading from unimplemented memory + * space. + * 01.19.01 12Augu2016 Vishwanath Reddy SDOCM00122543 Update patch version TI_FEE_MINOR_VERSION. + * Synchronous write API modified to avoid copy of + * already copied block. + * 01.19.02 25Janu2017 Vishwanath Reddy SDOCM00122832 Update patch version TI_FEE_MINOR_VERSION. + * Format API modified to erase all configured VS. + * SDOCM00122833 In API TI_Fee_ErrorRecovery, added polling for + * flash status before calling TI_Fee_Init. + * 01.19.03 15May2017 Prathap Srinivasan SDOCM00122917 Added TI_Fee_bIsMainFunctionCalled Global Variable. + * 01.19.04 05Dec2017 Prathap Srinivasan HERCULES_SW-5082 Update version history. + *********************************************************************************************************************/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +#ifndef TI_FEE_H +#define TI_FEE_H + +/********************************************************************************************************************** + * INCLUDES + *********************************************************************************************************************/ +#include "hal_stdtypes.h" +#include "fee_interface.h" +#include "ti_fee_types.h" +#include "ti_fee_cfg.h" +/********************************************************************************************************************** + * GLOBAL CONSTANT MACROS + *********************************************************************************************************************/ +/* Fee Published Information */ +#define TI_FEE_MAJOR_VERSION 3U +#define TI_FEE_MINOR_VERSION 0U +#define TI_FEE_PATCH_VERSION 2U +#define TI_FEE_SW_MAJOR_VERSION 1U +#define TI_FEE_SW_MINOR_VERSION 19U +#define TI_FEE_SW_PATCH_VERSION 4U + +#define TI_FEE_VIRTUAL_SECTOR_VERSION 1U + +/* Virtual sector states */ +#define ActiveVSHi 0x0000FFFFU +#define ActiveVSLo 0x00000000U +#define CopyVSHi 0xFFFFFFFFU +#define CopyVSLo 0x00000000U +#define EmptyVSHi 0xFFFFFFFFU +#define EmptyVSLo 0x0000FFFFU +#define InvalidVSHi 0xFFFFFFFFU +#define InvalidVSLo 0xFFFFFFFFU +#define ReadyforEraseVSHi 0x00000000U +#define ReadyforEraseVSLo 0x00000000U + +/* Data Block states*/ +#define EmptyBlockHi 0xFFFFFFFFU +#define EmptyBlockLo 0xFFFFFFFFU +#define StartProgramBlockHi 0xFFFF0000U +#define StartProgramBlockLo 0xFFFFFFFFU +#define ValidBlockHi 0x00000000U +#define ValidBlockLo 0xFFFFFFFFU +#define InvalidBlockHi 0x00000000U +#define InvalidBlockLo 0xFFFF0000U +#define CorruptBlockHi 0x00000000U +#define CorruptBlockLo 0x00000000U + +#define FEE_BANK 0U + +/* Enable/Disable FEE sectors */ +#define FEE_DISABLE_SECTORS_31_00 0x00000000U +#define FEE_DISABLE_SECTORS_63_32 0x00000000U +#define FEE_ENABLE_SECTORS_31_00 0xFFFFFFFFU +#define FEE_ENABLE_SECTORS_63_32 0xFFFFFFFFU + +/********************************************************************************************************************** + * GLOBAL DATA TYPES AND STRUCTURES + *********************************************************************************************************************/ +/* Structures used */ +/* Enum to describe the Fee Status types */ +typedef enum +{ + TI_FEE_OK = 0U, /* Function returned no error */ + TI_FEE_ERROR = 1U /* Function returned an error */ +} TI_Fee_StatusType; + +/* Enum to describe the Virtual Sector State */ +typedef enum +{ + VsState_Invalid=1U, + VsState_Empty=2U, + VsState_Copy=3U, + VsState_Active=4U, + VsState_ReadyForErase=5U +}VirtualSectorStatesType; + +/* Enum to describe the Block State */ +typedef enum +{ + Block_StartProg=1U, + Block_Valid=2U, + Block_Invalid=3U +}BlockStatesType; + +/* Enum for error trpes */ +typedef enum +{ + Error_Nil=0U, + Error_TwoActiveVS=1U, + Error_TwoCopyVS=2U, + Error_SetupStateMachine=3U, + Error_CopyButNoActiveVS=4U, + Error_NoActiveVS=5U, + Error_BlockInvalid=6U, + Error_NullDataPtr=7U, + Error_NoFreeVS=8U, + Error_InvalidVirtualSectorParameter=9U, + Error_ExceedSectorOnBank=10U, + Error_EraseVS=11U, + Error_BlockOffsetGtBlockSize=12U, + Error_LengthParam=13U, + Error_FeeUninit=14U, + Error_Suspend=15U, + Error_InvalidBlockIndex=16U, + Error_NoErase=17U, + Error_CurrentAddress=18U, + Error_Exceed_No_Of_DataSets=19U +}TI_Fee_ErrorCodeType; + +typedef enum +{ + Suspend_Erase=0U, + Resume_Erase +}TI_Fee_EraseCommandType; + +/* Enum to describe the Device types */ +typedef enum +{ + CHAMPION = 0U, /* Function returned no error */ + ARCHER = 1U /* Function returned an error */ +} TI_Fee_DeviceType; + +typedef uint32 TI_Fee_AddressType; /* Used for defining variables to indicate number of + bytes for address offset */ +typedef uint32 TI_Fee_LengthType; /* Used for defining variables to indicate number of + bytes per read/write/erase */ +typedef TI_Fee_ErrorCodeType Fee_ErrorCodeType; + +/* Structure used when defining virtual sectors */ +/* The following error checks need to be performed: */ +/* Virtual Sector definitions are not allowed to overlap */ +/* Virtual Sector definition is at least twice the size in bytes of the total size of all defined blocks */ +/* We will need to define a formula to indicate if the number of write cycles indicated in the block definitions */ +/* is possible in the defined Virtual Sector. */ +/* Ending sector cannot be less than Starting sector */ +typedef struct +{ + uint16 FeeVirtualSectorNumber; /* Virtual Sector's Number - 0 and 0xFFFF values are not allowed*/ + /* Minimum 1, Maximum 4 */ + uint16 FeeFlashBank; /* Flash Bank to use for virtual sector. */ + /* As we do not allow Flash EEPROM Emulation in Bank 0, + 0 is not a valid option */ + /* Defaultvalue 1, Minimum 1, Maxiumum 7 */ + Fapi_FlashSectorType FeeStartSector; /* Defines the Starting Sector inthe Bank for this VirtualSector*/ + Fapi_FlashSectorType FeeEndSector; /* Defines the Ending Sector inthe Bank for this Virtual Sector */ + /* Start and End sectors can be the same, which indicates only + one sector */ + /* is the entire virtual sector. */ + /* Values are based on the FLASH_SECT enum */ + /* Defaultvalue and Min is the same sector defined as the starting + sector */ + /* Max values are based onthe device definition file being used.*/ +} Fee_VirtualSectorConfigType; + +/* Structure used when defining blocks */ +typedef struct +{ + uint16 FeeBlockNumber; /* Block's Number - 0 and 0xFFFF values are not allowed */ + /* Start 1, Next: Number of Blocks + 1, Min 1, Max 0xFFFE */ + uint16 FeeBlockSize; /* Block's Size - Actual number of bits used is reduced */ + /* by number of bits used for dataset. */ + /* Default 8, Min 1, Max (2^(16-# of Dataset Bits))-1 */ + boolean FeeImmediateData; /* Indicates if the block is used for immediate data */ + /* Default: False */ + uint32 FeeNumberOfWriteCycles; /* Number of write cycles this block requires */ + /* Default: 0, but this will not be a valid number. + Force customer to select a value */ + /* Min 1, Max (2^32)-1 */ + uint8 FeeDeviceIndex; /* Device Index - This will always be 0 */ + /* Fixed value: 0 */ + uint8 FeeNumberOfDataSets; /* Number of DataSets for the Block */ + /* Default value: 1 */ + uint8 FeeEEPNumber; +} Fee_BlockConfigType; + + +/* Structure used for Global variables */ +typedef struct +{ + TI_Fee_AddressType Fee_oFlashNextAddress; /* The next Flash Address to write to */ + TI_Fee_AddressType Fee_oCopyCurrentAddress; /* Indicates the Address within the Active VS + which will be copied to Copy VS */ + TI_Fee_AddressType Fee_oCopyNextAddress; /* Indicates the Address within the Copy VS to + which the data from Active VS will be copied to */ + TI_Fee_AddressType Fee_u32nextwriteaddress; /* Indicates the next free Address within the curent + VS to which the data will be written */ + TI_Fee_AddressType Fee_oVirtualSectorStartAddress; /* Start Address of the current Virtual Sector */ + TI_Fee_AddressType Fee_oVirtualSectorEndAddress; /* End Address of the current Virtual Sector */ + TI_Fee_AddressType Fee_oCopyVirtualSectorAddress; /* Start Address of the Copy Virtual Address */ + TI_Fee_AddressType Fee_oCurrentStartAddress; /* Start Address of the Previous Block */ + TI_Fee_AddressType Fee_oCurrentBlockHeader; /* Start Address of the Block which is being currently + written*/ + TI_Fee_AddressType Fee_oWriteAddress; /* Address within the VS where data is to be written */ + TI_Fee_AddressType Fee_oCopyWriteAddress; /* Address within the VS where data is to be copied */ + TI_Fee_AddressType Fee_oActiveVirtualSectorAddress; /* Start Address of the Active VS */ + TI_Fee_AddressType Fee_oBlankFailAddress; /* Address of first non-blank location */ + TI_Fee_AddressType Fee_oActiveVirtualSectorStartAddress;/* Start Address of the active VS */ + TI_Fee_AddressType Fee_oActiveVirtualSectorEndAddress; /* End Address of the active VS */ + TI_Fee_AddressType Fee_oCopyVirtualSectorStartAddress; /* Start Address of the Copy VS */ + TI_Fee_AddressType Fee_oCopyVirtualSectorEndAddress; /* End Address of the Copy VS */ + TI_Fee_AddressType Fee_u32nextActiveVSwriteaddress; /* Next write address in Active VS */ + TI_Fee_AddressType Fee_u32nextCopyVSwriteaddress; /* Next write address in Copy VS */ + uint16 Fee_u16CopyBlockSize; /* Indicates the size of current block in bytes which is + been copied from Active to Copy VS */ + uint8 Fee_u8VirtualSectorStart; /* Index of the Start Sector of the VS */ + uint8 Fee_u8VirtualSectorEnd; /* Index of the End Sector of the VS */ + uint32 Fee_au32VirtualSectorStateValue[TI_FEE_VIRTUAL_SECTOR_OVERHEAD >> 2U]; /* Array to store the Virtual + Sector Header and + Information record */ + uint8 Fee_au8VirtualSectorState[TI_FEE_NUMBER_OF_VIRTUAL_SECTORS]; /* Stores the state of each + Virtual sector */ + uint32 Fee_au32VirtualSectorEraseCount[TI_FEE_NUMBER_OF_VIRTUAL_SECTORS]; /* Array to store the erase + count of each Virtual + Sector*/ + uint16 Fee_au16BlockOffset[TI_FEE_TOTAL_BLOCKS_DATASETS]; /* Array to store within the VS */ + uint32 Fee_au32BlockHeader[TI_FEE_BLOCK_OVERHEAD >> 2U]; /* Array to store the Block Header value */ + uint8 Fee_au8BlockCopyStatus[TI_FEE_TOTAL_BLOCKS_DATASETS]; /* Array to storeblock copy status */ + uint8 Fee_u8InternalVirtualSectorStart; /* Indicates internal VS start index */ + uint8 Fee_u8InternalVirtualSectorEnd; /* Indicates internal VS end index */ + TI_FeeModuleStatusType Fee_ModuleState; /* Indicates the state of the FEE module */ + TI_FeeJobResultType Fee_u16JobResult; /* Stores the Job Result of the current command */ + TI_Fee_StatusType Fee_oStatus; /* Indicates the status of FEE */ + TI_Fee_ErrorCodeType Fee_Error; /* Indicates the Error code */ + uint16 Fee_u16CopyBlockNumber; /* Block number which is currently being copied */ + uint16 Fee_u16BlockIndex; /* Index of the Current Block */ + uint16 Fee_u16BlockCopyIndex; /* Index of the Block being copied from Copy to Active VS */ + uint16 Fee_u16DataSetIndex; /* Index of the Current DataSet */ + uint16 Fee_u16ArrayIndex; /* Index of the Current DataSet */ + uint16 Fee_u16BlockSize; /* Size of the current block in bytes */ + uint16 Fee_u16BlockSizeinBlockHeader; /* Size of the current block. Used to write into Block Header */ + uint16 Fee_u16BlockNumberinBlockHeader; /* Number of the current block. Used to write into Block Header */ + uint8 Fee_u8ActiveVirtualSector; /* Indicates the FeeVirtualSectorNumber for the Active VS */ + uint8 Fee_u8CopyVirtualSector; /* Indicates the FeeVirtualSectorNumber for the Copy VS */ + uint32 Fee_u32InternalEraseQueue; /* Indicates which VS can be erased when the FEE is in + BusyInternal State*/ + uint8 Fee_u8WriteCopyVSHeader; /* Indicates the number of bytes of the Copy VS Header being + written */ + uint8 Fee_u8WriteCount; /* Indicates the number of bytes of the Block Header being + written */ + uint8 * Fee_pu8ReadDataBuffer; /* Pointer to read data */ + uint8 * Fee_pu8ReadAddress; /* Pointer to read address */ + uint8 * Fee_pu8Data; /* Pointer to the next data to be written to the VS */ + uint8 * Fee_pu8CopyData; /* Pointer to the next data to be copied to the VS */ + uint8 * Fee_pu8DataStart; /* Pointer to the first data to be written to the VS */ + boolean Fee_bInvalidWriteBit; /* Indicates whether the block is written/invalidated/erased + for the first time */ + boolean Fee_bWriteData; /* Indicates that there is data which is pending to be written + to the Block */ + boolean Fee_bWriteBlockHeader; /* Indicates whether the Block Header has been written or not */ + boolean bWriteFirstTime; /* Indicates if the block is being written first time */ + boolean Fee_bFindNextVirtualSector; /* Indicates if there is aneed to find next free VS */ + boolean Fee_bWriteVSHeader; /* Indicates if block header needs to be written */ + boolean Fee_bWriteStartProgram; /* Indicates if start program block header needs to be written */ + boolean Fee_bWritePartialBlockHeader; /* Indicates if start program block header needs to be written */ + #if (TI_FEE_NUMBER_OF_UNCONFIGUREDBLOCKSTOCOPY != 0U) + uint16 Fee_au16UnConfiguredBlockAddress[TI_FEE_NUMBER_OF_UNCONFIGUREDBLOCKSTOCOPY]; /* Indicates + number of unconfigured blocks to copy */ + uint8 Fee_au8UnConfiguredBlockCopyStatus[TI_FEE_NUMBER_OF_UNCONFIGUREDBLOCKSTOCOPY]; /* Array to store block + copy status */ + #endif +}TI_Fee_GlobalVarsType; + +/********************************************************************************************************************** + * EXTERN Declarations + *********************************************************************************************************************/ +/* Fee Global Variables */ +extern const Fee_BlockConfigType Fee_BlockConfiguration[TI_FEE_NUMBER_OF_BLOCKS]; +#if (TI_FEE_GENERATE_DEVICEANDVIRTUALSECTORSTRUC == STD_OFF) +extern const Fee_VirtualSectorConfigType Fee_VirtualSectorConfiguration[TI_FEE_NUMBER_OF_VIRTUAL_SECTORS]; +extern const Device_FlashType Device_FlashDevice; +#endif +#if (TI_FEE_GENERATE_DEVICEANDVIRTUALSECTORSTRUC == STD_ON) +extern Fee_VirtualSectorConfigType Fee_VirtualSectorConfiguration[TI_FEE_NUMBER_OF_VIRTUAL_SECTORS]; +extern Device_FlashType Device_FlashDevice; +extern uint8 TI_Fee_MaxSectors; +#endif +extern TI_Fee_GlobalVarsType TI_Fee_GlobalVariables[TI_FEE_NUMBER_OF_EEPS]; +extern TI_Fee_StatusWordType_UN TI_Fee_oStatusWord[TI_FEE_NUMBER_OF_EEPS]; +#if(TI_FEE_FLASH_CHECKSUM_ENABLE == STD_ON) +extern uint32 TI_Fee_u32FletcherChecksum; +#endif +extern uint32 TI_Fee_u32BlockEraseCount; +extern uint8 TI_Fee_u8DataSets; +extern uint8 TI_Fee_u8DeviceIndex; +extern uint32 TI_Fee_u32ActCpyVS; +extern uint8 TI_Fee_u8ErrEraseVS; +#if (TI_FEE_NUMBER_OF_UNCONFIGUREDBLOCKSTOCOPY != 0U) +extern uint16 TI_Fee_u16NumberOfUnconfiguredBlocks[TI_FEE_NUMBER_OF_EEPS]; +#endif +#if(TI_FEE_FLASH_ERROR_CORRECTION_HANDLING == TI_Fee_Fix) +extern boolean Fee_bDoubleBitError; +extern boolean Fee_bSingleBitError; +#endif +#if(TI_FEE_NUMBER_OF_EEPS==2U) +extern TI_Fee_StatusWordType_UN TI_Fee_oStatusWord_Global; +#endif +extern boolean TI_Fee_FapiInitCalled; +extern boolean TI_Fee_bEraseSuspended; +extern boolean TI_Fee_bIsMainFunctionCalled; + + +/********************************************************************************************************************** + * GLOBAL FUNCTION PROTOTYPES + *********************************************************************************************************************/ +/* Interface Functions */ +extern void TI_Fee_Cancel(uint8 u8EEPIndex); +extern Std_ReturnType TI_Fee_EraseImmediateBlock(uint16 BlockNumber); +extern TI_FeeModuleStatusType TI_Fee_GetStatus(uint8 u8EEPIndex); +extern void TI_Fee_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr); +extern void TI_Fee_Init(void); +extern Std_ReturnType TI_Fee_InvalidateBlock(uint16 BlockNumber); +extern Std_ReturnType TI_Fee_Read(uint16 BlockNumber, + uint16 BlockOffset, + uint8* DataBufferPtr, + uint16 Length); +extern Std_ReturnType TI_Fee_WriteAsync(uint16 BlockNumber, uint8* DataBufferPtr); +extern void TI_Fee_MainFunction(void); +extern TI_Fee_ErrorCodeType TI_FeeErrorCode(uint8 u8EEPIndex); +extern void TI_Fee_ErrorRecovery(TI_Fee_ErrorCodeType ErrorCode, uint8 u8VirtualSector); +extern TI_FeeJobResultType TI_Fee_GetJobResult(uint8 u8EEPIndex); +extern void TI_Fee_SuspendResumeErase(TI_Fee_EraseCommandType Command); + +#if(TI_FEE_FLASH_ERROR_CORRECTION_HANDLING == TI_Fee_Fix) +extern void TI_Fee_ErrorHookSingleBitError(void); +extern void TI_Fee_ErrorHookDoubleBitError(void); +#endif + +#if(TI_FEE_DRIVER == 1U) +extern Std_ReturnType TI_Fee_WriteSync(uint16 BlockNumber, uint8* DataBufferPtr); +extern Std_ReturnType TI_Fee_Shutdown(void); +extern boolean TI_Fee_Format(uint32 u32FormatKey); +extern Std_ReturnType TI_Fee_ReadSync(uint16 BlockNumber,uint16 BlockOffset,uint8* DataBufferPtr,uint16 Length); +#endif + +/* TI Fee Internal Functions */ +TI_Fee_AddressType TI_FeeInternal_GetNextFlashAddress(uint8 u8EEPIndex); +TI_Fee_AddressType TI_FeeInternal_AlignAddressForECC(TI_Fee_AddressType oAddress); +TI_Fee_AddressType TI_FeeInternal_GetCurrentBlockAddress(uint16 BlockNumber,uint16 DataSetNumber, uint8 u8EEPIndex); +/*SAFETYMCUSW 61 X MR:1.4,5.1 "Reason - TI_FeeInternal_GetVirtualSectorParameter name is required here."*/ +uint32 TI_FeeInternal_GetVirtualSectorParameter(Fapi_FlashSectorType oSector, uint16 u16Bank, boolean VirtualSectorInfo, + uint8 u8EEPIndex); +uint32 TI_FeeInternal_PollFlashStatus(void); +uint16 TI_FeeInternal_GetBlockSize(uint16 BlockIndex); +uint16 TI_FeeInternal_GetBlockIndex(uint16 BlockNumber); +uint16 TI_FeeInternal_GetDataSetIndex(uint16 BlockNumber); +uint16 TI_FeeInternal_GetBlockNumber(uint16 BlockNumber); +uint8 TI_FeeInternal_FindNextVirtualSector(uint8 u8EEPIndex); +uint8 TI_FeeInternal_WriteDataF021(boolean bCopy,uint16 u16WriteSize, uint8 u8EEPIndex); +boolean TI_FeeInternal_BlankCheck(uint32 u32StartAddress, uint32 u32EndAddress, uint16 u16Bank, uint8 u8EEPIndex); +Std_ReturnType TI_FeeInternal_CheckReadParameters(uint32 u32BlockSize,uint16 BlockOffset, const uint8* DataBufferPtr, + uint16 Length, uint8 u8EEPIndex); +Std_ReturnType TI_FeeInternal_CheckModuleState(uint8 u8EEPIndex); +Std_ReturnType TI_FeeInternal_InvalidateErase(uint16 BlockNumber); +TI_Fee_StatusType TI_FeeInternal_FeeManager(uint8 u8EEPIndex); +void TI_FeeInternal_WriteVirtualSectorHeader(uint8 FeeVirtualSectorNumber, VirtualSectorStatesType VsState, + uint8 u8EEPIndex) ; +/*SAFETYMCUSW 61 X MR:1.4,5.1 "Reason - TI_FeeInternal_GetVirtualSectorIndex name is required here."*/ +void TI_FeeInternal_GetVirtualSectorIndex(Fapi_FlashSectorType oSectorStart, Fapi_FlashSectorType oSectorEnd, + uint16 u16Bank, boolean bOperation, uint8 u8EEPIndex); +void TI_FeeInternal_WritePreviousBlockHeader(boolean bWrite, uint8 u8EEPIndex); +void TI_FeeInternal_WriteBlockHeader(boolean bWrite, uint8 u8EEPIndex,uint16 Fee_BlockSize_u16,uint16 u16BlockNumber); +void TI_FeeInternal_SetClearCopyBlockState(uint8 u8EEPIndex, boolean bSetClear); +void TI_FeeInternal_SanityCheck(uint16 BlockSize, uint8 u8EEPIndex); +void TI_FeeInternal_StartProgramBlock(uint8 u8EEPIndex); +void TI_FeeInternal_UpdateBlockOffsetArray(uint8 u8EEPIndex, boolean bActCpyVS,uint8 u8VirtualSector); +void TI_FeeInternal_WriteInitialize(TI_Fee_AddressType oFlashNextAddress, uint8* DataBufferPtr, uint8 u8EEPIndex); +void TI_FeeInternal_CheckForError(uint8 u8EEPIndex); +void TI_FeeInternal_EnableRequiredFlashSector(uint32 u32VirtualSectorStartAddress); +uint16 TI_FeeInternal_GetArrayIndex(uint16 BlockNumber, uint16 DataSetNumber, uint8 u8EEPIndex, boolean bCallContext); +#if(TI_FEE_FLASH_CHECKSUM_ENABLE == STD_ON) +uint32 TI_FeeInternal_Fletcher16( uint8 const *pu8data, uint16 u16Length); +#endif +#if (TI_FEE_GENERATE_DEVICEANDVIRTUALSECTORSTRUC == STD_ON) +void TI_FeeInternal_PopulateStructures(TI_Fee_DeviceType DeviceType); +#endif +#endif /* TI_FEE_H */ +/********************************************************************************************************************** + * END OF FILE: ti_fee.h + *********************************************************************************************************************/ + + Index: firmware/include/ti_fee_cfg.h =================================================================== diff -u --- firmware/include/ti_fee_cfg.h (revision 0) +++ firmware/include/ti_fee_cfg.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,55 @@ +/********************************************************************************************************************** + * FILE DESCRIPTION + * ------------------------------------------------------------------------------------------------------------------- + * File: ti_fee_cfg.h + * Project: Tms570_TIFEEDriver + * Module: TIFEEDriver + * Generator: HALCoGen + * + * Description: This file implements the TI FEE Api. + *--------------------------------------------------------------------------------------------------------------------- + * Author: Vishwanath Reddy + *--------------------------------------------------------------------------------------------------------------------- + * Revision History + *--------------------------------------------------------------------------------------------------------------------- + * Version Date Author Change ID Description + *--------------------------------------------------------------------------------------------------------------------- + * 00.00.01 31Aug2012 Vishwanath Reddy 0000000000000 Initial Version + * 01.19.04 05Dec2017 Prathap Srinivasan HERCULES_SW-5082 Update version history. + * + *********************************************************************************************************************/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + Index: firmware/include/ti_fee_types.h =================================================================== diff -u --- firmware/include/ti_fee_types.h (revision 0) +++ firmware/include/ti_fee_types.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,203 @@ +/********************************************************************************************************************** + * FILE DESCRIPTION + * ------------------------------------------------------------------------------------------------------------------- + * File: ti_fee_types.h + * Project: Tms570_TIFEEDriver + * Module: TIFEEDriver + * Generator: None + * + * Description: This file implements the TI FEE Api. + *--------------------------------------------------------------------------------------------------------------------- + * Author: Vishwanath Reddy + *--------------------------------------------------------------------------------------------------------------------- + * Revision History + *--------------------------------------------------------------------------------------------------------------------- + * Version Date Author Change ID Description + *--------------------------------------------------------------------------------------------------------------------- + * 03.00.00 31Aug2012 Vishwanath Reddy 0000000000000 Initial Version + * 00.01.00 31Aug2012 Vishwanath Reddy 0000000000000 Initial Version + * 00.01.02 30Nov2012 Vishwanath Reddy SDOCM00097786 Misra Fixes, Memory segmentation changes. + * 01.12.00 13Dec2013 Vishwanath Reddy SDOCM00105412 MISRA C fixes. + * 01.15.00 06Jun2014 Vishwanath Reddy Support for LC Varients. + * 01.16.00 15Jul2014 Vishwanath Reddy SDOCM00112141 Remove MISRA warnings. + * 01.18.00 12Oct2015 Vishwanath Reddy SDOCM00119455 Update version history. + * 01.18.01 17Nov2015 Vishwanath Reddy SDOCM00120161 Update version history. + * 01.18.02 05Feb2016 Vishwanath Reddy SDOCM00121158 Update version history. + * 01.18.03 30June2016 Vishwanath Reddy SDOCM00122388 Update version history. + * SDOCM00122429 Added error when endianess is not defined. + * 01.19.00 08Augu2016 Vishwanath Reddy SDOCM00122592 Update version history. + * 01.19.01 12Augu2016 Vishwanath Reddy SDOCM00122543 Update version history. + * 01.19.03 15May2017 Prathap Srinivasan SDOCM00122917 Update version history. + * 01.19.04 05Dec2017 Prathap Srinivasan HERCULES_SW-5082 Update version history. + *********************************************************************************************************************/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +#ifndef TI_FEE_TYPES_H +#define TI_FEE_TYPES_H + +/********************************************************************************************************************** + * INCLUDES + *********************************************************************************************************************/ +#include "Device_header.h" + +#ifndef TI_Fee_None +#define TI_Fee_None 0x00U /*Take no action on single bit errors, (respond with corrected data), */ + /*return error for uncorrectable error reads (multibit errors for ECC or parity failures)*/ + /*For devices with no ECC (they may have parity or not) the only valid option is none. */ +#endif + +#ifndef TI_Fee_Fix +#define TI_Fee_Fix 0x01U /* single bit error will be fixed by reprogramming */ + /* return previous valid data for uncorrectable error reads (multi bit errors for ECC + or parity failures). */ +#endif + +#if !defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) +#error "Target Endianess is not defined. Include F021 header files and library." +#endif + +/*SAFETYMCUSW 74 S MR:18.4 "Reason - union declaration is necessary here."*/ +typedef union +{ + uint16 Fee_u16StatusWord; + #ifdef _BIG_ENDIAN + struct + { + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 Reserved: 5U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 Erase:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 ReadSync:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 ProgramFailed:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 Read:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 WriteSync:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 WriteAsync:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 EraseImmediate:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 InvalidateBlock:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 Copy:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 Initialized:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 SingleBitError:1U; + }Fee_StatusWordType_ST; + #endif + #ifdef _LITTLE_ENDIAN + struct + { + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 SingleBitError:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 Initialized:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 Copy:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 InvalidateBlock:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 EraseImmediate:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 WriteAsync:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 WriteSync:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 Read:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 ProgramFailed:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 ReadSync:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 Erase:1U; + /*SAFETYMCUSW 42 S MR:3.5 "Reason - Bit field declaration is necessary here."*/ + /*SAFETYMCUSW 73 S MR:6.4 "Reason - Bit field is declared as unsigned."*/ + uint16 Reserved: 5U; + }Fee_StatusWordType_ST; + #endif +}TI_Fee_StatusWordType_UN; + +typedef enum +{ + UNINIT, + IDLE, + /*SAFETYMCUSW 91 S MR:5.2,5.6,5.7 "Reason - BUSY in F021 is a member of structure."*/ + BUSY, + BUSY_INTERNAL +}TI_FeeModuleStatusType; + +typedef enum +{ + JOB_OK, + JOB_FAILED, + JOB_PENDING, + JOB_CANCELLED, + BLOCK_INCONSISTENT, + BLOCK_INVALID +}TI_FeeJobResultType; + +#endif /* TI_FEE_TYPES_H */ + +/********************************************************************************************************************** + * END OF FILE: ti_fee_types.h + *********************************************************************************************************************/ Index: firmware/include/usb-ids.h =================================================================== diff -u --- firmware/include/usb-ids.h (revision 0) +++ firmware/include/usb-ids.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,71 @@ +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/** + * @file usb-ids.h + * + * @brief Definitions of VIDs and PIDs used by Stellaris USB examples. + * + */ + +#ifndef __USBIDS_H__ +#define __USBIDS_H__ + +/** *************************************************************************** + * + * TI Vendor ID. + * + *****************************************************************************/ +#define USB_VID_TI 0x0000 + +/** *************************************************************************** + * + * Product IDs. + * + *****************************************************************************/ +#define USB_PID_MOUSE 0x0000 +#define USB_PID_KEYBOARD 0x0001 +#define USB_PID_SERIAL 0x0000 +#define USB_PID_BULK 0x0003 +#define USB_PID_SCOPE 0x0004 +#define USB_PID_MSC 0x0005 +#define USB_PID_AUDIO 0x0006 +#define USB_PID_COMP_SERIAL 0x0007 +#define USB_PID_COMP_AUDIO_HID 0x0008 +#define USB_PID_COMP_HID_SER 0x0009 +#define USB_PID_DFU 0x00FF + + +#endif /* __USBIDS_H__ */ Index: firmware/include/usb.h =================================================================== diff -u --- firmware/include/usb.h (revision 0) +++ firmware/include/usb.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,694 @@ +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +#ifndef USB_H_ +#define USB_H_ + +/****************************************************************************** + * + * These macros allow conversion between 0-based endpoint indices and the + * USB_EP_x values required when calling various USB APIs. + * + *****************************************************************************/ +#define INDEX_TO_USB_EP(x) ((x) << 4u) +#define USB_EP_TO_INDEX(x) ((x) >> 4u) + +/****************************************************************************** + * + * The following are values that can be passed to USBFIFOConfigSet() as the + * uFIFOSize parameter. + * + *****************************************************************************/ +#define USB_FIFO_SZ_8 0x00U /* 8 byte FIFO */ +#define USB_FIFO_SZ_16 0x01U /* 16 byte FIFO */ +#define USB_FIFO_SZ_32 0x02U /* 32 byte FIFO */ +#define USB_FIFO_SZ_64 0x03U /* 64 byte FIFO */ +#define USB_FIFO_SZ_128 0x04U /* 128 byte FIFO */ +#define USB_FIFO_SZ_256 0x05U /* 256 byte FIFO */ +#define USB_FIFO_SZ_512 0x06U /* 512 byte FIFO */ +#define USB_FIFO_SZ_1024 0x07U /* 1024 byte FIFO */ + + +/****************************************************************************** + * + * This macro allow conversion from a FIFO size label as defined above to + * a number of bytes + * + *****************************************************************************/ +#define USB_FIFO_SIZE_DB_FLAG 0x10U +#define USB_FIFO_SZ_TO_BYTES(x) (uint16_t)((uint8_t)8U << (((uint8_t)(x) & (uint8_t)(~(uint8_t)USB_FIFO_SIZE_DB_FLAG)) + \ + (uint8_t)(((uint8_t)(x) & (uint8_t)USB_FIFO_SIZE_DB_FLAG) >> 4U))) + + +/****************************************************************************** + * + * The maximum number of independent interfaces that any single device + * implementation can support. Independent interfaces means interface + * descriptors with different bInterfaceNumber values - several interface + * descriptors offering different alternative settings but the same interface + * number count as a single interface. + * + *****************************************************************************/ +#define USB_MAX_INTERFACES_PER_DEVICE 8u + + +/****************************************************************************** + * + * Following macro directives can be used for the configuring the USB device. + * Note that these directives map directly to the hardware bit definitions and + * cannot be modified to any other value. + * + *****************************************************************************/ +#define USBD_PWR_BUS_PWR (0x0000u) /* Device is bus powered */ +#define USBD_PWR_SELF_PWR (0x0004u) /* Device is self powered */ +#define USBD_DATA_ENDIAN_LITTLE (0x0000u) /* Little Endian Data (RM48x) */ +#define USBD_DATA_ENDIAN_BIG (0x0080u) /* Bit Endian Data */ +#define USBD_DMA_ENDIAN_LITTLE (0x0000u) /* DMA is Little Endian */ +#define USBD_DMA_ENDIAN_BIG (0x0040u) /* DMA is Big Endian */ + +/****************************************************************************** + * + * Following macro directives can be used for the configuring the Endpoints + * Note that these directives map directly to the hardware bit definitions and + * cannot be modified to any other value. + * + *****************************************************************************/ + +#define USBD_EP_DIR_IN (0x0010u) /* IN Endpoint */ +#define USBD_EP_DIR_OUT (0x0000u) /* OUT Endpoint */ +#define USB_EP_DEV_IN (USBD_EP_DIR_IN) /* IN Endpoint */ +#define USB_EP_DEV_OUT (USBD_EP_DIR_OUT)/* OUT Endpoint */ +#define USB_TRANS_IN (USBD_EP_DIR_IN) /* IN Endpoint */ +#define USB_TRANS_OUT (USBD_EP_DIR_OUT)/* OUT Endpoint */ +#define USB_EP_DIR_IN (USBD_EP_DIR_IN) +#define USB_EP_DIR_OUT (USBD_EP_DIR_OUT) +#define USB_TRANS_IN_LAST 0u /* Used to indicate the last transaction + (NOT USED in this port of USB) */ + +#define USBD_TXRX_EP_VALID_VALID (0x8000u) /* EP is valid & configured */ +#define USBD_TXRX_EP_VALID_NOTVALID (0x0000u) /* EP is not valid & not configured */ +#define USBD_TXRX_EP_ISO_ISO (0x0800u) /* EP is of ISO type */ +#define USBD_TXRX_EP_ISO_NONISO (0x0000u) /* EP is either Bulk/Interrup/Control */ +#define USBD_TXRX_EP_DB_ENABLED (0x4000u) /* EP has double buffering enabled */ + /* For IN EPs DB should be enabled only in DMA mode */ +#define USBD_TXRX_EP_DB_DISABLED (0x0000u) /* EP has double buffering disabled */ + +/****************************************************************************** + * + * Following macro directives are to be used for enabling/disabling interrupts + * Note that these directives map directly to the hardware bit definitions and + * cannot be modified to any other value. + * + *****************************************************************************/ +#define USBD_INT_EN_SOF_IE (0x0080u) /* Start-of-Frame Interrupt */ +#define USBD_INT_EN_EPN_RX_IE (0x0020u) /* Non-EP0 RX Interrupt */ +#define USBD_INT_EN_EPN_TX_IE (0x0010u) /* Non-EP0 TX Interrupt */ +#define USBD_INT_EN_DS_CHG_IE (0x0008u) /* Device State change interrupt */ +#define USBD_INT_EN_EP0_IE (0x0001u) /* EP0 Interrupt */ +#define USBD_INT_EN_ALL (USBD_IRQ_EN_SOF_IE | \ + USBD_IRQ_EN_EPN_RX_IE | \ + USBD_IRQ_EN_EPN_TX_IE | \ + USBD_IRQ_EN_DS_CHG_IE | \ + USBD_IRQ_EN_EP0_IE) + + +/****************************************************************************** + * + * Following macro directives are to be used for decoding the interrupt source + * Note that these directives map directly to the hardware bit definitions and + * cannot be modified to any other value. + * + *****************************************************************************/ +#define USBD_INT_SRC_TXN_DONE (0x0400u) /* non-EP0 TX done interrupt */ +#define USBD_INT_SRC_RXN_CNT (0x0200u) /* non-EP0 RX Count */ +#define USBD_INT_SRC_RXN_EOT (0x0100u) /* non-EP0 RX end of transfer */ +#define USBD_INT_SRC_SOF (0x0080u) /* Start-of-frame interrupt */ +#define USBD_INT_SRC_EPN_RX (0x0020u) /* non-EP0 RX interrupt */ +#define USBD_INT_SRC_EPN_TX (0x0010u) /* non-EP0 TX interrupt */ +#define USBD_INT_SRC_DS_CHG (0x0008u) /* Device State change interrupt */ +#define USBD_INT_SRC_SETUP (0x0004u) /* Setup interrupt */ +#define USBD_INT_SRC_EP0_RX (0x0002u) /* EP0 RX Interrupt */ +#define USBD_INT_SRC_EP0_TX (0x0001u) /* EP0 TX Interrupt */ + + +/****************************************************************************** + * + * These values are used to indicate which endpoint to access. + * + *****************************************************************************/ +#define USB_EP_0 0x00000000u /* Endpoint 0 */ +#define USB_EP_1 0x00000010u /* Endpoint 1 */ +#define USB_EP_2 0x00000020u /* Endpoint 2 */ +#define USB_EP_3 0x00000030u /* Endpoint 3 */ +#define USB_EP_4 0x00000040u /* Endpoint 4 */ +#define USB_EP_5 0x00000050u /* Endpoint 5 */ +#define USB_EP_6 0x00000060u /* Endpoint 6 */ +#define USB_EP_7 0x00000070u /* Endpoint 7 */ +#define USB_EP_8 0x00000080u /* Endpoint 8 */ +#define USB_EP_9 0x00000090u /* Endpoint 9 */ +#define USB_EP_10 0x000000A0u /* Endpoint 10 */ +#define USB_EP_11 0x000000B0u /* Endpoint 11 */ +#define USB_EP_12 0x000000C0u /* Endpoint 12 */ +#define USB_EP_13 0x000000D0u /* Endpoint 13 */ +#define USB_EP_14 0x000000E0u /* Endpoint 14 */ +#define USB_EP_15 0x000000F0u /* Endpoint 15 */ +#define NUM_USB_EP 16u /* Number of supported endpoints */ + + +/****************************************************************************** + * + * The following are values that can be passed to USBHostEndpointConfig() and + * USBDevEndpointConfigSet() as the ulFlags parameter. + * + *****************************************************************************/ +#define USB_EP_AUTO_SET 0x00000001u /* Auto set feature enabled */ +#define USB_EP_AUTO_REQUEST 0x00000002u /* Auto request feature enabled */ +#define USB_EP_AUTO_CLEAR 0x00000004u /* Auto clear feature enabled */ +#define USB_EP_DMA_MODE_0 0x00000008u /* Enable DMA access using mode 0 */ +#define USB_EP_DMA_MODE_1 0x00000010u /* Enable DMA access using mode 1 */ +#define USB_EP_MODE_ISOC 0x00000000u /* Isochronous endpoint */ +#define USB_EP_MODE_BULK 0x00000100u /* Bulk endpoint */ +#define USB_EP_MODE_INT 0x00000200u /* Interrupt endpoint */ +#define USB_EP_MODE_CTRL 0x00000300u /* Control endpoint */ +#define USB_EP_MODE_MASK 0x00000300u /* Mode Mask */ +#define USB_EP_SPEED_LOW 0x00000000u /* Low Speed */ +#define USB_EP_SPEED_FULL 0x00001000u /* Full Speed */ + + +/****************************************************************************** + * + * The following are values that are returned from USBEndpointStatus(). The + * USB_HOST_* values are used when the USB controller is in host mode and the + * USB_DEV_* values are used when the USB controller is in device mode. + * + *****************************************************************************/ +#define USB_DEV_EP0_OUT_PKTRDY 0x00000001u /* Receive data packet ready */ +#define USB_DEV_RX_PKT_RDY 0x00010000u /* Data packet ready */ +#define USB_DEV_TX_TXPKTRDY 0x00000001u +#define USB_DEV_TX_FIFO_NE 0x00000002u + + +/****************************************************************************** + * + * This value specifies the maximum size of transfers on endpoint 0 as 64 + * bytes. This value is fixed in hardware as the FIFO size for endpoint 0. + * + *****************************************************************************/ +#define MAX_PACKET_SIZE_EP0 64u + + +/****************************************************************************** + * + * Macros for hardware access, both direct and via the bit-band region. + * + *****************************************************************************/ +#define HWREG(x) (*((volatile uint32_t *)(x))) + + + + +/****************************************************************************** + * + * Initialize the USB Device + * + * \param ulBase specifies the USB module base address. + * \param usFlags specifies the bus/self powered and endianness for data & dma. + * Should be a combination of the following flags + * USBD_PWR_BUS_PWR or USBD_PWR_SELF_PWR + * USBD_DATA_ENDIAN_LITTLE or USBD_DATA_ENDIAN_BIG + * USBD_DMA_ENDIAN_LITTLE or USBD_DMA_ENDIAN_BIG + * \param usFifoPtr specifies the start of the EP0 FIFO. + * + * This function will initialize the USB Device controller specified by the + * \e ulBase parameter. + * + * \return None + * + * Note This function does not intiate a device connect (pull ups are + * not enabled). Also the EP0 is intialized with FIFO size of 64Bytes. + * + * + *****************************************************************************/ +void USBDevInit(uint32 ulBase, uint16 usFlags, uint16 usFifoPtr); + + +/****************************************************************************** + * + * Initialize the USB Device's EP0 + * + * \param ulBase specifies the USB module base address. + * \param usSize FIFO size. Supported values are USB_FIFO_SZ_8/USB_FIFO_SZ_16/ + * USB_FIFO_SZ_32/USB_FIFO_SZ_64. + * \param usFifoPtr specifies the start of the EP0 FIFO. + * + * This function will initialize the USB Device controller specified by the + * \e ulBase parameter. The \e uFlags parameter is not used by this + * implementation. + * + * \return None + * + * + *****************************************************************************/ +void USBDevEp0Config(uint32 ulBase, uint16 usSize, uint16 usFifoPtr); + + +/****************************************************************************** + * + * Disable control interrupts on a given USB device controller. + * + * \param ulBase specifies the USB module base address. + * \param usFlags specifies which control interrupts to disable. + * + * This function will disable the interrupts for the USB device controller + * specified by the \e ulBase parameter. The \e usFlags parameter specifies + * which control interrupts to disable. The flags passed in the \e usFlags + * parameters should be the definitions that start with \b USBD_INT_EN_* + * + * \return None. + * + *****************************************************************************/ +void USBIntDisable(uint32 ulBase, uint16 usFlags); + + +/****************************************************************************** + * + * Enable control interrupts on a given USB device controller. + * + * \param ulBase specifies the USB module base address. + * \param usFlags specifies which control interrupts to enable. + * + * This function will enable the control interrupts for the USB device controller + * specified by the \e ulBase parameter. The \e usFlags parameter specifies + * which control interrupts to enable. The flags passed in the \e usFlags + * parameters should be the definitions that start with \b USBD_INT_EN_* and + * not any other \b USB_INT flags. + * + * \return None. + * + *****************************************************************************/ +void USBIntEnable(uint32 ulBase, uint16 usFlags); + + +/****************************************************************************** + * + * Returns the control interrupt status on a given USB device controller. + * + * \param ulBase specifies the USB module base address. + * + * This function will read interrupt status for a USB device controller. + * The bit values returned should be compared against the \b USBD_INT_SRC_* + * values. + * + * \return Returns the status of the control interrupts for a USB device controller. + * + *****************************************************************************/ +uint16 USBIntStatus(uint32 ulBase); + + +/****************************************************************************** + * + * Stalls the specified endpoint in device mode. + * + * \param ulBase specifies the USB module base address. + * \param usEndpoint specifies the endpoint to stall. + * \param usFlags specifies whether to stall the IN or OUT endpoint. + * + * This function will cause to endpoint number passed in to go into a stall + * condition. If the \e usFlags parameter is \b USB_EP_DEV_IN then the stall + * will be issued on the IN portion of this endpoint. If the \e usFlags + * parameter is \b USB_EP_DEV_OUT then the stall will be issued on the OUT + * portion of this endpoint. + * + * \note This function should only be called in device mode. + * + * \return None. + * + *****************************************************************************/ +void USBDevEndpointStall(uint32 ulBase, uint16 usEndpoint, uint16 usFlags); + + +/****************************************************************************** + * + * Clears the stall condition on the specified endpoint in device mode. + * + * \param ulBase specifies the USB module base address. + * \param usEndpoint specifies which endpoint to remove the stall condition. + * \param usFlags specifies whether to remove the stall condition from the IN + * or the OUT portion of this endpoint. + * + * This function will cause the endpoint number passed in to exit the stall + * condition. If the \e usFlags parameter is \b USB_EP_DEV_IN then the stall + * will be cleared on the IN portion of this endpoint. If the \e usFlags + * parameter is \b USB_EP_DEV_OUT then the stall will be cleared on the OUT + * portion of this endpoint. + * + * \note This function should only be called in device mode. + * + * \return None. + * + *****************************************************************************/ +void USBDevEndpointStallClear(uint32 ulBase, uint16 usEndpoint, uint16 usFlags); + + +/****************************************************************************** + * + * Connects the USB device controller to the bus in device mode. + * + * \param ulBase specifies the USB module base address. + * + * This function will cause the soft connect feature of the USB device controller to + * be enabled. Call USBDisconnect() to remove the USB device from the bus. + * + * + * \return None. + * + *****************************************************************************/ +void USBDevConnect(uint32 ulBase); + + +/****************************************************************************** + * + * Removes the USB device controller from the bus in device mode. + * + * \param ulBase specifies the USB module base address. + * + * This function will cause the soft disconnect feature of the USB device controller to + * remove the device from the USB bus. A call to USBDevConnect() is needed to + * reconnect to the bus. + * + * + * \return None. + * + *****************************************************************************/ +void USBDevDisconnect(uint32 ulBase); + + +/****************************************************************************** + * + * Sets the address in device mode. + * + * \param ulBase specifies the USB module base address. + * \param ulAddress is the address to use for a device. + * + * This function will set the device address on the USB bus. This address was + * likely received via a SET ADDRESS command from the host controller. + * + * \note This function is not available on this controller. This is maintained + * for compatibility. + * + * \return None. + * + *****************************************************************************/ +void USBDevAddrSet(uint32 ulBase, uint32 ulAddress); + + +/****************************************************************************** + * + * Determine the number of bytes of data available in a given endpoint's FIFO. + * + * \param ulBase specifies the USB module base address. + * \param usEndpoint is the endpoint to access. + * + * This function will return the number of bytes of data currently available + * in the FIFO for the given receive (OUT) endpoint. It may be used prior to + * calling USBEndpointDataGet() to determine the size of buffer required to + * hold the newly-received packet. + * + * \return This call will return the number of bytes available in a given + * endpoint FIFO. + * + *****************************************************************************/ +uint16 USBEndpointDataAvail(uint32 ulBase, uint16 usEndpoint); + + +/****************************************************************************** + * + * Retrieves data from the given endpoint's FIFO. + * + * \param ulBase specifies the USB module base address. + * \param usEndpoint is the endpoint to access. + * \param pucData is a pointer to the data area used to return the data from + * the FIFO. + * \param pulSize is initially the size of the buffer passed into this call + * via the \e pucData parameter. It will be set to the amount of data + * returned in the buffer. + * + * This function will return the data from the FIFO for the given endpoint. + * The \e pulSize parameter should indicate the size of the buffer passed in + * the \e pulData parameter. The data in the \e pulSize parameter will be + * changed to match the amount of data returned in the \e pucData parameter. + * If a zero byte packet was received this call will not return a error but + * will instead just return a zero in the \e pulSize parameter. The only + * error case occurs when there is no data packet available. + * + * \return This call will return 0, or -1 if no packet was received. + * + *****************************************************************************/ +sint32 USBEndpointDataGet( + uint32 ulBase, + uint16 usEndpoint, + uint8 * pucData, + uint32 * pulSize); + + +/****************************************************************************** + * + * Retrieves the setup packet from EP0 Setup FIFO + * + * \param ulBase specifies the USB module base address. + * \param sPkt Pointer to the data area for storing the setup packet. + * Atleast 8 bytes should be available. + * \param pusPktSize On return this contains the size of the setup packet (8Bytes) + * + * This function will retrieves the 8Byte long setup packet from the EP0 setup + * FIFO. + * + * \return None. + * + *****************************************************************************/ +void USBDevGetSetupPacket (uint32 ulBase, uint8 * sPkt, uint16 * pusPktSize); + + +/****************************************************************************** + * + * Acknowledge that data was read from the given endpoint's FIFO in device + * mode. + * + * \param ulBase specifies the USB module base address. + * \param usEndpoint is the endpoint to access. + * \param bIsLastPacket This parameter is not used. + * + * This function acknowledges that the data was read from the endpoint's FIFO. + * The \e bIsLastPacket parameter is set to a \b true value if this is the + * last in a series of data packets on endpoint zero. The \e bIsLastPacket + * parameter is not used for endpoints other than endpoint zero. This call + * can be used if processing is required between reading the data and + * acknowledging that the data has been read. + * + * + * \return None. + * + *****************************************************************************/ +void USBDevEndpointDataAck(uint32 ulBase, uint16 usEndpoint, tBoolean bIsLastPacket); + + +/****************************************************************************** + * + * Puts data into the given endpoint's FIFO. + * + * \param ulBase specifies the USB module base address. + * \param usEndpoint is the endpoint to access. + * \param pucData is a pointer to the data area used as the source for the + * data to put into the FIFO. + * \param ulSize is the amount of data to put into the FIFO. + * + * This function will put the data from the \e pucData parameter into the FIFO + * for this endpoint. If a packet is already pending for transmission then + * this call will not put any of the data into the FIFO and will return -1. + * Care should be taken to not write more data than can fit into the FIFO + * allocated by the call to USBFIFOConfig(). + * + * \return This call will return 0 on success, or -1 to indicate that the FIFO + * is in use and cannot be written. + * + *****************************************************************************/ +uint32 USBEndpointDataPut( + uint32 ulBase, + uint16 usEndpoint, + uint8 * pucData, + uint32 ulSize); + +/****************************************************************************** + * + * Starts the transfer of data from an endpoint's FIFO. + * + * \param ulBase specifies the USB module base address. + * \param usEndpoint is the endpoint to access. + * \param ulTransType Not used. + * + * This function will start the transfer of data from the FIFO for a given + * endpoint. + * + * \return This call will return 0 on success, or -1 if a transmission is + * already in progress. + * + *****************************************************************************/ +uint32 USBEndpointDataSend(uint32 ulBase, uint16 usEndpoint, uint32 ulTransType); + + +/****************************************************************************** + * + * Resets the USB Device Controller + * + * \param void + * + * \return None. + * + * \note Since the USB Device reset is handled by the host, this is a dummy + * function & maintained for compatibility purpose. + * + *****************************************************************************/ +void USBReset(void); + + +/****************************************************************************** + * + * Sets the FIFO configuration for an endpoint. + * + * \param ulBase specifies the USB module base address. + * \param usEndpoint is the endpoint to access. + * \param uFIFOAddress is the starting address for the FIFO. + * \param uFIFOSize is the size of the FIFO in bytes. + * \param uFlags specifies what information to set in the FIFO configuration. + * + * This function will set the starting FIFO RAM address and size of the FIFO + * for a given endpoint. Endpoint zero does not have a dynamically + * configurable FIFO so this function should not be called for endpoint zero. + * The \e uFIFOSize parameter should be one of the values in the + * \b USB_FIFO_SZ_ values. If the endpoint is going to use double buffering + * it should use the values with the \b _DB at the end of the value. For + * example, use \b USB_FIFO_SZ_16_DB to configure an endpoint to have a 16 + * byte double buffered FIFO. If a double buffered FIFO is used, then the + * actual size of the FIFO will be twice the size indicated by the + * \e uFIFOSize parameter. This means that the \b USB_FIFO_SZ_16_DB value + * will use 32 bytes of the USB controller's FIFO memory. + * + * The \e uFIFOAddress value should be a multiple of 8 bytes and directly + * indicates the starting address in the USB controller's FIFO RAM. For + * example, a value of 64 indicates that the FIFO should start 64 bytes into + * the USB controller's FIFO memory. The \e uFlags value specifies whether + * the endpoint's OUT or IN FIFO should be configured. If in host mode, use + * \b USB_EP_HOST_OUT or \b USB_EP_HOST_IN, and if in device mode use + * \b USB_EP_DEV_OUT or \b USB_EP_DEV_IN. + * + * \return None. + * + *****************************************************************************/ +void USBFIFOConfigSet(uint32 ulBase, uint32 usEndpoint, uint32 uFIFOAddress, uint32 uFIFOSize, uint16 uFlags); + + +/****************************************************************************** + * + * Gets the current configuration for an endpoint. + * + * \param ulBase specifies the USB module base address. + * \param usEndpoint is the endpoint to access. + * \param pulMaxPacketSize is a pointer which will be written with the + * maximum packet size for this endpoint. + * \param puFlags is a pointer which will be written with the current + * endpoint settings. On entry to the function, this pointer must contain + * either \b USB_EP_DEV_IN or \b USB_EP_DEV_OUT to indicate whether the IN or + * OUT endpoint is to be queried. + * + * This function will return the basic configuration for an endpoint in device + * mode. The values returned in \e *pulMaxPacketSize and \e *puFlags are + * equivalent to the \e ulMaxPacketSize and \e uFlags previously passed to + * USBDevEndpointConfigSet() for this endpoint. + * + * \note This function should only be called in device mode. + * + * \return None. + * + *****************************************************************************/ +void USBDevEndpointConfigGet( + uint32 ulBase, + uint16 usEndpoint, + uint32 * pulMaxPacketSize, + uint32 * puFlags); + + +/****************************************************************************** + * + * Sets the configuration for an endpoint. + * + * \param ulBase specifies the USB module base address. + * \param usEndpoint is the endpoint to access. + * \param ulMaxPacketSize is the maximum packet size for this endpoint. + * \param uFlags are used to configure other endpoint settings. + * + * This function will set the basic configuration for an endpoint in device + * mode. Endpoint zero does not have a dynamic configuration, so this + * function should not be called for endpoint zero. The \e uFlags parameter + * determines some of the configuration while the other parameters provide the + * rest. + * + * The \b USB_EP_MODE_ flags define what the type is for the given endpoint. + * + * - \b USB_EP_MODE_CTRL is a control endpoint. + * - \b USB_EP_MODE_ISOC is an isochronous endpoint. + * - \b USB_EP_MODE_BULK is a bulk endpoint. + * - \b USB_EP_MODE_INT is an interrupt endpoint. + * + * + * \note This function should only be called in device mode. + * + * \return None. + * + *****************************************************************************/ +void USBDevEndpointConfigSet(uint32 ulBase, uint16 usEndpoint, uint32 ulMaxPacketSize, uint32 uFlags); + +void USBDevSetDevCfg(uint32 ulBase); +void USBDevClearDevCfg(uint32 ulBase); +uint16 USBDevGetEPnStat(uint32 ulBase); +void USBDevPullEnableDisable(uint32 ulBase, uint32 ulSet); +void USBIntStatusClear (uint16 uFlag); +uint16 USBDevGetDevStat(uint32 ulBase); +void USBDevCfgUnlock(uint32 ulBase); +void USBDevCfgLock(uint32 ulBase); + +#endif /*USB_H_*/ + + + + Index: firmware/include/usb_serial_structs.h =================================================================== diff -u --- firmware/include/usb_serial_structs.h (revision 0) +++ firmware/include/usb_serial_structs.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,74 @@ +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/** + * @file usb_serial_structs.h + * + * @brief Data structures defining this USB CDC device. + * + */ + +#ifndef _USB_SERIAL_STRUCTS_H_ +#define _USB_SERIAL_STRUCTS_H_ + +/****************************************************************************** + * + * The size of the transmit and receive buffers used for the redirected UART. + * This number should be a power of 2 for best performance. 256 is chosen + * pretty much at random though the buffer should be at least twice the size of + * a maxmum-sized USB packet. + * + *****************************************************************************/ +#define UART_BUFFER_SIZE 0x0001 + +/** *************************************************************************** + * + * CDC device callback function prototypes. + * + *****************************************************************************/ +uint32 RxHandler(void *pvCBData, uint32 ulEvent, + uint32 ulMsgValue, void *pvMsgData); +uint32 TxHandler(void *pvCBData, uint32 ulEvent, + uint32 ulMsgValue, void *pvMsgData); +uint32 ControlHandler(void *pvCBData, uint32 ulEvent, + uint32 ulMsgValue, void *pvMsgData); + +extern const tUSBBuffer g_sTxBuffer; +extern const tUSBBuffer g_sRxBuffer; +extern const tUSBDCDCDevice g_sCDCDevice; +extern uint8 g_pucUSBTxBuffer[]; +extern uint8 g_pucUSBRxBuffer[]; + +#endif Index: firmware/include/usbcdc.h =================================================================== diff -u --- firmware/include/usbcdc.h (revision 0) +++ firmware/include/usbcdc.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,742 @@ +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/****************************************************************************** + * + * Note: This header contains definitions related to the USB Communication + * Device Class specification. The header is complete for ACM model + * devices but request and notification definitions specific to other + * modem types, ISDN, ATM and Ethernet are currently incomplete or + * omitted. + * + *****************************************************************************/ + +#ifndef __USBCDC_H__ +#define __USBCDC_H__ + +/****************************************************************************** + * + * If building with a C++ compiler, make all of the definitions in this header + * have a C binding. + * + *****************************************************************************/ +#ifdef __cplusplus +extern "C" +{ +#endif + +/****************************************************************************** + * + * \ingroup cdc_device_class_api + * @{ + * + *****************************************************************************/ + +/****************************************************************************** + * + * Generic macros to read a byte, word or long from a character pointer. + * + *****************************************************************************/ +/* #define BYTE(pucData) (*(uint8 *)(pucData)) +#define SHORT(pucData) (*(uint16 *)(pucData)) +#define LONG(pucData) (*(uint32 *)(pucData)) */ + +/****************************************************************************** + * + * USB CDC subclass codes. Used in interface descriptor, bInterfaceClass + * + *****************************************************************************/ +#define USB_CDC_SUBCLASS_DIRECT_LINE_MODEL 0x01 +#define USB_CDC_SUBCLASS_ABSTRACT_MODEL 0x02 +#define USB_CDC_SUBCLASS_TELEPHONE_MODEL 0x03 +#define USB_CDC_SUBCLASS_MULTI_CHANNEL_MODEL 0x04 +#define USB_CDC_SUBCLASS_CAPI_MODEL 0x05 +#define USB_CDC_SUBCLASS_ETHERNET_MODEL 0x06 +#define USB_CDC_SUBCLASS_ATM_MODEL 0x07 + +/****************************************************************************** + * + * USB CDC control interface protocols. Used in control interface descriptor, + * bInterfaceProtocol + * + *****************************************************************************/ +#define USB_CDC_PROTOCOL_NONE 0x00 +#define USB_CDC_PROTOCOL_V25TER 0x01 +#define USB_CDC_PROTOCOL_VENDOR 0xFF + +/****************************************************************************** + * + * USB CDC data interface protocols. Used in data interface descriptor, + * bInterfaceProtocol + * + *****************************************************************************/ +/* USB_CDC_PROTOCOL_NONE 0x00 */ +#define USB_CDC_PROTOCOL_I420 0x30 +#define USB_CDC_PROTOCOL_TRANSPARENT 0x32 +#define USB_CDC_PROTOCOL_Q921M 0x50 +#define USB_CDC_PROTOCOL_Q921 0x51 +#define USB_CDC_PROTOCOL_Q921TM 0x52 +#define USB_CDC_PROTOCOL_V42BIS 0x90 +#define USB_CDC_PROTOCOL_Q921EURO 0x91 +#define USB_CDC_PROTOCOL_V120 0x92 +#define USB_CDC_PROTOCOL_CAPI20 0x93 +#define USB_CDC_PROTOCOL_HOST_DRIVER 0xFD +#define USB_CDC_PROTOCOL_CDC_SPEC 0xFE +/* USB_CDC_PROTOCOL_VENDOR 0xFF */ + +/****************************************************************************** + * + * Functional descriptor definitions + * + *****************************************************************************/ + +/****************************************************************************** + * + * Functional descriptor types + * + *****************************************************************************/ +#define USB_CDC_CS_INTERFACE 0x24 +#define USB_CDC_CS_ENDPOINT 0x25 + +/****************************************************************************** + * + * Functional descriptor subtypes + * + *****************************************************************************/ +#define USB_CDC_FD_SUBTYPE_HEADER 0x00 +#define USB_CDC_FD_SUBTYPE_CALL_MGMT 0x01 +#define USB_CDC_FD_SUBTYPE_ABSTRACT_CTL_MGMT 0x02 +#define USB_CDC_FD_SUBTYPE_DIRECT_LINE_MGMT 0x03 +#define USB_CDC_FD_SUBTYPE_TELEPHONE_RINGER 0x04 +#define USB_CDC_FD_SUBTYPE_LINE_STATE_CAPS 0x05 +#define USB_CDC_FD_SUBTYPE_UNION 0x06 +#define USB_CDC_FD_SUBTYPE_COUNTRY 0x07 +#define USB_CDC_FD_SUBTYPE_TELEPHONE_MODES 0x08 +#define USB_CDC_FD_SUBTYPE_USB_TERMINAL 0x09 +#define USB_CDC_FD_SUBTYPE_NETWORK_TERMINAL 0x0A +#define USB_CDC_FD_SUBTYPE_PROTOCOL_UNIT 0x0B +#define USB_CDC_FD_SUBTYPE_EXTENSION_UNIT 0x0C +#define USB_CDC_FD_SUBTYPE_MULTI_CHANNEL_MGMT 0x0D +#define USB_CDC_FD_SUBTYPE_CAPI_MGMT 0x0E +#define USB_CDC_FD_SUBTYPE_ETHERNET 0x0F +#define USB_CDC_FD_SUBTYPE_ATM 0x10 + +/****************************************************************************** + * + * USB_CDC_FD_SUBTYPE_CALL_MGMT, Header functional descriptor, bmCapabilities + * + *****************************************************************************/ +#define USB_CDC_CALL_MGMT_VIA_DATA 0x02 +#define USB_CDC_CALL_MGMT_HANDLED 0x01 + +/****************************************************************************** + * + * USB_CDC_FD_SUBTYPE_ABSTRACT_CTL_MGMT, Abstract Control Management functional + * descriptor, bmCapabilities + * + *****************************************************************************/ +#define USB_CDC_ACM_SUPPORTS_NETWORK_CONNECTION 0x08 +#define USB_CDC_ACM_SUPPORTS_SEND_BREAK 0x04 +#define USB_CDC_ACM_SUPPORTS_LINE_PARAMS 0x02 +#define USB_CDC_ACM_SUPPORTS_COMM_FEATURE 0x01 + +/****************************************************************************** + * + * USB_CDC_FD_SUBTYPE_DIRECT_LINE_MGMT, Direct Line Management functional + * descriptor, bmCapabilities + * + *****************************************************************************/ +#define USB_CDC_DLM_NEEDS_EXTRA_PULSE_SETUP 0x04 +#define USB_CDC_DLM_SUPPORTS_AUX 0x02 +#define USB_CDC_DLM_SUPPORTS_PULSE 0x01 + +/****************************************************************************** + * + * USB_CDC_FD_SUBTYPE_TELEPHONE_MODES, Telephone Operational Modes functional + * descriptor, bmCapabilities + * + *****************************************************************************/ +#define USB_CDC_TELEPHONE_SUPPORTS_COMPUTER 0x04 +#define USB_CDC_TELEPHONE_SUPPORTS_STANDALONE 0x02 +#define USB_CDC_TELEPHONE_SUPPORTS_SIMPLE 0x01 + +/****************************************************************************** + * + * USB_CDC_FD_SUBTYPE_LINE_STATE_CAPS, Telephone Call and Line State Reporting + * Capabilities descriptor + * + *****************************************************************************/ +#define USB_CDC_LINE_STATE_CHANGES_NOTIFIED 0x20 +#define USB_CDC_LINE_STATE_REPORTS_DTMF 0x10 +#define USB_CDC_LINE_STATE_REPORTS_DIST_RING 0x08 +#define USB_CDC_LINE_STATE_REPORTS_CALLERID 0x04 +#define USB_CDC_LINE_STATE_REPORTS_BUSY 0x02 +#define USB_CDC_LINE_STATE_REPORTS_INT_DIALTONE 0x01 + +/****************************************************************************** + * + * USB_CDC_FD_SUBTYPE_USB_TERMINAL, USB Terminal functional descriptor, + * bmOptions + * + *****************************************************************************/ +#define USB_CDC_TERMINAL_NO_WRAPPER_USED 0x00 +#define USB_CDC_TERMINAL_WRAPPER_USED 0x01 + +/****************************************************************************** + * + * USB_CDC_FD_SUBTYPE_MULTI_CHANNEL_MGMT, Multi-Channel Management functional + * descriptor, bmCapabilities + * + *****************************************************************************/ +#define USB_CDC_MCM_SUPPORTS_SET_UNIT_PARAM 0x04 +#define USB_CDC_MCM_SUPPORTS_CLEAR_UNIT_PARAM 0x02 +#define USB_CDC_MCM_UNIT_PARAMS_NON_VOLATILE 0x01 + +/****************************************************************************** + * + * USB_CDC_FD_SUBTYPE_CAPI_MGMT, CAPI Control Management functional descriptor, + * bmCapabilities + * + *****************************************************************************/ +#define USB_CDC_CAPI_INTELLIGENT 0x01 +#define USB_CDC_CAPI_SIMPLE 0x00 + +/****************************************************************************** + * + * USB_CDC_FD_SUBTYPE_ETHERNET, Ethernet Networking functional descriptor, + * bmEthernetStatistics + * + *****************************************************************************/ +#define USB_CDC_ENET_XMIT_OK 0x01000000U +#define USB_CDC_ENET_RCV_OK 0x02000000U +#define USB_CDC_ENET_XMIT_ERROR 0x04000000U +#define USB_CDC_ENET_RCV_ERROR 0x08000000U +#define USB_CDC_ENET_RCV_NO_BUFFER 0x10000000U +#define USB_CDC_ENET_DIRECTED_BYTES_XMIT 0x20000000U +#define USB_CDC_ENET_DIRECTED_FRAMES_XMIT 0x40000000U +#define USB_CDC_ENET_MULTICAST_BYTES_XMIT 0x80000000U +#define USB_CDC_ENET_MULTICAST_FRAMES_XMIT 0x00010000U +#define USB_CDC_ENET_BROADCAST_BYTES_XMIT 0x00020000U +#define USB_CDC_ENET_BROADCAST_FRAMES_XMIT 0x00040000U +#define USB_CDC_ENET_DIRECTED_BYTES_RCV 0x00080000U +#define USB_CDC_ENET_DIRECTED_FRAMES_RCV 0x00100000U +#define USB_CDC_ENET_MULTICAST_BYTES_RCV 0x00200000U +#define USB_CDC_ENET_MULTICAST_FRAMES_RCV 0x00400000U +#define USB_CDC_ENET_BROADCAST_BYTES_RCV 0x00800000U +#define USB_CDC_ENET_BROADCAST_FRAMES_RCV 0x00000100U +#define USB_CDC_ENET_RCV_CRC_ERROR 0x00000200U +#define USB_CDC_ENET_TRANSMIT_QUEUE_LENGTH 0x00000400U +#define USB_CDC_ENET_RCV_ERROR_ALIGNMENT 0x00000800U +#define USB_CDC_ENET_XMIT_ONE_COLLISION 0x00001000U +#define USB_CDC_ENET_XMIT_MORE_COLLISIONS 0x00002000U +#define USB_CDC_ENET_XMIT_DEFERRED 0x00004000U +#define USB_CDC_ENET_XMIT_MAX_COLLISIONS 0x00008000U +#define USB_CDC_ENET_RCV_OVERRUN 0x00000001U +#define USB_CDC_ENET_XMIT_UNDERRUN 0x00000002U +#define USB_CDC_ENET_XMIT_HEARTBEAT_FAILURE 0x00000004U +#define USB_CDC_ENET_XMIT_TIMES_CRS_LOST 0x00000008U +#define USB_CDC_ENET_XMIT_LATE_COLLISIONS 0x00000010U + +/****************************************************************************** + * + * USB_CDC_FD_SUBTYPE_ATM, ATM Networking functional descriptor, + * bmDataCapabilities + * + *****************************************************************************/ +#define USB_CDC_ATM_TYPE_3 0x08 +#define USB_CDC_ATM_TYPE_2 0x04 +#define USB_CDC_ATM_TYPE_1 0x02 + +/****************************************************************************** + * + * bmATMDeviceStatistics + * + *****************************************************************************/ +#define USB_CDC_ATM_VC_US_CELLS_SENT 0x10 +#define USB_CDC_ATM_VC_US_CELLS_RECEIVED 0x08 +#define USB_CDC_ATM_DS_CELLS_HEC_ERR_CORRECTED 0x04 +#define USB_CDC_ATM_US_CELLS_SENT 0x02 +#define USB_CDC_ATM_US_CELLS_RECEIVED 0x01 + +/****************************************************************************** + * + * Management Element Requests (provided in tUSBRequest.ucRequest) + * + *****************************************************************************/ +#define USB_CDC_SEND_ENCAPSULATED_COMMAND 0x00u +#define USB_CDC_GET_ENCAPSULATED_RESPONSE 0x01u +#define USB_CDC_SET_COMM_FEATURE 0x02u +#define USB_CDC_GET_COMM_FEATURE 0x03u +#define USB_CDC_CLEAR_COMM_FEATURE 0x04u +#define USB_CDC_SET_AUX_LINE_STATE 0x10u +#define USB_CDC_SET_HOOK_STATE 0x11u +#define USB_CDC_PULSE_SETUP 0x12u +#define USB_CDC_SEND_PULSE 0x13u +#define USB_CDC_SET_PULSE_TIME 0x14u +#define USB_CDC_RING_AUX_JACK 0x15u +#define USB_CDC_SET_LINE_CODING 0x20u +#define USB_CDC_GET_LINE_CODING 0x21u +#define USB_CDC_SET_CONTROL_LINE_STATE 0x22u +#define USB_CDC_SEND_BREAK 0x23u +#define USB_CDC_SET_RINGER_PARMS 0x30u +#define USB_CDC_GET_RINGER_PARMS 0x31u +#define USB_CDC_SET_OPERATION_PARMS 0x32u +#define USB_CDC_GET_OPERATION_PARMS 0x33u +#define USB_CDC_SET_LINE_PARMS 0x34u +#define USB_CDC_GET_LINE_PARMS 0x35u +#define USB_CDC_DIAL_DIGITS 0x36u +#define USB_CDC_SET_UNIT_PARAMETER 0x37u +#define USB_CDC_GET_UNIT_PARAMETER 0x38u +#define USB_CDC_CLEAR_UNIT_PARAMETER 0x39u +#define USB_CDC_GET_PROFILE 0x3Au +#define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS 0x40u +#define USB_CDC_SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER 0x41u +#define USB_CDC_GET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER 0x42u +#define USB_CDC_SET_ETHERNET_PACKET_FILTER 0x43u +#define USB_CDC_GET_ETHERNET_STATISTIC 0x44u +#define USB_CDC_SET_ATM_DATA_FORMAT 0x50u +#define USB_CDC_GET_ATM_DEVICE_STATISTICS 0x51u +#define USB_CDC_SET_ATM_DEFAULT_VC 0x52u +#define USB_CDC_GET_ATM_VC_STATISTICS 0x53u + +/****************************************************************************** + * + * In cases where a request defined above results in the return of a fixed size + * data block, the following group of labels define the size of that block. In + * each of these cases, an access macro is also provided to write the response + * data into an appropriately-sized array of uint8acters. + * + *****************************************************************************/ +#define USB_CDC_SIZE_COMM_FEATURE 2 +#define USB_CDC_SIZE_LINE_CODING 7 +#define USB_CDC_SIZE_RINGER_PARMS 4 +#define USB_CDC_SIZE_OPERATION_PARMS 2 +#define USB_CDC_SIZE_UNIT_PARAMETER 2 +#define USB_CDC_SIZE_PROFILE 64 +#define USB_CDC_SIZE_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER 2 +#define USB_CDC_SIZE_ETHERNET_STATISTIC 4 +#define USB_CDC_SIZE_ATM_DEVICE_STATISTICS 4 +#define USB_CDC_SIZE_ATM_VC_STATISTICS 4 +#define USB_CDC_SIZE_LINE_PARMS 10 + +/****************************************************************************** + * + * NB: USB_CDC_SIZE_LINE_PARAMS assumes only a single call. For multiple + * calls, add 4 bytes per additional call. + * + *****************************************************************************/ + +/****************************************************************************** + * + * USB_CDC_GET_COMM_FEATURE & USB_CDC_SET_COMM_FEATURE + * + *****************************************************************************/ + +/****************************************************************************** + * + * wValue (Feature Selector) + * + *****************************************************************************/ +#define USB_CDC_ABSTRACT_STATE 0x0001 +#define USB_CDC_COUNTRY_SETTING 0x0002 + +/****************************************************************************** + * + * Data when feature selector is USB_DCD_ABSTRACT_STATE + * + *****************************************************************************/ +#define USB_CDC_ABSTRACT_CALL_DATA_MULTIPLEXED 0x0002 +#define USB_CDC_ABSTRACT_ENDPOINTS_IDLE 0x0001 + +/****************************************************************************** + * + * Macros to populate the response data buffer (whose size in bytes is defined + * by USB_CDC_SIZE_COMM_FEATURE). + * + *****************************************************************************/ +/* + * Add code for macro SetResponseCommFeature. + */ +/****************************************************************************** + * + * USB_CDC_SET_AUX_LINE_STATE, wValue + * + *****************************************************************************/ +#define USB_CDC_AUX_DISCONNECT 0x0000 +#define USB_CDC_AUX_CONNECT 0x0001 + +/****************************************************************************** + * + * USB_CDC_SET_HOOK_STATE, wValue + * + *****************************************************************************/ +#define USB_CDC_ON_HOOK 0x0000 +#define USB_CDC_OFF_HOOK 0x0001 +#define USB_CDC_SNOOPING 0x0002 + +/****************************************************************************** + * + * USB_CDC_GET_LINE_CODING + * + *****************************************************************************/ +#define USB_CDC_STOP_BITS_1 0x00 +#define USB_CDC_STOP_BITS_1_5 0x01 +#define USB_CDC_STOP_BITS_2 0x02 + +#define USB_CDC_PARITY_NONE 0x00 +#define USB_CDC_PARITY_ODD 0x01 +#define USB_CDC_PARITY_EVEN 0x02 +#define USB_CDC_PARITY_MARK 0x03 +#define USB_CDC_PARITY_SPACE 0x04 + +/****************************************************************************** + * + * Macro to populate the response data buffer (whose size in bytes is defined + * by USB_CDC_SIZE_LINE_CODING). + * + *****************************************************************************/ +/* + * Add code for macro SetResponseLineCoding. + */ +/****************************************************************************** + * + * USB_CDC_SET_CONTROL_LINE_STATE, wValue + * + *****************************************************************************/ +#define USB_CDC_DEACTIVATE_CARRIER 0x00 +#define USB_CDC_ACTIVATE_CARRIER 0x02 +#define USB_CDC_DTE_NOT_PRESENT 0x00 +#define USB_CDC_DTE_PRESENT 0x01 + +/****************************************************************************** + * + * USB_CDC_SET_RINGER_PARMS, USB_CDC_GET_RINGER_PARMS and + * USB_CDC_GET_LINE_PARMS (ulRingerBmp) + * + *****************************************************************************/ +#define USB_CDC_RINGER_EXISTS 0x80000000U +#define USB_CDC_RINGER_DOES_NOT_EXIST 0x00000000 + +/****************************************************************************** + * + * Macro to populate the response data buffer to USB_CDC_GET_RINGER_PARMS. + * Parameter buf points to a buffer of size USB_CDC_SIZE_RINGER_PARMS bytes. + * + *****************************************************************************/ +/* + * Add code for macro SetResponseRingerParms. + */ +/****************************************************************************** + * + * Macros to extract fields from the USB_CDC_SET_RINGER_PARMS data + * + *****************************************************************************/ +/* #define GetRingerVolume(pcData) (BYTE((pcData)+1)) */ +/* #define GetRingerPattern(pcData) (BYTE(pcData)) */ +/* #define GetRingerExists(pcData) ((LONG(pcData)) & USB_CDC_RINGER_EXISTS) */ + +/****************************************************************************** + * + * USB_CDC_SET_OPERATION_PARMS, wValue + * + *****************************************************************************/ +#define USB_CDC_SIMPLE_MODE 0x0000 +#define USB_CDC_STANDALONE_MODE 0x0001 +#define USB_CDC_HOST_CENTRIC_MODE 0x0002 + +/****************************************************************************** + * + * Macro to populate the response data buffer to USB_CDC_GET_OPERATION_PARMS. + * Parameter buf points to a buffer of size USB_CDC_SIZE_OPERATION_PARMS + * bytes. + * + *****************************************************************************/ +/* + * Add code for macro SetResponseOperationParms. + */ +/****************************************************************************** + * + * USB_CDC_SET_LINE_PARMS, wParam - Line State Change + * + *****************************************************************************/ +#define USB_CDC_DROP_ACTIVE_CALL 0x0000 +#define USB_CDC_START_NEW_CALL 0x0001 +#define USB_CDC_APPLY_RINGING 0x0002 +#define USB_CDC_REMOVE_RINGING 0x0003 +#define USB_CDC_SWITCH_CALL 0x0004 + +/****************************************************************************** + * + * Line state bitmap in USB_CDC_GET_LINE_PARMS response + * + *****************************************************************************/ +#define USB_CDC_LINE_IS_ACTIVE 0x80000000U +#define USB_CDC_LINE_IS_IDLE 0x00000000U +#define USB_CDC_LINE_NO_ACTIVE_CALL 0x000000FFU + +#define USB_CDC_CALL_ACTIVE 0x80000000U + +/****************************************************************************** + * + * Call state value definitions + * + *****************************************************************************/ +#define USB_CDC_CALL_IDLE 0x00000000 +#define USB_CDC_CALL_TYPICAL_DIALTONE 0x00000001 +#define USB_CDC_CALL_INTERRUPTED_DIALTONE 0x00000002 +#define USB_CDC_CALL_DIALING 0x00000003 +#define USB_CDC_CALL_RINGBACK 0x00000004 +#define USB_CDC_CALL_CONNECTED 0x00000005 +#define USB_CDC_CALL_INCOMING 0x00000006 + +/****************************************************************************** + * + * Call state change value definitions + * + *****************************************************************************/ +#define USB_CDC_CALL_STATE_IDLE 0x01 +#define USB_CDC_CALL_STATE_DIALING 0x02 +#define USB_CDC_CALL_STATE_RINGBACK 0x03 +#define USB_CDC_CALL_STATE_CONNECTED 0x04 +#define USB_CDC_CALL_STATE_INCOMING 0x05 + +/****************************************************************************** + * + * Extra byte of data describing the connection type for + * USB_CDC_CALL_STATE_CONNECTED. + * + *****************************************************************************/ +#define USB_CDC_VOICE 0x00 +#define USB_CDC_ANSWERING_MACHINE 0x01 +#define USB_CDC_FAX 0x02 +#define USB_CDC_MODEM 0x03 +#define USB_CDC_UNKNOWN 0xFF + +/****************************************************************************** + * + * Macro to extract call index from request in cases where wParam is + * USB_CDC_SWITCH_CALL. + * + *****************************************************************************/ +/* #define GetCallIndex(pcData) (BYTE(pcData)) */ + +/****************************************************************************** + * + * Macro to populate the CallState entries in response to request + * USB_CDC_GET_LINE_PARMS. The ucIndex parameter is a zero based index + * indicating which call entry in the pcBuf response buffer to fill in. Note + * that pcBuf points to the first byte of the buffer (the wLength field). + * + *****************************************************************************/ +/* + * Add code for macro SetResponseCallState. + */ +/****************************************************************************** + * + * Macro to populate the response data buffer (whose size in bytes is defined + * by USB_CDC_SIZE_LINE_PARMS). Note that this macro only populates fields for + * a single call. If multiple calls are being managed, additional 4 byte + * fields must be appended to provide call state for each call after the first. + * This may be done using the SetResponseCallState macro with the appropriate + * call index supplied. + * + *****************************************************************************/ +/* + * Add code for macro SetResponseLineParms. + */ +/****************************************************************************** + * + * Notification Element definitions + * + *****************************************************************************/ +#define USB_CDC_NOTIFY_NETWORK_CONNECTION 0x00 +#define USB_CDC_NOTIFY_RESPONSE_AVAILABLE 0x01 +#define USB_CDC_NOTIFY_AUX_JACK_HOOK_STATE 0x08 +#define USB_CDC_NOTIFY_RING_DETECT 0x09 +#define USB_CDC_NOTIFY_SERIAL_STATE 0x20 +#define USB_CDC_NOTIFY_CALL_STATE_CHANGE 0x28 +#define USB_CDC_NOTIFY_LINE_STATE_CHANGE 0x29 +#define USB_CDC_NOTIFY_CONNECTION_SPEED_CHANGE 0x2A + +/****************************************************************************** + * + * USB_CDC_NOTIFY_NETWORK_CONNECTION, wValue + * + *****************************************************************************/ +#define USB_CDC_NETWORK_DISCONNECTED 0x0000 +#define USB_CDC_NETWORK_CONNECTED 0x0001 + +/****************************************************************************** + * + * USB_CDC_NOTIFY_AUX_JACK_HOOK_STATE, wValue + * + *****************************************************************************/ +#define USB_CDC_AUX_JACK_ON_HOOK 0x0000 +#define USB_CDC_AUX_JACK_OFF_HOOK 0x0001 + +/****************************************************************************** + * + * USB_CDC_NOTIFY_SERIAL_STATE, Data + * + *****************************************************************************/ + +/****************************************************************************** + * + * Number of bytes of data returned alongside this notification. + * + *****************************************************************************/ +#define USB_CDC_NOTIFY_SERIAL_STATE_SIZE 2u + +#define USB_CDC_SERIAL_STATE_OVERRUN 0x0040U +#define USB_CDC_SERIAL_STATE_PARITY 0x0020U +#define USB_CDC_SERIAL_STATE_FRAMING 0x0010U +#define USB_CDC_SERIAL_STATE_RING_SIGNAL 0x0008U +#define USB_CDC_SERIAL_STATE_BREAK 0x0004U +#define USB_CDC_SERIAL_STATE_TXCARRIER 0x0002U +#define USB_CDC_SERIAL_STATE_RXCARRIER 0x0001U + +/****************************************************************************** + * + * USB_CDC_NOTIFY_CALL_STATE_CHANGE, wValue + * + * Call state values are defined above in the group beginning + * USB_CDC_CALL_STATE_IDLE. Note that the data returned alongside this + * notification are heavily dependent upon the call state being reported so no + * specific lengths or access macros are provided here. + * + * Macro to construct the correct wValue for this notification given a state + * and call index. + * + *****************************************************************************/ +/* + * Add code for macro SetNotifyCallStatewValue. + */ +/****************************************************************************** + * + * USB_CDC_NOTIFY_LINE_STATE_CHANGE, wValue + * + * Note that the data returned alongside this notification are heavily + * dependent upon the call state being reported so no specific lengths or + * access macros are provided here. + * + *****************************************************************************/ +#define USB_CDC_LINE_STATE_IDLE 0x0000 +#define USB_CDC_LINE_STATE_HOLD 0x0001 +#define USB_CDC_LINE_STATE_OFF_HOOK 0x0002 +#define USB_CDC_LINE_STATE_ON_HOOK 0x0003 + +/****************************************************************************** + * + * USB_CDC_NOTIFY_CONNECTION_SPEED_CHANGE, Data + * + * Macro to populate the 8 byte data structure returned alongside this + * notification. + * + *****************************************************************************/ +/* + * Add code for macro SetNotifyConnectionSpeedChange. + */ +/****************************************************************************** + * + * Packed structure definitions for request/response data blocks + * + *****************************************************************************/ + +/****************************************************************************** + * + * All structures defined in this section of the header require byte packing of + * fields. This is usually accomplished using the PACKED macro but, for IAR + * Embedded Workbench, this requires a pragma. + * + *****************************************************************************/ +#if defined(ewarm) || defined(__IAR_SYSTEMS_ICC__) +#pragma pack(1) +#endif + +/** + * @brief USB_CDC_GET/SET_LINE_CODING request-specific data. + */ +typedef struct +{ + /** + * @brief The data terminal rate in bits per second. + */ + uint32 ulRate; + + /** + * @brief The number of stop bits. Valid values are USB_CDC_STOP_BITS_1, + * USB_CDC_STOP_BITS_1_5 or USB_CDC_STOP_BITS_2 + */ + uint8 ucStop; + + /** + * @brief The parity setting. Valid values are USB_CDC_PARITY_NONE, + * USB_CDC_PARITY_ODD, USB_CDC_PARITY_EVEN, USB_CDC_PARITY_MARK + * and USB_CDC_PARITY_SPACE. + */ + uint8 ucParity; + + /** + * @brief The number of data bits per character. Valid values are + * 5, 6, 7 and 8 in this implementation. + */ + uint8 ucDatabits; +} +PACKED tLineCoding; + +/****************************************************************************** + * + * Return to default packing when using the IAR Embedded Workbench compiler. + * + *****************************************************************************/ +#if defined(ewarm) || defined(__IAR_SYSTEMS_ICC__) +#pragma pack() +#endif + +/** + * Close the Doxygen group. + * @} + */ + +/****************************************************************************** + * + * Mark the end of the C bindings section for C++ compilers. + * + *****************************************************************************/ +#ifdef __cplusplus +} +#endif + +#endif /* __USBCDC_H__ */ Index: firmware/include/usbdcdc.h =================================================================== diff -u --- firmware/include/usbdcdc.h (revision 0) +++ firmware/include/usbdcdc.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,383 @@ +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/** + * @file usbdcdc.h + * + * @brief USBLib support for generic CDC ACM (serial) device. + * + */ + +#ifndef __USBDCDC_H__ +#define __USBDCDC_H__ + +/****************************************************************************** + * + * If building with a C++ compiler, make all of the definitions in this header + * have a C binding. + * + *****************************************************************************/ +#ifdef __cplusplus +extern "C" +{ +#endif + +/** *************************************************************************** + * + * \ingroup cdc_device_class_api + * @{ + * + *****************************************************************************/ + +/****************************************************************************** + * + * PRIVATE + * + * The first few sections of this header are private defines that are used by + * the USB CDC Serial code and are here only to help with the application + * allocating the correct amount of memory for the CDC Serial device code. + * + *****************************************************************************/ + +/****************************************************************************** + * + * PRIVATE + * + * This enumeration holds the various states that the device can be in during + * normal operation. + * + *****************************************************************************/ +typedef enum +{ + /** + * @brief Unconfigured. + */ + CDC_STATE_UNCONFIGURED, + + /** + * @brief No outstanding transaction remains to be completed. + */ + CDC_STATE_IDLE, + + /** + * @brief Waiting on completion of a send or receive transaction. + */ + CDC_STATE_WAIT_DATA, + + /** + * @brief Waiting for client to process data. + */ + CDC_STATE_WAIT_CLIENT +} +tCDCState; + +/****************************************************************************** + * + * PRIVATE + * + * This structure defines the private instance data and state variables for the + * CDC Serial device. The memory for this structure is pointed to by the + * psPrivateCDCSerData field in the tUSBDCDCDevice structure passed on + * USBDCDCInit(). + * + *****************************************************************************/ +typedef struct +{ + uint32 ulUSBBase; + tDeviceInfo *psDevInfo; + tConfigDescriptor *psConfDescriptor; + volatile tCDCState eCDCRxState; + volatile tCDCState eCDCTxState; + volatile tCDCState eCDCRequestState; + volatile tCDCState eCDCInterruptState; + volatile uint8 ucPendingRequest; + uint16 usBreakDuration; + uint16 usControlLineState; + uint16 usSerialState; + volatile uint32 usDeferredOpFlags; + uint16 usLastTxSize; + tLineCoding sLineCoding; + volatile tBoolean bRxBlocked; + volatile tBoolean bControlBlocked; + volatile tBoolean bConnected; + uint8 ucControlEndpoint; + uint8 ucBulkINEndpoint; + uint8 ucBulkOUTEndpoint; + uint8 ucInterfaceControl; + uint8 ucInterfaceData; +} +tCDCSerInstance; + + +#ifndef DEPRECATED +/** *************************************************************************** + * + * @brief The number of bytes of workspace required by the CDC device class + * driver. The client must provide a block of RAM of at least this + * size in the psPrivateCDCSerData field of the tUSBCDCDevice + * structure passed on USBDCDCInit(). + * + * This value is deprecated and should not be used, any new code + * should just pass in a tUSBCDCDevice structure in the + * psPrivateCDCSerData field. + * + *****************************************************************************/ +#define USB_CDCSER_WORKSPACE_SIZE (sizeof(tCDCSerInstance)) +#endif + +/** *************************************************************************** + * + * The following defines are used when working with composite devices. + * + *****************************************************************************/ + +/** *************************************************************************** + * + * @brief The size of the memory that should be allocated to create a + * configuration descriptor for a single instance of the USB Serial + * CDC Device. This does not include the configuration descriptor + * which is automatically ignored by the composite device class. + * + * For reference this is sizeof(g_pIADSerDescriptor) + + * sizeof(g_pCDCSerCommInterface) + sizeof(g_pCDCSerDataInterface) + * + *****************************************************************************/ +#define COMPOSITE_DCDC_SIZE (8u + 35u + 23u) + +/** *************************************************************************** + * + * CDC-specific events These events are provided to the application in the + * \e ulMsg parameter of the tUSBCallback function. + * + *****************************************************************************/ + +/** *************************************************************************** + * + * @brief The host requests that the device send a BREAK condition on its + * serial communication channel. The BREAK should remain active until + * a USBD_CDC_EVENT_CLEAR_BREAK event is received. + */ +#define USBD_CDC_EVENT_SEND_BREAK (USBD_CDC_EVENT_BASE + 0u) + +/** *************************************************************************** + * + * @brief The host requests that the device stop sending a BREAK condition on + * its serial communication channel. + */ +#define USBD_CDC_EVENT_CLEAR_BREAK (USBD_CDC_EVENT_BASE + 1u) + +/** *************************************************************************** + * + * @brief The host requests that the device set the RS232 signaling lines to + * a particular state. The ulMsgValue parameter contains the RTS and + * DTR control line states as defined in table 51 of the USB CDC class + * definition and is a combination of the following values: + * + * (RTS) USB_CDC_DEACTIVATE_CARRIER or USB_CDC_ACTIVATE_CARRIER + * (DTR) USB_CDC_DTE_NOT_PRESENT or USB_CDC_DTE_PRESENT + */ +#define USBD_CDC_EVENT_SET_CONTROL_LINE_STATE (USBD_CDC_EVENT_BASE + 2u) + +/** *************************************************************************** + * + * @brief The host requests that the device set the RS232 communication + * parameters. The pvMsgData parameter points to a tLineCoding + * structure defining the required number of bits per character, + * parity mode, number of stop bits and the baud rate. + */ +#define USBD_CDC_EVENT_SET_LINE_CODING (USBD_CDC_EVENT_BASE + 3u) + +/** *************************************************************************** + * + * @brief The host is querying the current RS232 communication parameters. + * The pvMsgData parameter points to a tLineCoding structure that the + * application must fill with the current settings prior to returning + * from the callback. + */ +#define USBD_CDC_EVENT_GET_LINE_CODING (USBD_CDC_EVENT_BASE + 4u) + +/** *************************************************************************** + * + * @brief The structure used by the application to define operating + * parameters for the CDC device. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The vendor ID that this device is to present in the device + * descriptor. + */ + uint16 usVID; + + /** + * @brief The product ID that this device is to present in the device + * descriptor. + */ + uint16 usPID; + + /** + * @brief The maximum power consumption of the device, expressed in + * milliamps. + */ + uint16 usMaxPowermA; + + /** + * @brief Indicates whether the device is self- or bus-powered and + * whether or not it supports remote wakeup. Valid values are + * USB_CONF_ATTR_SELF_PWR or USB_CONF_ATTR_BUS_PWR, optionally + * ORed with USB_CONF_ATTR_RWAKE. + */ + uint8 ucPwrAttributes; + + /** + * @brief A pointer to the callback function which will be called to + * notify the application of all asynchronous control events + * related to the operation of the device. + */ + tUSBCallback pfnControlCallback; + + /** + * @brief A client-supplied pointer which will be sent as the first + * parameter in all calls made to the control channel callback, + * pfnControlCallback. + */ + void *pvControlCBData; + + /** + * @brief A pointer to the callback function which will be called to + * notify the application of events related to the device's data + * receive channel. + */ + tUSBCallback pfnRxCallback; + + /** + * @brief A client-supplied pointer which will be sent as the first + * parameter in all calls made to the receive channel callback, + * pfnRxCallback. + */ + void *pvRxCBData; + + /** + * @brief A pointer to the callback function which will be called to + * notify the application of events related to the device's data + * transmit channel. + */ + tUSBCallback pfnTxCallback; + + /** + * @brief A client-supplied pointer which will be sent as the first + * parameter in all calls made to the transmit channel callback, + * pfnTxCallback. + */ + void *pvTxCBData; + + /** + * @brief A pointer to the string descriptor array for this device. This + * array must contain the following string descriptor pointers in + * this order. Language descriptor, Manufacturer name string + * (language 1), Product name string (language 1), Serial number + * Control interface description string (language 1), + * Configuration description string (language 1). + * + * If supporting more than 1 language, the strings for indices + * 1 through 5 must be repeated for each of the other languages + * defined in the language descriptor. + */ + const uint8 * const *ppStringDescriptors; + + /** + * @brief The number of descriptors provided in the ppStringDescriptors + * array. This must be 1 + (5 * number of supported languages). + */ + uint32 ulNumStringDescriptors; + + /** + * @brief A pointer to the private instance data for this device. This + * memory must remain accessible for as long as the CDC device is + * in use and must not be modified by any code outside the CDC + * class driver. + */ + tCDCSerInstance *psPrivateCDCSerData; +} +tUSBDCDCDevice; + +extern tDeviceInfo g_sCDCSerDeviceInfo; + +/** *************************************************************************** + * + * API Function Prototypes + * + *****************************************************************************/ +extern void * USBDCDCCompositeInit(uint32 ulIndex, + const tUSBDCDCDevice *psCDCDevice); +extern void *USBDCDCInit(uint32 ulIndex, + const tUSBDCDCDevice *psCDCDevice); +extern void USBDCDCTerm(void *pvInstance); +extern void *USBDCDCSetControlCBData(tUSBDCDCDevice *pvInstance, void *pvCBData); +extern void *USBDCDCSetRxCBData(void *pvInstance, void *pvCBData); +extern void *USBDCDCSetTxCBData(void *pvInstance, void *pvCBData); +extern uint32 USBDCDCPacketWrite(void *pvInstance, + uint8 *pcData, + uint32 ulLength, + tBoolean bLast); +extern uint32 USBDCDCPacketRead(void *pvInstance, + uint8 *pcData, + uint32 ulLength, + tBoolean bLast); +extern uint32 USBDCDCTxPacketAvailable(void *pvInstance); +extern uint32 USBDCDCRxPacketAvailable(void *pvInstance); +extern void USBDCDCSerialStateChange(void *pvInstance, + uint16 usState); +extern void USBDCDCPowerStatusSet(void *pvInstance, uint8 ucPower); +extern tBoolean USBDCDCRemoteWakeupRequest(void *pvInstance); + +/** *************************************************************************** + * + * Close the Doxygen group. + * @} + * + *****************************************************************************/ + +/****************************************************************************** + * + * Mark the end of the C bindings section for C++ compilers. + * + *****************************************************************************/ +#ifdef __cplusplus +} +#endif + +#endif /* __USBDCDC_H__ */ Index: firmware/include/usbdevice.h =================================================================== diff -u --- firmware/include/usbdevice.h (revision 0) +++ firmware/include/usbdevice.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,153 @@ +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/** + * @file usbdevice.h + * + * @brief Types and definitions used during USB enumeration. + * + */ + +#ifndef __USBDEVICE_H__ +#define __USBDEVICE_H__ + +/****************************************************************************** + * + * If building with a C++ compiler, make all of the definitions in this header + * have a C binding. + * + *****************************************************************************/ +#ifdef __cplusplus +extern "C" +{ +#endif + +/** *************************************************************************** + * + * \ingroup device_api + * @{ + * + *****************************************************************************/ + +/** *************************************************************************** + * + * @brief The maximum number of independent interfaces that any single device + * implementation can support. Independent interfaces means interface + * descriptors with different bInterfaceNumber values - several + * interface descriptors offering different alternative settings but + * the same interface number count as a single interface. + * + *****************************************************************************/ +/*#define USB_MAX_INTERFACES_PER_DEVICE 8u*/ + +/** *************************************************************************** + * + * Close the Doxygen group. + * @} + * + *****************************************************************************/ + +/** *************************************************************************** + * + * @brief The default USB endpoint FIFO configuration structure. This + * structure contains definitions to set all USB FIFOs into single + * buffered mode with no DMA use. Each endpoint's FIFO is sized to + * hold the largest maximum packet size for any interface alternate + * setting in the current config descriptor. A pointer to this + * structure may be passed in the psFIFOConfig field of the + * tDeviceInfo structure passed to USBCDCInit if the application does + * not require any special handling of the USB controller FIFO. + * + *****************************************************************************/ +extern const tFIFOConfig g_sUSBDefaultFIFOConfig; + +/** *************************************************************************** + * + * Public APIs offered by the USB library device control driver. + * + *****************************************************************************/ +extern void USBDCDInit(uint32 ulIndex, tDeviceInfo *psDevice); +extern void USBDCDTerm(uint32 ulIndex); +extern void USBDCDStallEP0(uint32 ulIndex); +extern void USBDCDRequestDataEP0(uint32 ulIndex, uint8 *pucData, + uint32 ulSize); +extern void USBDCDSendDataEP0(uint32 ulIndex, uint8 *pucData, + uint32 ulSize); +extern void USBDCDSetDefaultConfiguration(uint32 ulIndex, + uint32 ulDefaultConfig); +extern uint32 USBDCDConfigDescGetSize(const tConfigHeader *psConfig); +extern uint32 USBDCDConfigDescGetNum(const tConfigHeader *psConfig, + uint32 ulType); +extern tDescriptorHeader *USBDCDConfigDescGet(const tConfigHeader *psConfig, + uint32 ulType, + uint32 ulIndex, + uint32 *pulSection); +extern uint32 + USBDCDConfigGetNumAlternateInterfaces(const tConfigHeader *psConfig, + uint8 ucInterfaceNumber); +extern tInterfaceDescriptor * + USBDCDConfigGetInterface(const tConfigHeader *psConfig, + uint32 ulIndex, uint32 ulAltCfg, + uint32 *pulSection); +extern tEndpointDescriptor * + USBDCDConfigGetInterfaceEndpoint(const tConfigHeader *psConfig, + uint32 ulInterfaceNumber, + uint32 ulAltCfg, + uint32 ulIndex); +extern void USBDCDPowerStatusSet(uint32 ulIndex, uint8 ucPower); +extern tBoolean USBDCDRemoteWakeupRequest(uint32 ulIndex); + +/** *************************************************************************** + * + * Early releases of the USB library had the following function named + * incorrectly. This macro ensures that any code which used the previous name + * will still operate as expected. + * + *****************************************************************************/ +#ifndef DEPRECATED +#define USBCDCConfigGetInterfaceEndpoint(a, b, c, d) \ + USBDCDConfigGetInterfaceEndpoint((a), (b), (c), (d)) +#endif + +/** *************************************************************************** + * + * Mark the end of the C bindings section for C++ compilers. + * + *****************************************************************************/ +#ifdef __cplusplus +} +#endif + +#endif /* __USBENUM_H__ */ Index: firmware/include/usbdevicepriv.h =================================================================== diff -u --- firmware/include/usbdevicepriv.h (revision 0) +++ firmware/include/usbdevicepriv.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,90 @@ +/****************************************************************************** + * FILE DESCRIPTION + * --------------------------------------------------------------------------- + * File: usbdevicepriv.h + * Component: + * Module: usb + * Generator: - + * + * Description: Private header file used to share internal variables and + * function prototypes between the various device-related + * modules in the USB library. This header MUST NOT be + * used by application code. + * + *****************************************************************************/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#ifndef __USBDEVICEPRIV_H__ +#define __USBDEVICEPRIV_H__ + +/****************************************************************************** + * + * If building with a C++ compiler, make all of the definitions in this header + * have a C binding. + * + *****************************************************************************/ + +#ifdef __cplusplus +extern "C" +{ +#endif + +/****************************************************************************** + * + * Device enumeration functions provided by device/usbenum.c and called from + * the interrupt handler in device/usbhandler.c + * + *****************************************************************************/ +extern tBoolean USBDeviceConfig(uint32 ulIndex, + const tConfigHeader *psConfig, + const tFIFOConfig *psFIFOConfig); +extern tBoolean USBDeviceConfigAlternate(uint32 ulIndex, + const tConfigHeader *psConfig, + uint8 ucInterfaceNum, + uint8 ucAlternateSetting); +extern void USBDeviceResumeTickHandler(uint32 ulIndex); + +/****************************************************************************** + * + * Mark the end of the C bindings section for C++ compilers. + * + *****************************************************************************/ +#ifdef __cplusplus +} +#endif + +#endif /* __USBDEVICEPRIV_H__ */ Index: firmware/include/usblib.h =================================================================== diff -u --- firmware/include/usblib.h (revision 0) +++ firmware/include/usblib.h (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,1899 @@ +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/** + * @file usblib.h + * + * @brief Main header file for the USB Library. + * + */ + +#ifndef __USBLIB_H__ +#define __USBLIB_H__ + +/****************************************************************************** + * + * If building with a C++ compiler, make all of the definitions in this header + * have a C binding. + * + *****************************************************************************/ +#ifdef __cplusplus +extern "C" +{ +#endif + + + +/* standard device requests -- USB_SetupDataPacket::bRequest */ +#define USB_REQUEST_GETSTATUS (0u) +#define USB_REQUEST_CLEARFEATURE (1u) +#define USB_REQUEST_SETFEATURE (3u) +#define USB_REQUEST_SETADDRESS (5u) +#define USB_REQUEST_GETDESCRIPTOR (6u) +#define USB_REQUEST_SETDESCRIPTOR (7u) +#define USB_REQUEST_GETCONFIGURATION (8u) +#define USB_REQUEST_SETCONFIGURATION (9u) +#define USB_REQUEST_GETINTERFACE (10u) +#define USB_REQUEST_SETINTERFACE (11u) +#define USB_REQUEST_SYNCHFRAME (12u) + + +/** *************************************************************************** + * + * This is the maximum number of endpoints supported by the usblib. + * + *****************************************************************************/ +#define USBLIB_NUM_EP 16u /* Number of supported endpoints. */ + +/****************************************************************************** + * + * The following macro allows compiler-independent syntax to be used to + * define packed structures. A typical structure definition using these + * macros will look similar to the following example: + * + * #ifdef ewarm + * #pragma pack(1) + * #endif + * + * typedef struct _PackedStructName + * { + * uint32 ulFirstField; + * char cCharMember; + * uint16 usShort; + * } + * PACKED tPackedStructName; + * + * #ifdef ewarm + * #pragma pack() + * #endif + * + * The conditional blocks related to ewarm include the #pragma pack() lines + * only if the IAR Embedded Workbench compiler is being used. Unfortunately, + * it is not possible to emit a #pragma from within a macro definition so this + * must be done explicitly. + * + *****************************************************************************/ +#if defined(ccs) || \ + defined(codered) || \ + defined(gcc) || \ + defined(rvmdk) || \ + defined(__ARMCC_VERSION) || \ + defined(sourcerygxx) +#define PACKED __attribute__ ((packed)) +#elif defined(ewarm) || defined(__IAR_SYSTEMS_ICC__) +#define PACKED +#elif (__TMS470__) +#define PACKED __attribute__ ((packed)) +#else +#error Unrecognized COMPILER! +#endif + +/****************************************************************************** + * + * Assorted language IDs from the document "USB_LANGIDs.pdf" provided by the + * USB Implementers' Forum (Version 1.0). + * + *****************************************************************************/ +#define USB_LANG_CHINESE_PRC 0x0804u /**< Chinese (PRC) */ +#define USB_LANG_CHINESE_TAIWAN 0x0404u /**< Chinese (Taiwan) */ +#define USB_LANG_EN_US 0x0409u /**< English (United States) */ +#define USB_LANG_EN_UK 0x0809u /**< English (United Kingdom) */ +#define USB_LANG_EN_AUS 0x0C09u /**< English (Australia) */ +#define USB_LANG_EN_CA 0x1009u /**< English (Canada) */ +#define USB_LANG_EN_NZ 0x1409u /**< English (New Zealand) */ +#define USB_LANG_FRENCH 0x040Cu /**< French (Standard) */ +#define USB_LANG_GERMAN 0x0407u /**< German (Standard) */ +#define USB_LANG_HINDI 0x0439u /**< Hindi */ +#define USB_LANG_ITALIAN 0x0410u /**< Italian (Standard) */ +#define USB_LANG_JAPANESE 0x0411u /**< Japanese */ +#define USB_LANG_KOREAN 0x0412u /**< Korean */ +#define USB_LANG_ES_TRAD 0x040Au /**< Spanish (Traditional) */ +#define USB_LANG_ES_MODERN 0x0C0Au /**< Spanish (Modern) */ +#define USB_LANG_SWAHILI 0x0441u /**< Swahili (Kenya) */ +#define USB_LANG_URDU_IN 0x0820u /**< Urdu (India) */ +#define USB_LANG_URDU_PK 0x0420u /**< Urdu (Pakistan) */ +/** *************************************************************************** + * + * @ingroup usbchap9_src + * @{ + * + *****************************************************************************/ + +/****************************************************************************** + * + * Note: + * + * Structure definitions which are derived directly from the USB specification + * use field names from the specification. Since a somewhat different version + * of Hungarian prefix notation is used from the Stellaris standard, beware of + * making assumptions about field sizes based on the field prefix when using + * these structures. Of particular note is the difference in the meaning of + * the 'i' prefix. In USB structures, this indicates a single byte index + * whereas in Stellaris code, this is a 32 bit integer. + * + *****************************************************************************/ + +/****************************************************************************** + * + * All structures defined in this section of the header require byte packing of + * fields. This is usually accomplished using the PACKED macro but, for IAR + * Embedded Workbench, this requires a pragma. + * + *****************************************************************************/ +#if defined(ewarm) || defined(__IAR_SYSTEMS_ICC__) +#pragma pack(1) +#endif + +/****************************************************************************** + * + * Definitions related to standard USB device requests (sections 9.3 & 9.4) + * + *****************************************************************************/ + +/** *************************************************************************** + * + * @brief The standard USB request header as defined in section 9.3 of the + * USB 2.0 specification. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief Determines the type and direction of the request. + */ + uint8 bmRequestType; + + /** + * @brief Identifies the specific request being made. + */ + uint8 bRequest; + + /** + * @brief Word-sized field that varies according to the request. + */ + uint16 wValue; + + /** + * @brief Word-sized field that varies according to the request; typically used + * to pass an index or offset. + */ + uint16 wIndex; + + /** + * @brief The number of bytes to transfer if there is a data stage to the + * request. + */ + uint16 wLength; + +} +PACKED tUSBRequest; + +/****************************************************************************** + * + * The following defines are used with the bmRequestType member of tUSBRequest. + * + * Request types have 3 bit fields: + * 4:0 - Is the recipient type. + * 6:5 - Is the request type. + * 7 - Is the direction of the request. + * + *****************************************************************************/ +#define USB_RTYPE_DIR_IN 0x80u +#define USB_RTYPE_DIR_OUT 0x00u + +#define USB_RTYPE_TYPE_M 0x60u +#define USB_RTYPE_VENDOR 0x40u +#define USB_RTYPE_CLASS 0x20u +#define USB_RTYPE_STANDARD 0x00u + +#define USB_RTYPE_RECIPIENT_M 0x1fu +#define USB_RTYPE_OTHER 0x03u +#define USB_RTYPE_ENDPOINT 0x02u +#define USB_RTYPE_INTERFACE 0x01u +#define USB_RTYPE_DEVICE 0x00u + +/****************************************************************************** + * + * Standard USB requests IDs used in the bRequest field of tUSBRequest. + * + *****************************************************************************/ +#define USBREQ_GET_STATUS 0x00u +#define USBREQ_CLEAR_FEATURE 0x01u +#define USBREQ_SET_FEATURE 0x03u +#define USBREQ_SET_ADDRESS 0x05u +#define USBREQ_GET_DESCRIPTOR 0x06u +#define USBREQ_SET_DESCRIPTOR 0x07u +#define USBREQ_GET_CONFIG 0x08u +#define USBREQ_SET_CONFIG 0x09u +#define USBREQ_GET_INTERFACE 0x0au +#define USBREQ_SET_INTERFACE 0x0bu +#define USBREQ_SYNC_FRAME 0x0cu + +#define USBREQ_COUNT (USBREQ_SYNC_FRAME + 1u) + +/****************************************************************************** + * + * Data returned from a USBREQ_GET_STATUS request to a device. + * + *****************************************************************************/ +#define USB_STATUS_SELF_PWR 0x0001u /**< Currently self powered. */ +#define USB_STATUS_BUS_PWR 0x0000u /**< Currently bus-powered. */ +#define USB_STATUS_PWR_M 0x0001u /**< Mask for power mode. */ +#define USB_STATUS_REMOTE_WAKE 0x0002u /**< Remote wake-up is currently + enabled. */ + +/****************************************************************************** + * + * Feature Selectors (tUSBRequest.wValue) passed on USBREQ_CLEAR_FEATURE and + * USBREQ_SET_FEATURE. + * + *****************************************************************************/ +#define USB_FEATURE_EP_HALT 0x0000u /**< Endpoint halt feature. */ +#define USB_FEATURE_REMOTE_WAKE 0x0001u /**< Remote wake feature, device only. */ +#define USB_FEATURE_TEST_MODE 0x0002u /**< Test mode */ + +/****************************************************************************** + * + * Endpoint Selectors (tUSBRequest.wIndex) passed on USBREQ_CLEAR_FEATURE, + * USBREQ_SET_FEATURE and USBREQ_GET_STATUS. + * + *****************************************************************************/ +#define USB_REQ_EP_NUM_M 0x007Fu +#define USB_REQ_EP_DIR_M 0x0080u +#define USB_REQ_EP_DIR_IN 0x0080u +#define USB_REQ_EP_DIR_OUT 0x0000u + +/****************************************************************************** + * + * Standard USB descriptor types. These values are passed in the upper bytes + * of tUSBRequest.wValue on USBREQ_GET_DESCRIPTOR and also appear in the + * bDescriptorType field of standard USB descriptors. + * + *****************************************************************************/ +#define USB_DTYPE_DEVICE 1u +#define USB_DTYPE_CONFIGURATION 2u +#define USB_DTYPE_STRING 3u +#define USB_DTYPE_INTERFACE 4u +#define USB_DTYPE_ENDPOINT 5u +#define USB_DTYPE_DEVICE_QUAL 6u +#define USB_DTYPE_OSPEED_CONF 7u +#define USB_DTYPE_INTERFACE_PWR 8u +#define USB_DTYPE_OTG 9u +#define USB_DTYPE_INTERFACE_ASC 11u +#define USB_DTYPE_CS_INTERFACE 36u + +/****************************************************************************** + * + * Definitions related to USB descriptors (sections 9.5 & 9.6) + * + *****************************************************************************/ + +/** *************************************************************************** + * + * @brief This structure describes a generic descriptor header. These + * fields are to be found at the beginning of all valid USB + * descriptors. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The length of this descriptor (including this length byte) expressed + * in bytes. + */ + uint8 bLength; + + /** + * @brief The type identifier of the descriptor whose information follows. + * For standard descriptors, this field could contain, for example, + * USB_DTYPE_DEVICE to identify a device descriptor or + * USB_DTYPE_ENDPOINT to identify an endpoint descriptor. + */ + uint8 bDescriptorType; +} +PACKED tDescriptorHeader; + +/** *************************************************************************** + * + * @brief This structure describes the USB device descriptor as defined in USB + * 2.0 specification section 9.6.1. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The length of this descriptor in bytes. All device descriptors + * are 18 bytes long. + */ + uint8 bLength; + + /** + * @brief The type of the descriptor. For a device descriptor, this will + * be USB_DTYPE_DEVICE (1). + */ + uint8 bDescriptorType; + + /** + * @brief The USB Specification Release Number in BCD format. + * For USB 2.0, this will be 0x0200. + */ + uint16 bcdUSB; + + /** + * @brief The device class code. + */ + uint8 bDeviceClass; + + /** + * @brief The device subclass code. This value qualifies the value + * found in the bDeviceClass field. + */ + uint8 bDeviceSubClass; + + /** + * @brief The device protocol code. This value is qualified by the + * values of bDeviceClass and bDeviceSubClass. + */ + uint8 bDeviceProtocol; + + /** + * @brief The maximum packet size for endpoint zero. Valid values + * are 8, 16, 32 and 64. + */ + uint8 bMaxPacketSize0; + + /** + * @brief The device Vendor ID (VID) as assigned by the USB-IF. + */ + uint16 idVendor; + + /** + * @brief The device Product ID (PID) as assigned by the manufacturer. + */ + uint16 idProduct; + + /** + * @brief The device release number in BCD format. + */ + uint16 bcdDevice; + + /** + * @brief The index of a string descriptor describing the manufacturer. + */ + uint8 iManufacturer; + + /** + * @brief The index of a string descriptor describing the product. + */ + uint8 iProduct; + + /** + * @brief The index of a string descriptor describing the device's serial + * number. + */ + uint8 iSerialNumber; + + /** + * @brief The number of possible configurations offered by the device. + * This field indicates the number of distinct configuration + * descriptors that the device offers. + */ + uint8 bNumConfigurations; +} +PACKED tDeviceDescriptor; + +/****************************************************************************** + * + * USB Device Class codes used in the tDeviceDescriptor.bDeviceClass field. + * Definitions for the bDeviceSubClass and bDeviceProtocol fields are device + * specific and can be found in the appropriate device class header files. + * + *****************************************************************************/ +#define USB_CLASS_DEVICE 0x00u +#define USB_CLASS_AUDIO 0x01u +#define USB_CLASS_CDC 0x02u +#define USB_CLASS_HID 0x03u +#define USB_CLASS_PHYSICAL 0x05u +#define USB_CLASS_IMAGE 0x06u +#define USB_CLASS_PRINTER 0x07u +#define USB_CLASS_MASS_STORAGE 0x08u +#define USB_CLASS_HUB 0x09u +#define USB_CLASS_CDC_DATA 0x0au +#define USB_CLASS_SMART_CARD 0x0bu +#define USB_CLASS_SECURITY 0x0du +#define USB_CLASS_VIDEO 0x0eu +#define USB_CLASS_HEALTHCARE 0x0fu +#define USB_CLASS_DIAG_DEVICE 0xdcu +#define USB_CLASS_WIRELESS 0xe0u +#define USB_CLASS_MISC 0xefu +#define USB_CLASS_APP_SPECIFIC 0xfeu +#define USB_CLASS_VEND_SPECIFIC 0xffu +#define USB_CLASS_EVENTS 0xffffffffU + +/****************************************************************************** + * + * Generic values for undefined subclass and protocol. + * + *****************************************************************************/ +#define USB_SUBCLASS_UNDEFINED 0x00u +#define USB_PROTOCOL_UNDEFINED 0x00u + +/****************************************************************************** + * + * The following are the miscellaneous subclass values. + * + *****************************************************************************/ +#define USB_MISC_SUBCLASS_SYNC 0x01u +#define USB_MISC_SUBCLASS_COMMON 0x02u + +/****************************************************************************** + * + * These following are miscellaneous protocol values. + * + *****************************************************************************/ +#define USB_MISC_PROTOCOL_IAD 0x01u + +/** *************************************************************************** + * + * @brief This structure describes the USB device qualifier descriptor as + * defined in the USB 2.0 specification, section 9.6.2. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The length of this descriptor in bytes. All device qualifier + * descriptors are 10 bytes long. + */ + uint8 bLength; + + /** + * @brief The type of the descriptor. For a device descriptor, this will + * be USB_DTYPE_DEVICE_QUAL (6). + */ + uint8 bDescriptorType; + + /** + * @brief The USB Specification Release Number in BCD format. + * For USB 2.0, this will be 0x0200. + */ + uint16 bcdUSB; + + /** + * @brief The device class code. + */ + uint8 bDeviceClass; + + /** + * @brief The device subclass code. This value qualifies the value + * found in the bDeviceClass field. + */ + uint8 bDeviceSubClass; + + /** + * @brief The device protocol code. This value is qualified by the + * values of bDeviceClass and bDeviceSubClass. + */ + uint8 bDeviceProtocol; + + /** + * @brief The maximum packet size for endpoint zero when operating at + * a speed other than high speed. + */ + uint8 bMaxPacketSize0; + + /** + * @brief The number of other-speed configurations supported. + */ + uint8 bNumConfigurations; + + /** + * @brief Reserved for future use. Must be set to zero. + */ + uint8 bReserved; +} +PACKED tDeviceQualifierDescriptor; + +/** *************************************************************************** + * + * This structure describes the USB configuration descriptor as defined in + * USB 2.0 specification section 9.6.3. This structure also applies to the + * USB other speed configuration descriptor defined in section 9.6.4. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The length of this descriptor in bytes. All configuration + * descriptors are 9 bytes long. + */ + uint8 bLength; + + /** + * @brief The type of the descriptor. For a configuration descriptor, + * this will be USB_DTYPE_CONFIGURATION (2). + */ + uint8 bDescriptorType; + + /** + * @brief The total length of data returned for this configuration. + * This includes the combined length of all descriptors + * (configuration, interface, endpoint and class- or + * vendor-specific) returned for this configuration. + */ + uint16 wTotalLength; + + /** + * @brief The number of interface supported by this configuration. + */ + uint8 bNumInterfaces; + + /** + * @brief The value used as an argument to the SetConfiguration standard + * request to select this configuration. + */ + uint8 bConfigurationValue; + + /** + * @brief The index of a string descriptor describing this configuration. + */ + uint8 iConfiguration; + + /** + * @brief Attributes of this configuration. + */ + uint8 bmAttributes; + + /** + * @brief The maximum power consumption of the USB device from the bus + * in this configuration when the device is fully operational. + * This is expressed in units of 2mA so, for example, + * 100 represents 200mA. + */ + uint8 bMaxPower; +} +PACKED tConfigDescriptor; + +/****************************************************************************** + * + * Flags used in constructing the value assigned to the field + * tConfigDescriptor.bmAttributes. Note that bit 7 is reserved and must be set + * to 1. + * + *****************************************************************************/ +#define USB_CONF_ATTR_PWR_M 0xC0u + +#define USB_CONF_ATTR_SELF_PWR 0xC0u +#define USB_CONF_ATTR_BUS_PWR 0x80u +#define USB_CONF_ATTR_RWAKE 0xA0u + +/** *************************************************************************** + * + * This structure describes the USB interface descriptor as defined in USB + * 2.0 specification section 9.6.5. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The length of this descriptor in bytes. All interface + * descriptors are 9 bytes long. + */ + uint8 bLength; + + /** + * @brief The type of the descriptor. For an interface descriptor, this + * will be USB_DTYPE_INTERFACE (4). + */ + uint8 bDescriptorType; + + /** + * @brief The number of this interface. This is a zero based index into + * the array of concurrent interfaces supported by this + * configuration. + */ + uint8 bInterfaceNumber; + + /** + * @brief The value used to select this alternate setting for the + * interface defined in bInterfaceNumber. + */ + uint8 bAlternateSetting; + + /** + * @brief The number of endpoints used by this interface (excluding + * endpoint zero). + */ + uint8 bNumEndpoints; + + /** + * @brief The interface class code as assigned by the USB-IF. + */ + uint8 bInterfaceClass; + + /** + * @brief The interface subclass code as assigned by the USB-IF. + */ + uint8 bInterfaceSubClass; + + /** + * @brief The interface protocol code as assigned by the USB-IF. + */ + uint8 bInterfaceProtocol; + + /** + * @brief The index of a string descriptor describing this interface. + */ + uint8 iInterface; +} +PACKED tInterfaceDescriptor; + +/** *************************************************************************** + * + * This structure describes the USB endpoint descriptor as defined in USB + * 2.0 specification section 9.6.6. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The length of this descriptor in bytes. All endpoint + * descriptors are 7 bytes long. + */ + uint8 bLength; + + /** + * @brief The type of the descriptor. For an endpoint descriptor, this + * will be USB_DTYPE_ENDPOINT (5). + */ + uint8 bDescriptorType; + + /** + * @brief The address of the endpoint. This field contains the endpoint + * number ORed with flag USB_EP_DESC_OUT or USB_EP_DESC_IN to + * indicate the endpoint direction. + */ + uint8 bEndpointAddress; + + /** + * @brief The endpoint transfer type, USB_EP_ATTR_CONTROL, + * USB_EP_ATTR_ISOC, USB_EP_ATTR_BULK or USB_EP_ATTR_INT and, + * if isochronous, additional flags indicating usage type and + * synchronization method. + */ + uint8 bmAttributes; + + /** + * @brief The maximum packet size this endpoint is capable of sending or + * receiving when this configuration is selected. For high speed + * isochronous or interrupt endpoints, bits 11 and 12 are used to + * pass additional information. + */ + uint16 wMaxPacketSize; + + /** + * @brief The polling interval for data transfers expressed in frames or + * micro frames depending upon the operating speed. + */ + uint8 bInterval; +} +PACKED tEndpointDescriptor; + +/****************************************************************************** + * + * Flags used in constructing the value assigned to the field + * tEndpointDescriptor.bEndpointAddress. + * + *****************************************************************************/ +#define USB_EP_DESC_OUT 0x00u +#define USB_EP_DESC_IN 0x80u +#define USB_EP_DESC_NUM_M 0x0fu + +/****************************************************************************** + * + * Mask used to extract the maximum packet size (in bytes) from the + * wMaxPacketSize field of the endpoint descriptor. + * + *****************************************************************************/ +#define USB_EP_MAX_PACKET_COUNT_M 0x07FFu + +/****************************************************************************** + * + * Endpoint attributes used in tEndpointDescriptor.bmAttributes. + * + *****************************************************************************/ +#define USB_EP_ATTR_CONTROL 0x00u +#define USB_EP_ATTR_ISOC 0x01u +#define USB_EP_ATTR_BULK 0x02u +#define USB_EP_ATTR_INT 0x03u +#define USB_EP_ATTR_TYPE_M 0x03u + +#define USB_EP_ATTR_ISOC_M 0x0cu +#define USB_EP_ATTR_ISOC_NOSYNC 0x00u +#define USB_EP_ATTR_ISOC_ASYNC 0x04u +#define USB_EP_ATTR_ISOC_ADAPT 0x08u +#define USB_EP_ATTR_ISOC_SYNC 0x0cu +#define USB_EP_ATTR_USAGE_M 0x30u +#define USB_EP_ATTR_USAGE_DATA 0x00u +#define USB_EP_ATTR_USAGE_FEEDBACK 0x10u +#define USB_EP_ATTR_USAGE_IMPFEEDBACK 0x20u + +/** *************************************************************************** + * + * @brief This structure describes the USB string descriptor for index 0 as + * defined in USB 2.0 specification section 9.6.7. Note that the + * number of language IDs is variable and can be determined by + * examining bLength. The number of language IDs present in the + * descriptor is given by ((bLength - 2) / 2). + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The length of this descriptor in bytes. This value will vary + * depending upon the number of language codes provided in the + * descriptor. + */ + uint8 bLength; + + /** + * @brief The type of the descriptor. For a string descriptor, this will + * be USB_DTYPE_STRING (3). + */ + uint8 bDescriptorType; + + /** + * @brief The language code (LANGID) for the first supported language. + * Note that this descriptor may support multiple languages, in + * which case, the number of elements in the wLANGID array will + * increase and bLength will be updated accordingly. + */ + uint16 wLANGID[1]; +} +PACKED tString0Descriptor; + +/** *************************************************************************** + * + * @brief This structure describes the USB string descriptor for all string + * indexes other than 0 as defined in USB 2.0 specification + * section 9.6.7. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The length of this descriptor in bytes. This value will be + * 2 greater than the number of bytes comprising the UNICODE + * string that the descriptor contains. + */ + uint8 bLength; + + /** + * @brief The type of the descriptor. For a string descriptor, this will + * be USB_DTYPE_STRING (3). + */ + uint8 bDescriptorType; + + /** + * @brief The first byte of the UNICODE string. This string is not NULL + * terminated. Its length (in bytes) can be computed by + * subtracting 2 from the value in the bLength field. + */ + uint8 bString; +} +PACKED tStringDescriptor; + +/** *************************************************************************** + * + * Write a 2 byte uint16 value to a USB descriptor block. + * + * @param usValue is the two byte uint16 that is to be written to + * the descriptor. + * + * This helper macro is used in descriptor definitions to write two-byte + * values. Since the configuration descriptor contains all interface and + * endpoint descriptors in a contiguous block of memory, these descriptors are + * typically defined using an array of bytes rather than as packed structures. + * + * @return Not a function. + * + *****************************************************************************/ +#define USBShort(usValue) (uint8_t)((uint16_t)(usValue) & (uint16_t)0x00ffU), (uint8_t)((uint16_t)(usValue) >> 8U) + +/** *************************************************************************** + * + * Write a 3 byte uint32 value to a USB descriptor block. + * + * @param ulValue is the three byte unsigned value that is to be written to the + * descriptor. + * + * This helper macro is used in descriptor definitions to write three-byte + * values. Since the configuration descriptor contains all interface and + * endpoint descriptors in a contiguous block of memory, these descriptors are + * typically defined using an array of bytes rather than as packed structures. + * + * @return Not a function. + * + *****************************************************************************/ +#define USB3Byte(ulValue) (ulValue & 0xff), \ + ((ulValue >> 8) & 0xff), \ + ((ulValue >> 16) & 0xff) + +/** *************************************************************************** + * + * Write a 4 byte uint32 value to a USB descriptor block. + * + * @param ulValue is the four byte uint32 that is to be written to the + * descriptor. + * + * This helper macro is used in descriptor definitions to write four-byte + * values. Since the configuration descriptor contains all interface and + * endpoint descriptors in a contiguous block of memory, these descriptors are + * typically defined using an array of bytes rather than as packed structures. + * + * @return Not a function. + * + *****************************************************************************/ +#define USBLong(ulValue) (ulValue & 0xff), \ + ((ulValue >> 8) & 0xff), \ + ((ulValue >> 16) & 0xff), \ + ((ulValue >> 24) & 0xff) + +/** *************************************************************************** + * + * Traverse to the next USB descriptor in a block. + * + * @param ptr points to the first byte of a descriptor in a block of + * USB descriptors. + * + * This macro aids in traversing lists of descriptors by returning a pointer + * to the next descriptor in the list given a pointer to the current one. + * + * @return Returns a pointer to the next descriptor in the block following + * @e ptr. + * + *****************************************************************************/ +#define NEXT_USB_DESCRIPTOR(ptr) \ + (tDescriptorHeader *)(((uint8 *)(ptr)) + \ + (ptr)->bLength) + +/****************************************************************************** + * + * Return to default packing when using the IAR Embedded Workbench compiler. + * + *****************************************************************************/ +#if defined(ewarm) || defined(__IAR_SYSTEMS_ICC__) +#pragma pack() +#endif + +/** *************************************************************************** + * + * Close the usbchap9_src Doxygen group. + * @} + * + *****************************************************************************/ + +/** *************************************************************************** + * + * @ingroup device_api + * @{ + * + *****************************************************************************/ + +/** *************************************************************************** + * + * @brief Function prototype for any standard USB request. + * + *****************************************************************************/ +typedef void (* tStdRequest)(void * pvInstance, tUSBRequest * pUSBRequest); + +/** *************************************************************************** + * + * @brief Data callback for receiving data from an endpoint. + * + *****************************************************************************/ +typedef void (* tInfoCallback)(void * pvInstance, uint32 ulInfo); + +/** *************************************************************************** + * + * @brief Callback made to indicate that an interface alternate setting + * change has occurred. + * + *****************************************************************************/ +typedef void (* tInterfaceCallback)(void * pvInstance, + uint8 ucInterfaceNum, + uint8 ucAlternateSetting); + +/** *************************************************************************** + * + * @brief Generic interrupt handler callbacks. + * + *****************************************************************************/ +typedef void (* tUSBIntHandler)(void * pvInstance); + +/** *************************************************************************** + * + * @brief Interrupt handler callbacks that have status information. + * + *****************************************************************************/ +typedef void (* tUSBEPIntHandler)(void * pvInstance, + uint32 ulStatus); + +/** *************************************************************************** + * + * @brief Generic handler callbacks that are used when the callers needs to + * call into an instance of class. + * + *****************************************************************************/ +typedef void (* tUSBDeviceHandler)(void * pvInstance, + uint32 ulRequest, + void * pvRequestData); + +/** *************************************************************************** + * + * @brief USB event handler functions used during enumeration and operation + * of the device stack. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief This callback is made whenever the USB host requests a + * non-standard descriptor from the device. + */ + tStdRequest pfnGetDescriptor; + + /** + * @brief This callback is made whenever the USB host makes a + * non-standard request. + */ + tStdRequest pfnRequestHandler; + + /** + * @brief This callback is made in response to a SetInterface request + * from the host. + */ + tInterfaceCallback pfnInterfaceChange; + + /** + * @brief This callback is made in response to a SetConfiguration + * request from the host. + */ + tInfoCallback pfnConfigChange; + + /** + * @brief This callback is made when data has been received following + * to a call to USBDCDRequestDataEP0. + */ + tInfoCallback pfnDataReceived; + + /** + * @brief This callback is made when data has been transmitted following + * a call to USBDCDSendDataEP0. + */ + tInfoCallback pfnDataSent; + + /** + * @brief This callback is made when a USB reset is detected. + */ + tUSBIntHandler pfnResetHandler; + + /** + * @brief This callback is made when the bus has been inactive long + * enough to trigger a suspend condition. + */ + tUSBIntHandler pfnSuspendHandler; + + /** + * @brief This is called when resume signaling is detected. + */ + tUSBIntHandler pfnResumeHandler; + + /** + * @brief This callback is made when the device is disconnected from + * the USB bus. + */ + tUSBIntHandler pfnDisconnectHandler; + + /** + * @brief This callback is made to inform the device of activity on + * all endpoints other than endpoint zero. + */ + tUSBEPIntHandler pfnEndpointHandler; + + /** + * @brief This generic handler is provided to allow requests based on + * a given instance to be passed into a device. This is commonly + * used by a top level composite device that is using multiple + * instances of a class. + */ + tUSBDeviceHandler pfnDeviceHandler; +} +tCustomHandlers; + +/** *************************************************************************** + * + * @brief This structure defines how a given endpoint's FIFO is configured in + * relation to the maximum packet size for the endpoint as specified + * in the endpoint descriptor. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The multiplier to apply to an endpoint's maximum packet size + * when configuring the FIFO for that endpoint. For example, + * setting this value to 2 will result in a 128 byte FIFO being + * configured if bDoubleBuffer is FALSE and the associated + * endpoint is set to use a 64 byte maximum packet size. + */ + uint8 cMultiplier; + + /** + * @brief This field indicates whether to configure an endpoint's FIFO + * to be double- or single-buffered. If TRUE, a double-buffered + * FIFO is created and the amount of required FIFO storage is + * multiplied by two. + */ + tBoolean bDoubleBuffer; + + /** + * @brief This field defines endpoint mode flags which cannot be deduced + * from the configuration descriptor, namely any in the set + * USB_EP_AUTO_xxx or USB_EP_DMA_MODE_x. USBDCDConfig adds these + * flags to the endpoint mode and direction determined from the + * config descriptor before it configures the endpoint using a + * call to USBDevEndpointConfigSet(). + */ + uint16 usEPFlags; +} +tFIFOEntry; + +/** *************************************************************************** + * + * @brief This structure defines endpoint and FIFO configuration information + * for all endpoints that the device wishes to use. This information + * cannot be determined by examining the USB configuration descriptor + * and is provided to USBDCDConfig by the application to allow the USB + * controller endpoints to be correctly configured. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief An array containing one FIFO entry for each of the IN + * endpoints. Note that endpoint 0 is configured and managed by + * the USB device stack so is excluded from this array. The + * index 0 entry of the array corresponds to endpoint 1, + * index 1 to endpoint 2, etc. + */ + tFIFOEntry sIn[USBLIB_NUM_EP - 1]; + + /** + * @brief An array containing one FIFO entry for each of the OUT + * endpoints. Note that endpoint 0 is configured and managed by + * the USB device stack so is excluded from this array. + * The index 0 entry of the array corresponds to endpoint 1, + * index 1 to endpoint 2, etc. + */ + tFIFOEntry sOut[USBLIB_NUM_EP - 1]; +} +tFIFOConfig; + +/** *************************************************************************** + * + * @brief This structure defines a contiguous block of data which contains a + * group of descriptors that form part of a configuration descriptor + * for a device. It is assumed that a config section contains only + * whole descriptors. It is not valid to split a single descriptor + * across multiple sections. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The number of bytes of descriptor data pointed to by pucData. + */ + uint8 ucSize; + + /** + * @brief A pointer to a block of data containing an integral number of + * SB descriptors which form part of a larger configuration + * descriptor. + */ + const uint8 * pucData; +} +tConfigSection; + +/** *************************************************************************** + * + * @brief This is the top level structure defining a USB device configuration + * descriptor. A configuration descriptor contains a collection of + * device-specific descriptors in addition to the basic config, + * interface and endpoint descriptors. To allow flexibility in + * constructing the configuration, the descriptor is described in + * terms of a list of data blocks. The first block must contain the + * configuration descriptor itself and the following blocks are + * appended to this in order to produce the full descriptor sent to + * the host in response to a GetDescriptor request for the + * configuration descriptor. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The number of sections comprising the full descriptor for this + * configuration. + */ + uint8 ucNumSections; + + /** + * @brief A pointer to an array of ucNumSections section pointers which + * must be concatenated to form the configuration descriptor. + */ + const tConfigSection * const * psSections; +} +tConfigHeader; + +/** *************************************************************************** + * + * @brief This structure is passed to the USB library on a call to USBDCDInit + * and provides the library with information about the device that the + * application is implementing. It contains functions pointers for + * the various USB event handlers and pointers to each of the standard + * device descriptors. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief A pointer to a structure containing pointers to event handler + * functions provided by the client to support the operation of + * this device. + */ + tCustomHandlers sCallbacks; + + /** + * @brief A pointer to the device descriptor for this device. + */ + const uint8 * pDeviceDescriptor; + + /** + * @brief A pointer to an array of configuration descriptor pointers. + * Each entry in the array corresponds to one configuration that + * the device may be set to use by the USB host. The number of + * entries in the array must match the bNumConfigurations value + * in the device descriptor array, pDeviceDescriptor. + */ + const tConfigHeader * const * ppConfigDescriptors; + + /** + * @brief A pointer to the string descriptor array for this device. + * This array must be arranged as follows: + * + * - [0] - Standard descriptor containing supported language codes. + * - [1] - String 1 for the first language listed in descriptor 0. + * - [2] - String 2 for the first language listed in descriptor 0. + * - ... + * - [n] - String n for the first language listed in descriptor 0. + * - [n+1] - String 1 for the second language listed in descriptor 0. + * - ... + * - [2n] - String n for the second language listed in descriptor 0. + * - [2n+1]- String 1 for the third language listed in descriptor 0. + * - ... + * - [3n] - String n for the third language listed in descriptor 0. + * + * and so on. + */ + const uint8 * const * ppStringDescriptors; + + /** + * @brief The total number of descriptors provided in the ppStringDescriptors + * array. + */ + uint32 ulNumStringDescriptors; + + /** + * @brief A structure defining how the USB controller FIFO is to be + * partitioned between the various endpoints. This member can be + * set to point to g_sUSBDefaultFIFOConfig if the default FIFO + * configuration is acceptable. This configuration sets each + * endpoint FIFO to be single buffered and sized to hold the + * maximum packet size for the endpoint. + */ + const tFIFOConfig * psFIFOConfig; + + /** + * @brief This value will be passed back to all call back functions so + * that they have access to individual instance data based on the + * this pointer. + */ + void * pvInstance; +} +tDeviceInfo; + +/** *************************************************************************** + * + * Close the Doxygen group. + * @} + * + *****************************************************************************/ + +/** *************************************************************************** + * + * @ingroup general_usblib_api + * @{ + * + *****************************************************************************/ + +/****************************************************************************** + * + * USB descriptor parsing functions found in usbdesc.c + * + *****************************************************************************/ + +/** *************************************************************************** + * + * @brief The USB_DESC_ANY label is used as a wild card in several of the + * descriptor parsing APIs to determine whether or not particular + * search criteria should be ignored. + * + *****************************************************************************/ +#define USB_DESC_ANY 0xFFFFFFFFu + +extern uint32 USBDescGetNum(tDescriptorHeader * psDesc, + uint32 ulSize, uint32 ulType); +extern tDescriptorHeader * USBDescGet(tDescriptorHeader * psDesc, + uint32 ulSize, + uint32 ulType, + uint32 ulIndex); +extern uint32 + USBDescGetNumAlternateInterfaces(tConfigDescriptor * psConfig, + uint8 ucInterfaceNumber); +extern tInterfaceDescriptor * USBDescGetInterface(tConfigDescriptor * psConfig, + uint32 ulIndex, + uint32 ulAltCfg); +extern tEndpointDescriptor * + USBDescGetInterfaceEndpoint(tInterfaceDescriptor * psInterface, + uint32 ulIndex, + uint32 ulSize); + +/** *************************************************************************** + * + * The operating mode required by the USB library client. This type is used + * by applications which wish to be able to switch between host and device + * modes by calling the USBStackModeSet() API. + * + *****************************************************************************/ +typedef enum +{ + /** + * @brief The application wishes to operate as a USB device. + */ + USB_MODE_DEVICE = 0, + + /** + * @brief The application wishes to operate as a USB host. + */ + USB_MODE_HOST, + + /** + * @brief The application wishes to operate as both a host and device + * using On-The-Go protocols to negotiate. + */ + USB_MODE_OTG, + + /** + * @brief A marker indicating that no USB mode has yet been set by the + * application. + */ + USB_MODE_NONE +} tUSBMode; + +/** *************************************************************************** + * + * A pointer to a USB mode callback function. This function is called by the + * USB library to indicate to the application which operating mode it should + * use, host or device. + * + *****************************************************************************/ +typedef void (* tUSBModeCallback)(uint32 ulIndex, tUSBMode eMode); + +/** *************************************************************************** + * + * Mode selection and dual mode interrupt steering functions. + * + *****************************************************************************/ +extern void USBStackModeSet(uint32 ulIndex, tUSBMode eUSBMode, + tUSBModeCallback pfnCallback); +extern void USBDualModeInit(uint32 ulIndex); +extern void USBDualModeTerm(uint32 ulIndex); +extern void USBOTGMain(uint32 ulMsTicks); +extern void USBOTGPollRate(uint32 ulIndex, uint32 ulPollRate); +extern void USBOTGModeInit(uint32 ulIndex, uint32 ulPollRate, + void * pHostData, uint32 ulHostDataSize); +extern void USBOTGModeTerm(uint32 ulIndex); +extern void USB0OTGModeIntHandler(void); +extern void USB0DualModeIntHandler(void); + +/** *************************************************************************** + * + * USB callback function. + * + * @param pvCBData is the callback pointer associated with the instance + * generating the callback. This is a value provided by the client during + * initialization of the instance making the callback. + * @param ulEvent is the identifier of the asynchronous event which is being + * notified to the client. + * @param ulMsgParam is an event-specific parameter. + * @param pvMsgData is an event-specific data pointer. + * + * A function pointer provided to the USB layer by the application + * which will be called to notify it of all asynchronous events relating to + * data transmission or reception. This callback is used by device class + * drivers and host pipe functions. + * + * @return Returns an event-dependent value. + * + *****************************************************************************/ +typedef uint32 (* tUSBCallback)(void * pvCBData, uint32 ulEvent, + uint32 ulMsgParam, + void * pvMsgData); + +/** *************************************************************************** + * + * Base identifiers for groups of USB events. These are used by both the + * device class drivers and host layer. + * + * USB_CLASS_EVENT_BASE is the lowest identifier that should be used for + * a class-specific event. Individual event bases are defined for each + * of the supported device class drivers. Events with IDs between + * USB_EVENT_BASE and USB_CLASS_EVENT_BASE are reserved for stack use. + * + *****************************************************************************/ +#define USB_EVENT_BASE 0x0000u +#define USB_CLASS_EVENT_BASE 0x8000u + +/** *************************************************************************** + * + * Event base identifiers for the various device classes supported in host + * and device modes. + * The first 0x800 values of a range are reserved for the device specific + * messages and the second 0x800 values of a range are used for the host + * specific messages for a given class. + * + *****************************************************************************/ +#define USBD_CDC_EVENT_BASE (USB_CLASS_EVENT_BASE + 0u) +#define USBD_HID_EVENT_BASE (USB_CLASS_EVENT_BASE + 0x1000u) +#define USBD_HID_KEYB_EVENT_BASE (USBD_HID_EVENT_BASE + 0x100u) +#define USBD_BULK_EVENT_BASE (USB_CLASS_EVENT_BASE + 0x2000u) +#define USBD_MSC_EVENT_BASE (USB_CLASS_EVENT_BASE + 0x3000u) +#define USBD_AUDIO_EVENT_BASE (USB_CLASS_EVENT_BASE + 0x4000u) + +#define USBH_CDC_EVENT_BASE (USBD_CDC_EVENT_BASE + 0x800u) +#define USBH_HID_EVENT_BASE (USBD_HID_EVENT_BASE + 0x800u) +#define USBH_BULK_EVENT_BASE (USBD_BULK_EVENT_BASE + 0x800u) +#define USBH_MSC_EVENT_BASE (USBD_MSC_EVENT_BASE + 0x800u) +#define USBH_AUDIO_EVENT_BASE (USBD_AUDIO_EVENT_BASE + 0x800u) + +/** *************************************************************************** + * + * General events supported by device classes and host pipes. + * + *****************************************************************************/ + +/** + * @brief The device is now attached to a USB host and ready to begin sending + * and receiving data (used by device classes only). + */ +#define USB_EVENT_CONNECTED (USB_EVENT_BASE + 0u) + +/** + * @brief The device has been disconnected from the USB host (used by device + * classes only). + * + * Note: Due to a hardware erratum in revision A of LM3S3748, this + * event is not posted to self-powered USB devices when they are disconnected + * from the USB host. + */ +#define USB_EVENT_DISCONNECTED (USB_EVENT_BASE + 1u) + +/** + * @brief Data has been received and is in the buffer provided. + */ +#define USB_EVENT_RX_AVAILABLE (USB_EVENT_BASE + 2u) + +/** + * @brief This event is sent by a lower layer to inquire about the amount of + * unprocessed data buffered in the layers above. It is used in + * cases where a low level driver needs to ensure that all preceding + * data has been processed prior to performing some action or making + * some notification. Clients receiving this event should return the + * number of bytes of data that are unprocessed or 0 if no outstanding + * data remains. + */ +#define USB_EVENT_DATA_REMAINING (USB_EVENT_BASE + 3u) + +/** + * @brief This event is sent by a lower layer supporting DMA to request a + * buffer in which the next received packet may be stored. + * The \e ulMsgValue parameter indicates the maximum size of packet + * that can be received in this channel and \e pvMsgData points to + * storage which should be written with the returned buffer pointer. + * The return value from the callback should be the size of the buffer + * allocated (which may be less than the maximum size passed in + * \e ulMsgValue if the client knows that fewer bytes are expected + * to be received) or 0 if no buffer is being returned. + */ +#define USB_EVENT_REQUEST_BUFFER (USB_EVENT_BASE + 4u) + +/** + * @brief Data has been sent and acknowledged. If this event is received via + * the USB buffer callback, the \e ulMsgValue parameter indicates the + * number of bytes from the transmit buffer that have been successfully + * transmitted and acknowledged. + */ +#define USB_EVENT_TX_COMPLETE (USB_EVENT_BASE + 5u) + +/** + * @brief An error has been reported on the channel or pipe. The + * \e ulMsgValue parameter indicates the source(s) of the error and + * is the logical OR combination of "USBERR_" flags defined below. + */ +#define USB_EVENT_ERROR (USB_EVENT_BASE + 6u) + +/** + * @brief The bus has entered suspend state. + */ +#define USB_EVENT_SUSPEND (USB_EVENT_BASE + 7u) + +/** + * @brief The bus has left suspend state. + */ +#define USB_EVENT_RESUME (USB_EVENT_BASE + 8u) + +/** + * @brief A scheduler event has occurred. + */ +#define USB_EVENT_SCHEDULER (USB_EVENT_BASE + 9u) +/** + * @brief A device or host has detected a stall condition. + */ +#define USB_EVENT_STALL (USB_EVENT_BASE + 10u) + +/** + * @brief The host detected a power fault condition. + */ +#define USB_EVENT_POWER_FAULT (USB_EVENT_BASE + 11u) + +/** + * @brief The controller has detected a A-Side cable and needs power applied. + * This is only generated on OTG parts if automatic power control is + * disabled. + */ +#define USB_EVENT_POWER_ENABLE (USB_EVENT_BASE + 12u) + +/** + * @brief The controller needs power removed, This is only generated on OTG + * parts if automatic power control is disabled. + */ +#define USB_EVENT_POWER_DISABLE (USB_EVENT_BASE + 13u) + +/** + * @brief Used with pfnDeviceHandler handler function is classes to indicate + * changes in the interface number by a class outside the class being + * accessed. Typically this is when composite device class is in use. + * + * The \e pvInstance value should point to an instance of the device being + * accessed. + * + * The \e ulRequest should be USB_EVENT_COMP_IFACE_CHANGE. + * + * The \e pvRequestData should point to a two byte array where the first value + * is the old interface number and the second is the new interface number. + */ +#define USB_EVENT_COMP_IFACE_CHANGE (USB_EVENT_BASE + 14u) + +/** + * @brief Used with pfnDeviceHandler handler function is classes to indicate + * changes in endpoint number by a class outside the class being + * accessed. Typically this is when composite device class is in use. + * + * The \e pvInstance value should point to an instance of the device being + * accessed. + * + * The \e ulRequest should be USB_EVENT_COMP_EP_CHANGE. + * + * The \e pvRequestData should point to a two byte array where the first value + * is the old endpoint number and the second is the new endpoint number. The + * endpoint numbers should be exactly as USB specification defines them and + * bit 7 set indicates an IN endpoint and bit 7 clear indicates an OUT + * endpoint. + */ +#define USB_EVENT_COMP_EP_CHANGE (USB_EVENT_BASE + 15u) + +/** + * @brief Used with pfnDeviceHandler handler function is classes to indicate + * changes in string index number by a class outside the class being + * accessed. Typically this is when composite device class is in use. + * + * The \e pvInstance value should point to an instance of the device being + * accessed. + * + * The \e ulRequest should be USB_EVENT_COMP_STR_CHANGE. + * + * The \e pvRequestData should point to a two byte array where the first value + * is the old string index and the second is the new string index. + */ +#define USB_EVENT_COMP_STR_CHANGE (USB_EVENT_BASE + 16u) + +/** + * @brief Used with pfnDeviceHandler handler function is classes to allow the + * device class to make final adjustments to the configuration + * descriptor. This is only used when a device class is used in a + * composite device class is in use. + * + * The \e pvInstance value should point to an instance of the device being + * accessed. + * + * The \e ulRequest should be USB_EVENT_COMP_CONFIG. + * + * The \e pvRequestData should point to the beginning of the configuration + * descriptor for the device instance. + */ +#define USB_EVENT_COMP_CONFIG (USB_EVENT_BASE + 17u) + +/** *************************************************************************** + * + * Error sources reported via USB_EVENT_ERROR. + * + *****************************************************************************/ + +/** + * @brief The host received an invalid PID in a transaction. + */ +#define USBERR_HOST_IN_PID_ERROR 0x01000000u + +/** + * @brief The host did not receive a response from a device. + */ +#define USBERR_HOST_IN_NOT_COMP 0x00100000u + +/** + * @brief The host received a stall on an IN endpoint. + */ +#define USBERR_HOST_IN_STALL 0x00400000u + +/** + * @brief The host detected a CRC or bit-stuffing error (isochronous mode). + */ +#define USBERR_HOST_IN_DATA_ERROR 0x00080000u + +/** + * @brief The host received NAK on an IN endpoint for longer than the + * specified timeout period (interrupt, bulk and control modes). + */ +#define USBERR_HOST_IN_NAK_TO 0x00080000u + +/** + * @brief The host failed to communicate with a device via an IN endpoint. + */ +#define USBERR_HOST_IN_ERROR 0x00040000u + +/** + * @brief The host receive FIFO is full. + */ +#define USBERR_HOST_IN_FIFO_FULL 0x00020000u /* RX FIFO full */ +/** + * @brief The host received NAK on an OUT endpoint for longer than the + * specified timeout period (bulk, interrupt and control modes). + */ +#define USBERR_HOST_OUT_NAK_TO 0x00000080u + +/** + * @brief The host did not receive a response from a device (isochronous mode). + */ +#define USBERR_HOST_OUT_NOT_COMP 0x00000080u + +/** + * @brief The host received a stall on an OUT endpoint. + */ +#define USBERR_HOST_OUT_STALL 0x00000020u + +/** + * @brief The host failed to communicate with a device via an OUT endpoint. + */ +#define USBERR_HOST_OUT_ERROR 0x00000004u + +/** + * @brief The host received NAK on endpoint 0 for longer than the configured + * timeout. + */ +#define USBERR_HOST_EP0_NAK_TO 0x00000080u + +/** + * @brief The host failed to communicate with a device via an endpoint zero. + */ +#define USBERR_HOST_EP0_ERROR 0x00000010u + +/** + * @brief The device detected a CRC error in received data. + */ +#define USBERR_DEV_RX_DATA_ERROR 0x00080000u + +/** + * @brief The device was unable to receive a packet from the host since the + * receive FIFO is full. + */ +#define USBERR_DEV_RX_OVERRUN 0x00040000u + +/** + * @brief The device receive FIFO is full. + */ +#define USBERR_DEV_RX_FIFO_FULL 0x00020000u /* RX FIFO full */ + +/** *************************************************************************** + * + * Close the general_usblib_api Doxygen group. + * @} + * + *****************************************************************************/ + +/** *************************************************************************** + * + * @ingroup usblib_buffer_api + * @{ + * + *****************************************************************************/ + +/** *************************************************************************** + * + * @brief A function pointer type which describes either a class driver + * packet read or packet write function (both have the same prototype) + * to the USB buffer object. + * + *****************************************************************************/ +typedef uint32 (* tUSBPacketTransfer)(void * pvHandle, + uint8 * pcData, + uint32 ulLength, + tBoolean bLast); + +/** *************************************************************************** + * + * @brief A function pointer type which describes either a class driver + * transmit or receive packet available function (both have the same + * prototype) to the USB buffer object. + * + *****************************************************************************/ +typedef uint32 (* tUSBPacketAvailable)(void * pvHandle); + +/** *************************************************************************** + * + * @brief The number of bytes of workspace that each USB buffer object + * requires. This workspace memory is provided to the buffer on + * USBBufferInit() in the \e pvWorkspace field of the \e tUSBBuffer + * structure. + * + *****************************************************************************/ +#define USB_BUFFER_WORKSPACE_SIZE 16 + +/** *************************************************************************** + * + * @brief The structure used by the application to initialize a buffer object + * that will provide buffered access to either a transmit or receive + * channel. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief This field sets the mode of the buffer. If TRUE, the buffer + * operates as a transmit buffer and supports calls to + * USBBufferWrite by the client. If FALSE, the buffer operates + * as a receive buffer and supports calls to USBBufferRead. + */ + tBoolean bTransmitBuffer; + + /** + * @brief A pointer to the callback function which will be called to + * notify the application of all asynchronous events related to + * the operation of the buffer. + */ + tUSBCallback pfnCBack; + + /** + * @brief A pointer that the buffer will pass back to the client in the + * first parameter of all callbacks related to this instance. + */ + void * pvCBData; + + /** + * @brief The function which should be called to transmit a packet of + * data in transmit mode or receive a packet in receive mode. + */ + tUSBPacketTransfer pfnTransfer; + + /** + * @brief The function which should be called to determine if the + * endpoint is ready to accept a new packet for transmission in + * transmit mode or to determine the size of the buffer required + * to read a packet in receive mode. + */ + tUSBPacketAvailable pfnAvailable; + + /** + * @brief The handle to pass to the low level function pointers provided + * in the pfnTransfer and pfnAvailable members. For USB device + * use, this is the psDevice parameter required by the relevant + * device class driver APIs. For USB host use, this is the pipe + * identifier returned by USBHCDPipeAlloc. + */ + void * pvHandle; + + /** + * @brief A pointer to memory to be used as the ring buffer for this + * instance. + */ + uint8 * pcBuffer; + + /** + * @brief The size, in bytes, of the buffer pointed to by pcBuffer. + */ + uint32 ulBufferSize; + + /** + * @brief A pointer to USB_BUFFER_WORKSPACE_SIZE bytes of RAM that the + * buffer object can use for workspace. + */ + void * pvWorkspace; +} +tUSBBuffer; + +/** *************************************************************************** + * + * @brief The structure used for encapsulating all the items associated with + * a ring buffer. + * + *****************************************************************************/ +typedef struct +{ + /** + * @brief The ring buffer size. + */ + uint32 ulSize; + + /** + * @brief The ring buffer write index. + */ + volatile uint32 ulWriteIndex; + + /** + * @brief The ring buffer read index. + */ + volatile uint32 ulReadIndex; + + /** + * @brief The ring buffer. + */ + uint8 * pucBuf; +} +tUSBRingBufObject; + +/** *************************************************************************** + * + * USB buffer API function prototypes. + * + *****************************************************************************/ +extern const tUSBBuffer * USBBufferInit(const tUSBBuffer * psBuffer); +extern void USBBufferInfoGet(const tUSBBuffer * psBuffer, + tUSBRingBufObject * psRingBuf); +extern void * USBBufferCallbackDataSet(tUSBBuffer * psBuffer, void * pvCBData); +extern uint32 USBBufferWrite(const tUSBBuffer * psBuffer, + const uint8 * pucData, + uint32 ulLength); +extern void USBBufferDataWritten(const tUSBBuffer * psBuffer, + uint32 ulLength); +extern void USBBufferDataRemoved(const tUSBBuffer * psBuffer, + uint32 ulLength); +extern void USBBufferFlush(const tUSBBuffer * psBuffer); +extern uint32 USBBufferRead(const tUSBBuffer * psBuffer, + uint8 * pucData, + uint32 ulLength); +extern uint32 USBBufferDataAvailable(const tUSBBuffer * psBuffer); +extern uint32 USBBufferSpaceAvailable(const tUSBBuffer * psBuffer); +extern uint32 USBBufferEventCallback(void * pvCBData, + uint32 ulEvent, + uint32 ulMsgValue, + void * pvMsgData); +extern tBoolean USBRingBufFull(tUSBRingBufObject * ptUSBRingBuf); +extern tBoolean USBRingBufEmpty(tUSBRingBufObject * ptUSBRingBuf); +extern void USBRingBufFlush(tUSBRingBufObject * ptUSBRingBuf); +extern uint32 USBRingBufUsed(tUSBRingBufObject * ptUSBRingBuf); +extern uint32 USBRingBufFree(tUSBRingBufObject * ptUSBRingBuf); +extern uint32 USBRingBufContigUsed(tUSBRingBufObject * ptUSBRingBuf); +extern uint32 USBRingBufContigFree(tUSBRingBufObject * ptUSBRingBuf); +extern uint32 USBRingBufSize(tUSBRingBufObject * ptUSBRingBuf); +extern uint8 USBRingBufReadOne(tUSBRingBufObject * ptUSBRingBuf); +extern void USBRingBufRead(tUSBRingBufObject * ptUSBRingBuf, + uint8 * pucData, uint32 ulLength); +extern void USBRingBufWriteOne(tUSBRingBufObject * ptUSBRingBuf, + uint8 ucData); +extern void USBRingBufWrite(tUSBRingBufObject * ptUSBRingBuf, + const uint8 pucData[], + uint32 ulLength); +extern void USBRingBufAdvanceWrite(tUSBRingBufObject * ptUSBRingBuf, + uint32 ulNumBytes); +extern void USBRingBufAdvanceRead(tUSBRingBufObject * ptUSBRingBuf, + uint32 ulNumBytes); +extern void USBRingBufInit(tUSBRingBufObject * ptUSBRingBuf, + uint8 * pucBuf, uint32 ulSize); + +/** *************************************************************************** + * + * Close the Doxygen group. + * @} + * + *****************************************************************************/ + +/****************************************************************************** + * + * Mark the end of the C bindings section for C++ compilers. + * + *****************************************************************************/ +#ifdef __cplusplus +} +#endif + +#endif /* __USBLIB_H__ */ Index: firmware/source/adc.c =================================================================== diff -u --- firmware/source/adc.c (revision 0) +++ firmware/source/adc.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,1182 @@ +/** @file adc.c +* @brief ADC Driver Source File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - API Functions +* - Interrupt Handlers +* . +* which are relevant for the ADC driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Include Files */ + +#include "adc.h" +#include "sys_vim.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +/** @fn void adcInit(void) +* @brief Initializes ADC Driver +* +* This function initializes the ADC driver. +* +*/ +/* USER CODE BEGIN (2) */ +/* USER CODE END */ +/* SourceId : ADC_SourceId_001 */ +/* DesignId : ADC_DesignId_001 */ +/* Requirements : HL_SR185 */ +void adcInit(void) +{ +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + + /** @b Initialize @b ADC1: */ + + /** - Reset ADC module */ + adcREG1->RSTCR = 1U; + adcREG1->RSTCR = 0U; + + /** - Enable 12-BIT ADC */ + adcREG1->OPMODECR |= 0x80000000U; + + /** - Setup prescaler */ + adcREG1->CLOCKCR = 10U; + + /** - Setup memory boundaries */ + adcREG1->BNDCR = (uint32)((uint32)8U << 16U) | (8U + 8U); + adcREG1->BNDEND = (adcREG1->BNDEND & 0xFFFF0000U) | (2U); + + /** - Setup event group conversion mode + * - Setup data format + * - Enable/Disable channel id in conversion result + * - Enable/Disable continuous conversion + */ + adcREG1->GxMODECR[0U] = (uint32)ADC_12_BIT + | (uint32)0x00000000U + | (uint32)0x00000000U; + + /** - Setup event group hardware trigger + * - Setup hardware trigger edge + * - Setup hardware trigger source + */ + adcREG1->EVSRC = (uint32)0x00000000U + | (uint32)ADC1_EVENT; + + /** - Setup event group sample window */ + adcREG1->EVSAMP = 1U; + + /** - Setup event group sample discharge + * - Setup discharge prescaler + * - Enable/Disable discharge + */ + adcREG1->EVSAMPDISEN = (uint32)((uint32)0U << 8U) + | (uint32)0x00000000U; + + /** - Setup group 1 conversion mode + * - Setup data format + * - Enable/Disable channel id in conversion result + * - Enable/Disable continuous conversion + */ + adcREG1->GxMODECR[1U] = (uint32)ADC_12_BIT + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U; + + /** - Setup group 1 hardware trigger + * - Setup hardware trigger edge + * - Setup hardware trigger source + */ + adcREG1->G1SRC = (uint32)0x00000000U + | (uint32)ADC1_EVENT; + + /** - Setup group 1 sample window */ + adcREG1->G1SAMP = 1U; + + /** - Setup group 1 sample discharge + * - Setup discharge prescaler + * - Enable/Disable discharge + */ + adcREG1->G1SAMPDISEN = (uint32)((uint32)0U << 8U) + | (uint32)0x00000000U; + + /** - Setup group 2 conversion mode + * - Setup data format + * - Enable/Disable channel id in conversion result + * - Enable/Disable continuous conversion + */ + adcREG1->GxMODECR[2U] = (uint32)ADC_12_BIT + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U; + + /** - Setup group 2 hardware trigger + * - Setup hardware trigger edge + * - Setup hardware trigger source + */ + adcREG1->G2SRC = (uint32)0x00000000U + | (uint32)ADC1_EVENT; + + /** - Setup group 2 sample window */ + adcREG1->G2SAMP = 1U; + + /** - Setup group 2 sample discharge + * - Setup discharge prescaler + * - Enable/Disable discharge + */ + adcREG1->G2SAMPDISEN = (uint32)((uint32)0U << 8U) + | (uint32)0x00000000U; + + /** - ADC1 EVT pin output value */ + adcREG1->EVTOUT = 0U; + + /** - ADC1 EVT pin direction */ + adcREG1->EVTDIR = 0U; + + /** - ADC1 EVT pin open drain enable */ + adcREG1->EVTPDR = 0U; + + /** - ADC1 EVT pin pullup / pulldown selection */ + adcREG1->EVTPSEL = 1U; + + /** - ADC1 EVT pin pullup / pulldown enable*/ + adcREG1->EVTDIS = 0U; + + /** - Enable ADC module */ + adcREG1->OPMODECR |= 0x80140001U; + + /** - Wait for buffer initialization complete */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while (((adcREG1->BNDEND & 0xFFFF0000U) >> 16U ) != 0U) + { + } /* Wait */ + + /** - Setup parity */ + adcREG1->PARCR = 0x00000005U; + + + + /** @b Initialize @b ADC2: */ + + /** - Reset ADC module */ + adcREG2->RSTCR = 1U; + adcREG2->RSTCR = 0U; + + /** - Enable 12-BIT ADC */ + adcREG2->OPMODECR |= 0x80000000U; + + /** - Setup prescaler */ + adcREG2->CLOCKCR = 10U; + + /** - Setup memory boundaries */ + adcREG2->BNDCR = (uint32)((uint32)8U << 16U) | (8U + 8U); + adcREG2->BNDEND = (adcREG2->BNDEND & 0xFFFF0000U) | (2U); + + /** - Setup event group conversion mode + * - Setup data format + * - Enable/Disable channel id in conversion result + * - Enable/Disable continuous conversion + */ + adcREG2->GxMODECR[0U] = (uint32)ADC_12_BIT + | (uint32)0x00000000U + | (uint32)0x00000000U; + + /** - Setup event group hardware trigger + * - Setup hardware trigger edge + * - Setup hardware trigger source + */ + adcREG2->EVSRC = (uint32)0x00000000U + | (uint32)ADC2_EVENT; + + /** - Setup event group sample window */ + adcREG2->EVSAMP = 1U; + + /** - Setup event group sample discharge + * - Setup discharge prescaler + * - Enable/Disable discharge + */ + adcREG2->EVSAMPDISEN = (uint32)((uint32)0U << 8U) + | (uint32)0x00000000U; + + /** - Setup group 1 conversion mode + * - Setup data format + * - Enable/Disable channel id in conversion result + * - Enable/Disable continuous conversion + */ + adcREG2->GxMODECR[1U] = (uint32)ADC_12_BIT + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U; + + /** - Setup group 1 hardware trigger + * - Setup hardware trigger edge + * - Setup hardware trigger source + */ + adcREG2->G1SRC = (uint32)0x00000000U + | (uint32)ADC2_EVENT; + + + /** - Setup group 1 sample window */ + adcREG2->G1SAMP = 1U; + + /** - Setup group 1 sample discharge + * - Setup discharge prescaler + * - Enable/Disable discharge + */ + adcREG2->G1SAMPDISEN = (uint32)((uint32)0U << 8U) + | (uint32)0x00000000U; + + /** - Setup group 2 conversion mode + * - Setup data format + * - Enable/Disable channel id in conversion result + * - Enable/Disable continuous conversion + */ + adcREG2->GxMODECR[2U] = (uint32)ADC_12_BIT + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U; + + /** - Setup group 2 hardware trigger + * - Setup hardware trigger edge + * - Setup hardware trigger source + */ + adcREG2->G2SRC = (uint32)0x00000000U + | (uint32)ADC2_EVENT; + + /** - Setup group 2 sample window */ + adcREG2->G2SAMP = 1U; + + /** - Setup group 2 sample discharge + * - Setup discharge prescaler + * - Enable/Disable discharge + */ + adcREG2->G2SAMPDISEN = (uint32)((uint32)0U << 8U) + | (uint32)0x00000000U; + + + /** - ADC2 EVT pin output value */ + adcREG2->EVTOUT = 0U; + + /** - ADC2 EVT pin direction */ + adcREG2->EVTDIR = 0U; + + /** - ADC2 EVT pin open drain enable */ + adcREG2->EVTPDR = 0U; + + /** - ADC2 EVT pin pullup / pulldown selection */ + adcREG2->EVTPSEL = 1U; + + /** - ADC2 EVT pin pullup / pulldown enable*/ + adcREG2->EVTDIS = 0U; + + /** - Enable ADC module */ + adcREG2->OPMODECR |= 0x80140001U; + + /** - Wait for buffer initialization complete */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while (((adcREG2->BNDEND & 0xFFFF0000U) >> 16U) != 0U) + { + } /* Wait */ + + /** - Setup parity */ + adcREG2->PARCR = 0x00000005U; + + /** @note This function has to be called before the driver can be used.\n + * This function has to be executed in privileged mode.\n + */ +/* USER CODE BEGIN (4) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + + +/** - s_adcSelect is used as constant table for channel selection */ +static const uint32 s_adcSelect[2U][3U] = +{ + {0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U, + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U, + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U}, + {0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U , + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U, + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U} +}; + +/** - s_adcFiFoSize is used as constant table for channel selection */ +static const uint32 s_adcFiFoSize[2U][3U] = +{ + {16U, + 16U, + 16U}, + {16U, + 16U, + 16U} +}; + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + +/** @fn void adcStartConversion(adcBASE_t *adc, uint32 group) +* @brief Starts an ADC conversion +* @param[in] adc Pointer to ADC module: +* - adcREG1: ADC1 module pointer +* - adcREG2: ADC2 module pointer +* @param[in] group Hardware group of ADC module: +* - adcGROUP0: ADC event group +* - adcGROUP1: ADC group 1 +* - adcGROUP2: ADC group 2 +* +* This function starts a conversion of the ADC hardware group. +* +*/ +/* SourceId : ADC_SourceId_002 */ +/* DesignId : ADC_DesignId_002 */ +/* Requirements : HL_SR186 */ +void adcStartConversion(adcBASE_t *adc, uint32 group) +{ + uint32 index = (adc == adcREG1) ? 0U : 1U; + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + + /** - Setup FiFo size */ + adc->GxINTCR[group] = s_adcFiFoSize[index][group]; + + /** - Start Conversion */ + adc->GxSEL[group] = s_adcSelect[index][group]; + + /** @note The function adcInit has to be called before this function can be used. */ + +/* USER CODE BEGIN (8) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (9) */ +/* USER CODE END */ + + +/** @fn void adcStopConversion(adcBASE_t *adc, uint32 group) +* @brief Stops an ADC conversion +* @param[in] adc Pointer to ADC module: +* - adcREG1: ADC1 module pointer +* - adcREG2: ADC2 module pointer +* @param[in] group Hardware group of ADC module: +* - adcGROUP0: ADC event group +* - adcGROUP1: ADC group 1 +* - adcGROUP2: ADC group 2 +* +* This function stops a conversion of the ADC hardware group. +* +*/ +/* SourceId : ADC_SourceId_003 */ +/* DesignId : ADC_DesignId_003 */ +/* Requirements : HL_SR187 */ +void adcStopConversion(adcBASE_t *adc, uint32 group) +{ +/* USER CODE BEGIN (10) */ +/* USER CODE END */ + + /** - Stop Conversion */ + adc->GxSEL[group] = 0U; + + /** @note The function adcInit has to be called before this function can be used. */ + +/* USER CODE BEGIN (11) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (12) */ +/* USER CODE END */ + + +/** @fn void adcResetFiFo(adcBASE_t *adc, uint32 group) +* @brief Resets FiFo read and write pointer. +* @param[in] adc Pointer to ADC module: +* - adcREG1: ADC1 module pointer +* - adcREG2: ADC2 module pointer +* @param[in] group Hardware group of ADC module: +* - adcGROUP0: ADC event group +* - adcGROUP1: ADC group 1 +* - adcGROUP2: ADC group 2 +* +* This function resets the FiFo read and write pointers. +* +*/ +/* SourceId : ADC_SourceId_004 */ +/* DesignId : ADC_DesignId_004*/ +/* Requirements : HL_SR188 */ +void adcResetFiFo(adcBASE_t *adc, uint32 group) +{ +/* USER CODE BEGIN (13) */ +/* USER CODE END */ + + /** - Reset FiFo */ + adc->GxFIFORESETCR[group] = 1U; + + /** @note The function adcInit has to be called before this function can be used.\n + * the conversion should be stopped before calling this function. + */ + +/* USER CODE BEGIN (14) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (15) */ +/* USER CODE END */ + + +/** @fn uint32 adcGetData(adcBASE_t *adc, uint32 group, adcData_t * data) +* @brief Gets converted a ADC values +* @param[in] adc Pointer to ADC module: +* - adcREG1: ADC1 module pointer +* - adcREG2: ADC2 module pointer +* @param[in] group Hardware group of ADC module: +* - adcGROUP0: ADC event group +* - adcGROUP1: ADC group 1 +* - adcGROUP2: ADC group 2 +* @param[out] data Pointer to store ADC converted data +* @return The function will return the number of converted values copied into data buffer: +* +* This function writes a ADC message into a ADC message box. +* +*/ +/* SourceId : ADC_SourceId_005 */ +/* DesignId : ADC_DesignId_005 */ +/* Requirements : HL_SR189 */ +uint32 adcGetData(adcBASE_t *adc, uint32 group, adcData_t * data) +{ + uint32 i; + uint32 buf; + uint32 mode; + uint32 index = (adc == adcREG1) ? 0U : 1U; + + uint32 intcr_reg = adc->GxINTCR[group]; + uint32 count = (intcr_reg >= 256U) ? s_adcFiFoSize[index][group] : (s_adcFiFoSize[index][group] - (uint32)(intcr_reg & 0xFFU)); + adcData_t *ptr = data; + +/* USER CODE BEGIN (16) */ +/* USER CODE END */ + + mode = (adc->OPMODECR & ADC_12_BIT_MODE); + + if(mode == ADC_12_BIT_MODE) + { + /** - Get conversion data and channel/pin id */ + for (i = 0U; i < count; i++) + { + buf = adc->GxBUF[group].BUF0; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + ptr->value = (uint16)(buf & 0xFFFU); + ptr->id = (uint32)((buf >> 16U) & 0x1FU); + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + ptr++; + } + } + else + { + /** - Get conversion data and channel/pin id */ + for (i = 0U; i < count; i++) + { + buf = adc->GxBUF[group].BUF0; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + ptr->value = (uint16)(buf & 0x3FFU); + ptr->id = (uint32)((buf >> 10U) & 0x1FU); + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + ptr++; + } + } + + + adc->GxINTFLG[group] = 9U; + + /** @note The function adcInit has to be called before this function can be used.\n + * The user is responsible to initialize the message box. + */ + +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + + return count; +} + +/* USER CODE BEGIN (18) */ +/* USER CODE END */ + + +/** @fn uint32 adcIsFifoFull(adcBASE_t *adc, uint32 group) +* @brief Checks if FiFo buffer is full +* @param[in] adc Pointer to ADC module: +* - adcREG1: ADC1 module pointer +* - adcREG2: ADC2 module pointer +* @param[in] group Hardware group of ADC module: +* - adcGROUP0: ADC event group +* - adcGROUP1: ADC group 1 +* - adcGROUP2: ADC group 2 +* @return The function will return: +* - 0: When FiFo buffer is not full +* - 1: When FiFo buffer is full +* - 3: When FiFo buffer overflow occurred +* +* This function checks FiFo buffer status. +* +*/ +/* SourceId : ADC_SourceId_006 */ +/* DesignId : ADC_DesignId_006 */ +/* Requirements : HL_SR190 */ +uint32 adcIsFifoFull(adcBASE_t *adc, uint32 group) +{ + uint32 flags; + +/* USER CODE BEGIN (19) */ +/* USER CODE END */ + + /** - Read FiFo flags */ + flags = adc->GxINTFLG[group] & 3U; + + /** @note The function adcInit has to be called before this function can be used. */ + +/* USER CODE BEGIN (20) */ +/* USER CODE END */ + + return flags; +} + +/* USER CODE BEGIN (21) */ +/* USER CODE END */ + + +/** @fn uint32 adcIsConversionComplete(adcBASE_t *adc, uint32 group) +* @brief Checks if Conversion is complete +* @param[in] adc Pointer to ADC module: +* - adcREG1: ADC1 module pointer +* - adcREG2: ADC2 module pointer +* @param[in] group Hardware group of ADC module: +* - adcGROUP0: ADC event group +* - adcGROUP1: ADC group 1 +* - adcGROUP2: ADC group 2 +* @return The function will return: +* - 0: When is not finished +* - 8: When conversion is complete +* +* This function checks if conversion is complete. +* +*/ +/* SourceId : ADC_SourceId_007 */ +/* DesignId : ADC_DesignId_007 */ +/* Requirements : HL_SR191 */ +uint32 adcIsConversionComplete(adcBASE_t *adc, uint32 group) +{ + uint32 flags; + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ + + /** - Read conversion flags */ + flags = adc->GxINTFLG[group] & 8U; + + /** @note The function adcInit has to be called before this function can be used. */ + +/* USER CODE BEGIN (23) */ +/* USER CODE END */ + + return flags; +} + +/* USER CODE BEGIN (24) */ +/* USER CODE END */ + +/** @fn void adcCalibration(adcBASE_t *adc) +* @brief Computes offset error using Calibration mode +* @param[in] adc Pointer to ADC module: +* - adcREG1: ADC1 module pointer +* - adcREG2: ADC2 module pointer +* This function computes offset error using Calibration mode +* +*/ +/* SourceId : ADC_SourceId_008 */ +/* DesignId : ADC_DesignId_010 */ +/* Requirements : HL_SR194 */ +void adcCalibration(adcBASE_t *adc) +{ +/* USER CODE BEGIN (25) */ +/* USER CODE END */ + + uint32 conv_val[5U]={0U,0U,0U,0U,0U}; + uint32 loop_index=0U; + uint32 offset_error=0U; + uint32 backup_mode; + + /** - Backup Mode before Calibration */ + backup_mode = adc->OPMODECR; + + /** - Enable 12-BIT ADC */ + adc->OPMODECR |= 0x80000000U; + + /* Disable all channels for conversion */ + adc->GxSEL[0U]=0x00U; + adc->GxSEL[1U]=0x00U; + adc->GxSEL[2U]=0x00U; + + for(loop_index=0U;loop_index<4U;loop_index++) + { + /* Disable Self Test and Calibration mode */ + adc->CALCR=0x0U; + + switch(loop_index) + { + case 0U : /* Test 1 : Bride En = 0 , HiLo =0 */ + adc->CALCR=0x0U; + break; + + case 1U : /* Test 1 : Bride En = 0 , HiLo =1 */ + adc->CALCR=0x0100U; + break; + + case 2U : /* Test 1 : Bride En = 1 , HiLo =0 */ + adc->CALCR=0x0200U; + break; + + case 3U : /* Test 1 : Bride En = 1 , HiLo =1 */ + adc->CALCR=0x0300U; + break; + default : + break; + } + + /* Enable Calibration mode */ + adc->CALCR|=0x1U; + + /* Start calibration conversion */ + adc->CALCR|=0x00010000U; + + /* Wait for calibration conversion to complete */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((adc->CALCR & 0x00010000U)==0x00010000U) + { + } /* Wait */ + + /* Read converted value */ + conv_val[loop_index]= adc->CALR; + } + + /* Disable Self Test and Calibration mode */ + adc->CALCR=0x0U; + + /* Compute the Offset error correction value */ + conv_val[4U]=conv_val[0U]+ conv_val[1U] + conv_val[2U] + conv_val[3U]; + + conv_val[4U]=(conv_val[4U]/4U); + + offset_error=conv_val[4U]-0x7FFU; + + /*Write the offset error to the Calibration register */ + /* Load 2;s complement of the computed value to ADCALR register */ + offset_error=~offset_error; + offset_error=offset_error & 0xFFFU; + offset_error=offset_error+1U; + + adc->CALR = offset_error; + + /** - Restore Mode after Calibration */ + adc->OPMODECR = backup_mode; + + /** @note The function adcInit has to be called before using this function. */ + +/* USER CODE BEGIN (26) */ +/* USER CODE END */ +} + + +/** @fn void adcMidPointCalibration(adcBASE_t *adc) +* @brief Computes offset error using Mid Point Calibration mode +* @param[in] adc Pointer to ADC module: +* - adcREG1: ADC1 module pointer +* - adcREG2: ADC2 module pointer +* @return This function will return offset error using Mid Point Calibration mode +* +* This function computes offset error using Mid Point Calibration mode +* +*/ +/* SourceId : ADC_SourceId_009 */ +/* DesignId : ADC_DesignId_011 */ +/* Requirements : HL_SR195 */ +uint32 adcMidPointCalibration(adcBASE_t *adc) +{ +/* USER CODE BEGIN (27) */ +/* USER CODE END */ + + uint32 conv_val[3U]={0U,0U,0U}; + uint32 loop_index=0U; + uint32 offset_error=0U; + uint32 backup_mode; + + /** - Backup Mode before Calibration */ + backup_mode = adc->OPMODECR; + + /** - Enable 12-BIT ADC */ + adc->OPMODECR |= 0x80000000U; + + /* Disable all channels for conversion */ + adc->GxSEL[0U]=0x00U; + adc->GxSEL[1U]=0x00U; + adc->GxSEL[2U]=0x00U; + + for(loop_index=0U;loop_index<2U;loop_index++) + { + /* Disable Self Test and Calibration mode */ + adc->CALCR=0x0U; + + switch(loop_index) + { + case 0U : /* Test 1 : Bride En = 0 , HiLo =0 */ + adc->CALCR=0x0U; + break; + + case 1U : /* Test 1 : Bride En = 0 , HiLo =1 */ + adc->CALCR=0x0100U; + break; + + default : + break; + + } + + /* Enable Calibration mode */ + adc->CALCR|=0x1U; + + /* Start calibration conversion */ + adc->CALCR|=0x00010000U; + + /* Wait for calibration conversion to complete */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((adc->CALCR & 0x00010000U)==0x00010000U) + { + } /* Wait */ + + /* Read converted value */ + conv_val[loop_index]= adc->CALR; + } + + /* Disable Self Test and Calibration mode */ + adc->CALCR=0x0U; + + /* Compute the Offset error correction value */ + conv_val[2U]=(conv_val[0U])+ (conv_val[1U]); + + conv_val[2U]=(conv_val[2U]/2U); + + offset_error=conv_val[2U]-0x7FFU; + + /* Write the offset error to the Calibration register */ + /* Load 2's complement of the computed value to ADCALR register */ + offset_error=~offset_error; + offset_error=offset_error+1U; + offset_error=offset_error & 0xFFFU; + + adc->CALR = offset_error; + + /** - Restore Mode after Calibration */ + adc->OPMODECR = backup_mode; + + return(offset_error); + + /** @note The function adcInit has to be called before this function can be used. */ + +/* USER CODE BEGIN (28) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (29) */ +/* USER CODE END */ + +/** @fn void adcEnableNotification(adcBASE_t *adc, uint32 group) +* @brief Enable notification +* @param[in] adc Pointer to ADC module: +* - adcREG1: ADC1 module pointer +* - adcREG2: ADC2 module pointer +* @param[in] group Hardware group of ADC module: +* - adcGROUP0: ADC event group +* - adcGROUP1: ADC group 1 +* - adcGROUP2: ADC group 2 +* +* This function will enable the notification of a conversion. +* In single conversion mode for conversion complete and +* in continuous conversion mode when the FiFo buffer is full. +* +*/ +/* SourceId : ADC_SourceId_010 */ +/* DesignId : ADC_DesignId_008 */ +/* Requirements : HL_SR192 */ +void adcEnableNotification(adcBASE_t *adc, uint32 group) +{ + uint32 notif = (((uint32)(adc->GxMODECR[group]) & 2U) == 2U) ? 1U : 8U; + +/* USER CODE BEGIN (30) */ +/* USER CODE END */ + + adc->GxINTENA[group] = notif; + + /** @note The function adcInit has to be called before this function can be used.\n + * This function should be called before the conversion is started + */ + +/* USER CODE BEGIN (31) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (32) */ +/* USER CODE END */ + + +/** @fn void adcDisableNotification(adcBASE_t *adc, uint32 group) +* @brief Disable notification +* @param[in] adc Pointer to ADC module: +* - adcREG1: ADC1 module pointer +* - adcREG2: ADC2 module pointer +* @param[in] group Hardware group of ADC module: +* - adcGROUP0: ADC event group +* - adcGROUP1: ADC group 1 +* - adcGROUP2: ADC group 2 +* +* This function will disable the notification of a conversion. +*/ +/* SourceId : ADC_SourceId_011 */ +/* DesignId : ADC_DesignId_009 */ +/* Requirements : HL_SR193 */ +void adcDisableNotification(adcBASE_t *adc, uint32 group) +{ +/* USER CODE BEGIN (33) */ +/* USER CODE END */ + + adc->GxINTENA[group] = 0U; + + /** @note The function adcInit has to be called before this function can be used. */ + +/* USER CODE BEGIN (34) */ +/* USER CODE END */ +} + +/** @fn void adcSetEVTPin(adcBASE_t *adc, uint32 value) +* @brief Set ADCEVT pin +* @param[in] adc Pointer to ADC module: +* - adcREG1: ADC1 module pointer +* @param[in] value Value to be set: 0 or 1 +* +* This function will set the ADC EVT pin if configured as an output pin. +*/ +/* SourceId : ADC_SourceId_020 */ +/* DesignId : ADC_DesignId_014 */ +/* Requirements : HL_SR529 */ +void adcSetEVTPin(adcBASE_t *adc, uint32 value) +{ + adc->EVTOUT = value; +} + +/** @fn uint32 adcGetEVTPin(adcBASE_t *adc) +* @brief Set ADCEVT pin +* @param[in] adc Pointer to ADC module: +* - adcREG1: ADC1 module pointer +* @return Value of the ADC EVT pin: 0 or 1 +* +* This function will return the value of ADC EVT pin. +*/ +/* SourceId : ADC_SourceId_021 */ +/* DesignId : ADC_DesignId_015 */ +/* Requirements : HL_SR529 */ +uint32 adcGetEVTPin(adcBASE_t *adc) +{ + return adc->EVTIN; +} + +/** @fn void adc1GetConfigValue(adc_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ADC_SourceId_012 */ +/* DesignId : ADC_DesignId_012 */ +/* Requirements : HL_SR203 */ +void adc1GetConfigValue(adc_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_OPMODECR = ADC1_OPMODECR_CONFIGVALUE; + config_reg->CONFIG_CLOCKCR = ADC1_CLOCKCR_CONFIGVALUE; + config_reg->CONFIG_GxMODECR[0U] = ADC1_G0MODECR_CONFIGVALUE; + config_reg->CONFIG_GxMODECR[1U] = ADC1_G1MODECR_CONFIGVALUE; + config_reg->CONFIG_GxMODECR[2U] = ADC1_G2MODECR_CONFIGVALUE; + config_reg->CONFIG_G0SRC = ADC1_G0SRC_CONFIGVALUE; + config_reg->CONFIG_G1SRC = ADC1_G1SRC_CONFIGVALUE; + config_reg->CONFIG_G2SRC = ADC1_G2SRC_CONFIGVALUE; + config_reg->CONFIG_BNDCR = ADC1_BNDCR_CONFIGVALUE; + config_reg->CONFIG_BNDEND = ADC1_BNDEND_CONFIGVALUE; + config_reg->CONFIG_G0SAMP = ADC1_G0SAMP_CONFIGVALUE; + config_reg->CONFIG_G1SAMP = ADC1_G1SAMP_CONFIGVALUE; + config_reg->CONFIG_G2SAMP = ADC1_G2SAMP_CONFIGVALUE; + config_reg->CONFIG_G0SAMPDISEN = ADC1_G0SAMPDISEN_CONFIGVALUE; + config_reg->CONFIG_G1SAMPDISEN = ADC1_G1SAMPDISEN_CONFIGVALUE; + config_reg->CONFIG_G2SAMPDISEN = ADC1_G2SAMPDISEN_CONFIGVALUE; + config_reg->CONFIG_PARCR = ADC1_PARCR_CONFIGVALUE; + } + else + { + config_reg->CONFIG_OPMODECR = adcREG1->OPMODECR; + config_reg->CONFIG_CLOCKCR = adcREG1->CLOCKCR; + config_reg->CONFIG_GxMODECR[0U] = adcREG1->GxMODECR[0U]; + config_reg->CONFIG_GxMODECR[1U] = adcREG1->GxMODECR[1U]; + config_reg->CONFIG_GxMODECR[2U] = adcREG1->GxMODECR[2U]; + config_reg->CONFIG_G0SRC = adcREG1->EVSRC; + config_reg->CONFIG_G1SRC = adcREG1->G1SRC; + config_reg->CONFIG_G2SRC = adcREG1->G2SRC; + config_reg->CONFIG_BNDCR = adcREG1->BNDCR; + config_reg->CONFIG_BNDEND = adcREG1->BNDEND; + config_reg->CONFIG_G0SAMP = adcREG1->EVSAMP; + config_reg->CONFIG_G1SAMP = adcREG1->G1SAMP; + config_reg->CONFIG_G2SAMP = adcREG1->G2SAMP; + config_reg->CONFIG_G0SAMPDISEN = adcREG1->EVSAMPDISEN; + config_reg->CONFIG_G1SAMPDISEN = adcREG1->G1SAMPDISEN; + config_reg->CONFIG_G2SAMPDISEN = adcREG1->G2SAMPDISEN; + config_reg->CONFIG_PARCR = adcREG1->PARCR; + } +} + +/** @fn void adc2GetConfigValue(adc_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ADC_SourceId_013 */ +/* DesignId : ADC_DesignId_012 */ +/* Requirements : HL_SR203 */ +void adc2GetConfigValue(adc_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_OPMODECR = ADC2_OPMODECR_CONFIGVALUE; + config_reg->CONFIG_CLOCKCR = ADC2_CLOCKCR_CONFIGVALUE; + config_reg->CONFIG_GxMODECR[0U] = ADC2_G0MODECR_CONFIGVALUE; + config_reg->CONFIG_GxMODECR[1U] = ADC2_G1MODECR_CONFIGVALUE; + config_reg->CONFIG_GxMODECR[2U] = ADC2_G2MODECR_CONFIGVALUE; + config_reg->CONFIG_G0SRC = ADC2_G0SRC_CONFIGVALUE; + config_reg->CONFIG_G1SRC = ADC2_G1SRC_CONFIGVALUE; + config_reg->CONFIG_G2SRC = ADC2_G2SRC_CONFIGVALUE; + config_reg->CONFIG_BNDCR = ADC2_BNDCR_CONFIGVALUE; + config_reg->CONFIG_BNDEND = ADC2_BNDEND_CONFIGVALUE; + config_reg->CONFIG_G0SAMP = ADC2_G0SAMP_CONFIGVALUE; + config_reg->CONFIG_G1SAMP = ADC2_G1SAMP_CONFIGVALUE; + config_reg->CONFIG_G2SAMP = ADC2_G2SAMP_CONFIGVALUE; + config_reg->CONFIG_G0SAMPDISEN = ADC2_G0SAMPDISEN_CONFIGVALUE; + config_reg->CONFIG_G1SAMPDISEN = ADC2_G1SAMPDISEN_CONFIGVALUE; + config_reg->CONFIG_G2SAMPDISEN = ADC2_G2SAMPDISEN_CONFIGVALUE; + config_reg->CONFIG_PARCR = ADC2_PARCR_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_OPMODECR = adcREG2->OPMODECR; + config_reg->CONFIG_CLOCKCR = adcREG2->CLOCKCR; + config_reg->CONFIG_GxMODECR[0U] = adcREG2->GxMODECR[0U]; + config_reg->CONFIG_GxMODECR[1U] = adcREG2->GxMODECR[1U]; + config_reg->CONFIG_GxMODECR[2U] = adcREG2->GxMODECR[2U]; + config_reg->CONFIG_G0SRC = adcREG2->EVSRC; + config_reg->CONFIG_G1SRC = adcREG2->G1SRC; + config_reg->CONFIG_G2SRC = adcREG2->G2SRC; + config_reg->CONFIG_BNDCR = adcREG2->BNDCR; + config_reg->CONFIG_BNDEND = adcREG2->BNDEND; + config_reg->CONFIG_G0SAMP = adcREG2->EVSAMP; + config_reg->CONFIG_G1SAMP = adcREG2->G1SAMP; + config_reg->CONFIG_G2SAMP = adcREG2->G2SAMP; + config_reg->CONFIG_G0SAMPDISEN = adcREG2->EVSAMPDISEN; + config_reg->CONFIG_G1SAMPDISEN = adcREG2->G1SAMPDISEN; + config_reg->CONFIG_G2SAMPDISEN = adcREG2->G2SAMPDISEN; + config_reg->CONFIG_PARCR = adcREG2->PARCR; + } +} + +/* USER CODE BEGIN (35) */ +/* USER CODE END */ + + + + + + + + Index: firmware/source/can.c =================================================================== diff -u --- firmware/source/can.c (revision 0) +++ firmware/source/can.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,1609 @@ +/** @file can.c +* @brief CAN Driver Source File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - API Functions +* - Interrupt Handlers +* . +* which are relevant for the CAN driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + + +/* Include Files */ + +#include "can.h" +#include "sys_vim.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +/* Global and Static Variables */ + +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) +#else + static const uint32 s_canByteOrder[8U] = {3U, 2U, 1U, 0U, 7U, 6U, 5U, 4U}; +#endif + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + +/** @fn void canInit(void) +* @brief Initializes CAN Driver +* +* This function initializes the CAN driver. +* +*/ +/* USER CODE BEGIN (3) */ +/* USER CODE END */ +/* SourceId : CAN_SourceId_001 */ +/* DesignId : CAN_DesignId_001 */ +/* Requirements : HL_SR207 */ +void canInit(void) +{ +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + /** @b Initialize @b CAN1: */ + + /** - Setup control register + * - Disable automatic wakeup on bus activity + * - Local power down mode disabled + * - Disable DMA request lines + * - Enable global Interrupt Line 0 and 1 + * - Disable debug mode + * - Release from software reset + * - Enable/Disable parity or ECC + * - Enable/Disable auto bus on timer + * - Setup message completion before entering debug state + * - Setup normal operation mode + * - Request write access to the configuration registers + * - Setup automatic retransmission of messages + * - Disable error interrupts + * - Disable status interrupts + * - Enter initialization mode + */ + canREG1->CTL = (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)((uint32)0x00000005U << 10U) + | (uint32)0x00020043U; + + /** - Clear all pending error flags and reset current status */ + canREG1->ES |= 0xFFFFFFFFU; + + /** - Assign interrupt level for messages */ + canREG1->INTMUXx[0U] = (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U; + + canREG1->INTMUXx[1U] = (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U; + + /** - Setup auto bus on timer period */ + canREG1->ABOTR = (uint32)0U; + + /** - Setup IF1 for data transmission + * - Wait until IF1 is ready for use + * - Set IF1 control byte + */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG1->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + canREG1->IF1CMD = 0x87U; + + /** - Setup IF2 for reading data + * - Wait until IF1 is ready for use + * - Set IF1 control byte + */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG1->IF2STAT & 0x80U) ==0x80U) + { + } /* Wait */ + canREG1->IF2CMD = 0x17U; + + /** - Setup bit timing + * - Setup baud rate prescaler extension + * - Setup TSeg2 + * - Setup TSeg1 + * - Setup sample jump width + * - Setup baud rate prescaler + */ + canREG1->BTR = (uint32)((uint32)0U << 16U) | + (uint32)((uint32)(3U - 1U) << 12U) | + (uint32)((uint32)((4U + 3U) - 1U) << 8U) | + (uint32)((uint32)(3U - 1U) << 6U) | + (uint32)19U; + + + /** - CAN1 Port output values */ + canREG1->TIOC = (uint32)((uint32)1U << 18U ) + | (uint32)((uint32)0U << 17U ) + | (uint32)((uint32)0U << 16U ) + | (uint32)((uint32)1U << 3U ) + | (uint32)((uint32)1U << 2U ) + | (uint32)((uint32)1U << 1U ); + + canREG1->RIOC = (uint32)((uint32)1U << 18U ) + | (uint32)((uint32)0U << 17U ) + | (uint32)((uint32)0U << 16U ) + | (uint32)((uint32)1U << 3U ) + | (uint32)((uint32)0U << 2U ) + | (uint32)((uint32)0U <<1U ); + + /** - Leave configuration and initialization mode */ + canREG1->CTL &= ~(uint32)(0x00000041U); + + + /** @b Initialize @b CAN2: */ + + /** - Setup control register + * - Disable automatic wakeup on bus activity + * - Local power down mode disabled + * - Disable DMA request lines + * - Enable global Interrupt Line 0 and 1 + * - Disable debug mode + * - Release from software reset + * - Enable/Disable parity or ECC + * - Enable/Disable auto bus on timer + * - Setup message completion before entering debug state + * - Setup normal operation mode + * - Request write access to the configuration registers + * - Setup automatic retransmission of messages + * - Disable error interrupts + * - Disable status interrupts + * - Enter initialization mode + */ + canREG2->CTL = (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)((uint32)0x00000005U << 10U) + | 0x00020043U; + + /** - Clear all pending error flags and reset current status */ + canREG2->ES |= 0xFFFFFFFFU; + + /** - Assign interrupt level for messages */ + canREG2->INTMUXx[0U] = (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U; + + canREG2->INTMUXx[1U] = (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U; + + + /** - Setup auto bus on timer period */ + canREG2->ABOTR = (uint32)0U; + + + /** - Setup IF1 for data transmission + * - Wait until IF1 is ready for use + * - Set IF1 control byte + */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG2->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + canREG2->IF1CMD = 0x87U; + + /** - Setup IF2 for reading data + * - Wait until IF1 is ready for use + * - Set IF1 control byte + */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG2->IF2STAT & 0x80U) ==0x80U) + { + } /* Wait */ + canREG2->IF2CMD = 0x17U; + + /** - Setup bit timing + * - Setup baud rate prescaler extension + * - Setup TSeg2 + * - Setup TSeg1 + * - Setup sample jump width + * - Setup baud rate prescaler + */ + canREG2->BTR = (uint32)((uint32)0U << 16U) | + (uint32)((uint32)(3U - 1U) << 12U) | + (uint32)((uint32)((4U + 3U) - 1U) << 8U) | + (uint32)((uint32)(3U - 1U) << 6U) | + (uint32)19U; + + + /** - CAN2 Port output values */ + canREG2->TIOC = (uint32)((uint32)1U << 18U ) + | (uint32)((uint32)0U << 17U ) + | (uint32)((uint32)0U << 16U ) + | (uint32)((uint32)1U << 3U ) + | (uint32)((uint32)1U << 2U ) + | (uint32)((uint32)1U << 1U ); + + canREG2->RIOC = (uint32)((uint32)1U << 18U ) + | (uint32)((uint32)0U << 17U ) + | (uint32)((uint32)0U << 16U ) + | (uint32)((uint32)1U << 3U ) + | (uint32)((uint32)0U << 2U ) + | (uint32)((uint32)0U <<1U ); + + /** - Leave configuration and initialization mode */ + canREG2->CTL &= ~(uint32)(0x00000041U); + + /** @b Initialize @b CAN3: */ + + /** - Setup control register + * - Disable automatic wakeup on bus activity + * - Local power down mode disabled + * - Disable DMA request lines + * - Enable global Interrupt Line 0 and 1 + * - Disable debug mode + * - Release from software reset + * - Enable/Disable parity or ECC + * - Enable/Disable auto bus on timer + * - Setup message completion before entering debug state + * - Setup normal operation mode + * - Request write access to the configuration registers + * - Setup automatic retransmission of messages + * - Disable error interrupts + * - Disable status interrupts + * - Enter initialization mode + */ + canREG3->CTL = (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)((uint32)0x00000005U << 10U) + | 0x00020043U; + + /** - Clear all pending error flags and reset current status */ + canREG3->ES |= 0xFFFFFFFFU; + + /** - Assign interrupt level for messages */ + canREG3->INTMUXx[0U] = (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U; + + canREG3->INTMUXx[1U] = (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U; + + /** - Setup auto bus on timer period */ + canREG3->ABOTR = (uint32)0U; + + /** - Setup IF1 for data transmission + * - Wait until IF1 is ready for use + * - Set IF1 control byte + */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG3->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + canREG3->IF1CMD = 0x87U; + + /** - Setup IF2 for reading data + * - Wait until IF1 is ready for use + * - Set IF1 control byte + */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG3->IF2STAT & 0x80U) ==0x80U) + { + } /* Wait */ + canREG3->IF2CMD = 0x17U; + + /** - Setup bit timing + * - Setup baud rate prescaler extension + * - Setup TSeg2 + * - Setup TSeg1 + * - Setup sample jump width + * - Setup baud rate prescaler + */ + canREG3->BTR = (uint32)((uint32)0U << 16U) | + (uint32)((uint32)(3U - 1U) << 12U) | + (uint32)((uint32)((4U + 3U) - 1U) << 8U) | + (uint32)((uint32)(3U - 1U) << 6U) | + (uint32)(uint32)19U; + + + /** - CAN3 Port output values */ + canREG3->TIOC = (uint32)((uint32)1U << 18U ) + | (uint32)((uint32)0U << 17U ) + | (uint32)((uint32)0U << 16U ) + | (uint32)((uint32)1U << 3U ) + | (uint32)((uint32)1U << 2U ) + | (uint32)((uint32)1U << 1U ); + + canREG3->RIOC = (uint32)((uint32)1U << 18U ) + | (uint32)((uint32)0U << 17U ) + | (uint32)((uint32)0U << 16U ) + | (uint32)((uint32)1U << 3U ) + | (uint32)((uint32)0U << 2U ) + | (uint32)((uint32)0U << 1U ); + + /** - Leave configuration and initialization mode */ + canREG3->CTL &= ~(uint32)(0x00000041U); + + /** @note This function has to be called before the driver can be used.\n + * This function has to be executed in privileged mode.\n + */ + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + +/** @fn uint32 canTransmit(canBASE_t *node, uint32 messageBox, const uint8 * data) +* @brief Transmits a CAN message +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] messageBox Message box number of CAN node: +* - canMESSAGE_BOX1: CAN message box 1 +* - canMESSAGE_BOXn: CAN message box n [n: 1-64] +* - canMESSAGE_BOX64: CAN message box 64 +* @param[in] data Pointer to CAN TX data +* @return The function will return: +* - 0: When the setup of the TX message box wasn't successful +* - 1: When the setup of the TX message box was successful +* +* This function writes a CAN message into a CAN message box. +* This function is not reentrant. However, if a CAN interrupt occurs, the values of +* the IF registers are backup up and restored at the end of the ISR, since these are a shared resource. +* +*/ +/* SourceId : CAN_SourceId_002 */ +/* DesignId : CAN_DesignId_002 */ +/* Requirements : HL_SR208 */ +uint32 canTransmit(canBASE_t *node, uint32 messageBox, const uint8 * data) +{ + uint32 i; + uint32 success = 0U; + uint32 regIndex = (messageBox - 1U) >> 5U; + uint32 bitIndex = 1U << ((messageBox - 1U) & 0x1FU); + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + + + /** - Check for pending message: + * - pending message, return 0 + * - no pending message, start new transmission + */ + if ((node->TXRQx[regIndex] & bitIndex) != 0U) + { + success = 0U; + } + + else + { + /** - Wait until IF1 is ready for use */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((node->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + + /** - Configure IF1 for + * - Message direction - Write + * - Data Update + * - Start Transmission + */ + node->IF1CMD = 0x87U; + + /** - Copy TX data into IF1 */ + for (i = 0U; i < 8U; i++) + { +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + node->IF1DATx[i] = *data; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + data++; +#else + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + node->IF1DATx[s_canByteOrder[i]] = *data; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + data++; +#endif + } + + /** - Copy TX data into message box */ + /*SAFETYMCUSW 93 S MR: 6.1,6.2,10.1,10.2,10.3,10.4 "LDRA Tool issue" */ + node->IF1NO = (uint8) messageBox; + + success = 1U; + } + /** @note The function canInit has to be called before this function can be used.\n + * The user is responsible to initialize the message box. + */ + +/* USER CODE BEGIN (8) */ +/* USER CODE END */ + + return success; +} + +/* USER CODE BEGIN (9) */ +/* USER CODE END */ + +/** @fn uint32 canGetData(canBASE_t *node, uint32 messageBox, uint8 * const data) +* @brief Gets received a CAN message +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] messageBox Message box number of CAN node: +* - canMESSAGE_BOX1: CAN message box 1 +* - canMESSAGE_BOXn: CAN message box n [n: 1-64] +* - canMESSAGE_BOX64: CAN message box 64 +* @param[out] data Pointer to store CAN RX data +* @return The function will return: +* - 0: When RX message box hasn't received new data +* - 1: When RX data are stored in the data buffer +* - 3: When RX data are stored in the data buffer and a message was lost +* +* This function writes a CAN message into a CAN message box. +* +*/ +/* SourceId : CAN_SourceId_003 */ +/* DesignId : CAN_DesignId_003 */ +/* Requirements : HL_SR209 */ +uint32 canGetData(canBASE_t *node, uint32 messageBox, uint8 * const data) +{ + uint32 i; + uint32 size; + uint8 * pData = data; + uint32 success = 0U; + uint32 regIndex = (messageBox - 1U) >> 5U; + uint32 bitIndex = 1U << ((messageBox - 1U) & 0x1FU); + +/* USER CODE BEGIN (10) */ +/* USER CODE END */ + + /** - Check if new data have been arrived: + * - no new data, return 0 + * - new data, get received message + */ + if ((node->NWDATx[regIndex] & bitIndex) == 0U) + { + success = 0U; + } + + else + { + /** - Wait until IF2 is ready for use */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((node->IF2STAT & 0x80U) ==0x80U) + { + } /* Wait */ + + /** - Configure IF2 for + * - Message direction - Read + * - Data Read + * - Clears NewDat bit in the message object. + */ + node->IF2CMD = 0x17U; + + /** - Copy data into IF2 */ + /*SAFETYMCUSW 93 S MR: 6.1,6.2,10.1,10.2,10.3,10.4 "LDRA Tool issue" */ + node->IF2NO = (uint8) messageBox; + + /** - Wait until data are copied into IF2 */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((node->IF2STAT & 0x80U) ==0x80U) + { + } /* Wait */ + + /** - Get number of received bytes + * - Value from 0x8 to 0xF equals length 8. + */ + size = node->IF2MCTL & 0xFU; + if(size > 0x8U) + { + size = 0x8U; + } + + /** - Copy RX data into destination buffer */ + for (i = 0U; i < size; i++) + { +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + *pData = node->IF2DATx[i]; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + pData++; +#else + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + *pData = node->IF2DATx[s_canByteOrder[i]]; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + pData++; +#endif + } + + success = 1U; + } + /** - Check if data have been lost: + * - no data lost, return 1 + * - data lost, return 3 + */ + if ((node->IF2MCTL & 0x4000U) == 0x4000U) + { + success = 3U; + } + + /** @note The function canInit has to be called before this function can be used.\n + * The user is responsible to initialize the message box. + */ + +/* USER CODE BEGIN (11) */ +/* USER CODE END */ + + return success; +} + + +/** @fn uint32 canGetID(canBASE_t *node, uint32 messageBox) +* @brief Gets the Message Box's ID +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] messageBox Message box number of CAN node: +* - canMESSAGE_BOX1: CAN message box 1 +* - canMESSAGE_BOXn: CAN message box n [n: 1-64] +* - canMESSAGE_BOX64: CAN message box 64 +* @param[out] data Pointer to store CAN RX data +* @return The function will return the ID of the message box. +* +* This function gets the identifier of a CAN message box. +* +*/ +/* SourceId : CAN_SourceId_026 */ +/* DesignId : CAN_DesignId_020 */ +/* Requirements : HL_SR537 */ +uint32 canGetID(canBASE_t *node, uint32 messageBox) +{ + uint32 msgBoxID = 0U; + + + /** - Wait until IF2 is ready for use */ + while ((node->IF2STAT & 0x80U) ==0x80U) + { + } /* Wait */ + + /** - Configure IF2 for + * - Message direction - Read + * - Data Read + * - Clears NewDat bit in the message object. + */ + node->IF2CMD = 0x20U; + + /** - Copy message box number into IF2 */ + /*SAFETYMCUSW 93 S MR: 6.1,6.2,10.1,10.2,10.3,10.4 "LDRA Tool issue" */ + node->IF2NO = (uint8) messageBox; + + /** - Wait until data are copied into IF2 */ + while ((node->IF2STAT & 0x80U) ==0x80U) + { + } /* Wait */ + + /* Read Message Box ID from Arbitration register. */ + msgBoxID = (node->IF2ARB & 0x1FFFFFFFU); + + return msgBoxID; + +} + +/** @fn uint32 canUpdateID(canBASE_t *node, uint32 messageBox, uint32 msgBoxArbitVal) +* @brief Change CAN Message Box ID. +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] messageBox Message box number of CAN node: +* - canMESSAGE_BOX1: CAN message box 1 +* - canMESSAGE_BOXn: CAN message box n [n: 1-64] +* - canMESSAGE_BOX64: CAN message box 64 +* @param[in] msgBoxArbitVal (32 bit value): +* Bit 31 - Not used. +* Bit 30 - 0 - The 11-bit ("standard") identifier is used for this message object. +* 1 - The 29-bit ("extended") identifier is used for this message object. +* Bit 29 - 0 - Direction = Receive +* 1 - Direction = Transmit +* Bit 28:0 - Message Identifier. +* @return + +* +* This function changes the Identifier and other arbitration parameters of a CAN Message Box. +* +*/ +/* SourceId : CAN_SourceId_027 */ +/* DesignId : CAN_DesignId_021 */ +/* Requirements : HL_SR538 */ +void canUpdateID(canBASE_t *node, uint32 messageBox, uint32 msgBoxArbitVal) +{ + + /** - Wait until IF2 is ready for use */ + while ((node->IF2STAT & 0x80U) ==0x80U) + { + } /* Wait */ + + /** - Configure IF2 for + * - Message direction - Read + * - Data Read + * - Clears NewDat bit in the message object. + */ + node->IF2CMD = 0xA0U; + /* Copy passed value into the arbitration register. */ + node->IF2ARB &= 0x80000000U; + node->IF2ARB |= (msgBoxArbitVal & 0x7FFFFFFFU); + + /** - Update message box number. */ + /*SAFETYMCUSW 93 S MR: 6.1,6.2,10.1,10.2,10.3,10.4 "LDRA Tool issue" */ + node->IF2NO = (uint8) messageBox; + + /** - Wait until data are copied into IF2 */ + while ((node->IF2STAT & 0x80U) ==0x80U) + { + } /* Wait */ + +} + + +/* USER CODE BEGIN (12) */ +/* USER CODE END */ + +/** @fn uint32 canSendRemoteFrame(canBASE_t *node, uint32 messageBox) +* @brief Transmits a CAN Remote Frame. +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] messageBox Message box number of CAN node: +* - canMESSAGE_BOX1: CAN message box 1 +* - canMESSAGE_BOXn: CAN message box n [n: 1-64] +* - canMESSAGE_BOX64: CAN message box 64 +* @param[in] data Pointer to CAN TX data +* @return The function will return: +* - 0: When the setup of Send Remote Frame from message box wasn't successful +* - 1: When the setup of Send Remote Frame from message box was successful +* +* This function triggers Remote Frame Transmission from CAN message box. +* Note : Enable RTR must be set in the Message x Configuration in the GUI( x: 1 - 64) +* +*/ +/* SourceId : CAN_SourceId_028 */ +/* DesignId : CAN_DesignId_022 */ +/* Requirements : HL_SR531 */ +uint32 canSendRemoteFrame(canBASE_t *node, uint32 messageBox) +{ + + uint32 success = 0U; + uint32 regIndex = (messageBox - 1U) >> 5U; + uint32 bitIndex = 1U << ((messageBox - 1U) & 0x1FU); + + /** - Check for pending message: + * - pending message, return 0 + * - no pending message, start new transmission + */ + if ((node->TXRQx[regIndex] & bitIndex) != 0U) + { + success = 0U; + } + + else + { + /** - Wait until IF1 is ready for use */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((node->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + + /** - Request Transmission by setting TxRqst in message box */ + node->IF1CMD = (uint8) 0x84U; + + /** - Trigger Remote Frame Transmit from message box */ + /*SAFETYMCUSW 93 S MR: 6.1,6.2,10.1,10.2,10.3,10.4 "LDRA Tool issue" */ + node->IF1NO = (uint8) messageBox; + + success = 1U; + } + /** @note The function canInit has to be called before this function can be used.\n + * The user is responsible to initialize the message box. + */ + return success; +} + +/** @fn uint32 canFillMessageObjectData(canBASE_t *node, uint32 messageBox, const uint8 * data) +* @brief Fills the Message Object with the data but does not initiate transmission. +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] messageBox Message box number of CAN node: +* - canMESSAGE_BOX1: CAN message box 1 +* - canMESSAGE_BOXn: CAN message box n [n: 1-64] +* - canMESSAGE_BOX64: CAN message box 64 +* @return The function will return: +* - 0: When the Fill up of the TX message box wasn't successful +* - 1: When the Fill up of the TX message box was successful +* +* This function fills the Message Object with the data but does not initiate transmission. +* +*/ +/* SourceId : CAN_SourceId_029 */ +/* DesignId : CAN_DesignId_023 */ +/* Requirements : HL_SR532 */ +uint32 canFillMessageObjectData(canBASE_t *node, uint32 messageBox, const uint8 * data) +{ + uint32 i; + uint32 success = 0U; + uint32 regIndex = (messageBox - 1U) >> 5U; + uint32 bitIndex = 1U << ((messageBox - 1U) & 0x1FU); + + /** - Check for pending message: + * - pending message, return 0 + * - no pending message, start new transmission + */ + if ((node->TXRQx[regIndex] & bitIndex) != 0U) + { + success = 0U; + } + else + { + /** - Wait until IF1 is ready for use */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((node->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + + /** - Configure IF1 for + * - Message direction - Write + * - Data Update + */ + node->IF1CMD = 0x83U; + + /** - Copy TX data into IF1 */ + for (i = 0U; i < 8U; i++) + { +#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1)) + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + node->IF1DATx[i] = *data; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + data++; +#else + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + node->IF1DATx[s_canByteOrder[i]] = *data; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + data++; +#endif + } + + /** - Copy TX data into message box */ + /*SAFETYMCUSW 93 S MR: 6.1,6.2,10.1,10.2,10.3,10.4 "LDRA Tool issue" */ + node->IF1NO = (uint8) messageBox; + + success = 1U; + } + + return success; + +} + +/** @fn uint32 canIsTxMessagePending(canBASE_t *node, uint32 messageBox) +* @brief Gets Tx message box transmission status +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] messageBox Message box number of CAN node: +* - canMESSAGE_BOX1: CAN message box 1 +* - canMESSAGE_BOXn: CAN message box n [n: 1-64] +* - canMESSAGE_BOX64: CAN message box 64 +* @return The function will return the tx request flag +* +* Checks to see if the Tx message box has a pending Tx request, returns +* 0 is flag not set otherwise will return the Tx request flag itself. +*/ +/* SourceId : CAN_SourceId_004 */ +/* DesignId : CAN_DesignId_004 */ +/* Requirements : HL_SR210 */ +uint32 canIsTxMessagePending(canBASE_t *node, uint32 messageBox) +{ + uint32 flag; + uint32 regIndex = (messageBox - 1U) >> 5U; + uint32 bitIndex = 1U << ((messageBox - 1U) & 0x1FU); + +/* USER CODE BEGIN (13) */ +/* USER CODE END */ + + /** - Read Tx request register */ + flag = node->TXRQx[regIndex] & bitIndex; + +/* USER CODE BEGIN (14) */ +/* USER CODE END */ + + return flag; +} + +/* USER CODE BEGIN (15) */ +/* USER CODE END */ + +/** @fn uint32 canIsRxMessageArrived(canBASE_t *node, uint32 messageBox) +* @brief Gets Rx message box reception status +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] messageBox Message box number of CAN node: +* - canMESSAGE_BOX1: CAN message box 1 +* - canMESSAGE_BOXn: CAN message box n [n: 1-64] +* - canMESSAGE_BOX64: CAN message box 64 +* @return The function will return the new data flag +* +* Checks to see if the Rx message box has pending Rx data, returns +* 0 is flag not set otherwise will return the Tx request flag itself. +*/ +/* SourceId : CAN_SourceId_005 */ +/* DesignId : CAN_DesignId_005 */ +/* Requirements : HL_SR211 */ +uint32 canIsRxMessageArrived(canBASE_t *node, uint32 messageBox) +{ + uint32 flag; + uint32 regIndex = (messageBox - 1U) >> 5U; + uint32 bitIndex = 1U << ((messageBox - 1U) & 0x1FU); + +/* USER CODE BEGIN (16) */ +/* USER CODE END */ + + /** - Read Tx request register */ + flag = node->NWDATx[regIndex] & bitIndex; + +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + + return flag; +} + +/* USER CODE BEGIN (18) */ +/* USER CODE END */ + +/** @fn uint32 canIsMessageBoxValid(canBASE_t *node, uint32 messageBox) +* @brief Checks if message box is valid +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] messageBox Message box number of CAN node: +* - canMESSAGE_BOX1: CAN message box 1 +* - canMESSAGE_BOXn: CAN message box n [n: 1-64] +* - canMESSAGE_BOX64: CAN message box 64 +* @return The function will return the new data flag +* +* Checks to see if the message box is valid for operation, returns +* 0 is flag not set otherwise will return the validation flag itself. +*/ +/* SourceId : CAN_SourceId_006 */ +/* DesignId : CAN_DesignId_006 */ +/* Requirements : HL_SR212 */ +uint32 canIsMessageBoxValid(canBASE_t *node, uint32 messageBox) +{ + uint32 flag; + uint32 regIndex = (messageBox - 1U) >> 5U; + uint32 bitIndex = 1U << ((messageBox - 1U) & 0x1FU); + +/* USER CODE BEGIN (19) */ +/* USER CODE END */ + + /** - Read Tx request register */ + flag = node->MSGVALx[regIndex] & bitIndex; + +/* USER CODE BEGIN (20) */ +/* USER CODE END */ + + return flag; +} + +/* USER CODE BEGIN (21) */ +/* USER CODE END */ + +/** @fn uint32 canGetLastError(canBASE_t *node) +* @brief Gets last RX/TX-Error of CAN message traffic +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @return The function will return: +* - canERROR_OK (0): When no CAN error occurred +* - canERROR_STUFF (1): When a stuff error occurred on RX message +* - canERROR_FORMAT (2): When a form/format error occurred on RX message +* - canERROR_ACKNOWLEDGE (3): When a TX message wasn't acknowledged +* - canERROR_BIT1 (4): When a TX message monitored dominant level where recessive is expected +* - canERROR_BIT0 (5): When a TX message monitored recessive level where dominant is expected +* - canERROR_CRC (6): When a RX message has wrong CRC value +* - canERROR_NO (7): When no error occurred since last call of this function +* +* This function returns the last occurred error code of an RX or TX message, +* since the last call of this function. +* +*/ +/* SourceId : CAN_SourceId_007 */ +/* DesignId : CAN_DesignId_007 */ +/* Requirements : HL_SR213 */ +uint32 canGetLastError(canBASE_t *node) +{ + uint32 errorCode; + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ + + /** - Get last error code */ + errorCode = node->ES & 7U; + + /** @note The function canInit has to be called before this function can be used. */ + +/* USER CODE BEGIN (23) */ +/* USER CODE END */ + + return errorCode; +} + +/* USER CODE BEGIN (24) */ +/* USER CODE END */ + +/** @fn uint32 canGetErrorLevel(canBASE_t *node) +* @brief Gets error level of a CAN node +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @return The function will return: +* - canLEVEL_ACTIVE (0x00): When RX- and TX error counters are below 96 +* - canLEVEL_WARNING (0x40): When RX- or TX error counter are between 96 and 127 +* - canLEVEL_PASSIVE (0x20): When RX- or TX error counter are between 128 and 255 +* - canLEVEL_BUS_OFF (0x80): When RX- or TX error counter are above 255 +* +* This function returns the current error level of a CAN node. +* +*/ +/* SourceId : CAN_SourceId_008 */ +/* DesignId : CAN_DesignId_008 */ +/* Requirements : HL_SR214 */ +uint32 canGetErrorLevel(canBASE_t *node) +{ + uint32 errorLevel; + +/* USER CODE BEGIN (25) */ +/* USER CODE END */ + + /** - Get error level */ + errorLevel = node->ES & 0xE0U; + + /** @note The function canInit has to be called before this function can be used. */ + +/* USER CODE BEGIN (26) */ +/* USER CODE END */ + + return errorLevel; +} + +/* USER CODE BEGIN (27) */ +/* USER CODE END */ + +/** @fn void canEnableErrorNotification(canBASE_t *node) +* @brief Enable error notification +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* +* This function will enable the notification for the reaching the error levels warning, passive and bus off. +*/ +/* SourceId : CAN_SourceId_009 */ +/* DesignId : CAN_DesignId_009 */ +/* Requirements : HL_SR215 */ +void canEnableErrorNotification(canBASE_t *node) +{ +/* USER CODE BEGIN (28) */ +/* USER CODE END */ + + node->CTL |= 8U; + + /** @note The function canInit has to be called before this function can be used. */ + +/* USER CODE BEGIN (29) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (30) */ +/* USER CODE END */ + +/** @fn void canEnableStatusChangeNotification(canBASE_t *node) +* @brief Enable Status Change notification +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* +* This function will enable the notification for the status change RxOK, TxOK, PDA, WakeupPnd Interrupt. +*/ +/* SourceId : CAN_SourceId_030 */ +/* DesignId : CAN_DesignId_024 */ +/* Requirements : HL_SR533 */ +void canEnableStatusChangeNotification(canBASE_t *node) +{ + + node->CTL |= 4U; + + /** @note The function canInit has to be called before this function can be used. */ + +} + +/** @fn void canDisableStatusChangeNotification(canBASE_t *node) +* @brief Disable Status Change notification +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* +* This function will disable the notification for the status change RxOK, TxOK, PDA, WakeupPnd Interrupt. +*/ +/* SourceId : CAN_SourceId_031 */ +/* DesignId : CAN_DesignId_025 */ +/* Requirements : HL_SR534 */ +void canDisableStatusChangeNotification(canBASE_t *node) +{ + node->CTL &= ~(uint32)(4U); + + /** @note The function canInit has to be called before this function can be used. */ +} + +/* USER CODE BEGIN (31) */ +/* USER CODE END */ + +/** @fn void canDisableErrorNotification(canBASE_t *node) +* @brief Disable error notification +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* +* This function will disable the notification for the reaching the error levels warning, passive and bus off. +*/ +/* SourceId : CAN_SourceId_010 */ +/* DesignId : CAN_DesignId_010 */ +/* Requirements : HL_SR216 */ +void canDisableErrorNotification(canBASE_t *node) +{ +/* USER CODE BEGIN (32) */ +/* USER CODE END */ + + node->CTL &= ~(uint32)(8U); + + /** @note The function canInit has to be called before this function can be used. */ + +/* USER CODE BEGIN (33) */ +/* USER CODE END */ +} + +/** @fn void canEnableloopback(canBASE_t *node, canloopBackType_t Loopbacktype) +* @brief Disable error notification +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] Loopbacktype Type of Loopback: +* - Internal_Lbk: Internal Loop Back +* - External_Lbk: External Loop Back +* - Internal_Silent_Lbk: Internal Loop Back with Silent mode. +* +* This function will enable can loopback mode +*/ +/* SourceId : CAN_SourceId_011 */ +/* DesignId : CAN_DesignId_011 */ +/* Requirements : HL_SR521 */ +void canEnableloopback(canBASE_t *node, canloopBackType_t Loopbacktype) +{ + /* Enter Test Mode */ + node->CTL |= (uint32)((uint32)1U << 7U); + + /* Configure Loopback */ + node->TEST |= (uint32)Loopbacktype; + + /** @note The function canInit has to be called before this function can be used. */ +} + + +/** @fn void canDisableloopback(canBASE_t *node) +* @brief Disable error notification +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* +* This function will disable can loopback mode +*/ +/* SourceId : CAN_SourceId_012 */ +/* DesignId : CAN_DesignId_012 */ +/* Requirements : HL_SR522 */ +void canDisableloopback(canBASE_t *node) +{ + + + node->TEST &= ~(uint32)(0x00000118U); + + /* Exit Test Mode */ + node->CTL &= ~(uint32)((uint32)1U << 7U); + + /** @note The function canInit has to be called before this function can be used. */ +} + + +/** @fn void canIoSetDirection(canBASE_t *node,uint32 TxDir,uint32 RxDir) +* @brief Set Port Direction +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] TxDir - TX Pin direction +* @param[in] RxDir - RX Pin direction +* +* Set the direction of CAN pins at runtime when configured as IO pins. +*/ +/* SourceId : CAN_SourceId_013 */ +/* DesignId : CAN_DesignId_013 */ +/* Requirements : HL_SR217 */ +void canIoSetDirection(canBASE_t *node,uint32 TxDir,uint32 RxDir) +{ +/* USER CODE BEGIN (34) */ +/* USER CODE END */ + + node->TIOC = ((node->TIOC & 0xFFFFFFFBU) | (TxDir << 2U)); + node->RIOC = ((node->RIOC & 0xFFFFFFFBU) | (RxDir << 2U)); + +/* USER CODE BEGIN (35) */ +/* USER CODE END */ +} + +/** @fn void canIoSetPort(canBASE_t *node, uint32 TxValue, uint32 RxValue) +* @brief Write Port Value +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* @param[in] TxValue - TX Pin value 0 or 1 +* @param[in] RxValue - RX Pin value 0 or 1 +* +* Writes a value to TX and RX pin of a given CAN module when configured as IO pins. +*/ +/* SourceId : CAN_SourceId_014 */ +/* DesignId : CAN_DesignId_014 */ +/* Requirements : HL_SR218 */ +void canIoSetPort(canBASE_t *node, uint32 TxValue, uint32 RxValue) +{ +/* USER CODE BEGIN (36) */ +/* USER CODE END */ + + node->TIOC = ((node->TIOC & 0xFFFFFFFDU) | (TxValue << 1U)); + node->RIOC = ((node->RIOC & 0xFFFFFFFDU) | (RxValue << 1U)); + +/* USER CODE BEGIN (37) */ +/* USER CODE END */ +} + +/** @fn uint32 canIoTxGetBit(canBASE_t *node) +* @brief Read TX Bit +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* +* Reads a the current value from the TX pin of the given CAN port +*/ +/* SourceId : CAN_SourceId_015 */ +/* DesignId : CAN_DesignId_015 */ +/* Requirements : HL_SR219 */ +uint32 canIoTxGetBit(canBASE_t *node) +{ +/* USER CODE BEGIN (38) */ +/* USER CODE END */ + + return (node->TIOC & 1U); +} + +/** @fn uint32 canIoRxGetBit(canBASE_t *node) +* @brief Read RX Bit +* @param[in] node Pointer to CAN node: +* - canREG1: CAN1 node pointer +* - canREG2: CAN2 node pointer +* - canREG3: CAN3 node pointer +* +* Reads a the current value from the RX pin of the given CAN port +*/ +/* SourceId : CAN_SourceId_016 */ +/* DesignId : CAN_DesignId_016 */ +/* Requirements : HL_SR220 */ +uint32 canIoRxGetBit(canBASE_t *node) +{ +/* USER CODE BEGIN (39) */ +/* USER CODE END */ + + return (node->RIOC & 1U); +} + + +/** @fn void can1GetConfigValue(can_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the CAN1 configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : CAN_SourceId_017 */ +/* DesignId : CAN_DesignId_017 */ +/* Requirements : HL_SR224 */ +void can1GetConfigValue(can_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_CTL = CAN1_CTL_CONFIGVALUE; + config_reg->CONFIG_ES = CAN1_ES_CONFIGVALUE; + config_reg->CONFIG_BTR = CAN1_BTR_CONFIGVALUE; + config_reg->CONFIG_TEST = CAN1_TEST_CONFIGVALUE; + config_reg->CONFIG_ABOTR = CAN1_ABOTR_CONFIGVALUE; + config_reg->CONFIG_INTMUX0 = CAN1_INTMUX0_CONFIGVALUE; + config_reg->CONFIG_INTMUX1 = CAN1_INTMUX2_CONFIGVALUE; + config_reg->CONFIG_INTMUX2 = CAN1_INTMUX2_CONFIGVALUE; + config_reg->CONFIG_INTMUX3 = CAN1_INTMUX3_CONFIGVALUE; + config_reg->CONFIG_TIOC = CAN1_TIOC_CONFIGVALUE; + config_reg->CONFIG_RIOC = CAN1_RIOC_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_CTL = canREG1->CTL; + config_reg->CONFIG_ES = canREG1->ES; + config_reg->CONFIG_BTR = canREG1->BTR; + config_reg->CONFIG_TEST = canREG1->TEST; + config_reg->CONFIG_ABOTR = canREG1->ABOTR; + config_reg->CONFIG_INTMUX0 = canREG1->INTMUXx[0]; + config_reg->CONFIG_INTMUX1 = canREG1->INTMUXx[1]; + config_reg->CONFIG_INTMUX2 = canREG1->INTMUXx[2]; + config_reg->CONFIG_INTMUX3 = canREG1->INTMUXx[3]; + config_reg->CONFIG_TIOC = canREG1->TIOC; + config_reg->CONFIG_RIOC = canREG1->RIOC; + } +} +/** @fn void can2GetConfigValue(can_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the CAN2 configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : CAN_SourceId_018 */ +/* DesignId : CAN_DesignId_017 */ +/* Requirements : HL_SR224 */ +void can2GetConfigValue(can_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_CTL = CAN2_CTL_CONFIGVALUE; + config_reg->CONFIG_ES = CAN2_ES_CONFIGVALUE; + config_reg->CONFIG_BTR = CAN2_BTR_CONFIGVALUE; + config_reg->CONFIG_TEST = CAN2_TEST_CONFIGVALUE; + config_reg->CONFIG_ABOTR = CAN2_ABOTR_CONFIGVALUE; + config_reg->CONFIG_INTMUX0 = CAN2_INTMUX0_CONFIGVALUE; + config_reg->CONFIG_INTMUX1 = CAN2_INTMUX2_CONFIGVALUE; + config_reg->CONFIG_INTMUX2 = CAN2_INTMUX2_CONFIGVALUE; + config_reg->CONFIG_INTMUX3 = CAN2_INTMUX3_CONFIGVALUE; + config_reg->CONFIG_TIOC = CAN2_TIOC_CONFIGVALUE; + config_reg->CONFIG_RIOC = CAN2_RIOC_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_CTL = canREG2->CTL; + config_reg->CONFIG_ES = canREG2->ES; + config_reg->CONFIG_BTR = canREG2->BTR; + config_reg->CONFIG_TEST = canREG2->TEST; + config_reg->CONFIG_ABOTR = canREG2->ABOTR; + config_reg->CONFIG_INTMUX0 = canREG2->INTMUXx[0]; + config_reg->CONFIG_INTMUX1 = canREG2->INTMUXx[1]; + config_reg->CONFIG_INTMUX2 = canREG2->INTMUXx[2]; + config_reg->CONFIG_INTMUX3 = canREG2->INTMUXx[3]; + config_reg->CONFIG_TIOC = canREG2->TIOC; + config_reg->CONFIG_RIOC = canREG2->RIOC; + } +} +/** @fn void can3GetConfigValue(can_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the CAN3 configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : CAN_SourceId_019 */ +/* DesignId : CAN_DesignId_017 */ +/* Requirements : HL_SR224 */ +void can3GetConfigValue(can_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_CTL = CAN3_CTL_CONFIGVALUE; + config_reg->CONFIG_ES = CAN3_ES_CONFIGVALUE; + config_reg->CONFIG_BTR = CAN3_BTR_CONFIGVALUE; + config_reg->CONFIG_TEST = CAN3_TEST_CONFIGVALUE; + config_reg->CONFIG_ABOTR = CAN3_ABOTR_CONFIGVALUE; + config_reg->CONFIG_INTMUX0 = CAN3_INTMUX0_CONFIGVALUE; + config_reg->CONFIG_INTMUX1 = CAN3_INTMUX2_CONFIGVALUE; + config_reg->CONFIG_INTMUX2 = CAN3_INTMUX2_CONFIGVALUE; + config_reg->CONFIG_INTMUX3 = CAN3_INTMUX3_CONFIGVALUE; + config_reg->CONFIG_TIOC = CAN3_TIOC_CONFIGVALUE; + config_reg->CONFIG_RIOC = CAN3_RIOC_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_CTL = canREG3->CTL; + config_reg->CONFIG_ES = canREG3->ES; + config_reg->CONFIG_BTR = canREG3->BTR; + config_reg->CONFIG_TEST = canREG3->TEST; + config_reg->CONFIG_ABOTR = canREG3->ABOTR; + config_reg->CONFIG_INTMUX0 = canREG3->INTMUXx[0]; + config_reg->CONFIG_INTMUX1 = canREG3->INTMUXx[1]; + config_reg->CONFIG_INTMUX2 = canREG3->INTMUXx[2]; + config_reg->CONFIG_INTMUX3 = canREG3->INTMUXx[3]; + config_reg->CONFIG_TIOC = canREG3->TIOC; + config_reg->CONFIG_RIOC = canREG3->RIOC; + } +} + + + + + + + Index: firmware/source/crc.c =================================================================== diff -u --- firmware/source/crc.c (revision 0) +++ firmware/source/crc.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,552 @@ +/** @file crc.c +* @brief CRC Driver Source File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - API Functions +* - Interrupt Handlers +* . +* which are relevant for the CRC driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "crc.h" +#include "sys_vim.h" +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @fn void crcInit(void) +* @brief Initializes the crc Driver +* +* This function initializes the crc module. +*/ +/* SourceId : CRC_SourceId_001 */ +/* DesignId : CRC_DesignId_001 */ +/* Requirements: HL_SR107 */ +void crcInit(void) +{ +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + /** @b initialize @b CRC */ + + /** - Reset PSA*/ + crcREG->CTRL0 = (uint32)((uint32)1U << 0U) + | (uint32)((uint32)1U << 8U); + + /** - Pulling PSA out of reset */ + crcREG->CTRL0=0x00000000U; + + /** - Setup the Data trace for channel1 */ + crcREG->CTRL2 |= (uint32)0U << 4U; + + /** - Set interrupt enable + * - Enable/Disable timeout + * - Enable/Disable underrun interrupt + * - Enable/Disable overrun interrupt + * - Enable/Disable CRC fail interrupt + * - Enable/Disable compression interrupt + */ + crcREG->INTS= 0x00000000U + | 0x00000000U + | 0x00000000U + | 0x00000000U + | 0x00000000U + | 0x00000000U + | 0x00000000U + | 0x00000000U + | 0x00000000U + | 0x00000000U; + + + /** - Setup pattern count preload register for channel 1 and channel 2*/ + crcREG->PCOUNT_REG1=0x00000000U; + crcREG->PCOUNT_REG2=0x00000000U; + + + /** - Setup sector count preload register for channel 1 and channel 2*/ + crcREG->SCOUNT_REG1=0x00000000U; + crcREG->SCOUNT_REG2=0x00000000U; + + /** - Setup watchdog timeout for channel 1 and channel 2*/ + crcREG->WDTOPLD1=0x00000000U; + crcREG->WDTOPLD2=0x00000000U; + + /** - Setup block complete timeout for channel 1 and channel 2*/ + crcREG->BCTOPLD1=0x00000000U; + crcREG->BCTOPLD2=0x00000000U; + + /** - Setup CRC value low for channel 1 and channel 2*/ + crcREG->REGL1=0x00000000U; + crcREG->REGL2=0x00000000U; + + /** - Setup CRC value high for channel 1 and channel 2*/ + crcREG->REGH1=0x00000000U; + crcREG->REGH2=0x00000000U; + + /** - Setup the Channel mode */ + crcREG->CTRL2 |= (uint32)(CRC_FULL_CPU) | (uint32)((uint32)CRC_FULL_CPU << 8U); + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ +} + + +/** @fn void crcSendPowerDown(crcBASE_t *crc) +* @brief Send crc power down +* @param[in] crc - crc module base address +* +* Send crc power down signal to enter into sleep mode +*/ +/* SourceId : CRC_SourceId_002 */ +/* DesignId : CRC_DesignId_002 */ +/* Requirements: HL_SR108 */ +void crcSendPowerDown(crcBASE_t *crc) +{ +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + + crc->CTRL1 |= 0x00000001U; + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ +} + +/** @fn void crcSignGen(crcBASE_t *crc,crcModConfig_t *param) +* @brief set the mode specific parameters for signature generation +* @param[in] crc - crc module base address +* @param[in] param - structure holding mode specific parameters +* Generate CRC signature +*/ +/* SourceId : CRC_SourceId_003 */ +/* DesignId : CRC_DesignId_003 */ +/* Requirements: HL_SR109 */ +void crcSignGen(crcBASE_t *crc,crcModConfig_t *param) +{ +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + uint32 i = 0U, psaSigx; + volatile uint64 * ptr64, * psaSigx_ptr64; + ptr64=param->src_data_pat; + + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 439 S MR:11.3 "Pointer Manupulation required to find offset - Advisory as per MISRA" */ + psaSigx = (uint32)(&crc->PSA_SIGREGL1) + ((uint32)(param->crc_channel) * 0x40U); + psaSigx_ptr64 = (uint64 *) (psaSigx); + + if(param->mode==CRC_AUTO) + { +/** -do a channel reset +* -clear all interrupts by reading offset register +* -set CRC FAIL interrupt +* -set the pattern count and sector count +* -HW trigger in AUTO mode for CRC register update +* -copy from memory location to CRC register using DMA +* -copy from memory to PSA signature register using DMA +* -frame or block transfer,auto init +* -compare with crc reference +* -do a channel reset +*/ + } + else if(param->mode==CRC_SEMI_CPU) + { + /* after DMA does the transfer,CPU is invoked by CC interrupt to do signature verification */ + } + else if(param->mode==CRC_FULL_CPU) + { + for(i=0U;idata_length;i++) + { + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + *psaSigx_ptr64 = *ptr64; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + ptr64++; + } +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + } + else + { + /* Empty */ + } +} + +/** @fn void crcSetConfig(crcBASE_t *crc,crcConfig_t *param) +* @brief Set crc configurations +* @param[in] crc - crc module base address +* @param[in] param - structure for channel configuration +* Set Channel parameters +*/ +/* SourceId : CRC_SourceId_004 */ +/* DesignId : CRC_DesignId_004 */ +/* Requirements: HL_SR110 */ +void crcSetConfig(crcBASE_t *crc,crcConfig_t *param) +{ +/* USER CODE BEGIN (8) */ +/* USER CODE END */ + + switch (param->crc_channel) + { + case 0U: + crc->CTRL2 &=0xFFFFFFFCU; + crc->CTRL0 |=0x00000001U; + crc->CTRL0 &=0xFFFFFFFEU; + crc->PCOUNT_REG1 = param->pcount; + crc->SCOUNT_REG1 = param->scount; + crc->WDTOPLD1= param->wdg_preload; + crc->BCTOPLD1= param->block_preload; + crc->CTRL2 |= param->mode; + break; + case 1U: + crc->CTRL2 &=0xFFFFFCFFU; + crc->CTRL0 |=0x00000100U; + crc->CTRL0 &=0xFFFFFEFFU; + crc->PCOUNT_REG2 = param->pcount; + crc->SCOUNT_REG2= param->scount; + crc->WDTOPLD2= param->wdg_preload; + crc->BCTOPLD2= param->block_preload; + crc->CTRL2 |= (uint32)((uint32)param->mode << 8U); + break; + default : + break; + } + +/* USER CODE BEGIN (9) */ +/* USER CODE END */ +} + +/** @fn uint64 crcGetSectorSig(crcBASE_t *crc,uint32 channel) +* @brief get generated sector signature +* @param[in] crc - crc module base address +* @param[in] channel - crc channel +* CRC_CH1 - channel1 +* CRC_CH2 - channel2 +* CRC_CH3 - channel3 +* CRC_CH4 - channel4 +* +* Get Sector signature value of selected channel +*/ +/* SourceId : CRC_SourceId_005 */ +/* DesignId : CRC_DesignId_006 */ +/* Requirements: HL_SR111 */ +uint64 crcGetSectorSig(crcBASE_t *crc,uint32 channel) +{ + uint64 status=0U; + uint32 CRC_PSA_SECSIGREGH1 = crcREG->PSA_SECSIGREGH1; + uint32 CRC_PSA_SECSIGREGL1 = crcREG->PSA_SECSIGREGL1; + uint32 CRC_PSA_SECSIGREGH2 = crcREG->PSA_SECSIGREGH2; + uint32 CRC_PSA_SECSIGREGL2 = crcREG->PSA_SECSIGREGL2; + +/* USER CODE BEGIN (10) */ +/* USER CODE END */ + switch (channel) + { + case 0U: + status = (((uint64)(CRC_PSA_SECSIGREGL1) << 32U) | (uint64)(CRC_PSA_SECSIGREGH1)); + break; + case 1U: + status = (((uint64)(CRC_PSA_SECSIGREGL2) << 32U) | (uint64)(CRC_PSA_SECSIGREGH2)); + break; + default : + break; + } + return status; + +/* USER CODE BEGIN (11) */ +/* USER CODE END */ +} + + +/** @fn uint32 crcGetFailedSector(crcBASE_t *crc,uint32 channel) +* @brief get failed sector details +* @param[in] crc - crc module base address +* @param[in] channel - crc channel +* CRC_CH1 - channel1 +* CRC_CH2 - channel2 +* CRC_CH3 - channel3 +* CRC_CH4 - channel4 +* +* Get Failed Sector value of selected channel +*/ +/* SourceId : CRC_SourceId_006 */ +/* DesignId : CRC_DesignId_007 */ +/* Requirements: HL_SR112 */ +uint32 crcGetFailedSector(crcBASE_t *crc,uint32 channel) +{ + + uint32 sector=0U; + +/* USER CODE BEGIN (12) */ +/* USER CODE END */ + + switch (channel) + { + case 0U: + sector = crc->CURSEC_REG1; + break; + case 1U: + sector = crc->CURSEC_REG2; + break; + default : + break; + } + return sector; +/* USER CODE BEGIN (13) */ +/* USER CODE END */ +} + +/** @fn uint32 crcGetIntrPend(crcBASE_t *crc,uint32 channel) +* @brief get highest priority interrupt pending +* @param[in] crc - crc module base address +* @param[in] channel - crc channel +* +* Get pending Interrupts of selected channel +*/ +/* SourceId : CRC_SourceId_007 */ +/* DesignId : CRC_DesignId_008 */ +/* Requirements: HL_SR113 */ +uint32 crcGetIntrPend(crcBASE_t *crc,uint32 channel) +{ +/* USER CODE BEGIN (14) */ +/* USER CODE END */ + return crc->INT_OFFSET_REG; +/* USER CODE BEGIN (15) */ +/* USER CODE END */ +} + + +/** @fn void crcChannelReset(crcBASE_t *crc,uint32 channel) +* @brief Reset the channel configurations +* @param[in] crc - crc module base address +* @param[in] channel-crc channel +* CRC_CH1 - channel1 +* CRC_CH2 - channel2 +* CRC_CH3 - channel3 +* CRC_CH4 - channel4 +* +* Reset configurations of the selected channels. +*/ +/* SourceId : CRC_SourceId_008 */ +/* DesignId : CRC_DesignId_009 */ +/* Requirements: HL_SR114 */ +void crcChannelReset(crcBASE_t *crc,uint32 channel) +{ +/* USER CODE BEGIN (16) */ +/* USER CODE END */ + + if(channel == 0U) + { + crc->CTRL0 |= (uint32)((uint32)1U << 0U); /** Reset the CRC channel */ + crc->CTRL0 &= ~(uint32)((uint32)1U << 0U); /** Exit the reset */ + } + else if(channel == 1U) + { + crc->CTRL0 |= (uint32)((uint32)1U << 8U); /** Reset the CRC channel */ + crc->CTRL0 &= ~(uint32)((uint32)1U << 8U); /** Exit the reset */ + } + else + { + /** Empty */ + } +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + } + + +/** @fn crcEnableNotification(crcBASE_t *crc, uint32 flags) +* @brief Enable interrupts +* @param[in] crc - crc module base address +* @param[in] flags - Interrupts to be enabled, can be ored value of: +* CRC_CH2_TO - channel3 timeout error, +* CRC_CH2_UR - channel3 underrun error, +* CRC_CH2_OR - channel3 overrun error, +* CRC_CH2_FAIL - channel3 crc error, +* CRC_CH2_CC - channel3 compression complete interrupt , +* CRC_CH1_TO - channel4 timeout error, +* CRC_CH1_UR - channel4 underrun error, +* CRC_CH1_OR - channel4 overrun error, +* CRC_CH1_FAIL - channel4 crc error, +* CRC_CH1_CC - channel4 compression complete interrupt +* +* Enable Notifications / Interrupts +*/ +/* SourceId : CRC_SourceId_009 */ +/* DesignId : CRC_DesignId_010 */ +/* Requirements: HL_SR115 */ +void crcEnableNotification(crcBASE_t *crc, uint32 flags) +{ +/* USER CODE BEGIN (18) */ +/* USER CODE END */ + + crc->INTS= flags; + +/* USER CODE BEGIN (19) */ +/* USER CODE END */ +} + + +/** @fn crcDisableNotification(crcBASE_t *crc, uint32 flags) +* @brief Disable interrupts +* @param[in] crc - crc module base address +* @param[in] flags - Interrupts to be disabled, can be ored value of: +* CRC_CH2_TO - channel3 timeout error, +* CRC_CH2_UR - channel3 underrun error, +* CRC_CH2_OR - channel3 overrun error, +* CRC_CH2_FAIL - channel3 crc error, +* CRC_CH2_CC - channel3 compression complete interrupt , +* CRC_CH1_TO - channel4 timeout error, +* CRC_CH1_UR - channel4 underrun error, +* CRC_CH1_OR - channel4 overrun error, +* CRC_CH1_FAIL - channel4 crc error, +* CRC_CH1_CC - channel4 compression complete interrupt +* +* Disable Notifications / Interrupts +*/ +/* SourceId : CRC_SourceId_010 */ +/* DesignId : CRC_DesignId_011 */ +/* Requirements: HL_SR116 */ +void crcDisableNotification(crcBASE_t *crc, uint32 flags) +{ +/* USER CODE BEGIN (20) */ +/* USER CODE END */ + + crc->INTR= flags; + +/* USER CODE BEGIN (21) */ +/* USER CODE END */ +} + +/** @fn uint32 crcGetPSASig(crcBASE_t *crc,uint32 channel) +* @brief get genearted PSA signature used for FULL CPU mode +* @param[in] crc - crc module base address +* @param[in] channel - crc channel +* CRC_CH1 - channel1 +* CRC_CH2 - channel2 +* CRC_CH3 - channel3 +* CRC_CH4 - channel4 +* +* Get PSA signature used for FULL CPU mode of selected channel +*/ +/* SourceId : CRC_SourceId_011 */ +/* DesignId : CRC_DesignId_005 */ +/* Requirements: HL_SR525 */ +uint64 crcGetPSASig(crcBASE_t *crc,uint32 channel) +{ + uint64 status = 0U; + uint32 CRC_PSA_SIGREGH1 = crcREG->PSA_SIGREGH1; + uint32 CRC_PSA_SIGREGL1 = crcREG->PSA_SIGREGL1; + uint32 CRC_PSA_SIGREGH2 = crcREG->PSA_SIGREGH2; + uint32 CRC_PSA_SIGREGL2 = crcREG->PSA_SIGREGL2; + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ + switch (channel) + { + case 0U: + status = (((uint64)(CRC_PSA_SIGREGL1) << 32U) | (uint64)(CRC_PSA_SIGREGH1)); + break; + case 1U: + status = (((uint64)(CRC_PSA_SIGREGL2) << 32U) | (uint64)(CRC_PSA_SIGREGH2)); + break; + default : + break; + } + return status; + +/* USER CODE BEGIN (23) */ +/* USER CODE END */ +} + + +/** @fn void crcGetConfigValue(crc_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the CRC configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : CRC_SourceId_012 */ +/* DesignId : CRC_DesignId_012 */ +/* Requirements: HL_SR119 */ +void crcGetConfigValue(crc_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_CTRL0 = CRC_CTRL0_CONFIGVALUE; + config_reg->CONFIG_CTRL1 = CRC_CTRL1_CONFIGVALUE; + config_reg->CONFIG_CTRL2 = CRC_CTRL2_CONFIGVALUE; + config_reg->CONFIG_INTS = CRC_INTS_CONFIGVALUE; + config_reg->CONFIG_PCOUNT_REG1 = CRC_PCOUNT_REG1_CONFIGVALUE; + config_reg->CONFIG_SCOUNT_REG1 = CRC_SCOUNT_REG1_CONFIGVALUE; + config_reg->CONFIG_WDTOPLD1 = CRC_WDTOPLD1_CONFIGVALUE; + config_reg->CONFIG_BCTOPLD1 = CRC_BCTOPLD1_CONFIGVALUE; + config_reg->CONFIG_PCOUNT_REG2 = CRC_PCOUNT_REG2_CONFIGVALUE; + config_reg->CONFIG_SCOUNT_REG2 = CRC_SCOUNT_REG2_CONFIGVALUE; + config_reg->CONFIG_WDTOPLD2 = CRC_WDTOPLD2_CONFIGVALUE; + config_reg->CONFIG_BCTOPLD2 = CRC_BCTOPLD2_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_CTRL0 = crcREG->CTRL0; + config_reg->CONFIG_CTRL1 = crcREG->CTRL1; + config_reg->CONFIG_CTRL2 = crcREG->CTRL2; + config_reg->CONFIG_INTS = crcREG->INTS; + config_reg->CONFIG_PCOUNT_REG1 = crcREG->PCOUNT_REG1; + config_reg->CONFIG_SCOUNT_REG1 = crcREG->SCOUNT_REG1; + config_reg->CONFIG_WDTOPLD1 = crcREG->WDTOPLD1; + config_reg->CONFIG_BCTOPLD1 = crcREG->BCTOPLD1; + config_reg->CONFIG_PCOUNT_REG2 = crcREG->PCOUNT_REG2; + config_reg->CONFIG_SCOUNT_REG2 = crcREG->SCOUNT_REG2; + config_reg->CONFIG_WDTOPLD2 = crcREG->WDTOPLD2; + config_reg->CONFIG_BCTOPLD2 = crcREG->BCTOPLD2; + } +} + + Index: firmware/source/dabort.asm =================================================================== diff -u --- firmware/source/dabort.asm (revision 0) +++ firmware/source/dabort.asm (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,146 @@ +;------------------------------------------------------------------------------- +; dabort.asm +; +; Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +; +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions +; are met: +; +; Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; +; Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the +; distribution. +; +; Neither the name of Texas Instruments Incorporated nor the names of +; its contributors may be used to endorse or promote products derived +; from this software without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +; +; +; + + .text + .arm + + +;------------------------------------------------------------------------------- +; Run Memory Test + + .ref custom_dabort + .def _dabort + .asmfunc + +_dabort + stmfd r13!, {r0 - r12, lr}; push registers and link register on to stack + + ldr r12, esmsr3 ; ESM Group3 status register + ldr r0, [r12] + tst r0, #0x8 ; check if bit 3 is set, this indicates uncorrectable ECC error on B0TCM + bne ramErrorFound + tst r0, #0x20 ; check if bit 5 is set, this indicates uncorrectable ECC error on B1TCM + bne ramErrorFound2 + +noRAMerror + tst r0, #0x80 ; check if bit 7 is set, this indicates uncorrectable ECC error on ATCM + bne flashErrorFound + + bl custom_dabort ; custom data abort handler required + ; If this custom handler is written in assembly, all registers used in the routine + ; and the link register must be saved on to the stack upon entry, and restored before + ; return from the routine. + + ldmfd r13!, {r0 - r12, lr}; pop registers and link register from stack + subs pc, lr, #8 ; restore state of CPU when abort occurred, and branch back to instruction that was aborted + +ramErrorFound + ldr r1, ramctrl ; RAM control register for B0TCM TCRAMW + ldr r2, [r1] + tst r2, #0x100 ; check if bit 8 is set in RAMCTRL, this indicates ECC memory write is enabled + beq ramErrorReal + mov r2, #0x20 + str r2, [r1, #0x10] ; clear RAM error status register + + mov r2, #0x08 + str r2, [r12] ; clear ESM group3 channel3 flag for uncorrectable RAM ECC errors + mov r2, #5 + str r2, [r12, #0x18] ; The nERROR pin will become inactive once the LTC counter expires + + ldmfd r13!, {r0 - r12, lr} + subs pc, lr, #4 ; branch to instruction after the one that caused the abort + ; this is the case because the data abort was caused intentionally + ; and we do not want to cause the same data abort again. + +ramErrorFound2 + ldr r1, ram2ctrl ; RAM control register for B1TCM TCRAMW + ldr r2, [r1] + tst r2, #0x100 ; check if bit 8 is set in RAMCTRL, this indicates ECC memory write is enabled + beq ramErrorReal + mov r2, #0x20 + str r2, [r1, #0x10] ; clear RAM error status register + + mov r2, #0x20 + str r2, [r12] ; clear ESM group3 flags channel5 flag for uncorrectable RAM ECC errors + mov r2, #5 + str r2, [r12, #0x18] ; The nERROR pin will become inactive once the LTC counter expires + + ldmfd r13!, {r0 - r12, lr} + subs pc, lr, #4 ; branch to instruction after the one that caused the abort + ; this is the case because the data abort was caused intentionally + ; and we do not want to cause the same data abort again. + + +ramErrorReal + b ramErrorReal ; branch here forever as continuing operation is not recommended + +flashErrorFound + ldr r1, flashbase + ldr r2, [r1, #0x6C] ; read FDIAGCTRL register + + mov r2, r2, lsr #16 + tst r2, #5 ; check if bits 19:16 are 5, this indicates diagnostic mode is enabled + beq flashErrorReal + mov r2, #1 + mov r2, r2, lsl #8 + + str r2, [r1, #0x1C] ; clear FEDACSTATUS error flag + + mov r2, #0x80 + str r2, [r12] ; clear ESM group3 flag for uncorrectable flash ECC error + mov r2, #5 + str r2, [r12, #0x18] ; The nERROR pin will become inactive once the LTC counter expires + + ldmfd r13!, {r0 - r12, lr} + subs pc, lr, #4 ; branch to instruction after the one that caused the abort + ; this is the case because the data abort was caused intentionally + ; and we do not want to cause the same data abort again. + + +flashErrorReal + b flashErrorReal ; branch here forever as continuing operation is not recommended + +esmsr3 .word 0xFFFFF520 +ramctrl .word 0xFFFFF800 +ram2ctrl .word 0xFFFFF900 +ram1errstat .word 0xFFFFF810 +ram2errstat .word 0xFFFFF910 +flashbase .word 0xFFF87000 + + .endasmfunc + + Index: firmware/source/dcc.c =================================================================== diff -u --- firmware/source/dcc.c (revision 0) +++ firmware/source/dcc.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,444 @@ +/** @file dcc.c +* @brief DCC Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "dcc.h" +#include "sys_vim.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @fn void dccInit(void) +* @brief Initializes the DCC Driver +* +* This function initializes the DCC module. +*/ +/* SourceId : DCC_SourceId_001 */ +/* DesignId : DCC_DesignId_001 */ +/* Requirements: HL_SR305 */ +void dccInit(void) +{ + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + /** @b initialize @b DCC1 */ + + /** DCC1 Clock0 Counter Seed value configuration */ + dccREG1->CNT0SEED = 39204U; + + /** DCC1 Clock0 Valid Counter Seed value configuration */ + dccREG1->VALID0SEED = 792U; + + /** DCC1 Clock1 Counter Seed value configuration */ + dccREG1->CNT1SEED = 544500U; + + /** DCC1 Clock1 Source 1 Select */ + dccREG1->CNT1CLKSRC = (uint32)((uint32)10U << 12U) | /** DCC Enable / Disable Key */ + (uint32) DCC1_CNT1_PLL1; /** DCC1 Clock Source 1 */ + + dccREG1->CNT0CLKSRC = (uint32)DCC1_CNT0_OSCIN; /** DCC1 Clock Source 0 */ + + /** DCC1 Global Control register configuration */ + dccREG1->GCTRL = (uint32)0xAU | /** Enable / Disable DCC1 */ + (uint32)((uint32)0xAU << 4U) | /** Error Interrupt */ + (uint32)((uint32)0x5U << 8U) | /** Single Shot mode */ + (uint32)((uint32)0xAU << 12U); /** Done Interrupt */ + + + /** @b initialize @b DCC2 */ + + /** DCC2 Clock0 Counter Seed value configuration */ + dccREG2->CNT0SEED = 0U; + + /** DCC2 Clock0 Valid Counter Seed value configuration */ + dccREG2->VALID0SEED = 0U; + + /** DCC2 Clock1 Counter Seed value configuration */ + dccREG2->CNT1SEED = 0U; + + /** DCC2 Clock1 Source 1 Select */ + dccREG2->CNT1CLKSRC = (uint32)((uint32)0xAU << 12U) | /** DCC Enable Key */ + (uint32) DCC2_CNT1_VCLK; /** DCC2 Clock Source 1 */ + + dccREG2->CNT0CLKSRC = (uint32)DCC2_CNT0_OSCIN; /** DCC2 Clock Source 0 */ + + /** DCC2 Global Control register configuration */ + dccREG2->GCTRL = (uint32)0xAU | /** Enable DCC2 */ + (uint32)((uint32)0xAU << 4U) | /** Error Interrupt */ + (uint32)((uint32)0x5U << 8U) | /** Single Shot mode */ + (uint32)((uint32)0xAU << 12U); /** Done Interrupt */ + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + +} + +/** @fn void dccSetCounter0Seed(dccBASE_t *dcc, uint32 cnt0seed) +* @brief Set dcc Clock source 0 counter seed value +* @param[in] dcc Pointer to DCC module: +* - dccREG1: DCC1 module pointer +* - dccREG2: DCC2 module pointer +* @param[in] cnt0seed - Clock Source 0 Counter seed value +* +* This function sets the seed value for Clock source 0 counter. +* +*/ +/* SourceId : DCC_SourceId_002 */ +/* DesignId : DCC_DesignId_002 */ +/* Requirements: HL_SR306 */ +void dccSetCounter0Seed(dccBASE_t *dcc, uint32 cnt0seed) +{ +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + + dcc->CNT0SEED = cnt0seed; + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ +} + +/** @fn void dccSetTolerance(dccBASE_t *dcc, uint32 valid0seed) +* @brief Set dcc Clock source 0 counter seed value +* @param[in] dcc Pointer to DCC module: +* - dccREG1: DCC1 module pointer +* - dccREG2: DCC2 module pointer +* @param[in] valid0seed - Clock Source 0 Counter tolerance value +* +* This function sets the seed value for Clock source 0 tolerance or +* valid counter. +* +*/ +/* SourceId : DCC_SourceId_003 */ +/* DesignId : DCC_DesignId_003 */ +/* Requirements: HL_SR307 */ +void dccSetTolerance(dccBASE_t *dcc, uint32 valid0seed) +{ +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + + dcc->VALID0SEED = valid0seed; + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ +} + +/** @fn void dccSetCounter1Seed(dccBASE_t *dcc, uint32 cnt1seed) +* @brief Set dcc Clock source 1 counter seed value +* @param[in] dcc Pointer to DCC module: +* - dccREG1: DCC1 module pointer +* - dccREG2: DCC2 module pointer +* @param[in] cnt1seed - Clock Source 1 Counter seed value +* +* This function sets the seed value for Clock source 1 counter. +* +*/ +/* SourceId : DCC_SourceId_004 */ +/* DesignId : DCC_DesignId_004 */ +/* Requirements: HL_SR308 */ +void dccSetCounter1Seed(dccBASE_t *dcc, uint32 cnt1seed) +{ +/* USER CODE BEGIN (8) */ +/* USER CODE END */ + + dcc->CNT1SEED = cnt1seed; + +/* USER CODE BEGIN (9) */ +/* USER CODE END */ +} + +/** @fn void dccSetSeed(dccBASE_t *dcc, uint32 cnt0seed, uint32 valid0seed, uint32 cnt1seed) +* @brief Set dcc Clock source 0 counter seed value +* @param[in] dcc Pointer to DCC module: +* - dccREG1: DCC1 module pointer +* - dccREG2: DCC2 module pointer +* @param[in] cnt0seed - Clock Source 0 Counter seed value. +* @param[in] valid0seed - Clock Source 0 Counter tolerance value. +* @param[in] cnt1seed - Clock Source 1 Counter seed value. +* +* This function sets the seed value for clock source 0, clock source 1 +* and tolerance counter. +* +*/ +/* SourceId : DCC_SourceId_005 */ +/* DesignId : DCC_DesignId_005 */ +/* Requirements: HL_SR309 */ +void dccSetSeed(dccBASE_t *dcc, uint32 cnt0seed, uint32 valid0seed, uint32 cnt1seed) +{ +/* USER CODE BEGIN (10) */ +/* USER CODE END */ + + dcc->CNT0SEED = cnt0seed; + dcc->VALID0SEED = valid0seed; + dcc->CNT1SEED = cnt1seed; + +/* USER CODE BEGIN (11) */ +/* USER CODE END */ +} + +/** @fn void dccSelectClockSource(dccBASE_t *dcc, uint32 cnt0_Clock_Source, uint32 cnt1_Clock_Source) +* @brief Set dcc counter Clock sources +* @param[in] dcc Pointer to DCC module: +* - dccREG1: DCC1 module pointer +* - dccREG2: DCC2 module pointer +* @param[in] cnt0_Clock_Source - Clock source for counter 0. +* @param[in] cnt1_Clock_Source - Clock source for counter 1. +* +* This function sets the dcc counter 0 and counter 1 clock sources. +* DCC must be disabled using dccDisable API before calling this +* function. +*/ +/* SourceId : DCC_SourceId_006 */ +/* DesignId : DCC_DesignId_006 */ +/* Requirements: HL_SR310 */ +void dccSelectClockSource(dccBASE_t *dcc, uint32 cnt0_Clock_Source, uint32 cnt1_Clock_Source) +{ +/* USER CODE BEGIN (12) */ +/* USER CODE END */ + + dcc->CNT1CLKSRC = ((uint32)((uint32)0xAU << 12U) | /** DCC Enable Key */ + (uint32)(cnt1_Clock_Source & 0x0000000FU)); /* Configure Clock source 1 */ + dcc->CNT0CLKSRC = cnt0_Clock_Source; /* Configure Clock source 0 */ + +/* USER CODE BEGIN (13) */ +/* USER CODE END */ +} + +/** @fn void dccEnable(dccBASE_t *dcc) +* @brief Enable dcc module to begin counting +* @param[in] dcc Pointer to DCC module: +* - dccREG1: DCC1 module pointer +* - dccREG2: DCC2 module pointer +* +* This function enables the dcc counters to begin counting. +* +*/ +/* SourceId : DCC_SourceId_007 */ +/* DesignId : DCC_DesignId_007 */ +/* Requirements: HL_SR311 */ +void dccEnable(dccBASE_t *dcc) +{ +/* USER CODE BEGIN (14) */ +/* USER CODE END */ +/*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + dcc->GCTRL = (dcc->GCTRL & 0xFFFFFFF0U) | 0xAU; + +/* USER CODE BEGIN (15) */ +/* USER CODE END */ +} + +/** @fn void dccDisable(dccBASE_t *dcc) +* @brief Make selected dcc module to stop counting +* @param[in] dcc Pointer to DCC module: +* - dccREG1: DCC1 module pointer +* - dccREG2: DCC2 module pointer +* +* This function stops the dcc counters from counting. +* +*/ +/* SourceId : DCC_SourceId_008 */ +/* DesignId : DCC_DesignId_008 */ +/* Requirements: HL_SR312 */ +void dccDisable(dccBASE_t *dcc) +{ +/* USER CODE BEGIN (16) */ +/* USER CODE END */ +/*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + dcc->GCTRL = (dcc->GCTRL & 0xFFFFFFF0U) | 0x5U; + +/* USER CODE BEGIN (17) */ +/* USER CODE END */ +} + +/** @fn uint32 dccGetErrStatus(dccBASE_t *dcc) +* @brief Get error status from selected dcc module +* @param[in] dcc Pointer to DCC module: +* - dccREG1: DCC1 module pointer +* - dccREG2: DCC2 module pointer +* +* @return The Error status of selected dcc module +* +* Returns the error status of selected dcc module. +* +*/ +/* SourceId : DCC_SourceId_009 */ +/* DesignId : DCC_DesignId_009 */ +/* Requirements: HL_SR313 */ +uint32 dccGetErrStatus(dccBASE_t *dcc) +{ +/* USER CODE BEGIN (18) */ +/* USER CODE END */ + + return(dcc->STAT & 0x00000001U); +} + +/** @fn void dccEnableNotification(dccBASE_t *dcc, uint32 notification) +* @brief Enable notification of selected DCC module +* @param[in] dcc Pointer to DCC module: +* - dccREG1: DCC1 module pointer +* - dccREG2: DCC2 module pointer +* @param[in] notification Select notification of DCC module: +* - dccNOTIFICATION_DONE: DCC DONE notification +* - dccNOTIFICATION_ERROR: DCC ERROR notification +* +* This function will enable the selected notification of a DCC module. +* It is possible to enable multiple notifications masked. +*/ +/* SourceId : DCC_SourceId_010 */ +/* DesignId : DCC_DesignId_010 */ +/* Requirements: HL_SR314 */ +void dccEnableNotification(dccBASE_t *dcc, uint32 notification) +{ +/* USER CODE BEGIN (19) */ +/* USER CODE END */ +/*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + dcc->GCTRL = ((dcc->GCTRL & 0xFFFF0F0FU) | notification); + +/* USER CODE BEGIN (20) */ +/* USER CODE END */ +} + +/** @fn void dccDisableNotification(dccBASE_t *dcc, uint32 notification) +* @brief Disable notification of selected DCC module +* @param[in] dcc Pointer to DCC module: +* - dccREG1: DCC1 module pointer +* - dccREG2: DCC2 module pointer +* @param[in] notification Select notification of DCC module: +* - dccNOTIFICATION_DONE: DCC DONE notification +* - dccNOTIFICATION_ERROR: DCC ERROR notification +* +* This function will enable the selected notification of a DCC module. +* It is possible to enable multiple notifications masked. +*/ +/* SourceId : DCC_SourceId_011 */ +/* DesignId : DCC_DesignId_011 */ +/* Requirements: HL_SR315 */ +void dccDisableNotification(dccBASE_t *dcc, uint32 notification) +{ +/* USER CODE BEGIN (21) */ +/* USER CODE END */ +/*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + dcc->GCTRL = ((dcc->GCTRL & 0xFFFF0F0FU) | ((~notification) & 0x0000F0F0U)); + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ +} + +/** @fn void dcc1GetConfigValue(dcc_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : DCC_SourceId_012 */ +/* DesignId : DCC_DesignId_012 */ +/* Requirements: HL_SR318 */ +void dcc1GetConfigValue(dcc_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_GCTRL = DCC1_GCTRL_CONFIGVALUE; + config_reg->CONFIG_CNT0SEED = DCC1_CNT0SEED_CONFIGVALUE; + config_reg->CONFIG_VALID0SEED = DCC1_VALID0SEED_CONFIGVALUE; + config_reg->CONFIG_CNT1SEED = DCC1_CNT1SEED_CONFIGVALUE; + config_reg->CONFIG_CNT1CLKSRC = DCC1_CNT1CLKSRC_CONFIGVALUE; + config_reg->CONFIG_CNT0CLKSRC = DCC1_CNT0CLKSRC_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_GCTRL = dccREG1->GCTRL; + config_reg->CONFIG_CNT0SEED = dccREG1->CNT0SEED; + config_reg->CONFIG_VALID0SEED = dccREG1->VALID0SEED; + config_reg->CONFIG_CNT1SEED = dccREG1->CNT1SEED; + config_reg->CONFIG_CNT1CLKSRC = dccREG1->CNT1CLKSRC; + config_reg->CONFIG_CNT0CLKSRC = dccREG1->CNT0CLKSRC; + } +} + +/** @fn void dcc2GetConfigValue(rti_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : DCC_SourceId_013 */ +/* DesignId : DCC_DesignId_012 */ +/* Requirements: HL_SR318 */ +void dcc2GetConfigValue(dcc_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_GCTRL = DCC2_GCTRL_CONFIGVALUE; + config_reg->CONFIG_CNT0SEED = DCC2_CNT0SEED_CONFIGVALUE; + config_reg->CONFIG_VALID0SEED = DCC2_VALID0SEED_CONFIGVALUE; + config_reg->CONFIG_CNT1SEED = DCC2_CNT1SEED_CONFIGVALUE; + config_reg->CONFIG_CNT1CLKSRC = DCC2_CNT1CLKSRC_CONFIGVALUE; + config_reg->CONFIG_CNT0CLKSRC = DCC2_CNT0CLKSRC_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_GCTRL = dccREG2->GCTRL; + config_reg->CONFIG_CNT0SEED = dccREG2->CNT0SEED; + config_reg->CONFIG_VALID0SEED = dccREG2->VALID0SEED; + config_reg->CONFIG_CNT1SEED = dccREG2->CNT1SEED; + config_reg->CONFIG_CNT1CLKSRC = dccREG2->CNT1CLKSRC; + config_reg->CONFIG_CNT0CLKSRC = dccREG2->CNT0CLKSRC; + } +} + + + + Index: firmware/source/ecap.c =================================================================== diff -u --- firmware/source/ecap.c (revision 0) +++ firmware/source/ecap.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,976 @@ +/** @file ecap.c +* @brief ECAP Driver Source File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - API Functions +* - Interrupt Handlers +* . +* which are relevant for the ECAP driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +#include "ecap.h" +#include "sys_vim.h" + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/** @fn void ecapInit(void) +* @brief Initializes the eCAP Driver +* +* This function initializes the eCAP module. +*/ +/* SourceId : ECAP_SourceId_001 */ +/* DesignId : ECAP_DesignId_001 */ +/* Requirements : HL_ECAP_SR1 */ +void ecapInit(void) +{ +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + /** @b initialize @b ECAP1 */ + + /** - Setup control register 1 + * - Set polarity and reset enable for Capture Events 1-4 + * - Enable/Disable loading on a capture event + * - Setup Event Filter prescale + */ + ecapREG1->ECCTL1 = ((uint16)((uint16)RISING_EDGE << 0U) /* Capture Event 1 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 1U) /* Counter Reset on Capture Event 1 */ + | (uint16)((uint16)RISING_EDGE << 2U) /* Capture Event 2 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 3U) /* Counter Reset on Capture Event 2 */ + | (uint16)((uint16)RISING_EDGE << 4U) /* Capture Event 3 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 5U) /* Counter Reset on Capture Event 3 */ + | (uint16)((uint16)RISING_EDGE << 6U) /* Capture Event 4 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 7U) /* Counter Reset on Capture Event 4 */ + | (uint16)((uint16)0U << 8U) /* Enable/Disable loading on a capture event */ + | (uint16)((uint16)0U << 9U)); /* Setup Event Filter prescale */ + + /** - Setup control register 2 + * - Set operating mode + * - Set Stop/Wrap after capture + */ + ecapREG1->ECCTL2 = (uint16)((uint16)ONE_SHOT << 0U) /* Capture Mode */ + | (uint16)((uint16)CAPTURE_EVENT1 << 1U) /* Stop/Wrap value */ + | (uint16)((uint16)0U << 9U) /* Enable/Disable APWM mode */ + | (uint16)0x00000010U; /* Start counter */ + + + + /** - Set interrupt enable */ + ecapREG1->ECEINT = 0x0000U /* Enable/Disable Capture Event 1 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 2 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 3 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 4 Interrupt */ + | 0x0000U /* Enable/Disable counter Overflow Interrupt */ + | 0x0000U /* Enable/Disable Period Equal Interrupt */ + | 0x0000U; /* Enable/Disable Compare Equal Interrupt */ + + /** @b initialize @b ECAP2 */ + + /** - Setup control register 1 + * - Set polarity and reset enable for Capture Events 1-4 + * - Enable/Disable loading on a capture event + * - Setup Event Filter prescale + */ + ecapREG2->ECCTL1 = ((uint16)((uint16)RISING_EDGE << 0U) /* Capture Event 1 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 1U) /* Counter Reset on Capture Event 1 */ + | (uint16)((uint16)RISING_EDGE << 2U) /* Capture Event 2 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 3U) /* Counter Reset on Capture Event 2 */ + | (uint16)((uint16)RISING_EDGE << 4U) /* Capture Event 3 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 5U) /* Counter Reset on Capture Event 3 */ + | (uint16)((uint16)RISING_EDGE << 6U) /* Capture Event 4 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 7U) /* Counter Reset on Capture Event 4 */ + | (uint16)((uint16)0U << 8U) /* Enable/Disable loading on a capture event */ + | (uint16)((uint16)0U << 9U)); /* Setup Event Filter prescale */ + + + /** - Setup control register 2 + * - Set operating mode + * - Set Stop/Wrap after capture + */ + ecapREG2->ECCTL2 = (uint16)((uint16)ONE_SHOT << 0U) /* Capture Mode */ + | (uint16)((uint16)CAPTURE_EVENT1 << 1U) /* Stop/Wrap value */ + | (uint16)((uint16)0U << 9U) /* Enable/Disable APWM mode */ + | (uint16)0x00000010U; /* Start counter */ + + + + /** - Set interrupt enable */ + ecapREG2->ECEINT = 0x0000U /* Enable/Disable Capture Event 1 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 2 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 3 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 4 Interrupt */ + | 0x0000U /* Enable/Disable counter Overflow Interrupt */ + | 0x0000U /* Enable/Disable Period Equal Interrupt */ + | 0x0000U; /* Enable/Disable Compare Equal Interrupt */ + + /** @b initialize @b ECAP3 */ + + /** - Setup control register 1 + * - Set polarity and reset enable for Capture Events 1-4 + * - Enable/Disable loading on a capture event + * - Setup Event Filter prescale + */ + ecapREG3->ECCTL1 = ((uint16)((uint16)RISING_EDGE << 0U) /* Capture Event 1 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 1U) /* Counter Reset on Capture Event 1 */ + | (uint16)((uint16)RISING_EDGE << 2U) /* Capture Event 2 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 3U) /* Counter Reset on Capture Event 2 */ + | (uint16)((uint16)RISING_EDGE << 4U) /* Capture Event 3 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 5U) /* Counter Reset on Capture Event 3 */ + | (uint16)((uint16)RISING_EDGE << 6U) /* Capture Event 4 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 7U) /* Counter Reset on Capture Event 4 */ + | (uint16)((uint16)0U << 8U) /* Enable/Disable loading on a capture event */ + | (uint16)((uint16)0U << 9U)); /* Setup Event Filter prescale */ + + + /** - Setup control register 2 + * - Set operating mode + * - Set Stop/Wrap after capture + */ + ecapREG3->ECCTL2 = (uint16)((uint16)ONE_SHOT << 0U) /* Capture Mode */ + | (uint16)((uint16)CAPTURE_EVENT1 << 1U) /* Stop/Wrap value */ + | (uint16)((uint16)0U << 9U) /* Enable/Disable APWM mode */ + | (uint16)0x00000010U; /* Start counter */ + + + + /** - Set interrupt enable */ + ecapREG3->ECEINT = 0x0000U /* Enable/Disable Capture Event 1 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 2 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 3 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 4 Interrupt */ + | 0x0000U /* Enable/Disable counter Overflow Interrupt */ + | 0x0000U /* Enable/Disable Period Equal Interrupt */ + | 0x0000U; /* Enable/Disable Compare Equal Interrupt */ + + /** @b initialize @b ECAP4 */ + + /** - Setup control register 1 + * - Set polarity and reset enable for Capture Events 1-4 + * - Enable/Disable loading on a capture event + * - Setup Event Filter prescale + */ + ecapREG4->ECCTL1 = ((uint16)((uint16)RISING_EDGE << 0U) /* Capture Event 1 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 1U) /* Counter Reset on Capture Event 1 */ + | (uint16)((uint16)RISING_EDGE << 2U) /* Capture Event 2 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 3U) /* Counter Reset on Capture Event 2 */ + | (uint16)((uint16)RISING_EDGE << 4U) /* Capture Event 3 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 5U) /* Counter Reset on Capture Event 3 */ + | (uint16)((uint16)RISING_EDGE << 6U) /* Capture Event 4 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 7U) /* Counter Reset on Capture Event 4 */ + | (uint16)((uint16)0U << 8U) /* Enable/Disable loading on a capture event */ + | (uint16)((uint16)0U << 9U)); /* Setup Event Filter prescale */ + + + /** - Setup control register 2 + * - Set operating mode + * - Set Stop/Wrap after capture + */ + ecapREG4->ECCTL2 = (uint16)((uint16)ONE_SHOT << 0U) /* Capture Mode */ + | (uint16)((uint16)CAPTURE_EVENT1 << 1U) /* Stop/Wrap value */ + | (uint16)((uint16)0U << 9U) /* Enable/Disable APWM mode */ + | (uint16)0x00000010U; /* Start counter */ + + + + /** - Set interrupt enable */ + ecapREG4->ECEINT = 0x0000U /* Enable/Disable Capture Event 1 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 2 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 3 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 4 Interrupt */ + | 0x0000U /* Enable/Disable counter Overflow Interrupt */ + | 0x0000U /* Enable/Disable Period Equal Interrupt */ + | 0x0000U; /* Enable/Disable Compare Equal Interrupt */ + + /** @b initialize @b ECAP5 */ + + /** - Setup control register 1 + * - Set polarity and reset enable for Capture Events 1-4 + * - Enable/Disable loading on a capture event + * - Setup Event Filter prescale + */ + ecapREG5->ECCTL1 = ((uint16)((uint16)RISING_EDGE << 0U) /* Capture Event 1 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 1U) /* Counter Reset on Capture Event 1 */ + | (uint16)((uint16)RISING_EDGE << 2U) /* Capture Event 2 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 3U) /* Counter Reset on Capture Event 2 */ + | (uint16)((uint16)RISING_EDGE << 4U) /* Capture Event 3 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 5U) /* Counter Reset on Capture Event 3 */ + | (uint16)((uint16)RISING_EDGE << 6U) /* Capture Event 4 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 7U) /* Counter Reset on Capture Event 4 */ + | (uint16)((uint16)0U << 8U) /* Enable/Disable loading on a capture event */ + | (uint16)((uint16)0U << 9U)); /* Setup Event Filter prescale */ + + + /** - Setup control register 2 + * - Set operating mode + * - Set Stop/Wrap after capture + */ + ecapREG5->ECCTL2 = (uint16)((uint16)ONE_SHOT << 0U) /* Capture Mode */ + | (uint16)((uint16)CAPTURE_EVENT1 << 1U) /* Stop/Wrap value */ + | (uint16)((uint16)0U << 9U) /* Enable/Disable APWM mode */ + | (uint16)0x00000010U; /* Start counter */ + + + + /** - Set interrupt enable */ + ecapREG5->ECEINT = 0x0000U /* Enable/Disable Capture Event 1 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 2 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 3 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 4 Interrupt */ + | 0x0000U /* Enable/Disable counter Overflow Interrupt */ + | 0x0000U /* Enable/Disable Period Equal Interrupt */ + | 0x0000U; /* Enable/Disable Compare Equal Interrupt */ + + /** @b initialize @b ECAP6 */ + + /** - Setup control register 1 + * - Set polarity and reset enable for Capture Events 1-4 + * - Enable/Disable loading on a capture event + * - Setup Event Filter prescale + */ + ecapREG6->ECCTL1 = ((uint16)((uint16)RISING_EDGE << 0U) /* Capture Event 1 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 1U) /* Counter Reset on Capture Event 1 */ + | (uint16)((uint16)RISING_EDGE << 2U) /* Capture Event 2 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 3U) /* Counter Reset on Capture Event 2 */ + | (uint16)((uint16)RISING_EDGE << 4U) /* Capture Event 3 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 5U) /* Counter Reset on Capture Event 3 */ + | (uint16)((uint16)RISING_EDGE << 6U) /* Capture Event 4 Polarity */ + | (uint16)((uint16)RESET_DISABLE << 7U) /* Counter Reset on Capture Event 4 */ + | (uint16)((uint16)0U << 8U) /* Enable/Disable loading on a capture event */ + | (uint16)((uint16)0U << 9U)); /* Setup Event Filter prescale */ + + + /** - Setup control register 2 + * - Set operating mode + * - Set Stop/Wrap after capture + */ + ecapREG6->ECCTL2 = (uint16)((uint16)ONE_SHOT << 0U) /* Capture Mode */ + | (uint16)((uint16)CAPTURE_EVENT1 << 1U) /* Stop/Wrap value */ + | (uint16)((uint16)0U << 9U) /* Enable/Disable APWM mode */ + | (uint16)0x00000010U; /* Start counter */ + + + + /** - Set interrupt enable */ + ecapREG6->ECEINT = 0x0000U /* Enable/Disable Capture Event 1 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 2 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 3 Interrupt */ + | 0x0000U /* Enable/Disable Capture Event 4 Interrupt */ + | 0x0000U /* Enable/Disable counter Overflow Interrupt */ + | 0x0000U /* Enable/Disable Period Equal Interrupt */ + | 0x0000U; /* Enable/Disable Compare Equal Interrupt */ + +} + +/** @fn void ecapSetCounter(ecapBASE_t *ecap, uint32 value) +* @brief Set Time-Stamp Counter +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] value 16-bit Counter value +* +* This function sets the Time-Stamp Counter register +*/ +/* SourceId : ECAP_SourceId_002 */ +/* DesignId : ECAP_DesignId_002 */ +/* Requirements : HL_ECAP_SR2 */ +void ecapSetCounter(ecapBASE_t *ecap, uint32 value) +{ + ecap->TSCTR = value; +} + +/** @fn void ecapEnableCounterLoadOnSync(ecapBASE_t *ecap, uint32 phase) +* @brief Enable counter register load from phase register when a sync event occurs +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] phase Counter value to be loaded when a sync event occurs +* +* This function enables counter register load from phase register when a sync event occurs +*/ +/* SourceId : ECAP_SourceId_003 */ +/* DesignId : ECAP_DesignId_003 */ +/* Requirements : HL_ECAP_SR3 */ +void ecapEnableCounterLoadOnSync(ecapBASE_t *ecap, uint32 phase) +{ + ecap->ECCTL2 |= 0x0020U; + ecap->CTRPHS = phase; +} + +/** @fn void ecapDisableCounterLoadOnSync(ecapBASE_t *ecap) +* @brief Disable counter register load from phase register when a sync event occurs +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* +* This function disables counter register load from phase register when a sync event occurs +*/ +/* SourceId : ECAP_SourceId_004 */ +/* DesignId : ECAP_DesignId_004 */ +/* Requirements : HL_ECAP_SR3 */ +void ecapDisableCounterLoadOnSync(ecapBASE_t *ecap) +{ + ecap->ECCTL2 &= (uint16)~(uint16)0x0020U; +} + +/** @fn void ecapSetEventPrescaler(ecapBASE_t *ecap, ecapPrescale_t prescale) +* @brief Set Event prescaler +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] prescale Event Filter prescale select (ecapPrescale_By_1..ecapPrescale_By_62) +* +* This function disables counter register load from phase register when a sync event occurs +*/ +/* SourceId : ECAP_SourceId_005 */ +/* DesignId : ECAP_DesignId_005 */ +/* Requirements : HL_ECAP_SR4 */ +void ecapSetEventPrescaler(ecapBASE_t *ecap, ecapPrescale_t prescale) +{ + ecap->ECCTL1 &= (uint16)~(uint16)0x3E00U; + ecap->ECCTL1 |= (uint16)prescale; +} + +/** @fn void ecapSetCaptureEvent1(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable) +* @brief Set Capture Event 1 +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] edgePolarity Capture Event 1 Polarity select +* - RISING_EDGE +* - FALLING_EDGE +* @param[in] resetenable Counter Reset on Capture Event 1 +* - RESET_ENABLE +* - RESET_DISABLE +* +* This function sets the polarity and reset enable for Capture event 1 +*/ +/* SourceId : ECAP_SourceId_006 */ +/* DesignId : ECAP_DesignId_006 */ +/* Requirements : HL_ECAP_SR5 */ +void ecapSetCaptureEvent1(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable) +{ + ecap->ECCTL1 &= (uint16)~(uint16)((uint16)0x3U << 0U); + ecap->ECCTL1 |= (uint16)(((uint16)edgePolarity | (uint16)((uint16)resetenable << 1U)) << 0U); +} + +/** @fn void ecapSetCaptureEvent2(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable) +* @brief Set Capture Event 2 +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] edgePolarity Capture Event 2 Polarity select +* - RISING_EDGE +* - FALLING_EDGE +* @param[in] resetenable Counter Reset on Capture Event 2 +* - RESET_ENABLE +* - RESET_DISABLE +* +* This function sets the polarity and reset enable for Capture event 2 +*/ +/* SourceId : ECAP_SourceId_007 */ +/* DesignId : ECAP_DesignId_006 */ +/* Requirements : HL_ECAP_SR5 */ +void ecapSetCaptureEvent2(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable) +{ + ecap->ECCTL1 &= (uint16)~(uint16)((uint16)0x3U << 2U); + ecap->ECCTL1 |= (uint16)(((uint16)edgePolarity | (uint16)((uint16)resetenable << 1U)) << 2U); +} + +/** @fn void ecapSetCaptureEvent3(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable) +* @brief Set Capture Event 3 +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] edgePolarity Capture Event 3 Polarity select +* - RISING_EDGE +* - FALLING_EDGE +* @param[in] resetenable Counter Reset on Capture Event 3 +* - RESET_ENABLE +* - RESET_DISABLE +* +* This function sets the polarity and reset enable for Capture event 3 +*/ +/* SourceId : ECAP_SourceId_008 */ +/* DesignId : ECAP_DesignId_006 */ +/* Requirements : HL_ECAP_SR5 */ +void ecapSetCaptureEvent3(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable) +{ + ecap->ECCTL1 &= (uint16)~(uint16)((uint16)0x3U << 4U); + ecap->ECCTL1 |= (uint16)(((uint16)edgePolarity | (uint16)((uint16)resetenable << 1U)) << 4U); +} + +/** @fn void ecapSetCaptureEvent4(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable) +* @brief Set Capture Event 4 +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] edgePolarity Capture Event 4 Polarity select +* - RISING_EDGE +* - FALLING_EDGE +* @param[in] resetenable Counter Reset on Capture Event 4 +* - RESET_ENABLE +* - RESET_DISABLE +* +* This function sets the polarity and reset enable for Capture event 4 +*/ +/* SourceId : ECAP_SourceId_009 */ +/* DesignId : ECAP_DesignId_006 */ +/* Requirements : HL_ECAP_SR1 */ +void ecapSetCaptureEvent4(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable) +{ + ecap->ECCTL1 &= (uint16)~(uint16)((uint16)0x3U << 6U); + ecap->ECCTL1 |= (uint16)(((uint16)edgePolarity | (uint16)((uint16)resetenable << 1U)) << 6U); +} + +/** @fn void ecapSetCaptureMode(ecapBASE_t *ecap, ecapMode_t mode, ecapEvent_t event) +* @brief Set Capture mode +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] capMode Capture mode +* - CONTINUOUS +* - ONE_SHOT +* @param[in] event Stop/Wrap value +* - CAPTURE_EVENT1: Stop after Capture Event 1 in one-shot mode / Wrap after Capture Event 1 in continuous mode +* - CAPTURE_EVENT2: Stop after Capture Event 2 in one-shot mode / Wrap after Capture Event 2 in continuous mode. +* - CAPTURE_EVENT3: Stop after Capture Event 3 in one-shot mode / Wrap after Capture Event 3 in continuous mode. +* - CAPTURE_EVENT4: Stop after Capture Event 4 in one-shot mode / Wrap after Capture Event 4 in continuous mode. +* +* This function sets the capture mode and stop/wrap value +*/ +/* SourceId : ECAP_SourceId_010 */ +/* DesignId : ECAP_DesignId_007 */ +/* Requirements : HL_ECAP_SR6 */ +void ecapSetCaptureMode(ecapBASE_t *ecap, ecapMode_t capMode, ecapEvent_t event) +{ + ecap->ECCTL2 &= 0xFFF8U; + ecap->ECCTL2 |= ((uint16)((uint16)event << 1U) | (uint16)capMode); +} + +/** @fn void ecapEnableCapture(ecapBASE_t *ecap) +* @brief Enable Capture +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* +* This function enable loading of CAP1-4 registers on a capture event +*/ +/* SourceId : ECAP_SourceId_011 */ +/* DesignId : ECAP_DesignId_008 */ +/* Requirements : HL_ECAP_SR7 */ +void ecapEnableCapture(ecapBASE_t *ecap) +{ + ecap->ECCTL1 |= 0x0100U; +} + +/** @fn void ecapDisableCapture(ecapBASE_t *ecap) +* @brief Disable Capture +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* +* This function disable loading of CAP1-4 registers on a capture event +*/ +/* SourceId : ECAP_SourceId_012 */ +/* DesignId : ECAP_DesignId_009 */ +/* Requirements : HL_ECAP_SR7 */ +void ecapDisableCapture(ecapBASE_t *ecap) +{ + ecap->ECCTL1 &= (uint16)~(uint16)0x0100U; +} + +/** @fn void ecapStartCounter(ecapBASE_t *ecap) +* @brief Start Time Stamp Counter +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* +* This function starts Time Stamp Counter +*/ +/* SourceId : ECAP_SourceId_013 */ +/* DesignId : ECAP_DesignId_010 */ +/* Requirements : HL_ECAP_SR8 */ +void ecapStartCounter(ecapBASE_t *ecap) +{ + ecap->ECCTL2 |= 0x0010U; +} + +/** @fn void ecapStopCounter(ecapBASE_t *ecap)) +* @brief Stop Time Stamp Counter +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* +* This function stops Time Stamp Counter +*/ +/* SourceId : ECAP_SourceId_014 */ +/* DesignId : ECAP_DesignId_011 */ +/* Requirements : HL_ECAP_SR8 */ +void ecapStopCounter(ecapBASE_t *ecap) +{ + ecap->ECCTL2 &= (uint16)~(uint16)0x0010U; +} + +/** @fn void ecapSetSyncOut(ecapBASE_t *ecap, ecapSyncOut_t syncOutSrc) +* @brief Set the source of Sync-out signal +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] syncOutSrc Sync-Out Select +* - SyncOut_SyncIn: Sync In used for Sync Out +* - SyncOut_CTRPRD: CTR = PRD used for Sync Out +* - SyncOut_None : Disables Sync Out +* +* This function sets the source of Sync-out signal +*/ +/* SourceId : ECAP_SourceId_015 */ +/* DesignId : ECAP_DesignId_012 */ +/* Requirements : HL_ECAP_SR9 */ +void ecapSetSyncOut(ecapBASE_t *ecap, ecapSyncOut_t syncOutSrc) +{ + ecap->ECCTL2 &= (uint16)~(uint16)0x00C0U; + ecap->ECCTL2 |= syncOutSrc; +} + +/** @fn void ecapEnableAPWMmode(ecapBASE_t *ecap, ecapAPWMPolarity_t pwmPolarity, uint16 period, uint16 duty) +* @brief Enable APWM mode +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] pwmPolarity APWM output polarity select +* - ACTIVE_HIGH +* - ACTIVE_LOW +* @param[in] period APWM period (in terms of ticks) +* @param[in] duty APWM duty (in terms of ticks) +* +* This function enables and sets APWM mode +*/ +/* SourceId : ECAP_SourceId_016 */ +/* DesignId : ECAP_DesignId_013 */ +/* Requirements : HL_ECAP_SR10 */ +void ecapEnableAPWMmode(ecapBASE_t *ecap, ecapAPWMPolarity_t pwmPolarity, uint32 period, uint32 duty) +{ + ecap->ECCTL2 &= (uint16)~(uint16)0x0400U; + ecap->ECCTL2 |= (uint16)((uint16)pwmPolarity << 10U) | (uint16)((uint16)1U << 9U); + ecap->CAP1 = period - 1U; + ecap->CAP2 = duty; +} + +/** @fn void ecapDisableAPWMMode(ecapBASE_t *ecap) +* @brief Disable APWM mode +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* +* This function disables APWM mode +*/ +/* SourceId : ECAP_SourceId_017 */ +/* DesignId : ECAP_DesignId_014 */ +/* Requirements : HL_ECAP_SR10 */ +void ecapDisableAPWMMode(ecapBASE_t *ecap) +{ + ecap->ECCTL2 &= (uint16)~(uint16)0x0200U; +} + +/** @fn void ecapEnableInterrupt(ecapBASE_t *ecap, ecapInterrupt_t interrupts) +* @brief Enable eCAP interrupt sources +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] interrupts eCAP interrupt sources +* - ecapInt_CTR_CMP: Denotes CTR = CMP interrupt +* - ecapInt_CTR_PRD: Denotes CTR = PRD interrupt +* - ecapInt_CTR_OVF: Denotes CTROVF interrupt +* - ecapInt_CEVT4 : Denotes CEVT4 interrupt +* - ecapInt_CEVT3 : Denotes CEVT3 interrupt +* - ecapInt_CEVT2 : Denotes CEVT2 interrupt +* - ecapInt_CEVT1 : Denotes CEVT1 interrupt +* - ecapInt_All : Denotes All interrupts +* +* This function enables eCAP interrupt sources +*/ +/* SourceId : ECAP_SourceId_018 */ +/* DesignId : ECAP_DesignId_015 */ +/* Requirements : HL_ECAP_SR11 */ +void ecapEnableInterrupt(ecapBASE_t *ecap, ecapInterrupt_t interrupts) +{ + ecap->ECEINT |= interrupts; +} + +/** @fn void ecapDisableInterrupt(ecapBASE_t *ecap, ecapInterrupt_t interrupts) +* @brief Disables eCAP interrupt sources +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] interrupts eCAP interrupt sources +* - ecapInt_CTR_CMP: Denotes CTR = CMP interrupt +* - ecapInt_CTR_PRD: Denotes CTR = PRD interrupt +* - ecapInt_CTR_OVF: Denotes CTROVF interrupt +* - ecapInt_CEVT4 : Denotes CEVT4 interrupt +* - ecapInt_CEVT3 : Denotes CEVT3 interrupt +* - ecapInt_CEVT2 : Denotes CEVT2 interrupt +* - ecapInt_CEVT1 : Denotes CEVT1 interrupt +* - ecapInt_All : Denotes All interrupts +* +* This function disables eCAP interrupt sources +*/ +/* SourceId : ECAP_SourceId_019 */ +/* DesignId : ECAP_DesignId_016 */ +/* Requirements : HL_ECAP_SR11 */ +void ecapDisableInterrupt(ecapBASE_t *ecap, ecapInterrupt_t interrupts) +{ + ecap->ECEINT &= (uint16)~(uint16)interrupts; +} + +/** @fn uint16 ecapGetEventStatus(ecapBASE_t *ecap, ecapInterrupt_t events) +* @brief Return Event status +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] events eCAP events +* - ecapInt_CTR_CMP: Denotes CTR = CMP interrupt +* - ecapInt_CTR_PRD: Denotes CTR = PRD interrupt +* - ecapInt_CTR_OVF: Denotes CTROVF interrupt +* - ecapInt_CEVT4 : Denotes CEVT4 interrupt +* - ecapInt_CEVT3 : Denotes CEVT3 interrupt +* - ecapInt_CEVT2 : Denotes CEVT2 interrupt +* - ecapInt_CEVT1 : Denotes CEVT1 interrupt +* - ecapInt_Global : Denotes Capture global interrupt +* - ecapInt_All : Denotes All interrupts +* @return Event status +* +* This function returns the event status +*/ +/* SourceId : ECAP_SourceId_020 */ +/* DesignId : ECAP_DesignId_017 */ +/* Requirements : HL_ECAP_SR12 */ +uint16 ecapGetEventStatus(ecapBASE_t *ecap, ecapInterrupt_t events) +{ + return (ecap->ECFLG & events); +} + +/** @fn void ecapClearFlag(ecapBASE_t *ecap, ecapInterrupt_t events) +* @brief Clear Event status +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* @param[in] events eCAP events +* - ecapInt_CTR_CMP: Denotes CTR = CMP interrupt +* - ecapInt_CTR_PRD: Denotes CTR = PRD interrupt +* - ecapInt_CTR_OVF: Denotes CTROVF interrupt +* - ecapInt_CEVT4 : Denotes CEVT4 interrupt +* - ecapInt_CEVT3 : Denotes CEVT3 interrupt +* - ecapInt_CEVT2 : Denotes CEVT2 interrupt +* - ecapInt_CEVT1 : Denotes CEVT1 interrupt +* - ecapInt_Global : Denotes Capture global interrupt +* - ecapInt_All : Denotes All interrupts +* +* This function clears the event status +*/ +/* SourceId : ECAP_SourceId_021 */ +/* DesignId : ECAP_DesignId_018 */ +/* Requirements : HL_ECAP_SR13 */ +void ecapClearFlag(ecapBASE_t *ecap, ecapInterrupt_t events) +{ + ecap->ECCLR = events; +} + +/** @fn void uint32 ecapGetCAP1(ecapBASE_t *ecap) +* @brief Get CAP1 value +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* +* This function returns Capture 1 value +*/ +/* SourceId : ECAP_SourceId_022 */ +/* DesignId : ECAP_DesignId_019 */ +/* Requirements : HL_ECAP_SR14 */ +uint32 ecapGetCAP1(ecapBASE_t *ecap) +{ + return ecap->CAP1; +} + +/** @fn void uint32 ecapGetCAP2(ecapBASE_t *ecap) +* @brief Get CAP2 value +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* +* This function returns Capture 2 value +*/ +/* SourceId : ECAP_SourceId_023 */ +/* DesignId : ECAP_DesignId_019 */ +/* Requirements : HL_ECAP_SR14 */ +uint32 ecapGetCAP2(ecapBASE_t *ecap) +{ + return ecap->CAP2; +} + +/** @fn void uint32 ecapGetCAP3(ecapBASE_t *ecap) +* @brief Get CAP3 value +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* +* This function returns Capture 3 value +*/ +/* SourceId : ECAP_SourceId_024 */ +/* DesignId : ECAP_DesignId_019 */ +/* Requirements : HL_ECAP_SR14 */ +uint32 ecapGetCAP3(ecapBASE_t *ecap) +{ + return ecap->CAP3; +} + +/** @fn void uint32 ecapGetCAP4(ecapBASE_t *ecap) +* @brief Get CAP4 value +* +* @param[in] ecap The capture (eCAP) object handle (ecapREG1..6) +* +* This function returns Capture 4 value +*/ +/* SourceId : ECAP_SourceId_025 */ +/* DesignId : ECAP_DesignId_019 */ +/* Requirements : HL_ECAP_SR14 */ +uint32 ecapGetCAP4(ecapBASE_t *ecap) +{ + return ecap->CAP4; +} + +/** @fn void ecap1GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ECAP_SourceId_026 */ +/* DesignId : ECAP_DesignId_046 */ +/* Requirements : HL_ECAP_SR18 */ +void ecap1GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_CTRPHS = ECAP1_CTRPHS_CONFIGVALUE; + config_reg->CONFIG_ECCTL1 = ECAP1_ECCTL1_CONFIGVALUE; + config_reg->CONFIG_ECCTL2 = ECAP1_ECCTL2_CONFIGVALUE; + config_reg->CONFIG_ECEINT = ECAP1_ECEINT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_CTRPHS = ecapREG1->CTRPHS; + config_reg->CONFIG_ECCTL1 = ecapREG1->ECCTL1; + config_reg->CONFIG_ECCTL2 = ecapREG1->ECCTL2; + config_reg->CONFIG_ECEINT = ecapREG1->ECEINT; + } +} + +/** @fn void ecap2GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ECAP_SourceId_027 */ +/* DesignId : ECAP_DesignId_046 */ +/* Requirements : HL_ECAP_SR18 */ +void ecap2GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_CTRPHS = ECAP2_CTRPHS_CONFIGVALUE; + config_reg->CONFIG_ECCTL1 = ECAP2_ECCTL1_CONFIGVALUE; + config_reg->CONFIG_ECCTL2 = ECAP2_ECCTL2_CONFIGVALUE; + config_reg->CONFIG_ECEINT = ECAP2_ECEINT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_CTRPHS = ecapREG2->CTRPHS; + config_reg->CONFIG_ECCTL1 = ecapREG2->ECCTL1; + config_reg->CONFIG_ECCTL2 = ecapREG2->ECCTL2; + config_reg->CONFIG_ECEINT = ecapREG2->ECEINT; + } +} + +/** @fn void ecap3GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ECAP_SourceId_028 */ +/* DesignId : ECAP_DesignId_046 */ +/* Requirements : HL_ECAP_SR18 */ +void ecap3GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_CTRPHS = ECAP3_CTRPHS_CONFIGVALUE; + config_reg->CONFIG_ECCTL1 = ECAP3_ECCTL1_CONFIGVALUE; + config_reg->CONFIG_ECCTL2 = ECAP3_ECCTL2_CONFIGVALUE; + config_reg->CONFIG_ECEINT = ECAP3_ECEINT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_CTRPHS = ecapREG3->CTRPHS; + config_reg->CONFIG_ECCTL1 = ecapREG3->ECCTL1; + config_reg->CONFIG_ECCTL2 = ecapREG3->ECCTL2; + config_reg->CONFIG_ECEINT = ecapREG3->ECEINT; + } +} + +/** @fn void ecap4GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ECAP_SourceId_029 */ +/* DesignId : ECAP_DesignId_046 */ +/* Requirements : HL_ECAP_SR18 */ +void ecap4GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_CTRPHS = ECAP4_CTRPHS_CONFIGVALUE; + config_reg->CONFIG_ECCTL1 = ECAP4_ECCTL1_CONFIGVALUE; + config_reg->CONFIG_ECCTL2 = ECAP4_ECCTL2_CONFIGVALUE; + config_reg->CONFIG_ECEINT = ECAP4_ECEINT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_CTRPHS = ecapREG4->CTRPHS; + config_reg->CONFIG_ECCTL1 = ecapREG4->ECCTL1; + config_reg->CONFIG_ECCTL2 = ecapREG4->ECCTL2; + config_reg->CONFIG_ECEINT = ecapREG4->ECEINT; + } +} + +/** @fn void ecap5GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ECAP_SourceId_030 */ +/* DesignId : ECAP_DesignId_046 */ +/* Requirements : HL_ECAP_SR18 */ +void ecap5GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_CTRPHS = ECAP5_CTRPHS_CONFIGVALUE; + config_reg->CONFIG_ECCTL1 = ECAP5_ECCTL1_CONFIGVALUE; + config_reg->CONFIG_ECCTL2 = ECAP5_ECCTL2_CONFIGVALUE; + config_reg->CONFIG_ECEINT = ECAP5_ECEINT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_CTRPHS = ecapREG5->CTRPHS; + config_reg->CONFIG_ECCTL1 = ecapREG5->ECCTL1; + config_reg->CONFIG_ECCTL2 = ecapREG5->ECCTL2; + config_reg->CONFIG_ECEINT = ecapREG5->ECEINT; + } +} + +/** @fn void ecap6GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ECAP_SourceId_031 */ +/* DesignId : ECAP_DesignId_046 */ +/* Requirements : HL_ECAP_SR18 */ +void ecap6GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_CTRPHS = ECAP6_CTRPHS_CONFIGVALUE; + config_reg->CONFIG_ECCTL1 = ECAP6_ECCTL1_CONFIGVALUE; + config_reg->CONFIG_ECCTL2 = ECAP6_ECCTL2_CONFIGVALUE; + config_reg->CONFIG_ECEINT = ECAP6_ECEINT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_CTRPHS = ecapREG6->CTRPHS; + config_reg->CONFIG_ECCTL1 = ecapREG6->ECCTL1; + config_reg->CONFIG_ECCTL2 = ecapREG6->ECCTL2; + config_reg->CONFIG_ECEINT = ecapREG6->ECEINT; + } +} + + + +/*end of file*/ Index: firmware/source/emac.c =================================================================== diff -u --- firmware/source/emac.c (revision 0) +++ firmware/source/emac.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,1745 @@ +/** + * \file emac.c + * + * \brief EMAC APIs. + * + * This file contains the device abstraction layer APIs for EMAC. + */ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "emac.h" +#include "sys_vim.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/* Defining interface for all the emac instances */ +hdkif_t hdkif_data[MAX_EMAC_INSTANCE]; +/*SAFETYMCUSW 25 D MR:8.7 "Statically allocated memory needs to be available to entire application." */ +static uint8_t pbuf_array[MAX_RX_PBUF_ALLOC][MAX_TRANSFER_UNIT]; +/******************************************************************************* +* INTERNAL MACRO DEFINITIONS +*******************************************************************************/ +#define EMAC_CONTROL_RESET (0x01U) +#define EMAC_SOFT_RESET (0x01U) +#define EMAC_MAX_HEADER_DESC (8U) +#define EMAC_UNICAST_DISABLE (0xFFU) + +/******************************************************************************* +* API FUNCTION DEFINITIONS +*******************************************************************************/ +/** + * \brief Enables the TXPULSE Interrupt Generation. + * + * \param emacBase Base address of the EMAC Module registers. + * \param emacCtrlBase Base address of the EMAC CONTROL module registers + * \param ctrlCore Channel number for which the interrupt to be enabled in EMAC Control module + * \param channel Channel number for which interrupt to be enabled + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_001 */ +/* DesignId : ETH_DesignId_001*/ +/* Requirements : HL_ETH_SR15 */ +void EMACTxIntPulseEnable(uint32 emacBase, uint32 emacCtrlBase, uint32 ctrlCore, uint32 channel) +{ + HWREG(emacBase + EMAC_TXINTMASKSET) |= ((uint32)1U << channel); + + HWREG(emacCtrlBase + EMAC_CTRL_CnTXEN(ctrlCore)) |= ((uint32)1U << channel); +} + +/** + * \brief Disables the TXPULSE Interrupt Generation. + * + * \param emacBase Base address of the EMAC Module registers. + * \param emacCtrlBase Base address of the EMAC CONTROL module registers + * \param ctrlCore Channel number for which the interrupt to be enabled in EMAC Control module + * \param channel Channel number for which interrupt to be disabled + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_002 */ +/* DesignId : ETH_DesignId_002*/ +/* Requirements : HL_ETH_SR15 */ +void EMACTxIntPulseDisable(uint32 emacBase, uint32 emacCtrlBase, uint32 ctrlCore, uint32 channel) +/*SAFETYMCUSW 1 J MR:14.1 "LDRA Tool issue." */ +{ + HWREG(emacBase + EMAC_TXINTMASKCLEAR) |= ((uint32)1U << channel); + + HWREG(emacCtrlBase + EMAC_CTRL_CnTXEN(ctrlCore)) &= (~((uint32)1U << channel)); +} + +/** + * \brief Enables the RXPULSE Interrupt Generation. + * + * \param emacBase Base address of the EMAC Module registers. + * \param emacCtrlBase Base address of the EMAC CONTROL module registers + * \param ctrlCore Control core for which the interrupt to be enabled. + * \param channel Channel number for which interrupt to be enabled + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_003 */ +/* DesignId : ETH_DesignId_003*/ +/* Requirements : HL_ETH_SR15 */ +void EMACRxIntPulseEnable(uint32 emacBase, uint32 emacCtrlBase, uint32 ctrlCore, uint32 channel) +/*SAFETYMCUSW 1 J MR:14.1 "LDRA Tool issue." */ +{ + HWREG(emacBase + EMAC_RXINTMASKSET) |= ((uint32)1U << channel); + + HWREG(emacCtrlBase + EMAC_CTRL_CnRXEN(ctrlCore)) |= ((uint32)1U << channel); +} + +/** + * \brief Disables the RXPULSE Interrupt Generation. + * + * \param emacBase Base address of the EMAC Module registers. + * \param emacCtrlBase Base address of the EMAC CONTROL module registers + * \param ctrlCore Control core for which the interrupt to be disabled. + * \param channel Channel number for which interrupt to be disabled + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_004 */ +/* DesignId : ETH_DesignId_004*/ +/* Requirements : HL_ETH_SR15 */ +void EMACRxIntPulseDisable(uint32 emacBase, uint32 emacCtrlBase, uint32 ctrlCore, uint32 channel) +{ + HWREG(emacBase + EMAC_RXINTMASKCLEAR) |= ((uint32)1U << channel); + + HWREG(emacCtrlBase + EMAC_CTRL_CnRXEN(ctrlCore)) &= (~((uint32)1U << channel)); +} +/** + * \brief This API sets the RMII speed. The RMII Speed can be 10 Mbps or + * 100 Mbps + * + * \param emacBase Base address of the EMAC Module registers. + * \param speed speed for setting. + * speed can take the following values. \n + * EMAC_RMIISPEED_10MBPS - 10 Mbps \n + * EMAC_RMIISPEED_100MBPS - 100 Mbps. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_005 */ +/* DesignId : ETH_DesignId_005*/ +/* Requirements : HL_ETH_SR19 */ +void EMACRMIISpeedSet(uint32 emacBase, uint32 speed) +{ + HWREG(emacBase + EMAC_MACCONTROL) &= (~(uint32)EMAC_MACCONTROL_RMIISPEED); + + HWREG(emacBase + EMAC_MACCONTROL) |= speed; +} +/* SourceId : ETH_SourceId_006 */ +/* DesignId : ETH_DesignId_006*/ +/* Requirements : HL_ETH_SR18 */ +/** + * \brief This API set the GMII bit, RX and TX are enabled for receive and transmit. + * Note: This is not the API to enable MII. + * \param emacBase Base address of the EMAC Module registers. + * + * \return None + * + **/ +void EMACMIIEnable(uint32 emacBase) +{ + HWREG(emacBase + EMAC_MACCONTROL) |= EMAC_MACCONTROL_GMIIEN; +} + +/** + * \brief This API clears the GMII bit, Rx and Tx are held in reset. + * Note: This is not the API to disable MII. + * \param emacBase Base address of the EMAC Module registers. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_007 */ +/* DesignId : ETH_DesignId_007*/ +/* Requirements : HL_ETH_SR18 */ +void EMACMIIDisable(uint32 emacBase) +/*SAFETYMCUSW 1 J MR:14.1 "LDRA Tool issue." */ +{ + HWREG(emacBase + EMAC_MACCONTROL) &= (~(uint32)EMAC_MACCONTROL_GMIIEN); +} + +/** + * \brief This API sets the duplex mode of operation(full/half) for MAC. + * + * \param emacBase Base address of the EMAC Module registers. + * \param duplexMode duplex mode of operation. + * duplexMode can take the following values. \n + * EMAC_DUPLEX_FULL - Full Duplex \n + * EMAC_DUPLEX_HALF - Half Duplex. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_008 */ +/* DesignId : ETH_DesignId_008*/ +/* Requirements : HL_ETH_SR21 */ +void EMACDuplexSet(uint32 emacBase, uint32 duplexMode) +{ + HWREG(emacBase + EMAC_MACCONTROL) &= (~(uint32)EMAC_MACCONTROL_FULLDUPLEX); + + HWREG(emacBase + EMAC_MACCONTROL) |= duplexMode; +} + +/** + * \brief API to enable the transmit in the TX Control Register + * After the transmit is enabled, any write to TXHDP of + * a channel will start transmission + * + * \param emacBase Base Address of the EMAC Module Registers. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_009 */ +/* DesignId : ETH_DesignId_009*/ +/* Requirements : HL_ETH_SR21 */ +void EMACTxEnable(uint32 emacBase) +{ + HWREG(emacBase + EMAC_TXCONTROL) = EMAC_TXCONTROL_TXEN; +} + +/** + * \brief API to disable the transmit in the TX Control Register + * + * \param emacBase Base Address of the EMAC Module Registers. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_010 */ +/* DesignId : ETH_DesignId_010*/ +/* Requirements : HL_ETH_SR21 */ +void EMACTxDisable(uint32 emacBase) +/*SAFETYMCUSW 1 J MR:14.1 "LDRA Tool issue." */ +{ + HWREG(emacBase + EMAC_TXCONTROL) = EMAC_TXCONTROL_TXDIS; +} + +/** + * \brief API to enable the receive in the RX Control Register + * After the receive is enabled, and write to RXHDP of + * a channel, the data can be received in the destination + * specified by the corresponding RX buffer descriptor. + * + * \param emacBase Base Address of the EMAC Module Registers. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_011*/ +/* DesignId : ETH_DesignId_011*/ +/* Requirements : HL_ETH_SR21 */ +void EMACRxEnable(uint32 emacBase) +{ + HWREG(emacBase + EMAC_RXCONTROL) = EMAC_RXCONTROL_RXEN; +} + +/** + * \brief API to disable the receive in the RX Control Register + * + * \param emacBase Base Address of the EMAC Module Registers. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_012*/ +/* DesignId : ETH_DesignId_012*/ +/* Requirements : HL_ETH_SR21 */ +void EMACRxDisable(uint32 emacBase) +/*SAFETYMCUSW 1 J MR:14.1 "LDRA Tool issue." */ +{ + HWREG(emacBase + EMAC_RXCONTROL) = EMAC_RXCONTROL_RXDIS; +} + +/** + * \brief API to write the TX HDP register. If transmit is enabled, + * write to the TX HDP will immediately start transmission. + * The data will be taken from the buffer pointer of the TX buffer + * descriptor written to the TX HDP + * + * \param emacBase Base Address of the EMAC Module Registers.\n + * \param descHdr Address of the TX buffer descriptor + * \param channel Channel Number + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_013*/ +/* DesignId : ETH_DesignId_013*/ +/* Requirements : HL_ETH_SR16 */ +void EMACTxHdrDescPtrWrite(uint32 emacBase, uint32 descHdr, + uint32 channel) +{ + HWREG(emacBase + EMAC_TXHDP(channel)) = descHdr; +} + +/** + * \brief API to write the RX HDP register. If receive is enabled, + * write to the RX HDP will enable data reception to point to + * the corresponding RX buffer descriptor's buffer pointer. + * + * \param emacBase Base Address of the EMAC Module Registers.\n + * \param descHdr Address of the RX buffer descriptor + * \param channel Channel Number + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_014 */ +/* DesignId : ETH_DesignId_014*/ +/* Requirements : HL_ETH_SR16 */ +void EMACRxHdrDescPtrWrite(uint32 emacBase, uint32 descHdr, uint32 channel) +{ + HWREG(emacBase + EMAC_RXHDP(channel)) = descHdr; +} + +/** + * \brief This API Initializes the EMAC and EMAC Control modules. The + * EMAC Control module is reset, the CPPI RAM is cleared. also, + * all the interrupts are disabled. This API does not enable any + * interrupt or operation of the EMAC. + * + * \param emacCtrlBase Base Address of the EMAC Control module + * registers.\n + * \param emacBase Base address of the EMAC module registers + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_015 */ +/* DesignId : ETH_DesignId_015*/ +/* Requirements : HL_ETH_SR6 */ +void EMACInit(uint32 emacCtrlBase, uint32 emacBase) +{ + uint32 cnt; + + /* Reset the EMAC Control Module. This clears the CPPI RAM also */ + HWREG(emacCtrlBase + EMAC_CTRL_SOFTRESET) = EMAC_CONTROL_RESET; + + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((HWREG(emacCtrlBase + EMAC_CTRL_SOFTRESET) & EMAC_CONTROL_RESET) == EMAC_CONTROL_RESET) + { + } /* Wait */ + + /* Reset the EMAC Module. This clears the CPPI RAM also */ + HWREG(emacBase + EMAC_SOFTRESET) = EMAC_SOFT_RESET; + + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((HWREG(emacBase + EMAC_SOFTRESET) & EMAC_SOFT_RESET) == EMAC_SOFT_RESET ) + { + } /* Wait */ + + HWREG(emacBase + EMAC_MACCONTROL)= 0U; + HWREG(emacBase + EMAC_RXCONTROL)= 0U; + HWREG(emacBase + EMAC_TXCONTROL)= 0U; + + /* Initialize all the header descriptor pointer registers */ + for(cnt = 0U; cnt< EMAC_MAX_HEADER_DESC; cnt++) + { + HWREG(emacBase + EMAC_RXHDP(cnt)) = 0U; + HWREG(emacBase + EMAC_TXHDP(cnt)) = 0U; + HWREG(emacBase + EMAC_RXCP(cnt)) = 0U; + HWREG(emacBase + EMAC_TXCP(cnt)) = 0U; + HWREG(emacBase + EMAC_RXFREEBUFFER(cnt)) = 0xFFU; + } + /* Clear the interrupt enable for all the channels */ + HWREG(emacBase + EMAC_TXINTMASKCLEAR) = 0xFFU; + HWREG(emacBase + EMAC_RXINTMASKCLEAR) = 0xFFU; + + HWREG(emacBase + EMAC_MACHASH1) = 0U; + HWREG(emacBase + EMAC_MACHASH2) = 0U; + + HWREG(emacBase + EMAC_RXBUFFEROFFSET) = 0U; +} + +/** + * \brief Sets the MAC Address in MACSRCADDR registers. + * + * \param emacBase Base Address of the EMAC module registers. + * \param macAddr Start address of a MAC address array. + * The array[0] shall be the LSB of the MAC address + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_016 */ +/* DesignId : ETH_DesignId_016*/ +/* Requirements : HL_ETH_SR7 */ +void EMACMACSrcAddrSet(uint32 emacBase, uint8 macAddr[6]) +{ + HWREG(emacBase + EMAC_MACSRCADDRHI) = ((uint32)macAddr[5U] |((uint32)macAddr[4U] << 8U) + |((uint32)macAddr[3U] << 16U) |((uint32)macAddr[2U] << 24U)); + HWREG(emacBase + EMAC_MACSRCADDRLO) = ((uint32)macAddr[1U] | ((uint32)macAddr[0U] << 8U)); +} + +/** + * \brief Sets the MAC Address in MACADDR registers. + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number + * \param matchFilt Match or Filter + * \param macAddr Start address of a MAC address array. + * The array[0] shall be the LSB of the MAC address + * matchFilt can take the following values \n + * EMAC_MACADDR_NO_MATCH_NO_FILTER - Address is not used to match + * or filter incoming packet. \n + * EMAC_MACADDR_FILTER - Address is used to filter incoming packets \n + * EMAC_MACADDR_MATCH - Address is used to match incoming packets \n + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_017 */ +/* DesignId : ETH_DesignId_017*/ +/* Requirements : HL_ETH_SR7 */ +void EMACMACAddrSet(uint32 emacBase, uint32 channel, uint8 macAddr[6], uint32 matchFilt) +{ + HWREG(emacBase + EMAC_MACINDEX) = channel; + + HWREG(emacBase + EMAC_MACADDRHI) = ((uint32)macAddr[5U] |((uint32)macAddr[4U] << 8U) + |((uint32)macAddr[3U] << 16U) |((uint32)macAddr[2U] << 24U)); + HWREG(emacBase + EMAC_MACADDRLO) = ((uint32)macAddr[1U] | ((uint32)macAddr[0U] << 8U) + | matchFilt | (channel << 16U)); +} + +/** + * \brief Acknowledges an interrupt processed to the EMAC Control Core. + * + * \param emacBase Base Address of the EMAC module registers. + * \param eoiFlag Type of interrupt to acknowledge to the EMAC Control + * module. + * eoiFlag can take the following values \n + * EMAC_INT_CORE0_TX - Core 0 TX Interrupt + * EMAC_INT_CORE1_TX - Core 1 TX Interrupt + * EMAC_INT_CORE2_TX - Core 2 TX Interrupt + * EMAC_INT_CORE0_RX - Core 0 RX Interrupt + * EMAC_INT_CORE1_RX - Core 1 RX Interrupt + * EMAC_INT_CORE2_RX - Core 2 RX Interrupt + * \return None + * + **/ +/* SourceId : ETH_SourceId_018 */ +/* DesignId : ETH_DesignId_018*/ +/* Requirements : HL_ETH_SR15 */ +void EMACCoreIntAck(uint32 emacBase, uint32 eoiFlag) +{ + /* Acknowledge the EMAC Control Core */ + HWREG(emacBase + EMAC_MACEOIVECTOR) = eoiFlag; +} + +/** + * \brief Writes the the TX Completion Pointer for a specific channel + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number. + * \param comPtr Completion Pointer Value to be written + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_019 */ +/* DesignId : ETH_DesignId_019*/ +/* Requirements : HL_ETH_SR27 */ +void EMACTxCPWrite(uint32 emacBase, uint32 channel, uint32 comPtr) +{ + HWREG(emacBase + EMAC_TXCP(channel)) = comPtr; +} + +/** + * \brief Writes the the RX Completion Pointer for a specific channel + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number. + * \param comPtr Completion Pointer Value to be written + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_020 */ +/* DesignId : ETH_DesignId_020*/ +/* Requirements : HL_ETH_SR27 */ +void EMACRxCPWrite(uint32 emacBase, uint32 channel, uint32 comPtr) +{ + HWREG(emacBase + EMAC_RXCP(channel)) = comPtr; +} + +/** + * \brief Enables a specific channel to receive broadcast frames + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_021 */ +/* DesignId : ETH_DesignId_021*/ +/* Requirements : HL_ETH_SR28 */ +void EMACRxBroadCastEnable(uint32 emacBase, uint32 channel) +{ + HWREG(emacBase + EMAC_RXMBPENABLE) &= (~(uint32)EMAC_RXMBPENABLE_RXBROADCH); + + HWREG(emacBase + EMAC_RXMBPENABLE) |= ((uint32)EMAC_RXMBPENABLE_RXBROADEN | ((uint32)channel << (uint32)EMAC_RXMBPENABLE_RXBROADCH_SHIFT)); +} + +/** + * \brief Disables a specific channel to receive broadcast frames + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_022 */ +/* DesignId : ETH_DesignId_022*/ +/* Requirements : HL_ETH_SR28 */ +void EMACRxBroadCastDisable(uint32 emacBase, uint32 channel) +/*SAFETYMCUSW 1 J MR:14.1 "LDRA Tool issue." */ +{ + HWREG(emacBase + EMAC_RXMBPENABLE) &= (~(uint32)EMAC_RXMBPENABLE_RXBROADCH); + /* Broadcast Frames are filtered. */ + HWREG(emacBase + EMAC_RXMBPENABLE) &= (~(uint32)EMAC_RXMBPENABLE_RXBROADEN); +} + +/** + * \brief Enables a specific channel to receive multicast frames + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_023 */ +/* DesignId : ETH_DesignId_023*/ +/* Requirements : HL_ETH_SR28 */ +void EMACRxMultiCastEnable(uint32 emacBase, uint32 channel) +{ + HWREG(emacBase + EMAC_RXMBPENABLE) &= (~(uint32)EMAC_RXMBPENABLE_RXMULTCH); + + HWREG(emacBase + EMAC_RXMBPENABLE) |= ((uint32)EMAC_RXMBPENABLE_RXMULTEN |(channel)); +} + +/** + * \brief Disables a specific channel to receive multicast frames + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_024 */ +/* DesignId : ETH_DesignId_024*/ +/* Requirements : HL_ETH_SR28 */ +void EMACRxMultiCastDisable(uint32 emacBase, uint32 channel) +{ + HWREG(emacBase + EMAC_RXMBPENABLE) &= (~(uint32)EMAC_RXMBPENABLE_RXMULTCH); + + HWREG(emacBase + EMAC_RXMBPENABLE) &= (~(uint32)EMAC_RXMBPENABLE_RXMULTEN); +} + +/** + * \brief Enables unicast for a specific channel + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_025 */ +/* DesignId : ETH_DesignId_025*/ +/* Requirements : HL_ETH_SR14 */ +void EMACRxUnicastSet(uint32 emacBase, uint32 channel) +{ + HWREG(emacBase + EMAC_RXUNICASTSET) |= ((uint32)1U << channel); +} + +/** + * \brief Disables unicast for a specific channel + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_026 */ +/* DesignId : ETH_DesignId_026*/ +/* Requirements : HL_ETH_SR14 */ +void EMACRxUnicastClear(uint32 emacBase, uint32 channel) +/*SAFETYMCUSW 1 J MR:14.1 "LDRA Tool issue." */ +{ + HWREG(emacBase + EMAC_RXUNICASTCLEAR) |= ((uint32)1U << channel); +} + + +/** + * \brief Set the free buffers for a specific channel + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number. + * \param nBuf Number of free buffers + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_027 */ +/* DesignId : ETH_DesignId_027*/ +/* Requirements : HL_ETH_SR20 */ +void EMACNumFreeBufSet(uint32 emacBase, uint32 channel, + uint32 nBuf) +{ + HWREG(emacBase + EMAC_RXFREEBUFFER(channel)) = nBuf; +} + +/** + * \brief Gets the interrupt vectors of EMAC, which are pending + * + * \param emacBase Base Address of the EMAC module registers. + * + * \return Vectors + * + **/ +/* SourceId : ETH_SourceId_028 */ +/* DesignId : ETH_DesignId_028*/ +/* Requirements : HL_ETH_SR15 */ +uint32 EMACIntVectorGet(uint32 emacBase) +{ + return (HWREG(emacBase + EMAC_MACINVECTOR)); +} + + + +/** +* Function to setup the instance parameters inside the interface +* @param hdkif Network interface structure +* @return none. +*/ +/* SourceId : ETH_SourceId_029 */ +/* DesignId : ETH_DesignId_029*/ +/* Requirements : HL_ETH_SR6 */ +void EMACInstConfig(hdkif_t *hdkif) +{ + hdkif->emac_base = EMAC_0_BASE; + hdkif->emac_ctrl_base = EMAC_CTRL_0_BASE; + hdkif->emac_ctrl_ram = EMAC_CTRL_RAM_0_BASE; + hdkif->mdio_base = MDIO_BASE; + hdkif->phy_addr = 1U; + /* (MISRA-C:2004 10.1/R) MISRA error reported with Code Composer Studio MISRA checker. */ + hdkif->phy_autoneg = &Dp83640AutoNegotiate; + hdkif->phy_partnerability = &Dp83640PartnerAbilityGet; +} + +/** +* Function to setup the link. AutoNegotiates with the phy for link +* setup and set the EMAC with the result of autonegotiation. +* @param hdkif Network interface structure. +* @return ERR_OK if everything passed +* others if not passed +*/ +/* SourceId : ETH_SourceId_030 */ +/* DesignId : ETH_DesignId_030*/ +/* Requirements : HL_ETH_SR6 */ +uint32 EMACLinkSetup(hdkif_t *hdkif) { + uint32 linkstat = EMAC_ERR_CONNECT; + uint16 partnr_ablty = 0U; + uint32 phyduplex = EMAC_DUPLEX_HALF; + volatile uint32 delay = 0xFFFFFU; + + if(Dp83640AutoNegotiate((uint32)hdkif->mdio_base, (uint32)hdkif->phy_addr, + (uint16)((uint16)DP83640_100BTX | (uint16)DP83640_100BTX_FD + | (uint16)DP83640_10BT | (uint16)DP83640_10BT_FD)) == TRUE) { + linkstat = EMAC_ERR_OK; + /* (MISRA-C:2004 10.1/R) MISRA error reported with Code Composer Studio MISRA checker (due to use of & ?) */ + (void)Dp83640PartnerAbilityGet(hdkif->mdio_base, hdkif->phy_addr, + &partnr_ablty); + + /* Check for 100 Mbps and duplex capability */ + if((partnr_ablty & DP83640_100BTX_FD) != 0U) { + phyduplex = EMAC_DUPLEX_FULL; + } + } + + + else { + linkstat = EMAC_ERR_CONNECT; + } + + /* Set the EMAC with the negotiation results if it is successful */ + if(linkstat == EMAC_ERR_OK) { + EMACDuplexSet(hdkif->emac_base, phyduplex); + } + + /* Wait for the MII to settle down */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + while(delay != 0U) + { + delay--; + } + + return linkstat; +} + +/** + * \brief Perform a transmit queue teardown, that is, transmission is aborted. + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_031 */ +/* DesignId : ETH_DesignId_031*/ +/* Requirements : HL_ETH_SR22 */ +void EMACTxTeardown(uint32 emacBase, uint32 channel) +{ + HWREG(emacBase + EMAC_TXTEARDOWN) &= (channel); +} + +/** + * \brief Perform a receive queue teardown, that is, reception is aborted. + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_032 */ +/* DesignId : ETH_DesignId_032*/ +/* Requirements : HL_ETH_SR22 */ +void EMACRxTeardown(uint32 emacBase, uint32 channel) +{ + HWREG(emacBase + EMAC_RXTEARDOWN) &= (channel); +} + + +/** + * \brief Perform multicast frame filtering using the MAC Hash Registers. + * + * \param emacBase Base Address of the EMAC module registers. + * \param hashTable The hash table which specifies which bits are to be accepted. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_033 */ +/* DesignId : ETH_DesignId_033*/ +/* Requirements : HL_ETH_SR24 */ +void EMACFrameSelect(uint32 emacBase, uint64 hashTable) +{ + HWREG(emacBase + EMAC_MACHASH1) = (uint32)(hashTable & 0xFFFFFFFFU); + HWREG(emacBase + EMAC_MACHASH2) = (uint32)(hashTable >> 32U); +} + + +/** + * \brief Sets the Transmit Queue Priority type in the MACCONTROL Register + * + * \param emacBase Base Address of the EMAC module registers. + * \param txPType The Transmit Queue Priority Type. + * 0 results in a round-robin scheme being used to select the next channel, while 1 results + * in a fixed-priority scheme( channel 7 highest priority). + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_034 */ +/* DesignId : ETH_DesignId_034*/ +/* Requirements : HL_ETH_SR25 */ +void EMACTxPrioritySelect(uint32 emacBase, uint32 txPType) +{ + + /* 1- The queue uses a fixed-priority (channel 7 highest priority) scheme */ + if(txPType == 1U) + { + HWREG(emacBase + EMAC_MACCONTROL) &= (~(uint32)(EMAC_MACCONTROL_TXPTYPE)); + HWREG(emacBase + EMAC_MACCONTROL) |= EMAC_MACCONTROL_TXPTYPE; + } + else + { + HWREG(emacBase + EMAC_MACCONTROL) &= (~(uint32)(EMAC_MACCONTROL_TXPTYPE)); + } +} + + +/** + * \brief Performs a soft reset of the EMAC and EMAC Control Modules. + * + * \param emacCtrlBase Base address of the EMAC CONTROL module registers + * \param emacBase Base Address of the EMAC module registers. + * \return None + * + **/ +/* SourceId : ETH_SourceId_035 */ +/* DesignId : ETH_DesignId_035*/ +/* Requirements : HL_ETH_SR26 */ +void EMACSoftReset(uint32 emacCtrlBase, uint32 emacBase) +{ + /* Reset the EMAC Control Module. This clears the CPPI RAM also */ + HWREG(emacCtrlBase + EMAC_CTRL_SOFTRESET) = EMAC_CONTROL_RESET; + + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((HWREG(emacCtrlBase + EMAC_CTRL_SOFTRESET) & EMAC_CONTROL_RESET) == EMAC_CONTROL_RESET) + { + /* Wait for the reset to complete */ + } + + /* Reset the EMAC Module. */ + HWREG(emacBase + EMAC_SOFTRESET) = EMAC_SOFT_RESET; + + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((HWREG(emacBase + EMAC_SOFTRESET) & EMAC_SOFT_RESET) == EMAC_SOFT_RESET ) + { + /* Wait for the Reset to complete */ + } + +} + +/** + * \brief Enable Idle State of the EMAC Module. + * + * \param emacBase Base Address of the EMAC module registers. + * \return None + * + **/ +/* SourceId : ETH_SourceId_036 */ +/* DesignId : ETH_DesignId_036*/ +/* Requirements : HL_ETH_SR32 */ +void EMACEnableIdleState(uint32 emacBase) +{ + HWREG(emacBase + EMAC_MACCONTROL) |= EMAC_MACCONTROL_CMDIDLE; +} + +/** + * \brief Disable Idle State of the EMAC Module. + * + * \param emacBase Base Address of the EMAC module registers. + * \return None + * + **/ +/* SourceId : ETH_SourceId_037 */ +/* DesignId : ETH_DesignId_037*/ +/* Requirements : HL_ETH_SR32 */ +void EMACDisableIdleState(uint32 emacBase) +{ + HWREG(emacBase + EMAC_MACCONTROL) &= (~(uint32)(EMAC_MACCONTROL_CMDIDLE)); +} + +/** + * \brief Enables Loopback Mode. + * + * \param emacBase Base Address of the EMAC module registers. + * \return None + * + **/ +/* SourceId : ETH_SourceId_038 */ +/* DesignId : ETH_DesignId_038*/ +/* Requirements : HL_ETH_SR50 */ +void EMACEnableLoopback(uint32 emacBase) +/*SAFETYMCUSW 1 J MR:14.1 "LDRA Tool issue." */ +{ + uint32 GMIIENval=0U; + /*Store the value of GMIIEN bit before deasserting it */ + GMIIENval = HWREG(emacBase + EMAC_MACCONTROL) & EMAC_MACCONTROL_GMIIEN; + HWREG(emacBase + EMAC_MACCONTROL) &= (~(uint32)EMAC_MACCONTROL_GMIIEN); + + /*Enable Loopback */ + HWREG(emacBase + EMAC_MACCONTROL) |= EMAC_MACCONTROL_LOOPBACK; + + /*Restore the value of GMIIEN bit */ + HWREG(emacBase + EMAC_MACCONTROL) |= GMIIENval; +} + +/** + * \brief Disables Loopback Mode. + * + * \param emacBase Base Address of the EMAC module registers. + * \return None + * + **/ +/* SourceId : ETH_SourceId_039 */ +/* DesignId : ETH_DesignId_039*/ +/* Requirements : HL_ETH_SR50 */ +void EMACDisableLoopback(uint32 emacBase) +{ + uint32 GMIIENval=0U; + + /*Store the value of GMIIEN bit before deasserting it */ + GMIIENval = HWREG(emacBase + EMAC_MACCONTROL) & EMAC_MACCONTROL_GMIIEN; + HWREG(emacBase + EMAC_MACCONTROL) &= (~(uint32)EMAC_MACCONTROL_GMIIEN); + + /*Disable Loopback */ + HWREG(emacBase + EMAC_MACCONTROL) &= (~(uint32)EMAC_MACCONTROL_LOOPBACK); + + /*Restore the value of GMIIEN bit */ + HWREG(emacBase + EMAC_MACCONTROL) |= GMIIENval; +} + +/** + * \brief Enable Transmit Flow Control. + * + * \param emacBase Base Address of the EMAC module registers. + * \return None + * + **/ +/* SourceId : ETH_SourceId_040 */ +/* DesignId : ETH_DesignId_040*/ +/* Requirements : HL_ETH_SR20 */ +void EMACTxFlowControlEnable(uint32 emacBase) +{ + HWREG(emacBase + EMAC_MACCONTROL) |= EMAC_MACCONTROL_TXFLOWEN; +} + +/** + * \brief Disable Transmit Flow Control. + * + * \param emacBase Base Address of the EMAC module registers. + * \return None + * + **/ +/* SourceId : ETH_SourceId_041 */ +/* DesignId : ETH_DesignId_041*/ +/* Requirements : HL_ETH_SR20 */ +void EMACTxFlowControlDisable(uint32 emacBase) +{ + HWREG(emacBase + EMAC_MACCONTROL) &= (~(uint32)EMAC_MACCONTROL_TXFLOWEN); +} + +/** + * \brief Enable Receive Flow Control. + * + * \param emacBase Base Address of the EMAC module registers. + * \return None + * + **/ +/* SourceId : ETH_SourceId_042 */ +/* DesignId : ETH_DesignId_042*/ +/* Requirements : HL_ETH_SR20 */ +void EMACRxFlowControlEnable(uint32 emacBase) +{ + HWREG(emacBase + EMAC_MACCONTROL) |= EMAC_MACCONTROL_RXBUFFERFLOWEN; +} + +/** + * \brief Disable Receive Flow Control. + * + * \param emacBase Base Address of the EMAC module registers. + * \return None + * + **/ +/* SourceId : ETH_SourceId_043 */ +/* DesignId : ETH_DesignId_043*/ +/* Requirements : HL_ETH_SR20 */ +void EMACRxFlowControlDisable(uint32 emacBase) +{ + HWREG(emacBase + EMAC_MACCONTROL) &= (~(uint32)EMAC_MACCONTROL_RXBUFFERFLOWEN); +} + +/** + * \brief Receive flow threshold. These bits contain the threshold value for issuing flow control on incoming frames for channel n (when enabled). + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number + * \param threshold threshold value for issuing flow control on incoming frames for the given channel + * \return None + * + **/ +/* SourceId : ETH_SourceId_044 */ +/* DesignId : ETH_DesignId_044*/ +/* Requirements : HL_ETH_SR20 */ +void EMACRxSetFlowThreshold(uint32 emacBase, uint32 channel, uint32 threshold) +{ + HWREG(emacBase + EMAC_RXFLOWTHRESH(channel)) &= (0x0U); + HWREG(emacBase + EMAC_RXFLOWTHRESH(channel)) |= threshold; +} + +/** + * \brief This function reads the contents of the 36 network statistics registers that are present in the module. + * \param emacBase Base Address of the EMAC module registers. + * \param statRegNo The number of the register with RXGOODFRAMES (Offset= 0x200) being 0. Refer the Technical Reference Manual for the list of registers and their contents. + * \return uint32 + **/ +/* SourceId : ETH_SourceId_045 */ +/* DesignId : ETH_DesignId_045*/ +/* Requirements : HL_ETH_SR29 */ +uint32 EMACReadNetStatRegisters(uint32 emacBase, uint32 statRegNo) +{ + return HWREG(emacBase + EMAC_NETSTATREGS(statRegNo)); +} + + +/** + * \brief Function to read values of Transmit Interrupt Status registers (TXINTSTATMASKED and TXINTSTATRAW) + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number + * \param txintstat pointer to the emac_tx_int_status Structure that will store the register values that have been read + * \return None + * + **/ +/* SourceId : ETH_SourceId_046 */ +/* DesignId : ETH_DesignId_046*/ +/* Requirements : HL_ETH_SR23 */ +void EMACTxIntStat(uint32 emacBase, uint32 channel, emac_tx_int_status_t *txintstat) +{ + txintstat->intstatmasked = (HWREG(emacBase + EMAC_TXINTSTATMASKED) & ((uint32)1U << channel)); + txintstat->intstatraw = (HWREG(emacBase + EMAC_TXINTSTATRAW) & ((uint32)1U << channel)); +} + + +/** + * \brief Function to read values of Receive Interrupt Status registers (RXINTSTATMASKED, RXINTSTATRAW) + * + * \param emacBase Base Address of the EMAC module registers. + * \param channel Channel Number + * \param rxintstat pointer to the emac_rx_int_status Structure that will store the register values that have been read. + * \return None + **/ +/* SourceId : ETH_SourceId_047 */ +/* DesignId : ETH_DesignId_047*/ +/* Requirements : HL_ETH_SR23 */ +void EMACRxIntStat(uint32 emacBase, uint32 channel, emac_rx_int_status_t *rxintstat) +{ + rxintstat->intstatmasked_pend = (HWREG(emacBase + EMAC_RXINTSTATMASKED) & ((uint32)0x1U << (uint32)(channel))); + rxintstat->intstatmasked_threshpend = (HWREG(emacBase + EMAC_RXINTSTATMASKED) & ((uint32)0x1U << ((uint32)0x8U + (uint32)(channel)))); + + rxintstat->intstatraw_pend = (HWREG(emacBase + EMAC_RXINTSTATRAW) & ((uint32)0x1U << (uint32)(channel))); + rxintstat->intstatraw_threshpend = (HWREG(emacBase + EMAC_RXINTSTATRAW) & ((uint32)0x1U << ((uint32)0x8U + (uint32)(channel)))); +} + + +/** + * \brief Tx and Rx Buffer Descriptors are initialized. Buffer pointers are allocated to the Rx Descriptors. + * + * \param hdkif network interface structure + * \return None + * + **/ +/* SourceId : ETH_SourceId_048 */ +/* DesignId : ETH_DesignId_048*/ +/* Requirements : HL_ETH_SR17,HL_ETH_SR30 */ +void EMACDMAInit(hdkif_t *hdkif) +{ + + uint32 num_bd, pbuf_cnt = 0U; + volatile emac_tx_bd_t *curr_txbd, *last_txbd; + volatile emac_rx_bd_t *curr_bd, *last_bd; + txch_t *txch_dma; + rxch_t *rxch_dma; + uint8_t *p; + + txch_dma = &(hdkif->txchptr); + + /** + * Initialize the Descriptor Memory For TX and RX + * Only single channel is supported for both TX and RX + */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + txch_dma->free_head = (volatile emac_tx_bd_t*)(hdkif->emac_ctrl_ram); + txch_dma->next_bd_to_process = txch_dma->free_head; + txch_dma->active_tail = NULL; + + /* Set the number of descriptors for the channel */ + num_bd = (SIZE_EMAC_CTRL_RAM >> 1U) / sizeof(emac_tx_bd_t); + + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_txbd = txch_dma->free_head; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + last_txbd = curr_txbd; + + /* Initialize all the TX buffer Descriptors */ + while(num_bd != 0U) { + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Struct pointer used for linked list is incremented." */ + curr_txbd->next = curr_txbd + 1U; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_txbd->flags_pktlen = 0U; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + last_txbd = curr_txbd; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_txbd = curr_txbd->next; + num_bd--; + } + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + last_txbd->next = txch_dma->free_head; + + /* Initialize the descriptors for the RX channel */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + rxch_dma = &(hdkif->rxchptr); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Struct pointer used for linked list is incremented." */ + curr_txbd++; + /*SAFETYMCUSW 94 S MR:11.1,11.2,11.4 "Linked List pointer needs to be assigned." */ + /*SAFETYMCUSW 95 S MR:11.1,11.4 "Linked List pointer needs to be assigned." */ + /*SAFETYMCUSW 344 S MR:11.5 "Linked List pointer needs to be assigned to a different structure." */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + rxch_dma->active_head = (volatile emac_rx_bd_t *)curr_txbd; + + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + rxch_dma->free_head = NULL; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd = rxch_dma->active_head; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + last_bd = curr_bd; + + + /* + ** Static allocation of a specific number of packet buffers as specified by MAX_RX_PBUF_ALLOC, whose value is entered by the user in HALCoGen GUI. + */ + + /*Commented part of allocation of pbufs need to check whether its true*/ + + for(pbuf_cnt = 0U;pbuf_cnt < MAX_RX_PBUF_ALLOC;pbuf_cnt++) + { + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + p = pbuf_array[pbuf_cnt]; + /*SAFETYMCUSW 439 S MR:11.3 "RHS is a pointer value required to be stored. - Advisory as per MISRA" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->bufptr = (uint32)p; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->bufoff_len = MAX_TRANSFER_UNIT; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->flags_pktlen = EMAC_BUF_DESC_OWNER; + if (pbuf_cnt == (MAX_RX_PBUF_ALLOC - 1U)) + { + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->next = NULL; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + last_bd = curr_bd; + + } + else + { + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Struct pointer used for linked list is incremented." */ + curr_bd->next = (curr_bd + 1U); + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Struct pointer used for linked list is incremented." */ + curr_bd++; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + last_bd = curr_bd; + } + } + + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + last_bd->next = NULL; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + rxch_dma->active_tail = last_bd; +} + + +/** + * \brief Initializes the EMAC module for transmission and reception. + * + * \param macaddr MAC Address of the Module. + * \param channel Channel Number. + * + * \return EMAC_ERR_OK if everything gets initialized + * EMAC_ERR_CONN in case of an error in connecting. + * + **/ +/* SourceId : ETH_SourceId_049 */ +/* DesignId : ETH_DesignId_049*/ +/* Requirements : HL_ETH_SR6 */ +uint32 EMACHWInit(uint8_t macaddr[6U]) +{ + uint32 temp, channel; + volatile uint32 phyID=0U; + volatile uint32 delay = 0xFFFU; + uint32 phyIdReadCount = 0xFFFFU; + volatile uint32 phyLinkRetries = 0xFFFFU; + hdkif_t *hdkif; + rxch_t *rxch; + uint32 retVal = EMAC_ERR_OK; + uint32 emacBase = 0U; +#if(EMAC_MII_ENABLE == 0U) + uint16 partnr_spd; +#endif + + hdkif = &hdkif_data[0U]; + EMACInstConfig(hdkif); + /* set MAC hardware address */ + for(temp = 0U; temp < EMAC_HWADDR_LEN; temp++) { + hdkif->mac_addr[temp] = macaddr[(EMAC_HWADDR_LEN - 1U) - temp]; + } + /*Initialize the EMAC, EMAC Control and MDIO modules. */ + EMACInit(hdkif->emac_ctrl_base, hdkif->emac_base); + MDIOInit(hdkif->mdio_base, MDIO_FREQ_INPUT, MDIO_FREQ_OUTPUT); + + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + while(delay != 0U) + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + delay--; + } + + /* Set the MAC Addresses in EMAC hardware */ + emacBase = hdkif->emac_base; /* MISRA Code Fix (12.2) */ + EMACMACSrcAddrSet(emacBase, hdkif->mac_addr); + for(channel = 0U; channel < 8U; channel++) { + emacBase = hdkif->emac_base; + EMACMACAddrSet(emacBase, channel, hdkif->mac_addr, EMAC_MACADDR_MATCH); + } + + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + while ((phyID == 0U) && (phyIdReadCount > 0U)) { + phyID = Dp83640IDGet(hdkif->mdio_base,hdkif->phy_addr); + phyIdReadCount--; + } + + if (0U == phyID) { + retVal = EMAC_ERR_CONNECT; + } else { + + } + + if((uint32)0U == ((MDIOPhyAliveStatusGet(hdkif->mdio_base) + >> hdkif->phy_addr) & (uint32)0x01U )) { + retVal = EMAC_ERR_CONNECT; + } else { + + } + +#if(EMAC_MII_ENABLE == 0U) + + Dp83640PartnerSpdGet(hdkif->mdio_base, hdkif->phy_addr, &partnr_spd); + if((partnr_spd & 2U)==0U) + { + EMACRMIISpeedSet(hdkif->emac_base, EMAC_MACCONTROL_RMIISPEED); + } +#endif + + if(!Dp83640LinkStatusGet(hdkif->mdio_base, (uint32)EMAC_PHYADDRESS, (uint32)phyLinkRetries)) { + retVal = EMAC_ERR_CONNECT; + } else { + + } + + if(EMACLinkSetup(hdkif) != EMAC_ERR_OK) { + retVal = EMAC_ERR_CONNECT; + } else { + + } + + /* The transmit and receive buffer descriptors are initialized here. + * Also, packet buffers are allocated to the receive buffer descriptors. + */ + + EMACDMAInit(hdkif); + + /* Acknowledge receive and transmit interrupts for proper interrupt pulsing*/ + EMACCoreIntAck(hdkif->emac_base, (uint32)EMAC_INT_CORE0_RX); + EMACCoreIntAck(hdkif->emac_base, (uint32)EMAC_INT_CORE0_TX); + + /* Enable GMII bit in the MACCONTROL Rgister*/ + /*SAFETYMCUSW 139 S MR:13.7 "Parameter is taken as input from GUI." */ + EMACMIIEnable(hdkif->emac_base); + + /* Enable Broadcast if enabled in the GUI. */ + /*SAFETYMCUSW 139 S MR:13.7 "Parameter is taken as input from GUI." */ +#if(EMAC_BROADCAST_ENABLE) + EMACRxBroadCastEnable(hdkif->emac_base, (uint32)EMAC_CHANNELNUMBER); +#else + /*SAFETYMCUSW 1 J MR:14.1 "If condition parameter is taken as input from GUI." */ + /*SAFETYMCUSW 1 J MR:14.1 "If condition parameter is taken as input from GUI." */ + EMACRxBroadCastDisable(hdkif->emac_base, (uint32)EMAC_CHANNELNUMBER); +#endif + + /* Enable Broadcast if enabled in the GUI. */ + /*SAFETYMCUSW 139 S MR:13.7 "Parameter is taken as input from GUI." */ +#if(EMAC_UNICAST_ENABLE) + EMACRxUnicastSet(hdkif->emac_base, (uint32)EMAC_CHANNELNUMBER); +#else + /*SAFETYMCUSW 1 J MR:14.1 "If condition parameter is taken as input from GUI." */ + EMACRxUnicastClear(hdkif->emac_base, (uint32)EMAC_CHANNELNUMBER); +#endif + + /*Enable Full Duplex or Half-Duplex mode based on GUI Input. */ + /*SAFETYMCUSW 139 S MR:13.7 "Parameter is taken as input from GUI." */ +#if (EMAC_FULL_DUPLEX_ENABLE) + EMACDuplexSet(EMAC_0_BASE, (uint32)EMAC_DUPLEX_FULL); +#else + /*SAFETYMCUSW 1 J MR:14.1 "If condition arameter is taken as input from GUI." */ + EMACDuplexSet(EMAC_0_BASE, (uint32)EMAC_DUPLEX_HALF); +#endif + + /* Enable Loopback based on GUI Input */ + /*SAFETYMCUSW 139 S MR:13.7 "Parameter is taken as input from GUI." */ +#if(EMAC_LOOPBACK_ENABLE) + EMACEnableLoopback(hdkif->emac_base); +#else + /*SAFETYMCUSW 1 J MR:14.1 "If condition parameter is taken as input from GUI." */ + EMACDisableLoopback(hdkif->emac_base); +#endif + + /* Enable Transmit and Transmit Interrupt */ + /*SAFETYMCUSW 139 S MR:13.7 "Parameter is taken as input from GUI." */ +#if(EMAC_TX_ENABLE) + EMACTxEnable(hdkif->emac_base); + EMACTxIntPulseEnable(hdkif->emac_base, hdkif->emac_ctrl_base, (uint32)EMAC_CHANNELNUMBER, (uint32)EMAC_CHANNELNUMBER); +#else + /*SAFETYMCUSW 1 J MR:14.1 "If condition parameter is taken as input from GUI." */ + /*SAFETYMCUSW 1 J MR:14.1 "If condition parameter is taken as input from GUI." */ + EMACTxDisable(hdkif->emac_base); + EMACTxIntPulseDisable(hdkif->emac_base, hdkif->emac_ctrl_base, (uint32)EMAC_CHANNELNUMBER, (uint32)EMAC_CHANNELNUMBER); +#endif + + /* Enable Receive and Receive Interrupt. Then start receiving by writing to the HDP register. */ + /*SAFETYMCUSW 139 S MR:13.7 "Parameter is taken as input from GUI." */ +#if(EMAC_RX_ENABLE) + EMACNumFreeBufSet(hdkif->emac_base,(uint32)EMAC_CHANNELNUMBER , (uint32)MAX_RX_PBUF_ALLOC); + EMACRxEnable(hdkif->emac_base); + EMACRxIntPulseEnable(hdkif->emac_base, hdkif->emac_ctrl_base, (uint32)EMAC_CHANNELNUMBER, (uint32)EMAC_CHANNELNUMBER); + rxch = &(hdkif->rxchptr); + /* Write to the RX HDP for channel 0 */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + EMACRxHdrDescPtrWrite(hdkif->emac_base, (uint32)rxch->active_head, (uint32)EMAC_CHANNELNUMBER); +#else + /*SAFETYMCUSW 1 J MR:14.1 "If condition parameter is taken as input from GUI." */ + /*SAFETYMCUSW 1 J MR:14.1 "If condition parameter is taken as input from GUI." */ + EMACRxDisable(hdkif->emac_base); + EMACRxIntPulseDisable(hdkif->emac_base, hdkif->emac_ctrl_base, (uint32)EMAC_CHANNELNUMBER, (uint32)EMAC_CHANNELNUMBER); +#endif + + return retVal; +} + + +/** + * This function should do the actual transmission of the packet. The packet is + * contained in the pbuf that is passed to the function. This pbuf might be + * chained. That is, one pbuf can span more than one tx buffer descriptors + * + * @param hdkif network interface structure + * @param pbuf the pbuf structure which contains the data to be sent using EMAC + * @return boolean. + * -Returns FALSE if a Null pointer was passed for transmission + * -Returns TRUE if valid data is sent and is transmitted. + */ +/* SourceId : ETH_SourceId_050 */ +/* DesignId : ETH_DesignId_050*/ +/* Requirements : HL_ETH_SR31 */ +boolean EMACTransmit(hdkif_t *hdkif, pbuf_t *pbuf) +{ + + txch_t *txch; + pbuf_t *q; + uint16 totLen; + uint16 qLen; + volatile emac_tx_bd_t *curr_bd,*active_head, *bd_end; + boolean retValue = FALSE; + if((pbuf != NULL) && (hdkif != NULL)) + { + txch = &(hdkif->txchptr); + + /* Get the buffer descriptor which is free to transmit */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd = txch->free_head; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + bd_end = curr_bd; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + active_head = curr_bd; + + /* Update the total packet length */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->flags_pktlen &= (~((uint32)0xFFFFU)); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + totLen = pbuf->tot_len; + curr_bd->flags_pktlen |= (uint32)(totLen); + + /* Indicate the start of the packet */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->flags_pktlen |= (EMAC_BUF_DESC_SOP | EMAC_BUF_DESC_OWNER); + + + /* Copy pbuf information into TX buffer descriptors */ + q = pbuf; + while(q != NULL) + { + /* Initialize the buffer pointer and length */ + /*SAFETYMCUSW 439 S MR:11.3 "RHS is a pointer value required to be stored. - Advisory as per MISRA" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->bufptr = (uint32)(q->payload); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + qLen = q->len; + curr_bd->bufoff_len = ((uint32)(qLen) & 0xFFFFU); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + bd_end = curr_bd; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd = curr_bd->next; + q = q->next; + } + + + /* Indicate the start and end of the packet */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + bd_end->next = NULL; + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + bd_end->flags_pktlen |= EMAC_BUF_DESC_EOP; + + /*SAFETYMCUSW 71 S MR:17.6 "Assigned pointer value has required scope." */ + txch->free_head = curr_bd; + + /* For the first time, write the HDP with the filled bd */ + if(txch->active_tail == NULL) { + /*SAFETYMCUSW 439 S MR:11.3 "Address stored in pointer is passed as as an int parameter. - Advisory as per MISRA" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + EMACTxHdrDescPtrWrite(hdkif->emac_base, (uint32)(active_head), (uint32)EMAC_CHANNELNUMBER); + } + + /* + * Chain the bd's. If the DMA engine, already reached the end of the chain, + * the EOQ will be set. In that case, the HDP shall be written again. + */ + else { + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd = txch->active_tail; + /* Wait for the EOQ bit is set */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + while (EMAC_BUF_DESC_EOQ != (curr_bd->flags_pktlen & EMAC_BUF_DESC_EOQ)) + { + } + /* Don't write to TXHDP0 until it turns to zero */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + while (((uint32)0U != *((uint32 *)0xFCF78600U))) + { + } + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->next = active_head; + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + if (EMAC_BUF_DESC_EOQ == (curr_bd->flags_pktlen & EMAC_BUF_DESC_EOQ)) { + /* Write the Header Descriptor Pointer and start DMA */ + /*SAFETYMCUSW 439 S MR:11.3 "Address stored in pointer is passed as as an int parameter. - Advisory as per MISRA" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + EMACTxHdrDescPtrWrite(hdkif->emac_base, (uint32)(active_head), (uint32)EMAC_CHANNELNUMBER); + } + } + + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + txch->active_tail = bd_end; + retValue = TRUE; + } + else + { + retValue = FALSE; + } + return retValue; +} + + +/** + * Function for processing Tx buffer descriptors. + * + * @param hdkif interface structure + * @return none + */ +/* SourceId : ETH_SourceId_051 */ +/* DesignId : ETH_DesignId_051*/ +/* Requirements : HL_ETH_SR15 */ +void EMACTxIntHandler(hdkif_t *hdkif) +{ + txch_t *txch_int; + volatile emac_tx_bd_t *curr_bd, *next_bd_to_process; + + txch_int = &(hdkif->txchptr); + + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + next_bd_to_process = txch_int->next_bd_to_process; + + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd = next_bd_to_process; + + /* Check for correct start of packet */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + while(((curr_bd->flags_pktlen) & EMAC_BUF_DESC_SOP) == EMAC_BUF_DESC_SOP) { + + /* Make sure that the transmission is over */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + while(((curr_bd->flags_pktlen) & EMAC_BUF_DESC_OWNER) == EMAC_BUF_DESC_OWNER) + { + } + + /* Traverse till the end of packet is reached */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + while(((curr_bd->flags_pktlen) & EMAC_BUF_DESC_EOP) != EMAC_BUF_DESC_EOP) { + curr_bd = curr_bd->next; + } + + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + next_bd_to_process->flags_pktlen &= ~(EMAC_BUF_DESC_SOP); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->flags_pktlen &= ~(EMAC_BUF_DESC_EOP); + + /** + * If there are no more data transmitted, the next interrupt + * shall happen with the pbuf associated with the free_head + */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + if(curr_bd->next == NULL) { + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + txch_int->next_bd_to_process = txch_int->free_head; + } + + else { + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + txch_int->next_bd_to_process = curr_bd->next; + } + + /* Acknowledge the EMAC and free the corresponding pbuf */ + /*SAFETYMCUSW 439 S MR:11.3 "Address stored in pointer is passed as as an int parameter. - Advisory as per MISRA" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + /*SAFETYMCUSW 344 S MR:11.5 "Address stored in pointer is passed as as an int parameter." */ + EMACTxCPWrite(hdkif->emac_base, (uint32)EMAC_CHANNELNUMBER, (uint32)curr_bd); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + next_bd_to_process = txch_int->next_bd_to_process; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd = next_bd_to_process; + + } + +} + + +/** + * Function for processing received packets. + * + * @param hdkif interface structure + * @return none + */ +/* SourceId : ETH_SourceId_052 */ +/* DesignId : ETH_DesignId_052*/ +/* Requirements : HL_ETH_SR31 */ +void EMACReceive(hdkif_t *hdkif) +{ + rxch_t *rxch_int; + volatile emac_rx_bd_t *curr_bd, *curr_tail, *last_bd; + + /* The receive structure that holds data about a particular receive channel */ + rxch_int = &(hdkif->rxchptr); + + /* Get the buffer descriptors which contain the earliest filled data */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd = rxch_int->active_head; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + last_bd = rxch_int->active_tail; + + /** + * Process the descriptors as long as data is available + * when the DMA is receiving data, SOP flag will be set + */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + while((curr_bd->flags_pktlen & EMAC_BUF_DESC_SOP) == EMAC_BUF_DESC_SOP) { + + + /* Start processing once the packet is loaded */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + if((curr_bd->flags_pktlen & EMAC_BUF_DESC_OWNER) + != EMAC_BUF_DESC_OWNER) { + + /* this bd chain will be freed after processing */ + /*SAFETYMCUSW 71 S MR:17.6 "Assigned pointer value has required scope." */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + rxch_int->free_head = curr_bd; + + /* Get the total length of the packet. curr_bd points to the start + * of the packet. + */ + + /* + * The loop runs till it reaches the end of the packet. + */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + while((curr_bd->flags_pktlen & EMAC_BUF_DESC_EOP)!= EMAC_BUF_DESC_EOP) + { + /*Update the flags for the descriptor again and the length of the buffer*/ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->flags_pktlen = (uint32)EMAC_BUF_DESC_OWNER; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->bufoff_len = (uint32)MAX_TRANSFER_UNIT; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + last_bd = curr_bd; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd = curr_bd->next; + } + + /* Updating the last descriptor (which contained the EOP flag) */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->flags_pktlen = (uint32)EMAC_BUF_DESC_OWNER; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd->bufoff_len = (uint32)MAX_TRANSFER_UNIT; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + last_bd = curr_bd; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_bd = curr_bd->next; + + /* Acknowledge that this packet is processed */ + /*SAFETYMCUSW 439 S MR:11.3 "Address stored in pointer is passed as as an int parameter. - Advisory as per MISRA" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + EMACRxCPWrite(hdkif->emac_base, (uint32)EMAC_CHANNELNUMBER, (uint32)last_bd); + + /* The next buffer descriptor is the new head of the linked list. */ + /*SAFETYMCUSW 71 S MR:17.6 "Assigned pointer value has required scope." */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + rxch_int->active_head = curr_bd; + + /* The processed descriptor is now the tail of the linked list. */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_tail = rxch_int->active_tail; + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + curr_tail->next = rxch_int->free_head; + + /* The last element in the already processed Rx descriptor chain is now the end of list. */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + last_bd->next = NULL; + + + /** + * Check if the reception has ended. If the EOQ flag is set, the NULL + * Pointer is taken by the DMA engine. So we need to write the RX HDP + * with the next descriptor. + */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + if((curr_tail->flags_pktlen & EMAC_BUF_DESC_EOQ) == EMAC_BUF_DESC_EOQ) { + /*SAFETYMCUSW 439 S MR:11.3 "Address stored in pointer is passed as as an int parameter. - Advisory as per MISRA" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + EMACRxHdrDescPtrWrite(hdkif->emac_base, (uint32)(rxch_int->free_head), (uint32)EMAC_CHANNELNUMBER); + } + + /*SAFETYMCUSW 71 S MR:17.6 "Assigned pointer value has required scope." */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are assigned in this driver" */ + rxch_int->free_head = curr_bd; + rxch_int->active_tail = last_bd; + } + } +} + + +/** @fn void EMACGetConfigValue(emac_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ETH_SourceId_053 */ +/* DesignId : ETH_DesignId_053*/ +/* Requirements : HL_ETH_SR52 */ +void EMACGetConfigValue(emac_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->TXCONTROL = EMAC_TXCONTROL_CONFIGVALUE; + config_reg->RXCONTROL = EMAC_RXCONTROL_CONFIGVALUE; + config_reg->TXINTMASKSET = EMAC_TXINTMASKSET_CONFIGVALUE; + config_reg->TXINTMASKCLEAR = EMAC_TXINTMASKCLEAR_CONFIGVALUE; + config_reg->RXINTMASKSET = EMAC_RXINTMASKSET_CONFIGVALUE; + config_reg->RXINTMASKCLEAR = EMAC_RXINTMASKCLEAR_CONFIGVALUE; + config_reg->MACSRCADDRHI = EMAC_MACSRCADDRHI_CONFIGVALUE; + config_reg->MACSRCADDRLO = EMAC_MACSRCADDRLO_CONFIGVALUE; + config_reg->MDIOCONTROL = EMAC_MDIOCONTROL_CONFIGVALUE; + config_reg->C0RXEN = EMAC_C0RXEN_CONFIGVALUE; + config_reg->C0TXEN = EMAC_C0TXEN_CONFIGVALUE; + } + else + { + config_reg->TXCONTROL = HWREG(EMAC_0_BASE + EMAC_TXCONTROL); + config_reg->RXCONTROL = HWREG(EMAC_0_BASE + EMAC_RXCONTROL); + config_reg->TXINTMASKSET = HWREG(EMAC_0_BASE + EMAC_TXINTMASKSET); + config_reg->TXINTMASKCLEAR = HWREG(EMAC_0_BASE + EMAC_TXINTMASKCLEAR); + config_reg->RXINTMASKSET = HWREG(EMAC_0_BASE + EMAC_RXINTMASKSET); + config_reg->RXINTMASKCLEAR = HWREG(EMAC_0_BASE + EMAC_RXINTMASKCLEAR); + config_reg->MACSRCADDRHI = HWREG(EMAC_0_BASE + EMAC_MACSRCADDRHI); + config_reg->MACSRCADDRLO = HWREG(EMAC_0_BASE + EMAC_MACSRCADDRLO); + config_reg->MDIOCONTROL = HWREG(MDIO_0_BASE + MDIO_CONTROL); + config_reg->C0RXEN = HWREG(EMAC_CTRL_0_BASE + EMAC_CTRL_CnRXEN(0U)); + config_reg->C0TXEN = HWREG(EMAC_CTRL_0_BASE + EMAC_CTRL_CnTXEN(0U)); + } + +} + + + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/***************************** End Of File ***********************************/ Index: firmware/source/eqep.c =================================================================== diff -u --- firmware/source/eqep.c (revision 0) +++ firmware/source/eqep.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,1328 @@ +/** @file eqep.c +* @brief EQEP Driver Source File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - API Functions +* - Interrupt Handlers +* . +* which are relevant for the EQEP driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +#include "eqep.h" +#include "sys_vim.h" + +/*the functions +*/ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/** @fn void QEPInit(void) +* @brief Initializes the eQEP Driver +* +* This function initializes the eQEP module. +*/ +/* SourceId : EQEP_SourceId_001 */ +/* DesignId : EQEP_DesignId_001 */ +/* Requirements : HL_QEP_SR1 */ +void QEPInit(void) +{ + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + /** - Clear Position Counter register */ + eqepREG1->QPOSCNT = 0x00000000U; + + /** - Initialize Position Counter value register */ + eqepREG1->QPOSINIT = 0x00000000U; + + /** - Set Maximum position counter value */ + eqepREG1->QPOSMAX = 0x00000000U; + + /** - Set the initial Position compare value */ + eqepREG1->QPOSCMP = 0x00000000U; + + /** - Clear the time base */ + eqepREG1->QUTMR = 0x00000000U; + + /** - Configure unit period register */ + eqepREG1->QUPRD = (uint32) 0x00000000U; + + /** - Clear Watchdog Timer register */ + eqepREG1->QWDTMR = (uint16) 0x00000000U; + + /** - Configure Watchdog Period */ + eqepREG1->QWDPRD = (uint16) 0x0000U; + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + /** - Setup Decoder Control Register + * - Select Position counter Mode + * - Enable / Disable Sync Output + * - Select Sync Output Pin + * - Select external Clock rate ( resolution) + * - Enable / Disable Swap Quadrature clock input + * - Enable / Disable Gating of index pulse with Strobe. + * - Enable / Disable Negate QEPA input + * - Enable / Disable Negate QEPB input + * - Enable / Disable Negate QEPI input + * - Enable / Disable Negate QEPS input + */ + eqepREG1->QDECCTL = (uint16)((uint16)((uint16)eQEP_DIRECTION_COUNT << 14U) + | (uint16)((uint16)0U << 13U) + | (uint16)((uint16)eQEP_INDEX_PIN << 12U) + | (uint16)((uint16)eQEP_RESOLUTION_1x << 11U) + | (uint16)((uint16)0U << 10U) + | (uint16)((uint16)0U << 9U) + | (uint16)((uint16)0U << 8U) + | (uint16)((uint16)0U << 7U) + | (uint16)((uint16)0U << 6U) + | (uint16)((uint16)0U << 5U) + | (uint16)0x0000U); + + /** - Setup eQEP Control Register + * - Select Position counter Reset Mode + * - Enable & Select Stobe event initialization of position counter + * - Enable & Select Index event initialization of position counter + * - Enable / Disable Software Initialization of Position counter. + * - Select Strobe event latch of position counter. + * - Select Index event latch of position counter. + * - Select EQEP capture Latch mode + */ + eqepREG1->QEPCTL = (uint16)((uint16)((uint16)eQEP_MAX_POSITION << 12U) + | (uint16)((uint16)0U << 11U ) + | (uint16)((uint16)eQEP_DIRECTON_DEPENDENT << 10U) + | (uint16)((uint16)0U << 9U) + | (uint16)((uint16)eQEP_RISING_EDGE << 8U) + | (uint16)((uint16)0U << 7U) + | (uint16)((uint16)eQEP_RISING_EDGE << 6U) + | (uint16)((uint16)eQEP_LATCH_RISING_EDGE << 4U) + | (uint16)((uint16)eQEP_ON_POSITION_COUNTER_READ << 2U) + | (uint16)0x0000U); + + /** - Setup eQEP Position Control Register + * - Enable / Disable Position compare shadow. + * - Select Position compare shadow load mode. + * - Select Polarity of Sync output. + * - Select Position compare sync output pulse width. + */ + eqepREG1->QPOSCTL = (uint16)((uint16)((uint16)0U << 15U) + | (uint16)((uint16)eQEP_QPOSCNT_EQ_QPSCMP << 14U) + | (uint16)((uint16)eQEP_ACTIVE_HIGH << 13U) + | (uint16)((uint16)0x000U) + | (uint16)0x0000U); + + /** - Setup eQEP Capture Control Register + * - Select capture timer clock prescaler. + * - Select Unit position event prescaler. + */ + eqepREG1->QCAPCTL = (uint16)((uint16)((uint16)eQEP_PS_8 << 4U) + | (uint16)((uint16)eQEP_PS_512) + | (uint16)0x0000U); + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + + /** - Clear Interrupt Flag register */ + eqepREG1->QCLR = (uint16) 0xFFFFU; + + /** - Setup eQEP Interrupt Enable Register + * Enable / Diable UTO Interrupt + * Enable / Diable IEL Interrupt + * Enable / Diable SEL Interrupt + * Enable / Diable PCM Interrupt + * Enable / Diable PCR Interrupt + * Enable / Diable PCO Interrupt + * Enable / Diable PCU Interrupt + * Enable / Diable WTO Interrupt + * Enable / Diable QDC Interrupt + * Enable / Diable QPE Interrupt + * Enable / Diable PCE Interrupt + */ + eqepREG1->QEINT = (uint16)((uint16)((uint16)0U << 11U) + | (uint16)((uint16)0U << 10U) + | (uint16)((uint16)0U << 9U) + | (uint16)((uint16)0U << 8U) + | (uint16)((uint16)0U << 7U) + | (uint16)((uint16)0U << 6U) + | (uint16)((uint16)0U << 5U) + | (uint16)((uint16)0U << 4U) + | (uint16)((uint16)0U << 3U) + | (uint16)((uint16)0U << 2U) + | (uint16)((uint16)0U << 1U)); + + /** - Clear Capture Timer register */ + eqepREG1->QCTMR = (uint16)0x0000U; + + /** - Clear the Capture Period regiter */ + eqepREG1->QCPRD = (uint16)0x0000U; + + /** - Clear Period Latch register */ + eqepREG1->QCPRDLAT = (uint16)0x0000U; + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + + /** - Clear Position Counter register */ + eqepREG2->QPOSCNT = 0x00000000U; + + /** - Initialize Position Counter value register */ + eqepREG2->QPOSINIT = 0x00000000U; + + /** - Set Maximum position counter value */ + eqepREG2->QPOSMAX = 0x00000000U; + + /** - Set the initial Position compare value */ + eqepREG2->QPOSCMP = 0U; + + /** - Clear the time base */ + eqepREG2->QUTMR = 0x00000000U; + + /** - Configure unit period register */ + eqepREG2->QUPRD = (uint32) 0U; + + /** - Clear Watchdog Timer register */ + eqepREG2->QWDTMR = (uint16) 0x00000000U; + + /** - Configure Watchdog Period */ + eqepREG2->QWDPRD = (uint16) 0U; + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + + /** - Setup Decoder Control Register + * - Select Position counter Mode + * - Enable / Disable Sync Output + * - Select Sync Output Pin + * - Select external Clock rate ( resolution) + * - Enable / Disable Swap Quadrature clock input + * - Enable / Disable Gating of index pulse with Strobe. + * - Enable / Disable Negate QEPA input + * - Enable / Disable Negate QEPB input + * - Enable / Disable Negate QEPI input + * - Enable / Disable Negate QEPS input + */ + eqepREG2->QDECCTL = (uint16)((uint16)((uint16)eQEP_DIRECTION_COUNT << 14U) + | (uint16)((uint16)0U << 13U) + | (uint16)((uint16)eQEP_INDEX_PIN << 12U) + | (uint16)((uint16)eQEP_RESOLUTION_1x << 11U) + | (uint16)((uint16)0U << 10U) + | (uint16)((uint16)0U << 9U) + | (uint16)((uint16)0U << 8U) + | (uint16)((uint16)0U << 7U) + | (uint16)((uint16)0U << 6U) + | (uint16)((uint16)0U << 5U) + | (uint16)0x0000U); + + /** - Setup eQEP Control Register + * - Select Position counter Reset Mode + * - Enable & Select Strobe event initialization of position counter + * - Enable & Select Index event initialization of position counter + * - Enable / Disable Software Initialization of Position counter. + * - Select Strobe event latch of position counter. + * - Select Index event latch of position counter. + * - Select EQEP capture Latch mode + */ + eqepREG2->QEPCTL = (uint16)((uint16)((uint16)eQEP_MAX_POSITION << 12U) + | (uint16)((uint16)0U << 11U) + | (uint16)((uint16)eQEP_DIRECTON_DEPENDENT << 10U) + | (uint16)((uint16)0U << 9U) + | (uint16)((uint16)eQEP_RISING_EDGE << 8U) + | (uint16)((uint16)0U << 7U) + | (uint16)((uint16)eQEP_RISING_EDGE << 6U) + | (uint16)((uint16)eQEP_LATCH_RISING_EDGE << 4U) + | (uint16)((uint16)eQEP_ON_POSITION_COUNTER_READ << 2U) + | (uint16)0x0000U); + + /** - Setup eQEP Position Control Register + * - Enable / Disable Position compare shadow. + * - Select Position compare shadow load mode. + * - Select Polarity of Sync output. + * - Select Position compare sync output pulse width. + */ + eqepREG2->QPOSCTL = (uint16)((uint16)((uint16)0U << 15U) + | (uint16)((uint16)eQEP_QPOSCNT_EQ_QPSCMP << 14U) + | (uint16)((uint16)eQEP_ACTIVE_HIGH << 13U) + | (uint16)((uint16)0U) + | (uint16)0x0000U); + + /** - Setup eQEP Capture Control Register + * - Select capture timer clock prescaler. + * - Select Unit position event prescaler. + */ + eqepREG2->QCAPCTL = (uint16)((uint16)((uint16)eQEP_PS_8 << 4U) + | (uint16)((uint16)eQEP_PS_512) + | (uint16)0x0000U); + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + + /** - Clear Interrupt Flag register */ + eqepREG2->QCLR = (uint16) 0xFFFFU; + + /** - Setup eQEP Interrupt Enable Register + * Enable / Diable UTO Interrupt + * Enable / Diable IEL Interrupt + * Enable / Diable SEL Interrupt + * Enable / Diable PCM Interrupt + * Enable / Diable PCR Interrupt + * Enable / Diable PCO Interrupt + * Enable / Diable PCU Interrupt + * Enable / Diable WTO Interrupt + * Enable / Diable QDC Interrupt + * Enable / Diable QPE Interrupt + * Enable / Diable PCE Interrupt + */ + eqepREG2->QEINT = (uint16)((uint16)((uint16)0U << 11U) + | (uint16)((uint16)0U << 10U) + | (uint16)((uint16)0U << 9U) + | (uint16)((uint16)0U << 8U) + | (uint16)((uint16)0U << 7U) + | (uint16)((uint16)0U << 6U) + | (uint16)((uint16)0U << 5U) + | (uint16)((uint16)0U << 4U) + | (uint16)((uint16)0U << 3U) + | (uint16)((uint16)0U << 2U) + | (uint16)((uint16)0U << 1U)); + + /** - Clear Capture Timer register */ + eqepREG2->QCTMR = (uint16)0x0000U; + + /** - Clear the Capture Period regiter */ + eqepREG2->QCPRD = (uint16)0x0000U; + + /** - Clear Period Latch register */ + eqepREG2->QCPRDLAT = (uint16)0x0000U; + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + +} + +/** @brief Clears all QEP interrupt flags +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_002 */ +/* DesignId : EQEP_DesignId_002 */ +/* Requirements : HL_QEP_SR2 */ +void eqepClearAllInterruptFlags (eqepBASE_t *eqep) +{ + + eqep->QCLR = 0xfffU; + + return; +} /*end of eQEP_clear_all_interrupt_flags() function */ + +/** @brief Clears a single interrupt flag +* @param[in] eqep Handle to QEP object +* @param[in] QEINT Interrupt flag +*/ +/* SourceId : EQEP_SourceId_003 */ +/* DesignId : EQEP_DesignId_003 */ +/* Requirements : HL_QEP_SR3 */ +void eqepClearInterruptFlag (eqepBASE_t *eqep, QEINT_t QEINT_type) +{ + + eqep->QCLR |= (uint16)QEINT_type; + + return; +} /*end of eQEP_clear_interrupt_flag() function */ + +/** @brief Clears the position counter +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_004 */ +/* DesignId : EQEP_DesignId_004 */ +/* Requirements : HL_QEP_SR4 */ +void eqepClearPosnCounter (eqepBASE_t *eqep) +{ + + eqep->QPOSCNT = 0U; + + return; +} /*end of eQEP_clear_posn_counter() function */ + +/** @brief Disables all interrupts +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_005 */ +/* DesignId : EQEP_DesignId_005 */ +/* Requirements : HL_QEP_SR5 */ +void eqepDisableAllInterrupts (eqepBASE_t *eqep) +{ + + eqep->QEINT = 0U; + + return; +} /*end of eQEP_disable_all_interrupts () function */ + +/** @brief Disable capture +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_006 */ +/* DesignId : EQEP_DesignId_006 */ +/* Requirements : HL_QEP_SR6 */ +void eqepDisableCapture (eqepBASE_t *eqep) +{ + + eqep->QCAPCTL &= (uint16)~eQEP_QCAPCTL_CEN; + + return; +} /*end of eQEP_disable_capture () function */ + +/** @brief Disable gating of index pulse +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_007 */ +/* DesignId : EQEP_DesignId_007 */ +/* Requirements : HL_QEP_SR7 */ +void eqepDisableGateIndex (eqepBASE_t *eqep) +{ + + eqep->QDECCTL &= (uint16)~eQEP_QDECCTL_IGATE; + + return; +} /*end of eQEP_disable_gate_index () function */ + +/** @brief Disable individual interrupt +* @param[in] eqep Handle to QEP object +* @param[in] QEINT Individual interrupts +*/ +/* SourceId : EQEP_SourceId_008 */ +/* DesignId : EQEP_DesignId_008 */ +/* Requirements : HL_QEP_SR8 */ +void eqepDisableInterrupt (eqepBASE_t *eqep, QEINT_t QEINT_type) +{ + + eqep->QEINT &= (uint16)~(uint16)QEINT_type; + + return; +} /*end of eQEP_disable_interrupt */ + +/** @brief Disable position compare +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_009 */ +/* DesignId : EQEP_DesignId_009 */ +/* Requirements : HL_QEP_SR9 */ +void eqepDisablePosnCompare (eqepBASE_t *eqep) +{ + + eqep->QPOSCTL &= (uint16)~eQEP_QPOSCTL_PCE; + + return; +} /*end of eQEP_disable_posn_compare () function */ + +/** @brief Disable position compare shadowing +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_010 */ +/* DesignId : EQEP_DesignId_010 */ +/* Requirements : HL_QEP_SR10 */ +void eqepDisablePosnCompareShadow (eqepBASE_t *eqep) +{ + + eqep->QPOSCTL &= (uint16)~eQEP_QPOSCTL_PCSHDW; + + return; +} /*end of eQEP_disable_posn_compare_shadow () function */ + +/** @brief Disable output sync pulse +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_011 */ +/* DesignId : EQEP_DesignId_011 */ +/* Requirements : HL_QEP_SR11 */ +void eqepDisableSyncOut (eqepBASE_t *eqep) +{ + + eqep->QDECCTL &= (uint16)~eQEP_QDECCTL_SOEN; + + return; +} /*end of eQEP_disable_sync_out () function */ + +/** @brief Disable unit timer +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_012 */ +/* DesignId : EQEP_DesignId_012 */ +/* Requirements : HL_QEP_SR12 */ +void eqepDisableUnitTimer (eqepBASE_t *eqep) +{ + + eqep->QEPCTL &= (uint16)~eQEP_QEPCTL_UTE; + + return; +} /*end of eQEP_disable_unit_timer () function */ + +/** @brief Disable watchdog timer +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_013 */ +/* DesignId : EQEP_DesignId_013 */ +/* Requirements : HL_QEP_SR13 */ +void eqepDisableWatchdog (eqepBASE_t *eqep) +{ + + eqep->QEPCTL &= (uint16)~eQEP_QEPCTL_WDE; + + return; +} /*end of eQEP_disable_watchdog () function */ + +/** @brief Enable capture +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_014 */ +/* DesignId : EQEP_DesignId_014 */ +/* Requirements : HL_QEP_SR14 */ +void eqepEnableCapture (eqepBASE_t *eqep) +{ + + eqep->QCAPCTL |= eQEP_QCAPCTL_CEN; + + return; +} /*end of eQEP_enable_capture () function */ + +/** @brief Enable counter +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_015 */ +/* DesignId : EQEP_DesignId_015 */ +/* Requirements : HL_QEP_SR15 */ +void eqepEnableCounter (eqepBASE_t *eqep) +{ + + eqep->QEPCTL |= eQEP_QEPCTL_QPEN; + + return; +} /*end of eQEP_enable_counter () function */ + +/** @brief Enable gating of index pulse +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_016 */ +/* DesignId : EQEP_DesignId_016 */ +/* Requirements : HL_QEP_SR16 */ +void eqepEnableGateIndex (eqepBASE_t *eqep) +{ + + eqep->QDECCTL |= (uint16)eQEP_Igate_Enable; + + return; +} /*end of eQEP_enable_gate_index () function */ + +/** @brief Enable individual interrupt +* @param[in] eqep Handle to QEP object +* @param[in] QEINT_type Individual interrupts +*/ +/* SourceId : EQEP_SourceId_017 */ +/* DesignId : EQEP_DesignId_017 */ +/* Requirements : HL_QEP_SR17 */ +void eqepEnableInterrupt (eqepBASE_t *eqep, QEINT_t QEINT_type) +{ + + eqep->QEINT |= (uint16)QEINT_type; + + return; +} /*end of eQEP_enable_interrupt () function */ + +/** @brief Enable position compare +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_018 */ +/* DesignId : EQEP_DesignId_018 */ +/* Requirements : HL_QEP_SR18 */ +void eqepEnablePosnCompare (eqepBASE_t *eqep) +{ + + eqep->QPOSCTL |= eQEP_QPOSCTL_PCE; + + return; +} /*end of eQEP_enable_posn_compare () function */ + +/** @brief Enable position compare shadowing +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_019 */ +/* DesignId : EQEP_DesignId_019 */ +/* Requirements : HL_QEP_SR19 */ +void eqepEnablePosnCompareShadow (eqepBASE_t *eqep) +{ + + eqep->QPOSCTL |= eQEP_QPOSCTL_PCSHDW; + + return; +} /*end of eQEP_enable_posn_compare_shadow () function */ + +/** @brief Enable output sync pulse +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_020 */ +/* DesignId : EQEP_DesignId_020 */ +/* Requirements : HL_QEP_SR46 */ +void eqepEnableSyncOut (eqepBASE_t *eqep) +{ + + eqep->QDECCTL |= eQEP_QDECCTL_SOEN; + + return; +} /*end of eQEP_enable_sync_out () function */ + +/** @brief Enable unit timer +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_021 */ +/* DesignId : EQEP_DesignId_021 */ +/* Requirements : HL_QEP_SR20 */ +void eqepEnableUnitTimer (eqepBASE_t *eqep) +{ + + eqep->QEPCTL |= eQEP_QEPCTL_UTE; + + return; +} /*end of eQEP_enable_unit_timer () function */ + +/** @brief Enable watchdog timer +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_022 */ +/* DesignId : EQEP_DesignId_022 */ +/* Requirements : HL_QEP_SR21 */ +void eqepEnableWatchdog (eqepBASE_t *eqep) +{ + + eqep->QEPCTL |= eQEP_QEPCTL_WDE; + + return; +} /*end of eQEP_enable_watchdog () function */ + +/** @brief Manually force QEP interrupt +* @param[in] eqep Handle to QEP object +* @param[in] QEINT Individual interrupt +*/ +/* SourceId : EQEP_SourceId_023 */ +/* DesignId : EQEP_DesignId_023 */ +/* Requirements : HL_QEP_SR22 */ +void eqepForceInterrupt (eqepBASE_t *eqep, QEINT_t QEINT_type) +{ + + eqep->QFRC |= (uint16)QEINT_type; + + return; +} /*end of eQEP_force_interrupt () function */ + + +/** @brief Reads capture period latch +* @param[in] eqep Handle to QEP object +* @return Counter value +*/ +/* SourceId : EQEP_SourceId_024 */ +/* DesignId : EQEP_DesignId_024 */ +/* Requirements : HL_QEP_SR23 */ +uint16 eqepReadCapturePeriodLatch (eqepBASE_t *eqep) +{ + return eqep->QCPRDLAT; +} /*end of eQEP_read_capture_period_latch () function */ + +/** @brief Reads timer latch +* @param[in] eqep Handle to QEP object +* @return Timer value +*/ +/* SourceId : EQEP_SourceId_025 */ +/* DesignId : EQEP_DesignId_025 */ +/* Requirements : HL_QEP_SR24 */ +uint16 eqepReadCaptureTimerLatch (eqepBASE_t *eqep) +{ + return eqep->QCTMRLAT; +} /*end of eQEP_read_capture_timer_latch () function */ + +/** @brief Reads interrupt flag value +* @param[in] eqep Handle to QEP object +* @param[in] QEINT Which interrupt to interrogate +* @return Interrupt flag value +*/ +/* SourceId : EQEP_SourceId_064 */ +/* DesignId : EQEP_DesignId_064 */ +/* Requirements : HL_QEP_SR25 */ +uint16 eqepReadInterruptFlag (eqepBASE_t *eqep, QEINT_t QEINT_type) +{ + return (uint16) (eqep->QFLG & (uint16)QEINT_type); +} /*end of eQEP_read_interrupt_flag () function */ + +/** @brief Reads position compare register +* @param[in] eqep Handle to QEP object +* @return Counter value +*/ +/* SourceId : EQEP_SourceId_026 */ +/* DesignId : EQEP_DesignId_026 */ +/* Requirements : HL_QEP_SR26 */ +uint32 eqepReadPosnCompare (eqepBASE_t *eqep) +{ + + return eqep->QPOSCMP; +} /*end of eQEP_read_posn_compare () function */ + +/** @brief Reads position counter +* @param[in] eqep Handle to QEP object +* @return Counter value +*/ +/* SourceId : EQEP_SourceId_027 */ +/* DesignId : EQEP_DesignId_027 */ +/* Requirements : HL_QEP_SR27 */ +uint32 eqepReadPosnCount (eqepBASE_t *eqep) +{ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + return eqep->QPOSCNT; +} /*end of eQEP_read_posn_count () function */ + +/** @brief Reads position counter value index pulse latch register +* @param[in] eqep Handle to QEP object +* @return Counter value +*/ +/* SourceId : EQEP_SourceId_028 */ +/* DesignId : EQEP_DesignId_028 */ +/* Requirements : HL_QEP_SR28 */ +uint32 eqepReadPosnIndexLatch (eqepBASE_t *eqep) +{ + + return eqep->QPOSILAT; +} /*end of eQEP_read_posn_index_latch () function */ + +/** @brief Reads position counter value +* @param[in] eqep Handle to QEP object +* @return Counter value +*/ +/* SourceId : EQEP_SourceId_029 */ +/* DesignId : EQEP_DesignId_029 */ +/* Requirements : HL_QEP_SR29 */ +uint32 eqepReadPosnLatch (eqepBASE_t *eqep) +{ + + return eqep->QPOSLAT; +} /*end of eQEP_read_posn_latch () function */ + +/** @brief Reads position strobe latch +* @param[in] eqep Handle to QEP object +* @return Counter value +*/ +/* SourceId : EQEP_SourceId_030 */ +/* DesignId : EQEP_DesignId_030 */ +/* Requirements : HL_QEP_SR30 */ +uint32 eqepReadPosnStrobeLatch (eqepBASE_t *eqep) +{ + + return eqep->QPOSSLAT; +} /*end of eQEP_read_posn_strobe_latch () function */ + +/** @brief Reads status register +* @param[in] eqep Handle to QEP object +* @return Status register value +*/ +/* SourceId : EQEP_SourceId_031 */ +/* DesignId : EQEP_DesignId_031 */ +/* Requirements : HL_QEP_SR31 */ +uint16 eqepReadStatus (eqepBASE_t *eqep) +{ + + return eqep->QEPSTS; +} /*end of eqepReadStatus () function */ + +/** @brief Resets counter +* @param[in] eqep Handle to QEP object +*/ +/* SourceId : EQEP_SourceId_032 */ +/* DesignId : EQEP_DesignId_032 */ +/* Requirements : HL_QEP_SR32 */ +void eqepResetCounter (eqepBASE_t *eqep) +{ + + eqep->QEPCTL &= (uint16)~eQEP_QEPCTL_QPEN; + + return; +} /*end of eqepResetCounter () function */ + +/** @brief Sets capture latch mode +* @param[in] eqep Handle to QEP object +* @param[in] QEPCTL_Qclm capture latch mode +*/ +/* SourceId : EQEP_SourceId_033 */ +/* DesignId : EQEP_DesignId_033 */ +/* Requirements : HL_QEP_SR33 */ +void eqepSetCaptureLatchMode (eqepBASE_t *eqep, QEPCTL_Qclm_t QEPCTL_Qclm) +{ + + eqep->QEPCTL &= (uint16)~eQEP_QEPCTL_QCLM; + eqep->QEPCTL |= QEPCTL_Qclm; + + return; +} /*end of eqepSetCaptureLatchMode () function */ + +/** @brief Sets capture period +* @param[in] eqep Handle to QEP object +* @param[in] period Capture period +*/ +/* SourceId : EQEP_SourceId_034 */ +/* DesignId : EQEP_DesignId_034 */ +/* Requirements : HL_QEP_SR34 */ +void eqepSetCapturePeriod (eqepBASE_t *eqep, uint16 period) +{ + + eqep->QCPRD = period; + + return; +} /*end of eqepSetCapturePeriod () function */ + +/** @brief Sets capture pre-scaler +* @param[in] eqep Handle to QEP object +* @param[in] QCAPCTL_Ccps Capture pre-scaler +*/ +/* SourceId : EQEP_SourceId_035 */ +/* DesignId : EQEP_DesignId_035 */ +/* Requirements : HL_QEP_SR35 */ +void eqepSetCapturePrescale (eqepBASE_t *eqep, QCAPCTL_Ccps_t QCAPCTL_Ccps) +{ + + eqep->QCAPCTL &= (uint16)~eQEP_QCAPCTL_CCPS; + eqep->QCAPCTL |= QCAPCTL_Ccps; +} /*end of eqepSetCapturePrescale () function */ + +/** @brief Sets emulation control +* @param[in] eqep Handle to QEP object +* @param[in] QEPCTL_Freesoft Emulation control bits +*/ +/* SourceId : EQEP_SourceId_036 */ +/* DesignId : EQEP_DesignId_036 */ +/* Requirements : HL_QEP_SR36 */ +void eqepSetEmuControl (eqepBASE_t *eqep, QEPCTL_Freesoft_t QEPCTL_Freesoft) +{ + + eqep->QEPCTL &= (uint16)~eQEP_QEPCTL_FREESOFT; + eqep->QEPCTL |= QEPCTL_Freesoft; + + return; +} /*end of eqepSetEmuControl () function */ + +/** @brief Sets external clock rate +* @param[in] eqep Handle to QEP object +* @param[in] eQEP_Xcr External clock rate +*/ +/* SourceId : EQEP_SourceId_037 */ +/* DesignId : EQEP_DesignId_037 */ +/* Requirements : HL_QEP_SR37 */ +void eqepSetExtClockRate (eqepBASE_t *eqep, eQEP_Xcr_t eQEP_Xcr) +{ + + eqep->QDECCTL &= (uint16)~eQEP_QDECCTL_XCR; + eqep->QDECCTL |= (uint16)eQEP_Xcr; + + return; +} /*end of eqepSetExtClockRate () function */ + +/** @brief Sets the event which initializes the counter register +* @param[in] eqep Handle to QEP object +* @param[in] QEPCTL_Iei Index event +*/ +/* SourceId : EQEP_SourceId_038 */ +/* DesignId : EQEP_DesignId_038 */ +/* Requirements : HL_QEP_SR38 */ +void eqepSetIndexEventInit (eqepBASE_t *eqep, QEPCTL_Iei_t QEPCTL_Iei) +{ + + eqep->QEPCTL &= (uint16)~eQEP_QEPCTL_IEI; + eqep->QEPCTL |= (uint16)QEPCTL_Iei; + + return; +} /*end of eqepSetIndexEventInit () function */ + +/** @brief Sets the index event which latches the position counter +* @param[in] eqep Handle to QEP object +* @param[in] QEPCTL_Iel Latch event +*/ +/* SourceId : EQEP_SourceId_039 */ +/* DesignId : EQEP_DesignId_039 */ +/* Requirements : HL_QEP_SR39 */ +void eqepSetIndexEventLatch (eqepBASE_t *eqep, QEPCTL_Iel_t QEPCTL_Iel) +{ + + eqep->QEPCTL &= (uint16)~eQEP_QEPCTL_IEL; + eqep->QEPCTL |= QEPCTL_Iel; + + return; +} /*end of eqepSetIndexEventLatch */ + +/** @brief Sets index polarity +* @param[in] eqep Handle to QEP object +* @param[in] eQEP_Qip Index polarity +*/ +/* SourceId : EQEP_SourceId_040 */ +/* DesignId : EQEP_DesignId_040 */ +/* Requirements : HL_QEP_SR40 */ +void eqepSetIndexPolarity (eqepBASE_t *eqep, eQEP_Qip_t eQEP_Qip) +{ + + eqep->QDECCTL &= (uint16)~eQEP_QDECCTL_QIP; + eqep->QDECCTL |= eQEP_Qip; + + return; +} /*end of eqepSetIndexPolarity () function */ + +/** @brief Sets max position count +* @param[in] eqep Handle to QEP object +* @param[in] max_count Maximum counter value +*/ +/* SourceId : EQEP_SourceId_041 */ +/* DesignId : EQEP_DesignId_041 */ +/* Requirements : HL_QEP_SR41 */ +void eqepSetMaxPosnCount (eqepBASE_t *eqep, uint32 max_count) +{ + + eqep->QPOSMAX = max_count; + + return; +} /*end of eqepSetMaxPosnCount () function */ + +/** @brief Sets output pulse width when a match occur +* @param[in] eqep Handle to QEP object +* @param[in] pulse_width Pulse width value +*/ +/* SourceId : EQEP_SourceId_042 */ +/* DesignId : EQEP_DesignId_042 */ +/* Requirements : HL_QEP_SR42 */ +void eqepSetPosnComparePulseWidth (eqepBASE_t *eqep, uint16 pulse_width) +{ + + uint16 pulse_width_masked; + + pulse_width_masked = pulse_width & 4095U; + eqep->QPOSCTL &= (uint16)~eQEP_QPOSCTL_PCSPW; + eqep->QPOSCTL |= pulse_width_masked; + + return; +} /*end of eqepSetPosnComparePulseWidth () function */ + +/** @brief Sets position compare shadow load mode +* @param[in] eqep Handle to QEP object +* @param[in] QPOSCTL_Pcload PC load event +*/ +/* SourceId : EQEP_SourceId_043 */ +/* DesignId : EQEP_DesignId_043 */ +/* Requirements : HL_QEP_SR43 */ +void eqepSetPosnCompareShadowLoad (eqepBASE_t *eqep, QPOSCTL_Pcload_t QPOSCTL_Pcload) +{ + + eqep->QPOSCTL &= (uint16)~eQEP_QPOSCTL_PCLOAD; + eqep->QPOSCTL |= (uint16)QPOSCTL_Pcload; + + return; +} /*end of eqepSetPosnCompareShadowLoad () function */ + +/** @brief Sets position counter reset mode +* @param[in] eqep Handle to QEP object +* @param[in] QEPCTL_Pcrm Position counter reset mode +*/ +/* SourceId : EQEP_SourceId_044 */ +/* DesignId : EQEP_DesignId_044 */ +/* Requirements : HL_QEP_SR44 */ +void eqepSetPosnCountResetMode (eqepBASE_t *eqep, QEPCTL_Pcrm_t QEPCTL_Pcrm) +{ + + eqep->QEPCTL &= (uint16)~eQEP_QEPCTL_PCRM; + eqep->QEPCTL |= (uint16)QEPCTL_Pcrm; + + return; +} /*end of eqepSetPosnCountResetMode () function */ + +/** @brief Sets initial position counter value +* @param[in] eqep Handle to QEP object +* @param[in] init_count initial counter value +*/ +/* SourceId : EQEP_SourceId_045 */ +/* DesignId : EQEP_DesignId_045 */ +/* Requirements : HL_QEP_SR45 */ +void eqepSetPosnInitCount (eqepBASE_t *eqep, uint32 init_count) +{ + + eqep->QPOSINIT = init_count; + + return; +} /*end of eqepSetPosnInitCount () function */ + +/** @brief Selects whether index or strobe pin is used for sync output +* @param[in] eqep Handle to QEP object +* @param[in] eQEP_SPsel Selected pin +*/ +/* SourceId : EQEP_SourceId_046 */ +/* DesignId : EQEP_DesignId_046 */ +/* Requirements : HL_QEP_SR47 */ +void eqepSetSelectSyncPin (eqepBASE_t *eqep, eQEP_Spsel_t eQEP_SPsel) +{ + + eqep->QDECCTL &= (uint16)~eQEP_QDECCTL_SPSEL; + eqep->QDECCTL |= (uint16)eQEP_SPsel; + + return; +} /*end of eQEP_set_select_sync_pin () function */ + +/** @brief Determines if software initialization of position counter enabled +* @param[in] eqep Handle to QEP object +* @param[in] QEPCTL_Swi Enable/disable position counter initialization +*/ +/* SourceId : EQEP_SourceId_047 */ +/* DesignId : EQEP_DesignId_047 */ +/* Requirements : HL_QEP_SR48 */ +void eqepSetSoftInit (eqepBASE_t *eqep, QEPCTL_Swi_t QEPCTL_Swi) +{ + + eqep->QEPCTL &= (uint16)~eQEP_QEPCTL_SWI; + eqep->QEPCTL |= (uint16)QEPCTL_Swi; + + return; +} /*end of eQEP_set_soft_init () function */ + +/** @brief Determines strobe initialization of position counter +* @param[in] eqep Handle to QEP object +* @param[in] QEPCTL_Sei Strobe initialization of position counter (disabled, rising edge of QEPI) or rising/falling depending on direction +*/ +/* SourceId : EQEP_SourceId_048 */ +/* DesignId : EQEP_DesignId_048 */ +/* Requirements : HL_QEP_SR49 */ +void eqepSetStrobeEventInit (eqepBASE_t *eqep, QEPCTL_Sei_t QEPCTL_Sei) +{ + + eqep->QEPCTL &= (uint16)~eQEP_QEPCTL_SEI; + eqep->QEPCTL |= (uint16)QEPCTL_Sei; + + return; +} /*end of eQEP_set_strobe_event_init () function */ + +/** @brief Sets up strobe latch of position counter +* @param[in] eqep Handle to QEP object +* @param[in] QEPCTL_Sel Sets strobe latch of position counter +*/ +/* SourceId : EQEP_SourceId_049 */ +/* DesignId : EQEP_DesignId_049 */ +/* Requirements : HL_QEP_SR50 */ +void eqepSetStrobeEventLatch (eqepBASE_t *eqep, QEPCTL_Sel_t QEPCTL_Sel) +{ + + eqep->QEPCTL &= (uint16)~eQEP_QEPCTL_SEL; + eqep->QEPCTL |= QEPCTL_Sel; + + return; +} /*end of eQEP_set_strobe_event_latch () function */ + +/** @brief Sets up strobe polarity +* @param[in] eqep Handle to QEP object +* @param[in] eQEP_Qsp Strobe polarity +*/ +/* SourceId : EQEP_SourceId_050 */ +/* DesignId : EQEP_DesignId_050 */ +/* Requirements : HL_QEP_SR51 */ +void eqepSetStrobePolarity (eqepBASE_t *eqep, eQEP_Qsp_t eQEP_Qsp) +{ + + eqep->QDECCTL &= (uint16)~eQEP_QDECCTL_QSP; + eqep->QDECCTL |= eQEP_Qsp; + + return; +} /*end of eqepSetStrobePolarity () function */ + +/** @brief Sets up swapping of A/B channels +* @param[in] eqep Handle to QEP object +* @param[in] eQEP_Swap Swap/don't swap A/B channels +*/ +/* SourceId : EQEP_SourceId_051 */ +/* DesignId : EQEP_DesignId_051 */ +/* Requirements : HL_QEP_SR52 */ +void eqepSetSwapQuadInputs (eqepBASE_t *eqep, eQEP_Swap_t eQEP_Swap) +{ + + eqep->QDECCTL &= (uint16)~eQEP_QDECCTL_SWAP; + eqep->QDECCTL |= (uint16)eQEP_Swap; + + return; +} /*end of eqepSetSwapQuadInputs () function */ + +/** @brief Sets sync output compare polarity +* @param[in] eqep Handle to QEP object +* @param[in] QPOSCTL_Pcpol Polarity of sync output +*/ +/* SourceId : EQEP_SourceId_052 */ +/* DesignId : EQEP_DesignId_052 */ +/* Requirements : HL_QEP_SR53 */ +void eqepSetSynchOutputComparePolarity (eqepBASE_t *eqep, QPOSCTL_Pcpol_t QPOSCTL_Pcpol) +{ + + eqep->QPOSCTL &= (uint16)~eQEP_QPOSCTL_PCPOL; + eqep->QPOSCTL |= (uint16)QPOSCTL_Pcpol; + + return; +} /*end of eqepSetSynchOutputComparePolarity () function */ + +/** @brief Sets unit timer period +* @param[in] eqep Handle to QEP object +* @param[in] unit_period Unit period +*/ +/* SourceId : EQEP_SourceId_053 */ +/* DesignId : EQEP_DesignId_053 */ +/* Requirements : HL_QEP_SR54 */ +void eqepSetUnitPeriod (eqepBASE_t *eqep, uint32 unit_period) +{ + + eqep->QUPRD = unit_period; + + return; +} /*end of eqepSetUnitPeriod () function */ + +/** @brief Sets unit timer prescaling +* @param[in] eqep Handle to QEP object +* @param[in] QCAPCTL_Upps Unit timer prescaling +*/ +/* SourceId : EQEP_SourceId_054 */ +/* DesignId : EQEP_DesignId_054 */ +/* Requirements : HL_QEP_SR55 */ +void eqepSetUnitPosnPrescale (eqepBASE_t *eqep, QCAPCTL_Upps_t QCAPCTL_Upps) +{ + + eqep->QCAPCTL &= (uint16)~eQEP_QCAPCTL_UPPS; + eqep->QCAPCTL |= (uint16)QCAPCTL_Upps; + + return; +} /*end of eqepSetUnitPosnPrescale () function */ + +/** @brief Sets watchdog period +* @param[in] eqep Handle to QEP object +* @param[in] watchdog_period Watchdog period +*/ +/* SourceId : EQEP_SourceId_055 */ +/* DesignId : EQEP_DesignId_055 */ +/* Requirements : HL_QEP_SR56 */ +void eqepSetWatchdogPeriod (eqepBASE_t *eqep, uint16 watchdog_period) +{ + + eqep->QWDPRD = watchdog_period; + + return; +} /*end of eqepSetWatchdogPeriod () function */ + +/** @brief Sets strobe event latch +* @param[in] eqep Handle to QEP object +* @param[in] QEPCTL_Sel Sets strobe latch of position counter +*/ +/* SourceId : EQEP_SourceId_056 */ +/* DesignId : EQEP_DesignId_056 */ +/* Requirements : HL_QEP_SR57 */ +void eqepSetupStrobeEventLatch (eqepBASE_t *eqep, QEPCTL_Sel_t QEPCTL_Sel) +{ + + eqep->QEPCTL &= (uint16)~eQEP_QEPCTL_SEL; + eqep->QEPCTL |= (uint16)QEPCTL_Sel; + + return; +} /*end of eqepSetupStrobeEventLatch () function */ + +/** @brief Sets A polarity +* @param[in] eqep Handle to QEP object +* @param[in] eQEP_Qap Channel A polarity +*/ +/* SourceId : EQEP_SourceId_057 */ +/* DesignId : EQEP_DesignId_057 */ +/* Requirements : HL_QEP_SR58 */ +void eqepSetAPolarity (eqepBASE_t *eqep, eQEP_Qap_t eQEP_Qap) +{ + + eqep->QDECCTL &= (uint16)~eQEP_QDECCTL_QAP; + eqep->QDECCTL |= (uint16)eQEP_Qap; + + return; +} /*end of eqepSetAPolarity () function */ + +/** @brief Sets B polarity +* @param[in] eqep Handle to QEP object +* @param[in] eQEP_Qbp Channel B polarity +*/ +/* SourceId : EQEP_SourceId_058 */ +/* DesignId : EQEP_DesignId_058 */ +/* Requirements : HL_QEP_SR59 */ +void eqepSetBPolarity (eqepBASE_t *eqep, eQEP_Qbp_t eQEP_Qbp) +{ + + eqep->QDECCTL &= (uint16)~eQEP_QDECCTL_QBP; + eqep->QDECCTL |= (uint16)eQEP_Qbp; + + return; +} /*end of eQEP_set_B_polarity () function */ + +/** @brief Set QEP counting mode +* @param[in] eqep Handle to QEP object +* @param[in] eQEP_Qsrc Sets QEP counting mode +*/ +/* SourceId : EQEP_SourceId_059 */ +/* DesignId : EQEP_DesignId_059 */ +/* Requirements : HL_QEP_SR60*/ +void eqepSetQEPSource (eqepBASE_t *eqep, eQEP_Qsrc_t eQEP_Qsrc) +{ + + /* set the value */ + eqep->QDECCTL &= (uint16)~eQEP_QDECCTL_QSRC; + eqep->QDECCTL |= (uint16)eQEP_Qsrc; + + return; +} /*end of eQEP_set_eQEP_source () function */ + +/** @brief Writes a value to the position compare register +* @param[in] eqep Handle to QEP object +* @param[in] posn Position compare register value +*/ +/* SourceId : EQEP_SourceId_060 */ +/* DesignId : EQEP_DesignId_060 */ +/* Requirements : HL_QEP_SR61 */ +void eqepWritePosnCompare (eqepBASE_t *eqep, uint32 posn) +{ + + eqep->QPOSCMP = posn; + + return; +} /*end of eQEP_write_posn_compare () function */ + +/** @fn void eqep1GetConfigValue(eqep_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : EQEP_SourceId_061 */ +/* DesignId : EQEP_DesignId_061 */ +/* Requirements : HL_QEP_SR63 */ +void eqep1GetConfigValue(eqep_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_QPOSINIT = EQEP1_QPOSINIT_CONFIGVALUE; + config_reg->CONFIG_QPOSMAX = EQEP1_QPOSMAX_CONFIGVALUE; + config_reg->CONFIG_QPOSCMP = EQEP1_QPOSCMP_CONFIGVALUE; + config_reg->CONFIG_QUPRD = EQEP1_QUPRD_CONFIGVALUE; + config_reg->CONFIG_QWDPRD = EQEP1_QWDPRD_CONFIGVALUE; + config_reg->CONFIG_QDECCTL = EQEP1_QDECCTL_CONFIGVALUE; + config_reg->CONFIG_QEPCTL = EQEP1_QEPCTL_CONFIGVALUE; + config_reg->CONFIG_QCAPCTL = EQEP1_QCAPCTL_CONFIGVALUE; + config_reg->CONFIG_QPOSCTL = EQEP1_QPOSCTL_CONFIGVALUE; + config_reg->CONFIG_QEINT = EQEP1_QEINT_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_QPOSINIT = eqepREG1->QPOSINIT; + config_reg->CONFIG_QPOSMAX = eqepREG1->QPOSMAX; + config_reg->CONFIG_QPOSCMP = eqepREG1->QPOSCMP; + config_reg->CONFIG_QUPRD = eqepREG1->QUPRD; + config_reg->CONFIG_QWDPRD = eqepREG1->QWDPRD; + config_reg->CONFIG_QDECCTL = eqepREG1->QDECCTL; + config_reg->CONFIG_QEPCTL = eqepREG1->QEPCTL; + config_reg->CONFIG_QCAPCTL = eqepREG1->QCAPCTL; + config_reg->CONFIG_QPOSCTL = eqepREG1->QPOSCTL; + config_reg->CONFIG_QEINT = eqepREG1->QEINT; + } +} + +/** @fn void eqep2GetConfigValue(eqep_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : EQEP_SourceId_062 */ +/* DesignId : EQEP_DesignId_062 */ +/* Requirements : HL_QEP_SR63 */ +void eqep2GetConfigValue(eqep_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_QPOSINIT = EQEP2_QPOSINIT_CONFIGVALUE; + config_reg->CONFIG_QPOSMAX = EQEP2_QPOSMAX_CONFIGVALUE; + config_reg->CONFIG_QPOSCMP = EQEP2_QPOSCMP_CONFIGVALUE; + config_reg->CONFIG_QUPRD = EQEP2_QUPRD_CONFIGVALUE; + config_reg->CONFIG_QWDPRD = EQEP2_QWDPRD_CONFIGVALUE; + config_reg->CONFIG_QDECCTL = EQEP2_QDECCTL_CONFIGVALUE; + config_reg->CONFIG_QEPCTL = EQEP2_QEPCTL_CONFIGVALUE; + config_reg->CONFIG_QCAPCTL = EQEP2_QCAPCTL_CONFIGVALUE; + config_reg->CONFIG_QPOSCTL = EQEP2_QPOSCTL_CONFIGVALUE; + config_reg->CONFIG_QEINT = EQEP2_QEINT_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_QPOSINIT = eqepREG2->QPOSINIT; + config_reg->CONFIG_QPOSMAX = eqepREG2->QPOSMAX; + config_reg->CONFIG_QPOSCMP = eqepREG2->QPOSCMP; + config_reg->CONFIG_QUPRD = eqepREG2->QUPRD; + config_reg->CONFIG_QWDPRD = eqepREG2->QWDPRD; + config_reg->CONFIG_QDECCTL = eqepREG2->QDECCTL; + config_reg->CONFIG_QEPCTL = eqepREG2->QEPCTL; + config_reg->CONFIG_QCAPCTL = eqepREG2->QCAPCTL; + config_reg->CONFIG_QPOSCTL = eqepREG2->QPOSCTL; + config_reg->CONFIG_QEINT = eqepREG2->QEINT; + } +} + + + +/*end of file*/ Index: firmware/source/errata_SSWF021_45.c =================================================================== diff -u --- firmware/source/errata_SSWF021_45.c (revision 0) +++ firmware/source/errata_SSWF021_45.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,358 @@ +/** @file errata_SSWF021_45.c +* @brief errata for PLLs +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ +#include "errata_SSWF021_45_defs.h" +#include "errata_SSWF021_45.h" + +static uint32 check_frequency(uint32 cnt1_clksrc); +static uint32 disable_plls(uint32 plls); + +/** @fn uint32 _errata_SSWF021_45_both_plls(uint32 count) +* @brief This handles the errata for PLL1 and PLL2. This function is called in device startup +* +* @param[in] count : Number of retries until both PLLs are locked successfully +* Minimum value recommended is 5 +* +* @return 0 = Success (the PLL or both PLLs have successfully locked and then been disabled) +* 1 = PLL1 failed to successfully lock in "count" tries +* 2 = PLL2 failed to successfully lock in "count" tries +* 3 = Neither PLL1 nor PLL2 successfully locked in "count" tries +* 4 = The workaround function was not able to disable at least one of the PLLs. The most likely reason + is that a PLL is already being used as a clock source. This can be caused by the workaround function + being called from the wrong place in the code. +*/ +uint32 _errata_SSWF021_45_both_plls(uint32 count) +{ + uint32 failCode,retries,clkCntlSav; + /* save CLKCNTL */ + clkCntlSav = systemREG1->CLKCNTL; + /* First set VCLK2 = HCLK */ + systemREG1->CLKCNTL = clkCntlSav & 0x000F0100U; + /* Now set VCLK = HCLK and enable peripherals */ + systemREG1->CLKCNTL = SYS_CLKCNTRL_PENA; + failCode = 0U; + for(retries = 0U;(retries < count);retries++) + { + failCode = 0U; + /* Disable PLL1 and PLL2 */ + failCode = disable_plls(SYS_CLKSRC_PLL1 | SYS_CLKSRC_PLL2); + if(failCode != 0U) + { + break; + } + + /* Clear Global Status Register */ + systemREG1->GBLSTAT = 0x00000301U; + /* Clear the ESM PLL slip flags */ + esmREG->SR1[0U] = ESM_SR1_PLL1SLIP; + esmREG->SR4[0U] = ESM_SR4_PLL2SLIP; + /* set both PLLs to OSCIN/1*27/(2*1) */ + systemREG1->PLLCTL1 = 0x20001A00U; + systemREG1->PLLCTL2 = 0x3FC0723DU; + systemREG2->PLLCTL3 = 0x20001A00U; + systemREG1->CSDISCLR = SYS_CLKSRC_PLL1 | SYS_CLKSRC_PLL2; + /* Check for (PLL1 valid or PLL1 slip) and (PLL2 valid or PLL2 slip) */ + while ((((systemREG1->CSVSTAT & SYS_CLKSRC_PLL1) == 0U) && ((esmREG->SR1[0U] & ESM_SR1_PLL1SLIP) == 0U)) || + (((systemREG1->CSVSTAT & SYS_CLKSRC_PLL2) == 0U) && ((esmREG->SR4[0U] & ESM_SR4_PLL2SLIP) == 0U))) + { + /* Wait */ + } + /* If PLL1 valid, check the frequency */ + if(((esmREG->SR1[0U] & ESM_SR1_PLL1SLIP) != 0U) || ((systemREG1->GBLSTAT & 0x00000300U) != 0U)) + { + failCode |= 1U; + } + else + { + failCode |= check_frequency(dcc1CNT1_CLKSRC_PLL1); + } + /* If PLL2 valid, check the frequency */ + if(((esmREG->SR4[0U] & ESM_SR4_PLL2SLIP) != 0U) || ((systemREG1->GBLSTAT & 0x00000300U) != 0U)) + { + failCode |= 2U; + } + else + { + failCode |= (check_frequency(dcc1CNT1_CLKSRC_PLL2) << 1U); + } + if (failCode == 0U) + { + break; + } + } + /* To avoid MISRA violation 382S + (void)missing for discarded return value */ + failCode = disable_plls(SYS_CLKSRC_PLL1 | SYS_CLKSRC_PLL2); + /* restore CLKCNTL, VCLKR and PENA first */ + systemREG1->CLKCNTL = (clkCntlSav & 0x000F0100U); + /* restore CLKCNTL, VCLK2R */ + systemREG1->CLKCNTL = clkCntlSav; + return failCode; +} +/** @fn uint32 _errata_SSWF021_45_pll1(uint32 count) +* @brief This handles the errata for PLL1. This function is called in device startup +* +* @param[in] count : Number of retries until both PLL1 is locked successfully +* Minimum value recommended is 5 +* +* @return 0 = Success (the PLL or both PLLs have successfully locked and then been disabled) +* 1 = PLL1 failed to successfully lock in "count" tries +* 2 = PLL2 failed to successfully lock in "count" tries +* 3 = Neither PLL1 nor PLL2 successfully locked in "count" tries +* 4 = The workaround function was not able to disable at least one of the PLLs. The most likely reason + is that a PLL is already being used as a clock source. This can be caused by the workaround function + being called from the wrong place in the code. +*/ +uint32 _errata_SSWF021_45_pll1(uint32 count) +{ + uint32 failCode,retries,clkCntlSav; + /* save CLKCNTL */ + clkCntlSav = systemREG1->CLKCNTL; + /* First set VCLK2 = HCLK */ + systemREG1->CLKCNTL = clkCntlSav & 0x000F0100U; + /* Now set VCLK = HCLK and enable peripherals */ + systemREG1->CLKCNTL = SYS_CLKCNTRL_PENA; + failCode = 0U; + for(retries = 0U;(retries < count);retries++) + { + failCode = 0U; + /* Disable PLL1 */ + failCode = disable_plls(SYS_CLKSRC_PLL1); + if(failCode != 0U) + { + break; + } + + /* Clear Global Status Register */ + systemREG1->GBLSTAT = 0x00000301U; + /* Clear the ESM PLL slip flags */ + esmREG->SR1[0U] = ESM_SR1_PLL1SLIP; + /* set PLL1 to OSCIN/1*27/(2*1) */ + systemREG1->PLLCTL1 = 0x20001A00U; + systemREG1->PLLCTL2 = 0x3FC0723DU; + systemREG1->CSDISCLR = SYS_CLKSRC_PLL1; + /* Check for PLL1 valid or PLL1 slip*/ + while(((systemREG1->CSVSTAT & SYS_CLKSRC_PLL1) == 0U) && ((esmREG->SR1[0U] & ESM_SR1_PLL1SLIP) == 0U)) + { + /* Wait */ + } + /* If PLL1 valid, check the frequency */ + if(((esmREG->SR1[0U] & ESM_SR1_PLL1SLIP) != 0U) || ((systemREG1->GBLSTAT & 0x00000300U) != 0U)) + { + failCode |= 1U; + } + else + { + failCode |= check_frequency(dcc1CNT1_CLKSRC_PLL1); + } + if (failCode == 0U) + { + break; + } + } + /* To avoid MISRA violation 382S + (void)missing for discarded return value */ + failCode = disable_plls(SYS_CLKSRC_PLL1); + + /* restore CLKCNTL, VCLKR and PENA first */ + systemREG1->CLKCNTL = (clkCntlSav & 0x000F0100U); + /* restore CLKCNTL, VCLK2R */ + systemREG1->CLKCNTL = clkCntlSav; + return failCode; +} +/** @fn uint32 _errata_SSWF021_45_pll2(uint32 count) +* @brief This handles the errata for PLL2. This function is called in device startup +* +* @param[in] count : Number of retries until PLL2 is locked successfully +* Minimum value recommended is 5 +* +* @return 0 = Success (the PLL or both PLLs have successfully locked and then been disabled) +* 1 = PLL1 failed to successfully lock in "count" tries +* 2 = PLL2 failed to successfully lock in "count" tries +* 3 = Neither PLL1 nor PLL2 successfully locked in "count" tries +* 4 = The workaround function was not able to disable at least one of the PLLs. The most likely reason + is that a PLL is already being used as a clock source. This can be caused by the workaround function + being called from the wrong place in the code. +*/ +uint32 _errata_SSWF021_45_pll2(uint32 count) +{ + uint32 failCode,retries,clkCntlSav; + /* save CLKCNTL */ + clkCntlSav = systemREG1->CLKCNTL; + /* First set VCLK2 = HCLK */ + systemREG1->CLKCNTL = clkCntlSav & 0x000F0100U; + /* Now set VCLK = HCLK and enable peripherals */ + systemREG1->CLKCNTL = SYS_CLKCNTRL_PENA; + failCode = 0U; + for(retries = 0U;(retries < count);retries++) + { + failCode = 0U; + /* Disable PLL2 */ + failCode = disable_plls(SYS_CLKSRC_PLL2); + if(failCode != 0U) + { + break; + } + + /* Clear Global Status Register */ + systemREG1->GBLSTAT = 0x00000301U; + /* Clear the ESM PLL slip flags */ + esmREG->SR4[0U] = ESM_SR4_PLL2SLIP; + /* set PLL2 to OSCIN/1*27/(2*1) */ + systemREG2->PLLCTL3 = 0x20001A00U; + systemREG1->CSDISCLR = SYS_CLKSRC_PLL2; + /* Check for PLL2 valid or PLL2 slip */ + while (((systemREG1->CSVSTAT & SYS_CLKSRC_PLL2) == 0U) && ((esmREG->SR4[0U] & ESM_SR4_PLL2SLIP) == 0U)) + { + /* Wait */ + } + /* If PLL2 valid, check the frequency */ + if(((esmREG->SR4[0U] & ESM_SR4_PLL2SLIP) != 0U) || ((systemREG1->GBLSTAT & 0x00000300U) != 0U)) + { + failCode |= 2U; + } + else + { + failCode |= (check_frequency(dcc1CNT1_CLKSRC_PLL2) << 1U); + } + if (failCode == 0U) + { + break; + } + } + /* To avoid MISRA violation 382S + (void)missing for discarded return value */ + failCode = disable_plls(SYS_CLKSRC_PLL2); + /* restore CLKCNTL, VCLKR and PENA first */ + systemREG1->CLKCNTL = (clkCntlSav & 0x000F0100U); + /* restore CLKCNTL, VCLK2R */ + systemREG1->CLKCNTL = clkCntlSav; + return failCode; +} +/** @fn uint32 check_frequency(uint32 cnt1_clksrc) +* @brief This function checks for the PLL frequency. +* +* @param[in] cnt1_clksrc : Clock source for Counter1 +* 0U - PLL1 (clock source 0) +* 1U - PLL2 (clock source 1) +* +* @return DCC Error status +* 0 - DCC error has not occurred +* 1 - DCC error has occurred +*/ +static uint32 check_frequency(uint32 cnt1_clksrc) +{ + /* Setup DCC1 */ + /** DCC1 Global Control register configuration */ + dccREG1->GCTRL = (uint32)0x5U | /** Disable DCC1 */ + (uint32)((uint32)0x5U << 4U) | /** No Error Interrupt */ + (uint32)((uint32)0xAU << 8U) | /** Single Shot mode */ + (uint32)((uint32)0x5U << 12U); /** No Done Interrupt */ + /* Clear ERR and DONE bits */ + dccREG1->STAT = 3U; + /** DCC1 Clock0 Counter Seed value configuration */ + dccREG1->CNT0SEED = 68U; + /** DCC1 Clock0 Valid Counter Seed value configuration */ + dccREG1->VALID0SEED = 4U; + /** DCC1 Clock1 Counter Seed value configuration */ + dccREG1->CNT1SEED = 972U; + /** DCC1 Clock1 Source 1 Select */ + dccREG1->CNT1CLKSRC = (uint32)((uint32)10U << 12U) | /** DCC Enable / Disable Key */ + (uint32) cnt1_clksrc; /** DCC1 Clock Source 1 */ + + dccREG1->CNT0CLKSRC = (uint32)DCC1_CNT0_OSCIN; /** DCC1 Clock Source 0 */ + + /** DCC1 Global Control register configuration */ + dccREG1->GCTRL = (uint32)0xAU | /** Enable DCC1 */ + (uint32)((uint32)0x5U << 4U) | /** No Error Interrupt */ + (uint32)((uint32)0xAU << 8U) | /** Single Shot mode */ + (uint32)((uint32)0x5U << 12U); /** No Done Interrupt */ + while(dccREG1->STAT == 0U) + { + /* Wait */ + } + return (dccREG1->STAT & 0x01U); +} +/** @fn uint32 disable_plls(uint32 plls) +* @brief This function disables plls and clears the respective ESM flags. +* +* @param[in] plls : Clock source for Counter1 +* 2U - PLL1 +* 40U - PLL2 +* +* @return failCode +* 0 = Success (the PLL or both PLLs have successfully locked and then been disabled) +* 4 = The workaround function was not able to disable at least one of the PLLs. The most likely reason +* is that a PLL is already being used as a clock source. This can be caused by the workaround function +* being called from the wrong place in the code. +*/ +static uint32 disable_plls(uint32 plls) +{ + uint32 timeout,failCode; + + systemREG1->CSDISSET = plls; + failCode = 0U; + timeout = 0x10U; + timeout --; + while(((systemREG1->CSVSTAT & (plls)) != 0U) && (timeout != 0U)) + { + /* Clear ESM and GLBSTAT PLL slip flags */ + systemREG1->GBLSTAT = 0x00000300U; + + if ((plls & SYS_CLKSRC_PLL1) == SYS_CLKSRC_PLL1) + { + esmREG->SR1[0U] = ESM_SR1_PLL1SLIP; + } + if ((plls & SYS_CLKSRC_PLL2) == SYS_CLKSRC_PLL2) + { + esmREG->SR4[0U] = ESM_SR4_PLL2SLIP; + } + timeout --; + /* Wait */ + } + if(timeout == 0U) + { + failCode = 4U; + } + else + { + failCode = 0U; + } + return failCode; +} Index: firmware/source/esm.c =================================================================== diff -u --- firmware/source/esm.c (revision 0) +++ firmware/source/esm.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,802 @@ +/** @file esm.c +* @brief Esm Driver Source File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - API Functions +* . +* which are relevant for the Esm driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Include Files */ + +#include "esm.h" +#include "sys_vim.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +/** @fn void esmInit(void) +* @brief Initializes Esm Driver +* +* This function initializes the Esm driver. +* +*/ + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ +/* SourceId : ESM_SourceId_001 */ +/* DesignId : ESM_DesignId_001 */ +/* Requirements : HL_SR4 */ +void esmInit(void) +{ +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + + /** - Disable error pin channels */ + esmREG->DEPAPR1 = 0xFFFFFFFFU; + esmREG->IEPCR4 = 0xFFFFFFFFU; + + /** - Disable interrupts */ + esmREG->IECR1 = 0xFFFFFFFFU; + esmREG->IECR4 = 0xFFFFFFFFU; + + /** - Clear error status flags */ + esmREG->SR1[0U] = 0xFFFFFFFFU; + esmREG->SR1[1U] = 0xFFFFFFFFU; + esmREG->SSR2 = 0xFFFFFFFFU; + esmREG->SR1[2U] = 0xFFFFFFFFU; + esmREG->SR4[0U] = 0xFFFFFFFFU; + + /** - Setup LPC preload */ + esmREG->LTCPR = 16384U - 1U; + + /** - Reset error pin */ + if (esmREG->EPSR == 0U) + { + esmREG->EKR = 0x00000005U; + } + else + { + esmREG->EKR = 0x00000000U; + } + + /** - Clear interrupt level */ + esmREG->ILCR1 = 0xFFFFFFFFU; + esmREG->ILCR4 = 0xFFFFFFFFU; + + /** - Set interrupt level */ + esmREG->ILSR1 = (uint32)((uint32)0U << 31U) + | (uint32)((uint32)0U << 30U) + | (uint32)((uint32)0U << 29U) + | (uint32)((uint32)0U << 28U) + | (uint32)((uint32)0U << 27U) + | (uint32)((uint32)0U << 26U) + | (uint32)((uint32)0U << 25U) + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)0U << 23U) + | (uint32)((uint32)0U << 22U) + | (uint32)((uint32)0U << 21U) + | (uint32)((uint32)0U << 20U) + | (uint32)((uint32)0U << 19U) + | (uint32)((uint32)0U << 18U) + | (uint32)((uint32)0U << 17U) + | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)0U << 15U) + | (uint32)((uint32)0U << 14U) + | (uint32)((uint32)0U << 13U) + | (uint32)((uint32)0U << 12U) + | (uint32)((uint32)0U << 11U) + | (uint32)((uint32)0U << 10U) + | (uint32)((uint32)0U << 9U) + | (uint32)((uint32)0U << 8U) + | (uint32)((uint32)0U << 7U) + | (uint32)((uint32)0U << 6U) + | (uint32)((uint32)0U << 5U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)0U << 3U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)0U << 1U) + | (uint32)((uint32)0U << 0U); + + esmREG->ILSR4 = (uint32)((uint32)0U << 31U) + | (uint32)((uint32)0U << 30U) + | (uint32)((uint32)0U << 29U) + | (uint32)((uint32)0U << 28U) + | (uint32)((uint32)0U << 27U) + | (uint32)((uint32)0U << 26U) + | (uint32)((uint32)0U << 25U) + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)0U << 23U) + | (uint32)((uint32)0U << 22U) + | (uint32)((uint32)0U << 21U) + | (uint32)((uint32)0U << 20U) + | (uint32)((uint32)0U << 19U) + | (uint32)((uint32)0U << 18U) + | (uint32)((uint32)0U << 17U) + | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)0U << 15U) + | (uint32)((uint32)0U << 14U) + | (uint32)((uint32)0U << 13U) + | (uint32)((uint32)0U << 12U) + | (uint32)((uint32)0U << 11U) + | (uint32)((uint32)0U << 10U) + | (uint32)((uint32)0U << 9U) + | (uint32)((uint32)0U << 8U) + | (uint32)((uint32)0U << 7U) + | (uint32)((uint32)0U << 6U) + | (uint32)((uint32)0U << 5U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)0U << 3U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)0U << 1U) + | (uint32)((uint32)0U << 0U); + + /** - Enable error pin channels */ + esmREG->EEPAPR1 = (uint32)((uint32)0U << 31U) + | (uint32)((uint32)0U << 30U) + | (uint32)((uint32)0U << 29U) + | (uint32)((uint32)0U << 28U) + | (uint32)((uint32)0U << 27U) + | (uint32)((uint32)0U << 26U) + | (uint32)((uint32)0U << 25U) + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)0U << 23U) + | (uint32)((uint32)0U << 22U) + | (uint32)((uint32)0U << 21U) + | (uint32)((uint32)0U << 20U) + | (uint32)((uint32)0U << 19U) + | (uint32)((uint32)0U << 18U) + | (uint32)((uint32)0U << 17U) + | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)0U << 15U) + | (uint32)((uint32)0U << 14U) + | (uint32)((uint32)0U << 13U) + | (uint32)((uint32)0U << 12U) + | (uint32)((uint32)0U << 11U) + | (uint32)((uint32)0U << 10U) + | (uint32)((uint32)0U << 9U) + | (uint32)((uint32)0U << 8U) + | (uint32)((uint32)0U << 7U) + | (uint32)((uint32)0U << 6U) + | (uint32)((uint32)0U << 5U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)0U << 3U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)0U << 1U) + | (uint32)((uint32)0U << 0U); + + esmREG->IEPSR4 = (uint32)((uint32)0U << 31U) + | (uint32)((uint32)0U << 30U) + | (uint32)((uint32)0U << 29U) + | (uint32)((uint32)0U << 28U) + | (uint32)((uint32)0U << 27U) + | (uint32)((uint32)0U << 26U) + | (uint32)((uint32)0U << 25U) + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)0U << 23U) + | (uint32)((uint32)0U << 22U) + | (uint32)((uint32)0U << 21U) + | (uint32)((uint32)0U << 20U) + | (uint32)((uint32)0U << 19U) + | (uint32)((uint32)0U << 18U) + | (uint32)((uint32)0U << 17U) + | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)0U << 15U) + | (uint32)((uint32)0U << 14U) + | (uint32)((uint32)0U << 13U) + | (uint32)((uint32)0U << 12U) + | (uint32)((uint32)0U << 11U) + | (uint32)((uint32)0U << 10U) + | (uint32)((uint32)0U << 9U) + | (uint32)((uint32)0U << 8U) + | (uint32)((uint32)0U << 7U) + | (uint32)((uint32)0U << 6U) + | (uint32)((uint32)0U << 5U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)0U << 3U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)0U << 1U) + | (uint32)((uint32)0U << 0U); + + /** - Enable interrupts */ + esmREG->IESR1 = (uint32)((uint32)0U << 31U) + | (uint32)((uint32)0U << 30U) + | (uint32)((uint32)0U << 29U) + | (uint32)((uint32)0U << 28U) + | (uint32)((uint32)0U << 27U) + | (uint32)((uint32)0U << 26U) + | (uint32)((uint32)0U << 25U) + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)0U << 23U) + | (uint32)((uint32)0U << 22U) + | (uint32)((uint32)0U << 21U) + | (uint32)((uint32)0U << 20U) + | (uint32)((uint32)0U << 19U) + | (uint32)((uint32)0U << 18U) + | (uint32)((uint32)0U << 17U) + | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)0U << 15U) + | (uint32)((uint32)0U << 14U) + | (uint32)((uint32)0U << 13U) + | (uint32)((uint32)0U << 12U) + | (uint32)((uint32)0U << 11U) + | (uint32)((uint32)0U << 10U) + | (uint32)((uint32)0U << 9U) + | (uint32)((uint32)0U << 8U) + | (uint32)((uint32)0U << 7U) + | (uint32)((uint32)0U << 6U) + | (uint32)((uint32)0U << 5U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)0U << 3U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)0U << 1U) + | (uint32)((uint32)0U << 0U); + + esmREG->IESR4 = (uint32)((uint32)0U << 31U) + | (uint32)((uint32)0U << 30U) + | (uint32)((uint32)0U << 29U) + | (uint32)((uint32)0U << 28U) + | (uint32)((uint32)0U << 27U) + | (uint32)((uint32)0U << 26U) + | (uint32)((uint32)0U << 25U) + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)0U << 23U) + | (uint32)((uint32)0U << 22U) + | (uint32)((uint32)0U << 21U) + | (uint32)((uint32)0U << 20U) + | (uint32)((uint32)0U << 19U) + | (uint32)((uint32)0U << 18U) + | (uint32)((uint32)0U << 17U) + | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)0U << 15U) + | (uint32)((uint32)0U << 14U) + | (uint32)((uint32)0U << 13U) + | (uint32)((uint32)0U << 12U) + | (uint32)((uint32)0U << 11U) + | (uint32)((uint32)0U << 10U) + | (uint32)((uint32)0U << 9U) + | (uint32)((uint32)0U << 8U) + | (uint32)((uint32)0U << 7U) + | (uint32)((uint32)0U << 6U) + | (uint32)((uint32)0U << 5U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)0U << 3U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)0U << 1U) + | (uint32)((uint32)0U << 0U); + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ +} + + +/** @fn uint32 esmError(void) +* @brief Return Error status +* +* @return The error status +* +* Returns the error status. +*/ +/* SourceId : ESM_SourceId_002 */ +/* DesignId : ESM_DesignId_002 */ +/* Requirements : HL_SR5 */ +uint32 esmError(void) +{ + uint32 status; + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + + status = esmREG->EPSR; + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + + return status; +} + + +/** @fn void esmEnableError(uint64 channels) +* @brief Enable Group 1 Channels Error Signals propagation +* +* @param[in] channels - Channel mask +* +* Enable Group 1 Channels Error Signals propagation to the error pin. +*/ +/* SourceId : ESM_SourceId_003 */ +/* DesignId : ESM_DesignId_003 */ +/* Requirements : HL_SR6 */ +void esmEnableError(uint64 channels) +{ +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + + esmREG->IEPSR4 = (uint32)((channels >> 32U) & 0xFFFFFFFFU); + esmREG->EEPAPR1 = (uint32)(channels & 0xFFFFFFFFU); + +/* USER CODE BEGIN (8) */ +/* USER CODE END */ +} + + +/** @fn void esmDisableError(uint64 channels) +* @brief Disable Group 1 Channels Error Signals propagation +* +* @param[in] channels - Channel mask +* +* Disable Group 1 Channels Error Signals propagation to the error pin. +*/ +/* SourceId : ESM_SourceId_004 */ +/* DesignId : ESM_DesignId_004 */ +/* Requirements : HL_SR7 */ +void esmDisableError(uint64 channels) +{ +/* USER CODE BEGIN (9) */ +/* USER CODE END */ + + esmREG->IEPCR4 = (uint32)((channels >> 32U) & 0xFFFFFFFFU); + esmREG->DEPAPR1 = (uint32)(channels & 0xFFFFFFFFU); + +/* USER CODE BEGIN (10) */ +/* USER CODE END */ +} + + +/** @fn void esmTriggerErrorPinReset(void) +* @brief Trigger error pin reset and switch back to normal operation +* +* Trigger error pin reset and switch back to normal operation. +*/ +/* SourceId : ESM_SourceId_005 */ +/* DesignId : ESM_DesignId_005 */ +/* Requirements : HL_SR8 */ +void esmTriggerErrorPinReset(void) +{ +/* USER CODE BEGIN (11) */ +/* USER CODE END */ + + esmREG->EKR = 5U; + +/* USER CODE BEGIN (12) */ +/* USER CODE END */ +} + + +/** @fn void esmActivateNormalOperation(void) +* @brief Activate normal operation +* +* Activates normal operation mode. +*/ +/* SourceId : ESM_SourceId_006 */ +/* DesignId : ESM_DesignId_006 */ +/* Requirements : HL_SR9 */ +void esmActivateNormalOperation(void) +{ +/* USER CODE BEGIN (13) */ +/* USER CODE END */ + + esmREG->EKR = 0U; + +/* USER CODE BEGIN (14) */ +/* USER CODE END */ +} + + +/** @fn void esmEnableInterrupt(uint64 channels) +* @brief Enable Group 1 Channels Interrupts +* +* @param[in] channels - Channel mask +* +* Enable Group 1 Channels Interrupts. +*/ +/* SourceId : ESM_SourceId_007 */ +/* DesignId : ESM_DesignId_007 */ +/* Requirements : HL_SR10 */ +void esmEnableInterrupt(uint64 channels) +{ +/* USER CODE BEGIN (15) */ +/* USER CODE END */ + + esmREG->IESR4 = (uint32)((channels >> 32U) & 0xFFFFFFFFU); + esmREG->IESR1 = (uint32)(channels & 0xFFFFFFFFU); + +/* USER CODE BEGIN (16) */ +/* USER CODE END */ +} + + +/** @fn void esmDisableInterrupt(uint64 channels) +* @brief Disable Group 1 Channels Interrupts +* +* @param[in] channels - Channel mask +* +* Disable Group 1 Channels Interrupts. +*/ +/* SourceId : ESM_SourceId_008 */ +/* DesignId : ESM_DesignId_008 */ +/* Requirements : HL_SR11 */ +void esmDisableInterrupt(uint64 channels) +{ +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + + esmREG->IECR4 = (uint32)((channels >> 32U) & 0xFFFFFFFFU); + esmREG->IECR1 = (uint32)(channels & 0xFFFFFFFFU); + +/* USER CODE BEGIN (18) */ +/* USER CODE END */ +} + + +/** @fn void esmSetInterruptLevel(uint64 channels, uint64 flags) +* @brief Set Group 1 Channels Interrupt Levels +* +* @param[in] channels - Channel mask +* @param[in] flags - Level mask: - 0: Low priority interrupt +* - 1: High priority interrupt +* +* Set Group 1 Channels Interrupts levels. +*/ +/* SourceId : ESM_SourceId_009 */ +/* DesignId : ESM_DesignId_009 */ +/* Requirements : HL_SR12 */ +void esmSetInterruptLevel(uint64 channels, uint64 flags) +{ +/* USER CODE BEGIN (19) */ +/* USER CODE END */ + + esmREG->ILCR4 = (uint32)(((channels & (~flags)) >> 32U) & 0xFFFFFFFFU); + esmREG->ILSR4 = (uint32)(((channels & flags) >> 32U) & 0xFFFFFFFFU); + esmREG->ILCR1 = (uint32)((channels & (~flags)) & 0xFFFFFFFFU); + esmREG->ILSR1 = (uint32)((channels & flags) & 0xFFFFFFFFU); + +/* USER CODE BEGIN (20) */ +/* USER CODE END */ +} + + +/** @fn void esmClearStatus(uint32 group, uint64 channels) +* @brief Clear Group error status +* +* @param[in] group - Error group +* @param[in] channels - Channel mask +* +* Clear Group error status. +*/ +/* SourceId : ESM_SourceId_010 */ +/* DesignId : ESM_DesignId_010 */ +/* Requirements : HL_SR13 */ +void esmClearStatus(uint32 group, uint64 channels) +{ +/* USER CODE BEGIN (21) */ +/* USER CODE END */ + + esmREG->SR1[group] = (uint32)(channels & 0xFFFFFFFFU); + if(group == 0U) + { + esmREG->SR4[group] = (uint32)((channels >> 32U) & 0xFFFFFFFFU); + } + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ +} + + +/** @fn void esmClearStatusBuffer(uint64 channels) +* @brief Clear Group 2 error status buffer +* +* @param[in] channels - Channel mask +* +* Clear Group 2 error status buffer. +*/ +/* SourceId : ESM_SourceId_011 */ +/* DesignId : ESM_DesignId_011 */ +/* Requirements : HL_SR14 */ +void esmClearStatusBuffer(uint64 channels) +{ +/* USER CODE BEGIN (23) */ +/* USER CODE END */ + + esmREG->SSR2 = (uint32)(channels & 0xFFFFFFFFU); + +/* USER CODE BEGIN (24) */ +/* USER CODE END */ +} + + +/** @fn void esmSetCounterPreloadValue(uint32 value) +* @brief Set counter preload value +* +* @param[in] value - Counter preload value +* +* Set counter preload value. +*/ +/* SourceId : ESM_SourceId_012 */ +/* DesignId : ESM_DesignId_012 */ +/* Requirements : HL_SR15 */ +void esmSetCounterPreloadValue(uint32 value) +{ +/* USER CODE BEGIN (25) */ +/* USER CODE END */ + + esmREG->LTCPR = value & 0xC000U; + +/* USER CODE BEGIN (26) */ +/* USER CODE END */ +} + + +/** @fn uint64 esmGetStatus(uint32 group, uint64 channels) +* @brief Return Error status +* +* @param[in] group - Error group +* @param[in] channels - Error Channels +* +* @return The channels status of selected group +* +* Returns the channels status of selected group. +*/ +/* SourceId : ESM_SourceId_013 */ +/* DesignId : ESM_DesignId_013 */ +/* Requirements : HL_SR16 */ +uint64 esmGetStatus(uint32 group, uint64 channels) +{ + uint64 status; + uint32 ESM_ESTATUS4, ESM_ESTATUS1; + if(group == 0U) + { + ESM_ESTATUS4 = esmREG->SR4[group]; + } + else + { + ESM_ESTATUS4 = 0U; + } + ESM_ESTATUS1 = esmREG->SR1[group]; + +/* USER CODE BEGIN (27) */ +/* USER CODE END */ + status = (((uint64)(ESM_ESTATUS4) << 32U) | (uint64)ESM_ESTATUS1) & channels; + +/* USER CODE BEGIN (28) */ +/* USER CODE END */ + + return status; +} + + +/** @fn uint64 esmGetStatusBuffer(uint64 channels) +* @brief Return Group 2 channel x Error status buffer +* +* @param[in] channels - Error Channels +* +* @return The channels status +* +* Returns the group 2 buffered status of selected channels. +*/ +/* SourceId : ESM_SourceId_014 */ +/* DesignId : ESM_DesignId_014 */ +/* Requirements : HL_SR17 */ +uint64 esmGetStatusBuffer(uint64 channels) +{ + uint64 status; + +/* USER CODE BEGIN (29) */ +/* USER CODE END */ + status = ((uint64)esmREG->SSR2) & channels; + +/* USER CODE BEGIN (30) */ +/* USER CODE END */ + + return status; +} + +/** @fn esmSelfTestFlag_t esmEnterSelfTest(void) +* @brief Return ESM Self test status +* +* @return ESM Self test status +* +* Returns the ESM Self test status. +*/ +/* SourceId : ESM_SourceId_015 */ +/* DesignId : ESM_DesignId_015 */ +/* Requirements : HL_SR19 */ +esmSelfTestFlag_t esmEnterSelfTest(void) +{ + esmSelfTestFlag_t status; + +/* USER CODE BEGIN (31) */ +/* USER CODE END */ + + uint32 errPinStat = esmREG->EPSR & 0x1U; + uint32 esmKeyReg = esmREG->EKR; + if((errPinStat == 0x0U) && (esmKeyReg == 0x0U)) + { + status = esmSelfTest_NotStarted; + } + else + { + esmREG->EKR = 0xAU; + status = esmSelfTest_Active; + if((esmREG->EPSR & 0x1U) != 0x0U) + { + status = esmSelfTest_Failed; + } + esmREG->EKR = 0x5U; + } + +/* USER CODE BEGIN (32) */ +/* USER CODE END */ + + return status; +} + +/** @fn esmSelfTestFlag_t esmSelfTestStatus(void) +* @brief Return ESM Self test status +* +* Returns the ESM Self test status. +*/ +/* SourceId : ESM_SourceId_016 */ +/* DesignId : ESM_DesignId_016 */ +/* Requirements : HL_SR18 */ +esmSelfTestFlag_t esmSelfTestStatus(void) +{ + esmSelfTestFlag_t status; + +/* USER CODE BEGIN (33) */ +/* USER CODE END */ + + if((esmREG->EPSR & 0x1U) == 0x0U) + { + if(esmREG->EKR == 0x5U) + { + status = esmSelfTest_Active; + } + else + { + status = esmSelfTest_Failed; + } + } + else + { + status = esmSelfTest_Passed; + } + +/* USER CODE BEGIN (34) */ +/* USER CODE END */ + + return status; +} + +/** @fn void esmGetConfigValue(esm_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ESM_SourceId_017 */ +/* DesignId : ESM_DesignId_017 */ +/* Requirements : HL_SR20, HL_SR24 */ +void esmGetConfigValue(esm_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_EEPAPR1 = ESM_EEPAPR1_CONFIGVALUE; + config_reg->CONFIG_IESR1 = ESM_IESR1_CONFIGVALUE; + config_reg->CONFIG_ILSR1 = ESM_ILSR1_CONFIGVALUE; + config_reg->CONFIG_LTCPR = ESM_LTCPR_CONFIGVALUE; + config_reg->CONFIG_EKR = ESM_EKR_CONFIGVALUE; + config_reg->CONFIG_IEPSR4 = ESM_IEPSR4_CONFIGVALUE; + config_reg->CONFIG_IESR4 = ESM_IESR4_CONFIGVALUE; + config_reg->CONFIG_ILSR4 = ESM_ILSR4_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_EEPAPR1 = esmREG->EEPAPR1; + config_reg->CONFIG_IESR1 = esmREG->IESR1; + config_reg->CONFIG_ILSR1 = esmREG->ILSR1; + config_reg->CONFIG_LTCPR = esmREG->LTCPR; + config_reg->CONFIG_EKR = esmREG->EKR; + config_reg->CONFIG_IEPSR4 = esmREG->IEPSR4; + config_reg->CONFIG_IESR4 = esmREG->IESR4; + config_reg->CONFIG_ILSR4 = esmREG->ILSR4; + } +} + +/* USER CODE BEGIN (35) */ +/* USER CODE END */ + +/** @fn void esmHighInterrupt(void) +* @brief High Level Interrupt for ESM +*/ +#pragma CODE_STATE(esmHighInterrupt, 32) +#pragma INTERRUPT(esmHighInterrupt, FIQ) +/* SourceId : ESM_SourceId_018 */ +/* DesignId : ESM_DesignId_018 */ +/* Requirements : HL_SR21, HL_SR22 */ +void esmHighInterrupt(void) +{ + uint32 vec = esmREG->IOFFHR - 1U; + +/* USER CODE BEGIN (36) */ +/* USER CODE END */ + + if (vec < 32U) + { + esmREG->SR1[0U] = (uint32)1U << vec; + esmGroup1Notification(vec); + } + else if (vec < 64U) + { + esmREG->SR1[1U] = (uint32)1U << (vec-32U); + esmGroup2Notification(vec-32U); + } + else if (vec < 96U) + { + esmREG->SR4[0U] = (uint32)1U << (vec-64U); + esmGroup1Notification(vec-32U); + } + else + { + esmREG->SR4[0U] = 0xFFFFFFFFU; + esmREG->SR1[1U] = 0xFFFFFFFFU; + esmREG->SR1[0U] = 0xFFFFFFFFU; + } + +/* USER CODE BEGIN (37) */ +/* USER CODE END */ +} + + +/* USER CODE BEGIN (41) */ +/* USER CODE END */ Index: firmware/source/etpwm.c =================================================================== diff -u --- firmware/source/etpwm.c (revision 0) +++ firmware/source/etpwm.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,2230 @@ +/** @file etpwm.c +* @brief ETPWM Driver Source File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - API Functions +* - Interrupt Handlers +* . +* which are relevant for the ETPWM driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +#include "etpwm.h" +#include "pinmux.h" +#include "sys_vim.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + + +/** @fn void etpwmInit(void) +* @brief Initializes the eTPWM Driver +* +* This function initializes the eTPWM module. +* +* @note This function sets the time-base counters in up-count mode. +* Application can configure the module in a different mode using other functions in this driver.(Sample code provided in the examples folder) +* In that case, application need not call etpwmInit function. +* pinmuxInit needs to be called before this function. +* +*/ +/* SourceId : ETPWM_SourceId_001 */ +/* DesignId : ETPWM_DesignId_001 */ +/* Requirements : HL_EPWM_SR1 */ +void etpwmInit(void) +{ +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + /** @b initialize @b ETPWM1 */ + + /** - Sets high speed time-base clock prescale bits */ + etpwmREG1->TBCTL = (uint16)0U << 7U; + + /** - Sets time-base clock prescale bits */ + etpwmREG1->TBCTL |= (uint16)((uint16)0U << 10U); + + /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ + etpwmREG1->TBPRD = 1000U; + + /** - Setup the duty cycle for PWMA */ + etpwmREG1->CMPA = 50U; + + /** - Setup the duty cycle for PWMB */ + etpwmREG1->CMPB = 50U; + + /** - Force EPWMxA output high when counter reaches zero and low when counter reaches Compare A value */ + etpwmREG1->AQCTLA = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 4U)); + + /** - Force EPWMxB output high when counter reaches zero and low when counter reaches Compare B value */ + etpwmREG1->AQCTLB = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 8U)); + + /** - Mode setting for Dead Band Module + * -Select the input mode for Dead Band Module + * -Select the output mode for Dead Band Module + * -Select Polarity of the output PWMs + */ + etpwmREG1->DBCTL = ((uint16)((uint16)0U << 5U) /* Source for Falling edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0u << 4U) /* Source for Rising edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 3U) /* Enable/Disable EPWMxB invert */ + | (uint16)((uint16)0U << 2U) /* Enable/Disable EPWMxA invert */ + | (uint16)((uint16)0U << 1U) /* Enable/Disable Rising Edge Delay */ + | (uint16)((uint16)0U << 0U)); /* Enable/Disable Falling Edge Delay */ + + /** - Set the rising edge delay */ + etpwmREG1->DBRED = 1U; + + /** - Set the falling edge delay */ + etpwmREG1->DBFED = 1U ; + + /** - Enable the chopper module for ETPWMx + * -Sets the One shot pulse width in a chopper modulated wave + * -Sets the dutycycle for the subsequent pulse train + * -Sets the period for the subsequent pulse train + */ + etpwmREG1->PCCTL = ((uint16)((uint16)0U << 0U) /* Enable/Disable chopper module */ + | (uint16)((uint16)1U << 1U) /* One-shot Pulse Width */ + | (uint16)((uint16)3U << 8U) /* Chopping Clock Duty Cycle */ + | (uint16)((uint16)0U << 5U)); /* Chopping Clock Frequency */ + + /** - Set trip source enable */ + etpwmREG1->TZSEL = 0x0000U /** - Enable/Disable TZ1 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ6 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ1 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a CBC trip source */ + | 0x0000U; /** - Enable/Disable TZ6 as a CBC trip source */ + + /** - Set interrupt enable */ + etpwmREG1->TZEINT = 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable one-shot interrupt generation */ + | 0x0000U; /** - Enable/Disable cycle-by-cycle interrupt generation */ + + /** - Sets up the event for interrupt */ + etpwmREG1->ETSEL = (uint16)NO_EVENT; + + if ((etpwmREG1->ETSEL & 0x0007U) != 0U) + { + etpwmREG1->ETSEL |= 0x0008U; + } + /** - Setup the frequency of the interrupt generation */ + etpwmREG1->ETPS = 1U; + + /** - Sets up the ADC SOC interrupt */ + etpwmREG1->ETSEL |= ((uint16)(0x0000U) + | (uint16)(0x0000U) + | (uint16)((uint16)DCAEVT1 << 8U) + | (uint16)((uint16)DCBEVT1 << 12U)); + + /** - Sets up the ADC SOC period */ + etpwmREG1->ETPS |= ((uint16)((uint16)1U << 8U) + | (uint16)((uint16)1U << 12U)); + + /** @b initialize @b ETPWM2 */ + + /** - Sets high speed time-base clock prescale bits */ + etpwmREG2->TBCTL = (uint16)0U << 7U; + + /** - Sets time-base clock prescale bits */ + etpwmREG2->TBCTL |= (uint16)((uint16)0U << 10U); + + /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ + etpwmREG2->TBPRD = 1000U; + + /** - Setup the duty cycle for PWMA */ + etpwmREG2->CMPA = 50U; + + /** - Setup the duty cycle for PWMB */ + etpwmREG2->CMPB = 50U; + + /** - Force EPWMxA output high when counter reaches zero and low when counter reaches Compare A value */ + etpwmREG2->AQCTLA = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 4U)); + + /** - Force EPWMxB output high when counter reaches zero and low when counter reaches Compare B value */ + etpwmREG2->AQCTLB = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 8U)); + + /** - Mode setting for Dead Band Module + * -Select the input mode for Dead Band Module + * -Select the output mode for Dead Band Module + * -Select Polarity of the output PWMs + */ + etpwmREG2->DBCTL = ((uint16)((uint16)0U << 5U) /* Source for Falling edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 4U) /* Source for Rising edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 3U) /* Enable/Disable EPWMxB invert */ + | (uint16)((uint16)0U << 2U) /* Enable/Disable EPWMxA invert */ + | (uint16)((uint16)0U << 1U) /* Enable/Disable Rising Edge Delay */ + | (uint16)((uint16)0U << 0U)); /* Enable/Disable Falling Edge Delay */ + + /** - Set the rising edge delay */ + etpwmREG2->DBRED = 1U; + + /** - Set the falling edge delay */ + etpwmREG2->DBFED = 1U; + + /** - Enable the chopper module for ETPWMx + * -Sets the One shot pulse width in a chopper modulated wave + * -Sets the dutycycle for the subsequent pulse train + * -Sets the period for the subsequent pulse train + */ + etpwmREG2->PCCTL = ((uint16)((uint16)0U << 0U) /* Enable/Disable chopper module */ + | (uint16)((uint16)1U << 1U) /* One-shot Pulse Width */ + | (uint16)((uint16)3U << 8U) /* Chopping Clock Duty Cycle */ + | (uint16)((uint16)0U << 5U)); /* Chopping Clock Frequency */ + + /** - Set trip source enable */ + etpwmREG2->TZSEL = 0x0000U /** - Enable/Disable TZ1 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ6 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ1 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a CBC trip source */ + | 0x0000U; /** - Enable/Disable TZ6 as a CBC trip source */ + + /** - Set interrupt enable */ + etpwmREG2->TZEINT = 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable one-shot interrupt generation */ + | 0x0000U; /** - Enable/Disable cycle-by-cycle interrupt generation */ + + /** - Sets up the event for interrupt */ + etpwmREG2->ETSEL = (uint16)NO_EVENT; + + if ((etpwmREG2->ETSEL & 0x0007U) != 0U) + { + etpwmREG2->ETSEL |= 0x0008U; + } + /** - Setup the frequency of the interrupt generation */ + etpwmREG2->ETPS = 1U; + + /** - Sets up the ADC SOC interrupt */ + etpwmREG2->ETSEL |= ((uint16)(0x0000U) + | (uint16)(0x0000U) + | (uint16)((uint16)DCAEVT1 << 8U) + | (uint16)((uint16)DCBEVT1 << 12U)); + + /** - Sets up the ADC SOC period */ + etpwmREG2->ETPS |= ((uint16)((uint16)1U << 8U) + | (uint16)((uint16)1U << 12U)); + + /** @b initialize @b ETPWM3 */ + + /** - Sets high speed time-base clock prescale bits */ + etpwmREG3->TBCTL = (uint16)0U << 7U; + + /** - Sets time-base clock prescale bits */ + etpwmREG3->TBCTL |= (uint16)((uint16)0U << 10U); + + /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ + etpwmREG3->TBPRD = 1000U; + + /** - Setup the duty cycle for PWMA */ + etpwmREG3->CMPA = 50U; + + /** - Setup the duty cycle for PWMB */ + etpwmREG3->CMPB = 50U; + + /** - Force EPWMxA output high when counter reaches zero and low when counter reaches Compare A value */ + etpwmREG3->AQCTLA = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 4U)); + + /** - Force EPWMxB output high when counter reaches zero and low when counter reaches Compare B value */ + etpwmREG3->AQCTLB = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 8U)); + + /** - Mode setting for Dead Band Module + * -Select the input mode for Dead Band Module + * -Select the output mode for Dead Band Module + * -Select Polarity of the output PWMs + */ + etpwmREG3->DBCTL = ((uint16)((uint16)0U << 5U) /* Source for Falling edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 4U) /* Source for Rising edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 3U) /* Enable/Disable EPWMxB invert */ + | (uint16)((uint16)0U << 2U) /* Enable/Disable EPWMxA invert */ + | (uint16)((uint16)0U << 1U) /* Enable/Disable Rising Edge Delay */ + | (uint16)((uint16)0U << 0U)); /* Enable/Disable Falling Edge Delay */ + + /** - Set the rising edge delay */ + etpwmREG3->DBRED = 1U; + + /** - Set the falling edge delay */ + etpwmREG3->DBFED = 1U; + + /** - Enable the chopper module for ETPWMx + * -Sets the One shot pulse width in a chopper modulated wave + * -Sets the dutycycle for the subsequent pulse train + * -Sets the period for the subsequent pulse train + */ + etpwmREG3->PCCTL = ((uint16)((uint16)0U << 0U) /* Enable/Disable chopper module */ + | (uint16)((uint16)1U << 1U) /* One-shot Pulse Width */ + | (uint16)((uint16)3U << 8U) /* Chopping Clock Duty Cycle */ + | (uint16)((uint16)0U << 5U)); /* Chopping Clock Frequency */ + + /** - Set trip source enable */ + etpwmREG3->TZSEL = 0x0000U /** - Enable/Disable TZ1 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ6 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ1 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a CBC trip source */ + | 0x0000U; /** - Enable/Disable TZ6 as a CBC trip source */ + + /** - Set interrupt enable */ + etpwmREG3->TZEINT = 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable one-shot interrupt generation */ + | 0x0000U; /** - Enable/Disable cycle-by-cycle interrupt generation */ + + + /** - Sets up the event for interrupt */ + etpwmREG3->ETSEL = (uint16)NO_EVENT; + + if ((etpwmREG3->ETSEL & 0x0007U) != 0U) + { + etpwmREG3->ETSEL |= 0x0008U; + } + /** - Setup the frequency of the interrupt generation */ + etpwmREG3->ETPS = 1U; + + /** - Sets up the ADC SOC interrupt */ + etpwmREG3->ETSEL |= ((uint16)(0x0000U) + | (uint16)(0x0000U) + | (uint16)((uint16)DCAEVT1 << 8U) + | (uint16)((uint16)DCBEVT1 << 12U)); + + /** - Sets up the ADC SOC period */ + etpwmREG3->ETPS |= ((uint16)((uint16)1U << 8U) + | (uint16)((uint16)1U << 12U)); + + /** @b initialize @b ETPWM4 */ + + /** - Sets high speed time-base clock prescale bits */ + etpwmREG4->TBCTL = (uint16)0U << 7U; + + /** - Sets time-base clock prescale bits */ + etpwmREG4->TBCTL |= (uint16)((uint16)0U << 10U); + + /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ + etpwmREG4->TBPRD = 1000U; + + /** - Setup the duty cycle for PWMA */ + etpwmREG4->CMPA = 50U; + + /** - Setup the duty cycle for PWMB */ + etpwmREG4->CMPB = 50U; + + /** - Force EPWMxA output high when counter reaches zero and low when counter reaches Compare A value */ + etpwmREG4->AQCTLA = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 4U)); + + /** - Force EPWMxB output high when counter reaches zero and low when counter reaches Compare B value */ + etpwmREG4->AQCTLB = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 8U)); + + /** - Mode setting for Dead Band Module + * -Select the input mode for Dead Band Module + * -Select the output mode for Dead Band Module + * -Select Polarity of the output PWMs + */ + etpwmREG4->DBCTL = (uint16)((uint16)0U << 5U) /* Source for Falling edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 4U) /* Source for Rising edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 3U) /* Enable/Disable EPWMxB invert */ + | (uint16)((uint16)0U << 2U) /* Enable/Disable EPWMxA invert */ + | (uint16)((uint16)0U << 1U) /* Enable/Disable Rising Edge Delay */ + | (uint16)((uint16)0U << 0U); /* Enable/Disable Falling Edge Delay */ + + /** - Set the rising edge delay */ + etpwmREG4->DBRED = 1U; + + /** - Set the falling edge delay */ + etpwmREG4->DBFED = 1U; + + /** - Enable the chopper module for ETPWMx + * -Sets the One shot pulse width in a chopper modulated wave + * -Sets the dutycycle for the subsequent pulse train + * -Sets the period for the subsequent pulse train + */ + etpwmREG4->PCCTL = (uint16)((uint16)0U << 0U) /* Enable/Disable chopper module */ + | (uint16)((uint16)1U << 1U) /* One-shot Pulse Width */ + | (uint16)((uint16)3U << 8U) /* Chopping Clock Duty Cycle */ + | (uint16)((uint16)0U << 5U); /* Chopping Clock Frequency */ + + /** - Set trip source enable */ + etpwmREG4->TZSEL = 0x0000U /** - Enable/Disable TZ1 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ6 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ1 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a CBC trip source */ + | 0x0000U; /** - Enable/Disable TZ6 as a CBC trip source */ + + /** - Set interrupt enable */ + etpwmREG4->TZEINT = 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable one-shot interrupt generation */ + | 0x0000U; /** - Enable/Disable cycle-by-cycle interrupt generation */ + + /** - Sets up the event for interrupt */ + etpwmREG4->ETSEL = (uint16)NO_EVENT; + + if ((etpwmREG4->ETSEL & 0x0007U) != 0U) + { + etpwmREG4->ETSEL |= 0x0008U; + } + /** - Setup the frequency of the interrupt generation */ + etpwmREG4->ETPS = 1U; + + /** - Sets up the ADC SOC interrupt */ + etpwmREG4->ETSEL |= (uint16)(0x0000U) + | (uint16)(0x0000U) + | (uint16)((uint16)DCAEVT1 << 8U) + | (uint16)((uint16)DCBEVT1 << 12U); + + /** - Sets up the ADC SOC period */ + etpwmREG4->ETPS |= ((uint16)((uint16)1U << 8U) + | (uint16)((uint16)1U << 12U)); + + /** @b initialize @b ETPWM5 */ + + /** - Sets high speed time-base clock prescale bits */ + etpwmREG5->TBCTL = (uint16)0U << 7U; + + /** - Sets time-base clock prescale bits */ + etpwmREG5->TBCTL |= (uint16)((uint16)0U << 10U); + + /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ + etpwmREG5->TBPRD = 1000U; + + /** - Setup the duty cycle for PWMA */ + etpwmREG5->CMPA = 50U; + + /** - Setup the duty cycle for PWMB */ + etpwmREG5->CMPB = 50U; + + /** - Force EPWMxA output high when counter reaches zero and low when counter reaches Compare A value */ + etpwmREG5->AQCTLA = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 4U)); + + /** - Force EPWMxB output high when counter reaches zero and low when counter reaches Compare B value */ + etpwmREG5->AQCTLB = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 8U)); + + /** - Mode setting for Dead Band Module + * -Select the input mode for Dead Band Module + * -Select the output mode for Dead Band Module + * -Select Polarity of the output PWMs + */ + etpwmREG5->DBCTL = (uint16)((uint16)0U << 5U) /* Source for Falling edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 4U) /* Source for Rising edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 3U) /* Enable/Disable EPWMxB invert */ + | (uint16)((uint16)0U << 2U) /* Enable/Disable EPWMxA invert */ + | (uint16)((uint16)0U << 1U) /* Enable/Disable Rising Edge Delay */ + | (uint16)((uint16)0U << 0U); /* Enable/Disable Falling Edge Delay */ + + /** - Set the rising edge delay */ + etpwmREG5->DBRED = 1U; + + /** - Set the falling edge delay */ + etpwmREG5->DBFED = 1U; + + /** - Enable the chopper module for ETPWMx + * -Sets the One shot pulse width in a chopper modulated wave + * -Sets the dutycycle for the subsequent pulse train + * -Sets the period for the subsequent pulse train + */ + etpwmREG5->PCCTL = (uint16)((uint16)0U << 0U) /* Enable/Disable chopper module */ + | (uint16)((uint16)1U << 1U) /* One-shot Pulse Width */ + | (uint16)((uint16)3U << 8U) /* Chopping Clock Duty Cycle */ + | (uint16)((uint16)0U << 5U); /* Chopping Clock Frequency */ + + + /** - Set trip source enable */ + etpwmREG5->TZSEL = 0x0000U /** - Enable/Disable TZ1 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ6 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ1 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a CBC trip source */ + | 0x0000U; /** - Enable/Disable TZ6 as a CBC trip source */ + + /** - Set interrupt enable */ + etpwmREG5->TZEINT = 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable one-shot interrupt generation */ + | 0x0000U; /** - Enable/Disable cycle-by-cycle interrupt generation */ + + /** - Sets up the event for interrupt */ + etpwmREG5->ETSEL = (uint16)NO_EVENT; + + if ((etpwmREG5->ETSEL & 0x0007U) != 0U) + { + etpwmREG5->ETSEL |= 0x0008U; + } + /** - Setup the frequency of the interrupt generation */ + etpwmREG5->ETPS = 1U; + + /** - Sets up the ADC SOC interrupt */ + etpwmREG5->ETSEL |= (uint16)(0x0000U) + | (uint16)(0x0000U) + | (uint16)((uint16)DCAEVT1 << 8U) + | (uint16)((uint16)DCBEVT1 << 12U); + + /** - Sets up the ADC SOC period */ + etpwmREG5->ETPS |= ((uint16)((uint16)1U << 8U) + | (uint16)((uint16)1U << 12U)); + + /** @b initialize @b ETPWM6 */ + + /** - Sets high speed time-base clock prescale bits */ + etpwmREG6->TBCTL = (uint16)0U << 7U; + + /** - Sets time-base clock prescale bits */ + etpwmREG6->TBCTL |= (uint16)((uint16)0U << 10U); + + /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ + etpwmREG6->TBPRD = 1000U; + + /** - Setup the duty cycle for PWMA */ + etpwmREG6->CMPA = 50U; + + /** - Setup the duty cycle for PWMB */ + etpwmREG6->CMPB = 50U; + + + /** - Force EPWMxA output high when counter reaches zero and low when counter reaches Compare A value */ + etpwmREG6->AQCTLA = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 4U)); + + /** - Force EPWMxB output high when counter reaches zero and low when counter reaches Compare B value */ + etpwmREG6->AQCTLB = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 8U)); + + /** - Mode setting for Dead Band Module + * -Select the input mode for Dead Band Module + * -Select the output mode for Dead Band Module + * -Select Polarity of the output PWMs + */ + etpwmREG6->DBCTL = (uint16)((uint16)0U << 5U) /* Source for Falling edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 4U) /* Source for Rising edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 3U) /* Enable/Disable EPWMxB invert */ + | (uint16)((uint16)0U << 2U) /* Enable/Disable EPWMxA invert */ + | (uint16)((uint16)0U << 1U) /* Enable/Disable Rising Edge Delay */ + | (uint16)((uint16)0U << 0U); /* Enable/Disable Falling Edge Delay */ + + /** - Set the rising edge delay */ + etpwmREG6->DBRED = 1U; + + /** - Set the falling edge delay */ + etpwmREG6->DBFED = 1U; + + /** - Enable the chopper module for ETPWMx + * -Sets the One shot pulse width in a chopper modulated wave + * -Sets the dutycycle for the subsequent pulse train + * -Sets the period for the subsequent pulse train + */ + etpwmREG6->PCCTL = (uint16)((uint16)0U << 0U) /* Enable/Disable chopper module */ + | (uint16)((uint16)1U << 1U) /* One-shot Pulse Width */ + | (uint16)((uint16)3U << 8U) /* Chopping Clock Duty Cycle */ + | (uint16)((uint16)0U << 5U); /* Chopping Clock Frequency */ + + + /** - Set trip source enable */ + etpwmREG6->TZSEL = 0x0000U /** - Enable/Disable TZ1 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ6 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ1 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a CBC trip source */ + | 0x0000U; /** - Enable/Disable TZ6 as a CBC trip source */ + + /** - Set interrupt enable */ + etpwmREG6->TZEINT = 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable one-shot interrupt generation */ + | 0x0000U; /** - Enable/Disable cycle-by-cycle interrupt generation */ + + + /** - Sets up the event for interrupt */ + etpwmREG6->ETSEL = (uint16)NO_EVENT; + + if ((etpwmREG6->ETSEL & 0x0007U) != 0U) + { + etpwmREG6->ETSEL |= 0x0008U; + } + /** - Setup the frequency of the interrupt generation */ + etpwmREG6->ETPS = 1U; + + /** - Sets up the ADC SOC interrupt */ + etpwmREG6->ETSEL |= (uint16)(0x0000U) + | (uint16)(0x0000U) + | (uint16)((uint16)DCAEVT1 << 8U) + | (uint16)((uint16)DCBEVT1 << 12U); + + /** - Sets up the ADC SOC period */ + etpwmREG6->ETPS |= ((uint16)((uint16)1U << 8U) + | (uint16)((uint16)1U << 12U)); + + /** @b initialize @b ETPWM7 */ + + /** - Sets high speed time-base clock prescale bits */ + etpwmREG7->TBCTL = (uint16)0U << 7U; + + /** - Sets time-base clock prescale bits */ + etpwmREG7->TBCTL |= (uint16)((uint16)0U << 10U); + + /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ + etpwmREG7->TBPRD = 1000U; + + /** - Setup the duty cycle for PWMA */ + etpwmREG7->CMPA = 50U; + + /** - Setup the duty cycle for PWMB */ + etpwmREG7->CMPB = 50U; + + + /** - Force EPWMxA output high when counter reaches zero and low when counter reaches Compare A value */ + etpwmREG7->AQCTLA = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 4U)); + + /** - Force EPWMxB output high when counter reaches zero and low when counter reaches Compare B value */ + etpwmREG7->AQCTLB = ((uint16)((uint16)ActionQual_Set << 0U) + | (uint16)((uint16)ActionQual_Clear << 8U)); + + /** - Mode setting for Dead Band Module + * -Select the input mode for Dead Band Module + * -Select the output mode for Dead Band Module + * -Select Polarity of the output PWMs + */ + etpwmREG7->DBCTL = (uint16)((uint16)0U << 5U) /* Source for Falling edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 4U) /* Source for Rising edge delay(0-PWMA, 1-PWMB) */ + | (uint16)((uint16)0U << 3U) /* Enable/Disable EPWMxB invert */ + | (uint16)((uint16)0U << 2U) /* Enable/Disable EPWMxA invert */ + | (uint16)((uint16)0U << 1U) /* Enable/Disable Rising Edge Delay */ + | (uint16)((uint16)0U << 0U); /* Enable/Disable Falling Edge Delay */ + + /** - Set the rising edge delay */ + etpwmREG7->DBRED = 1U; + + /** - Set the falling edge delay */ + etpwmREG7->DBFED = 1U; + + /** - Enable the chopper module for ETPWMx + * -Sets the One shot pulse width in a chopper modulated wave + * -Sets the dutycycle for the subsequent pulse train + * -Sets the period for the subsequent pulse train + */ + etpwmREG7->PCCTL = (uint16)((uint16)0U << 0U) /* Enable/Disable chopper module */ + | (uint16)((uint16)1U << 1U) /* One-shot Pulse Width */ + | (uint16)((uint16)3U << 8U) /* Chopping Clock Duty Cycle */ + | (uint16)((uint16)0U << 5U); /* Chopping Clock Frequency */ + + + /** - Set trip source enable */ + etpwmREG7->TZSEL = 0x0000U /** - Enable/Disable TZ1 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ6 as a one-shot trip source */ + | 0x0000U /** - Enable/Disable TZ1 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ2 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ3 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ4 as a CBC trip source */ + | 0x0000U /** - Enable/Disable TZ5 as a CBC trip source */ + | 0x0000U; /** - Enable/Disable TZ6 as a CBC trip source */ + + /** - Set interrupt enable */ + etpwmREG7->TZEINT = 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 1 */ + | 0x0000U /** - Enable/Disable Digital Comparator Output A Event 2 */ + | 0x0000U /** - Enable/Disable one-shot interrupt generation */ + | 0x0000U; /** - Enable/Disable cycle-by-cycle interrupt generation */ + + /** - Sets up the event for interrupt */ + etpwmREG7->ETSEL = (uint16)NO_EVENT; + + if ((etpwmREG7->ETSEL & 0x0007U) != 0U) + { + etpwmREG7->ETSEL |= 0x0008U; + } + /** - Setup the frequency of the interrupt generation */ + etpwmREG7->ETPS = 1U; + + /** - Sets up the ADC SOC interrupt */ + etpwmREG7->ETSEL |= (uint16)(0x0000U) + | (uint16)(0x0000U) + | (uint16)((uint16)DCAEVT1 << 8U) + | (uint16)((uint16)DCBEVT1 << 12U); + + /** - Sets up the ADC SOC period */ + etpwmREG7->ETPS |= ((uint16)((uint16)1U << 8U) + | (uint16)((uint16)1U << 12U)); + + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ +} + +/** @fn void etpwmStartTBCLK() +* @brief Start the time-base clocks of all eTPWMx modules +* +* This function starts the time-base clocks of all eTPWMx modules. +*/ +/* SourceId : ETPWM_SourceId_002 */ +/* DesignId : ETPWM_DesignId_002 */ +/* Requirements : HL_EPWM_SR36 */ +void etpwmStartTBCLK(void) +{ + /* Enable Pin Muxing */ + kickerReg->KICKER0 = 0x83E70B13U; + kickerReg->KICKER1 = 0x95A4F1E0U; + + pinMuxReg->PINMMR37 = (pinMuxReg->PINMMR37 & PINMUX_ETPWM_TBCLK_SYNC_MASK) | (PINMUX_ETPWM_TBCLK_SYNC_ON); + + /* Disable Pin Muxing */ + kickerReg->KICKER0 = 0x00000000U; + kickerReg->KICKER1 = 0x00000000U; +} + +/** @fn void etpwmStopTBCLK() +* @brief Stop the time-base clocks of all eTPWMx modules +* +* This function stops the time-base clocks of all eTPWMx modules. +*/ +/* SourceId : ETPWM_SourceId_003 */ +/* DesignId : ETPWM_DesignId_003 */ +/* Requirements : HL_EPWM_SR36 */ +void etpwmStopTBCLK(void) +{ + /* Enable Pin Muxing */ + kickerReg->KICKER0 = 0x83E70B13U; + kickerReg->KICKER1 = 0x95A4F1E0U; + + pinMuxReg->PINMMR37 = (pinMuxReg->PINMMR37 & PINMUX_ETPWM_TBCLK_SYNC_MASK) | (PINMUX_ETPWM_TBCLK_SYNC_OFF); + + /* Disable Pin Muxing */ + kickerReg->KICKER0 = 0x00000000U; + kickerReg->KICKER1 = 0x00000000U; +} + +/** @fn void etpwmSetClkDiv(etpwmBASE_t *etpwm, etpwmClkDiv_t clkdiv, etpwmHspClkDiv_t hspclkdiv) +* @brief Sets the Time-base Clock divider +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param clkdiv Time-base clock divider +* - ClkDiv_by_1 +* - ClkDiv_by_2 +* - ClkDiv_by_4 +* - ClkDiv_by_8 +* - ClkDiv_by_16 +* - ClkDiv_by_32 +* - ClkDiv_by_64 +* - ClkDiv_by_128 +* @param hspclkdiv High Speed Time-base clock divider +* - HspClkDiv_by_1 +* - HspClkDiv_by_2 +* - HspClkDiv_by_4 +* - HspClkDiv_by_6 +* - HspClkDiv_by_8 +* - HspClkDiv_by_10 +* - HspClkDiv_by_12 +* - HspClkDiv_by_14 +* +* This function sets the TimeBase Clock and the High Speed time base clock divider +* TBCLK = VCLK4 / (HSPCLKDIV � CLKDIV) +*/ +/* SourceId : ETPWM_SourceId_004 */ +/* DesignId : ETPWM_DesignId_004 */ +/* Requirements : HL_EPWM_SR2 */ +void etpwmSetClkDiv(etpwmBASE_t *etpwm, etpwmClkDiv_t clkdiv, etpwmHspClkDiv_t hspclkdiv) +{ + etpwm->TBCTL &= (uint16)~(uint16)0x1F80U; + etpwm->TBCTL |= (uint16)clkdiv | (uint16)hspclkdiv; +} + +/** @fn void etpwmSetTimebasePeriod(etpwmBASE_t *etpwm, uint16 period) +* @brief Sets period of timebase counter +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param period 16-bit Time-base period +* +* This function sets period of timebase counter +*/ +/* SourceId : ETPWM_SourceId_005 */ +/* DesignId : ETPWM_DesignId_005 */ +/* Requirements : HL_EPWM_SR3 */ +void etpwmSetTimebasePeriod(etpwmBASE_t *etpwm, uint16 period) +{ + etpwm->TBPRD = period; +} + +/** @fn void etpwmSetCount(etpwmBASE_t *etpwm, uint16 count) +* @brief Sets timebase counter +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param count 16-bit Counter value +* +* This function sets the timebase counter +*/ +/* SourceId : ETPWM_SourceId_006 */ +/* DesignId : ETPWM_DesignId_006 */ +/* Requirements : HL_EPWM_SR4 */ +void etpwmSetCount(etpwmBASE_t *etpwm, uint16 count) +{ + etpwm->TBCTR = count; +} + +/** @fn void etpwmDisableTimebasePeriodShadowMode(etpwmBASE_t *etpwm) +* @brief Disable shadow mode for time-base period register +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* +* This function disables shadow mode for time-base period register +*/ +/* SourceId : ETPWM_SourceId_007 */ +/* DesignId : ETPWM_DesignId_007 */ +/* Requirements : HL_EPWM_SR5 */ +void etpwmDisableTimebasePeriodShadowMode(etpwmBASE_t *etpwm) +{ + etpwm->TBCTL |= 0x0008U; +} + +/** @fn void etpwmEnableTimebasePeriodShadowMode(etpwmBASE_t *etpwm) +* @brief Enable shadow mode for time-base period register +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* +* This function enables shadow mode for time-base period register +*/ +/* SourceId : ETPWM_SourceId_008 */ +/* DesignId : ETPWM_DesignId_008 */ +/* Requirements : HL_EPWM_SR5 */ +void etpwmEnableTimebasePeriodShadowMode(etpwmBASE_t *etpwm) +{ + etpwm->TBCTL &= (uint16)~(uint16)0x0008U; +} + +/** @fn void etpwmEnableCounterLoadOnSync(etpwmBASE_t *etpwm, uint16 phase, uint16 direction) +* @brief Enable counter register load from phase register when a sync event occurs +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param phase Counter value to be loaded when a sync event occurs +* @param direction Direction of the counter after the sync event (Applied only if counter is in updown-count mode, ignores otherwise) +* - COUNT_UP +* - COUNT_DOWN +* - Pass 0 if not applied +* +* This function enables counter register load from phase register when a sync event occurs +*/ +/* SourceId : ETPWM_SourceId_009 */ +/* DesignId : ETPWM_DesignId_009 */ +/* Requirements : HL_EPWM_SR6 */ +void etpwmEnableCounterLoadOnSync(etpwmBASE_t *etpwm, uint16 phase, uint16 direction) +{ + etpwm->TBCTL &= (uint16)~(uint16)0x2000U; + etpwm->TBCTL |= 0x0004U | direction; + etpwm->TBPHS = phase; +} + +/** @fn void etpwmDisableCounterLoadOnSync(etpwmBASE_t *etpwm) +* @brief Disable counter register load from phase register when a sync event occurs +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* +* This function disables counter register load from phase register when a sync event occurs +*/ +/* SourceId : ETPWM_SourceId_010 */ +/* DesignId : ETPWM_DesignId_010 */ +/* Requirements : HL_EPWM_SR6 */ +void etpwmDisableCounterLoadOnSync(etpwmBASE_t *etpwm) +{ + etpwm->TBCTL &= (uint16)~(uint16)0x0004U; +} + +/** @fn void etpwmSetSyncOut(etpwmBASE_t *etpwm, etpwmSyncMode_t syncmode) +* @brief Set the source of EPWMxSYNCO signal +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param syncOutSrc Synchronization Output Select +* - SyncOut_EPWMxSYNCI +* - SyncOut_CtrEqZero +* - SyncOut_CtrEqCmpB +* - SyncOut_Disable +* +* This function sets the source of synchronization output signal +*/ +/* SourceId : ETPWM_SourceId_011 */ +/* DesignId : ETPWM_DesignId_011 */ +/* Requirements : HL_EPWM_SR7 */ +void etpwmSetSyncOut(etpwmBASE_t *etpwm, etpwmSyncOut_t syncOutSrc) +{ + etpwm->TBCTL &= (uint16)~(uint16)0x0030U; + etpwm->TBCTL |= syncOutSrc; +} + +/** @fn void etpwmSetCounterMode(etpwmBASE_t *etpwm, etpwmCounterMode_t countermode) +* @brief Set the time-base counter mode +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param countermode Counter Mode +* - CounterMode_Up +* - Countermode_Down +* - CounterMode_UpDown +* - CounterMode_Stop +* +* This function sets the time-base counter mode of operation. +*/ +/* SourceId : ETPWM_SourceId_012 */ +/* DesignId : ETPWM_DesignId_012 */ +/* Requirements : HL_EPWM_SR8 */ +void etpwmSetCounterMode(etpwmBASE_t *etpwm, etpwmCounterMode_t countermode) +{ + etpwm->TBCTL &= (uint16)~(uint16)0x0003U; + etpwm->TBCTL |= countermode; +} + +/** @fn void etpwmTriggerSWSync(etpwmBASE_t *etpwm) +* @brief Trigger a software synchronization pulse +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* +* This function triggers a software synchronization pulse. SWFSYNC is valid (operates) only when EPWMxSYNCI as SyncOut +*/ +/* SourceId : ETPWM_SourceId_013 */ +/* DesignId : ETPWM_DesignId_013 */ +/* Requirements : HL_EPWM_SR9 */ +void etpwmTriggerSWSync(etpwmBASE_t *etpwm) +{ + etpwm->TBCTL |= 0x0040U; +} + +/** @fn void etpwmSetRunMode(etpwmBASE_t *etpwm, etpwmRunMode_t runmode) +* @brief Set the pulse width modulation (ETPWM) run mode +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param runmode Run mode +* - RunMode_SoftStopAfterIncr : Stop after the next time-base counter increment +* - RunMode_SoftStopAfterDecr : Stop after the next time-base counter decrement +* - RunMode_SoftStopAfterCycle : Stop when counter completes a whole cycle +* - RunMode_FreeRun : Free-run +* +* This function select the behaviour of the ePWM time-base counter during emulation events +*/ +/* SourceId : ETPWM_SourceId_014 */ +/* DesignId : ETPWM_DesignId_014 */ +/* Requirements : HL_EPWM_SR10 */ +void etpwmSetRunMode(etpwmBASE_t *etpwm, etpwmRunMode_t runmode) +{ + etpwm->TBCTL &= (uint16)~(uint16)0xC000U; + etpwm->TBCTL |= runmode; +} + +/** @fn void etpwmSetCmpA(etpwmBASE_t *etpwm, uint16 value) +* @brief Set the Compare A value +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param value 16-bit Compare A value +* +* This function sets the compare A value +*/ +/* SourceId : ETPWM_SourceId_015 */ +/* DesignId : ETPWM_DesignId_015 */ +/* Requirements : HL_EPWM_SR11 */ +void etpwmSetCmpA(etpwmBASE_t *etpwm, uint16 value) +{ + etpwm->CMPA = value; +} + +/** @fn void etpwmSetCmpB(etpwmBASE_t *etpwm, uint16 value) +* @brief Set the Compare B value +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param value 16-bit Compare B value +* +* This function sets the compare B register +*/ +/* SourceId : ETPWM_SourceId_016 */ +/* DesignId : ETPWM_DesignId_016 */ +/* Requirements : HL_EPWM_SR11 */ +void etpwmSetCmpB(etpwmBASE_t *etpwm, uint16 value) +{ + etpwm->CMPB = value; +} + +/** @fn void etpwmEnableCmpAShadowMode(etpwmBASE_t *etpwm, etpwmLoadMode_t loadmode) +* @brief Enable shadow mode for Compare A register +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param loadmode Active Counter-Compare A (CMPA) Load From Shadow Select Mode +* - LoadMode_CtrEqZero : Load on CTR = Zero +* - LoadMode_CtrEqPeriod : Load on CTR = PRD +* - LoadMode_CtrEqZeroPeriod : Load on either CTR = Zero or CTR = PRD +* - LoadMode_Freeze : Freeze (no loads possible) +* +* This function enables shadow mode for Compare A register +*/ +/* SourceId : ETPWM_SourceId_017 */ +/* DesignId : ETPWM_DesignId_017 */ +/* Requirements : HL_EPWM_SR12 */ +void etpwmEnableCmpAShadowMode(etpwmBASE_t *etpwm, etpwmLoadMode_t loadmode) +{ + etpwm->CMPCTL &= (uint16)~(uint16)0x0013U; + etpwm->CMPCTL |= loadmode; +} + +/** @fn void etpwmDisableCmpAShadowMode(etpwmBASE_t *etpwm) +* @brief Disable shadow mode for Compare A register +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* +* This function disables shadow mode for Compare A register +*/ +/* SourceId : ETPWM_SourceId_018 */ +/* DesignId : ETPWM_DesignId_018 */ +/* Requirements : HL_EPWM_SR12 */ +void etpwmDisableCmpAShadowMode(etpwmBASE_t *etpwm) +{ + etpwm->CMPCTL |= 0x0010U; +} + +/** @fn void etpwmEnableCmpBShadowMode(etpwmBASE_t *etpwm, etpwmLoadMode_t loadmode) +* @brief Enable shadow mode for Compare B register +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param loadmode Active Counter-Compare B (CMPB) Load From Shadow Select Mode +* - LoadMode_CtrEqZero : Load on CTR = Zero +* - LoadMode_CtrEqPeriod : Load on CTR = PRD +* - LoadMode_CtrEqZeroPeriod : Load on either CTR = Zero or CTR = PRD +* - LoadMode_Freeze : Freeze (no loads possible) +* +* This function enables shadow mode for Compare B register +*/ +/* SourceId : ETPWM_SourceId_019 */ +/* DesignId : ETPWM_DesignId_019 */ +/* Requirements : HL_EPWM_SR12 */ +void etpwmEnableCmpBShadowMode(etpwmBASE_t *etpwm, etpwmLoadMode_t loadmode) +{ + etpwm->CMPCTL &= (uint16)~(uint16)0x004CU; + etpwm->CMPCTL |= (uint16)((uint16)loadmode << 2U); +} + +/** @fn void etpwmDisableCmpBShadowMode(etpwmBASE_t *etpwm) +* @brief Disable shadow mode for Compare B register +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* +* This function disables shadow mode for Compare B register +*/ +/* SourceId : ETPWM_SourceId_020 */ +/* DesignId : ETPWM_DesignId_020 */ +/* Requirements : HL_EPWM_SR12 */ +void etpwmDisableCmpBShadowMode(etpwmBASE_t *etpwm) +{ + etpwm->CMPCTL |= 0x0040U; +} + +/** @fn void etpwmSetActionQualPwmA(etpwmBASE_t *etpwm, etpwmActionQualConfig_t actionqualconfig) +* @brief Configure Action Qualifier submodule to generate PWMA +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param actionqualconfig Action Qualifier configuration +* +* Example usage (Removing semicolons to avoid MISRA warnings): +* etpwmActionQualConfig_t configA +* configA.CtrEqZero_Action = ActionQual_Set +* configA.CtrEqPeriod_Action = ActionQual_Disabled +* configA.CtrEqCmpAUp_Action = ActionQual_Clear +* configA.CtrEqCmpADown_Action = ActionQual_Disabled +* configA.CtrEqCmpBUp_Action = ActionQual_Disabled +* configA.CtrEqCmpBDown_Action = ActionQual_Disabled +* void etpwmSetActionQualPwmA(etpwmREG1, configA) +* +* This function configures Action Qualifier submodule to generate PWMA +*/ +/* SourceId : ETPWM_SourceId_021 */ +/* DesignId : ETPWM_DesignId_021 */ +/* Requirements : HL_EPWM_SR13 */ +void etpwmSetActionQualPwmA(etpwmBASE_t *etpwm, etpwmActionQualConfig_t actionqualconfig) +{ + etpwm->AQCTLA = ((uint16)((uint16)actionqualconfig.CtrEqZero_Action << 0U) | + (uint16)((uint16)actionqualconfig.CtrEqPeriod_Action << 2U) | + (uint16)((uint16)actionqualconfig.CtrEqCmpAUp_Action << 4U) | + (uint16)((uint16)actionqualconfig.CtrEqCmpADown_Action << 6U) | + (uint16)((uint16)actionqualconfig.CtrEqCmpBUp_Action << 8U) | + (uint16)((uint16)actionqualconfig.CtrEqCmpBDown_Action << 10U)); + +} + +/** @fn void etpwmSetActionQualPwmB(etpwmBASE_t *etpwm, etpwmActionQualConfig_t actionqualconfig) +* @brief Configure Action Qualifier submodule to generate PWMB +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param actionqualconfig Action Qualifier configuration +* +* Example usage (Removing semicolons to avoid MISRA warnings): +* etpwmActionQualConfig_t configB +* configB.CtrEqZero_Action = ActionQual_Set +* configB.CtrEqPeriod_Action = ActionQual_Disabled +* configB.CtrEqCmpAUp_Action = ActionQual_Disabled +* configB.CtrEqCmpADown_Action = ActionQual_Disabled +* configB.CtrEqCmpBUp_Action = ActionQual_Clear +* configB.CtrEqCmpBDown_Action = ActionQual_Disabled +* void etpwmSetActionQualPwmB(etpwmREG1, configB) +* +* This function configures Action Qualifier submodule to generate PWMB +*/ +/* SourceId : ETPWM_SourceId_022 */ +/* DesignId : ETPWM_DesignId_022 */ +/* Requirements : HL_EPWM_SR13 */ +void etpwmSetActionQualPwmB(etpwmBASE_t *etpwm, etpwmActionQualConfig_t actionqualconfig) +{ + etpwm->AQCTLB = ((uint16)((uint16)actionqualconfig.CtrEqZero_Action << 0U) | + (uint16)((uint16)actionqualconfig.CtrEqPeriod_Action << 2U) | + (uint16)((uint16)actionqualconfig.CtrEqCmpAUp_Action << 4U) | + (uint16)((uint16)actionqualconfig.CtrEqCmpADown_Action << 6U) | + (uint16)((uint16)actionqualconfig.CtrEqCmpBUp_Action << 8U) | + (uint16)((uint16)actionqualconfig.CtrEqCmpBDown_Action << 10U)); + +} + +/** @fn void etpwmEnableDeadBand(etpwmBASE_t *etpwm, etpwmDeadBandConfig_t deadbandconfig) +* @brief Enable DeadBand module +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param deadbandconfig DeadBand configuration +* +* This function configures Action Qualifier submodule to generate PWMB +*/ +/* SourceId : ETPWM_SourceId_023 */ +/* DesignId : ETPWM_DesignId_023 */ +/* Requirements : HL_EPWM_SR14 */ +void etpwmEnableDeadBand(etpwmBASE_t *etpwm, etpwmDeadBandConfig_t deadbandconfig) +{ + uint16 halfCycleMask = (uint16)((deadbandconfig.halfCycleEnable) ? 0x8000U : 0U); + etpwm->DBCTL = ((uint16)deadbandconfig.inputmode | + (uint16)deadbandconfig.outputmode | + (uint16)deadbandconfig.polarity | + halfCycleMask); +} + +/** @fn void etpwmDisableDeadband(etpwmBASE_t *etpwm) +* @brief Disable DeadBand module +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* +* This function bypasses the Deadband submodule +*/ +/* SourceId : ETPWM_SourceId_024 */ +/* DesignId : ETPWM_DesignId_024 */ +/* Requirements : HL_EPWM_SR14 */ +void etpwmDisableDeadband(etpwmBASE_t *etpwm) +{ + etpwm->DBCTL = 0U; +} + +/** @fn void etpwmSetDeadBandDelay(etpwmBASE_t *etpwm, uint16 Rdelay, uint16 Fdelay) +* @brief Sets the rising and falling edge delay +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param Rdelay 16-bit rising edge delay in terms of TCLK ticks +* @param Fdelay 16-bit falling edge delay in terms of TCLK ticks +* +* This function sets the rising and falling edge delays in the DeadBand submodule +*/ +/* SourceId : ETPWM_SourceId_025 */ +/* DesignId : ETPWM_DesignId_025 */ +/* Requirements : HL_EPWM_SR14 */ +void etpwmSetDeadBandDelay(etpwmBASE_t *etpwm, uint16 Rdelay, uint16 Fdelay) +{ + etpwm->DBRED = Rdelay; + etpwm->DBFED = Fdelay; +} + +/** @fn void etpwmEnableChopping(etpwmBASE_t *etpwm, etpwmChoppingConfig_t choppingconfig) +* @brief Enable chopping +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param choppingconfig Chopper submodule configuration +* +* This function enables the chopper submodule with the given configuration +*/ +/* SourceId : ETPWM_SourceId_026 */ +/* DesignId : ETPWM_DesignId_026 */ +/* Requirements : HL_EPWM_SR15 */ +void etpwmEnableChopping(etpwmBASE_t *etpwm, etpwmChoppingConfig_t choppingconfig) +{ + etpwm->PCCTL = ((uint16)0x0001U | + (uint16)choppingconfig.oswdth | + (uint16)choppingconfig.freq | + (uint16)choppingconfig.duty); +} + +/** @fn void etpwmDisableChopping(etpwmBASE_t *etpwm) +* @brief Disable chopping +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* +* This function disables the chopper submodule +*/ +/* SourceId : ETPWM_SourceId_027 */ +/* DesignId : ETPWM_DesignId_027 */ +/* Requirements : HL_EPWM_SR15 */ +void etpwmDisableChopping(etpwmBASE_t *etpwm) +{ + etpwm->PCCTL = 0U; +} + +/** @fn void etpwmEnableTripZoneSources(etpwmBASE_t *etpwm, etpwmTripZoneSrc_t sources) +* @brief Select the tripzone zources +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param sources Trip zone sources (sources can be ORed) +* - CycleByCycle_TZ1 : Enable TZ1 as a Cycle-by-cycle trip source +* - CycleByCycle_TZ2 : Enable TZ2 as a Cycle-by-cycle trip source +* - CycleByCycle_TZ3 : Enable TZ3 as a Cycle-by-cycle trip source +* - CycleByCycle_TZ4 : Enable TZ4 as a Cycle-by-cycle trip source +* - CycleByCycle_TZ5 : Enable TZ5 as a Cycle-by-cycle trip source +* - CycleByCycle_TZ6 : Enable TZ6 as a Cycle-by-cycle trip source +* - CycleByCycle_DCAEVT2 : Enable DCAEVT2 as a Cycle-by-cycle trip source +* - CycleByCycle_DCBEVT2 : Enable DCBEVT2 as a Cycle-by-cycle trip source +* - OneShot_TZ1 : Enable TZ1 as a One-shot trip source +* - OneShot_TZ2 : Enable TZ2 as a One-shot trip source +* - OneShot_TZ3 : Enable TZ3 as a One-shot trip source +* - OneShot_TZ4 : Enable TZ4 as a One-shot trip source +* - OneShot_TZ5 : Enable TZ5 as a One-shot trip source +* - OneShot_TZ6 : Enable TZ6 as a One-shot trip source +* - OneShot_DCAEVT1 : Enable DCAEVT1 as a One-shot trip source +* - OneShot_DCBEVT1 : Enable DCBEVT1 as a One-shot trip source +* +* This function selects the tripzone sources for cycle-by-cycle and one-shot trip +*/ +/* SourceId : ETPWM_SourceId_028 */ +/* DesignId : ETPWM_DesignId_028 */ +/* Requirements : HL_EPWM_SR16 */ +void etpwmEnableTripZoneSources(etpwmBASE_t *etpwm, etpwmTripZoneSrc_t sources) +{ + etpwm->TZSEL |= sources; +} + +/** @fn void etpwmEnableTripZoneSources(etpwmBASE_t *etpwm, etpwmTripZoneSrc_t sources) +* @brief Disable the tripzone zources +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param sources Trip zone sources (sources can be ORed) +* - CycleByCycle_TZ1 : Disable TZ1 as a Cycle-by-cycle trip source +* - CycleByCycle_TZ2 : Disable TZ2 as a Cycle-by-cycle trip source +* - CycleByCycle_TZ3 : Disable TZ3 as a Cycle-by-cycle trip source +* - CycleByCycle_TZ4 : Disable TZ4 as a Cycle-by-cycle trip source +* - CycleByCycle_TZ5 : Disable TZ5 as a Cycle-by-cycle trip source +* - CycleByCycle_TZ6 : Disable TZ6 as a Cycle-by-cycle trip source +* - CycleByCycle_DCAEVT2 : Disable DCAEVT2 as a Cycle-by-cycle trip source +* - CycleByCycle_DCBEVT2 : Disable DCBEVT2 as a Cycle-by-cycle trip source +* - OneShot_TZ1 : Disable TZ1 as a One-shot trip source +* - OneShot_TZ2 : Disable TZ2 as a One-shot trip source +* - OneShot_TZ3 : Disable TZ3 as a One-shot trip source +* - OneShot_TZ4 : Disable TZ4 as a One-shot trip source +* - OneShot_TZ5 : Disable TZ5 as a One-shot trip source +* - OneShot_TZ6 : Disable TZ6 as a One-shot trip source +* - OneShot_DCAEVT1 : Disable DCAEVT1 as a One-shot trip source +* - OneShot_DCBEVT1 : Disable DCBEVT1 as a One-shot trip source +* +* This function disables the tripzone sources for cycle-by-cycle or one-shot trip +*/ +/* SourceId : ETPWM_SourceId_029 */ +/* DesignId : ETPWM_DesignId_029 */ +/* Requirements : HL_EPWM_SR16 */ +void etpwmDisableTripZoneSources(etpwmBASE_t *etpwm, etpwmTripZoneSrc_t sources) +{ + etpwm->TZSEL &= (uint16)~(uint16)sources; +} + +/** @fn void etpwmSetTripAction(etpwmBASE_t *etpwm, etpwmTripActionConfig_t tripactionconfig) +* @brief Set the action for each trip event +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param tripactionconfig Trip action configuration +* +* This function sets the action for each trip event +*/ +/* SourceId : ETPWM_SourceId_030 */ +/* DesignId : ETPWM_DesignId_030 */ +/* Requirements : HL_EPWM_SR17 */ +void etpwmSetTripAction(etpwmBASE_t *etpwm, etpwmTripActionConfig_t tripactionconfig) +{ + etpwm->TZCTL = ((uint16)((uint16)tripactionconfig.TripEvent_ActionOnPWMA << 0U) | + (uint16)((uint16)tripactionconfig.TripEvent_ActionOnPWMB << 2U) | + (uint16)((uint16)tripactionconfig.DCAEVT1_ActionOnPWMA << 4U) | + (uint16)((uint16)tripactionconfig.DCAEVT2_ActionOnPWMA << 6U) | + (uint16)((uint16)tripactionconfig.DCBEVT1_ActionOnPWMB << 8U) | + (uint16)((uint16)tripactionconfig.DCBEVT2_ActionOnPWMB << 10U)); +} + +/** @fn void etpwmEnableTripInterrupt(etpwmBASE_t *etpwm, etpwmTrip_t interrupts) +* @brief Enables interrupt(EPWMx_TZINT) for the trip event +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param interrupts Interrupts to be enabled (Interrupts can be ORed) +* - CycleByCycleTrip +* - OneShotTrip +* - DCAEVT1_inter +* - DCAEVT2_inter +* - DCBEVT1_inter +* - DCBEVT2_inter +* +* This function enables interrupt(EPWMx_TZINT) for the trip event +*/ +/* SourceId : ETPWM_SourceId_031 */ +/* DesignId : ETPWM_DesignId_031 */ +/* Requirements : HL_EPWM_SR18 */ +void etpwmEnableTripInterrupt(etpwmBASE_t *etpwm, etpwmTrip_t interrupts) +{ + etpwm->TZEINT |= interrupts; +} + +/** @fn void etpwmDisableTripInterrupt(etpwmBASE_t *etpwm, etpwmTrip_t interrupts) +* @brief Disables interrupt(EPWMx_TZINT) for the trip event +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param interrupts Trip Interrupts to be disabled (Interrupts can be ORed) +* - CycleByCycleTrip +* - OneShotTrip +* - DCAEVT1_inter +* - DCAEVT2_inter +* - DCBEVT1_inter +* - DCBEVT2_inter +* +* This function disables interrupt(EPWMx_TZINT) for the trip event +*/ +/* SourceId : ETPWM_SourceId_032 */ +/* DesignId : ETPWM_DesignId_032 */ +/* Requirements : HL_EPWM_SR18 */ +void etpwmDisableTripInterrupt(etpwmBASE_t *etpwm, etpwmTrip_t interrupts) +{ + etpwm->TZEINT &= (uint16)~(uint16)interrupts; +} + +/** @fn void etpwmClearTripCondition(etpwmBASE_t *etpwm, etpwmTrip_t trips) +* @brief Clears the trip event flag +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param trips Trip events +* - CycleByCycleTrip +* - OneShotTrip +* - DCAEVT1_inter +* - DCAEVT2_inter +* - DCBEVT1_inter +* - DCBEVT2_inter +* +* This function clears the trip event / Digital Compare output event flag +*/ +/* SourceId : ETPWM_SourceId_033 */ +/* DesignId : ETPWM_DesignId_033 */ +/* Requirements : HL_EPWM_SR19 */ +void etpwmClearTripCondition(etpwmBASE_t *etpwm, etpwmTrip_t trips) +{ + etpwm->TZCLR = trips; +} + +/** @fn void etpwmClearTripInterruptFlag(etpwmBASE_t *etpwm) +* @brief Clears the trip interrupt flag +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* +* This function clears the trip interrupt flag +*/ +/* SourceId : ETPWM_SourceId_034 */ +/* DesignId : ETPWM_DesignId_034 */ +/* Requirements : HL_EPWM_SR19 */ +void etpwmClearTripInterruptFlag(etpwmBASE_t *etpwm) +{ + etpwm->TZCLR = 1U; +} + +/** @fn void etpwmForceTripEvent(etpwmBASE_t *etpwm, etpwmTrip_t trip) +* @brief Force a trip event +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param trip Trip events +* - CycleByCycleTrip +* - OneShotTrip +* - DCAEVT1_inter +* - DCAEVT2_inter +* - DCBEVT1_inter +* - DCBEVT2_inter +* +* This function forces a trip event / Digital Compare trip event via software +*/ +/* SourceId : ETPWM_SourceId_035 */ +/* DesignId : ETPWM_DesignId_035 */ +/* Requirements : HL_EPWM_SR20 */ +void etpwmForceTripEvent(etpwmBASE_t *etpwm, etpwmTrip_t trip) +{ + etpwm->TZFRC = trip; +} + +/** @fn void etpwmEnableSOCA(etpwmBASE_t *etpwm, etpwmEventSrc_t eventsource, etpwmEventPeriod_t eventperiod) +* @brief Enable ADC Start of Conversion A pulse +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param eventsource EPWMxSOCA Selection Options +* - DCAEVT1 : DCAEVT1.soc event +* - CTR_ZERO : Event CTR = Zero +* - CTR_PRD : Event CTR = PRD +* - CTR_ZERO_PRD : Event CTR = Zero or CTR = PRD +* - CTR_UP_CMPA : Event CTR = CMPA when the timer is incrementing +* - CTR_D0WM_CMPA : Event CTR = CMPA when the timer is decrementing +* - CTR_UP_CMPB : Event CTR = CMPB when the timer is incrementing +* - CTR_D0WM_CMPB : Event CTR = CMPB when the timer is decrementing +* @param eventperiod EPWMxSOCA Period Select +* - EventPeriod_FirstEvent : Generate SOCA pulse on the first event +* - EventPeriod_SecondEvent : Generate SOCA pulse on the second event +* - EventPeriod_ThirdEvent : Generate SOCA pulse on the third event +* +* This function enables ADC Start of Conversion A pulse +*/ +/* SourceId : ETPWM_SourceId_036 */ +/* DesignId : ETPWM_DesignId_036 */ +/* Requirements : HL_EPWM_SR21 */ +void etpwmEnableSOCA(etpwmBASE_t *etpwm, etpwmEventSrc_t eventsource, etpwmEventPeriod_t eventperiod) +{ + etpwm->ETSEL &= 0xF0FFU; + etpwm->ETSEL |= (uint16)((uint16)1U << 11U) | (uint16)((uint16)eventsource << 8U); + + etpwm->ETPS &= 0xF0FFU; + etpwm->ETPS |= (uint16)((uint16)eventperiod << 8U); +} + +/** @fn void etpwmDisableSOCA(etpwmBASE_t *etpwm) +* @brief Disable ADC Start of Conversion A pulse +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* +* This function disables ADC Start of Conversion A pulse +*/ +/* SourceId : ETPWM_SourceId_037 */ +/* DesignId : ETPWM_DesignId_037 */ +/* Requirements : HL_EPWM_SR21 */ +void etpwmDisableSOCA(etpwmBASE_t *etpwm) +{ + etpwm->ETSEL &= 0xF0FFU; +} + +/** @fn void etpwmEnableSOCB(etpwmBASE_t *etpwm, etpwmEventSrc_t eventsource, etpwmEventPeriod_t eventperiod) +* @brief Enable ADC Start of Conversion B pulse +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param eventsource EPWMxSOCB Selection Options +* - DCBEVT1 : DCBEVT1.soc event +* - CTR_ZERO : Event CTR = Zero +* - CTR_PRD : Event CTR = PRD +* - CTR_ZERO_PRD : Event CTR = Zero or CTR = PRD +* - CTR_UP_CMPA : Event CTR = CMPA when the timer is incrementing +* - CTR_D0WM_CMPA : Event CTR = CMPA when the timer is decrementing +* - CTR_UP_CMPB : Event CTR = CMPB when the timer is incrementing +* - CTR_D0WM_CMPB : Event CTR = CMPB when the timer is decrementing +* @param eventperiod EPWMxSOCB Period Select +* - EventPeriod_FirstEvent : Generate SOCB pulse on the first event +* - EventPeriod_SecondEvent : Generate SOCB pulse on the second event +* - EventPeriod_ThirdEvent : Generate SOCB pulse on the third event +* +* This function enables ADC Start of Conversion B pulse +*/ +/* SourceId : ETPWM_SourceId_038 */ +/* DesignId : ETPWM_DesignId_038 */ +/* Requirements : HL_EPWM_SR21 */ +void etpwmEnableSOCB(etpwmBASE_t *etpwm, etpwmEventSrc_t eventsource, etpwmEventPeriod_t eventperiod) +{ + etpwm->ETSEL &= 0x0FFFU; + etpwm->ETSEL |= (uint16)((uint16)1U << 15U) | (uint16)((uint16)eventsource << 12U); + + etpwm->ETPS &= 0x0FFFU; + etpwm->ETPS |= (uint16)((uint16)eventperiod << 12U); +} + +/** @fn void etpwmDisableSOCB(etpwmBASE_t *etpwm) +* @brief Disable ADC Start of Conversion B pulse +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* +* This function disables ADC Start of Conversion B pulse +*/ +/* SourceId : ETPWM_SourceId_039 */ +/* DesignId : ETPWM_DesignId_039 */ +/* Requirements : HL_EPWM_SR21 */ +void etpwmDisableSOCB(etpwmBASE_t *etpwm) +{ + etpwm->ETSEL &= 0x0FFFU; +} + +/** @fn void etpwmEnableInterrupt(etpwmBASE_t *etpwm, etpwmEventSrc_t eventsource, etpwmEventPeriod_t eventperiod) +* @brief Enable ePWM Interrupt +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param eventsource EPWMx_INT Selection Options +* - CTR_ZERO : Event CTR = Zero +* - CTR_PRD : Event CTR = PRD +* - CTR_ZERO_PRD : Event CTR = Zero or CTR = PRD +* - CTR_UP_CMPA : Event CTR = CMPA when the timer is incrementing +* - CTR_D0WM_CMPA : Event CTR = CMPA when the timer is decrementing +* - CTR_UP_CMPB : Event CTR = CMPB when the timer is incrementing +* - CTR_D0WM_CMPB : Event CTR = CMPB when the timer is decrementing +* @param eventperiod EPWMx_INT Period Select +* - EventPeriod_FirstEvent : Generate interrupt on the first event +* - EventPeriod_SecondEvent : Generate interrupt on the second event +* - EventPeriod_ThirdEvent : Generate interrupt on the third event +* +* This function enables EPWMx_INT generation +*/ +/* SourceId : ETPWM_SourceId_040 */ +/* DesignId : ETPWM_DesignId_040 */ +/* Requirements : HL_EPWM_SR22 */ +void etpwmEnableInterrupt(etpwmBASE_t *etpwm, etpwmEventSrc_t eventsource, etpwmEventPeriod_t eventperiod) +{ + etpwm->ETSEL &= 0xFFF0U; + etpwm->ETSEL |= (uint16)((uint16)1U << 3U) | (uint16)((uint16)eventsource << 0U); + + etpwm->ETPS &= 0xFFF0U; + etpwm->ETPS |= (uint16)((uint16)eventperiod << 0U); +} + +/** @fn void etpwmDisableInterrupt(etpwmBASE_t *etpwm) +* @brief Disable ePWM Interrupt +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* +* This function disables EPWMx_INT generation +*/ +/* SourceId : ETPWM_SourceId_041 */ +/* DesignId : ETPWM_DesignId_041 */ +/* Requirements : HL_EPWM_SR22 */ +void etpwmDisableInterrupt(etpwmBASE_t *etpwm) +{ + etpwm->ETSEL &= 0xFFF0U; +} + +/** @fn uint16 etpwmGetEventStatus(etpwmBASE_t *etpwm) +* @brief Return event status flag +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @return event status flag +* Bit 0: ePWM Interrupt(EPWMx_INT) Status Flag +* Bit 2: ePWM ADC Start-of-Conversion A (EPWMxSOCA) Status Flag +* Bit 3: ePWM ADC Start-of-Conversion B (EPWMxSOCB) Status Flag +* +* This function returns the event status flags +*/ +/* SourceId : ETPWM_SourceId_042 */ +/* DesignId : ETPWM_DesignId_042 */ +/* Requirements : HL_EPWM_SR23 */ +uint16 etpwmGetEventStatus(etpwmBASE_t *etpwm) +{ + return etpwm->ETFLG; +} + +/** @fn void etpwmClearEventFlag(etpwmBASE_t *etpwm, etpwmEvent_t events) +* @brief Clear event status flag +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param events status flag (flags can be ORed) +* - Event_Interrupt +* - Event_SOCA +* - Event_SOCB +* +* This function clears the event status flags +*/ +/* SourceId : ETPWM_SourceId_043 */ +/* DesignId : ETPWM_DesignId_043 */ +/* Requirements : HL_EPWM_SR24 */ +void etpwmClearEventFlag(etpwmBASE_t *etpwm, etpwmEvent_t events) +{ + etpwm->ETCLR = events; +} + +/** @fn void etpwmTriggerEvent(etpwmBASE_t *etpwm, etpwmEvent_t events) +* @brief Force an event +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @return events (events can be ORed) +* - Event_Interrupt +* - Event_SOCA +* - Event_SOCB +* +* This function forces an event +*/ +/* SourceId : ETPWM_SourceId_044 */ +/* DesignId : ETPWM_DesignId_044 */ +/* Requirements : HL_EPWM_SR25 */ +void etpwmTriggerEvent(etpwmBASE_t *etpwm, etpwmEvent_t events) +{ + etpwm->ETFRC = events; +} + +/** @fn void etpwmEnableDigitalCompareEvents(etpwmBASE_t *etpwm, etpwmDigitalCompareConfig_t digitalcompareconfig) +* @brief Enable and configure digital compare events +* +* @param etpwm The pulse width modulation (ETPWM) object handle (etpwmREG1..7) +* @param digitalcompareconfig Digital Compare modue configuration +* +* Example usage (Removing semicolons to avoid MISRA warnings): +* etpwmDigitalCompareConfig_t config1 +* config1.DCAH_src = TZ1 +* config1.DCAL_src = TZ2 +* config1.DCBH_src = TZ1 +* config1.DCBL_src = TZ3 +* config1.DCAEVT1_event = DCAH_High +* config1.DCAEVT2_event = DCAL_High +* config1.DCBEVT1_event = DCBL_High +* config1.DCBEVT2_event = DCBL_High_DCBH_low +* etpwmEnableDigitalCompareEvents(etpwmREG1, config1) +* +* This function enbales and configures the digital compare events. HTis function can also be used to disable digital compare events +*/ +/* SourceId : ETPWM_SourceId_045 */ +/* DesignId : ETPWM_DesignId_045 */ +/* Requirements : HL_EPWM_SR26 */ +void etpwmEnableDigitalCompareEvents(etpwmBASE_t *etpwm, etpwmDigitalCompareConfig_t digitalcompareconfig) +{ + etpwm->DCTRIPSEL = ((uint16)((uint16)digitalcompareconfig.DCAH_src << 0U) | + (uint16)((uint16)digitalcompareconfig.DCAL_src << 4U) | + (uint16)((uint16)digitalcompareconfig.DCBH_src << 8U) | + (uint16)((uint16)digitalcompareconfig.DCBL_src << 12U)); + + etpwm->TZDCSEL = ((uint16)((uint16)digitalcompareconfig.DCAEVT1_event << 0U) | + (uint16)((uint16)digitalcompareconfig.DCAEVT2_event << 3U) | + (uint16)((uint16)digitalcompareconfig.DCBEVT1_event << 6U) | + (uint16)((uint16)digitalcompareconfig.DCBEVT2_event << 9U)); +} + +/** @fn void etpwm1GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ETPWM_SourceId_046 */ +/* DesignId : ETPWM_DesignId_046 */ +/* Requirements : HL_EPWM_SR32 */ +void etpwm1GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_TBCTL = ETPWM1_TBCTL_CONFIGVALUE; + config_reg->CONFIG_TBPHS = ETPWM1_TBPHS_CONFIGVALUE; + config_reg->CONFIG_TBPRD = ETPWM1_TBPRD_CONFIGVALUE; + config_reg->CONFIG_CMPCTL = ETPWM1_CMPCTL_CONFIGVALUE; + config_reg->CONFIG_CMPA = ETPWM1_CMPA_CONFIGVALUE; + config_reg->CONFIG_CMPB = ETPWM1_CMPB_CONFIGVALUE; + config_reg->CONFIG_AQCTLA = ETPWM1_AQCTLA_CONFIGVALUE; + config_reg->CONFIG_AQCTLB = ETPWM1_AQCTLB_CONFIGVALUE; + config_reg->CONFIG_DBCTL = ETPWM1_DBCTL_CONFIGVALUE; + config_reg->CONFIG_DBRED = ETPWM1_DBRED_CONFIGVALUE; + config_reg->CONFIG_DBFED = ETPWM1_DBFED_CONFIGVALUE; + config_reg->CONFIG_TZSEL = ETPWM1_TZSEL_CONFIGVALUE; + config_reg->CONFIG_TZDCSEL = ETPWM1_TZDCSEL_CONFIGVALUE; + config_reg->CONFIG_TZCTL = ETPWM1_TZCTL_CONFIGVALUE; + config_reg->CONFIG_TZEINT = ETPWM1_TZEINT_CONFIGVALUE; + config_reg->CONFIG_ETSEL = ETPWM1_ETSEL_CONFIGVALUE; + config_reg->CONFIG_ETPS = ETPWM1_ETPS_CONFIGVALUE; + config_reg->CONFIG_PCCTL = ETPWM1_PCCTL_CONFIGVALUE; + config_reg->CONFIG_DCTRIPSEL = ETPWM1_DCTRIPSEL_CONFIGVALUE; + config_reg->CONFIG_DCACTL = ETPWM1_DCACTL_CONFIGVALUE; + config_reg->CONFIG_DCBCTL = ETPWM1_DCBCTL_CONFIGVALUE; + config_reg->CONFIG_DCFCTL = ETPWM1_DCFCTL_CONFIGVALUE; + config_reg->CONFIG_DCCAPCTL = ETPWM1_DCCAPCTL_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOW = ETPWM1_DCFWINDOW_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOWCNT = ETPWM1_DCFWINDOWCNT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_TBCTL = etpwmREG1->TBCTL; + config_reg->CONFIG_TBPHS = etpwmREG1->TBPHS; + config_reg->CONFIG_TBPRD = etpwmREG1->TBPRD; + config_reg->CONFIG_CMPCTL = etpwmREG1->CMPCTL; + config_reg->CONFIG_CMPA = etpwmREG1->CMPA; + config_reg->CONFIG_CMPB = etpwmREG1->CMPB; + config_reg->CONFIG_AQCTLA = etpwmREG1->AQCTLA; + config_reg->CONFIG_AQCTLB = etpwmREG1->AQCTLB; + config_reg->CONFIG_DBCTL = etpwmREG1->DBCTL; + config_reg->CONFIG_DBRED = etpwmREG1->DBRED; + config_reg->CONFIG_DBFED = etpwmREG1->DBFED; + config_reg->CONFIG_TZSEL = etpwmREG1->TZSEL; + config_reg->CONFIG_TZDCSEL = etpwmREG1->TZDCSEL; + config_reg->CONFIG_TZCTL = etpwmREG1->TZCTL; + config_reg->CONFIG_TZEINT = etpwmREG1->TZEINT; + config_reg->CONFIG_ETSEL = etpwmREG1->ETSEL; + config_reg->CONFIG_ETPS = etpwmREG1->ETPS; + config_reg->CONFIG_PCCTL = etpwmREG1->PCCTL; + config_reg->CONFIG_DCTRIPSEL = etpwmREG1->DCTRIPSEL; + config_reg->CONFIG_DCACTL = etpwmREG1->DCACTL; + config_reg->CONFIG_DCBCTL = etpwmREG1->DCBCTL; + config_reg->CONFIG_DCFCTL = etpwmREG1->DCFCTL; + config_reg->CONFIG_DCCAPCTL = etpwmREG1->DCCAPCTL; + config_reg->CONFIG_DCFWINDOW = etpwmREG1->DCFWINDOW; + config_reg->CONFIG_DCFWINDOWCNT = etpwmREG1->DCFWINDOWCNT; + } +} + +/** @fn void etpwm2GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ETPWM_SourceId_47 */ +/* DesignId : ETPWM_DesignId_046 */ +/* Requirements : HL_EPWM_SR32 */ +void etpwm2GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_TBCTL = ETPWM2_TBCTL_CONFIGVALUE; + config_reg->CONFIG_TBPHS = ETPWM2_TBPHS_CONFIGVALUE; + config_reg->CONFIG_TBPRD = ETPWM2_TBPRD_CONFIGVALUE; + config_reg->CONFIG_CMPCTL = ETPWM2_CMPCTL_CONFIGVALUE; + config_reg->CONFIG_CMPA = ETPWM2_CMPA_CONFIGVALUE; + config_reg->CONFIG_CMPB = ETPWM2_CMPB_CONFIGVALUE; + config_reg->CONFIG_AQCTLA = ETPWM2_AQCTLA_CONFIGVALUE; + config_reg->CONFIG_AQCTLB = ETPWM2_AQCTLB_CONFIGVALUE; + config_reg->CONFIG_DBCTL = ETPWM2_DBCTL_CONFIGVALUE; + config_reg->CONFIG_DBRED = ETPWM2_DBRED_CONFIGVALUE; + config_reg->CONFIG_DBFED = ETPWM2_DBFED_CONFIGVALUE; + config_reg->CONFIG_TZSEL = ETPWM2_TZSEL_CONFIGVALUE; + config_reg->CONFIG_TZDCSEL = ETPWM2_TZDCSEL_CONFIGVALUE; + config_reg->CONFIG_TZCTL = ETPWM2_TZCTL_CONFIGVALUE; + config_reg->CONFIG_TZEINT = ETPWM2_TZEINT_CONFIGVALUE; + config_reg->CONFIG_ETSEL = ETPWM2_ETSEL_CONFIGVALUE; + config_reg->CONFIG_ETPS = ETPWM2_ETPS_CONFIGVALUE; + config_reg->CONFIG_PCCTL = ETPWM2_PCCTL_CONFIGVALUE; + config_reg->CONFIG_DCTRIPSEL = ETPWM2_DCTRIPSEL_CONFIGVALUE; + config_reg->CONFIG_DCACTL = ETPWM2_DCACTL_CONFIGVALUE; + config_reg->CONFIG_DCBCTL = ETPWM2_DCBCTL_CONFIGVALUE; + config_reg->CONFIG_DCFCTL = ETPWM2_DCFCTL_CONFIGVALUE; + config_reg->CONFIG_DCCAPCTL = ETPWM2_DCCAPCTL_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOW = ETPWM2_DCFWINDOW_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOWCNT = ETPWM2_DCFWINDOWCNT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_TBCTL = etpwmREG2->TBCTL; + config_reg->CONFIG_TBPHS = etpwmREG2->TBPHS; + config_reg->CONFIG_TBPRD = etpwmREG2->TBPRD; + config_reg->CONFIG_CMPCTL = etpwmREG2->CMPCTL; + config_reg->CONFIG_CMPA = etpwmREG2->CMPA; + config_reg->CONFIG_CMPB = etpwmREG2->CMPB; + config_reg->CONFIG_AQCTLA = etpwmREG2->AQCTLA; + config_reg->CONFIG_AQCTLB = etpwmREG2->AQCTLB; + config_reg->CONFIG_DBCTL = etpwmREG2->DBCTL; + config_reg->CONFIG_DBRED = etpwmREG2->DBRED; + config_reg->CONFIG_DBFED = etpwmREG2->DBFED; + config_reg->CONFIG_TZSEL = etpwmREG2->TZSEL; + config_reg->CONFIG_TZDCSEL = etpwmREG2->TZDCSEL; + config_reg->CONFIG_TZCTL = etpwmREG2->TZCTL; + config_reg->CONFIG_TZEINT = etpwmREG2->TZEINT; + config_reg->CONFIG_ETSEL = etpwmREG2->ETSEL; + config_reg->CONFIG_ETPS = etpwmREG2->ETPS; + config_reg->CONFIG_PCCTL = etpwmREG2->PCCTL; + config_reg->CONFIG_DCTRIPSEL = etpwmREG2->DCTRIPSEL; + config_reg->CONFIG_DCACTL = etpwmREG2->DCACTL; + config_reg->CONFIG_DCBCTL = etpwmREG2->DCBCTL; + config_reg->CONFIG_DCFCTL = etpwmREG2->DCFCTL; + config_reg->CONFIG_DCCAPCTL = etpwmREG2->DCCAPCTL; + config_reg->CONFIG_DCFWINDOW = etpwmREG2->DCFWINDOW; + config_reg->CONFIG_DCFWINDOWCNT = etpwmREG2->DCFWINDOWCNT; + } +} + +/** @fn void etpwm3GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ETPWM_SourceId_048 */ +/* DesignId : ETPWM_DesignId_046 */ +/* Requirements : HL_EPWM_SR32 */ +void etpwm3GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_TBCTL = ETPWM3_TBCTL_CONFIGVALUE; + config_reg->CONFIG_TBPHS = ETPWM3_TBPHS_CONFIGVALUE; + config_reg->CONFIG_TBPRD = ETPWM3_TBPRD_CONFIGVALUE; + config_reg->CONFIG_CMPCTL = ETPWM3_CMPCTL_CONFIGVALUE; + config_reg->CONFIG_CMPA = ETPWM3_CMPA_CONFIGVALUE; + config_reg->CONFIG_CMPB = ETPWM3_CMPB_CONFIGVALUE; + config_reg->CONFIG_AQCTLA = ETPWM3_AQCTLA_CONFIGVALUE; + config_reg->CONFIG_AQCTLB = ETPWM3_AQCTLB_CONFIGVALUE; + config_reg->CONFIG_DBCTL = ETPWM3_DBCTL_CONFIGVALUE; + config_reg->CONFIG_DBRED = ETPWM3_DBRED_CONFIGVALUE; + config_reg->CONFIG_DBFED = ETPWM3_DBFED_CONFIGVALUE; + config_reg->CONFIG_TZSEL = ETPWM3_TZSEL_CONFIGVALUE; + config_reg->CONFIG_TZDCSEL = ETPWM3_TZDCSEL_CONFIGVALUE; + config_reg->CONFIG_TZCTL = ETPWM3_TZCTL_CONFIGVALUE; + config_reg->CONFIG_TZEINT = ETPWM3_TZEINT_CONFIGVALUE; + config_reg->CONFIG_ETSEL = ETPWM3_ETSEL_CONFIGVALUE; + config_reg->CONFIG_ETPS = ETPWM3_ETPS_CONFIGVALUE; + config_reg->CONFIG_PCCTL = ETPWM3_PCCTL_CONFIGVALUE; + config_reg->CONFIG_DCTRIPSEL = ETPWM3_DCTRIPSEL_CONFIGVALUE; + config_reg->CONFIG_DCACTL = ETPWM3_DCACTL_CONFIGVALUE; + config_reg->CONFIG_DCBCTL = ETPWM3_DCBCTL_CONFIGVALUE; + config_reg->CONFIG_DCFCTL = ETPWM3_DCFCTL_CONFIGVALUE; + config_reg->CONFIG_DCCAPCTL = ETPWM3_DCCAPCTL_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOW = ETPWM3_DCFWINDOW_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOWCNT = ETPWM3_DCFWINDOWCNT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_TBCTL = etpwmREG3->TBCTL; + config_reg->CONFIG_TBPHS = etpwmREG3->TBPHS; + config_reg->CONFIG_TBPRD = etpwmREG3->TBPRD; + config_reg->CONFIG_CMPCTL = etpwmREG3->CMPCTL; + config_reg->CONFIG_CMPA = etpwmREG3->CMPA; + config_reg->CONFIG_CMPB = etpwmREG3->CMPB; + config_reg->CONFIG_AQCTLA = etpwmREG3->AQCTLA; + config_reg->CONFIG_AQCTLB = etpwmREG3->AQCTLB; + config_reg->CONFIG_DBCTL = etpwmREG3->DBCTL; + config_reg->CONFIG_DBRED = etpwmREG3->DBRED; + config_reg->CONFIG_DBFED = etpwmREG3->DBFED; + config_reg->CONFIG_TZSEL = etpwmREG3->TZSEL; + config_reg->CONFIG_TZDCSEL = etpwmREG3->TZDCSEL; + config_reg->CONFIG_TZCTL = etpwmREG3->TZCTL; + config_reg->CONFIG_TZEINT = etpwmREG3->TZEINT; + config_reg->CONFIG_ETSEL = etpwmREG3->ETSEL; + config_reg->CONFIG_ETPS = etpwmREG3->ETPS; + config_reg->CONFIG_PCCTL = etpwmREG3->PCCTL; + config_reg->CONFIG_DCTRIPSEL = etpwmREG3->DCTRIPSEL; + config_reg->CONFIG_DCACTL = etpwmREG3->DCACTL; + config_reg->CONFIG_DCBCTL = etpwmREG3->DCBCTL; + config_reg->CONFIG_DCFCTL = etpwmREG3->DCFCTL; + config_reg->CONFIG_DCCAPCTL = etpwmREG3->DCCAPCTL; + config_reg->CONFIG_DCFWINDOW = etpwmREG3->DCFWINDOW; + config_reg->CONFIG_DCFWINDOWCNT = etpwmREG3->DCFWINDOWCNT; + } +} + +/** @fn void etpwm4GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ETPWM_SourceId_049 */ +/* DesignId : ETPWM_DesignId_046 */ +/* Requirements : HL_EPWM_SR32 */ +void etpwm4GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_TBCTL = ETPWM4_TBCTL_CONFIGVALUE; + config_reg->CONFIG_TBPHS = ETPWM4_TBPHS_CONFIGVALUE; + config_reg->CONFIG_TBPRD = ETPWM4_TBPRD_CONFIGVALUE; + config_reg->CONFIG_CMPCTL = ETPWM4_CMPCTL_CONFIGVALUE; + config_reg->CONFIG_CMPA = ETPWM4_CMPA_CONFIGVALUE; + config_reg->CONFIG_CMPB = ETPWM4_CMPB_CONFIGVALUE; + config_reg->CONFIG_AQCTLA = ETPWM4_AQCTLA_CONFIGVALUE; + config_reg->CONFIG_AQCTLB = ETPWM4_AQCTLB_CONFIGVALUE; + config_reg->CONFIG_DBCTL = ETPWM4_DBCTL_CONFIGVALUE; + config_reg->CONFIG_DBRED = ETPWM4_DBRED_CONFIGVALUE; + config_reg->CONFIG_DBFED = ETPWM4_DBFED_CONFIGVALUE; + config_reg->CONFIG_TZSEL = ETPWM4_TZSEL_CONFIGVALUE; + config_reg->CONFIG_TZDCSEL = ETPWM4_TZDCSEL_CONFIGVALUE; + config_reg->CONFIG_TZCTL = ETPWM4_TZCTL_CONFIGVALUE; + config_reg->CONFIG_TZEINT = ETPWM4_TZEINT_CONFIGVALUE; + config_reg->CONFIG_ETSEL = ETPWM4_ETSEL_CONFIGVALUE; + config_reg->CONFIG_ETPS = ETPWM4_ETPS_CONFIGVALUE; + config_reg->CONFIG_PCCTL = ETPWM4_PCCTL_CONFIGVALUE; + config_reg->CONFIG_DCTRIPSEL = ETPWM4_DCTRIPSEL_CONFIGVALUE; + config_reg->CONFIG_DCACTL = ETPWM4_DCACTL_CONFIGVALUE; + config_reg->CONFIG_DCBCTL = ETPWM4_DCBCTL_CONFIGVALUE; + config_reg->CONFIG_DCFCTL = ETPWM4_DCFCTL_CONFIGVALUE; + config_reg->CONFIG_DCCAPCTL = ETPWM4_DCCAPCTL_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOW = ETPWM4_DCFWINDOW_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOWCNT = ETPWM4_DCFWINDOWCNT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_TBCTL = etpwmREG4->TBCTL; + config_reg->CONFIG_TBPHS = etpwmREG4->TBPHS; + config_reg->CONFIG_TBPRD = etpwmREG4->TBPRD; + config_reg->CONFIG_CMPCTL = etpwmREG4->CMPCTL; + config_reg->CONFIG_CMPA = etpwmREG4->CMPA; + config_reg->CONFIG_CMPB = etpwmREG4->CMPB; + config_reg->CONFIG_AQCTLA = etpwmREG4->AQCTLA; + config_reg->CONFIG_AQCTLB = etpwmREG4->AQCTLB; + config_reg->CONFIG_DBCTL = etpwmREG4->DBCTL; + config_reg->CONFIG_DBRED = etpwmREG4->DBRED; + config_reg->CONFIG_DBFED = etpwmREG4->DBFED; + config_reg->CONFIG_TZSEL = etpwmREG4->TZSEL; + config_reg->CONFIG_TZDCSEL = etpwmREG4->TZDCSEL; + config_reg->CONFIG_TZCTL = etpwmREG4->TZCTL; + config_reg->CONFIG_TZEINT = etpwmREG4->TZEINT; + config_reg->CONFIG_ETSEL = etpwmREG4->ETSEL; + config_reg->CONFIG_ETPS = etpwmREG4->ETPS; + config_reg->CONFIG_PCCTL = etpwmREG4->PCCTL; + config_reg->CONFIG_DCTRIPSEL = etpwmREG4->DCTRIPSEL; + config_reg->CONFIG_DCACTL = etpwmREG4->DCACTL; + config_reg->CONFIG_DCBCTL = etpwmREG4->DCBCTL; + config_reg->CONFIG_DCFCTL = etpwmREG4->DCFCTL; + config_reg->CONFIG_DCCAPCTL = etpwmREG4->DCCAPCTL; + config_reg->CONFIG_DCFWINDOW = etpwmREG4->DCFWINDOW; + config_reg->CONFIG_DCFWINDOWCNT = etpwmREG4->DCFWINDOWCNT; + } +} + +/** @fn void etpwm5GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ETPWM_SourceId_050 */ +/* DesignId : ETPWM_DesignId_046 */ +/* Requirements : HL_EPWM_SR3232 */ +void etpwm5GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_TBCTL = ETPWM5_TBCTL_CONFIGVALUE; + config_reg->CONFIG_TBPHS = ETPWM5_TBPHS_CONFIGVALUE; + config_reg->CONFIG_TBPRD = ETPWM5_TBPRD_CONFIGVALUE; + config_reg->CONFIG_CMPCTL = ETPWM5_CMPCTL_CONFIGVALUE; + config_reg->CONFIG_CMPA = ETPWM5_CMPA_CONFIGVALUE; + config_reg->CONFIG_CMPB = ETPWM5_CMPB_CONFIGVALUE; + config_reg->CONFIG_AQCTLA = ETPWM5_AQCTLA_CONFIGVALUE; + config_reg->CONFIG_AQCTLB = ETPWM5_AQCTLB_CONFIGVALUE; + config_reg->CONFIG_DBCTL = ETPWM5_DBCTL_CONFIGVALUE; + config_reg->CONFIG_DBRED = ETPWM5_DBRED_CONFIGVALUE; + config_reg->CONFIG_DBFED = ETPWM5_DBFED_CONFIGVALUE; + config_reg->CONFIG_TZSEL = ETPWM5_TZSEL_CONFIGVALUE; + config_reg->CONFIG_TZDCSEL = ETPWM5_TZDCSEL_CONFIGVALUE; + config_reg->CONFIG_TZCTL = ETPWM5_TZCTL_CONFIGVALUE; + config_reg->CONFIG_TZEINT = ETPWM5_TZEINT_CONFIGVALUE; + config_reg->CONFIG_ETSEL = ETPWM5_ETSEL_CONFIGVALUE; + config_reg->CONFIG_ETPS = ETPWM5_ETPS_CONFIGVALUE; + config_reg->CONFIG_PCCTL = ETPWM5_PCCTL_CONFIGVALUE; + config_reg->CONFIG_DCTRIPSEL = ETPWM5_DCTRIPSEL_CONFIGVALUE; + config_reg->CONFIG_DCACTL = ETPWM5_DCACTL_CONFIGVALUE; + config_reg->CONFIG_DCBCTL = ETPWM5_DCBCTL_CONFIGVALUE; + config_reg->CONFIG_DCFCTL = ETPWM5_DCFCTL_CONFIGVALUE; + config_reg->CONFIG_DCCAPCTL = ETPWM5_DCCAPCTL_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOW = ETPWM5_DCFWINDOW_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOWCNT = ETPWM5_DCFWINDOWCNT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_TBCTL = etpwmREG5->TBCTL; + config_reg->CONFIG_TBPHS = etpwmREG5->TBPHS; + config_reg->CONFIG_TBPRD = etpwmREG5->TBPRD; + config_reg->CONFIG_CMPCTL = etpwmREG5->CMPCTL; + config_reg->CONFIG_CMPA = etpwmREG5->CMPA; + config_reg->CONFIG_CMPB = etpwmREG5->CMPB; + config_reg->CONFIG_AQCTLA = etpwmREG5->AQCTLA; + config_reg->CONFIG_AQCTLB = etpwmREG5->AQCTLB; + config_reg->CONFIG_DBCTL = etpwmREG5->DBCTL; + config_reg->CONFIG_DBRED = etpwmREG5->DBRED; + config_reg->CONFIG_DBFED = etpwmREG5->DBFED; + config_reg->CONFIG_TZSEL = etpwmREG5->TZSEL; + config_reg->CONFIG_TZDCSEL = etpwmREG5->TZDCSEL; + config_reg->CONFIG_TZCTL = etpwmREG5->TZCTL; + config_reg->CONFIG_TZEINT = etpwmREG5->TZEINT; + config_reg->CONFIG_ETSEL = etpwmREG5->ETSEL; + config_reg->CONFIG_ETPS = etpwmREG5->ETPS; + config_reg->CONFIG_PCCTL = etpwmREG5->PCCTL; + config_reg->CONFIG_DCTRIPSEL = etpwmREG5->DCTRIPSEL; + config_reg->CONFIG_DCACTL = etpwmREG5->DCACTL; + config_reg->CONFIG_DCBCTL = etpwmREG5->DCBCTL; + config_reg->CONFIG_DCFCTL = etpwmREG5->DCFCTL; + config_reg->CONFIG_DCCAPCTL = etpwmREG5->DCCAPCTL; + config_reg->CONFIG_DCFWINDOW = etpwmREG5->DCFWINDOW; + config_reg->CONFIG_DCFWINDOWCNT = etpwmREG5->DCFWINDOWCNT; + } +} + +/** @fn void etpwm6GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ETPWM_SourceId_051 */ +/* DesignId : ETPWM_DesignId_046 */ +/* Requirements : HL_EPWM_SR32 */ +void etpwm6GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_TBCTL = ETPWM6_TBCTL_CONFIGVALUE; + config_reg->CONFIG_TBPHS = ETPWM6_TBPHS_CONFIGVALUE; + config_reg->CONFIG_TBPRD = ETPWM6_TBPRD_CONFIGVALUE; + config_reg->CONFIG_CMPCTL = ETPWM6_CMPCTL_CONFIGVALUE; + config_reg->CONFIG_CMPA = ETPWM6_CMPA_CONFIGVALUE; + config_reg->CONFIG_CMPB = ETPWM6_CMPB_CONFIGVALUE; + config_reg->CONFIG_AQCTLA = ETPWM6_AQCTLA_CONFIGVALUE; + config_reg->CONFIG_AQCTLB = ETPWM6_AQCTLB_CONFIGVALUE; + config_reg->CONFIG_DBCTL = ETPWM6_DBCTL_CONFIGVALUE; + config_reg->CONFIG_DBRED = ETPWM6_DBRED_CONFIGVALUE; + config_reg->CONFIG_DBFED = ETPWM6_DBFED_CONFIGVALUE; + config_reg->CONFIG_TZSEL = ETPWM6_TZSEL_CONFIGVALUE; + config_reg->CONFIG_TZDCSEL = ETPWM6_TZDCSEL_CONFIGVALUE; + config_reg->CONFIG_TZCTL = ETPWM6_TZCTL_CONFIGVALUE; + config_reg->CONFIG_TZEINT = ETPWM6_TZEINT_CONFIGVALUE; + config_reg->CONFIG_ETSEL = ETPWM6_ETSEL_CONFIGVALUE; + config_reg->CONFIG_ETPS = ETPWM6_ETPS_CONFIGVALUE; + config_reg->CONFIG_PCCTL = ETPWM6_PCCTL_CONFIGVALUE; + config_reg->CONFIG_DCTRIPSEL = ETPWM6_DCTRIPSEL_CONFIGVALUE; + config_reg->CONFIG_DCACTL = ETPWM6_DCACTL_CONFIGVALUE; + config_reg->CONFIG_DCBCTL = ETPWM6_DCBCTL_CONFIGVALUE; + config_reg->CONFIG_DCFCTL = ETPWM6_DCFCTL_CONFIGVALUE; + config_reg->CONFIG_DCCAPCTL = ETPWM6_DCCAPCTL_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOW = ETPWM6_DCFWINDOW_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOWCNT = ETPWM6_DCFWINDOWCNT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_TBCTL = etpwmREG6->TBCTL; + config_reg->CONFIG_TBPHS = etpwmREG6->TBPHS; + config_reg->CONFIG_TBPRD = etpwmREG6->TBPRD; + config_reg->CONFIG_CMPCTL = etpwmREG6->CMPCTL; + config_reg->CONFIG_CMPA = etpwmREG6->CMPA; + config_reg->CONFIG_CMPB = etpwmREG6->CMPB; + config_reg->CONFIG_AQCTLA = etpwmREG6->AQCTLA; + config_reg->CONFIG_AQCTLB = etpwmREG6->AQCTLB; + config_reg->CONFIG_DBCTL = etpwmREG6->DBCTL; + config_reg->CONFIG_DBRED = etpwmREG6->DBRED; + config_reg->CONFIG_DBFED = etpwmREG6->DBFED; + config_reg->CONFIG_TZSEL = etpwmREG6->TZSEL; + config_reg->CONFIG_TZDCSEL = etpwmREG6->TZDCSEL; + config_reg->CONFIG_TZCTL = etpwmREG6->TZCTL; + config_reg->CONFIG_TZEINT = etpwmREG6->TZEINT; + config_reg->CONFIG_ETSEL = etpwmREG6->ETSEL; + config_reg->CONFIG_ETPS = etpwmREG6->ETPS; + config_reg->CONFIG_PCCTL = etpwmREG6->PCCTL; + config_reg->CONFIG_DCTRIPSEL = etpwmREG6->DCTRIPSEL; + config_reg->CONFIG_DCACTL = etpwmREG6->DCACTL; + config_reg->CONFIG_DCBCTL = etpwmREG6->DCBCTL; + config_reg->CONFIG_DCFCTL = etpwmREG6->DCFCTL; + config_reg->CONFIG_DCCAPCTL = etpwmREG6->DCCAPCTL; + config_reg->CONFIG_DCFWINDOW = etpwmREG6->DCFWINDOW; + config_reg->CONFIG_DCFWINDOWCNT = etpwmREG6->DCFWINDOWCNT; + } +} + +/** @fn void etpwm7GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : ETPWM_SourceId_052 */ +/* DesignId : ETPWM_DesignId_046 */ +/* Requirements : HL_EPWM_SR32 */ +void etpwm7GetConfigValue(etpwm_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_TBCTL = ETPWM1_TBCTL_CONFIGVALUE; + config_reg->CONFIG_TBPHS = ETPWM7_TBPHS_CONFIGVALUE; + config_reg->CONFIG_TBPRD = ETPWM7_TBPRD_CONFIGVALUE; + config_reg->CONFIG_CMPCTL = ETPWM7_CMPCTL_CONFIGVALUE; + config_reg->CONFIG_CMPA = ETPWM7_CMPA_CONFIGVALUE; + config_reg->CONFIG_CMPB = ETPWM7_CMPB_CONFIGVALUE; + config_reg->CONFIG_AQCTLA = ETPWM7_AQCTLA_CONFIGVALUE; + config_reg->CONFIG_AQCTLB = ETPWM7_AQCTLB_CONFIGVALUE; + config_reg->CONFIG_DBCTL = ETPWM7_DBCTL_CONFIGVALUE; + config_reg->CONFIG_DBRED = ETPWM7_DBRED_CONFIGVALUE; + config_reg->CONFIG_DBFED = ETPWM7_DBFED_CONFIGVALUE; + config_reg->CONFIG_TZSEL = ETPWM7_TZSEL_CONFIGVALUE; + config_reg->CONFIG_TZDCSEL = ETPWM7_TZDCSEL_CONFIGVALUE; + config_reg->CONFIG_TZCTL = ETPWM7_TZCTL_CONFIGVALUE; + config_reg->CONFIG_TZEINT = ETPWM7_TZEINT_CONFIGVALUE; + config_reg->CONFIG_ETSEL = ETPWM7_ETSEL_CONFIGVALUE; + config_reg->CONFIG_ETPS = ETPWM7_ETPS_CONFIGVALUE; + config_reg->CONFIG_PCCTL = ETPWM7_PCCTL_CONFIGVALUE; + config_reg->CONFIG_DCTRIPSEL = ETPWM7_DCTRIPSEL_CONFIGVALUE; + config_reg->CONFIG_DCACTL = ETPWM7_DCACTL_CONFIGVALUE; + config_reg->CONFIG_DCBCTL = ETPWM7_DCBCTL_CONFIGVALUE; + config_reg->CONFIG_DCFCTL = ETPWM7_DCFCTL_CONFIGVALUE; + config_reg->CONFIG_DCCAPCTL = ETPWM7_DCCAPCTL_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOW = ETPWM7_DCFWINDOW_CONFIGVALUE; + config_reg->CONFIG_DCFWINDOWCNT = ETPWM7_DCFWINDOWCNT_CONFIGVALUE; + } + else + { + config_reg->CONFIG_TBCTL = etpwmREG7->TBCTL; + config_reg->CONFIG_TBPHS = etpwmREG7->TBPHS; + config_reg->CONFIG_TBPRD = etpwmREG7->TBPRD; + config_reg->CONFIG_CMPCTL = etpwmREG7->CMPCTL; + config_reg->CONFIG_CMPA = etpwmREG7->CMPA; + config_reg->CONFIG_CMPB = etpwmREG7->CMPB; + config_reg->CONFIG_AQCTLA = etpwmREG7->AQCTLA; + config_reg->CONFIG_AQCTLB = etpwmREG7->AQCTLB; + config_reg->CONFIG_DBCTL = etpwmREG7->DBCTL; + config_reg->CONFIG_DBRED = etpwmREG7->DBRED; + config_reg->CONFIG_DBFED = etpwmREG7->DBFED; + config_reg->CONFIG_TZSEL = etpwmREG7->TZSEL; + config_reg->CONFIG_TZDCSEL = etpwmREG7->TZDCSEL; + config_reg->CONFIG_TZCTL = etpwmREG7->TZCTL; + config_reg->CONFIG_TZEINT = etpwmREG7->TZEINT; + config_reg->CONFIG_ETSEL = etpwmREG7->ETSEL; + config_reg->CONFIG_ETPS = etpwmREG7->ETPS; + config_reg->CONFIG_PCCTL = etpwmREG7->PCCTL; + config_reg->CONFIG_DCTRIPSEL = etpwmREG7->DCTRIPSEL; + config_reg->CONFIG_DCACTL = etpwmREG7->DCACTL; + config_reg->CONFIG_DCBCTL = etpwmREG7->DCBCTL; + config_reg->CONFIG_DCFCTL = etpwmREG7->DCFCTL; + config_reg->CONFIG_DCCAPCTL = etpwmREG7->DCCAPCTL; + config_reg->CONFIG_DCFWINDOW = etpwmREG7->DCFWINDOW; + config_reg->CONFIG_DCFWINDOWCNT = etpwmREG7->DCFWINDOWCNT; + } +} + +/* USER CODE BEGIN (31) */ +/* USER CODE END */ Index: firmware/source/gio.c =================================================================== diff -u --- firmware/source/gio.c (revision 0) +++ firmware/source/gio.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,518 @@ +/** @file gio.c +* @brief GIO Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "gio.h" +#include "sys_vim.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @fn void gioInit(void) +* @brief Initializes the GIO Driver +* +* This function initializes the GIO module and set the GIO ports +* to the initial values. +*/ +/* SourceId : GIO_SourceId_001 */ +/* DesignId : GIO_DesignId_001 */ +/* Requirements : HL_SR26 */ +void gioInit(void) +{ +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + /** bring GIO module out of reset */ + gioREG->GCR0 = 1U; + gioREG->ENACLR = 0xFFU; + gioREG->LVLCLR = 0xFFU; + + /** @b initialize @b Port @b A */ + + /** - Port A output values */ + gioPORTA->DOUT = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U); /* Bit 7 */ + + /** - Port A direction */ + gioPORTA->DIR = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U); /* Bit 7 */ + + /** - Port A open drain enable */ + gioPORTA->PDR = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U); /* Bit 7 */ + + /** - Port A pullup / pulldown selection */ + gioPORTA->PSL = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U); /* Bit 7 */ + + /** - Port A pullup / pulldown enable*/ + gioPORTA->PULDIS = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U); /* Bit 7 */ + + /** @b initialize @b Port @b B */ + + /** - Port B output values */ + gioPORTB->DOUT = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U); /* Bit 7 */ + + /** - Port B direction */ + gioPORTB->DIR = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U); /* Bit 7 */ + + /** - Port B open drain enable */ + gioPORTB->PDR = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U); /* Bit 7 */ + + /** - Port B pullup / pulldown selection */ + gioPORTB->PSL = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U); /* Bit 7 */ + + /** - Port B pullup / pulldown enable*/ + gioPORTB->PULDIS = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U); /* Bit 7 */ + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + + /** @b initialize @b interrupts */ + + /** - interrupt polarity */ + gioREG->POL = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U) /* Bit 7 */ + | (uint32)((uint32)0U << 8U) /* Bit 8 */ + | (uint32)((uint32)0U << 9U) /* Bit 9 */ + | (uint32)((uint32)0U << 10U) /* Bit 10 */ + | (uint32)((uint32)0U << 11U) /* Bit 11 */ + | (uint32)((uint32)0U << 12U) /* Bit 12 */ + | (uint32)((uint32)0U << 13U) /* Bit 13 */ + | (uint32)((uint32)0U << 14U) /* Bit 14 */ + | (uint32)((uint32)0U << 15U); /* Bit 15 */ + + + /** - interrupt level */ + gioREG->LVLSET = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U) /* Bit 7 */ + | (uint32)((uint32)0U << 8U) /* Bit 8 */ + | (uint32)((uint32)0U << 9U) /* Bit 9 */ + | (uint32)((uint32)0U << 10U) /* Bit 10 */ + | (uint32)((uint32)0U << 11U) /* Bit 11 */ + | (uint32)((uint32)0U << 12U) /* Bit 12 */ + | (uint32)((uint32)0U << 13U) /* Bit 13 */ + | (uint32)((uint32)0U << 14U) /* Bit 14 */ + | (uint32)((uint32)0U << 15U); /* Bit 15 */ + + + + + /** - clear all pending interrupts */ + gioREG->FLG = 0xFFU; + + /** - enable interrupts */ + gioREG->ENASET = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ + | (uint32)((uint32)0U << 2U) /* Bit 2 */ + | (uint32)((uint32)0U << 3U) /* Bit 3 */ + | (uint32)((uint32)0U << 4U) /* Bit 4 */ + | (uint32)((uint32)0U << 5U) /* Bit 5 */ + | (uint32)((uint32)0U << 6U) /* Bit 6 */ + | (uint32)((uint32)0U << 7U) /* Bit 7 */ + | (uint32)((uint32)0U << 8U) /* Bit 8 */ + | (uint32)((uint32)0U << 9U) /* Bit 9 */ + | (uint32)((uint32)0U << 10U) /* Bit 10 */ + | (uint32)((uint32)0U << 11U) /* Bit 11 */ + | (uint32)((uint32)0U << 12U) /* Bit 12 */ + | (uint32)((uint32)0U << 13U) /* Bit 13 */ + | (uint32)((uint32)0U << 14U) /* Bit 14 */ + | (uint32)((uint32)0U << 15U); /* Bit 15 */ + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ +} + + +/** @fn void gioSetDirection(gioPORT_t *port, uint32 dir) +* @brief Set Port Direction +* @param[in] port pointer to GIO port: +* - gioPORTA: PortA pointer +* - gioPORTB: PortB pointer +* @param[in] dir value to write to DIR register +* +* Set the direction of GIO pins at runtime. +*/ +/* SourceId : GIO_SourceId_002 */ +/* DesignId : GIO_DesignId_002 */ +/* Requirements : HL_SR27 */ +void gioSetDirection(gioPORT_t *port, uint32 dir) +{ + port->DIR = dir; +} + + +/** @fn void gioSetBit(gioPORT_t *port, uint32 bit, uint32 value) +* @brief Write Bit +* @param[in] port pointer to GIO port: +* - gioPORTA: PortA pointer +* - gioPORTB: PortB pointer +* @param[in] bit number 0-7 that specifies the bit to be written to. +* - 0: LSB +* - 7: MSB +* @param[in] value binary value to write to bit +* +* Writes a value to the specified pin of the given GIO port +*/ +/* SourceId : GIO_SourceId_003 */ +/* DesignId : GIO_DesignId_003 */ +/* Requirements : HL_SR28 */ +void gioSetBit(gioPORT_t *port, uint32 bit, uint32 value) +{ +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + + if (value != 0U) + { + port->DSET = (uint32)1U << bit; + } + else + { + port->DCLR = (uint32)1U << bit; + } +} + + +/** @fn void gioSetPort(gioPORT_t *port, uint32 value) +* @brief Write Port Value +* @param[in] port pointer to GIO port: +* - gioPORTA: PortA pointer +* - gioPORTB: PortB pointer +* @param[in] value value to write to port +* +* Writes a value to all pin of a given GIO port +*/ +/* SourceId : GIO_SourceId_004 */ +/* DesignId : GIO_DesignId_004 */ +/* Requirements : HL_SR29 */ +void gioSetPort(gioPORT_t *port, uint32 value) +{ +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + + port->DOUT = value; + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + +} + + +/** @fn uint32 gioGetBit(gioPORT_t *port, uint32 bit) +* @brief Read Bit +* @param[in] port pointer to GIO port: +* - gioPORTA: PortA pointer +* - gioPORTB: PortB pointer +* @param[in] bit number 0-7 that specifies the bit to be written to. +* - 0: LSB +* - 7: MSB +* +* Reads a the current value from the specified pin of the given GIO port +*/ +/* SourceId : GIO_SourceId_005 */ +/* DesignId : GIO_DesignId_005 */ +/* Requirements : HL_SR30 */ +uint32 gioGetBit(gioPORT_t *port, uint32 bit) +{ +/* USER CODE BEGIN (8) */ +/* USER CODE END */ + + return (port->DIN >> bit) & 1U; +} + + +/** @fn uint32 gioGetPort(gioPORT_t *port) +* @brief Read Port Value +* @param[in] port pointer to GIO port: +* - gioPORTA: PortA pointer +* - gioPORTB: PortB pointer +* +* Reads a the current value of a given GIO port +*/ +/* SourceId : GIO_SourceId_006 */ +/* DesignId : GIO_DesignId_006 */ +/* Requirements : HL_SR31 */ +uint32 gioGetPort(gioPORT_t *port) +{ +/* USER CODE BEGIN (9) */ +/* USER CODE END */ + + return port->DIN; +} + +/** @fn void gioToggleBit(gioPORT_t *port, uint32 bit) +* @brief Write Bit +* @param[in] port pointer to GIO port: +* - gioPORTA: PortA pointer +* - gioPORTB: PortB pointer +* @param[in] bit number 0-7 that specifies the bit to be written to. +* - 0: LSB +* - 7: MSB +* +* Toggle a value to the specified pin of the given GIO port +*/ +/* SourceId : GIO_SourceId_007 */ +/* DesignId : GIO_DesignId_007 */ +/* Requirements : HL_SR32 */ +void gioToggleBit(gioPORT_t *port, uint32 bit) +{ +/* USER CODE BEGIN (10) */ +/* USER CODE END */ + + if ((port->DIN & (uint32)((uint32)1U << bit)) != 0U) + { + port->DCLR = (uint32)1U << bit; + } + else + { + port->DSET = (uint32)1U << bit; + } +} + +/** @fn void gioEnableNotification(uint32 bit) +* @brief Enable Interrupt +* @param[in] port pointer to GIO port: +* - gioPORTA: PortA pointer +* - gioPORTB: PortB pointer +* @param[in] bit interrupt pin to enable +* - 0: LSB +* - 7: MSB +* +* Enables an interrupt pin of selected port +*/ +/* SourceId : GIO_SourceId_008 */ +/* DesignId : GIO_DesignId_008 */ +/* Requirements : HL_SR33 */ +void gioEnableNotification(gioPORT_t *port, uint32 bit) +{ +/* USER CODE BEGIN (11) */ +/* USER CODE END */ + + if (port == gioPORTA) + { + gioREG->ENASET = (uint32)1U << bit; + } + else if (port == gioPORTB) + { + gioREG->ENASET = (uint32)1U << (bit + 8U); + } + else + { + /* Empty */ + } +} + + +/** @fn void gioDisableNotification(uint32 bit) +* @brief Disable Interrupt +* @param[in] port pointer to GIO port: +* - gioPORTA: PortA pointer +* - gioPORTB: PortB pointer +* @param[in] bit interrupt pin to enable +* - 0: LSB +* - 7: MSB +* +* Disables an interrupt pin of selected port +*/ +/* SourceId : GIO_SourceId_009 */ +/* DesignId : GIO_DesignId_009 */ +/* Requirements : HL_SR34 */ +void gioDisableNotification(gioPORT_t *port, uint32 bit) +{ +/* USER CODE BEGIN (12) */ +/* USER CODE END */ + + if (port == gioPORTA) + { + gioREG->ENACLR = (uint32)1U << bit; + } + else if (port == gioPORTB) + { + gioREG->ENACLR = (uint32)1U << (bit + 8U); + } + else + { + /* Empty */ + } +} + +/** @fn void gioGetConfigValue(gio_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : GIO_SourceId_010 */ +/* DesignId : GIO_DesignId_010 */ +/* Requirements : HL_SR37 */ +void gioGetConfigValue(gio_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_INTDET = GIO_INTDET_CONFIGVALUE; + config_reg->CONFIG_POL = GIO_POL_CONFIGVALUE; + config_reg->CONFIG_INTENASET = GIO_INTENASET_CONFIGVALUE; + config_reg->CONFIG_LVLSET = GIO_LVLSET_CONFIGVALUE; + + config_reg->CONFIG_PORTADIR = GIO_PORTADIR_CONFIGVALUE; + config_reg->CONFIG_PORTAPDR = GIO_PORTAPDR_CONFIGVALUE; + config_reg->CONFIG_PORTAPSL = GIO_PORTAPSL_CONFIGVALUE; + config_reg->CONFIG_PORTAPULDIS = GIO_PORTAPULDIS_CONFIGVALUE; + + config_reg->CONFIG_PORTBDIR = GIO_PORTBDIR_CONFIGVALUE; + config_reg->CONFIG_PORTBPDR = GIO_PORTBPDR_CONFIGVALUE; + config_reg->CONFIG_PORTBPSL = GIO_PORTBPSL_CONFIGVALUE; + config_reg->CONFIG_PORTBPULDIS = GIO_PORTBPULDIS_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_INTDET = gioREG->INTDET; + config_reg->CONFIG_POL = gioREG->POL; + config_reg->CONFIG_INTENASET = gioREG->ENASET; + config_reg->CONFIG_LVLSET = gioREG->LVLSET; + + config_reg->CONFIG_PORTADIR = gioPORTA->DIR; + config_reg->CONFIG_PORTAPDR = gioPORTA->PDR; + config_reg->CONFIG_PORTAPSL = gioPORTA->PSL; + config_reg->CONFIG_PORTAPULDIS = gioPORTA->PULDIS; + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_PORTBDIR = gioPORTB->DIR; + config_reg->CONFIG_PORTBPDR = gioPORTB->PDR; + config_reg->CONFIG_PORTBPSL = gioPORTB->PSL; + config_reg->CONFIG_PORTBPULDIS = gioPORTB->PULDIS; + } +} + + + +/* USER CODE BEGIN (19) */ +/* USER CODE END */ Index: firmware/source/het.c =================================================================== diff -u --- firmware/source/het.c (revision 0) +++ firmware/source/het.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,3304 @@ +/** @file het.c +* @brief HET Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#include "het.h" +#include "sys_vim.h" +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/*----------------------------------------------------------------------------*/ +/* Global variables */ + +static const uint32 s_het1pwmPolarity[8U] = +{ + 3U, + 3U, + 3U, + 3U, + 3U, + 3U, + 3U, + 3U, +}; + +static const uint32 s_het2pwmPolarity[8U] = +{ + 3U, + 3U, + 3U, + 3U, + 3U, + 3U, + 3U, + 3U, +}; + +/*----------------------------------------------------------------------------*/ +/* Default Program */ + +/** @var static const hetINSTRUCTION_t het1PROGRAM[58] +* @brief Default Program +* +* Het program running after initialization. +*/ + +static const hetINSTRUCTION_t het1PROGRAM[58U] = +{ + /* CNT: Timebase + * - Instruction = 0 + * - Next instruction = 1 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = na + * - Reg = T + */ + { + /* Program */ + 0x00002C80U, + /* Control */ + 0x01FFFFFFU, + /* Data */ + 0xFFFFFF80U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 0 -> Duty Cycle + * - Instruction = 1 + * - Next instruction = 2 + * - Conditional next instruction = 2 + * - Interrupt = 1 + * - Pin = 8 + */ + { + /* Program */ + 0x000055C0U, + /* Control */ + (0x00004006U | (uint32)((uint32)8U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 0 -> Period + * - Instruction = 2 + * - Next instruction = 3 + * - Conditional next instruction = 41 + * - Interrupt = 2 + * - Pin = na + */ + { + /* Program */ + 0x00007480U, + /* Control */ + 0x00052006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 1 -> Duty Cycle + * - Instruction = 3 + * - Next instruction = 4 + * - Conditional next instruction = 4 + * - Interrupt = 3 + * - Pin = 10 + */ + { + /* Program */ + 0x000095C0U, + /* Control */ + (0x00008006U | (uint32)((uint32)10U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 1 -> Period + * - Instruction = 4 + * - Next instruction = 5 + * - Conditional next instruction = 43 + * - Interrupt = 4 + * - Pin = na + */ + { + /* Program */ + 0x0000B480U, + /* Control */ + 0x00056006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 2 -> Duty Cycle + * - Instruction = 5 + * - Next instruction = 6 + * - Conditional next instruction = 6 + * - Interrupt = 5 + * - Pin = 12 + */ + { + /* Program */ + 0x0000D5C0U, + /* Control */ + (0x0000C006U | (uint32)((uint32)12U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 2 -> Period + * - Instruction = 6 + * - Next instruction = 7 + * - Conditional next instruction = 45 + * - Interrupt = 6 + * - Pin = na + */ + { + /* Program */ + 0x0000F480U, + /* Control */ + 0x0005A006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 3 -> Duty Cycle + * - Instruction = 7 + * - Next instruction = 8 + * - Conditional next instruction = 8 + * - Interrupt = 7 + * - Pin = 14 + */ + { + /* Program */ + 0x000115C0U, + /* Control */ + (0x00010006U | (uint32)((uint32)14U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 3 -> Period + * - Instruction = 8 + * - Next instruction = 9 + * - Conditional next instruction = 47 + * - Interrupt = 8 + * - Pin = na + */ + { + /* Program */ + 0x00013480U, + /* Control */ + 0x0005E006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 4 -> Duty Cycle + * - Instruction = 9 + * - Next instruction = 10 + * - Conditional next instruction = 10 + * - Interrupt = 9 + * - Pin = 16 + */ + { + /* Program */ + 0x000155C0U, + /* Control */ + (0x00014006U | (uint32)((uint32)16U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 4 -> Period + * - Instruction = 10 + * - Next instruction = 11 + * - Conditional next instruction = 49 + * - Interrupt = 10 + * - Pin = na + */ + { + /* Program */ + 0x00017480U, + /* Control */ + 0x00062006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 5 -> Duty Cycle + * - Instruction = 11 + * - Next instruction = 12 + * - Conditional next instruction = 12 + * - Interrupt = 11 + * - Pin = 17 + */ + { + /* Program */ + 0x000195C0U, + /* Control */ + (0x00018006U | (uint32)((uint32)17U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 5 -> Period + * - Instruction = 12 + * - Next instruction = 13 + * - Conditional next instruction = 51 + * - Interrupt = 12 + * - Pin = na + */ + { + /* Program */ + 0x0001B480U, + /* Control */ + 0x00066006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 6 -> Duty Cycle + * - Instruction = 13 + * - Next instruction = 14 + * - Conditional next instruction = 14 + * - Interrupt = 13 + * - Pin = 18 + */ + { + /* Program */ + 0x0001D5C0U, + /* Control */ + (0x0001C006U | (uint32)((uint32)18U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 6 -> Period + * - Instruction = 14 + * - Next instruction = 15 + * - Conditional next instruction = 53 + * - Interrupt = 14 + * - Pin = na + */ + { + /* Program */ + 0x0001F480U, + /* Control */ + 0x0006A006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 7 -> Duty Cycle + * - Instruction = 15 + * - Next instruction = 16 + * - Conditional next instruction = 16 + * - Interrupt = 15 + * - Pin = 19 + */ + { + /* Program */ + 0x000215C0U, + /* Control */ + (0x00020006U | (uint32)((uint32)19U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 7 -> Period + * - Instruction = 16 + * - Next instruction = 17 + * - Conditional next instruction = 55 + * - Interrupt = 16 + * - Pin = na + */ + { + /* Program */ + 0x00023480U, + /* Control */ + 0x0006E006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 0 + * - Instruction = 17 + * - Next instruction = 18 + * - Conditional next instruction = 18 + * - Interrupt = 17 + * - Pin = 9 + */ + { + /* Program */ + 0x00025440U, + /* Control */ + (0x00024007U | (uint32)((uint32)9U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 1 + * - Instruction = 18 + * - Next instruction = 19 + * - Conditional next instruction = 19 + * - Interrupt = 18 + * - Pin = 11 + */ + { + /* Program */ + 0x00027440U, + /* Control */ + (0x00026007U | (uint32)((uint32)11U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 2 + * - Instruction = 19 + * - Next instruction = 20 + * - Conditional next instruction = 20 + * - Interrupt = 19 + * - Pin = 13 + */ + { + /* Program */ + 0x00029440U, + /* Control */ + (0x00028007U | (uint32)((uint32)13U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 3 + * - Instruction = 20 + * - Next instruction = 21 + * - Conditional next instruction = 21 + * - Interrupt = 20 + * - Pin = 15 + */ + { + /* Program */ + 0x0002B440U, + /* Control */ + (0x0002A007U | (uint32)((uint32)15U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 4 + * - Instruction = 21 + * - Next instruction = 22 + * - Conditional next instruction = 22 + * - Interrupt = 21 + * - Pin = 20 + */ + { + /* Program */ + 0x0002D440U, + /* Control */ + (0x0002C007U | (uint32)((uint32)20U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 5 + * - Instruction = 22 + * - Next instruction = 23 + * - Conditional next instruction = 23 + * - Interrupt = 22 + * - Pin = 21 + */ + { + /* Program */ + 0x0002F440U, + /* Control */ + (0x0002E007U | (uint32)((uint32)21U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 6 + * - Instruction = 23 + * - Next instruction = 24 + * - Conditional next instruction = 24 + * - Interrupt = 23 + * - Pin = 22 + */ + { + /* Program */ + 0x00031440U, + /* Control */ + (0x00030007U | (uint32)((uint32)22U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 7 + * - Instruction = 24 + * - Next instruction = 25 + * - Conditional next instruction = 25 + * - Interrupt = 24 + * - Pin = 23 + */ + { + /* Program */ + 0x00033440U, + /* Control */ + (0x00032007U | (uint32)((uint32)23U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 0 + * - Instruction = 25 + * - Next instruction = 26 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 0 + */ + { + /* Program */ + 0x00034E00U | (uint32)((uint32)0U << 6U) | (uint32)(0U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 0 + * - Instruction = 26 + * - Next instruction = 27 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 0 + 1 + */ + { + /* Program */ + 0x00036E80U | (uint32)((uint32)0U << 6U) | (uint32)((0U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 1 + * - Instruction = 27 + * - Next instruction = 28 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 2 + */ + { + /* Program */ + 0x00038E00U | (uint32)((uint32)0U << 6U) | (uint32)(2U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 1 + * - Instruction = 28 + * - Next instruction = 29 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 2 + 1 + */ + { + /* Program */ + 0x0003AE80U | (uint32)((uint32)0U << 6U) | (uint32)((2U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 2 + * - Instruction = 29 + * - Next instruction = 30 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 4 + */ + { + /* Program */ + 0x0003CE00U | (uint32)((uint32)0U << 6U) | (uint32)(4U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 2 + * - Instruction = 30 + * - Next instruction = 31 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 4 + 1 + */ + { + /* Program */ + 0x0003EE80U | (uint32)((uint32)0U << 6U) | (uint32)((4U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 3 + * - Instruction = 31 + * - Next instruction = 32 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 6 + */ + { + /* Program */ + 0x00040E00U | (uint32)((uint32)0U << 6U) | (uint32)(6U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 3 + * - Instruction = 32 + * - Next instruction = 33 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 6 + 1 + */ + { + /* Program */ + 0x00042E80U | (uint32)((uint32)0U << 6U) | (uint32)((6U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 4 + * - Instruction = 33 + * - Next instruction = 34 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 24 + */ + { + /* Program */ + 0x00044E00U | (uint32)((uint32)0U << 6U) | (uint32)(24U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 4 + * - Instruction = 34 + * - Next instruction = 35 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 24 + 1 + */ + { + /* Program */ + 0x00046E80U | (uint32)((uint32)0U << 6U) | (uint32)((24U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 5 + * - Instruction = 35 + * - Next instruction = 36 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 26 + */ + { + /* Program */ + 0x00048E00U | (uint32)((uint32)0U << 6U) | (uint32)(26U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 5 + * - Instruction = 36 + * - Next instruction = 37 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 26 + 1 + */ + { + /* Program */ + 0x0004AE80U | (uint32)((uint32)0U << 6U) | (uint32)((26U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 6 + * - Instruction = 37 + * - Next instruction = 38 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 28 + */ + { + /* Program */ + 0x0004CE00U | (uint32)((uint32)0U << 6U) | (uint32)(28U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 6 + * - Instruction = 38 + * - Next instruction = 39 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 28 + 1 + */ + { + /* Program */ + 0x0004EE80U | (uint32)((uint32)0U << 6U) | (uint32)((28U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 7 + * - Instruction = 39 + * - Next instruction = 40 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 30 + */ + { + /* Program */ + 0x00050E00U | (uint32)((uint32)0U << 6U) | (uint32)(30U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 7 + * - Instruction = 40 + * - Next instruction = 57 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 30 + 1 + */ + { + /* Program */ + 0x00072E80U | (uint32)((uint32)0U << 6U) | (uint32)((30U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 0 -> Duty Cycle Update + * - Instruction = 41 + * - Next instruction = 42 + * - Conditional next instruction = 2 + * - Interrupt = 1 + * - Pin = 8 + */ + { + /* Program */ + 0x00054201U, + /* Control */ + (0x00004007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)8U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 0 -> Period Update + * - Instruction = 42 + * - Next instruction = 3 + * - Conditional next instruction = 41 + * - Interrupt = 2 + * - Pin = na + */ + { + /* Program */ + 0x00006202U, + /* Control */ + (0x00052007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 1 -> Duty Cycle Update + * - Instruction = 43 + * - Next instruction = 44 + * - Conditional next instruction = 4 + * - Interrupt = 3 + * - Pin = 10 + */ + { + /* Program */ + 0x00058203U, + /* Control */ + (0x00008007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)10U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 1 -> Period Update + * - Instruction = 44 + * - Next instruction = 5 + * - Conditional next instruction = 43 + * - Interrupt = 4 + * - Pin = na + */ + { + /* Program */ + 0x0000A204U, + /* Control */ + (0x00056007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 2 -> Duty Cycle Update + * - Instruction = 45 + * - Next instruction = 46 + * - Conditional next instruction = 6 + * - Interrupt = 5 + * - Pin = 12 + */ + { + /* Program */ + 0x0005C205U, + /* Control */ + (0x0000C007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)12U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 2 -> Period Update + * - Instruction = 46 + * - Next instruction = 7 + * - Conditional next instruction = 45 + * - Interrupt = 6 + * - Pin = na + */ + { + /* Program */ + 0x0000E206U, + /* Control */ + (0x0005A007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 3 -> Duty Cycle Update + * - Instruction = 47 + * - Next instruction = 48 + * - Conditional next instruction = 8 + * - Interrupt = 7 + * - Pin = 14 + */ + { + /* Program */ + 0x00060207U, + /* Control */ + (0x00010007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)14U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 3 -> Period Update + * - Instruction = 48 + * - Next instruction = 9 + * - Conditional next instruction = 47 + * - Interrupt = 8 + * - Pin = na + */ + { + /* Program */ + 0x00012208U, + /* Control */ + (0x0005E007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 4 -> Duty Cycle Update + * - Instruction = 49 + * - Next instruction = 50 + * - Conditional next instruction = 10 + * - Interrupt = 9 + * - Pin = 16 + */ + { + /* Program */ + 0x00064209U, + /* Control */ + (0x00014007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)16U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 4 -> Period Update + * - Instruction = 50 + * - Next instruction = 11 + * - Conditional next instruction = 49 + * - Interrupt = 10 + * - Pin = na + */ + { + /* Program */ + 0x0001620AU, + /* Control */ + (0x00062007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 5 -> Duty Cycle Update + * - Instruction = 51 + * - Next instruction = 52 + * - Conditional next instruction = 12 + * - Interrupt = 11 + * - Pin = 17 + */ + { + /* Program */ + 0x0006820BU, + /* Control */ + (0x00018007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)17U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 5 -> Period Update + * - Instruction = 52 + * - Next instruction = 13 + * - Conditional next instruction = 51 + * - Interrupt = 12 + * - Pin = na + */ + { + /* Program */ + 0x0001A20CU, + /* Control */ + (0x00066007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 6 -> Duty Cycle Update + * - Instruction = 53 + * - Next instruction = 54 + * - Conditional next instruction = 14 + * - Interrupt = 13 + * - Pin = 18 + */ + { + /* Program */ + 0x0006C20DU, + /* Control */ + (0x0001C007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)18U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 6 -> Period Update + * - Instruction = 54 + * - Next instruction = 15 + * - Conditional next instruction = 53 + * - Interrupt = 14 + * - Pin = na + */ + { + /* Program */ + 0x0001E20EU, + /* Control */ + (0x0006A007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 7 -> Duty Cycle Update + * - Instruction = 55 + * - Next instruction = 56 + * - Conditional next instruction = 16 + * - Interrupt = 15 + * - Pin = 19 + */ + { + /* Program */ + 0x0007020FU, + /* Control */ + (0x00020007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)19U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 7 -> Period Update + * - Instruction = 56 + * - Next instruction = 17 + * - Conditional next instruction = 55 + * - Interrupt = 16 + * - Pin = na + */ + { + /* Program */ + 0x00022210U, + /* Control */ + (0x0006E007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* WCAP: Capture timestamp + * - Instruction = 57 + * - Next instruction = 0 + * - Conditional next instruction = 0 + * - Interrupt = na + * - Pin = na + * - Reg = T + */ + { + /* Program */ + 0x00001600U, + /* Control */ + (0x00000004U), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, +}; + + +/*----------------------------------------------------------------------------*/ +/* Default Program */ + +/** @var static const hetINSTRUCTION_t het2PROGRAM[58] +* @brief Default Program +* +* Het program running after initialization. +*/ + +static const hetINSTRUCTION_t het2PROGRAM[58U] = +{ + /* CNT: Timebase + * - Instruction = 0 + * - Next instruction = 1 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = na + * - Reg = T + */ + { + /* Program */ + 0x00002C80U, + /* Control */ + 0x01FFFFFFU, + /* Data */ + 0xFFFFFF80U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 0 -> Duty Cycle + * - Instruction = 1 + * - Next instruction = 2 + * - Conditional next instruction = 2 + * - Interrupt = 1 + * - Pin = 8 + */ + { + /* Program */ + 0x000055C0U, + /* Control */ + (0x00004006U | (uint32)((uint32)8U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 0 -> Period + * - Instruction = 2 + * - Next instruction = 3 + * - Conditional next instruction = 41 + * - Interrupt = 2 + * - Pin = na + */ + { + /* Program */ + 0x00007480U, + /* Control */ + 0x00052006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 1 -> Duty Cycle + * - Instruction = 3 + * - Next instruction = 4 + * - Conditional next instruction = 4 + * - Interrupt = 3 + * - Pin = 10 + */ + { + /* Program */ + 0x000095C0U, + /* Control */ + (0x00008006U | (uint32)((uint32)10U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 1 -> Period + * - Instruction = 4 + * - Next instruction = 5 + * - Conditional next instruction = 43 + * - Interrupt = 4 + * - Pin = na + */ + { + /* Program */ + 0x0000B480U, + /* Control */ + 0x00056006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 2 -> Duty Cycle + * - Instruction = 5 + * - Next instruction = 6 + * - Conditional next instruction = 6 + * - Interrupt = 5 + * - Pin = 12 + */ + { + /* Program */ + 0x0000D5C0U, + /* Control */ + (0x0000C006U | (uint32)((uint32)12U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 2 -> Period + * - Instruction = 6 + * - Next instruction = 7 + * - Conditional next instruction = 45 + * - Interrupt = 6 + * - Pin = na + */ + { + /* Program */ + 0x0000F480U, + /* Control */ + 0x0005A006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 3 -> Duty Cycle + * - Instruction = 7 + * - Next instruction = 8 + * - Conditional next instruction = 8 + * - Interrupt = 7 + * - Pin = 14 + */ + { + /* Program */ + 0x000115C0U, + /* Control */ + (0x00010006U | (uint32)((uint32)14U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 3 -> Period + * - Instruction = 8 + * - Next instruction = 9 + * - Conditional next instruction = 47 + * - Interrupt = 8 + * - Pin = na + */ + { + /* Program */ + 0x00013480U, + /* Control */ + 0x0005E006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 4 -> Duty Cycle + * - Instruction = 9 + * - Next instruction = 10 + * - Conditional next instruction = 10 + * - Interrupt = 9 + * - Pin = 16 + */ + { + /* Program */ + 0x000155C0U, + /* Control */ + (0x00014006U | (uint32)((uint32)16U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 4 -> Period + * - Instruction = 10 + * - Next instruction = 11 + * - Conditional next instruction = 49 + * - Interrupt = 10 + * - Pin = na + */ + { + /* Program */ + 0x00017480U, + /* Control */ + 0x00062006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 5 -> Duty Cycle + * - Instruction = 11 + * - Next instruction = 12 + * - Conditional next instruction = 12 + * - Interrupt = 11 + * - Pin = 17 + */ + { + /* Program */ + 0x000195C0U, + /* Control */ + (0x00018006U | (uint32)((uint32)17U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 5 -> Period + * - Instruction = 12 + * - Next instruction = 13 + * - Conditional next instruction = 51 + * - Interrupt = 12 + * - Pin = na + */ + { + /* Program */ + 0x0001B480U, + /* Control */ + 0x00066006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 6 -> Duty Cycle + * - Instruction = 13 + * - Next instruction = 14 + * - Conditional next instruction = 14 + * - Interrupt = 13 + * - Pin = 18 + */ + { + /* Program */ + 0x0001D5C0U, + /* Control */ + (0x0001C006U | (uint32)((uint32)18U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 6 -> Period + * - Instruction = 14 + * - Next instruction = 15 + * - Conditional next instruction = 53 + * - Interrupt = 14 + * - Pin = na + */ + { + /* Program */ + 0x0001F480U, + /* Control */ + 0x0006A006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PWCNT: PWM 7 -> Duty Cycle + * - Instruction = 15 + * - Next instruction = 16 + * - Conditional next instruction = 16 + * - Interrupt = 15 + * - Pin = 19 + */ + { + /* Program */ + 0x000215C0U, + /* Control */ + (0x00020006U | (uint32)((uint32)19U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* DJZ: PWM 7 -> Period + * - Instruction = 16 + * - Next instruction = 17 + * - Conditional next instruction = 55 + * - Interrupt = 16 + * - Pin = na + */ + { + /* Program */ + 0x00023480U, + /* Control */ + 0x0006E006U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 0 + * - Instruction = 17 + * - Next instruction = 18 + * - Conditional next instruction = 18 + * - Interrupt = 17 + * - Pin = 0 + */ + { + /* Program */ + 0x00025440U, + /* Control */ + (0x00024007U | (uint32)((uint32)0U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 1 + * - Instruction = 18 + * - Next instruction = 19 + * - Conditional next instruction = 19 + * - Interrupt = 18 + * - Pin = 2 + */ + { + /* Program */ + 0x00027440U, + /* Control */ + (0x00026007U | (uint32)((uint32)2U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 2 + * - Instruction = 19 + * - Next instruction = 20 + * - Conditional next instruction = 20 + * - Interrupt = 19 + * - Pin = 4 + */ + { + /* Program */ + 0x00029440U, + /* Control */ + (0x00028007U | (uint32)((uint32)4U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 3 + * - Instruction = 20 + * - Next instruction = 21 + * - Conditional next instruction = 21 + * - Interrupt = 20 + * - Pin = 6 + */ + { + /* Program */ + 0x0002B440U, + /* Control */ + (0x0002A007U | (uint32)((uint32)6U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 4 + * - Instruction = 21 + * - Next instruction = 22 + * - Conditional next instruction = 22 + * - Interrupt = 21 + * - Pin = 8 + */ + { + /* Program */ + 0x0002D440U, + /* Control */ + (0x0002C007U | (uint32)((uint32)8U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 5 + * - Instruction = 22 + * - Next instruction = 23 + * - Conditional next instruction = 23 + * - Interrupt = 22 + * - Pin = 10 + */ + { + /* Program */ + 0x0002F440U, + /* Control */ + (0x0002E007U | (uint32)((uint32)10U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 6 + * - Instruction = 23 + * - Next instruction = 24 + * - Conditional next instruction = 24 + * - Interrupt = 23 + * - Pin = 12 + */ + { + /* Program */ + 0x00031440U, + /* Control */ + (0x00030007U | (uint32)((uint32)12U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* ECNT: CCU Edge 7 + * - Instruction = 24 + * - Next instruction = 25 + * - Conditional next instruction = 25 + * - Interrupt = 24 + * - Pin = 14 + */ + { + /* Program */ + 0x00033440U, + /* Control */ + (0x00032007U | (uint32)((uint32)14U << 8U) | (uint32)((uint32)1U << 4U)), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 0 + * - Instruction = 25 + * - Next instruction = 26 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 0 + */ + { + /* Program */ + 0x00034E00U | (uint32)((uint32)0U << 6U) | (uint32)(0U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 0 + * - Instruction = 26 + * - Next instruction = 27 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 0 + 1 + */ + { + /* Program */ + 0x00036E80U | (uint32)((uint32)0U << 6U) | (uint32)((0U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 1 + * - Instruction = 27 + * - Next instruction = 28 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 2 + */ + { + /* Program */ + 0x00038E00U | (uint32)((uint32)0U << 6U) | (uint32)(2U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 1 + * - Instruction = 28 + * - Next instruction = 29 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 2 + 1 + */ + { + /* Program */ + 0x0003AE80U | (uint32)((uint32)0U << 6U) | (uint32)((2U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 2 + * - Instruction = 29 + * - Next instruction = 30 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 4 + */ + { + /* Program */ + 0x0003CE00U | (uint32)((uint32)0U << 6U) | (uint32)(4U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 2 + * - Instruction = 30 + * - Next instruction = 31 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 4 + 1 + */ + { + /* Program */ + 0x0003EE80U | (uint32)((uint32)0U << 6U) | (uint32)((4U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 3 + * - Instruction = 31 + * - Next instruction = 32 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 6 + */ + { + /* Program */ + 0x00040E00U | (uint32)((uint32)0U << 6U) | (uint32)(6U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 3 + * - Instruction = 32 + * - Next instruction = 33 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 6 + 1 + */ + { + /* Program */ + 0x00042E80U | (uint32)((uint32)0U << 6U) | (uint32)((6U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 4 + * - Instruction = 33 + * - Next instruction = 34 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 0 + */ + { + /* Program */ + 0x00044E00U | (uint32)((uint32)0U << 6U) | (uint32)(0U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 4 + * - Instruction = 34 + * - Next instruction = 35 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 0 + 1 + */ + { + /* Program */ + 0x00046E80U | (uint32)((uint32)0U << 6U) | (uint32)((0U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 5 + * - Instruction = 35 + * - Next instruction = 36 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 2 + */ + { + /* Program */ + 0x00048E00U | (uint32)((uint32)0U << 6U) | (uint32)(2U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 5 + * - Instruction = 36 + * - Next instruction = 37 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 2 + 1 + */ + { + /* Program */ + 0x0004AE80U | (uint32)((uint32)0U << 6U) | (uint32)((2U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 6 + * - Instruction = 37 + * - Next instruction = 38 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 4 + */ + { + /* Program */ + 0x0004CE00U | (uint32)((uint32)0U << 6U) | (uint32)(4U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 6 + * - Instruction = 38 + * - Next instruction = 39 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 4 + 1 + */ + { + /* Program */ + 0x0004EE80U | (uint32)((uint32)0U << 6U) | (uint32)((4U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Duty 7 + * - Instruction = 39 + * - Next instruction = 40 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 6 + */ + { + /* Program */ + 0x00050E00U | (uint32)((uint32)0U << 6U) | (uint32)(6U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* PCNT: Capture Period 7 + * - Instruction = 40 + * - Next instruction = 57 + * - Conditional next instruction = na + * - Interrupt = na + * - Pin = 6 + 1 + */ + { + /* Program */ + 0x00072E80U | (uint32)((uint32)0U << 6U) | (uint32)((6U) + 1U), + /* Control */ + 0x00000000U, + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 0 -> Duty Cycle Update + * - Instruction = 41 + * - Next instruction = 42 + * - Conditional next instruction = 2 + * - Interrupt = 1 + * - Pin = 8 + */ + { + /* Program */ + 0x00054201U, + /* Control */ + (0x00004007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)8U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 0 -> Period Update + * - Instruction = 42 + * - Next instruction = 3 + * - Conditional next instruction = 41 + * - Interrupt = 2 + * - Pin = na + */ + { + /* Program */ + 0x00006202U, + /* Control */ + (0x00052007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 1 -> Duty Cycle Update + * - Instruction = 43 + * - Next instruction = 44 + * - Conditional next instruction = 4 + * - Interrupt = 3 + * - Pin = 10 + */ + { + /* Program */ + 0x00058203U, + /* Control */ + (0x00008007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)10U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 1 -> Period Update + * - Instruction = 44 + * - Next instruction = 5 + * - Conditional next instruction = 43 + * - Interrupt = 4 + * - Pin = na + */ + { + /* Program */ + 0x0000A204U, + /* Control */ + (0x00056007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 2 -> Duty Cycle Update + * - Instruction = 45 + * - Next instruction = 46 + * - Conditional next instruction = 6 + * - Interrupt = 5 + * - Pin = 12 + */ + { + /* Program */ + 0x0005C205U, + /* Control */ + (0x0000C007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)12U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 2 -> Period Update + * - Instruction = 46 + * - Next instruction = 7 + * - Conditional next instruction = 45 + * - Interrupt = 6 + * - Pin = na + */ + { + /* Program */ + 0x0000E206U, + /* Control */ + (0x0005A007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 3 -> Duty Cycle Update + * - Instruction = 47 + * - Next instruction = 48 + * - Conditional next instruction = 8 + * - Interrupt = 7 + * - Pin = 14 + */ + { + /* Program */ + 0x00060207U, + /* Control */ + (0x00010007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)14U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 3 -> Period Update + * - Instruction = 48 + * - Next instruction = 9 + * - Conditional next instruction = 47 + * - Interrupt = 8 + * - Pin = na + */ + { + /* Program */ + 0x00012208U, + /* Control */ + (0x0005E007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 4 -> Duty Cycle Update + * - Instruction = 49 + * - Next instruction = 50 + * - Conditional next instruction = 10 + * - Interrupt = 9 + * - Pin = 16 + */ + { + /* Program */ + 0x00064209U, + /* Control */ + (0x00014007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)16U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 4 -> Period Update + * - Instruction = 50 + * - Next instruction = 11 + * - Conditional next instruction = 49 + * - Interrupt = 10 + * - Pin = na + */ + { + /* Program */ + 0x0001620AU, + /* Control */ + (0x00062007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 5 -> Duty Cycle Update + * - Instruction = 51 + * - Next instruction = 52 + * - Conditional next instruction = 12 + * - Interrupt = 11 + * - Pin = 17 + */ + { + /* Program */ + 0x0006820BU, + /* Control */ + (0x00018007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)17U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 5 -> Period Update + * - Instruction = 52 + * - Next instruction = 13 + * - Conditional next instruction = 51 + * - Interrupt = 12 + * - Pin = na + */ + { + /* Program */ + 0x0001A20CU, + /* Control */ + (0x00066007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 6 -> Duty Cycle Update + * - Instruction = 53 + * - Next instruction = 54 + * - Conditional next instruction = 14 + * - Interrupt = 13 + * - Pin = 18 + */ + { + /* Program */ + 0x0006C20DU, + /* Control */ + (0x0001C007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)18U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 6 -> Period Update + * - Instruction = 54 + * - Next instruction = 15 + * - Conditional next instruction = 53 + * - Interrupt = 14 + * - Pin = na + */ + { + /* Program */ + 0x0001E20EU, + /* Control */ + (0x0006A007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 7 -> Duty Cycle Update + * - Instruction = 55 + * - Next instruction = 56 + * - Conditional next instruction = 16 + * - Interrupt = 15 + * - Pin = 19 + */ + { + /* Program */ + 0x0007020FU, + /* Control */ + (0x00020007U | (uint32)((uint32)0U << 22U) | (uint32)((uint32)19U << 8U) | (uint32)((uint32)3U << 3U)), + /* Data */ + 55296U, + /* Reserved */ + 0x00000000U + }, + /* MOV64: PWM 7 -> Period Update + * - Instruction = 56 + * - Next instruction = 17 + * - Conditional next instruction = 55 + * - Interrupt = 16 + * - Pin = na + */ + { + /* Program */ + 0x00022210U, + /* Control */ + (0x0006E007U), + /* Data */ + 109952U, + /* Reserved */ + 0x00000000U + }, + /* WCAP: Capture timestamp + * - Instruction = 57 + * - Next instruction = 0 + * - Conditional next instruction = 0 + * - Interrupt = na + * - Pin = na + * - Reg = T + */ + { + /* Program */ + 0x00001600U, + /* Control */ + (0x00000004U), + /* Data */ + 0x00000000U, + /* Reserved */ + 0x00000000U + }, +}; + + +/** @fn void hetInit(void) +* @brief Initializes the het Driver +* +* This function initializes the het 1 module. +*/ +/* SourceId : HET_SourceId_001 */ +/* DesignId : HET_DesignId_001 */ +/* Requirements : HL_SR363 */ +void hetInit(void) +{ + /** @b initialize @b HET */ + + /** - Set HET pins default output value */ + hetREG1->DOUT = (uint32)((uint32)0U << 31U) + | (uint32)((uint32)0U << 30U) + | (uint32)((uint32)0U << 29U) + | (uint32)((uint32)0U << 28U) + | (uint32)((uint32)0U << 27U) + | (uint32)((uint32)0U << 26U) + | (uint32)((uint32)0U << 25U) + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)0U << 23U) + | (uint32)((uint32)0U << 22U) + | (uint32)((uint32)0U << 21U) + | (uint32)((uint32)0U << 20U) + | (uint32)((uint32)0U << 19U) + | (uint32)((uint32)0U << 18U) + | (uint32)((uint32)0U << 17U) + | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)0U << 15U) + | (uint32)((uint32)0U << 14U) + | (uint32)((uint32)0U << 13U) + | (uint32)((uint32)0U << 12U) + | (uint32)((uint32)0U << 11U) + | (uint32)((uint32)0U << 10U) + | (uint32)((uint32)0U << 9U) + | (uint32)((uint32)0U << 8U) + | (uint32)((uint32)0U << 7U) + | (uint32)((uint32)0U << 6U) + | (uint32)((uint32)0U << 5U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)0U << 3U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)0U << 1U) + | (uint32)((uint32)0U << 0U); + + /** - Set HET pins direction */ + hetREG1->DIR = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + /** - Set HET pins open drain enable */ + hetREG1->PDR = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + /** - Set HET pins pullup/down enable */ + hetREG1->PULDIS = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + /** - Set HET pins pullup/down select */ + hetREG1->PSL = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + /** - Set HET pins high resolution share */ + hetREG1->HRSH = (uint32) 0x00008000U + | (uint32) 0x00004000U + | (uint32) 0x00002000U + | (uint32) 0x00001000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000008U + | (uint32) 0x00000004U + | (uint32) 0x00000002U + | (uint32) 0x00000001U; + + /** - Set HET pins AND share */ + hetREG1->AND = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + /** - Set HET pins XOR share */ + hetREG1->XOR = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + /** - Setup prescaler values + * - Loop resolution prescaler + * - High resolution prescaler + */ + hetREG1->PFR = (uint32)((uint32) 7U << 8U) + | ((uint32) 0U); + + + /** - Parity control register + * - Enable/Disable Parity check + */ + hetREG1->PCR = (uint32) 0x00000005U; + + /** - Fill HET RAM with opcodes and Data */ + /*SAFETYMCUSW 94 S MR:11.1,11.2,11.4 "HET RAM Fill from the table - Allowed as per MISRA rule 11.2" */ + /*SAFETYMCUSW 94 S MR:11.1,11.2,11.4 "HET RAM Fill from the table - Allowed as per MISRA rule 11.2" */ + /*SAFETYMCUSW 95 S MR:11.1,11.4 "HET RAM Fill from the table - Allowed as per MISRA rule 11.2" */ + /*SAFETYMCUSW 95 S MR:11.1,11.4 "HET RAM Fill from the table - Allowed as per MISRA rule 11.2" */ + (void)memcpy((void *)hetRAM1, (const void *)het1PROGRAM, sizeof(het1PROGRAM)); + + /** - Setup interrupt priority level + * - PWM 0 end of duty level + * - PWM 0 end of period level + * - PWM 1 end of duty level + * - PWM 1 end of period level + * - PWM 2 end of duty level + * - PWM 2 end of period level + * - PWM 3 end of duty level + * - PWM 3 end of period level + * - PWM 4 end of duty level + * - PWM 4 end of period level + * - PWM 5 end of duty level + * - PWM 5 end of period level + * - PWM 6 end of duty level + * - PWM 6 end of period level + * - PWM 7 end of duty level + * - PWM 7 end of period level + + * - CCU Edge Detection 0 level + * - CCU Edge Detection 1 level + * - CCU Edge Detection 2 level + * - CCU Edge Detection 3 level + * - CCU Edge Detection 4 level + * - CCU Edge Detection 5 level + * - CCU Edge Detection 6 level + * - CCU Edge Detection 7 level + */ + hetREG1->PRY = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + /** - Enable interrupts + * - PWM 0 end of duty + * - PWM 0 end of period + * - PWM 1 end of duty + * - PWM 1 end of period + * - PWM 2 end of duty + * - PWM 2 end of period + * - PWM 3 end of duty + * - PWM 3 end of period + * - PWM 4 end of duty + * - PWM 4 end of period + * - PWM 5 end of duty + * - PWM 5 end of period + * - PWM 6 end of duty + * - PWM 6 end of period + * - PWM 7 end of duty + * - PWM 7 end of period + * - CCU Edge Detection 0 + * - CCU Edge Detection 1 + * - CCU Edge Detection 2 + * - CCU Edge Detection 3 + * - CCU Edge Detection 4 + * - CCU Edge Detection 5 + * - CCU Edge Detection 6 + * - CCU Edge Detection 7 + */ + hetREG1->INTENAC = 0xFFFFFFFFU; + hetREG1->INTENAS = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + + /** - Setup control register + * - Enable output buffers + * - Ignore software breakpoints + * - Master or Slave Clock Mode + * - Enable HET + */ + hetREG1->GCR = ( 0x00000001U + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)1U << 16U) + | (0x00020000U)); + + + /** @b initialize @b HET 2 */ + + /** - Set HET pins default output value */ + hetREG2->DOUT = (uint32)((uint32)0U << 18U) + | (uint32)((uint32)0U << 17U) + | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)0U << 15U) + | (uint32)((uint32)0U << 14U) + | (uint32)((uint32)0U << 13U) + | (uint32)((uint32)0U << 12U) + | (uint32)((uint32)0U << 11U) + | (uint32)((uint32)0U << 10U) + | (uint32)((uint32)0U << 9U) + | (uint32)((uint32)0U << 8U) + | (uint32)((uint32)0U << 7U) + | (uint32)((uint32)0U << 6U) + | (uint32)((uint32)0U << 5U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)0U << 3U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)0U << 1U) + | (uint32)((uint32)0U << 0U); + + /** - Set HET pins direction */ + hetREG2->DIR = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + /** - Set HET pins open drain enable */ + hetREG2->PDR = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + /** - Set HET pins pullup/down enable */ + hetREG2->PULDIS = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + /** - Set HET pins pullup/down select */ + hetREG2->PSL = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + /** - Set HET pins high resolution share */ + hetREG2->HRSH = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000008U + | (uint32) 0x00000004U + | (uint32) 0x00000002U + | (uint32) 0x00000001U; + + /** - Set HET pins AND share */ + hetREG2->AND = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + /** - Set HET pins XOR share */ + hetREG2->XOR = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + /** - Setup prescaler values + * - Loop resolution prescaler + * - High resolution prescaler + */ + hetREG2->PFR = (uint32)((uint32) 7U << 8U) + | ((uint32) 0U); + + /** - Parity control register + * - Enable/Disable Parity check + */ + hetREG2->PCR = (uint32) 0x00000005U; + + /** - Fill HET RAM with opcodes and Data */ + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + + /** - Release from reset */ + /*SAFETYMCUSW 94 S MR:11.1,11.2,11.4 "HET RAM Fill from the table - Allowed as per MISRA rule 11.2" */ + /*SAFETYMCUSW 94 S MR:11.1,11.2,11.4 "HET RAM Fill from the table - Allowed as per MISRA rule 11.2" */ + /*SAFETYMCUSW 95 S MR:11.1,11.4 "HET RAM Fill from the table - Allowed as per MISRA rule 11.2" */ + /*SAFETYMCUSW 95 S MR:11.1,11.4 "HET RAM Fill from the table - Allowed as per MISRA rule 11.2" */ + (void)memcpy((void *)hetRAM2, (const void *)het2PROGRAM, sizeof(het2PROGRAM)); + + /** - Setup prescaler values + * - Loop resolution prescaler + * - High resolution prescaler + */ + hetREG2->PFR = (uint32)((uint32) 7U << 8U) + | ((uint32) 0U); + + /** - Setup interrupt priority level + * - PWM 0 end of duty level + * - PWM 0 end of period level + * - PWM 1 end of duty level + * - PWM 1 end of period level + * - PWM 2 end of duty level + * - PWM 2 end of period level + * - PWM 3 end of duty level + * - PWM 3 end of period level + * - PWM 4 end of duty level + * - PWM 4 end of period level + * - PWM 5 end of duty level + * - PWM 5 end of period level + * - PWM 6 end of duty level + * - PWM 6 end of period level + * - PWM 7 end of duty level + * - PWM 7 end of period level + + * - CCU Edge Detection 0 level + * - CCU Edge Detection 1 level + * - CCU Edge Detection 2 level + * - CCU Edge Detection 3 level + * - CCU Edge Detection 4 level + * - CCU Edge Detection 5 level + * - CCU Edge Detection 6 level + * - CCU Edge Detection 7 level + */ + hetREG2->PRY = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + /** - Enable interrupts + * - PWM 0 end of duty + * - PWM 0 end of period + * - PWM 1 end of duty + * - PWM 1 end of period + * - PWM 2 end of duty + * - PWM 2 end of period + * - PWM 3 end of duty + * - PWM 3 end of period + * - PWM 4 end of duty + * - PWM 4 end of period + * - PWM 5 end of duty + * - PWM 5 end of period + * - PWM 6 end of duty + * - PWM 6 end of period + * - PWM 7 end of duty + * - PWM 7 end of period + * - CCU Edge Detection 0 + * - CCU Edge Detection 1 + * - CCU Edge Detection 2 + * - CCU Edge Detection 3 + * - CCU Edge Detection 4 + * - CCU Edge Detection 5 + * - CCU Edge Detection 6 + * - CCU Edge Detection 7 + */ + hetREG2->INTENAC = 0xFFFFFFFFU; + hetREG2->INTENAS = (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U + | (uint32) 0x00000000U; + + + + /** - Setup control register + * - Enable output buffers + * - Ignore software breakpoints + * - Master or Slave Clock Mode + * - Enable HET + */ + hetREG2->GCR = ( 0x00000001U + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)1U << 16U) + | (0x00020000U)); + + /** @note This function has to be called before the driver can be used.\n + * This function has to be executed in privileged mode.\n + */ + + +} +/** @fn void pwmStart( hetRAMBASE_t * hetRAM, uint32 pwm) +* @brief Start pwm signal +* @param[in] hetRAM Pointer to HET RAM: +* - hetRAM1: HET1 RAM pointer +* - hetRAM2: HET2 RAM pointer +* @param[in] pwm Pwm signal: +* - pwm0: Pwm 0 +* - pwm1: Pwm 1 +* - pwm2: Pwm 2 +* - pwm3: Pwm 3 +* - pwm4: Pwm 4 +* - pwm5: Pwm 5 +* - pwm6: Pwm 6 +* - pwm7: Pwm 7 +* +* Start the given pwm signal +*/ +/* SourceId : HET_SourceId_002 */ +/* DesignId : HET_DesignId_002 */ +/* Requirements : HL_SR364 */ +void pwmStart( hetRAMBASE_t * hetRAM, uint32 pwm) +{ + + hetRAM->Instruction[(pwm << 1U) + 41U].Control |= 0x00400000U; +} + + +/** @fn void pwmStop( hetRAMBASE_t * hetRAM, uint32 pwm) +* @brief Stop pwm signal +* @param[in] hetRAM Pointer to HET RAM: +* - hetRAM1: HET1 RAM pointer +* - hetRAM2: HET2 RAM pointer +* @param[in] pwm Pwm signal: +* - pwm0: Pwm 0 +* - pwm1: Pwm 1 +* - pwm2: Pwm 2 +* - pwm3: Pwm 3 +* - pwm4: Pwm 4 +* - pwm5: Pwm 5 +* - pwm6: Pwm 6 +* - pwm7: Pwm 7 +* +* Stop the given pwm signal +*/ +/* SourceId : HET_SourceId_003 */ +/* DesignId : HET_DesignId_003 */ +/* Requirements : HL_SR365 */ +void pwmStop( hetRAMBASE_t * hetRAM, uint32 pwm) +{ + hetRAM->Instruction[(pwm << 1U) + 41U].Control &= ~(uint32)0x00400000U; +} + + +/** @fn void pwmSetDuty(hetRAMBASE_t * hetRAM, uint32 pwm, uint32 pwmDuty) +* @brief Set duty cycle +* @param[in] hetRAM Pointer to HET RAM: +* - hetRAM1: HET1 RAM pointer +* - hetRAM2: HET2 RAM pointer +* @param[in] pwm Pwm signal: +* - pwm0: Pwm 0 +* - pwm1: Pwm 1 +* - pwm2: Pwm 2 +* - pwm3: Pwm 3 +* - pwm4: Pwm 4 +* - pwm5: Pwm 5 +* - pwm6: Pwm 6 +* - pwm7: Pwm 7 +* @param[in] pwmDuty duty cycle in %. +* +* Sets a new duty cycle on the given pwm signal +*/ +/* SourceId : HET_SourceId_004 */ +/* DesignId : HET_DesignId_004 */ +/* Requirements : HL_SR366 */ +void pwmSetDuty(hetRAMBASE_t * hetRAM, uint32 pwm, uint32 pwmDuty) +{ + uint32 action; + uint32 pwmPolarity =0U; + uint32 pwmPeriod = hetRAM->Instruction[(pwm << 1U) + 42U].Data + 128U; + pwmPeriod = pwmPeriod >> 7U; + + if(hetRAM == hetRAM1) + { + pwmPolarity = s_het1pwmPolarity[pwm]; + } + else + { + pwmPolarity = s_het2pwmPolarity[pwm]; + } + if (pwmDuty == 0U) + { + action = (pwmPolarity == 3U) ? 0U : 2U; + } + else if (pwmDuty >= 100U) + { + action = (pwmPolarity == 3U) ? 2U : 0U; + } + else + { + action = pwmPolarity; + } + + hetRAM->Instruction[(pwm << 1U) + 41U].Control = ((hetRAM->Instruction[(pwm << 1U) + 41U].Control) & (~(uint32)(0x00000018U))) | (action << 3U); + hetRAM->Instruction[(pwm << 1U) + 41U].Data = (((pwmPeriod * pwmDuty) / 100U) << 7U) + 128U; +} + + +/** @fn void pwmSetSignal(hetRAMBASE_t * hetRAM, uint32 pwm, hetSIGNAL_t signal) +* @brief Set period +* @param[in] hetRAM Pointer to HET RAM: +* - hetRAM1: HET1 RAM pointer +* - hetRAM2: HET2 RAM pointer +* @param[in] pwm Pwm signal: +* - pwm0: Pwm 0 +* - pwm1: Pwm 1 +* - pwm2: Pwm 2 +* - pwm3: Pwm 3 +* - pwm4: Pwm 4 +* - pwm5: Pwm 5 +* - pwm6: Pwm 6 +* - pwm7: Pwm 7 +* @param[in] signal signal + - duty cycle in %. +* - period period in us. +* +* Sets a new pwm signal +*/ +/* SourceId : HET_SourceId_005 */ +/* DesignId : HET_DesignId_005 */ +/* Requirements : HL_SR367 */ +void pwmSetSignal(hetRAMBASE_t * hetRAM, uint32 pwm, hetSIGNAL_t signal) +{ + uint32 action; + uint32 pwmPolarity = 0U; + float64 pwmPeriod = 0.0F; + + if(hetRAM == hetRAM1) + { + pwmPeriod = (signal.period * 1000.0F) / 1163.636F; + pwmPolarity = s_het1pwmPolarity[pwm]; + } + else + { + pwmPeriod = (signal.period * 1000.0F) / 1163.636F; + pwmPolarity = s_het2pwmPolarity[pwm]; + } + if (signal.duty == 0U) + { + action = (pwmPolarity == 3U) ? 0U : 2U; + } + else if (signal.duty >= 100U) + { + action = (pwmPolarity == 3U) ? 2U : 0U; + } + else + { + action = pwmPolarity; + } + + hetRAM->Instruction[(pwm << 1U) + 41U].Control = ((hetRAM->Instruction[(pwm << 1U) + 41U].Control) & (~(uint32)(0x00000018U))) | (action << 3U); + hetRAM->Instruction[(pwm << 1U) + 41U].Data = ((((uint32)pwmPeriod * signal.duty) / 100U) << 7U ) + 128U; + hetRAM->Instruction[(pwm << 1U) + 42U].Data = ((uint32)pwmPeriod << 7U) - 128U; + +} + + +/** @fn void pwmGetSignal(hetRAMBASE_t * hetRAM, uint32 pwm, hetSIGNAL_t signal) +* @brief Get duty cycle +* @param[in] hetRAM Pointer to HET RAM: +* - hetRAM1: HET1 RAM pointer +* - hetRAM2: HET2 RAM pointer +* @param[in] pwm Pwm signal: +* - pwm0: Pwm 0 +* - pwm1: Pwm 1 +* - pwm2: Pwm 2 +* - pwm3: Pwm 3 +* - pwm4: Pwm 4 +* - pwm5: Pwm 5 +* - pwm6: Pwm 6 +* - pwm7: Pwm 7 +* @param[in] signal signal +* - duty cycle in %. +* - period period in us. +* +* Gets current signal of the given pwm signal. +*/ +/* SourceId : HET_SourceId_006 */ +/* DesignId : HET_DesignId_006 */ +/* Requirements : HL_SR368 */ +void pwmGetSignal(hetRAMBASE_t * hetRAM, uint32 pwm, hetSIGNAL_t* signal) +{ + uint32 pwmDuty = (hetRAM->Instruction[(pwm << 1U) + 41U].Data - 128U) >> 7U; + uint32 pwmPeriod = (hetRAM->Instruction[(pwm << 1U) + 42U].Data + 128U) >> 7U; + + signal->duty = (pwmDuty * 100U) / pwmPeriod; + + if(hetRAM == hetRAM1) + { + signal->period = ((float64)pwmPeriod * 1163.636F) / 1000.0F; + } + else + { + signal->period = ((float64)pwmPeriod * 1163.636F) / 1000.0F; + } +} + +/** @fn void pwmEnableNotification(hetBASE_t * hetREG, uint32 pwm, uint32 notification) +* @brief Enable pwm notification +* @param[in] hetREG Pointer to HET Module: +* - hetREG1: HET1 Module pointer +* - hetREG2: HET2 Module pointer +* @param[in] pwm Pwm signal: +* - pwm0: Pwm 0 +* - pwm1: Pwm 1 +* - pwm2: Pwm 2 +* - pwm3: Pwm 3 +* - pwm4: Pwm 4 +* - pwm5: Pwm 5 +* - pwm6: Pwm 6 +* - pwm7: Pwm 7 +* @param[in] notification Pwm notification: +* - pwmEND_OF_DUTY: Notification on end of duty +* - pwmEND_OF_PERIOD: Notification on end of end period +* - pwmEND_OF_BOTH: Notification on end of both duty and period +*/ +/* SourceId : HET_SourceId_007 */ +/* DesignId : HET_DesignId_007 */ +/* Requirements : HL_SR369 */ +void pwmEnableNotification(hetBASE_t * hetREG, uint32 pwm, uint32 notification) +{ + hetREG->FLG = notification << (pwm << 1U); + hetREG->INTENAS = notification << (pwm << 1U); +} + + +/** @fn void pwmDisableNotification(hetBASE_t * hetREG, uint32 pwm, uint32 notification) +* @brief Enable pwm notification +* @param[in] hetREG Pointer to HET Module: +* - hetREG1: HET1 Module pointer +* - hetREG2: HET2 Module pointer +* @param[in] pwm Pwm signal: +* - pwm0: Pwm 0 +* - pwm1: Pwm 1 +* - pwm2: Pwm 2 +* - pwm3: Pwm 3 +* - pwm4: Pwm 4 +* - pwm5: Pwm 5 +* - pwm6: Pwm 6 +* - pwm7: Pwm 7 +* @param[in] notification Pwm notification: +* - pwmEND_OF_DUTY: Notification on end of duty +* - pwmEND_OF_PERIOD: Notification on end of end period +* - pwmEND_OF_BOTH: Notification on end of both duty and period +*/ +/* SourceId : HET_SourceId_008 */ +/* DesignId : HET_DesignId_008 */ +/* Requirements : HL_SR370 */ +void pwmDisableNotification(hetBASE_t * hetREG, uint32 pwm, uint32 notification) +{ + hetREG->INTENAC = notification << (pwm << 1U); +} + + +/** @fn void edgeResetCounter(hetRAMBASE_t * hetRAM, uint32 edge) +* @brief Resets edge counter to 0 +* @param[in] hetRAM Pointer to HET RAM: +* - hetRAM1: HET1 RAM pointer +* - hetRAM2: HET2 RAM pointer +* @param[in] edge Edge signal: +* - edge0: Edge 0 +* - edge1: Edge 1 +* - edge2: Edge 2 +* - edge3: Edge 3 +* - edge4: Edge 4 +* - edge5: Edge 5 +* - edge6: Edge 6 +* - edge7: Edge 7 +* +* Reset edge counter to 0. +*/ +/* SourceId : HET_SourceId_009 */ +/* DesignId : HET_DesignId_009 */ +/* Requirements : HL_SR372 */ +void edgeResetCounter(hetRAMBASE_t * hetRAM, uint32 edge) +{ + hetRAM->Instruction[edge + 17U].Data = 0U; +} + + +/** @fn uint32 edgeGetCounter(hetRAMBASE_t * hetRAM, uint32 edge) +* @brief Get current edge counter value +* @param[in] hetRAM Pointer to HET RAM: +* - hetRAM1: HET1 RAM pointer +* - hetRAM2: HET2 RAM pointer +* @param[in] edge Edge signal: +* - edge0: Edge 0 +* - edge1: Edge 1 +* - edge2: Edge 2 +* - edge3: Edge 3 +* - edge4: Edge 4 +* - edge5: Edge 5 +* - edge6: Edge 6 +* - edge7: Edge 7 +* +* Gets current edge counter value. +*/ +/* SourceId : HET_SourceId_010 */ +/* DesignId : HET_DesignId_010 */ +/* Requirements : HL_SR373 */ +uint32 edgeGetCounter(hetRAMBASE_t * hetRAM, uint32 edge) +{ + return hetRAM->Instruction[edge + 17U].Data >> 7U; +} + + +/** @fn void edgeEnableNotification(hetBASE_t * hetREG, uint32 edge) +* @brief Enable edge notification +* @param[in] hetREG Pointer to HET Module: +* - hetREG1: HET1 Module pointer +* - hetREG2: HET2 Module pointer +* @param[in] edge Edge signal: +* - edge0: Edge 0 +* - edge1: Edge 1 +* - edge2: Edge 2 +* - edge3: Edge 3 +* - edge4: Edge 4 +* - edge5: Edge 5 +* - edge6: Edge 6 +* - edge7: Edge 7 +*/ +/* SourceId : HET_SourceId_011 */ +/* DesignId : HET_DesignId_011 */ +/* Requirements : HL_SR374 */ +void edgeEnableNotification(hetBASE_t * hetREG, uint32 edge) +{ + hetREG->FLG = (uint32)0x20000U << edge; + hetREG->INTENAS = (uint32)0x20000U << edge; +} + + +/** @fn void edgeDisableNotification(hetBASE_t * hetREG, uint32 edge) +* @brief Enable edge notification +* @param[in] hetREG Pointer to HET Module: +* - hetREG1: HET1 Module pointer +* - hetREG2: HET2 Module pointer +* @param[in] edge Edge signal: +* - edge0: Edge 0 +* - edge1: Edge 1 +* - edge2: Edge 2 +* - edge3: Edge 3 +* - edge4: Edge 4 +* - edge5: Edge 5 +* - edge6: Edge 6 +* - edge7: Edge 7 +*/ +/* SourceId : HET_SourceId_012 */ +/* DesignId : HET_DesignId_012 */ +/* Requirements : HL_SR375 */ +void edgeDisableNotification(hetBASE_t * hetREG, uint32 edge) +{ + hetREG->INTENAC = (uint32)0x20000U << edge; +} + + +/** @fn void capGetSignal(hetRAMBASE_t * hetRAM, uint32 cap, hetSIGNAL_t signal) +* @brief Get capture signal +* @param[in] hetRAM Pointer to HET RAM: +* - hetRAM1: HET1 RAM pointer +* - hetRAM2: HET2 RAM pointer +* @param[in] cap captured signal: +* - cap0: Captured signal 0 +* - cap1: Captured signal 1 +* - cap2: Captured signal 2 +* - cap3: Captured signal 3 +* - cap4: Captured signal 4 +* - cap5: Captured signal 5 +* - cap6: Captured signal 6 +* - cap7: Captured signal 7 +* @param[in] signal signal +* - duty cycle in %. +* - period period in us. +* +* Gets current signal of the given capture signal. +*/ +/* SourceId : HET_SourceId_013 */ +/* DesignId : HET_DesignId_013 */ +/* Requirements : HL_SR377 */ +void capGetSignal(hetRAMBASE_t * hetRAM, uint32 cap, hetSIGNAL_t *signal) +{ + uint32 pwmDuty = (hetRAM->Instruction[(cap << 1U) + 25U].Data) >> 7U; + uint32 pwmPeriod = (hetRAM->Instruction[(cap << 1U) + 26U].Data) >> 7U; + + signal->duty = (pwmDuty * 100U) / pwmPeriod; + + if( hetRAM == hetRAM1) + { + signal->period = ((float64)pwmPeriod * 1163.636F) / 1000.0F; + } + else + { + signal->period = ((float64)pwmPeriod * 1163.636F) / 1000.0F; + } +} + + +/** @fn void hetResetTimestamp(hetRAMBASE_t *hetRAM) +* @brief Resets timestamp +* @param[in] hetRAM Pointer to HET RAM: +* - hetRAM1: HET1 RAM pointer +* - hetRAM2: HET2 RAM pointer +* +* Resets loop count based timestamp. +*/ +/* SourceId : HET_SourceId_014 */ +/* DesignId : HET_DesignId_014 */ +/* Requirements : HL_SR378 */ +void hetResetTimestamp(hetRAMBASE_t * hetRAM) +{ + hetRAM->Instruction[0U].Data = 0U; +} + + +/** @fn uint32 hetGetTimestamp(hetRAMBASE_t *hetRAM) +* @brief Returns timestamp +* +* Returns loop count based timestamp. +*/ +/* SourceId : HET_SourceId_015 */ +/* DesignId : HET_DesignId_015 */ +/* Requirements : HL_SR379 */ +uint32 hetGetTimestamp(hetRAMBASE_t * hetRAM) +{ + return hetRAM->Instruction[57U].Data; +} + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + + +/** @fn void het1GetConfigValue(het_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the HET1 configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : HET_SourceId_016 */ +/* DesignId : HET_DesignId_016 */ +/* Requirements : HL_SR379 */ +void het1GetConfigValue(het_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_GCR = HET1_GCR_CONFIGVALUE; + config_reg->CONFIG_PFR = HET1_PFR_CONFIGVALUE; + config_reg->CONFIG_INTENAS = HET1_INTENAS_CONFIGVALUE; + config_reg->CONFIG_INTENAC = HET1_INTENAC_CONFIGVALUE; + config_reg->CONFIG_PRY = HET1_PRY_CONFIGVALUE; + config_reg->CONFIG_AND = HET1_AND_CONFIGVALUE; + config_reg->CONFIG_HRSH = HET1_HRSH_CONFIGVALUE; + config_reg->CONFIG_XOR = HET1_XOR_CONFIGVALUE; + config_reg->CONFIG_DIR = HET1_DIR_CONFIGVALUE; + config_reg->CONFIG_PDR = HET1_PDR_CONFIGVALUE; + config_reg->CONFIG_PULDIS = HET1_PULDIS_CONFIGVALUE; + config_reg->CONFIG_PSL = HET1_PSL_CONFIGVALUE; + config_reg->CONFIG_PCR = HET1_PCR_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_GCR = hetREG1->GCR; + config_reg->CONFIG_PFR = hetREG1->PFR; + config_reg->CONFIG_INTENAS = hetREG1->INTENAS; + config_reg->CONFIG_INTENAC = hetREG1->INTENAC; + config_reg->CONFIG_PRY = hetREG1->PRY; + config_reg->CONFIG_AND = hetREG1->AND; + config_reg->CONFIG_HRSH = hetREG1->HRSH; + config_reg->CONFIG_XOR = hetREG1->XOR; + config_reg->CONFIG_DIR = hetREG1->DIR; + config_reg->CONFIG_PDR = hetREG1->PDR; + config_reg->CONFIG_PULDIS = hetREG1->PULDIS; + config_reg->CONFIG_PSL = hetREG1->PSL; + config_reg->CONFIG_PCR = hetREG1->PCR; + } +} + +/** @fn void het2GetConfigValue(het_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the HET2 configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : HET_SourceId_017 */ +/* DesignId : HET_DesignId_016 */ +/* Requirements : HL_SR379 */ +void het2GetConfigValue(het_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_GCR = HET2_GCR_CONFIGVALUE; + config_reg->CONFIG_PFR = HET2_PFR_CONFIGVALUE; + config_reg->CONFIG_INTENAS = HET2_INTENAS_CONFIGVALUE; + config_reg->CONFIG_INTENAC = HET2_INTENAC_CONFIGVALUE; + config_reg->CONFIG_PRY = HET2_PRY_CONFIGVALUE; + config_reg->CONFIG_AND = HET2_AND_CONFIGVALUE; + config_reg->CONFIG_HRSH = HET2_HRSH_CONFIGVALUE; + config_reg->CONFIG_XOR = HET2_XOR_CONFIGVALUE; + config_reg->CONFIG_DIR = HET2_DIR_CONFIGVALUE; + config_reg->CONFIG_PDR = HET2_PDR_CONFIGVALUE; + config_reg->CONFIG_PULDIS = HET2_PULDIS_CONFIGVALUE; + config_reg->CONFIG_PSL = HET2_PSL_CONFIGVALUE; + config_reg->CONFIG_PCR = HET2_PCR_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_GCR = hetREG2->GCR; + config_reg->CONFIG_PFR = hetREG2->PFR; + config_reg->CONFIG_INTENAS = hetREG2->INTENAS; + config_reg->CONFIG_INTENAC = hetREG2->INTENAC; + config_reg->CONFIG_PRY = hetREG2->PRY; + config_reg->CONFIG_AND = hetREG2->AND; + config_reg->CONFIG_HRSH = hetREG2->HRSH; + config_reg->CONFIG_XOR = hetREG2->XOR; + config_reg->CONFIG_DIR = hetREG2->DIR; + config_reg->CONFIG_PDR = hetREG2->PDR; + config_reg->CONFIG_PULDIS = hetREG2->PULDIS; + config_reg->CONFIG_PSL = hetREG2->PSL; + config_reg->CONFIG_PCR = hetREG2->PCR; + } +} + + + + + Index: firmware/source/i2c.c =================================================================== diff -u --- firmware/source/i2c.c (revision 0) +++ firmware/source/i2c.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,849 @@ +/** @file i2c.c +* @brief I2C Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "i2c.h" +#include "sys_vim.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @struct g_i2CTransfer +* @brief Interrupt mode globals +* +*/ +static struct g_i2cTransfer +{ + uint32 mode; + uint32 length; + uint8 * data; +} g_i2cTransfer_t; + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/** @fn void i2cInit(void) +* @brief Initializes the i2c Driver +* +* This function initializes the i2c module. +*/ +/* SourceId : I2C_SourceId_001 */ +/* DesignId : I2C_DesignId_001 */ +/* Requirements : HL_SR279 */ +void i2cInit(void) +{ +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + + /** @b initialize @b I2C */ + + /** - i2c Enter reset */ + i2cREG1->MDR = (uint32)((uint32)0U << 5U); + + /** - set i2c mode */ + i2cREG1->MDR = (uint32)((uint32)0U << 15U) /* nack mode */ + | (uint32)((uint32)0U << 14U) /* free running */ + | (uint32)(0U) /* start condition - master only */ + | (uint32)((uint32)1U <<11U) /* stop condition */ + | (uint32)((uint32)1U <<10U) /* Master/Slave mode */ + | (uint32)((uint32)I2C_TRANSMITTER) /* Transmitter/receiver */ + | (uint32)((uint32)I2C_7BIT_AMODE) /* xpanded address */ + | (uint32)((uint32)0U << 7U) /* repeat mode */ + | (uint32)((uint32)0U << 6U) /* digital loop back */ + | (uint32)((uint32)0U << 4U) /* start byte - master only */ + | (uint32)((uint32)0U << 3U) /* free data format */ + | (uint32)(I2C_8_BIT); /* bit count */ + + + /** - set i2c Backward Compatibility mode */ + i2cREG1->EMDR = 0U; + + /** - Disable DMA */ + i2cREG1->DMACR = 0x00U; + + /** - set i2c data count */ + i2cREG1->CNT = 8U; + + /** - disable all interrupts */ + i2cREG1->IMR = 0x00U; + + /** - set prescale */ + i2cREG1->PSC = 13U; + + /** - set clock rate */ + i2cREG1->CKH = 34U; + i2cREG1->CKL = 34U; + + /** - set i2c pins functional mode */ + i2cREG1->PFNC = (0U); + + /** - set i2c pins default output value */ + i2cREG1->DOUT = (uint32)((uint32)0U << 1U) /* sda pin */ + | (uint32)(0U); /* scl pin */ + + /** - set i2c pins output direction */ + i2cREG1->DIR = (uint32)((uint32)0U << 1U) /* sda pin */ + | (uint32)(0U); /* scl pin */ + + /** - set i2c pins open drain enable */ + i2cREG1->PDR = (uint32)((uint32)0U << 1U) /* sda pin */ + | (uint32)(0U); /* scl pin */ + + /** - set i2c pins pullup/pulldown enable */ + i2cREG1->PDIS = (uint32)((uint32)0U << 1U) /* sda pin */ + | (uint32)(0U); /* scl pin */ + + /** - set i2c pins pullup/pulldown select */ + i2cREG1->PSEL = (uint32)((uint32)1U << 1U) /* sda pin */ + | (uint32)(1U); /* scl pin */ + + /** - set interrupt enable */ + i2cREG1->IMR = (uint32)((uint32)0U << 6U) /* Address as slave interrupt */ + | (uint32)((uint32)0U << 5U) /* Stop Condition detect interrupt */ + | (uint32)((uint32)0U << 4U) /* Transmit data ready interrupt */ + | (uint32)((uint32)0U << 3U) /* Receive data ready interrupt */ + | (uint32)((uint32)0U << 2U) /* Register Access ready interrupt */ + | (uint32)((uint32)0U << 1U) /* No Acknowledgement interrupt */ + | (uint32)((uint32)0U); /* Arbitration Lost interrupt */ + + /** - i2c Out of reset */ + i2cREG1->MDR |= (uint32)I2C_RESET_OUT; + + /** - initialize global transfer variables */ + g_i2cTransfer_t.mode = (uint32)0U << 4U; + g_i2cTransfer_t.length = 0U; + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + +} + +/** @fn void i2cSetOwnAdd(i2cBASE_t *i2c, uint32 oadd) +* @brief Set I2C Own Address +* @param[in] oadd - I2C Own address (7-bit or 10 -bit address) +* @param[in] i2c - i2c module base address +* Set the Own address of the I2C module. +*/ +/* SourceId : I2C_SourceId_002 */ +/* DesignId : I2C_DesignId_002 */ +/* Requirements : HL_SR280 */ +void i2cSetOwnAdd(i2cBASE_t *i2c, uint32 oadd) +{ + i2c->OAR = oadd; /* set own address */ +} + +/** @fn void i2cSetSlaveAdd(i2cBASE_t *i2c, uint32 sadd) +* @brief Set Port Direction +* @param[in] sadd - I2C Slave address +* @param[in] i2c - i2c module base address +* Set the Slave address to communicate which is must in Master mode. +*/ +/* SourceId : I2C_SourceId_003 */ +/* DesignId : I2C_DesignId_003 */ +/* Requirements : HL_SR281 */ +void i2cSetSlaveAdd(i2cBASE_t *i2c, uint32 sadd) +{ + i2c->SAR = sadd; /* set slave address */ +} + +/** @fn void i2cSetBaudrate(i2cBASE_t *i2c, uint32 baud) +* @brief Change baudrate at runtime. +* @param[in] i2c - i2c module base address +* @param[in] baud - baudrate in KHz +* +* Change the i2c baudrate at runtime. The I2C module needs to be taken to reset( nIRS=0 in I2CMDR) in order to change baud rate. +*/ +/* SourceId : I2C_SourceId_004 */ +/* DesignId : I2C_DesignId_004 */ +/* Requirements : HL_SR282 */ +void i2cSetBaudrate(i2cBASE_t *i2c, uint32 baud) +{ + uint32 prescale; + uint32 d; + uint32 ck; + float64 vclk = 110.000F * 1000000.0F; + float64 divider= 0.0F; + uint32 temp = 0U; + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + + divider = vclk / 8000000.0F; + prescale = (uint32)divider - 1U; + + if(prescale>=2U) + { + d = 5U; + } + else + { + d = (prescale != 0U) ? 6U : 7U; + } + + temp = 2U * baud * 1000U * (prescale + 1U); + divider = vclk / ((float64)temp); + ck = (uint32)divider - d; + + i2c->PSC = prescale; + i2c->CKH = ck; + i2c->CKL = ck; + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + +} + +/** @fn void i2cSetStart(i2cBASE_t *i2c) +* @brief Set i2c start condition +* @param[in] i2c - i2c module base address +* Set i2c to generate a start bit (Only in Master mode) +*/ +/* SourceId : I2C_SourceId_005 */ +/* DesignId : I2C_DesignId_015 */ +/* Requirements : HL_SR293 */ +void i2cSetStart(i2cBASE_t *i2c) +{ +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + + i2c->MDR |= (uint32)I2C_START_COND; /* set start condition */ + +/* USER CODE BEGIN (8) */ +/* USER CODE END */ +} + +/** @fn void i2cSetStop(i2cBASE_t *i2c) +* @brief Set i2c stop condition +* @param[in] i2c - i2c module base address +* Set i2c to generate a stop bit (Only in Master mode) +*/ +/* SourceId : I2C_SourceId_006 */ +/* DesignId : I2C_DesignId_016 */ +/* Requirements : HL_SR294 */ +void i2cSetStop(i2cBASE_t *i2c) +{ +/* USER CODE BEGIN (9) */ +/* USER CODE END */ + + i2c->MDR |= (uint32)I2C_STOP_COND; /* generate stop condition */ + +/* USER CODE BEGIN (10) */ +/* USER CODE END */ +} + +/** @fn void i2cSetCount(i2cBASE_t *i2c,uint32 cnt) +* @brief Set i2c data count +* @param[in] i2c - i2c module base address +* @param[in] cnt - data count +* Set i2c count to a transfer value after which the stop condition needs to be generated. +* (Only in Master Mode) +*/ +/* SourceId : I2C_SourceId_007 */ +/* DesignId : I2C_DesignId_017 */ +/* Requirements : HL_SR295 */ +void i2cSetCount(i2cBASE_t *i2c ,uint32 cnt) +{ +/* USER CODE BEGIN (11) */ +/* USER CODE END */ + + i2c->CNT = cnt; /* set i2c count */ + +/* USER CODE BEGIN (12) */ +/* USER CODE END */ +} + +/** @fn uint32 i2cIsTxReady(i2cBASE_t *i2c) +* @brief Check if Tx buffer empty +* @param[in] i2c - i2c module base address +* +* @return The TX ready flag +* +* Checks to see if the Tx buffer ready flag is set, returns +* 0 is flags not set otherwise will return the Tx flag itself. +*/ +/* SourceId : I2C_SourceId_008 */ +/* DesignId : I2C_DesignId_005 */ +/* Requirements : HL_SR283 */ +uint32 i2cIsTxReady(i2cBASE_t *i2c) +{ +/* USER CODE BEGIN (13) */ +/* USER CODE END */ + + return i2c->STR & (uint32)I2C_TX_INT; + +/* USER CODE BEGIN (14) */ +/* USER CODE END */ +} + +/** @fn void i2cSendByte(i2cBASE_t *i2c, uint8 byte) +* @brief Send Byte +* @param[in] i2c - i2c module base address +* @param[in] byte - byte to transfer +* +* Sends a single byte in polling mode, will wait in the +* routine until the transmit buffer is empty before sending +* the byte. Use i2cIsTxReady to check for Tx buffer empty +* before calling i2cSendByte to avoid waiting. +*/ +/* SourceId : I2C_SourceId_009 */ +/* DesignId : I2C_DesignId_006 */ +/* Requirements : HL_SR284 */ +void i2cSendByte(i2cBASE_t *i2c, uint8 byte) +{ +/* USER CODE BEGIN (15) */ +/* USER CODE END */ + + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((i2c->STR & (uint32)I2C_TX_INT) == 0U) + { + } /* Wait */ + i2c->DXR = (uint32)byte; + +/* USER CODE BEGIN (16) */ +/* USER CODE END */ +} + +/** @fn void i2cSend(i2cBASE_t *i2c, uint32 length, uint8 * data) +* @brief Send Data +* @param[in] i2c - i2c module base address +* @param[in] length - number of data words to transfer +* @param[in] data - pointer to data to send +* +* Send a block of data pointed to by 'data' and 'length' bytes +* long. If interrupts have been enabled the data is sent using +* interrupt mode, otherwise polling mode is used. In interrupt +* mode transmission of the first byte is started and the routine +* returns immediately, i2cSend must not be called again until the +* transfer is complete, when the i2cNotification callback will +* be called. In polling mode, i2cSend will not return until +* the transfer is complete. +* +* @note if data word is less than 8 bits, then the data must be left +* aligned in the data byte. +*/ +/* SourceId : I2C_SourceId_010 */ +/* DesignId : I2C_DesignId_007 */ +/* Requirements : HL_SR285 */ +void i2cSend(i2cBASE_t *i2c, uint32 length, uint8 * data) +{ + +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + + if ((g_i2cTransfer_t.mode & (uint32)I2C_TX_INT) != 0U) + { + /* Interrupt mode */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + g_i2cTransfer_t.data = data; + /* start transmit by sending first byte */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + i2c->DXR = (uint32)(*g_i2cTransfer_t.data); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + g_i2cTransfer_t.data++; + + /* Length -1 since one data is written already */ + g_i2cTransfer_t.length = (length - 1U); + + /* Enable Transmit Interrupt */ + i2c->IMR |= (uint32)I2C_TX_INT; + } + else + { + /* send the data */ + while (length > 0U) + { + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((i2c->STR & (uint32)I2C_TX_INT) == 0U) + { + } /* Wait */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + i2c->DXR = (uint32)(*data); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + data++; + length--; + } + } +/* USER CODE BEGIN (18) */ +/* USER CODE END */ +} + +/** @fn uint32 i2cIsRxReady(i2cBASE_t *i2c) +* @brief Check if Rx buffer full +* @param[in] i2c - i2c module base address +* +* @return The Rx ready flag +* +* Checks to see if the Rx buffer full flag is set, returns +* 0 is flags not set otherwise will return the Rx flag itself. +*/ +/* SourceId : I2C_SourceId_011 */ +/* DesignId : I2C_DesignId_008 */ +/* Requirements : HL_SR286 */ +uint32 i2cIsRxReady(i2cBASE_t *i2c) +{ +/* USER CODE BEGIN (19) */ +/* USER CODE END */ + + return i2c->STR & (uint32)I2C_RX_INT; + +/* USER CODE BEGIN (20) */ +/* USER CODE END */ +} + +/** @fn uint32 i2cIsStopDetected(i2cBASE_t *i2c) +* @brief Check if Stop Condition Detected +* @param[in] i2c - i2c module base address +* +* @return The Stop Condition Detected flag +* +* Checks to see if the Stop Condition Detected flag is set, +* returns 0 if flags not set otherwise will return the Stop +* Condition Detected flag itself. +*/ +/* SourceId : I2C_SourceId_023 */ +/* DesignId : I2C_DesignId_023 */ +/* Requirements : HL_SR539 */ +uint32 i2cIsStopDetected(i2cBASE_t *i2c) +{ + return i2c->STR & (uint32)I2C_SCD_INT; +} + +/** @fn uint32 i2cRxError(i2cBASE_t *i2c) +* @brief Return Rx Error flags +* @param[in] i2c - i2c module base address +* +* @return The Rx error flags +* +* Returns the Rx framing, overrun and parity errors flags, +* also clears the error flags before returning. +*/ +/* SourceId : I2C_SourceId_012 */ +/* DesignId : I2C_DesignId_010 */ +/* Requirements : HL_SR288 */ +uint32 i2cRxError(i2cBASE_t *i2c) +{ + uint32 status = i2c->STR & ((uint32)I2C_AL_INT | (uint32)I2C_NACK_INT); + +/* USER CODE BEGIN (21) */ +/* USER CODE END */ + + i2c->STR = (uint32)((uint32)I2C_AL_INT | (uint32)I2C_NACK_INT); + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ + + return status; + +} + +/** @fn void i2cClearSCD(i2cBASE_t *i2c) +* @brief Clears the Stop condition detect flags. +* @param[in] i2c - i2c module base address +* +* This function is called to clear the Stop condition detect(SCD) flag +*/ +/* SourceId : I2C_SourceId_013 */ +/* DesignId : I2C_DesignId_009 */ +/* Requirements : HL_SR287 */ +void i2cClearSCD(i2cBASE_t *i2c) +{ +/* USER CODE BEGIN (23) */ +/* USER CODE END */ + + i2c->STR = (uint32)I2C_SCD_INT; + +/* USER CODE BEGIN (24) */ +/* USER CODE END */ +} + +/** @fn uint8 i2cReceiveByte(i2cBASE_t *i2c) +* @brief Receive Byte +* @param[in] i2c - i2c module base address +* +* @return Received byte +* +* Receives a single byte in polling mode. If there is +* not a byte in the receive buffer the routine will wait +* until one is received. Use i2cIsRxReady to check to +* see if the buffer is full to avoid waiting. +*/ +/* SourceId : I2C_SourceId_014 */ +/* DesignId : I2C_DesignId_011 */ +/* Requirements : HL_SR289 */ +uint8 i2cReceiveByte(i2cBASE_t *i2c) +{ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((i2c->STR & (uint32)I2C_RX_INT) == 0U) + { + } /* Wait */ +/* USER CODE BEGIN (25) */ +/* USER CODE END */ + + return ((uint8)i2c->DRR); +} + +/** @fn void i2cReceive(i2cBASE_t *i2c, uint32 length, uint8 * data) +* @brief Receive Data +* @param[in] i2c - i2c module base address +* @param[in] length - number of data words to transfer +* @param[in] data - pointer to data buffer +* +* Receive a block of 'length' bytes long and place it into the +* data buffer pointed to by 'data'. If interrupts have been +* enabled the data is received using interrupt mode, otherwise +* polling mode is used. In interrupt mode receive is setup and +* the routine returns immediately, i2cReceive must not be called +* again until the transfer is complete, when the i2cNotification +* callback will be called. In polling mode, i2cReceive will not +* return until the transfer is complete. +*/ +/* SourceId : I2C_SourceId_015 */ +/* DesignId : I2C_DesignId_012 */ +/* Requirements : HL_SR290 */ +void i2cReceive(i2cBASE_t *i2c, uint32 length, uint8 * data) +{ + +/* USER CODE BEGIN (26) */ +/* USER CODE END */ + if ((i2c->IMR & (uint32)I2C_RX_INT) != 0U) + { + /* we are in interrupt mode */ + /* clear error flags */ + i2c->STR = (uint32)I2C_AL_INT | (uint32)I2C_NACK_INT; + + g_i2cTransfer_t.length = length; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + g_i2cTransfer_t.data = data; + } + else + { + while (length > 0U) + { + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((i2c->STR & (uint32)I2C_RX_INT) == 0U) + { + } /* Wait */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + *data = ((uint8)i2c->DRR); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + data++; + length--; + } + } + +/* USER CODE BEGIN (27) */ +/* USER CODE END */ +} + +/** @fn void i2cEnableLoopback(i2cBASE_t *i2c) +* @brief Enable Loopback mode for self test +* @param[in] i2c - i2c module base address +* +* This function enables the Loopback mode for self test. +*/ +/* SourceId : I2C_SourceId_016 */ +/* DesignId : I2C_DesignId_018 */ +/* Requirements : HL_SR296 */ +void i2cEnableLoopback(i2cBASE_t *i2c) +{ +/* USER CODE BEGIN (28) */ +/* USER CODE END */ + + /* enable digital loopback */ + i2c->MDR |= ((uint32)1U << 6U); + +/* USER CODE BEGIN (29) */ +/* USER CODE END */ +} + +/** @fn void i2cDisableLoopback(i2cBASE_t *i2c) +* @brief Enable Loopback mode for self test +* @param[in] i2c - i2c module base address +* +* This function disable the Loopback mode. +*/ +/* SourceId : I2C_SourceId_017 */ +/* DesignId : I2C_DesignId_019 */ +/* Requirements : HL_SR297 */ +void i2cDisableLoopback(i2cBASE_t *i2c) +{ +/* USER CODE BEGIN (30) */ +/* USER CODE END */ + + /* Disable Loopback Mode */ + i2c->MDR &= 0xFFFFFFBFU; + +/* USER CODE BEGIN (31) */ +/* USER CODE END */ +} + +/** @fn i2cEnableNotification(i2cBASE_t *i2c, uint32 flags) +* @brief Enable interrupts +* @param[in] i2c - i2c module base address +* @param[in] flags - Interrupts to be enabled, can be ored value of: +* i2c_FE_INT - framing error, +* i2c_OE_INT - overrun error, +* i2c_PE_INT - parity error, +* i2c_RX_INT - receive buffer ready, +* i2c_TX_INT - transmit buffer ready, +* i2c_WAKE_INT - wakeup, +* i2c_BREAK_INT - break detect +*/ +/* SourceId : I2C_SourceId_018 */ +/* DesignId : I2C_DesignId_013 */ +/* Requirements : HL_SR291 */ +void i2cEnableNotification(i2cBASE_t *i2c, uint32 flags) +{ + +/* USER CODE BEGIN (32) */ +/* USER CODE END */ + + g_i2cTransfer_t.mode |= (flags & (uint32)I2C_TX_INT); + i2c->IMR = (flags & (uint32)(~(uint32)I2C_TX_INT)); +} + +/** @fn i2cDisableNotification(i2cBASE_t *i2c, uint32 flags) +* @brief Disable interrupts +* @param[in] i2c - i2c module base address +* @param[in] flags - Interrupts to be disabled, can be ored value of: +* i2c_FE_INT - framing error, +* i2c_OE_INT - overrun error, +* i2c_PE_INT - parity error, +* i2c_RX_INT - receive buffer ready, +* i2c_TX_INT - transmit buffer ready, +* i2c_WAKE_INT - wakeup, +* i2c_BREAK_INT - break detect +*/ +/* SourceId : I2C_SourceId_019 */ +/* DesignId : I2C_DesignId_014 */ +/* Requirements : HL_SR292 */ +void i2cDisableNotification(i2cBASE_t *i2c, uint32 flags) +{ + uint32 int_mask; + +/* USER CODE BEGIN (33) */ +/* USER CODE END */ + + g_i2cTransfer_t.mode &= (uint32)(~(flags & (uint32)I2C_TX_INT)); + int_mask = i2c->IMR &(uint32)(~(uint32)(flags | (uint32)I2C_TX_INT)); + i2c->IMR = int_mask; +} + + +/** @fn i2cSetMode(i2cBASE_t *i2c, uint32 mode) +* @brief Sets Master or Slave mode. +* @param[in] i2c - i2c module base address +* @param[in] mode - Mode can be either: +* I2C_MASTER - Master Mode, +* I2C_SLAVE - Slave Mode +*/ +/* SourceId : I2C_SourceId_020 */ +/* DesignId : I2C_DesignId_024 */ +/* Requirements : HL_SR526 */ +void i2cSetMode(i2cBASE_t *i2c, uint32 mode) +{ + uint32 temp_mdr; +/* USER CODE BEGIN (34) */ +/* USER CODE END */ + + /* set Master or Slave Mode */ + temp_mdr = (i2c->MDR & (~I2C_MASTER)); + i2c->MDR = (temp_mdr | mode); + +/* USER CODE BEGIN (35) */ +/* USER CODE END */ +} + + +/** @fn void i2cGetConfigValue(i2c_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the I2C configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : I2C_SourceId_021 */ +/* DesignId : I2C_DesignId_021 */ +/* Requirements : HL_SR300 */ +void i2cGetConfigValue(i2c_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_OAR = I2C_OAR_CONFIGVALUE; + config_reg->CONFIG_IMR = I2C_IMR_CONFIGVALUE; + config_reg->CONFIG_CLKL = I2C_CLKL_CONFIGVALUE; + config_reg->CONFIG_CLKH = I2C_CLKH_CONFIGVALUE; + config_reg->CONFIG_CNT = I2C_CNT_CONFIGVALUE; + config_reg->CONFIG_SAR = I2C_SAR_CONFIGVALUE; + config_reg->CONFIG_MDR = I2C_MDR_CONFIGVALUE; + config_reg->CONFIG_EMDR = I2C_EMDR_CONFIGVALUE; + config_reg->CONFIG_PSC = I2C_PSC_CONFIGVALUE; + config_reg->CONFIG_DMAC = I2C_DMAC_CONFIGVALUE; + config_reg->CONFIG_FUN = I2C_FUN_CONFIGVALUE; + config_reg->CONFIG_DIR = I2C_DIR_CONFIGVALUE; + config_reg->CONFIG_ODR = I2C_ODR_CONFIGVALUE; + config_reg->CONFIG_PD = I2C_PD_CONFIGVALUE; + config_reg->CONFIG_PSL = I2C_PSL_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_OAR = i2cREG1->OAR; + config_reg->CONFIG_IMR = i2cREG1->IMR; + config_reg->CONFIG_CLKL = i2cREG1->CKL; + config_reg->CONFIG_CLKH = i2cREG1->CKH; + config_reg->CONFIG_CNT = i2cREG1->CNT; + config_reg->CONFIG_SAR = i2cREG1->SAR; + config_reg->CONFIG_MDR = i2cREG1->MDR; + config_reg->CONFIG_EMDR = i2cREG1->EMDR; + config_reg->CONFIG_PSC = i2cREG1->PSC; + config_reg->CONFIG_DMAC = i2cREG1->DMACR; + config_reg->CONFIG_FUN = i2cREG1->PFNC; + config_reg->CONFIG_DIR = i2cREG1->DIR; + config_reg->CONFIG_ODR = i2cREG1->PDR; + config_reg->CONFIG_PD = i2cREG1->PDIS; + config_reg->CONFIG_PSL = i2cREG1->PSEL; + } +} + + + +/** @fn i2cSetDirection(i2cBASE_t *i2c, uint32 dir) +* @brief Sets I2C as transmitter or receiver. +* @param[in] i2c - i2c module base address +* @param[in] dir - This can be one of the following: +* I2C_TRANSMITTER - Transmit Mode, +* I2C_RECEIVER - Receive Mode +*/ +/* SourceId : I2C_SourceId_024 */ +/* DesignId : I2C_DesignId_020 */ +/* Requirements : HL_SR540 */ +void i2cSetDirection(i2cBASE_t *i2c, uint32 dir) +{ +/* USER CODE BEGIN (47) */ +/* USER CODE END */ + + /* set Transmit/Receive mode */ + i2c->MDR &= ~I2C_TRANSMITTER; + i2c->MDR |= dir; + +/* USER CODE BEGIN (48) */ +/* USER CODE END */ +} + +/** @fn i2cIsMasterReady(i2cBASE_t *i2c) +* @brief Indicates whether MST bit is set or cleared to indicate that stop +* condition was generated. This API should be called after Master Tx or Rx +* to check if the transaction is complete. +* @param[in] i2c - i2c module base address +* @return boolean value to indicate whether MST bit is cleared after STOP bit is generated. +* - TRUE, if MST bit is cleared. +* - FALSE, if MST bit is set. +*/ +/* SourceId : I2C_SourceId_025 */ +/* DesignId : I2C_DesignId_025 */ +/* Requirements : HL_SR541 */ +bool i2cIsMasterReady(i2cBASE_t *i2c) +{ + bool retVal = 0U; +/* USER CODE BEGIN (49) */ +/* USER CODE END */ + + /* check if MST bit is cleared. */ + if((i2c->MDR & I2C_MASTER) == 0) + { + retVal = true; + } + else + { + retVal = false; + } + return retVal; + +/* USER CODE BEGIN (50) */ +/* USER CODE END */ +} + +/** @fn i2cIsBusBusy(i2cBASE_t *i2c) +* @brief Returns the state of the bus busy flag. True if it is set and false otherwise. +* @param[in] i2c - i2c module base address +* @return boolean value to indicate whether BB bit is set in the status register. +* - TRUE, if BB bit is set. +* - FALSE, if BB bit is cleared. +*/ +/* SourceId : I2C_SourceId_026 */ +/* DesignId : I2C_DesignId_026 */ +/* Requirements : HL_SR542 */ +bool i2cIsBusBusy(i2cBASE_t *i2c) +{ + bool retVal = 0U; +/* USER CODE BEGIN (51) */ +/* USER CODE END */ + + /* check if BB bit is set. */ + if((i2c->STR & I2C_BUSBUSY) == I2C_BUSBUSY) + { + retVal = true; + } + else + { + retVal = false; + } + return retVal; + +/* USER CODE BEGIN (52) */ +/* USER CODE END */ +} + Index: firmware/source/lin.c =================================================================== diff -u --- firmware/source/lin.c (revision 0) +++ firmware/source/lin.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,769 @@ +/** @file lin.c +* @brief LIN Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "lin.h" +#include "sys_vim.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @fn void linInit(void) +* @brief Initializes the lin Driver +* +* This function initializes the lin module. +*/ +/* SourceId : LIN_SourceId_001 */ +/* DesignId : LIN_DesignId_001 */ +/* Requirements : HL_SR253 */ +void linInit(void) +{ +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + /** @b initialize @b LIN */ + + /** - Release from reset */ + linREG->GCR0 = 1U; + + /** - Start LIN configuration + * - Keep state machine in software reset + */ + linREG->GCR1 = 0U; + + /** - Enable LIN Mode */ + linREG->GCR1 = 0x40U; + + /** - Setup control register 1 + * - Enable transmitter + * - Enable receiver + * - Stop when debug mode is entered + * - Disable Loopback mode + * - Disable / Enable HGENCTRL (Mask filtering with ID-Byte) + * - Use enhance checksum + * - Enable multi buffer mode + * - Disable automatic baudrate adjustment + * - Disable sleep mode + * - Set LIN module as master + * - Enable/Disable parity + * - Disable data length control in ID4 and ID5 + */ + linREG->GCR1 |= 0x03000C40U + | (uint32)((uint32)1U << 12U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)1U << 5U); + + /** - Setup maximum baud rate prescaler */ + linREG->MBRSR = (uint32)4954U; + + /** - Setup baud rate prescaler */ + linREG->BRS = (uint32)343U; + + /** - Setup RX and TX reception masks */ + linREG->MASK = ((uint32)((uint32)0xFFU << 16U) | (uint32)0xFFU); + + /** - Setup compare + * - Sync delimiter + * - Sync break extension + */ + linREG->COMP = ((uint32)((uint32)(1U - 1U) << 8U) | ((uint32)13U - 13U)); + + /** - Setup response length */ + linREG->FORMAT = ((linREG->FORMAT & 0xFFF8FFFFU) | (uint32)(((uint32)8U - 1U) << 16U)); + + /** - Set LIN pins functional mode + * - TX + * - RX + * - CLK + */ + linREG->PIO0 = ((uint32)4U | (uint32)2U | (uint32)0U); + + /** - Set LIN pins default output value + * - TX + * - RX + * - CLK + */ + linREG->PIO3 = ((uint32)0U | (uint32)0U | (uint32)0U); + + /** - Set LIN pins output direction + * - TX + * - RX + * - CLK + */ + linREG->PIO1 = ((uint32)0U | (uint32)0U | (uint32)0U); + + /** - Set LIN pins open drain enable + * - TX + * - RX + * - CLK + */ + linREG->PIO6 = ((uint32)0U | (uint32)0U | (uint32)0U); + + /** - Set LIN pins pullup/pulldown enable + * - TX + * - RX + * - CLK + */ + linREG->PIO7 = ((uint32)0U | (uint32)0U | (uint32)0U); + + /** - Set LIN pins pullup/pulldown select + * - TX + * - RX + * - CLK + */ + linREG->PIO8 = ((uint32)4U | (uint32)2U | (uint32)1U); + + /** - Set interrupt level + * - Bit error level + * - Physical bus error level + * - Checksum error level + * - Inconsistent sync field error level + * - No response error level + * - Framing error level + * - Overrun error level + * - Parity error level + * - Identifier level + * - RX level + * - TX level + * - Timeout after 3 wakeup signals level + * - Timeout after wakeup signal level + * - Timeout level + * - Wakeup level + * - Break detect level + */ + linREG->SETINTLVL = ((uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U); + + /** - Set interrupt enable + * - Enable/Disable bit error + * - Enable/Disable physical bus error level + * - Enable/Disable checksum error level + * - Enable/Disable inconsistent sync field error level + * - Enable/Disable no response error level + * - Enable/Disable framing error level + * - Enable/Disable overrun error level + * - Enable/Disable parity error level + * - Enable/Disable identifier level + * - Enable/Disable RX level + * - Enable/Disable TX level + * - Enable/Disable timeout after 3 wakeup signals level + * - Enable/Disable timeout after wakeup signal level + * - Enable/Disable timeout level + * - Enable/Disable wakeup level + * - Enable/Disable break detect level + */ + linREG->SETINT = ((uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U + | (uint32)0x00000000U); + + /** - Finaly start LIN */ + linREG->GCR1 |= 0x00000080U; + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ +} + + +/** @fn void linSetFunctional(linBASE_t *lin, uint32 port) +* @brief Change functional behavior of pins at runtime. +* @param[in] lin - lin module base address +* @param[in] port - Value to write to PIO0 register +* +* Change the value of the PCFUN register at runtime, this allows to +* dynamically change the functionality of the LIN pins between functional +* and GIO mode. +*/ +/* SourceId : LIN_SourceId_002 */ +/* DesignId : LIN_DesignId_002 */ +/* Requirements : HL_SR254 */ +void linSetFunctional(linBASE_t *lin, uint32 port) +{ +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + + lin->PIO0 = port; + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ +} + + +/** @fn void linSendHeader(linBASE_t *lin, uint8 identifier) +* @brief Send lin header. +* @param[in] lin - lin module base address +* @param[in] identifier - lin header id +* +* Send lin header including sync break field, sync field and identifier. +*/ +/* SourceId : LIN_SourceId_003 */ +/* DesignId : LIN_DesignId_003 */ +/* Requirements : HL_SR255 */ +void linSendHeader(linBASE_t *lin, uint8 identifier) +{ +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + + lin->ID = ((lin->ID & 0xFFFFFF00U) | (uint32)identifier); + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ +} + + +/** @fn void linSendWakupSignal(linBASE_t *lin) +* @brief Send lin wakeup signal. +* @param[in] lin - lin module base address +* +* Send lin wakeup signal to terminate the sleep mode of any lin node connected to the BUS. +*/ +/* SourceId : LIN_SourceId_004 */ +/* DesignId : LIN_DesignId_004 */ +/* Requirements : HL_SR256 */ +void linSendWakupSignal(linBASE_t *lin) +{ +/* USER CODE BEGIN (8) */ +/* USER CODE END */ + + lin->TDx[0U] = 0xF0U; + lin->GCR2 |= 0x00000100U; + +/* USER CODE BEGIN (9) */ +/* USER CODE END */ +} + +/** @fn void linEnterSleep(linBASE_t *lin) +* @brief Take Module to Sleep. +* @param[in] lin - lin module base address +* +* Application must call this function to take Module to Sleep when Sleep command is received. +* This function can also be called to forcefully enter Sleep when no activity on BUS. +*/ +/* SourceId : LIN_SourceId_005 */ +/* DesignId : LIN_DesignId_005 */ +/* Requirements : HL_SR257 */ +void linEnterSleep(linBASE_t *lin) +{ +/* USER CODE BEGIN (10) */ +/* USER CODE END */ + lin->GCR2 |= 0x00000001U; +/* USER CODE BEGIN (11) */ +/* USER CODE END */ +} + +/** @fn void linSoftwareReset(linBASE_t *lin) +* @brief Perform software reset. +* @param[in] lin - lin module base address +* +* Perform software reset of lin module. +* This function will reset the lin state machine and clear all pending flags. +* It is required to call this function after a wakeup signal has been sent. +*/ +/* SourceId : LIN_SourceId_006 */ +/* DesignId : LIN_DesignId_006 */ +/* Requirements : HL_SR258 */ +void linSoftwareReset(linBASE_t *lin) +{ +/* USER CODE BEGIN (12) */ +/* USER CODE END */ + + lin->GCR1 &= ~(uint32)(0x00000080U); + lin->GCR1 |= 0x00000080U; + +/* USER CODE BEGIN (13) */ +/* USER CODE END */ +} + +/** @fn uint32 linIsTxReady(linBASE_t *lin) +* @brief Check if Tx buffer empty +* @param[in] lin - lin module base address +* +* @return The TX ready flag +* +* Checks to see if the Tx buffer ready flag is set, returns +* 0 is flags not set otherwise will return the Tx flag itself. +*/ +/* SourceId : LIN_SourceId_007 */ +/* DesignId : LIN_DesignId_007 */ +/* Requirements : HL_SR259 */ +uint32 linIsTxReady(linBASE_t *lin) +{ +/* USER CODE BEGIN (14) */ +/* USER CODE END */ + + return lin->FLR & LIN_TX_READY; +} + +/** @fn void linSetLength(linBASE_t *lin, uint32 length) +* @brief Send Data +* @param[in] lin - lin module base address +* @param[in] length - number of data words in bytes. Range: 1-8. +* +* Send data response length in bytes. +*/ +/* SourceId : LIN_SourceId_008 */ +/* DesignId : LIN_DesignId_008 */ +/* Requirements : HL_SR260 */ +void linSetLength(linBASE_t *lin, uint32 length) +{ +/* USER CODE BEGIN (15) */ +/* USER CODE END */ + + lin->FORMAT = ((lin->FORMAT & 0xFFF8FFFFU) | ((length - 1U) << 16U)); + +/* USER CODE BEGIN (16) */ +/* USER CODE END */ +} + +/** @fn void linSend(linBASE_t *lin, uint8 * data) +* @brief Send Data +* @param[in] lin - lin module base address +* @param[in] data - pointer to data to send +* +* Send a block of data pointed to by 'data'. +* The number of data to transmit must be set with 'linSetLength' before. +*/ +/* SourceId : LIN_SourceId_009 */ +/* DesignId : LIN_DesignId_009 */ +/* Requirements : HL_SR261 */ +void linSend(linBASE_t *lin, uint8 * data) +{ + uint32 i; + uint32 length = (uint32)((uint32)(lin->FORMAT & 0x00070000U) >> 16U); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + uint8 * pData = data + length; + +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + + for (i=0U; i<=length; i++) + { + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + lin->TDx[length-i] = *pData; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + pData--; + } + +/* USER CODE BEGIN (18) */ +/* USER CODE END */ +} + +/** @fn uint32 linIsRxReady(linBASE_t *lin) +* @brief Check if Rx buffer full +* @param[in] lin - lin module base address +* +* @return The Rx ready flag +* +* Checks to see if the Rx buffer full flag is set, returns +* 0 is flags not set otherwise will return the Rx flag itself. +*/ +/* SourceId : LIN_SourceId_010 */ +/* DesignId : LIN_DesignId_010 */ +/* Requirements : HL_SR262 */ +uint32 linIsRxReady(linBASE_t *lin) +{ +/* USER CODE BEGIN (19) */ +/* USER CODE END */ + + return lin->FLR & LIN_RX_INT; +} + + +/** @fn uint32 linTxRxError(linBASE_t *lin) +* @brief Return Tx and Rx Error flags +* @param[in] lin - lin module base address +* +* @return The Tx and Rx error flags +* +* Returns the bit, physical bus, checksum, inconsistent sync field, +* no response, framing, overrun, parity and timeout error flags. +* It also clears the error flags before returning. +*/ +/* SourceId : LIN_SourceId_011 */ +/* DesignId : LIN_DesignId_011 */ +/* Requirements : HL_SR263 */ +uint32 linTxRxError(linBASE_t *lin) +{ + uint32 status = lin->FLR & (LIN_BE_INT + | LIN_PBE_INT + | LIN_CE_INT + | LIN_ISFE_INT + | LIN_NRE_INT + | LIN_FE_INT + | LIN_OE_INT + | LIN_PE_INT + | LIN_TOA3WUS_INT + | LIN_TOAWUS_INT + | LIN_TO_INT); + + lin->FLR = LIN_BE_INT + | LIN_PBE_INT + | LIN_CE_INT + | LIN_ISFE_INT + | LIN_NRE_INT + | LIN_FE_INT + | LIN_OE_INT + | LIN_PE_INT + | LIN_TOA3WUS_INT + | LIN_TOAWUS_INT + | LIN_TO_INT; + +/* USER CODE BEGIN (20) */ +/* USER CODE END */ + + return status; +} + + +/** @fn uint32 linGetIdentifier(linBASE_t *lin) +* @brief Get last received identifier +* @param[in] lin - lin module base address +* +* @return Identifier +* +* Read last received identifier. +*/ +/* SourceId : LIN_SourceId_012 */ +/* DesignId : LIN_DesignId_012 */ +/* Requirements : HL_SR262 */ +uint32 linGetIdentifier(linBASE_t *lin) +{ +/* USER CODE BEGIN (21) */ +/* USER CODE END */ + return (uint32)((uint32)(lin->ID & 0x00FF0000U) >> 16U); +} + + +/** @fn void linGetData(linBASE_t *lin, uint8 * const data) +* @brief Read received data +* @param[in] lin - lin module base address +* @param[in] data - pointer to data buffer +* +* Read a block of bytes and place it into the data buffer pointed to by 'data'. +*/ +/* SourceId : LIN_SourceId_013 */ +/* DesignId : LIN_DesignId_013 */ +/* Requirements : HL_SR265 */ +void linGetData(linBASE_t *lin, uint8 * const data) +{ + uint32 i; + uint32 length = (uint32)((uint32)(lin->FORMAT & 0x00070000U) >> 16U); + uint8 * pData = data; + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ + + for (i = 0U; i <= length; i++) + { + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + *pData = lin->RDx[i]; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + pData++; + } + +/* USER CODE BEGIN (23) */ +/* USER CODE END */ +} + + +/** @fn void linEnableLoopback(linBASE_t *lin, loopBackType_t Loopbacktype) +* @brief Enable Loopback mode for self test +* @param[in] lin - lin module base address +* @param[in] Loopbacktype - Digital or Analog +* +* This function enables the Loopback mode for self test. +*/ +/* SourceId : LIN_SourceId_014 */ +/* DesignId : LIN_DesignId_016 */ +/* Requirements : HL_SR268 */ +void linEnableLoopback(linBASE_t *lin, loopBackType_t Loopbacktype) +{ +/* USER CODE BEGIN (24) */ +/* USER CODE END */ + + /* Clear Loopback incase enabled already */ + lin->IODFTCTRL = 0U; + + /* Enable Loopback either in Analog or Digital Mode */ + lin->IODFTCTRL = ((uint32)(0x00000A00U) + | (uint32)((uint32)Loopbacktype << 1U)); + +/* USER CODE BEGIN (25) */ +/* USER CODE END */ +} + +/** @fn void linDisableLoopback(linBASE_t *lin) +* @brief Enable Loopback mode for self test +* @param[in] lin - lin module base address +* +* This function disable the Loopback mode. +*/ +/* SourceId : LIN_SourceId_015 */ +/* DesignId : LIN_DesignId_017 */ +/* Requirements : HL_SR269 */ +void linDisableLoopback(linBASE_t *lin) +{ +/* USER CODE BEGIN (26) */ +/* USER CODE END */ + + /* Disable Loopback Mode */ + lin->IODFTCTRL = 0x00000500U; + +/* USER CODE BEGIN (27) */ +/* USER CODE END */ +} + + +/** @fn linEnableNotification(linBASE_t *lin, uint32 flags) +* @brief Enable interrupts +* @param[in] lin - lin module base address +* @param[in] flags - Interrupts to be enabled, can be ored value of: +* LIN_BE_INT - bit error, +* LIN_PBE_INT - physical bus error, +* LIN_CE_INT - checksum error, +* LIN_ISFE_INT - inconsistent sync field error, +* LIN_NRE_INT - no response error, +* LIN_FE_INT - framing error, +* LIN_OE_INT - overrun error, +* LIN_PE_INT - parity error, +* LIN_ID_INT - received matching identifier, +* LIN_RX_INT - receive buffer ready, +* LIN_TOA3WUS_INT - time out after 3 wakeup signals, +* LIN_TOAWUS_INT - time out after wakeup signal, +* LIN_TO_INT - time out signal, +* LIN_WAKEUP_INT - wakeup, +* LIN_BREAK_INT - break detect +*/ +/* SourceId : LIN_SourceId_016 */ +/* DesignId : LIN_DesignId_014 */ +/* Requirements : HL_SR266 */ +void linEnableNotification(linBASE_t *lin, uint32 flags) +{ +/* USER CODE BEGIN (28) */ +/* USER CODE END */ + + lin->SETINT = flags; + +/* USER CODE BEGIN (29) */ +/* USER CODE END */ +} + + +/** @fn linDisableNotification(linBASE_t *lin, uint32 flags) +* @brief Disable interrupts +* @param[in] lin - lin module base address +* @param[in] flags - Interrupts to be disabled, can be or'ed value of: +* LIN_BE_INT - bit error, +* LIN_PBE_INT - physical bus error, +* LIN_CE_INT - checksum error, +* LIN_ISFE_INT - inconsistent sync field error, +* LIN_NRE_INT - no response error, +* LIN_FE_INT - framing error, +* LIN_OE_INT - overrun error, +* LIN_PE_INT - parity error, +* LIN_ID_INT - received matching identifier, +* LIN_RX_INT - receive buffer ready, +* LIN_TOA3WUS_INT - time out after 3 wakeup signals, +* LIN_TOAWUS_INT - time out after wakeup signal, +* LIN_TO_INT - time out signal, +* LIN_WAKEUP_INT - wakeup, +* LIN_BREAK_INT - break detect +*/ +/* SourceId : LIN_SourceId_017 */ +/* DesignId : LIN_DesignId_015 */ +/* Requirements : HL_SR267 */ +void linDisableNotification(linBASE_t *lin, uint32 flags) +{ +/* USER CODE BEGIN (30) */ +/* USER CODE END */ + + lin->CLEARINT = flags; + +/* USER CODE BEGIN (31) */ +/* USER CODE END */ +} + + +/** @fn void linGetConfigValue(lin_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the LIN configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : LIN_SourceId_018 */ +/* DesignId : LIN_DesignId_018 */ +/* Requirements : HL_SR272 */ +void linGetConfigValue(lin_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_GCR0 = LIN_GCR0_CONFIGVALUE; + config_reg->CONFIG_GCR1 = LIN_GCR1_CONFIGVALUE; + config_reg->CONFIG_GCR2 = LIN_GCR2_CONFIGVALUE; + config_reg->CONFIG_SETINT = LIN_SETINT_CONFIGVALUE; + config_reg->CONFIG_SETINTLVL = LIN_SETINTLVL_CONFIGVALUE; + config_reg->CONFIG_FORMAT = LIN_FORMAT_CONFIGVALUE; + config_reg->CONFIG_BRSR = LIN_BRSR_CONFIGVALUE; + config_reg->CONFIG_FUN = LIN_FUN_CONFIGVALUE; + config_reg->CONFIG_DIR = LIN_DIR_CONFIGVALUE; + config_reg->CONFIG_ODR = LIN_ODR_CONFIGVALUE; + config_reg->CONFIG_PD = LIN_PD_CONFIGVALUE; + config_reg->CONFIG_PSL = LIN_PSL_CONFIGVALUE; + config_reg->CONFIG_COMP = LIN_COMP_CONFIGVALUE; + config_reg->CONFIG_MASK = LIN_MASK_CONFIGVALUE; + config_reg->CONFIG_MBRSR = LIN_MBRSR_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_GCR0 = linREG->GCR0; + config_reg->CONFIG_GCR1 = linREG->GCR1; + config_reg->CONFIG_GCR2 = linREG->GCR2; + config_reg->CONFIG_SETINT = linREG->SETINT; + config_reg->CONFIG_SETINTLVL = linREG->SETINTLVL; + config_reg->CONFIG_FORMAT = linREG->FORMAT; + config_reg->CONFIG_BRSR = linREG->BRS; + config_reg->CONFIG_FUN = linREG->PIO0; + config_reg->CONFIG_DIR = linREG->PIO1; + config_reg->CONFIG_ODR = linREG->PIO6; + config_reg->CONFIG_PD = linREG->PIO7; + config_reg->CONFIG_PSL = linREG->PIO8; + config_reg->CONFIG_COMP = linREG->COMP; + config_reg->CONFIG_MASK = linREG->MASK; + config_reg->CONFIG_MBRSR = linREG->MBRSR; + } +} + + + +/** @fn uint32 linGetStatusFlag(linBASE_t *lin) +* @brief Get LIN status register value +* @param[in] lin - lin module base address +* +* @return Status Flag register content +* +* Read current Status Flag register. +*/ +/* SourceId : LIN_SourceId_021 */ +/* DesignId : LIN_DesignId_020 */ +/* Requirements : HL_SR544 */ +uint32 linGetStatusFlag(linBASE_t *lin) +{ + return lin->FLR; +} + +/** @fn void linClearStatusFlag(linBASE_t *lin, uint32 flags) +* @brief Clear LIN status register +* @param[in] lin - lin module base address +* @param[in] flags - Interrupts to be disabled, can be or'ed value of: +* LIN_BE_INT - bit error, +* LIN_PBE_INT - physical bus error, +* LIN_CE_INT - checksum error, +* LIN_ISFE_INT - inconsistent sync field error, +* LIN_NRE_INT - no response error, +* LIN_FE_INT - framing error, +* LIN_OE_INT - overrun error, +* LIN_PE_INT - parity error, +* LIN_ID_INT - received matching identifier, +* LIN_RX_INT - receive buffer ready, +* LIN_TOA3WUS_INT - time out after 3 wakeup signals, +* LIN_TOAWUS_INT - time out after wakeup signal, +* LIN_TO_INT - time out signal, +* LIN_WAKEUP_INT - wakeup, +* LIN_BREAK_INT - break detect, +* LIN_BUSY_FLAG - Bus Busy Flag, +* LIN_TXEMPTY_INT - Transmit Empty Flag +* +* Clear Status Flags passed as parameter. +*/ +/* SourceId : LIN_SourceId_022 */ +/* DesignId : LIN_DesignId_021 */ +/* Requirements : HL_SR545 */ +void linClearStatusFlag(linBASE_t *lin, uint32 flags) +{ +/* USER CODE BEGIN (38) */ +/* USER CODE END */ + lin->FLR = flags; +/* USER CODE BEGIN (39) */ +/* USER CODE END */ + +} + Index: firmware/source/mdio.c =================================================================== diff -u --- firmware/source/mdio.c (revision 0) +++ firmware/source/mdio.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,246 @@ +/** + * \file mdio.c + * + * \brief MDIO APIs. + * + * This file contains the device abstraction layer APIs for MDIO. + */ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "hw_reg_access.h" +#include "mdio.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/******************************************************************************* +* INTERNAL MACRO DEFINITIONS +*******************************************************************************/ +#define PHY_REG_MASK (0x1FU) +#define PHY_ADDR_MASK (0x1FU) +#define PHY_DATA_MASK (0xFFFFU) +#define PHY_REG_SHIFT (21U) +#define PHY_ADDR_SHIFT (16U) + +/******************************************************************************* +* API FUNCTION DEFINITIONS +*******************************************************************************/ + +/** + * \brief Reads a PHY register using MDIO. + * + * \param baseAddr Base Address of the MDIO Module Registers. + * \param phyAddr PHY Address. + * \param regNum Register Number to be read. + * \param dataPtr Pointer where the read value shall be written. + * + * \return status of the read \n + * TRUE - read is successful.\n + * FALSE - read is not acknowledged properly. + * + **/ +/* SourceId : ETH_SourceId_059 */ +/* DesignId : ETH_DesignId_059*/ +/* Requirements : HL_ETH_SR41, HL_ETH_SR45 */ +boolean MDIOPhyRegRead(uint32 baseAddr, uint32 phyAddr, + uint32 regNum, volatile uint16 * dataPtr) +{ + boolean retVal = FALSE; + /* Wait till transaction completion if any */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((HWREG(baseAddr + MDIO_USERACCESS0) & MDIO_USERACCESS0_GO) == MDIO_USERACCESS0_GO) + { + } /* Wait */ + + HWREG(baseAddr + MDIO_USERACCESS0) + = (((uint32)MDIO_USERACCESS0_READ) | MDIO_USERACCESS0_GO + |((regNum & PHY_REG_MASK) << PHY_REG_SHIFT) + |((phyAddr & PHY_ADDR_MASK) << PHY_ADDR_SHIFT)); + + /* wait for command completion */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((HWREG(baseAddr + MDIO_USERACCESS0) & MDIO_USERACCESS0_GO) == MDIO_USERACCESS0_GO) + { + } /* Wait */ + + /* Store the data if the read is acknowledged */ + if(((HWREG(baseAddr + MDIO_USERACCESS0)) & MDIO_USERACCESS0_ACK) == MDIO_USERACCESS0_ACK) + { + /*SAFETYMCUSW 439 S MR:11.3 "Output is a 16 bit Value to be stored - Advisory as per MISRA" */ + *dataPtr = (uint16)((HWREG(baseAddr + MDIO_USERACCESS0)) + & PHY_DATA_MASK); + retVal = TRUE; + } + + return retVal; +} + +/** + * \brief Writes a PHY register using MDIO. + * + * \param baseAddr Base Address of the MDIO Module Registers. + * \param phyAddr PHY Address. + * \param regNum Register Number to be read. + * \param RegVal Value to be written. + * + * \return None + * + **/ +/* SourceId : ETH_SourceId_058 */ +/* DesignId : ETH_DesignId_058*/ +/* Requirements : HL_ETH_SR41 */ +void MDIOPhyRegWrite(uint32 baseAddr, uint32 phyAddr, + uint32 regNum, uint16 RegVal) +{ + /* Wait till transaction completion if any */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((HWREG(baseAddr + MDIO_USERACCESS0) & MDIO_USERACCESS0_GO) == MDIO_USERACCESS0_GO) + { + } /* Wait */ + + HWREG(baseAddr + MDIO_USERACCESS0) + = (MDIO_USERACCESS0_WRITE | MDIO_USERACCESS0_GO + |((regNum & PHY_REG_MASK) << PHY_REG_SHIFT) + |((phyAddr & PHY_ADDR_MASK) << PHY_ADDR_SHIFT) + | RegVal); + + /* wait for command completion*/ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((HWREG(baseAddr + MDIO_USERACCESS0) & MDIO_USERACCESS0_GO) == MDIO_USERACCESS0_GO) + { + } /* Wait */ +} +/** + * \brief Reads the alive status of all PHY connected to the MDIO. + * The bit corresponding to the PHY address will be set if the PHY + * is alive. + * + * \param baseAddr Base Address of the MDIO Module Registers. + * + * \return MDIO alive register state + * + **/ +/* SourceId : ETH_SourceId_062 */ +/* DesignId : ETH_DesignId_062*/ +/* Requirements : HL_ETH_SR42 */ +uint32 MDIOPhyAliveStatusGet(uint32 baseAddr) +{ + return (HWREG(baseAddr + MDIO_ALIVE)); +} + +/** + * \brief Reads the link status of all PHY connected to the MDIO. + * The bit corresponding to the PHY address will be set if the PHY + * link is active. + * + * \param baseAddr Base Address of the MDIO Module Registers. + * + * \return MDIO link register state + * + **/ +/* SourceId : ETH_SourceId_061 */ +/* DesignId : ETH_DesignId_061*/ +/* Requirements : HL_ETH_SR42 */ +uint32 MDIOPhyLinkStatusGet(uint32 baseAddr) +{ + return (HWREG(baseAddr + MDIO_LINK)); +} + +/** + * \brief Initializes the MDIO peripheral. This enables the MDIO state + * machine, uses standard pre-amble and set the clock divider value. + * + * \param baseAddr Base Address of the MDIO Module Registers. + * \param mdioInputFreq The clock input to the MDIO module + * \param mdioOutputFreq The clock output required on the MDIO bus + * \return None + * + **/ +/* SourceId : ETH_SourceId_060 */ +/* DesignId : ETH_DesignId_060*/ +/* Requirements : HL_ETH_SR39 */ +void MDIOInit(uint32 baseAddr, uint32 mdioInputFreq, + uint32 mdioOutputFreq) +{ + uint32 clkDiv = (mdioInputFreq/mdioOutputFreq) - 1U; + HWREG(baseAddr + MDIO_CONTROL) = ((clkDiv & MDIO_CONTROL_CLKDIV) + | MDIO_CONTROL_ENABLE + | MDIO_CONTROL_PREAMBLE + | MDIO_CONTROL_FAULTENB); +} + +/** + * \brief Function to enable MDIO. + * + * \param baseAddr Base Address of the MDIO Module Registers. + * + * \return none + * + **/ +/* SourceId : ETH_SourceId_056 */ +/* DesignId : ETH_DesignId_056*/ +/* Requirements : HL_ETH_SR40 */ +void MDIOEnable(uint32 baseAddr) { + HWREG(baseAddr + MDIO_CONTROL) = HWREG(baseAddr + MDIO_CONTROL) + | MDIO_CONTROL_ENABLE; +} + +/** + * \brief Function to disable MDIO. + * + * \param baseAddr Base Address of the MDIO Module Registers. + * + * \return none + * + **/ +/* SourceId : ETH_SourceId_057 */ +/* DesignId : ETH_DesignId_057*/ +/* Requirements : HL_ETH_SR40 */ +void MDIODisable(uint32 baseAddr) { + HWREG(baseAddr + MDIO_CONTROL) = HWREG(baseAddr + MDIO_CONTROL) + & (~MDIO_CONTROL_ENABLE); +} + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/***************************** End Of File ***********************************/ Index: firmware/source/mibspi.c =================================================================== diff -u --- firmware/source/mibspi.c (revision 0) +++ firmware/source/mibspi.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,2051 @@ +/** @file mibspi.c +* @brief MIBSPI Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "mibspi.h" +#include "sys_vim.h" +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @fn void mibspiInit(void) +* @brief Initializes the MIBSPI Driver +* +* This function initializes the MIBSPI module. +*/ +/* SourceId : MIBSPI_SourceId_001 */ +/* DesignId : MIBSPI_DesignId_001 */ +/* Requirements : HL_SR153 */ +void mibspiInit(void) +{ +uint32 i ; + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + + /** @b initialize @b MIBSPI1 */ + + /** bring MIBSPI out of reset */ + mibspiREG1->GCR0 = 0U; + mibspiREG1->GCR0 = 1U; + + /** enable MIBSPI1 multibuffered mode and enable buffer RAM */ + mibspiREG1->MIBSPIE = (mibspiREG1->MIBSPIE & 0xFFFFFFFEU) | 1U; + + /** MIBSPI1 master mode and clock configuration */ + mibspiREG1->GCR1 = (mibspiREG1->GCR1 & 0xFFFFFFFCU) | ((uint32)((uint32)1U << 1U) /* CLOKMOD */ + | 1U); /* MASTER */ + + /** MIBSPI1 enable pin configuration */ + mibspiREG1->INT0 = (mibspiREG1->INT0 & 0xFEFFFFFFU) | (uint32)((uint32)0U << 24U); /* ENABLE HIGHZ */ + + /** - Delays */ + mibspiREG1->DELAY = (uint32)((uint32)0U << 24U) /* C2TDELAY */ + | (uint32)((uint32)0U << 16U) /* T2CDELAY */ + | (uint32)((uint32)0U << 8U) /* T2EDELAY */ + | (uint32)((uint32)0U << 0U); /* C2EDELAY */ + + /** - Data Format 0 */ + mibspiREG1->FMT0 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 1 */ + mibspiREG1->FMT1 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 2 */ + mibspiREG1->FMT2 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 3 */ + mibspiREG1->FMT3 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Default Chip Select */ + mibspiREG1->DEF = (uint32)(0xFFU); + + /** - wait for buffer initialization complete before accessing MibSPI registers */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while ((mibspiREG1->FLG & 0x01000000U) != 0U) + { + } /* Wait */ + + /** enable MIBSPI RAM Parity */ + mibspiREG1->UERRCTRL = (mibspiREG1->UERRCTRL & 0xFFFFFFF0U) | (0x00000005U); + + /** - initialize transfer groups */ + mibspiREG1->TGCTRL[0U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)0U << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[1U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)8U << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[2U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U) << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[3U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U) << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[4U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U) << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[5U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U+0U) << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[6U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U+0U+0U) << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[7U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U+0U+0U+0U) << 8U); /* start buffer */ + + + mibspiREG1->TGCTRL[8U] = (uint32)(8U+0U+0U+0U+0U+0U+0U+0U) << 8U; + + mibspiREG1->LTGPEND = (mibspiREG1->LTGPEND & 0xFFFF00FFU) | (uint32)((uint32)((8U+0U+0U+0U+0U+0U+0U+0U)-1U) << 8U); + + /** - initialize buffer ram */ + { + i = 0U; + +#if (8U > 0U) + { + +#if (8U > 1U) + + while (i < (8U-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_0)) & (uint16)0x00FFU); /* chip select */ + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_0)) & (uint16)0x00FFU); /* chip select */ + + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_1)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_1)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_2)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_2)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_3)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_3)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_4)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_4)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_5)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_5)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U+0U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_6)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_6)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U+0U+0U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_7)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_7)) & (uint16)0x00FFU); /* chip select */ + i++; + } +#endif + } + + /** - set interrupt levels */ + mibspiREG1->LVL = (uint32)((uint32)0U << 9U) /* TXINT */ + | (uint32)((uint32)0U << 8U) /* RXINT */ + | (uint32)((uint32)0U << 6U) /* OVRNINT */ + | (uint32)((uint32)0U << 4U) /* BITERR */ + | (uint32)((uint32)0U << 3U) /* DESYNC */ + | (uint32)((uint32)0U << 2U) /* PARERR */ + | (uint32)((uint32)0U << 1U) /* TIMEOUT */ + | (uint32)((uint32)0U << 0U); /* DLENERR */ + + /** - clear any pending interrupts */ + mibspiREG1->FLG |= 0xFFFFU; + + /** - enable interrupts */ + mibspiREG1->INT0 = (mibspiREG1->INT0 & 0xFFFF0000U) + | (uint32)((uint32)0U << 9U) /* TXINT */ + | (uint32)((uint32)0U << 8U) /* RXINT */ + | (uint32)((uint32)0U << 6U) /* OVRNINT */ + | (uint32)((uint32)0U << 4U) /* BITERR */ + | (uint32)((uint32)0U << 3U) /* DESYNC */ + | (uint32)((uint32)0U << 2U) /* PARERR */ + | (uint32)((uint32)0U << 1U) /* TIMEOUT */ + | (uint32)((uint32)0U << 0U); /* DLENERR */ + + /** @b initialize @b MIBSPI1 @b Port */ + + /** - MIBSPI1 Port output values */ + mibspiREG1->PC3 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ + | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)1U << 3U) /* SCS[3] */ + | (uint32)((uint32)1U << 4U) /* SCS[4] */ + | (uint32)((uint32)1U << 5U) /* SCS[5] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO[0] */ + | (uint32)((uint32)0U << 11U) /* SOMI[0] */ + | (uint32)((uint32)0U << 17U) /* SIMO[1] */ + | (uint32)((uint32)0U << 25U); /* SOMI[1] */ + + /** - MIBSPI1 Port direction */ + mibspiREG1->PC1 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ + | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)1U << 3U) /* SCS[3] */ + | (uint32)((uint32)1U << 4U) /* SCS[4] */ + | (uint32)((uint32)1U << 5U) /* SCS[5] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO[0] */ + | (uint32)((uint32)0U << 11U) /* SOMI[0] */ + | (uint32)((uint32)0U << 17U) /* SIMO[1] */ + | (uint32)((uint32)0U << 25U); /* SOMI[1] */ + + /** - MIBSPI1 Port open drain enable */ + mibspiREG1->PC6 = (uint32)((uint32)0U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 1U) /* SCS[1] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 4U) /* SCS[4] */ + | (uint32)((uint32)0U << 5U) /* SCS[5] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO[0] */ + | (uint32)((uint32)0U << 11U) /* SOMI[0] */ + | (uint32)((uint32)0U << 17U) /* SIMO[1] */ + | (uint32)((uint32)0U << 25U); /* SOMI[1] */ + + /** - MIBSPI1 Port pullup / pulldown selection */ + mibspiREG1->PC8 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ + | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)1U << 3U) /* SCS[3] */ + | (uint32)((uint32)1U << 4U) /* SCS[4] */ + | (uint32)((uint32)1U << 5U) /* SCS[5] */ + | (uint32)((uint32)1U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO[0] */ + | (uint32)((uint32)1U << 11U) /* SOMI[0] */ + | (uint32)((uint32)1U << 17U) /* SIMO[1] */ + | (uint32)((uint32)1U << 25U); /* SOMI[1] */ + + /** - MIBSPI1 Port pullup / pulldown enable*/ + mibspiREG1->PC7 = (uint32)((uint32)0U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 1U) /* SCS[1] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 4U) /* SCS[4] */ + | (uint32)((uint32)0U << 5U) /* SCS[5] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO[0] */ + | (uint32)((uint32)0U << 11U) /* SOMI[0] */ + | (uint32)((uint32)0U << 17U) /* SIMO[1] */ + | (uint32)((uint32)0U << 25U); /* SOMI[1] */ + + /* MIBSPI1 set all pins to functional */ + mibspiREG1->PC0 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 1U) /* SCS[1] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 4U) /* SCS[4] */ + | (uint32)((uint32)0U << 5U) /* SCS[5] */ + | (uint32)((uint32)1U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO[0] */ + | (uint32)((uint32)1U << 11U) /* SOMI[0] */ + | (uint32)((uint32)1U << 17U) /* SIMO[1] */ + | (uint32)((uint32)1U << 25U); /* SOMI[1] */ + + /** - Finally start MIBSPI1 */ + mibspiREG1->GCR1 = (mibspiREG1->GCR1 & 0xFEFFFFFFU) | 0x01000000U; + + + + /** @b initialize @b MIBSPI3 */ + + /** bring MIBSPI out of reset */ + mibspiREG3->GCR0 = 0U; + mibspiREG3->GCR0 = 1U; + + /** enable MIBSPI3 multibuffered mode and enable buffer RAM */ + mibspiREG3->MIBSPIE = (mibspiREG3->MIBSPIE & 0xFFFFFFFEU) | 1U; + + /** MIBSPI3 master mode and clock configuration */ + mibspiREG3->GCR1 = (mibspiREG3->GCR1 & 0xFFFFFFFCU) | ((uint32)((uint32)1U << 1U) /* CLOKMOD */ + | 1U); /* MASTER */ + + /** MIBSPI3 enable pin configuration */ + mibspiREG3->INT0 = (mibspiREG3->INT0 & 0xFEFFFFFFU) | (uint32)((uint32)0U << 24U); /* ENABLE HIGHZ */ + + /** - Delays */ + mibspiREG3->DELAY = (uint32)((uint32)0U << 24U) /* C2TDELAY */ + | (uint32)((uint32)0U << 16U) /* T2CDELAY */ + | (uint32)((uint32)0U << 8U) /* T2EDELAY */ + | (uint32)((uint32)0U << 0U); /* C2EDELAY */ + + /** - Data Format 0 */ + mibspiREG3->FMT0 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 1 */ + mibspiREG3->FMT1 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 2 */ + mibspiREG3->FMT2 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 3 */ + mibspiREG3->FMT3 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Default Chip Select */ + mibspiREG3->DEF = (uint32)(0xFFU); + + /** - wait for buffer initialization complete before accessing MibSPI registers */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while ((mibspiREG3->FLG & 0x01000000U) != 0U) + { + } /* Wait */ + + /** enable MIBSPI RAM Parity */ + mibspiREG3->UERRCTRL = (mibspiREG3->UERRCTRL & 0xFFFFFFF0U) | (0x00000005U); + + /** - initialize transfer groups */ + mibspiREG3->TGCTRL[0U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)0U << 8U); /* start buffer */ + + mibspiREG3->TGCTRL[1U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)8U << 8U); /* start buffer */ + + mibspiREG3->TGCTRL[2U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U) << 8U); /* start buffer */ + + mibspiREG3->TGCTRL[3U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U) << 8U); /* start buffer */ + + mibspiREG3->TGCTRL[4U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U) << 8U); /* start buffer */ + + mibspiREG3->TGCTRL[5U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U+0U) << 8U); /* start buffer */ + + mibspiREG3->TGCTRL[6U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U+0U+0U) << 8U); /* start buffer */ + + mibspiREG3->TGCTRL[7U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U+0U+0U+0U) << 8U); /* start buffer */ + + + mibspiREG3->TGCTRL[8U] = (uint32)(8U+0U+0U+0U+0U+0U+0U+0U) << 8U; + + mibspiREG3->LTGPEND = (mibspiREG3->LTGPEND & 0xFFFF00FFU) | (uint32)(((uint32)(8U+0U+0U+0U+0U+0U+0U+0U)-1U) << 8U); + + /** - initialize buffer ram */ + { + i = 0U; + +#if (8U > 0U) + { + +#if (8U > 1U) + + while (i < (8U-1U)) + { + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_0)) & (uint16)0x00FFU); /* chip select */ + i++; + } +#endif + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_0)) & (uint16)0x00FFU); /* chip select */ + + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U)-1U)) + { + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_1)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_1)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U)-1U)) + { + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_2)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_2)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U)-1U)) + { + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_3)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_3)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U)-1U)) + { + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_4)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_4)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U+0U)-1U)) + { + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_5)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_5)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U+0U+0U)-1U)) + { + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_6)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_6)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U+0U+0U+0U)-1U)) + { + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_7)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM3->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_7)) & (uint16)0x00FFU); /* chip select */ + i++; + } +#endif + } + + /** - set interrupt levels */ + mibspiREG3->LVL = (uint32)((uint32)0U << 9U) /* TXINT */ + | (uint32)((uint32)0U << 8U) /* RXINT */ + | (uint32)((uint32)0U << 6U) /* OVRNINT */ + | (uint32)((uint32)0U << 4U) /* BITERR */ + | (uint32)((uint32)0U << 3U) /* DESYNC */ + | (uint32)((uint32)0U << 2U) /* PARERR */ + | (uint32)((uint32)0U << 1U) /* TIMEOUT */ + | (uint32)((uint32)0U << 0U); /* DLENERR */ + + /** - clear any pending interrupts */ + mibspiREG3->FLG |= 0xFFFFU; + + /** - enable interrupts */ + mibspiREG3->INT0 = (mibspiREG3->INT0 & 0xFFFF0000U) + | (uint32)((uint32)0U << 9U) /* TXINT */ + | (uint32)((uint32)0U << 8U) /* RXINT */ + | (uint32)((uint32)0U << 6U) /* OVRNINT */ + | (uint32)((uint32)0U << 4U) /* BITERR */ + | (uint32)((uint32)0U << 3U) /* DESYNC */ + | (uint32)((uint32)0U << 2U) /* PARERR */ + | (uint32)((uint32)0U << 1U) /* TIMEOUT */ + | (uint32)((uint32)0U << 0U); /* DLENERR */ + + /** @b initialize @b MIBSPI3 @b Port */ + + /** - MIBSPI3 Port output values */ + mibspiREG3->PC3 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ + | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)1U << 3U) /* SCS[3] */ + | (uint32)((uint32)1U << 4U) /* SCS[4] */ + | (uint32)((uint32)1U << 5U) /* SCS[5] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO */ + | (uint32)((uint32)0U << 11U); /* SOMI */ + + /** - MIBSPI3 Port direction */ + mibspiREG3->PC1 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ + | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)1U << 3U) /* SCS[3] */ + | (uint32)((uint32)1U << 4U) /* SCS[4] */ + | (uint32)((uint32)1U << 5U) /* SCS[5] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO */ + | (uint32)((uint32)0U << 11U); /* SOMI */ + + /** - MIBSPI3 Port open drain enable */ + mibspiREG3->PC6 = (uint32)((uint32)0U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 1U) /* SCS[1] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 4U) /* SCS[4] */ + | (uint32)((uint32)0U << 5U) /* SCS[5] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO */ + | (uint32)((uint32)0U << 11U); /* SOMI */ + + + /** - MIBSPI3 Port pullup / pulldown selection */ + mibspiREG3->PC8 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ + | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)1U << 3U) /* SCS[3] */ + | (uint32)((uint32)1U << 4U) /* SCS[4] */ + | (uint32)((uint32)1U << 5U) /* SCS[5] */ + | (uint32)((uint32)1U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO */ + | (uint32)((uint32)1U << 11U); /* SOMI */ + + + /** - MIBSPI3 Port pullup / pulldown enable*/ + mibspiREG3->PC7 = (uint32)((uint32)0U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 1U) /* SCS[1] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 4U) /* SCS[4] */ + | (uint32)((uint32)0U << 5U) /* SCS[5] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO */ + | (uint32)((uint32)0U << 11U); /* SOMI */ + + + /* MIBSPI3 set all pins to functional */ + mibspiREG3->PC0 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 1U) /* SCS[1] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 4U) /* SCS[4] */ + | (uint32)((uint32)0U << 5U) /* SCS[5] */ + | (uint32)((uint32)1U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO */ + | (uint32)((uint32)1U << 11U); /* SOMI */ + + /** - Finally start MIBSPI3 */ + mibspiREG3->GCR1 = (mibspiREG3->GCR1 & 0xFEFFFFFFU) | 0x01000000U; + + + + /** @b initialize @b MIBSPI5 */ + + /** bring MIBSPI out of reset */ + mibspiREG5->GCR0 = 0U; + mibspiREG5->GCR0 = 1U; + + /** enable MIBSPI5 multibuffered mode and enable buffer RAM */ + mibspiREG5->MIBSPIE = (mibspiREG5->MIBSPIE & 0xFFFFFFFEU) | 1U; + + /** MIBSPI5 master mode and clock configuration */ + mibspiREG5->GCR1 = (mibspiREG5->GCR1 & 0xFFFFFFFCU) | ((uint32)((uint32)1U << 1U) /* CLOKMOD */ + | 1U); /* MASTER */ + + /** MIBSPI5 enable pin configuration */ + mibspiREG5->INT0 = (mibspiREG5->INT0 & 0xFEFFFFFFU) | (uint32)((uint32)0U << 24U); /* ENABLE HIGHZ */ + + /** - Delays */ + mibspiREG5->DELAY = (uint32)((uint32)0U << 24U) /* C2TDELAY */ + | (uint32)((uint32)0U << 16U) /* T2CDELAY */ + | (uint32)((uint32)0U << 8U) /* T2EDELAY */ + | (uint32)((uint32)0U << 0U); /* C2EDELAY */ + + /** - Data Format 0 */ + mibspiREG5->FMT0 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 1 */ + mibspiREG5->FMT1 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 2 */ + mibspiREG5->FMT2 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 3 */ + mibspiREG5->FMT3 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Default Chip Select */ + mibspiREG5->DEF = (uint32)(0xFFU); + + /** - wait for buffer initialization complete before accessing MibSPI registers */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while ((mibspiREG5->FLG & 0x01000000U) != 0U) + { + } /* Wait */ + + /** enable MIBSPI RAM Parity */ + mibspiREG5->UERRCTRL = (mibspiREG5->UERRCTRL & 0xFFFFFFF0U) | (0x00000005U); + + /** - initialize transfer groups */ + mibspiREG5->TGCTRL[0U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)0U << 8U); /* start buffer */ + + mibspiREG5->TGCTRL[1U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)8U << 8U); /* start buffer */ + + mibspiREG5->TGCTRL[2U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U) << 8U); /* start buffer */ + + mibspiREG5->TGCTRL[3U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U) << 8U); /* start buffer */ + + mibspiREG5->TGCTRL[4U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U) << 8U); /* start buffer */ + + mibspiREG5->TGCTRL[5U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U+0U) << 8U); /* start buffer */ + + mibspiREG5->TGCTRL[6U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U+0U+0U) << 8U); /* start buffer */ + + mibspiREG5->TGCTRL[7U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U+0U+0U+0U) << 8U); /* start buffer */ + + + mibspiREG5->TGCTRL[8U] = (uint32)(8U+0U+0U+0U+0U+0U+0U+0U) << 8U; + + mibspiREG5->LTGPEND = (mibspiREG5->LTGPEND & 0xFFFF00FFU) | (uint32)(((uint32)(8U+0U+0U+0U+0U+0U+0U+0U)-1U) << 8U); + + /** - initialize buffer ram */ + { + i = 0U; + +#if (8U > 0U) + { + +#if (8U > 1U) + + while (i < (8U-1U)) + { + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_0)) & (uint16)0x00FFU); /* chip select */ + i++; + } +#endif + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_0)) & (uint16)0x00FFU); /* chip select */ + + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U)-1U)) + { + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_1)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_1)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U)-1U)) + { + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_2)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_2)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U)-1U)) + { + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_3)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_3)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U)-1U)) + { + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_4)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_4)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U+0U)-1U)) + { + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_5)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_5)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U+0U+0U)-1U)) + { + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_6)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_6)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U+0U+0U+0U)-1U)) + { + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_7)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM5->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_7)) & (uint16)0x00FFU); /* chip select */ + i++; + } +#endif + } + + /** - set interrupt levels */ + mibspiREG5->LVL = (uint32)((uint32)0U << 9U) /* TXINT */ + | (uint32)((uint32)0U << 8U) /* RXINT */ + | (uint32)((uint32)0U << 6U) /* OVRNINT */ + | (uint32)((uint32)0U << 4U) /* BITERR */ + | (uint32)((uint32)0U << 3U) /* DESYNC */ + | (uint32)((uint32)0U << 2U) /* PARERR */ + | (uint32)((uint32)0U << 1U) /* TIMEOUT */ + | (uint32)((uint32)0U << 0U); /* DLENERR */ + + /** - clear any pending interrupts */ + mibspiREG5->FLG |= 0xFFFFU; + + /** - enable interrupts */ + mibspiREG5->INT0 = (mibspiREG5->INT0 & 0xFFFF0000U) + | (uint32)((uint32)0U << 9U) /* TXINT */ + | (uint32)((uint32)0U << 8U) /* RXINT */ + | (uint32)((uint32)0U << 6U) /* OVRNINT */ + | (uint32)((uint32)0U << 4U) /* BITERR */ + | (uint32)((uint32)0U << 3U) /* DESYNC */ + | (uint32)((uint32)0U << 2U) /* PARERR */ + | (uint32)((uint32)0U << 1U) /* TIMEOUT */ + | (uint32)((uint32)0U << 0U); /* DLENERR */ + + /** @b initialize @b MIBSPI5 @b Port */ + + /** - MIBSPI5 Port output values */ + mibspiREG5->PC3 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ + | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)1U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO[0] */ + | (uint32)((uint32)0U << 11U) /* SOMI[0] */ + | (uint32)((uint32)0U << 17U) /* SIMO[1] */ + | (uint32)((uint32)0U << 18U) /* SIMO[2] */ + | (uint32)((uint32)0U << 19U) /* SIMO[3] */ + | (uint32)((uint32)0U << 25U) /* SOMI[1] */ + | (uint32)((uint32)0U << 26U) /* SOMI[2] */ + | (uint32)((uint32)0U << 27U); /* SOMI[3] */ + + /** - MIBSPI5 Port direction */ + mibspiREG5->PC1 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ + | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)1U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO[0] */ + | (uint32)((uint32)0U << 11U) /* SOMI[0] */ + | (uint32)((uint32)0U << 17U) /* SIMO[1] */ + | (uint32)((uint32)0U << 18U) /* SIMO[2] */ + | (uint32)((uint32)0U << 19U) /* SIMO[3] */ + | (uint32)((uint32)0U << 25U) /* SOMI[1] */ + | (uint32)((uint32)0U << 26U) /* SOMI[2] */ + | (uint32)((uint32)0U << 27U); /* SOMI[3] */ + + /** - MIBSPI5 Port open drain enable */ + mibspiREG5->PC6 = (uint32)((uint32)0U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 1U) /* SCS[1] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO[0] */ + | (uint32)((uint32)0U << 11U) /* SOMI[0] */ + | (uint32)((uint32)0U << 17U) /* SIMO[1] */ + | (uint32)((uint32)0U << 18U) /* SIMO[2] */ + | (uint32)((uint32)0U << 19U) /* SIMO[3] */ + | (uint32)((uint32)0U << 25U) /* SOMI[1] */ + | (uint32)((uint32)0U << 26U) /* SOMI[2] */ + | (uint32)((uint32)0U << 27U); /* SOMI[3] */ + + /** - MIBSPI5 Port pullup / pulldown selection */ + mibspiREG5->PC8 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ + | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)1U << 3U) /* SCS[3] */ + | (uint32)((uint32)1U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO[0] */ + | (uint32)((uint32)1U << 11U) /* SOMI[0] */ + | (uint32)((uint32)1U << 17U) /* SIMO[1] */ + | (uint32)((uint32)1U << 18U) /* SIMO[2] */ + | (uint32)((uint32)1U << 19U) /* SIMO[3] */ + | (uint32)((uint32)1U << 25U) /* SOMI[1] */ + | (uint32)((uint32)1U << 26U) /* SOMI[2] */ + | (uint32)((uint32)1U << 27U); /* SOMI[3] */ + + /** - MIBSPI5 Port pullup / pulldown enable*/ + mibspiREG5->PC7 = (uint32)((uint32)0U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 1U) /* SCS[1] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO[0] */ + | (uint32)((uint32)0U << 11U) /* SOMI[0] */ + | (uint32)((uint32)0U << 17U) /* SIMO[1] */ + | (uint32)((uint32)0U << 18U) /* SIMO[2] */ + | (uint32)((uint32)0U << 19U) /* SIMO[3] */ + | (uint32)((uint32)0U << 25U) /* SOMI[1] */ + | (uint32)((uint32)0U << 26U) /* SOMI[2] */ + | (uint32)((uint32)0U << 27U); /* SOMI[3] */ + + /* MIBSPI5 set all pins to functional */ + mibspiREG5->PC0 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 1U) /* SCS[1] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 3U) /* SCS[3] */ + | (uint32)((uint32)1U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO[0] */ + | (uint32)((uint32)1U << 11U) /* SOMI[0] */ + | (uint32)((uint32)1U << 17U) /* SIMO[1] */ + | (uint32)((uint32)1U << 18U) /* SIMO[2] */ + | (uint32)((uint32)1U << 19U) /* SIMO[3] */ + | (uint32)((uint32)1U << 25U) /* SOMI[1] */ + | (uint32)((uint32)1U << 26U) /* SOMI[2] */ + | (uint32)((uint32)1U << 27U); /* SOMI[3] */ + + /** - Finally start MIBSPI5 */ + mibspiREG5->GCR1 = (mibspiREG5->GCR1 & 0xFEFFFFFFU) | 0x01000000U; + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + +} + + +/** @fn void mibspiSetFunctional(mibspiBASE_t *mibspi, uint32 port) +* @brief Change functional behavior of pins at runtime. +* @param[in] mibspi - mibspi module base address +* @param[in] port - Value to write to PC0 register +* +* Change the value of the PC0 register at runtime, this allows to +* dynamically change the functionality of the MIBSPI pins between functional +* and GIO mode. +*/ +/* SourceId : MIBSPI_SourceId_002 */ +/* DesignId : MIBSPI_DesignId_002 */ +/* Requirements : HL_SR154 */ +void mibspiSetFunctional(mibspiBASE_t *mibspi, uint32 port) +{ +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + + mibspi->PC0 = port; + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ +} + + +/** @fn void mibspiSetData(mibspiBASE_t *mibspi, uint32 group, uint16 * data) +* @brief Set Buffer Data +* @param[in] mibspi - Spi module base address +* @param[in] group - Transfer group (0..7) +* @param[in] data - new data for transfer group +* +* This function updates the data for the specified transfer group, +* the length of the data must match the length of the transfer group. +*/ +/* SourceId : MIBSPI_SourceId_003 */ +/* DesignId : MIBSPI_DesignId_003 */ +/* Requirements : HL_SR155 */ +void mibspiSetData(mibspiBASE_t *mibspi, uint32 group, uint16 * data) +{ +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + + mibspiRAM_t *ram = (mibspi == mibspiREG1) ? mibspiRAM1 : ((mibspi == mibspiREG3) ? mibspiRAM3 : mibspiRAM5); + uint32 start = (mibspi->TGCTRL[group] >> 8U) & 0xFFU; + uint32 end = (group == 7U) ? (((mibspi->LTGPEND & 0x00007F00U) >> 8U) + 1U) : ((mibspi->TGCTRL[group+1U] >> 8U) & 0xFFU); + + if (end == 0U) {end = 128U;} + + while (start < end) + { + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + ram->tx[start].data = *data; + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + data++; + start++; + } +/* USER CODE BEGIN (7) */ +/* USER CODE END */ +} + + +/** @fn void mibspiGetData(mibspiBASE_t *mibspi, uint32 group, uint16 * data) +* @brief Retrieves Buffer Data from receive buffer +* @param[in] mibspi - Spi module base address +* @param[in] group - Transfer group (0..7) +* @param[out] data - pointer to data array +* +* @return error flags from data buffer, if there was a receive error on +* one of the buffers this will be reflected in the return value. +* +* This function transfers the data from the specified transfer group receive +* buffers to the data array, the length of the data must match the length +* of the transfer group. +*/ +/* SourceId : MIBSPI_SourceId_004 */ +/* DesignId : MIBSPI_DesignId_004 */ +/* Requirements : HL_SR156 */ +uint32 mibspiGetData(mibspiBASE_t *mibspi, uint32 group, uint16 * data) +{ +/* USER CODE BEGIN (8) */ +/* USER CODE END */ + + mibspiRAM_t *ram = (mibspi == mibspiREG1) ? mibspiRAM1 : ((mibspi == mibspiREG3) ? mibspiRAM3 : mibspiRAM5); + uint32 start = (mibspi->TGCTRL[group] >> 8U) & 0xFFU; + uint32 end = (group == 7U) ? (((mibspi->LTGPEND & 0x00007F00U) >> 8U) + 1U) : ((mibspi->TGCTRL[group+1U] >> 8U) & 0xFFU); + uint16 mibspiFlags = 0U; + uint32 ret; + if (end == 0U) {end = 128U;} + + while (start < end) + { + mibspiFlags |= ram->rx[start].flags; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + *data = ram->rx[start].data; + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + data++; + start++; + } + + ret = ((uint32)mibspiFlags >> 8U) & 0x5FU; +/* USER CODE BEGIN (9) */ +/* USER CODE END */ + + return ret; +} + + +/** @fn void mibspiTransfer(mibspiBASE_t *mibspi, uint32 group) +* @brief Transmit Transfer Group +* @param[in] mibspi - Spi module base address +* @param[in] group - Transfer group (0..7) +* +* Initiates a transfer for the specified transfer group. +*/ +/* SourceId : MIBSPI_SourceId_005 */ +/* DesignId : MIBSPI_DesignId_005 */ +/* Requirements : HL_SR157 */ +void mibspiTransfer(mibspiBASE_t *mibspi, uint32 group) +{ +/* USER CODE BEGIN (10) */ +/* USER CODE END */ + + mibspi->TGCTRL[group] |= 0x80000000U; + +/* USER CODE BEGIN (11) */ +/* USER CODE END */ +} + + +/** @fn boolean mibspiIsTransferComplete(mibspiBASE_t *mibspi, uint32 group) +* @brief Check for Transfer Group Ready +* @param[in] mibspi - Spi module base address +* @param[in] group - Transfer group (0..7) +* +* @return TRUE is transfer complete, otherwise FALSE. +* +* Checks to see if the transfer for the specified transfer group +* has finished. +*/ +/* SourceId : MIBSPI_SourceId_006 */ +/* DesignId : MIBSPI_DesignId_006 */ +/* Requirements : HL_SR158 */ +boolean mibspiIsTransferComplete(mibspiBASE_t *mibspi, uint32 group) +{ + boolean status; + +/* USER CODE BEGIN (12) */ +/* USER CODE END */ + + if(((((mibspi->TGINTFLG & 0xFFFF0000U) >> 16U)>> group) & 1U) == 1U) + { + mibspi->TGINTFLG = (mibspi->TGINTFLG & 0x0000FFFFU) | ((uint32)((uint32)1U << group) << 16U); + status = TRUE; + } + else + { + status = FALSE; + } + +/* USER CODE BEGIN (13) */ +/* USER CODE END */ + + return (status); +} + + +/** @fn void mibspiEnableLoopback(mibspiBASE_t *mibspi, loopBackType_t Loopbacktype) +* @brief Enable Loopback mode for self test +* @param[in] mibspi - Mibspi module base address +* @param[in] Loopbacktype - Digital or Analog +* +* This function enables the Loopback mode for self test. +*/ +/* SourceId : MIBSPI_SourceId_007 */ +/* DesignId : MIBSPI_DesignId_009 */ +/* Requirements : HL_SR161 */ +void mibspiEnableLoopback(mibspiBASE_t *mibspi, loopBackType_t Loopbacktype) +{ +/* USER CODE BEGIN (14) */ +/* USER CODE END */ + + /* Clear Loopback incase enabled already */ + mibspi->IOLPKTSTCR = 0U; + + /* Enable Loopback either in Analog or Digital Mode */ + mibspi->IOLPKTSTCR = (uint32)0x00000A00U + | (uint32)((uint32)Loopbacktype << 1U); + +/* USER CODE BEGIN (15) */ +/* USER CODE END */ +} + +/** @fn void mibspiDisableLoopback(mibspiBASE_t *mibspi) +* @brief Enable Loopback mode for self test +* @param[in] mibspi - Mibspi module base address +* +* This function disable the Loopback mode. +*/ +/* SourceId : MIBSPI_SourceId_008 */ +/* DesignId : MIBSPI_DesignId_010 */ +/* Requirements : HL_SR162 */ +void mibspiDisableLoopback(mibspiBASE_t *mibspi) +{ +/* USER CODE BEGIN (16) */ +/* USER CODE END */ + + /* Disable Loopback Mode */ + mibspi->IOLPKTSTCR = 0x00000500U; + +/* USER CODE BEGIN (17) */ +/* USER CODE END */ +} + +/** @fn void mibspiPmodeSet(mibspiBASE_t *mibspi, mibspiPmode_t Pmode, mibspiDFMT_t DFMT) +* @brief Set the Pmode for the selected Data Format register +* @param[in] mibspi - Mibspi module base address +* @param[in] Pmode - Mibspi Parellel mode +* PMODE_NORMAL +* PMODE_2_DATALINE +* PMODE_4_DATALINE +* PMODE_8_DATALINE +* @param[in] DFMT - Mibspi Data Format register +* DATA_FORMAT0 +* DATA_FORMAT1 +* DATA_FORMAT2 +* DATA_FORMAT3 +* +* This function sets the Pmode for the selected Data Format register. +*/ +/* SourceId : MIBSPI_SourceId_009 */ +/* DesignId : MIBSPI_DesignId_011 */ +/* Requirements : HL_SR524 */ +void mibspiPmodeSet(mibspiBASE_t *mibspi, mibspiPmode_t Pmode, mibspiDFMT_t DFMT) +{ + uint32 pmctrl_reg; + /* Set the Pmode for the selected Data Format register */ + pmctrl_reg = (mibspi->PMCTRL & (~(uint32)((uint32)0xFFU << (8U * DFMT)))); + mibspi->PMCTRL = (pmctrl_reg | (uint32)((uint32)Pmode << ((8U * DFMT)))); + +} + +/** @fn void mibspiEnableGroupNotification(mibspiBASE_t *mibspi, uint32 group, uint32 level) +* @brief Enable Transfer Group interrupt +* @param[in] mibspi - Spi module base address +* @param[in] group - Transfer group (0..7) +* @param[in] level - Interrupt level +* +* This function enables the transfer group finished interrupt. +*/ +/* SourceId : MIBSPI_SourceId_010 */ +/* DesignId : MIBSPI_DesignId_007 */ +/* Requirements : HL_SR159 */ +void mibspiEnableGroupNotification(mibspiBASE_t *mibspi, uint32 group, uint32 level) +{ +/* USER CODE BEGIN (18) */ +/* USER CODE END */ + + if (level != 0U) + { + mibspi->TGITLVST = (mibspi->TGITLVST & 0x0000FFFFU) | (uint32)((uint32)((uint32)1U << group) << 16U); + } + else + { + mibspi->TGITLVCR = (mibspi->TGITLVCR & 0x0000FFFFU) | (uint32)((uint32)((uint32)1U << group) << 16U); + } + mibspi->TGITENST = (mibspi->TGITENST & 0x0000FFFFU) | (uint32)((uint32)((uint32)1U << group) << 16U); + +/* USER CODE BEGIN (19) */ +/* USER CODE END */ +} + + +/** @fn void mibspiDisableGroupNotification(mibspiBASE_t *mibspi, uint32 group) +* @brief Disable Transfer Group interrupt +* @param[in] mibspi - Spi module base address +* @param[in] group - Transfer group (0..7) +* +* This function disables the transfer group finished interrupt. +*/ +/* SourceId : MIBSPI_SourceId_011 */ +/* DesignId : MIBSPI_DesignId_008 */ +/* Requirements : HL_SR160 */ +void mibspiDisableGroupNotification(mibspiBASE_t *mibspi, uint32 group) +{ +/* USER CODE BEGIN (20) */ +/* USER CODE END */ + + mibspi->TGITENCR = (mibspi->TGITENCR & 0x0000FFFFU) | (uint32)((uint32)((uint32)1U << group) << 16U); + +/* USER CODE BEGIN (21) */ +/* USER CODE END */ +} + +/** @fn void mibspi1GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : MIBSPI_SourceId_012 */ +/* DesignId : MIBSPI_DesignId_012 */ +/* Requirements : HL_SR166 */ +void mibspi1GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_GCR1 = MIBSPI1_GCR1_CONFIGVALUE; + config_reg->CONFIG_INT0 = MIBSPI1_INT0_CONFIGVALUE; + config_reg->CONFIG_LVL = MIBSPI1_LVL_CONFIGVALUE; + config_reg->CONFIG_PCFUN = MIBSPI1_PCFUN_CONFIGVALUE; + config_reg->CONFIG_PCDIR = MIBSPI1_PCDIR_CONFIGVALUE; + config_reg->CONFIG_PCPDR = MIBSPI1_PCPDR_CONFIGVALUE; + config_reg->CONFIG_PCDIS = MIBSPI1_PCDIS_CONFIGVALUE; + config_reg->CONFIG_PCPSL = MIBSPI1_PCPSL_CONFIGVALUE; + config_reg->CONFIG_DELAY = MIBSPI1_DELAY_CONFIGVALUE; + config_reg->CONFIG_FMT0 = MIBSPI1_FMT0_CONFIGVALUE; + config_reg->CONFIG_FMT1 = MIBSPI1_FMT1_CONFIGVALUE; + config_reg->CONFIG_FMT2 = MIBSPI1_FMT2_CONFIGVALUE; + config_reg->CONFIG_FMT3 = MIBSPI1_FMT3_CONFIGVALUE; + config_reg->CONFIG_MIBSPIE = MIBSPI1_MIBSPIE_CONFIGVALUE; + config_reg->CONFIG_LTGPEND = MIBSPI1_LTGPEND_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[0U] = MIBSPI1_TGCTRL0_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[1U] = MIBSPI1_TGCTRL1_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[2U] = MIBSPI1_TGCTRL2_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[3U] = MIBSPI1_TGCTRL3_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[4U] = MIBSPI1_TGCTRL4_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[5U] = MIBSPI1_TGCTRL5_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[6U] = MIBSPI1_TGCTRL6_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[7U] = MIBSPI1_TGCTRL7_CONFIGVALUE; + config_reg->CONFIG_UERRCTRL = MIBSPI1_UERRCTRL_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_GCR1 = mibspiREG1->GCR1; + config_reg->CONFIG_INT0 = mibspiREG1->INT0; + config_reg->CONFIG_LVL = mibspiREG1->LVL; + config_reg->CONFIG_PCFUN = mibspiREG1->PC0; + config_reg->CONFIG_PCDIR = mibspiREG1->PC1; + config_reg->CONFIG_PCPDR = mibspiREG1->PC6; + config_reg->CONFIG_PCDIS = mibspiREG1->PC7; + config_reg->CONFIG_PCPSL = mibspiREG1->PC8; + config_reg->CONFIG_DELAY = mibspiREG1->DELAY; + config_reg->CONFIG_FMT0 = mibspiREG1->FMT0; + config_reg->CONFIG_FMT1 = mibspiREG1->FMT1; + config_reg->CONFIG_FMT2 = mibspiREG1->FMT2; + config_reg->CONFIG_FMT3 = mibspiREG1->FMT3; + config_reg->CONFIG_MIBSPIE = mibspiREG1->MIBSPIE; + config_reg->CONFIG_LTGPEND = mibspiREG1->LTGPEND; + config_reg->CONFIG_TGCTRL[0U] = mibspiREG1->TGCTRL[0U]; + config_reg->CONFIG_TGCTRL[1U] = mibspiREG1->TGCTRL[1U]; + config_reg->CONFIG_TGCTRL[2U] = mibspiREG1->TGCTRL[2U]; + config_reg->CONFIG_TGCTRL[3U] = mibspiREG1->TGCTRL[3U]; + config_reg->CONFIG_TGCTRL[4U] = mibspiREG1->TGCTRL[4U]; + config_reg->CONFIG_TGCTRL[5U] = mibspiREG1->TGCTRL[5U]; + config_reg->CONFIG_TGCTRL[6U] = mibspiREG1->TGCTRL[6U]; + config_reg->CONFIG_TGCTRL[7U] = mibspiREG1->TGCTRL[7U]; + config_reg->CONFIG_UERRCTRL = mibspiREG1->UERRCTRL; + } +} + +/** @fn void mibspi3GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : MIBSPI_SourceId_013 */ +/* DesignId : MIBSPI_DesignId_012 */ +/* Requirements : HL_SR166 */ +void mibspi3GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_GCR1 = MIBSPI3_GCR1_CONFIGVALUE; + config_reg->CONFIG_INT0 = MIBSPI3_INT0_CONFIGVALUE; + config_reg->CONFIG_LVL = MIBSPI3_LVL_CONFIGVALUE; + config_reg->CONFIG_PCFUN = MIBSPI3_PCFUN_CONFIGVALUE; + config_reg->CONFIG_PCDIR = MIBSPI3_PCDIR_CONFIGVALUE; + config_reg->CONFIG_PCPDR = MIBSPI3_PCPDR_CONFIGVALUE; + config_reg->CONFIG_PCDIS = MIBSPI3_PCDIS_CONFIGVALUE; + config_reg->CONFIG_PCPSL = MIBSPI3_PCPSL_CONFIGVALUE; + config_reg->CONFIG_DELAY = MIBSPI3_DELAY_CONFIGVALUE; + config_reg->CONFIG_FMT0 = MIBSPI3_FMT0_CONFIGVALUE; + config_reg->CONFIG_FMT1 = MIBSPI3_FMT1_CONFIGVALUE; + config_reg->CONFIG_FMT2 = MIBSPI3_FMT2_CONFIGVALUE; + config_reg->CONFIG_FMT3 = MIBSPI3_FMT3_CONFIGVALUE; + config_reg->CONFIG_MIBSPIE = MIBSPI3_MIBSPIE_CONFIGVALUE; + config_reg->CONFIG_LTGPEND = MIBSPI3_LTGPEND_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[0U] = MIBSPI3_TGCTRL0_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[1U] = MIBSPI3_TGCTRL1_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[2U] = MIBSPI3_TGCTRL2_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[3U] = MIBSPI3_TGCTRL3_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[4U] = MIBSPI3_TGCTRL4_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[5U] = MIBSPI3_TGCTRL5_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[6U] = MIBSPI3_TGCTRL6_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[7U] = MIBSPI3_TGCTRL7_CONFIGVALUE; + config_reg->CONFIG_UERRCTRL = MIBSPI3_UERRCTRL_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_GCR1 = mibspiREG3->GCR1; + config_reg->CONFIG_INT0 = mibspiREG3->INT0; + config_reg->CONFIG_LVL = mibspiREG3->LVL; + config_reg->CONFIG_PCFUN = mibspiREG3->PC0; + config_reg->CONFIG_PCDIR = mibspiREG3->PC1; + config_reg->CONFIG_PCPDR = mibspiREG3->PC6; + config_reg->CONFIG_PCDIS = mibspiREG3->PC7; + config_reg->CONFIG_PCPSL = mibspiREG3->PC8; + config_reg->CONFIG_DELAY = mibspiREG3->DELAY; + config_reg->CONFIG_FMT0 = mibspiREG3->FMT0; + config_reg->CONFIG_FMT1 = mibspiREG3->FMT1; + config_reg->CONFIG_FMT2 = mibspiREG3->FMT2; + config_reg->CONFIG_FMT3 = mibspiREG3->FMT3; + config_reg->CONFIG_MIBSPIE = mibspiREG3->MIBSPIE; + config_reg->CONFIG_LTGPEND = mibspiREG3->LTGPEND; + config_reg->CONFIG_TGCTRL[0U] = mibspiREG3->TGCTRL[0U]; + config_reg->CONFIG_TGCTRL[1U] = mibspiREG3->TGCTRL[1U]; + config_reg->CONFIG_TGCTRL[2U] = mibspiREG3->TGCTRL[2U]; + config_reg->CONFIG_TGCTRL[3U] = mibspiREG3->TGCTRL[3U]; + config_reg->CONFIG_TGCTRL[4U] = mibspiREG3->TGCTRL[4U]; + config_reg->CONFIG_TGCTRL[5U] = mibspiREG3->TGCTRL[5U]; + config_reg->CONFIG_TGCTRL[6U] = mibspiREG3->TGCTRL[6U]; + config_reg->CONFIG_TGCTRL[7U] = mibspiREG3->TGCTRL[7U]; + config_reg->CONFIG_UERRCTRL = mibspiREG3->UERRCTRL; + } +} + +/** @fn void mibspi5GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : MIBSPI_SourceId_014 */ +/* DesignId : MIBSPI_DesignId_012 */ +/* Requirements : HL_SR166 */ +void mibspi5GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_GCR1 = MIBSPI5_GCR1_CONFIGVALUE; + config_reg->CONFIG_INT0 = MIBSPI5_INT0_CONFIGVALUE; + config_reg->CONFIG_LVL = MIBSPI5_LVL_CONFIGVALUE; + config_reg->CONFIG_PCFUN = MIBSPI5_PCFUN_CONFIGVALUE; + config_reg->CONFIG_PCDIR = MIBSPI5_PCDIR_CONFIGVALUE; + config_reg->CONFIG_PCPDR = MIBSPI5_PCPDR_CONFIGVALUE; + config_reg->CONFIG_PCDIS = MIBSPI5_PCDIS_CONFIGVALUE; + config_reg->CONFIG_PCPSL = MIBSPI5_PCPSL_CONFIGVALUE; + config_reg->CONFIG_DELAY = MIBSPI5_DELAY_CONFIGVALUE; + config_reg->CONFIG_FMT0 = MIBSPI5_FMT0_CONFIGVALUE; + config_reg->CONFIG_FMT1 = MIBSPI5_FMT1_CONFIGVALUE; + config_reg->CONFIG_FMT2 = MIBSPI5_FMT2_CONFIGVALUE; + config_reg->CONFIG_FMT3 = MIBSPI5_FMT3_CONFIGVALUE; + config_reg->CONFIG_MIBSPIE = MIBSPI5_MIBSPIE_CONFIGVALUE; + config_reg->CONFIG_LTGPEND = MIBSPI5_LTGPEND_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[0U] = MIBSPI5_TGCTRL0_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[1U] = MIBSPI5_TGCTRL1_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[2U] = MIBSPI5_TGCTRL2_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[3U] = MIBSPI5_TGCTRL3_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[4U] = MIBSPI5_TGCTRL4_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[5U] = MIBSPI5_TGCTRL5_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[6U] = MIBSPI5_TGCTRL6_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[7U] = MIBSPI5_TGCTRL7_CONFIGVALUE; + config_reg->CONFIG_UERRCTRL = MIBSPI5_UERRCTRL_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_GCR1 = mibspiREG5->GCR1; + config_reg->CONFIG_INT0 = mibspiREG5->INT0; + config_reg->CONFIG_LVL = mibspiREG5->LVL; + config_reg->CONFIG_PCFUN = mibspiREG5->PC0; + config_reg->CONFIG_PCDIR = mibspiREG5->PC1; + config_reg->CONFIG_PCPDR = mibspiREG5->PC6; + config_reg->CONFIG_PCDIS = mibspiREG5->PC7; + config_reg->CONFIG_PCPSL = mibspiREG5->PC8; + config_reg->CONFIG_DELAY = mibspiREG5->DELAY; + config_reg->CONFIG_FMT0 = mibspiREG5->FMT0; + config_reg->CONFIG_FMT1 = mibspiREG5->FMT1; + config_reg->CONFIG_FMT2 = mibspiREG5->FMT2; + config_reg->CONFIG_FMT3 = mibspiREG5->FMT3; + config_reg->CONFIG_MIBSPIE = mibspiREG5->MIBSPIE; + config_reg->CONFIG_LTGPEND = mibspiREG5->LTGPEND; + config_reg->CONFIG_TGCTRL[0U] = mibspiREG5->TGCTRL[0U]; + config_reg->CONFIG_TGCTRL[1U] = mibspiREG5->TGCTRL[1U]; + config_reg->CONFIG_TGCTRL[2U] = mibspiREG5->TGCTRL[2U]; + config_reg->CONFIG_TGCTRL[3U] = mibspiREG5->TGCTRL[3U]; + config_reg->CONFIG_TGCTRL[4U] = mibspiREG5->TGCTRL[4U]; + config_reg->CONFIG_TGCTRL[5U] = mibspiREG5->TGCTRL[5U]; + config_reg->CONFIG_TGCTRL[6U] = mibspiREG5->TGCTRL[6U]; + config_reg->CONFIG_TGCTRL[7U] = mibspiREG5->TGCTRL[7U]; + config_reg->CONFIG_UERRCTRL = mibspiREG5->UERRCTRL; + } +} + + + + + + + Index: firmware/source/notification.c =================================================================== diff -u --- firmware/source/notification.c (revision 0) +++ firmware/source/notification.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,372 @@ +/** @file notification.c +* @brief User Notification Definition File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file defines empty notification routines to avoid +* linker errors, Driver expects user to define the notification. +* The user needs to either remove this file and use their custom +* notification function or place their code sequence in this file +* between the provided USER CODE BEGIN and USER CODE END. +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* Include Files */ + +#include "esm.h" +#include "sys_selftest.h" +#include "adc.h" +#include "can.h" +#include "gio.h" +#include "lin.h" +#include "mibspi.h" +#include "sci.h" +#include "spi.h" +#include "het.h" +#include "rti.h" +#include "dcc.h" +#include "i2c.h" +#include "crc.h" +#include "etpwm.h" +#include "eqep.h" +#include "ecap.h" +#include "sys_dma.h" +#include "emac.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ +#pragma WEAK(esmGroup1Notification) +void esmGroup1Notification(uint32 channel) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (1) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ +#pragma WEAK(esmGroup2Notification) +void esmGroup2Notification(uint32 channel) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (3) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ +#pragma WEAK(memoryPort0TestFailNotification) +void memoryPort0TestFailNotification(uint32 groupSelect, uint32 dataSelect, uint32 address, uint32 data) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (5) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ +#pragma WEAK(memoryPort1TestFailNotification) +void memoryPort1TestFailNotification(uint32 groupSelect, uint32 dataSelect, uint32 address, uint32 data) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (7) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (8) */ +/* USER CODE END */ +#pragma WEAK(rtiNotification) +void rtiNotification(uint32 notification) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (9) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (10) */ +/* USER CODE END */ +#pragma WEAK(adcNotification) +void adcNotification(adcBASE_t *adc, uint32 group) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (11) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (12) */ +/* USER CODE END */ +#pragma WEAK(canErrorNotification) +void canErrorNotification(canBASE_t *node, uint32 notification) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (13) */ +/* USER CODE END */ +} + +#pragma WEAK(canStatusChangeNotification) +void canStatusChangeNotification(canBASE_t *node, uint32 notification) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (14) */ +/* USER CODE END */ +} + +#pragma WEAK(canMessageNotification) +void canMessageNotification(canBASE_t *node, uint32 messageBox) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (15) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (16) */ +/* USER CODE END */ +#pragma WEAK(dccNotification) +void dccNotification(dccBASE_t *dcc,uint32 flags) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (17) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (18) */ +/* USER CODE END */ +#pragma WEAK(gioNotification) +void gioNotification(gioPORT_t *port, uint32 bit) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (19) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (20) */ +/* USER CODE END */ +#pragma WEAK(i2cNotification) +void i2cNotification(i2cBASE_t *i2c, uint32 flags) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (21) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ +#pragma WEAK(linNotification) +void linNotification(linBASE_t *lin, uint32 flags) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (23) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (24) */ +/* USER CODE END */ +#pragma WEAK(mibspiNotification) +void mibspiNotification(mibspiBASE_t *mibspi, uint32 flags) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (25) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (26) */ +/* USER CODE END */ +#pragma WEAK(mibspiGroupNotification) +void mibspiGroupNotification(mibspiBASE_t *mibspi, uint32 group) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (27) */ +/* USER CODE END */ +} +/* USER CODE BEGIN (28) */ +/* USER CODE END */ + +#pragma WEAK(sciNotification) +void sciNotification(sciBASE_t *sci, uint32 flags) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (29) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (30) */ +/* USER CODE END */ +#pragma WEAK(spiNotification) +void spiNotification(spiBASE_t *spi, uint32 flags) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (31) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (32) */ +/* USER CODE END */ +#pragma WEAK(spiEndNotification) +void spiEndNotification(spiBASE_t *spi) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (33) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (34) */ +/* USER CODE END */ + +#pragma WEAK(pwmNotification) +void pwmNotification(hetBASE_t * hetREG,uint32 pwm, uint32 notification) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (35) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (36) */ +/* USER CODE END */ +#pragma WEAK(edgeNotification) +void edgeNotification(hetBASE_t * hetREG,uint32 edge) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (37) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (38) */ +/* USER CODE END */ +#pragma WEAK(hetNotification) +void hetNotification(hetBASE_t *het, uint32 offset) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (39) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (40) */ +/* USER CODE END */ + +#pragma WEAK(crcNotification) +void crcNotification(crcBASE_t *crc, uint32 flags) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (41) */ +/* USER CODE END */ +} +/* USER CODE BEGIN (42) */ +/* USER CODE END */ + +/* USER CODE BEGIN (43) */ +/* USER CODE END */ + +#pragma WEAK(etpwmNotification) +void etpwmNotification(etpwmBASE_t *node) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (44) */ +/* USER CODE END */ +} +#pragma WEAK(etpwmTripNotification) +void etpwmTripNotification(etpwmBASE_t *node,uint16 flags) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (45) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (46) */ +/* USER CODE END */ + +/* USER CODE BEGIN (47) */ +/* USER CODE END */ + +#pragma WEAK(eqepNotification) +void eqepNotification(eqepBASE_t *eqep,uint16 flags) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (48) */ +/* USER CODE END */ +} +/* USER CODE BEGIN (49) */ +/* USER CODE END */ + +/* USER CODE BEGIN (50) */ +/* USER CODE END */ + +#pragma WEAK(ecapNotification) +void ecapNotification(ecapBASE_t *ecap,uint16 flags) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (51) */ +/* USER CODE END */ +} +/* USER CODE BEGIN (52) */ +/* USER CODE END */ + +/* USER CODE BEGIN (53) */ +/* USER CODE END */ + +#pragma WEAK(dmaGroupANotification) +void dmaGroupANotification(dmaInterrupt_t inttype, uint32 channel) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (54) */ +/* USER CODE END */ +} +/* USER CODE BEGIN (55) */ +/* USER CODE END */ + +/* USER CODE BEGIN (56) */ +/* USER CODE END */ +#pragma WEAK(emacTxNotification) +void emacTxNotification(hdkif_t *hdkif) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (57) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (58) */ +/* USER CODE END */ +#pragma WEAK(emacRxNotification) +void emacRxNotification(hdkif_t *hdkif) +{ +/* enter user code between the USER CODE BEGIN and USER CODE END. */ +/* USER CODE BEGIN (59) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (60) */ +/* USER CODE END */ Index: firmware/source/phy_dp83640.c =================================================================== diff -u --- firmware/source/phy_dp83640.c (revision 0) +++ firmware/source/phy_dp83640.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,431 @@ +/** + * \file phy_dp83640.c + * + * \brief APIs for configuring DP83640. + * + * This file contains the device abstraction APIs for PHY DP83640. + */ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "sys_common.h" +#include "mdio.h" +#include "phy_dp83640.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/******************************************************************************* +* API FUNCTION DEFINITIONS +*******************************************************************************/ +/** + * \brief Reads the PHY ID. + * + * \param mdioBaseAddr Base Address of the MDIO Module Registers. + * \param phyAddr PHY Adress. + * + * \return 32 bit PHY ID (ID1:ID2) + * + **/ +/* SourceId : ETH_SourceId_063 */ +/* DesignId : ETH_DesignId_063*/ +/* Requirements : HL_ETH_SR49 */ +uint32 Dp83640IDGet(uint32 mdioBaseAddr, uint32 phyAddr) +{ + uint32 id = 0U; + uint16 data = 0U; + + /* read the ID1 register */ + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_ID1, &data); + + /* update the ID1 value */ + id = (uint32)data; + id = (uint32)((uint32)id << PHY_ID_SHIFT); + + /* read the ID2 register */ + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_ID2, &data); + + /* update the ID2 value */ + id |= data; + + /* return the ID in ID1:ID2 format */ + return id; +} + +/** + * \brief Reads the link status of the PHY. + * + * \param mdioBaseAddr Base Address of the MDIO Module Registers. + * \param phyAddr PHY Adress. + * \param retries The number of retries before indicating down status + * + * \return link status after reading \n + * TRUE if link is up + * FALSE if link is down \n + * + * \note This reads both the basic status register of the PHY and the + * link register of MDIO for double check + **/ +/* SourceId : ETH_SourceId_067 */ +/* DesignId : ETH_DesignId_067*/ +/* Requirements : HL_ETH_SR47 */ +boolean Dp83640LinkStatusGet(uint32 mdioBaseAddr, + uint32 phyAddr, + volatile uint32 retries) +{ + volatile uint16 linkStatus = 0U; + boolean retVal = TRUE; + + while (retVal == TRUE) + { + /* First read the BSR of the PHY */ + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_BSR, &linkStatus); + + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + if((linkStatus & PHY_LINK_STATUS) != 0U) + { + /* Check if MDIO LINK register is updated */ + linkStatus = (uint16)MDIOPhyLinkStatusGet(mdioBaseAddr); + + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + if((linkStatus & (uint16)((uint16)1U << phyAddr)) != 0U) + { + break; + } + else + { + /*SAFETYMCUSW 9 S MR:12.2 "Ternary Operator Expression" */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + if(retries != 0U) + { + retries--; + } + else + { + retVal = FALSE; + } + } + } + else + { + /*SAFETYMCUSW 9 S MR:12.2 "Ternary Operator Expression" */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + if(retries != 0U) + { + retries--; + } + else + { + retVal = FALSE; + } + } + } + + return retVal; +} + +/** + * \brief This function does Autonegotiates with the EMAC device connected + * to the PHY. It will wait till the autonegotiation completes. + * + * \param mdioBaseAddr Base Address of the MDIO Module Registers. + * \param phyAddr PHY Adress. + * \param advVal Autonegotiation advertisement value + * advVal can take the following any OR combination of the values \n + * DP83640_100BTX - 100BaseTX + * DP83640_100BTX_FD - Full duplex capabilty for 100BaseTX + * DP83640_10BT - 10BaseT + * DP83640_10BT_FD - Full duplex capability for 10BaseT + * + * \return status after autonegotiation \n + * TRUE if autonegotiation successful + * FALSE if autonegotiation failed + * + **/ +/* SourceId : ETH_SourceId_065 */ +/* DesignId : ETH_DesignId_065*/ +/* Requirements : HL_ETH_SR46 */ +boolean Dp83640AutoNegotiate(uint32 mdioBaseAddr, + uint32 phyAddr, uint16 advVal) +{ + volatile uint16 data = 0U, anar = 0U; + boolean retVal = TRUE; + uint32 phyNegTries = 0xFFFFU; + if(MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_BCR, &data) != TRUE ) + { + retVal = FALSE; + } + + data |= PHY_AUTONEG_ENABLE; + + /* Enable Auto Negotiation */ + MDIOPhyRegWrite(mdioBaseAddr, phyAddr, (uint32)PHY_BCR, data); + + if(MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_BCR, &data) != TRUE ) + { + retVal = FALSE; + } + + /* Write Auto Negotiation capabilities */ + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_AUTONEG_ADV, &anar); + anar &= (uint16)(~0xff10U); + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + MDIOPhyRegWrite(mdioBaseAddr, phyAddr, (uint32)PHY_AUTONEG_ADV, (anar |advVal)); + + data |= PHY_AUTONEG_RESTART; + + /* Start Auto Negotiation */ + MDIOPhyRegWrite(mdioBaseAddr, phyAddr, (uint32)PHY_BCR, data); + + /* Get the auto negotiation status*/ + if(MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_BSR, &data) != TRUE) + { + retVal = FALSE; + } + + /* Wait till auto negotiation is complete */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((((uint16)(PHY_AUTONEG_INCOMPLETE)) == (data & (uint16)(PHY_AUTONEG_STATUS))) && (retVal == TRUE) && (phyNegTries > 0U)) + { + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_BSR, &data); + phyNegTries--; + } + + /* Check if the PHY is able to perform auto negotiation */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + if((data & PHY_AUTONEG_ABLE) != 0U) + { + retVal = TRUE; + } + else + { + retVal = FALSE; + } + + return retVal; +} + + +/** + * \brief Reads the Link Partner Ability register of the PHY. + * + * \param mdioBaseAddr Base Address of the MDIO Module Registers. + * \param phyAddr PHY Adress. + * \param ptnerAblty The partner abilities of the EMAC + * + * \return status after reading \n + * TRUE if reading successful + * FALSE if reading failed + **/ +/* SourceId : ETH_SourceId_066 */ +/* DesignId : ETH_DesignId_066*/ +/* Requirements : HL_ETH_SR48 */ +boolean Dp83640PartnerAbilityGet(uint32 mdioBaseAddr, + uint32 phyAddr, + uint16 *ptnerAblty) +{ + return (MDIOPhyRegRead(mdioBaseAddr, phyAddr, PHY_LINK_PARTNER_ABLTY, + ptnerAblty)); +} + + +/** + * \brief Resets the PHY. + * + * \param mdioBaseAddr Base Address of the MDIO Module Registers. + * \param phyAddr PHY Adress. + * + * \return No return value. + **/ +/* SourceId : ETH_SourceId_064 */ +/* DesignId : ETH_DesignId_064*/ +/* Requirements : HL_ETH_SR44 */ +void Dp83640Reset(uint32 mdioBaseAddr, uint32 phyAddr) +{ + uint16 regVal = 0U; + MDIOPhyRegWrite(mdioBaseAddr, phyAddr, PHY_BCR, PHY_SOFTRESET); + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, PHY_BCR, ®Val); + + /* : This bit is self-clearing and returns 1 until the reset process is complete. */ + while((regVal & PHY_SOFTRESET) != 0U) + { + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, PHY_BCR, ®Val); + } +} + +/** + * \brief Enables PHY Loopback. + * + * \param mdioBaseAddr Base Address of the MDIO Module Registers. + * \param phyAddr PHY Adress. + * + * \return No return value. + **/ +/* SourceId : ETH_SourceId_069 */ +/* DesignId : ETH_DesignId_069*/ +/* Requirements : HL_ETH_SR51 */ +void Dp83640EnableLoopback(uint32 mdioBaseAddr, uint32 phyAddr) +{ + uint32 delay = 0x1FFFU; + uint16 regVal = 0x0000U; + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_BCR, ®Val); + /* Disabling Auto Negotiate. */ + /*SAFETYMCUSW 334 S MR:10.5 "Only unsigned short values are used." */ + regVal &= (uint16)(~((uint16)PHY_AUTONEG_ENABLE)); + /* Enabling Loopback. */ + regVal |= PHY_LPBK_ENABLE; + + MDIOPhyRegWrite(mdioBaseAddr, phyAddr, (uint32)PHY_BCR, regVal); + + while(delay > 0U) + { + delay--; + } +} + +/** + * \brief Disable PHY Loopback. + * + * \param mdioBaseAddr Base Address of the MDIO Module Registers. + * \param phyAddr PHY Adress. + * + * \return No return value. + **/ +/* SourceId : ETH_SourceId_070 */ +/* DesignId : ETH_DesignId_070*/ +/* Requirements : HL_ETH_SR51 */ +void Dp83640DisableLoopback(uint32 mdioBaseAddr, uint32 phyAddr) +{ + uint32 delay = 0x1FFFU; + uint16 regVal = 0x0000U; + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_BCR, ®Val); + + /* Enabling Loopback. */ + /*SAFETYMCUSW 334 S MR:10.5 "Only unsigned short values are used." */ + regVal &= (uint16)(~((uint16)PHY_LPBK_ENABLE)); + + MDIOPhyRegWrite(mdioBaseAddr, phyAddr, (uint32)PHY_BCR, regVal); + + while(delay > 0U) + { + delay--; + } +} +/** + * \brief Reads the Transmit/Receive Timestamp + * + * \param mdioBaseAddr Base Address of the MDIO Module Registers. + * \param phyAddr PHY Adress. + * \param type 1- Transmit Timetamp + * 2- Receive Timestamp + * \param timestamp The read value that is returned to the user. + * + * \return The timestamp is returned in 4 16-bit reads. They are stored in the following order: + * Timestamp_ns [63:49] + * Overflow_cnt[48:47], Timestamp_ns[46:33] + * Timestamp_sec[32:16] + * Timestamp_sec[15:0] + * This is returned as a 64 bit value. + * + **/ +/* SourceId : ETH_SourceId_068 */ +/* DesignId : ETH_DesignId_068*/ +/* Requirements : HL_ETH_SR53 */ +uint64 Dp83640GetTimeStamp(uint32 mdioBaseAddr, uint32 phyAddr, phyTimeStamp_t type) +{ + uint16 ts = 0U; + /* (MISRA-C:2004 10.1/R) MISRA error reported with Code Composer Studio MISRA checker (due to use of & ?) */ + uint16 *tsptr = &ts; + uint64 timeStamp = 0u; + if(type == 1U) + { + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_TXTS, tsptr); + timeStamp |= (uint64)ts; + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_TXTS, tsptr); + timeStamp = timeStamp << 16U ; + timeStamp |= (uint64)ts; + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_TXTS, tsptr); + timeStamp = timeStamp << 16U ; + timeStamp |= (uint64)ts; + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_TXTS, tsptr); + timeStamp = timeStamp << 16U ; + timeStamp |= (uint64)ts; + } + else + { + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_RXTS, tsptr); + timeStamp |= (uint64)ts; + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_RXTS, tsptr); + timeStamp = timeStamp << 16U ; + timeStamp |= (uint64)ts; + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_RXTS, tsptr); + timeStamp = timeStamp << 16U ; + timeStamp |= (uint64)ts; + (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_RXTS, tsptr); + timeStamp = timeStamp << 16U ; + timeStamp |= (uint64)ts; + } + + return timeStamp; +} + +/** + * \brief Reads the Speed info from Status register of the PHY. + * + * \param mdioBaseAddr Base Address of the MDIO Module Registers. + * \param phyAddr PHY Adress. + * \param ptnerAblty The partner abilities of the EMAC + * + * \return status after reading \n + * TRUE if reading successful + * FALSE if reading failed + **/ +boolean Dp83640PartnerSpdGet(uint32 mdioBaseAddr, + uint32 phyAddr, + uint16 *ptnerAblty) +{ + return (MDIOPhyRegRead(mdioBaseAddr, phyAddr, PHY_LINK_PARTNER_SPD, + ptnerAblty)); +} +/* USER CODE BEGIN (2) */ +/* USER CODE END */ +/**************************** End Of File ***********************************/ Index: firmware/source/pinmux.c =================================================================== diff -u --- firmware/source/pinmux.c (revision 0) +++ firmware/source/pinmux.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,367 @@ +/** @file pinmux.c +* @brief PINMUX Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* Include Files */ + +#include "pinmux.h" + +/*LDRA_INSPECTWINDOW 50 */ +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 76 S MR: 19.12 REVIEWED " Needs usage of multiple ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +/*SAFETYMCUSW 76 S MR: 19.12 REVIEWED " Needs usage of multiple ## in the macro " */ +/*SAFETYMCUSW 76 S MR: 19.12 REVIEWED " Needs usage of multiple ## in the macro " */ +/*SAFETYMCUSW 76 S MR: 19.12 REVIEWED " Needs usage of multiple ## in the macro " */ +/*SAFETYMCUSW 76 S MR: 19.12 REVIEWED " Needs usage of multiple ## in the macro " */ +/*SAFETYMCUSW 76 S MR: 19.12 REVIEWED " Needs usage of multiple ## in the macro " */ +/*SAFETYMCUSW 76 S MR: 19.12 REVIEWED " Needs usage of multiple ## in the macro " */ +/*SAFETYMCUSW 76 S MR: 19.12 REVIEWED " Needs usage of multiple ## in the macro " */ +#define PINMUX_SET(REG, PINNUM, MUX) \ + (pinMuxReg->PINMMR##REG = (pinMuxReg->PINMMR##REG & PINMUX_PIN_##PINNUM##_MASK) | (PINMUX_PIN_##PINNUM##_##MUX)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_GATE_EMIF_CLK_ENABLE(state) \ + (pinMuxReg->PINMMR29 = (pinMuxReg->PINMMR29 & PINMUX_GATE_EMIF_CLK_MASK) | (PINMUX_GATE_EMIF_CLK_##state)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_GIOB_DISABLE_HET2_ENABLE(state) \ + (pinMuxReg->PINMMR29 = (pinMuxReg->PINMMR29 & PINMUX_GIOB_DISABLE_HET2_MASK) | (PINMUX_GIOB_DISABLE_HET2_##state)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ALT_ADC_TRIGGER_SELECT(num) \ + (pinMuxReg->PINMMR30 = (pinMuxReg->PINMMR30 & PINMUX_ALT_ADC_TRIGGER_MASK) | (PINMUX_ALT_ADC_TRIGGER_##num)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETHERNET_SELECT(interface) \ + (pinMuxReg->PINMMR29 = (pinMuxReg->PINMMR29 & PINMUX_ETHERNET_MASK) | (PINMUX_ETHERNET_##interface)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM1_EQEPERR_ENABLE(interface) \ + (pinMuxReg->PINMMR41 = (pinMuxReg->PINMMR41 & PINMUX_ETPWM1_MASK) | (PINMUX_ETPWM1_##interface)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM2_EQEPERR_ENABLE(interface) \ + (pinMuxReg->PINMMR41 = (pinMuxReg->PINMMR41 & PINMUX_ETPWM2_MASK) | (PINMUX_ETPWM2_##interface)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM3_EQEPERR_ENABLE(interface) \ + (pinMuxReg->PINMMR41 = (pinMuxReg->PINMMR41 & PINMUX_ETPWM3_MASK) | (PINMUX_ETPWM3_##interface)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM4_EQEPERR_ENABLE(interface) \ + (pinMuxReg->PINMMR41 = (pinMuxReg->PINMMR41 & PINMUX_ETPWM4_MASK) | (PINMUX_ETPWM4_##interface)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM5_EQEPERR_ENABLE(interface) \ + (pinMuxReg->PINMMR42 = (pinMuxReg->PINMMR42 & PINMUX_ETPWM5_MASK) | (PINMUX_ETPWM5_##interface)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM6_EQEPERR_ENABLE(interface) \ + (pinMuxReg->PINMMR42 = (pinMuxReg->PINMMR42 & PINMUX_ETPWM6_MASK) | (PINMUX_ETPWM6_##interface)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM7_EQEPERR_ENABLE(interface) \ + (pinMuxReg->PINMMR42 = (pinMuxReg->PINMMR42 & PINMUX_ETPWM7_MASK) | (PINMUX_ETPWM7_##interface)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM_TZ1_ENABLE(interface) \ + (pinMuxReg->PINMMR46 = (pinMuxReg->PINMMR46 & PINMUX_TZ1_SHIFT) | (PINMUX_TZ1_##interface)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM_TZ2_ENABLE(interface) \ + (pinMuxReg->PINMMR46 = (pinMuxReg->PINMMR46 & PINMUX_TZ2_SHIFT) | (PINMUX_TZ2_##interface)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM_TZ3_ENABLE(interface) \ + (pinMuxReg->PINMMR47 = (pinMuxReg->PINMMR47 & PINMUX_TZ3_SHIFT) | (PINMUX_TZ3_##interface)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM_EPWM1SYNCI_ENABLE(interface) \ + (pinMuxReg->PINMMR47 = (pinMuxReg->PINMMR47 & PINMUX_EPWM1SYNCI_SHIFT) | (PINMUX_EPWM1SYNCI_##interface)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM_TIME_BASE_SYNC_ENABLE(state) \ + (pinMuxReg->PINMMR36 = (pinMuxReg->PINMMR36 & PINMUX_ETPWM_TIME_BASE_SYNC_MASK) | (PINMUX_ETPWM_TIME_BASE_SYNC_##state)) + +/*SAFETYMCUSW 125 S MR: 19.13 REVIEWED " Needs usage of ## in the macro " */ +/*SAFETYMCUSW 78 S MR: 19.10 REVIEWED " Macro parameter used for concatenation " */ +#define PINMUX_ETPWM_TBCLK_SYNC_ENABLE(state) \ + (pinMuxReg->PINMMR37 = (pinMuxReg->PINMMR37 & PINMUX_ETPWM_TBCLK_SYNC_MASK) | (PINMUX_ETPWM_TBCLK_SYNC_##state)) + + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* SourceId : PINMUX_SourceId_001 */ +/* DesignId : PINMUX_DesignId_001 */ +/* Requirements : HL_SR325 */ +void muxInit(void){ + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + /* Enable Pin Muxing */ + kickerReg->KICKER0 = 0x83E70B13U; + kickerReg->KICKER1 = 0x95A4F1E0U; + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + pinMuxReg->PINMMR0 = PINMUX_PIN_1_GIOB_3 | PINMUX_PIN_2_GIOA_0 | PINMUX_PIN_3_MIBSPI3NCS_3 | PINMUX_PIN_4_MIBSPI3NCS_2; + + pinMuxReg->PINMMR1 = PINMUX_PIN_5_GIOA_1 | PINMUX_PIN_6_HET1_11; + + pinMuxReg->PINMMR2 = PINMUX_PIN_9_GIOA_2 | PINMUX_PIN_14_GIOA_5; + + pinMuxReg->PINMMR3 = PINMUX_PIN_15_HET1_22 | PINMUX_PIN_16_GIOA_6; + + pinMuxReg->PINMMR4 = PINMUX_PIN_22_GIOA_7 | PINMUX_PIN_23_HET1_01 | PINMUX_PIN_24_HET1_03; + + pinMuxReg->PINMMR5 = PINMUX_PIN_25_HET1_0 | PINMUX_PIN_30_HET1_02 | PINMUX_PIN_31_HET1_05; + + pinMuxReg->PINMMR6 = PINMUX_PIN_33_HET1_07 | PINMUX_PIN_35_HET1_09; + + pinMuxReg->PINMMR7 = PINMUX_PIN_37_MIBSPI3NCS_1 | PINMUX_PIN_38_HET1_06; + + pinMuxReg->PINMMR8 = PINMUX_PIN_39_HET1_13 | PINMUX_PIN_40_MIBSPI1NCS_2 | PINMUX_PIN_41_HET1_15; + + pinMuxReg->PINMMR9 = ((~(pinMuxReg->PINMMR9 >> 18U) & 0x00000001U ) << 18U) | PINMUX_PIN_54_MIBSPI3NENA | PINMUX_PIN_55_MIBSPI3NCS_0; + + pinMuxReg->PINMMR10 = PINMUX_PIN_86_AD1EVT; + + pinMuxReg->PINMMR11 = PINMUX_PIN_91_HET1_24; + + pinMuxReg->PINMMR12 = PINMUX_PIN_92_HET1_26 | PINMUX_PIN_96_MIBSPI1NENA | PINMUX_PIN_97_MIBSPI5NENA; + + pinMuxReg->PINMMR13 = PINMUX_PIN_98_MIBSPI5SOMI_0 | PINMUX_PIN_99_MIBSPI5SIMO_0 | PINMUX_PIN_100_MIBSPI5CLK | PINMUX_PIN_105_MIBSPI1NCS_0; + + pinMuxReg->PINMMR14 = PINMUX_PIN_106_HET1_08 | PINMUX_PIN_107_HET1_28; + + pinMuxReg->PINMMR15 = 0x01010101U; + + pinMuxReg->PINMMR16 = 0x01010101U; + + pinMuxReg->PINMMR17 = PINMUX_PIN_118_HET1_10 | PINMUX_PIN_124_HET1_12; + + pinMuxReg->PINMMR18 = PINMUX_PIN_125_HET1_14 | PINMUX_PIN_126_GIOB_0; + + pinMuxReg->PINMMR19 = PINMUX_PIN_127_HET1_30; + + pinMuxReg->PINMMR20 = PINMUX_PIN_130_MIBSPI1NCS_1; + + pinMuxReg->PINMMR21 = PINMUX_PIN_133_GIOB_1; + + pinMuxReg->PINMMR22 = 0x01010101U; + + pinMuxReg->PINMMR23 = ((~(pinMuxReg->PINMMR5 >> 1U) & 0x00000001U ) << 8U) | ((~(pinMuxReg->PINMMR5 >> 9U) & 0x00000001U ) << 16U) | ((~(pinMuxReg->PINMMR5 >> 17U) & 0x00000001U ) << 24U); + + pinMuxReg->PINMMR24 = ((~(pinMuxReg->PINMMR20 >> 17U) & 0x00000001U ) << 16U) | ((~(pinMuxReg->PINMMR8 >> 9U) & 0x00000001U ) << 24U); + + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + pinMuxReg->PINMMR25 = ((~(pinMuxReg->PINMMR12 >> 17U) & 0x00000001U ) << 8U) | ((~(pinMuxReg->PINMMR7 >> 9U) & 0x00000001U ) << 16U) | ((~(pinMuxReg->PINMMR0 >> 26U) & 0x00000001U ) << 24U); + + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + pinMuxReg->PINMMR26 = ((~(pinMuxReg->PINMMR0 >> 18U) & 0x00000001U ) << 0U) | ((~(pinMuxReg->PINMMR9 >> 10U) & 0x00000001U ) << 8U); + + pinMuxReg->PINMMR27 = PINMUX_PIN_32_MIBSPI5NCS_0; + + pinMuxReg->PINMMR29 = 0x01010101U; + + pinMuxReg->PINMMR30 = 0x01010100U; + + pinMuxReg->PINMMR31 = 0x01010101U; + + pinMuxReg->PINMMR32 = 0x00010101U; + + pinMuxReg->PINMMR33 = PINMUX_PIN_36_HET1_04 | PINMUX_PIN_51_MIBSPI3SOMI | PINMUX_PIN_52_MIBSPI3SIMO | PINMUX_PIN_53_MIBSPI3CLK; + + pinMuxReg->PINMMR34 = PINMUX_PIN_139_HET1_16 | PINMUX_PIN_140_HET1_18 | PINMUX_PIN_141_HET1_20; + + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + + PINMUX_GATE_EMIF_CLK_ENABLE(OFF); + PINMUX_GIOB_DISABLE_HET2_ENABLE(OFF); + PINMUX_ALT_ADC_TRIGGER_SELECT(1); + PINMUX_ETHERNET_SELECT(RMII); + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + PINMUX_SET(0,1,GIOB_3); + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + PINMUX_SET(0,2,GIOA_0); + PINMUX_SET(1,5,GIOA_1); + PINMUX_SET(3,15,HET1_22); + PINMUX_SET(18,125,HET1_14); + PINMUX_SET(18,126,GIOB_0); + PINMUX_SET(21,133,GIOB_1); + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + + PINMUX_ETPWM1_EQEPERR_ENABLE(EQEPERR12); + PINMUX_ETPWM2_EQEPERR_ENABLE(EQEPERR12); + PINMUX_ETPWM3_EQEPERR_ENABLE(EQEPERR12); + PINMUX_ETPWM4_EQEPERR_ENABLE(EQEPERR12); + PINMUX_ETPWM5_EQEPERR_ENABLE(EQEPERR12); + PINMUX_ETPWM6_EQEPERR_ENABLE(EQEPERR12); + PINMUX_ETPWM7_EQEPERR_ENABLE(EQEPERR12); + PINMUX_ETPWM_TIME_BASE_SYNC_ENABLE(OFF); + PINMUX_ETPWM_TZ1_ENABLE(ASYNC); + PINMUX_ETPWM_TZ2_ENABLE(ASYNC); + PINMUX_ETPWM_TZ3_ENABLE(ASYNC); + PINMUX_ETPWM_EPWM1SYNCI_ENABLE(ASYNC); + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + + /* Disable Pin Muxing */ + kickerReg->KICKER0 = 0x00000000U; + kickerReg->KICKER1 = 0x00000000U; + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ +} + +/** @fn void pinmuxGetConfigValue(pinmux_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : PINMUX_SourceId_002 */ +/* DesignId : PINMUX_DesignId_002 */ +/* Requirements : HL_SR328 */ +void pinmuxGetConfigValue(pinmux_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + {/* Do not pass Initial Value as parameter */ + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_PINMMR0 = pinMuxReg->PINMMR0; + config_reg->CONFIG_PINMMR1 = pinMuxReg->PINMMR1; + config_reg->CONFIG_PINMMR2 = pinMuxReg->PINMMR2; + config_reg->CONFIG_PINMMR3 = pinMuxReg->PINMMR3; + config_reg->CONFIG_PINMMR4 = pinMuxReg->PINMMR4; + config_reg->CONFIG_PINMMR5 = pinMuxReg->PINMMR5; + config_reg->CONFIG_PINMMR6 = pinMuxReg->PINMMR6; + config_reg->CONFIG_PINMMR7 = pinMuxReg->PINMMR7; + config_reg->CONFIG_PINMMR8 = pinMuxReg->PINMMR8; + config_reg->CONFIG_PINMMR9 = pinMuxReg->PINMMR9; + config_reg->CONFIG_PINMMR10 = pinMuxReg->PINMMR10; + config_reg->CONFIG_PINMMR11 = pinMuxReg->PINMMR11; + config_reg->CONFIG_PINMMR12 = pinMuxReg->PINMMR12; + config_reg->CONFIG_PINMMR13 = pinMuxReg->PINMMR13; + config_reg->CONFIG_PINMMR14 = pinMuxReg->PINMMR14; + config_reg->CONFIG_PINMMR15 = pinMuxReg->PINMMR15; + config_reg->CONFIG_PINMMR16 = pinMuxReg->PINMMR16; + config_reg->CONFIG_PINMMR17 = pinMuxReg->PINMMR17; + config_reg->CONFIG_PINMMR18 = pinMuxReg->PINMMR18; + config_reg->CONFIG_PINMMR19 = pinMuxReg->PINMMR19; + config_reg->CONFIG_PINMMR20 = pinMuxReg->PINMMR20; + config_reg->CONFIG_PINMMR21 = pinMuxReg->PINMMR21; + config_reg->CONFIG_PINMMR22 = pinMuxReg->PINMMR22; + config_reg->CONFIG_PINMMR23 = pinMuxReg->PINMMR23; + config_reg->CONFIG_PINMMR24 = pinMuxReg->PINMMR24; + config_reg->CONFIG_PINMMR25 = pinMuxReg->PINMMR25; + config_reg->CONFIG_PINMMR26 = pinMuxReg->PINMMR26; + config_reg->CONFIG_PINMMR27 = pinMuxReg->PINMMR27; + config_reg->CONFIG_PINMMR28 = pinMuxReg->PINMMR28; + config_reg->CONFIG_PINMMR29 = pinMuxReg->PINMMR29; + config_reg->CONFIG_PINMMR30 = pinMuxReg->PINMMR30; + config_reg->CONFIG_PINMMR32 = pinMuxReg->PINMMR32; + config_reg->CONFIG_PINMMR33 = pinMuxReg->PINMMR33; + config_reg->CONFIG_PINMMR34 = pinMuxReg->PINMMR34; + config_reg->CONFIG_PINMMR35 = pinMuxReg->PINMMR35; + config_reg->CONFIG_PINMMR36 = pinMuxReg->PINMMR36; + config_reg->CONFIG_PINMMR37 = pinMuxReg->PINMMR37; + config_reg->CONFIG_PINMMR38 = pinMuxReg->PINMMR38; + config_reg->CONFIG_PINMMR39 = pinMuxReg->PINMMR39; + config_reg->CONFIG_PINMMR40 = pinMuxReg->PINMMR40; + config_reg->CONFIG_PINMMR41 = pinMuxReg->PINMMR41; + config_reg->CONFIG_PINMMR42 = pinMuxReg->PINMMR42; + config_reg->CONFIG_PINMMR43 = pinMuxReg->PINMMR43; + config_reg->CONFIG_PINMMR44 = pinMuxReg->PINMMR44; + config_reg->CONFIG_PINMMR45 = pinMuxReg->PINMMR45; + config_reg->CONFIG_PINMMR46 = pinMuxReg->PINMMR46; + config_reg->CONFIG_PINMMR47 = pinMuxReg->PINMMR47; + } +} + +/* USER CODE BEGIN (8) */ +/* USER CODE END */ Index: firmware/source/pom.c =================================================================== diff -u --- firmware/source/pom.c (revision 0) +++ firmware/source/pom.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,374 @@ +/** @file pom.c +* @brief POM Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "pom.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +REGION_CONFIG_t regn_conf_st[32] = {{0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}, + {0x00000000U,0x00000000U,(uint32)SIZE_64BYTES}}; + + + +/** @fn void POM_Region_Config(REGION_CONFIG_t *Reg_Config_Ptr,REGION_t Region_Num) +* @brief set the prog start address,overlay address,and size in the respective register for specified region number. +* @param[in] Reg_Config_Ptr - this will have the prog start address and overlay addresses and size which have to be set in the registers +* @param[in] Region_Num - Region number is used to access registers(for the specified region number) +* +*/ +/* SourceId : POM_SourceId_001 */ +/* DesignId : POM_DesignId_001 */ +/* Requirements : HL_SR340 */ +void POM_Region_Config(REGION_CONFIG_t *Reg_Config_Ptr,REGION_t Region_Num) +{ + pomREG->POMRGNCONF_ST[Region_Num].POMPROGSTART = Reg_Config_Ptr->Prog_Reg_Sta_Addr; + pomREG->POMRGNCONF_ST[Region_Num].POMOVLSTART = Reg_Config_Ptr->Ovly_Reg_Sta_Addr; + pomREG->POMRGNCONF_ST[Region_Num].POMREGSIZE = Reg_Config_Ptr->Reg_Size; +} + + +/** @fn void POM_Reset(void) +* @brief Reset POM module. +*/ +/* SourceId : POM_SourceId_002 */ +/* DesignId : POM_DesignId_002 */ +/* Requirements : HL_SR341 */ +void POM_Reset(void) +{ + pomREG->POMGLBCTRL = 0x5U; +} + + +/** @fn void void POM_Init(void) +* @brief Initializes the POM driver +* +* This function initializes the POM driver single function handles all the regions,timeouts are also handled. +* POM_Enable() function must be called after POM_Init() function. +*/ +/* SourceId : POM_SourceId_003 */ +/* DesignId : POM_DesignId_003 */ +/* Requirements : HL_SR342 */ +void POM_Init(void) +{ + uint32 region; + pomREG->POMGLBCTRL = INTERNAL_RAM | 0x00000005U; + for(region = 0U;region<1U;region++) + { + POM_Region_Config(®n_conf_st[region],region); + } +} + + +/** @fn void POM_Enable(void) +* @brief Enable POM module. +*/ +/* SourceId : POM_SourceId_004 */ +/* DesignId : POM_DesignId_004 */ +/* Requirements : HL_SR343 */ +void POM_Enable(void) +{ + pomREG->POMGLBCTRL = ((pomREG->POMGLBCTRL & 0xFFFFFFF0U) | (uint32)0x0000000AU); +} + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/** @fn void pomGetConfigValue(pom_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the POM configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : POM_SourceId_005 */ +/* DesignId : POM_DesignId_005 */ +/* Requirements : HL_SR344 */ +void pomGetConfigValue(pom_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_POMGLBCTRL = POM_POMGLBCTRL_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART0 = POM_POMPROGSTART0_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART0 = POM_POMOVLSTART0_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE0 = POM_POMREGSIZE0_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART1 = POM_POMPROGSTART1_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART1 = POM_POMOVLSTART1_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE1 = POM_POMREGSIZE1_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART2 = POM_POMPROGSTART2_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART2 = POM_POMOVLSTART2_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE2 = POM_POMREGSIZE2_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART3 = POM_POMPROGSTART3_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART3 = POM_POMOVLSTART3_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE3 = POM_POMREGSIZE3_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART4 = POM_POMPROGSTART4_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART4 = POM_POMOVLSTART4_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE4 = POM_POMREGSIZE4_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART5 = POM_POMPROGSTART5_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART5 = POM_POMOVLSTART5_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE5 = POM_POMREGSIZE5_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART6 = POM_POMPROGSTART6_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART6 = POM_POMOVLSTART6_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE6 = POM_POMREGSIZE6_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART7 = POM_POMPROGSTART7_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART7 = POM_POMOVLSTART7_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE7 = POM_POMREGSIZE7_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART8 = POM_POMPROGSTART8_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART8 = POM_POMOVLSTART8_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE8 = POM_POMREGSIZE8_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART9 = POM_POMPROGSTART9_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART9 = POM_POMOVLSTART9_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE9 = POM_POMREGSIZE9_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART10 = POM_POMPROGSTART10_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART10 = POM_POMOVLSTART10_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE10 = POM_POMREGSIZE10_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART11 = POM_POMPROGSTART11_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART11 = POM_POMOVLSTART11_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE11 = POM_POMREGSIZE11_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART12 = POM_POMPROGSTART12_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART12 = POM_POMOVLSTART12_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE12 = POM_POMREGSIZE12_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART13 = POM_POMPROGSTART13_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART13 = POM_POMOVLSTART13_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE13 = POM_POMREGSIZE13_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART14 = POM_POMPROGSTART14_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART14 = POM_POMOVLSTART14_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE14 = POM_POMREGSIZE14_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART15 = POM_POMPROGSTART15_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART15 = POM_POMOVLSTART15_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE15 = POM_POMREGSIZE15_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART16 = POM_POMPROGSTART16_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART16 = POM_POMOVLSTART16_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE16 = POM_POMREGSIZE16_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART17 = POM_POMPROGSTART17_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART17 = POM_POMOVLSTART17_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE17 = POM_POMREGSIZE17_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART18 = POM_POMPROGSTART18_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART18 = POM_POMOVLSTART18_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE18 = POM_POMREGSIZE18_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART19 = POM_POMPROGSTART19_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART19 = POM_POMOVLSTART19_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE19 = POM_POMREGSIZE19_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART20 = POM_POMPROGSTART20_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART20 = POM_POMOVLSTART20_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE20 = POM_POMREGSIZE20_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART21 = POM_POMPROGSTART21_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART21 = POM_POMOVLSTART21_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE21 = POM_POMREGSIZE21_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART22 = POM_POMPROGSTART22_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART22 = POM_POMOVLSTART22_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE22 = POM_POMREGSIZE22_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART23 = POM_POMPROGSTART23_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART23 = POM_POMOVLSTART23_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE23 = POM_POMREGSIZE23_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART24 = POM_POMPROGSTART24_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART24 = POM_POMOVLSTART24_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE24 = POM_POMREGSIZE24_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART25 = POM_POMPROGSTART25_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART25 = POM_POMOVLSTART25_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE25 = POM_POMREGSIZE25_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART26 = POM_POMPROGSTART26_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART26 = POM_POMOVLSTART26_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE26 = POM_POMREGSIZE26_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART27 = POM_POMPROGSTART27_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART27 = POM_POMOVLSTART27_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE27 = POM_POMREGSIZE27_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART28 = POM_POMPROGSTART28_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART28 = POM_POMOVLSTART28_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE28 = POM_POMREGSIZE28_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART29 = POM_POMPROGSTART29_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART29 = POM_POMOVLSTART29_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE29 = POM_POMREGSIZE29_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART30 = POM_POMPROGSTART30_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART30 = POM_POMOVLSTART30_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE30 = POM_POMREGSIZE30_CONFIGVALUE; + config_reg->CONFIG_POMPROGSTART31 = POM_POMPROGSTART31_CONFIGVALUE; + config_reg->CONFIG_POMOVLSTART31 = POM_POMOVLSTART31_CONFIGVALUE; + config_reg->CONFIG_POMREGSIZE31 = POM_POMREGSIZE31_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_POMGLBCTRL = pomREG->POMGLBCTRL; + config_reg->CONFIG_POMPROGSTART0 = pomREG->POMRGNCONF_ST[0].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART0 = pomREG->POMRGNCONF_ST[0].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE0 = pomREG->POMRGNCONF_ST[0].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART1 = pomREG->POMRGNCONF_ST[1].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART1 = pomREG->POMRGNCONF_ST[1].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE1 = pomREG->POMRGNCONF_ST[1].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART2 = pomREG->POMRGNCONF_ST[2].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART2 = pomREG->POMRGNCONF_ST[2].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE2 = pomREG->POMRGNCONF_ST[2].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART3 = pomREG->POMRGNCONF_ST[3].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART3 = pomREG->POMRGNCONF_ST[3].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE3 = pomREG->POMRGNCONF_ST[3].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART4 = pomREG->POMRGNCONF_ST[4].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART4 = pomREG->POMRGNCONF_ST[4].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE4 = pomREG->POMRGNCONF_ST[4].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART5 = pomREG->POMRGNCONF_ST[5].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART5 = pomREG->POMRGNCONF_ST[5].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE5 = pomREG->POMRGNCONF_ST[5].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART6 = pomREG->POMRGNCONF_ST[6].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART6 = pomREG->POMRGNCONF_ST[6].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE6 = pomREG->POMRGNCONF_ST[6].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART7 = pomREG->POMRGNCONF_ST[7].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART7 = pomREG->POMRGNCONF_ST[7].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE7 = pomREG->POMRGNCONF_ST[7].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART8 = pomREG->POMRGNCONF_ST[8].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART8 = pomREG->POMRGNCONF_ST[8].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE8 = pomREG->POMRGNCONF_ST[8].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART9 = pomREG->POMRGNCONF_ST[9].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART9 = pomREG->POMRGNCONF_ST[9].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE9 = pomREG->POMRGNCONF_ST[9].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART10 = pomREG->POMRGNCONF_ST[10].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART10 = pomREG->POMRGNCONF_ST[10].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE10 = pomREG->POMRGNCONF_ST[10].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART11 = pomREG->POMRGNCONF_ST[11].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART11 = pomREG->POMRGNCONF_ST[11].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE11 = pomREG->POMRGNCONF_ST[11].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART12 = pomREG->POMRGNCONF_ST[12].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART12 = pomREG->POMRGNCONF_ST[12].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE12 = pomREG->POMRGNCONF_ST[12].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART13 = pomREG->POMRGNCONF_ST[13].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART13 = pomREG->POMRGNCONF_ST[13].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE13 = pomREG->POMRGNCONF_ST[13].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART14 = pomREG->POMRGNCONF_ST[14].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART14 = pomREG->POMRGNCONF_ST[14].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE14 = pomREG->POMRGNCONF_ST[14].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART15 = pomREG->POMRGNCONF_ST[15].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART15 = pomREG->POMRGNCONF_ST[15].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE15 = pomREG->POMRGNCONF_ST[15].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART16 = pomREG->POMRGNCONF_ST[16].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART16 = pomREG->POMRGNCONF_ST[16].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE16 = pomREG->POMRGNCONF_ST[16].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART17 = pomREG->POMRGNCONF_ST[17].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART17 = pomREG->POMRGNCONF_ST[17].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE17 = pomREG->POMRGNCONF_ST[17].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART18 = pomREG->POMRGNCONF_ST[18].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART18 = pomREG->POMRGNCONF_ST[18].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE18 = pomREG->POMRGNCONF_ST[18].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART19 = pomREG->POMRGNCONF_ST[19].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART19 = pomREG->POMRGNCONF_ST[19].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE19 = pomREG->POMRGNCONF_ST[19].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART20 = pomREG->POMRGNCONF_ST[20].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART20 = pomREG->POMRGNCONF_ST[20].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE20 = pomREG->POMRGNCONF_ST[20].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART21 = pomREG->POMRGNCONF_ST[20].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART21 = pomREG->POMRGNCONF_ST[21].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE21 = pomREG->POMRGNCONF_ST[21].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART22 = pomREG->POMRGNCONF_ST[21].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART22 = pomREG->POMRGNCONF_ST[22].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE22 = pomREG->POMRGNCONF_ST[22].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART23 = pomREG->POMRGNCONF_ST[22].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART23 = pomREG->POMRGNCONF_ST[23].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE23 = pomREG->POMRGNCONF_ST[23].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART24 = pomREG->POMRGNCONF_ST[23].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART24 = pomREG->POMRGNCONF_ST[24].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE24 = pomREG->POMRGNCONF_ST[24].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART25 = pomREG->POMRGNCONF_ST[24].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART25 = pomREG->POMRGNCONF_ST[25].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE25 = pomREG->POMRGNCONF_ST[25].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART26 = pomREG->POMRGNCONF_ST[25].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART26 = pomREG->POMRGNCONF_ST[26].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE26 = pomREG->POMRGNCONF_ST[26].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART27 = pomREG->POMRGNCONF_ST[26].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART27 = pomREG->POMRGNCONF_ST[27].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE27 = pomREG->POMRGNCONF_ST[27].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART28 = pomREG->POMRGNCONF_ST[27].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART28 = pomREG->POMRGNCONF_ST[28].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE28 = pomREG->POMRGNCONF_ST[28].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART29 = pomREG->POMRGNCONF_ST[28].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART29 = pomREG->POMRGNCONF_ST[29].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE29 = pomREG->POMRGNCONF_ST[29].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART30 = pomREG->POMRGNCONF_ST[30].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART30 = pomREG->POMRGNCONF_ST[30].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE30 = pomREG->POMRGNCONF_ST[30].POMREGSIZE; + config_reg->CONFIG_POMPROGSTART31 = pomREG->POMRGNCONF_ST[31].POMPROGSTART; + config_reg->CONFIG_POMOVLSTART31 = pomREG->POMRGNCONF_ST[31].POMOVLSTART; + config_reg->CONFIG_POMREGSIZE31 = pomREG->POMRGNCONF_ST[31].POMREGSIZE; + + } +} + + Index: firmware/source/rti.c =================================================================== diff -u --- firmware/source/rti.c (revision 0) +++ firmware/source/rti.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,852 @@ +/** @file rti.c +* @brief RTI Driver Source File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - API Functions +* - Interrupt Handlers +* . +* which are relevant for the RTI driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Include Files */ + +#include "rti.h" +#include "sys_vim.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +/** @fn void rtiInit(void) +* @brief Initializes RTI Driver +* +* This function initializes the RTI driver. +* +*/ + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/* SourceId : RTI_SourceId_001 */ +/* DesignId : RTI_DesignId_001 */ +/* Requirements : HL_SR76 */ +void rtiInit(void) +{ +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + /** @b Initialize @b RTI1: */ + + /** - Setup NTU source, debug options and disable both counter blocks */ + rtiREG1->GCTRL = (uint32)((uint32)0x0U << 16U) | 0x00000000U; + + /** - Setup timebase for free running counter 0 */ + rtiREG1->TBCTRL = 0x00000000U; + + /** - Enable/Disable capture event sources for both counter blocks */ + rtiREG1->CAPCTRL = 0U | 0U; + + /** - Setup input source compare 0-3 */ + rtiREG1->COMPCTRL = 0x00001000U | 0x00000100U | 0x00000000U | 0x00000000U; + + /** - Reset up counter 0 */ + rtiREG1->CNT[0U].UCx = 0x00000000U; + + /** - Reset free running counter 0 */ + rtiREG1->CNT[0U].FRCx = 0x00000000U; + + /** - Setup up counter 0 compare value + * - 0x00000000: Divide by 2^32 + * - 0x00000001-0xFFFFFFFF: Divide by (CPUC0 + 1) + */ + rtiREG1->CNT[0U].CPUCx = 10U; + + /** - Reset up counter 1 */ + rtiREG1->CNT[1U].UCx = 0x00000000U; + + /** - Reset free running counter 1 */ + rtiREG1->CNT[1U].FRCx = 0x00000000U; + + /** - Setup up counter 1 compare value + * - 0x00000000: Divide by 2^32 + * - 0x00000001-0xFFFFFFFF: Divide by (CPUC1 + 1) + */ + rtiREG1->CNT[1U].CPUCx = 10U; + + /** - Setup compare 0 value. This value is compared with selected free running counter. */ + rtiREG1->CMP[0U].COMPx = 10000U; + + /** - Setup update compare 0 value. This value is added to the compare 0 value on each compare match. */ + rtiREG1->CMP[0U].UDCPx = 10000U; + + /** - Setup compare 1 value. This value is compared with selected free running counter. */ + rtiREG1->CMP[1U].COMPx = 50000U; + + /** - Setup update compare 1 value. This value is added to the compare 1 value on each compare match. */ + rtiREG1->CMP[1U].UDCPx = 50000U; + + /** - Setup compare 2 value. This value is compared with selected free running counter. */ + rtiREG1->CMP[2U].COMPx = 80000U; + + /** - Setup update compare 2 value. This value is added to the compare 2 value on each compare match. */ + rtiREG1->CMP[2U].UDCPx = 80000U; + + /** - Setup compare 3 value. This value is compared with selected free running counter. */ + rtiREG1->CMP[3U].COMPx = 100000U; + + /** - Setup update compare 3 value. This value is added to the compare 3 value on each compare match. */ + rtiREG1->CMP[3U].UDCPx = 100000U; + + /** - Clear all pending interrupts */ + rtiREG1->INTFLAG = 0x0007000FU; + + /** - Disable all interrupts */ + rtiREG1->CLEARINTENA = 0x00070F0FU; + + /** @note This function has to be called before the driver can be used.\n + * This function has to be executed in privileged mode.\n + * This function does not start the counters. + */ + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + + +/** @fn void rtiStartCounter(uint32 counter) +* @brief Starts RTI Counter block +* @param[in] counter Select counter block to be started: +* - rtiCOUNTER_BLOCK0: RTI counter block 0 will be started +* - rtiCOUNTER_BLOCK1: RTI counter block 1 will be started +* +* This function starts selected counter block of the selected RTI module. +*/ + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ +/* SourceId : RTI_SourceId_002 */ +/* DesignId : RTI_DesignId_002 */ +/* Requirements : HL_SR77 */ +void rtiStartCounter(uint32 counter) +{ +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + + rtiREG1->GCTRL |= ((uint32)1U << (counter & 3U)); + + /** @note The function rtiInit has to be called before this function can be used.\n + * This function has to be executed in privileged mode. + */ + +/* USER CODE BEGIN (8) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (9) */ +/* USER CODE END */ + + +/** @fn void rtiStopCounter(uint32 counter) +* @brief Stops RTI Counter block +* @param[in] counter Select counter to be stopped: +* - rtiCOUNTER_BLOCK0: RTI counter block 0 will be stopped +* - rtiCOUNTER_BLOCK1: RTI counter block 1 will be stopped +* +* This function stops selected counter block of the selected RTI module. +*/ + +/* USER CODE BEGIN (10) */ +/* USER CODE END */ +/* SourceId : RTI_SourceId_003 */ +/* DesignId : RTI_DesignId_003 */ +/* Requirements : HL_SR78 */ +void rtiStopCounter(uint32 counter) +{ +/* USER CODE BEGIN (11) */ +/* USER CODE END */ + + rtiREG1->GCTRL &= ~(uint32)((uint32)1U << (counter & 3U)); + + /** @note The function rtiInit has to be called before this function can be used.\n + * This function has to be executed in privileged mode. + */ + +/* USER CODE BEGIN (12) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (13) */ +/* USER CODE END */ + + +/** @fn uint32 rtiResetCounter(uint32 counter) +* @brief Reset RTI Counter block +* @param[in] counter Select counter block to be reset: +* - rtiCOUNTER_BLOCK0: RTI counter block 0 will be reset +* - rtiCOUNTER_BLOCK1: RTI counter block 1 will be reset +* @return The function will return: +* - 0: When the counter reset wasn't successful +* - 1: When the counter reset was successful +* +* This function resets selected counter block of the selected RTI module. +*/ + +/* USER CODE BEGIN (14) */ +/* USER CODE END */ +/* SourceId : RTI_SourceId_004 */ +/* DesignId : RTI_DesignId_004 */ +/* Requirements : HL_SR79 */ +uint32 rtiResetCounter(uint32 counter) +{ + uint32 success = 0U; + +/* USER CODE BEGIN (15) */ +/* USER CODE END */ + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + if ((rtiREG1->GCTRL & (uint32)((uint32)1U << (counter & 3U))) == 0U) + { + rtiREG1->CNT[counter].UCx = 0x00000000U; + rtiREG1->CNT[counter].FRCx = 0x00000000U; + + success = 1U; + } + + /** @note The function rtiInit has to be called before this function can be used.\n + * This function has to be executed in privileged mode.\n + * The selected counter block has to be stopped before it can reset. + */ + +/* USER CODE BEGIN (16) */ +/* USER CODE END */ + + return success; +} + +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + + +/** @fn void rtiSetPeriod(uint32 compare, uint32 period) +* @brief Set new period of RTI compare +* @param[in] compare Select compare to change period: +* - rtiCOMPARE0: RTI compare 0 will change the period +* - rtiCOMPARE1: RTI compare 1 will change the period +* - rtiCOMPARE2: RTI compare 2 will change the period +* - rtiCOMPARE3: RTI compare 3 will change the period +* @param[in] period new period in [ticks - 1]: +* - 0x00000000: Divide by 1 +* - n: Divide by n + 1 +* +* This function will change the period of the selected compare. +*/ + +/* USER CODE BEGIN (18) */ +/* USER CODE END */ +/* SourceId : RTI_SourceId_005 */ +/* DesignId : RTI_DesignId_005 */ +/* Requirements : HL_SR80 */ +void rtiSetPeriod(uint32 compare, uint32 period) +{ +/* USER CODE BEGIN (19) */ +/* USER CODE END */ + + rtiREG1->CMP[compare].UDCPx = period; + + /** @note The function rtiInit has to be called before this function can be used.\n + * This function has to be executed in privileged mode.\n + * When the corresponding counter block is not stopped,\n + * the period will change on the next compare match of the old period. + */ + +/* USER CODE BEGIN (20) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (21) */ +/* USER CODE END */ + + +/** @fn uint32 rtiGetPeriod(uint32 compare) +* @brief Get current period of RTI compare +* @param[in] compare Select compare to return the current period: +* - rtiCOMPARE0: RTI compare 0 will return the current period +* - rtiCOMPARE1: RTI compare 1 will return the current period +* - rtiCOMPARE2: RTI compare 2 will return the current period +* - rtiCOMPARE3: RTI compare 3 will return the current period +* @return Current period of selected compare in [ticks - 1]: +* - 0x00000000: Divide by 1 +* - n: Divide by n + 1 +* +* This function will return the period of the selected compare. +*/ + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ +/* SourceId : RTI_SourceId_006 */ +/* DesignId : RTI_DesignId_006 */ +/* Requirements : HL_SR81 */ +uint32 rtiGetPeriod(uint32 compare) +{ + uint32 period; + +/* USER CODE BEGIN (23) */ +/* USER CODE END */ + + period = rtiREG1->CMP[compare].UDCPx; + + /** @note The function rtiInit has to be called before this function can be used. + */ + +/* USER CODE BEGIN (24) */ +/* USER CODE END */ + + return period; +} + +/* USER CODE BEGIN (25) */ +/* USER CODE END */ + + +/** @fn uint32 rtiGetCurrentTick(uint32 compare) +* @brief Get current tick of RTI compare +* @param[in] compare Select compare to return the current tick: +* - rtiCOMPARE0: RTI compare 0 will return the current tick +* - rtiCOMPARE1: RTI compare 1 will return the current tick +* - rtiCOMPARE2: RTI compare 2 will return the current tick +* - rtiCOMPARE3: RTI compare 3 will return the current tick +* @return Current tick of selected compare +* +* This function will return the current tick of the selected compare. +*/ + +/* USER CODE BEGIN (26) */ +/* USER CODE END */ +/* SourceId : RTI_SourceId_007 */ +/* DesignId : RTI_DesignId_007 */ +/* Requirements : HL_SR82 */ +uint32 rtiGetCurrentTick(uint32 compare) +{ + uint32 tick; + uint32 counter = ((rtiREG1->COMPCTRL & (uint32)((uint32)1U << (compare << 2U))) != 0U ) ? 1U : 0U; + uint32 RTI_CNT_FRCx = rtiREG1->CNT[counter].FRCx; + uint32 RTI_CMP_COMPx = rtiREG1->CMP[compare].COMPx; + uint32 RTI_CMP_UDCPx = rtiREG1->CMP[compare].UDCPx; + +/* USER CODE BEGIN (27) */ +/* USER CODE END */ + + tick = RTI_CNT_FRCx - (RTI_CMP_COMPx - RTI_CMP_UDCPx); + + /** @note The function rtiInit has to be called before this function can be used. + */ + +/* USER CODE BEGIN (28) */ +/* USER CODE END */ + + return tick; +} + +/* USER CODE BEGIN (29) */ +/* USER CODE END */ + +/** @fn void dwdInit(uint16 dwdPreload) +* @brief Initialize DWD Expiration Period +* @param[in] dwdPreload DWD Preload value for expiration time. +* - Texp = (dwdPreload +1) / RTICLK +* - n: Divide by n + 1 +* +* This function can be called to set the DWD expiration +* +*/ +/* SourceId : RTI_SourceId_008 */ +/* DesignId : RTI_DesignId_010 */ +/* Requirements : HL_SR85 */ +void dwdInit(uint16 dwdPreload) +{ +/* USER CODE BEGIN (30) */ +/* USER CODE END */ + + /* Clear the violations if already present */ + rtiREG1->WDSTATUS = 0xFFU; + + rtiREG1->DWDPRLD = dwdPreload; + +/* USER CODE BEGIN (31) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (32) */ +/* USER CODE END */ + +/** @fn void dwwdInit(dwwdReaction_t Reaction, uint16 dwdPreload, dwwdWindowSize_t Window_Size) +* @brief Initialize DWD Expiration Period +* @param[in] Reaction DWWD reaction if the watchdog is serviced outside the time window. +* - Generate_Reset +* - Generate_NMI +* @param[in] dwdPreload DWWD Preload value for the watchdog expiration time. +* - Texp = (dwdPreload +1) / RTICLK +* - n: Divide by n + 1 +* @param[in] Window_Size DWWD time window size +* - Size_100_Percent +* - Size_50_Percent +* - Size_25_Percent +* - Size_12_5_Percent +* - Size_6_25_Percent +* - Size_3_125_Percent +* +* This function can be called to set the DWD expiration +* +*/ +/* SourceId : RTI_SourceId_009 */ +/* DesignId : RTI_DesignId_011 */ +/* Requirements : HL_SR86 */ +void dwwdInit(dwwdReaction_t Reaction, uint16 dwdPreload, dwwdWindowSize_t Window_Size) +{ +/* USER CODE BEGIN (33) */ +/* USER CODE END */ + + /* Clear the violations if already present */ + rtiREG1->WDSTATUS = 0xFFU; + + rtiREG1->WWDSIZECTRL = (uint32) Window_Size; + rtiREG1->DWDPRLD = (uint32) dwdPreload; + rtiREG1->WWDRXNCTRL = (uint32) Reaction; + +/* USER CODE BEGIN (34) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (35) */ +/* USER CODE END */ + +/** @fn uint32 dwwdGetCurrentDownCounter(void) +* @brief Get the current DWWD Down Counter +* @return Current tick of selected compare +* +* This function will get the current DWWD down counter value. +* +*/ +/* SourceId : RTI_SourceId_010 */ +/* DesignId : RTI_DesignId_012 */ +/* Requirements : HL_SR87 */ +uint32 dwwdGetCurrentDownCounter(void) +{ +/* USER CODE BEGIN (36) */ +/* USER CODE END */ + + return (rtiREG1->DWDCNTR); + +/* USER CODE BEGIN (37) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (38) */ +/* USER CODE END */ + +/** @fn void dwdCounterEnable(void) +* @brief Enable DWD +* +* This function will Enable the DWD counter. +* +*/ +/* SourceId : RTI_SourceId_011 */ +/* DesignId : RTI_DesignId_013 */ +/* Requirements : HL_SR88 */ +void dwdCounterEnable(void) +{ +/* USER CODE BEGIN (39) */ +/* USER CODE END */ + + rtiREG1->DWDCTRL = 0xA98559DAU; + +/* USER CODE BEGIN (40) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (41) */ +/* USER CODE END */ + +/* USER CODE BEGIN (42) */ +/* USER CODE END */ +/* USER CODE BEGIN (43) */ +/* USER CODE END */ +/* USER CODE BEGIN (44) */ +/* USER CODE END */ +/** @fn void dwdSetPreload(uint16 dwdPreload) +* @brief Initialize DWD Expiration Period +* @param[in] dwdPreload DWD Preload value for the watchdog expiration time. +* - Texp = (dwdPreload +1) / RTICLK +* - n: Divide by n + 1 +* +* This function can be called to set the Preload value for the watchdog expiration time. +* +*/ +/* SourceId : RTI_SourceId_012 */ +/* DesignId : RTI_DesignId_014 */ +/* Requirements : HL_SR85 */ +void dwdSetPreload(uint16 dwdPreload) +{ +/* USER CODE BEGIN (45) */ +/* USER CODE END */ + rtiREG1->DWDPRLD = dwdPreload; +/* USER CODE BEGIN (46) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (47) */ +/* USER CODE END */ + +/** @fn void dwdReset(void) +* @brief Reset Digital Watchdog +* +* This function can be called to reset Digital Watchdog. +* +*/ +/* SourceId : RTI_SourceId_013 */ +/* DesignId : RTI_DesignId_015 */ +/* Requirements : HL_SR89 */ +void dwdReset(void) +{ +/* USER CODE BEGIN (48) */ +/* USER CODE END */ + rtiREG1->WDKEY = 0x0000E51AU; + rtiREG1->WDKEY = 0x0000A35CU; +/* USER CODE BEGIN (49) */ +/* USER CODE END */ +} + +/** @fn void dwdGenerateSysReset(void) +* @brief Generate System Reset through DWD +* +* This function can be called to generate system reset using DWD. +* +*/ +/* SourceId : RTI_SourceId_014 */ +/* DesignId : RTI_DesignId_016 */ +/* Requirements : HL_SR90 */ +void dwdGenerateSysReset(void) +{ +/* USER CODE BEGIN (50) */ +/* USER CODE END */ + rtiREG1->WDKEY = 0x0000E51AU; + rtiREG1->WDKEY = 0x00002345U; +/* USER CODE BEGIN (51) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (52) */ +/* USER CODE END */ + +/** @fn boolean IsdwdKeySequenceCorrect(void) +* @brief Check if DWD Key sequence correct. +* @return The function will return: +* - TRUE: When the DWD key sequence is written correctly. +* - FALSE: When the DWD key sequence is written incorrectly / not written. +* +* This function will get status of the DWD Key sequence. +* +*/ +/* SourceId : RTI_SourceId_015 */ +/* DesignId : RTI_DesignId_017 */ +/* Requirements : HL_SR91 */ +boolean IsdwdKeySequenceCorrect(void) +{ + boolean Status; + +/* USER CODE BEGIN (53) */ +/* USER CODE END */ + + if((rtiREG1->WDSTATUS & 0x4U) == 0x4U) + { + Status = FALSE; + } + else + { + Status = TRUE; + } + +/* USER CODE BEGIN (54) */ +/* USER CODE END */ + + return Status; +} + +/* USER CODE BEGIN (55) */ +/* USER CODE END */ + +/** @fn dwdResetStatus_t dwdGetStatus(void) +* @brief Check if Reset is generated due to DWD. +* @return The function will return: +* - Reset_Generated: When the Reset is generated due to DWD. +* - No_Reset_Generated: No Reset is generated due to DWD. +* +* This function will get dwd Reset status. +* +*/ +/* SourceId : RTI_SourceId_016 */ +/* DesignId : RTI_DesignId_018 */ +/* Requirements : HL_SR92 */ +dwdResetStatus_t dwdGetStatus(void) +{ +/* USER CODE BEGIN (56) */ +/* USER CODE END */ + dwdResetStatus_t Reset_Status; + if((rtiREG1->WDSTATUS & 0x2U) == 0x2U) + { + Reset_Status = Reset_Generated; + } + else + { + Reset_Status = No_Reset_Generated; + } + +/* USER CODE BEGIN (57) */ +/* USER CODE END */ + return Reset_Status; +} + +/* USER CODE BEGIN (58) */ +/* USER CODE END */ + +/** @fn void dwdClearFlag(void) +* @brief Clear the DWD violation flag. +* +* This function will clear dwd status register. +* +*/ +/* SourceId : RTI_SourceId_017 */ +/* DesignId : RTI_DesignId_020 */ +/* Requirements : HL_SR94 */ +void dwdClearFlag(void) +{ +/* USER CODE BEGIN (59) */ +/* USER CODE END */ + + rtiREG1->WDSTATUS = 0xFFU; + +/* USER CODE BEGIN (60) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (61) */ +/* USER CODE END */ + +/** @fn dwdViolation_t dwdGetViolationStatus(void) +* @brief Check the status of the DWD or DWWD violation happened. +* @return The function will return one of following violations occured: +* - NoTime_Violation +* - Key_Seq_Violation +* - Time_Window_Violation +* - EndTime_Window_Violation +* - StartTime_Window_Violation +* +* This function will get status of the DWD or DWWD violation status. +* +*/ +/* SourceId : RTI_SourceId_018 */ +/* DesignId : RTI_DesignId_019 */ +/* Requirements : HL_SR93 */ +dwdViolation_t dwdGetViolationStatus(void) +{ +/* USER CODE BEGIN (62) */ +/* USER CODE END */ + dwdViolation_t Violation_Status; + + if ((rtiREG1->WDSTATUS & 0x04U) == 0x04U) + { + Violation_Status = Key_Seq_Violation; + } + else if((rtiREG1->WDSTATUS & 0x8U) == 0x8U) + { + Violation_Status = StartTime_Window_Violation; + } + else if ((rtiREG1->WDSTATUS & 0x10U) == 0x10U) + { + Violation_Status = EndTime_Window_Violation; + } + else if ((rtiREG1->WDSTATUS & 0x20U) == 0x20U) + { + Violation_Status = Time_Window_Violation; + } + else + { + Violation_Status = NoTime_Violation; + } + +/* USER CODE BEGIN (63) */ +/* USER CODE END */ + + return Violation_Status; +} + +/* USER CODE BEGIN (64) */ +/* USER CODE END */ + +/** @fn void rtiEnableNotification(uint32 notification) +* @brief Enable notification of RTI module +* @param[in] notification Select notification of RTI module: +* - rtiNOTIFICATION_COMPARE0: RTI compare 0 notification +* - rtiNOTIFICATION_COMPARE1: RTI compare 1 notification +* - rtiNOTIFICATION_COMPARE2: RTI compare 2 notification +* - rtiNOTIFICATION_COMPARE3: RTI compare 3 notification +* - rtiNOTIFICATION_TIMEBASE: RTI Timebase notification +* - rtiNOTIFICATION_COUNTER0: RTI counter 0 overflow notification +* - rtiNOTIFICATION_COUNTER1: RTI counter 1 overflow notification +* +* This function will enable the selected notification of a RTI module. +* It is possible to enable multiple notifications masked. +*/ + +/* USER CODE BEGIN (65) */ +/* USER CODE END */ +/* SourceId : RTI_SourceId_019 */ +/* DesignId : RTI_DesignId_008 */ +/* Requirements : HL_SR83 */ +void rtiEnableNotification(uint32 notification) +{ +/* USER CODE BEGIN (66) */ +/* USER CODE END */ + + rtiREG1->INTFLAG = notification; + rtiREG1->SETINTENA = notification; + + /** @note The function rtiInit has to be called before this function can be used.\n + * This function has to be executed in privileged mode. + */ + +/* USER CODE BEGIN (67) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (68) */ +/* USER CODE END */ + +/** @fn void rtiDisableNotification(uint32 notification) +* @brief Disable notification of RTI module +* @param[in] notification Select notification of RTI module: +* - rtiNOTIFICATION_COMPARE0: RTI compare 0 notification +* - rtiNOTIFICATION_COMPARE1: RTI compare 1 notification +* - rtiNOTIFICATION_COMPARE2: RTI compare 2 notification +* - rtiNOTIFICATION_COMPARE3: RTI compare 3 notification +* - rtiNOTIFICATION_TIMEBASE: RTI Timebase notification +* - rtiNOTIFICATION_COUNTER0: RTI counter 0 overflow notification +* - rtiNOTIFICATION_COUNTER1: RTI counter 1 overflow notification +* +* This function will disable the selected notification of a RTI module. +* It is possible to disable multiple notifications masked. +*/ + +/* USER CODE BEGIN (69) */ +/* USER CODE END */ +/* SourceId : RTI_SourceId_020 */ +/* DesignId : RTI_DesignId_009 */ +/* Requirements : HL_SR84 */ +void rtiDisableNotification(uint32 notification) +{ +/* USER CODE BEGIN (70) */ +/* USER CODE END */ + + rtiREG1->CLEARINTENA = notification; + + /** @note The function rtiInit has to be called before this function can be used.\n + * This function has to be executed in privileged mode. + */ + +/* USER CODE BEGIN (71) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (72) */ +/* USER CODE END */ + +/** @fn void rtiGetConfigValue(rti_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') of the configuration +* registers to the struct pointed by config_reg +* +*/ +/* SourceId : RTI_SourceId_021 */ +/* DesignId : RTI_DesignId_021 */ +/* Requirements : HL_SR97 */ +void rtiGetConfigValue(rti_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_GCTRL = RTI_GCTRL_CONFIGVALUE; + config_reg->CONFIG_TBCTRL = RTI_TBCTRL_CONFIGVALUE; + config_reg->CONFIG_CAPCTRL = RTI_CAPCTRL_CONFIGVALUE; + config_reg->CONFIG_COMPCTRL = RTI_COMPCTRL_CONFIGVALUE; + config_reg->CONFIG_UDCP0 = RTI_UDCP0_CONFIGVALUE; + config_reg->CONFIG_UDCP1 = RTI_UDCP1_CONFIGVALUE; + config_reg->CONFIG_UDCP2 = RTI_UDCP2_CONFIGVALUE; + config_reg->CONFIG_UDCP3 = RTI_UDCP3_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_GCTRL = rtiREG1->GCTRL; + config_reg->CONFIG_TBCTRL = rtiREG1->TBCTRL; + config_reg->CONFIG_CAPCTRL = rtiREG1->CAPCTRL; + config_reg->CONFIG_COMPCTRL = rtiREG1->COMPCTRL; + config_reg->CONFIG_UDCP0 = rtiREG1->CMP[0U].UDCPx; + config_reg->CONFIG_UDCP1 = rtiREG1->CMP[1U].UDCPx; + config_reg->CONFIG_UDCP2 = rtiREG1->CMP[2U].UDCPx; + config_reg->CONFIG_UDCP3 = rtiREG1->CMP[3U].UDCPx; + } +} + + + + + + + Index: firmware/source/sci.c =================================================================== diff -u --- firmware/source/sci.c (revision 0) +++ firmware/source/sci.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,668 @@ +/** @file sci.c +* @brief SCI Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "sci.h" +#include "sys_vim.h" +#include "math.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ +/** @struct g_sciTransfer +* @brief Interrupt mode globals +* +*/ +static volatile struct g_sciTransfer +{ + uint32 mode; /* Used to check for TX interrupt Enable */ + uint32 tx_length; /* Transmit data length in number of Bytes */ + uint32 rx_length; /* Receive data length in number of Bytes */ + uint8 * tx_data; /* Transmit data pointer */ + uint8 * rx_data; /* Receive data pointer */ +} g_sciTransfer_t[2U]; + + +/** @fn void sciInit(void) +* @brief Initializes the SCI Driver +* +* This function initializes the SCI module. +*/ +/* SourceId : SCI_SourceId_001 */ +/* DesignId : SCI_DesignId_001 */ +/* Requirements : HL_SR230 */ +void sciInit(void) +{ +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + /** @b initialize @b SCI */ + + /** - bring SCI out of reset */ + sciREG->GCR0 = 0U; + sciREG->GCR0 = 1U; + + /** - Disable all interrupts */ + sciREG->CLEARINT = 0xFFFFFFFFU; + sciREG->CLEARINTLVL = 0xFFFFFFFFU; + + /** - global control 1 */ + sciREG->GCR1 = (uint32)((uint32)1U << 25U) /* enable transmit */ + | (uint32)((uint32)1U << 24U) /* enable receive */ + | (uint32)((uint32)1U << 5U) /* internal clock (device has no clock pin) */ + | (uint32)((uint32)(2U-1U) << 4U) /* number of stop bits */ + | (uint32)((uint32)0U << 3U) /* even parity, otherwise odd */ + | (uint32)((uint32)0U << 2U) /* enable parity */ + | (uint32)((uint32)1U << 1U); /* asynchronous timing mode */ + + /** - set baudrate */ + sciREG->BRS = 715U; /* baudrate */ + + /** - transmission length */ + sciREG->FORMAT = 8U - 1U; /* length */ + + /** - set SCI pins functional mode */ + sciREG->PIO0 = (uint32)((uint32)1U << 2U) /* tx pin */ + | (uint32)((uint32)1U << 1U); /* rx pin */ + + /** - set SCI pins default output value */ + sciREG->PIO3 = (uint32)((uint32)0U << 2U) /* tx pin */ + | (uint32)((uint32)0U << 1U); /* rx pin */ + + /** - set SCI pins output direction */ + sciREG->PIO1 = (uint32)((uint32)0U << 2U) /* tx pin */ + | (uint32)((uint32)0U << 1U); /* rx pin */ + + /** - set SCI pins open drain enable */ + sciREG->PIO6 = (uint32)((uint32)0U << 2U) /* tx pin */ + | (uint32)((uint32)0U << 1U); /* rx pin */ + + /** - set SCI pins pullup/pulldown enable */ + sciREG->PIO7 = (uint32)((uint32)0U << 2U) /* tx pin */ + | (uint32)((uint32)0U << 1U); /* rx pin */ + + /** - set SCI pins pullup/pulldown select */ + sciREG->PIO8 = (uint32)((uint32)1U << 2U) /* tx pin */ + | (uint32)((uint32)1U << 1U); /* rx pin */ + + /** - set interrupt level */ + sciREG->SETINTLVL = (uint32)((uint32)0U << 26U) /* Framing error */ + | (uint32)((uint32)0U << 25U) /* Overrun error */ + | (uint32)((uint32)0U << 24U) /* Parity error */ + | (uint32)((uint32)0U << 9U) /* Receive */ + | (uint32)((uint32)0U << 8U) /* Transmit */ + | (uint32)((uint32)0U << 1U) /* Wakeup */ + | (uint32)((uint32)0U << 0U); /* Break detect */ + + /** - set interrupt enable */ + sciREG->SETINT = (uint32)((uint32)0U << 26U) /* Framing error */ + | (uint32)((uint32)0U << 25U) /* Overrun error */ + | (uint32)((uint32)0U << 24U) /* Parity error */ + | (uint32)((uint32)0U << 9U) /* Receive */ + | (uint32)((uint32)0U << 1U) /* Wakeup */ + | (uint32)((uint32)0U << 0U); /* Break detect */ + + /** - initialize global transfer variables */ + g_sciTransfer_t[0U].mode = (uint32)0U << 8U; + g_sciTransfer_t[0U].tx_length = 0U; + g_sciTransfer_t[0U].rx_length = 0U; + + /** - Finaly start SCI */ + sciREG->GCR1 |= 0x80U; + + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ +} + + +/** @fn void sciSetFunctional(sciBASE_t *sci, uint32 port) +* @brief Change functional behavior of pins at runtime. +* @param[in] sci - sci module base address +* @param[in] port - Value to write to PIO0 register +* +* Change the value of the PCPIO0 register at runtime, this allows to +* dynamically change the functionality of the SCI pins between functional +* and GIO mode. +*/ +/* SourceId : SCI_SourceId_002 */ +/* DesignId : SCI_DesignId_002 */ +/* Requirements : HL_SR231 */ +void sciSetFunctional(sciBASE_t *sci, uint32 port) +{ +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + + sci->PIO0 = port; + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ +} + + +/** @fn void sciSetBaudrate(sciBASE_t *sci, uint32 baud) +* @brief Change baudrate at runtime. +* @param[in] sci - sci module base address +* @param[in] baud - baudrate in Hz +* +* Change the SCI baudrate at runtime. +*/ +/* SourceId : SCI_SourceId_003 */ +/* DesignId : SCI_DesignId_003 */ +/* Requirements : HL_SR232 */ +void sciSetBaudrate(sciBASE_t *sci, uint32 baud) +{ + float64 vclk = 110.000 * 1000000.0; + uint32 f = ((sci->GCR1 & 2U) == 2U) ? 16U : 1U; + uint32 temp; + float64 temp2; +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + + /*SAFETYMCUSW 96 S MR:6.1 "Calculations including int and float cannot be avoided" */ + temp = (f*(baud)); + temp2 = ((vclk)/((float64)temp))-1U; + temp2 = floor(temp2 + 0.5); /* Rounding-off to the closest integer */ + sci->BRS = (uint32)((uint32)temp2 & 0x00FFFFFFU); + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ +} + + +/** @fn uint32 sciIsTxReady(sciBASE_t *sci) +* @brief Check if Tx buffer empty +* @param[in] sci - sci module base address +* +* @return The TX ready flag +* +* Checks to see if the Tx buffer ready flag is set, returns +* 0 is flags not set otherwise will return the Tx flag itself. +*/ +/* SourceId : SCI_SourceId_004 */ +/* DesignId : SCI_DesignId_004 */ +/* Requirements : HL_SR233 */ +uint32 sciIsTxReady(sciBASE_t *sci) +{ +/* USER CODE BEGIN (8) */ +/* USER CODE END */ + + return sci->FLR & (uint32)SCI_TX_INT; +} + + +/** @fn void sciSendByte(sciBASE_t *sci, uint8 byte) +* @brief Send Byte +* @param[in] sci - sci module base address +* @param[in] byte - byte to transfer +* +* Sends a single byte in polling mode, will wait in the +* routine until the transmit buffer is empty before sending +* the byte. Use sciIsTxReady to check for Tx buffer empty +* before calling sciSendByte to avoid waiting. +*/ +/* SourceId : SCI_SourceId_005 */ +/* DesignId : SCI_DesignId_005 */ +/* Requirements : HL_SR234 */ +void sciSendByte(sciBASE_t *sci, uint8 byte) +{ +/* USER CODE BEGIN (9) */ +/* USER CODE END */ + + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((sci->FLR & (uint32)SCI_TX_INT) == 0U) + { + } /* Wait */ + sci->TD = byte; + +/* USER CODE BEGIN (10) */ +/* USER CODE END */ +} + + +/** @fn void sciSend(sciBASE_t *sci, uint32 length, uint8 * data) +* @brief Send Data +* @param[in] sci - sci module base address +* @param[in] length - number of data words to transfer +* @param[in] data - pointer to data to send +* +* Send a block of data pointed to by 'data' and 'length' bytes +* long. If interrupts have been enabled the data is sent using +* interrupt mode, otherwise polling mode is used. In interrupt +* mode transmission of the first byte is started and the routine +* returns immediately, sciSend must not be called again until the +* transfer is complete, when the sciNotification callback will +* be called. In polling mode, sciSend will not return until +* the transfer is complete. +* +* @note if data word is less than 8 bits, then the data must be left +* aligned in the data byte. +*/ +/* SourceId : SCI_SourceId_006 */ +/* DesignId : SCI_DesignId_006 */ +/* Requirements : HL_SR235 */ +void sciSend(sciBASE_t *sci, uint32 length, uint8 * data) +{ + uint32 index = (sci == sciREG) ? 0U : 1U; + uint8 txdata; + +/* USER CODE BEGIN (11) */ +/* USER CODE END */ +/*SAFETYMCUSW 139 S MR:13.7 "Mode variable is configured in sciEnableNotification()" */ + if ((g_sciTransfer_t[index].mode & (uint32)SCI_TX_INT) != 0U) + { + /* we are in interrupt mode */ + + g_sciTransfer_t[index].tx_length = length; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + g_sciTransfer_t[index].tx_data = data; + + /* start transmit by sending first byte */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + txdata = *g_sciTransfer_t[index].tx_data; + sci->TD = (uint32)(txdata); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + g_sciTransfer_t[index].tx_data++; + sci->SETINT = (uint32)SCI_TX_INT; + } + else + { + /* send the data */ + while (length > 0U) + { + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((sci->FLR & (uint32)SCI_TX_INT) == 0U) + { + } /* Wait */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + txdata = *data; + sci->TD = (uint32)(txdata); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + data++; + length--; + } + } + +/* USER CODE BEGIN (12) */ +/* USER CODE END */ +} + + +/** @fn uint32 sciIsRxReady(sciBASE_t *sci) +* @brief Check if Rx buffer full +* @param[in] sci - sci module base address +* +* @return The Rx ready flag +* +* Checks to see if the Rx buffer full flag is set, returns +* 0 is flags not set otherwise will return the Rx flag itself. +*/ +/* SourceId : SCI_SourceId_007 */ +/* DesignId : SCI_DesignId_007 */ +/* Requirements : HL_SR236 */ +uint32 sciIsRxReady(sciBASE_t *sci) +{ +/* USER CODE BEGIN (13) */ +/* USER CODE END */ + + return sci->FLR & (uint32)SCI_RX_INT; +} + +/** @fn uint32 sciIsIdleDetected(sciBASE_t *sci) +* @brief Check if Idle Period is Detected +* @param[in] sci - sci module base address +* +* @return The Idle flag +* +* Checks to see if the SCI Idle flag is set, returns 0 if idle +* period has been detected and SCI is ready to receive, otherwise returns the Idle flag itself. +*/ +/* SourceId : SCI_SourceId_008 */ +/* DesignId : SCI_DesignId_008 */ +/* Requirements : HL_SR237 */ +uint32 sciIsIdleDetected(sciBASE_t *sci) +{ +/* USER CODE BEGIN (14) */ +/* USER CODE END */ + + return sci->FLR & (uint32)SCI_IDLE; +} + + +/** @fn uint32 sciRxError(sciBASE_t *sci) +* @brief Return Rx Error flags +* @param[in] sci - sci module base address +* +* @return The Rx error flags +* +* Returns the Rx framing, overrun and parity errors flags, +* also clears the error flags before returning. +*/ +/* SourceId : SCI_SourceId_009 */ +/* DesignId : SCI_DesignId_009 */ +/* Requirements : HL_SR238 */ +uint32 sciRxError(sciBASE_t *sci) +{ + uint32 status = (sci->FLR & ((uint32)SCI_FE_INT | (uint32)SCI_OE_INT |(uint32)SCI_PE_INT)); + +/* USER CODE BEGIN (15) */ +/* USER CODE END */ + + sci->FLR = ((uint32)SCI_FE_INT | (uint32)SCI_OE_INT | (uint32)SCI_PE_INT); + return status; +} + + +/** @fn uint32 sciReceiveByte(sciBASE_t *sci) +* @brief Receive Byte +* @param[in] sci - sci module base address +* +* @return Received byte +* +* Receives a single byte in polling mode. If there is +* not a byte in the receive buffer the routine will wait +* until one is received. Use sciIsRxReady to check to +* see if the buffer is full to avoid waiting. +*/ +/* SourceId : SCI_SourceId_010 */ +/* DesignId : SCI_DesignId_010 */ +/* Requirements : HL_SR239 */ +uint32 sciReceiveByte(sciBASE_t *sci) +{ +/* USER CODE BEGIN (16) */ +/* USER CODE END */ + + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((sci->FLR & (uint32)SCI_RX_INT) == 0U) + { + } /* Wait */ + + return (sci->RD & (uint32)0x000000FFU); +} + + +/** @fn void sciReceive(sciBASE_t *sci, uint32 length, uint8 * data) +* @brief Receive Data +* @param[in] sci - sci module base address +* @param[in] length - number of data words to transfer +* @param[in] data - pointer to data buffer to receive data +* +* Receive a block of 'length' bytes long and place it into the +* data buffer pointed to by 'data'. If interrupts have been +* enabled the data is received using interrupt mode, otherwise +* polling mode is used. In interrupt mode receive is setup and +* the routine returns immediately, sciReceive must not be called +* again until the transfer is complete, when the sciNotification +* callback will be called. In polling mode, sciReceive will not +* return until the transfer is complete. +*/ +/* SourceId : SCI_SourceId_011 */ +/* DesignId : SCI_DesignId_011 */ +/* Requirements : HL_SR240 */ +void sciReceive(sciBASE_t *sci, uint32 length, uint8 * data) +{ +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + + if ((sci->SETINT & (uint32)SCI_RX_INT) == (uint32)SCI_RX_INT) + { + /* we are in interrupt mode */ + uint32 index = (sci == sciREG) ? 0U : 1U; + + /* clear error flags */ + sci->FLR = ((uint32) SCI_FE_INT | (uint32) SCI_OE_INT | (uint32) SCI_PE_INT); + + g_sciTransfer_t[index].rx_length = length; + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + g_sciTransfer_t[index].rx_data = data; + } + else + { + while (length > 0U) + { + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((sci->FLR & (uint32)SCI_RX_INT) == 0U) + { + } /* Wait */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + *data = (uint8)(sci->RD & 0x000000FFU); + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + data++; + length--; + } + } +/* USER CODE BEGIN (18) */ +/* USER CODE END */ +} + +/** @fn void sciEnableLoopback(sciBASE_t *sci, loopBackType_t Loopbacktype) +* @brief Enable Loopback mode for self test +* @param[in] sci - sci module base address +* @param[in] Loopbacktype - Digital or Analog +* +* This function enables the Loopback mode for self test. +*/ +/* SourceId : SCI_SourceId_012 */ +/* DesignId : SCI_DesignId_014 */ +/* Requirements : HL_SR243 */ +void sciEnableLoopback(sciBASE_t *sci, loopBackType_t Loopbacktype) +{ +/* USER CODE BEGIN (19) */ +/* USER CODE END */ + + /* Clear Loopback incase enabled already */ + sci->IODFTCTRL = 0U; + + /* Enable Loopback either in Analog or Digital Mode */ + sci->IODFTCTRL = (uint32)0x00000A00U + | (uint32)((uint32)Loopbacktype << 1U); + +/* USER CODE BEGIN (20) */ +/* USER CODE END */ +} + +/** @fn void sciDisableLoopback(sciBASE_t *sci) +* @brief Enable Loopback mode for self test +* @param[in] sci - sci module base address +* +* This function disable the Loopback mode. +*/ +/* SourceId : SCI_SourceId_013 */ +/* DesignId : SCI_DesignId_015 */ +/* Requirements : HL_SR244 */ +void sciDisableLoopback(sciBASE_t *sci) +{ +/* USER CODE BEGIN (21) */ +/* USER CODE END */ + + /* Disable Loopback Mode */ + sci->IODFTCTRL = 0x00000500U; + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ +} + +/** @fn sciEnableNotification(sciBASE_t *sci, uint32 flags) +* @brief Enable interrupts +* @param[in] sci - sci module base address +* @param[in] flags - Interrupts to be enabled, can be ored value of: +* SCI_FE_INT - framing error, +* SCI_OE_INT - overrun error, +* SCI_PE_INT - parity error, +* SCI_RX_INT - receive buffer ready, +* SCI_TX_INT - transmit buffer ready, +* SCI_WAKE_INT - wakeup, +* SCI_BREAK_INT - break detect +*/ +/* SourceId : SCI_SourceId_014 */ +/* DesignId : SCI_DesignId_012 */ +/* Requirements : HL_SR241 */ +void sciEnableNotification(sciBASE_t *sci, uint32 flags) +{ + uint32 index = (sci == sciREG) ? 0U : 1U; + +/* USER CODE BEGIN (23) */ +/* USER CODE END */ + + g_sciTransfer_t[index].mode |= (flags & (uint32)SCI_TX_INT); + sci->SETINT = (flags & (uint32)(~(uint32)(SCI_TX_INT))); + +/* USER CODE BEGIN (24) */ +/* USER CODE END */ +} + + +/** @fn sciDisableNotification(sciBASE_t *sci, uint32 flags) +* @brief Disable interrupts +* @param[in] sci - sci module base address +* @param[in] flags - Interrupts to be disabled, can be ored value of: +* SCI_FE_INT - framing error, +* SCI_OE_INT - overrun error, +* SCI_PE_INT - parity error, +* SCI_RX_INT - receive buffer ready, +* SCI_TX_INT - transmit buffer ready, +* SCI_WAKE_INT - wakeup, +* SCI_BREAK_INT - break detect +*/ +/* SourceId : SCI_SourceId_015 */ +/* DesignId : SCI_DesignId_013 */ +/* Requirements : HL_SR242 */ +void sciDisableNotification(sciBASE_t *sci, uint32 flags) +{ + uint32 index = (sci == sciREG) ? 0U : 1U; + +/* USER CODE BEGIN (25) */ +/* USER CODE END */ + + g_sciTransfer_t[index].mode &= (uint32)(~(flags & (uint32)SCI_TX_INT)); + sci->CLEARINT = (flags & (uint32)(~(uint32)(SCI_TX_INT))); + +/* USER CODE BEGIN (26) */ +/* USER CODE END */ +} + +/** @fn sciEnterResetState(sciBASE_t *sci) +* @brief Enter reset state +* @param[in] sci - sci module base address +* @note The SCI should only be configured while in reset state +*/ +/* SourceId : SCI_SourceId_022 */ +/* DesignId : SCI_DesignId_018 */ +/* Requirements : HL_SR548 */ +void sciEnterResetState(sciBASE_t *sci) +{ + sci->GCR1 &= 0xFFFFFF7FU; +} + +/** @fn scixitResetState(sciBASE_t *sci) +* @brief Exit reset state +* @param[in] sci - sci module base address +* @note The SCI should only be configured while in reset state +*/ +/* SourceId : SCI_SourceId_023 */ +/* DesignId : SCI_DesignId_018 */ +/* Requirements : HL_SR548 */ +void sciExitResetState(sciBASE_t *sci) +{ + sci->GCR1 |= 0x00000080U; +} + +/** @fn void sciGetConfigValue(sci_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the SCI configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : SCI_SourceId_016 */ +/* DesignId : SCI_DesignId_016 */ +/* Requirements : HL_SR247 */ +void sciGetConfigValue(sci_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_GCR0 = SCI_GCR0_CONFIGVALUE; + config_reg->CONFIG_GCR1 = SCI_GCR1_CONFIGVALUE; + config_reg->CONFIG_SETINT = SCI_SETINT_CONFIGVALUE; + config_reg->CONFIG_SETINTLVL = SCI_SETINTLVL_CONFIGVALUE; + config_reg->CONFIG_FORMAT = SCI_FORMAT_CONFIGVALUE; + config_reg->CONFIG_BRS = SCI_BRS_CONFIGVALUE; + config_reg->CONFIG_PIO0 = SCI_PIO0_CONFIGVALUE; + config_reg->CONFIG_PIO1 = SCI_PIO1_CONFIGVALUE; + config_reg->CONFIG_PIO6 = SCI_PIO6_CONFIGVALUE; + config_reg->CONFIG_PIO7 = SCI_PIO7_CONFIGVALUE; + config_reg->CONFIG_PIO8 = SCI_PIO8_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_GCR0 = sciREG->GCR0; + config_reg->CONFIG_GCR1 = sciREG->GCR1; + config_reg->CONFIG_SETINT = sciREG->SETINT; + config_reg->CONFIG_SETINTLVL = sciREG->SETINTLVL; + config_reg->CONFIG_FORMAT = sciREG->FORMAT; + config_reg->CONFIG_BRS = sciREG->BRS; + config_reg->CONFIG_PIO0 = sciREG->PIO0; + config_reg->CONFIG_PIO1 = sciREG->PIO1; + config_reg->CONFIG_PIO6 = sciREG->PIO6; + config_reg->CONFIG_PIO7 = sciREG->PIO7; + config_reg->CONFIG_PIO8 = sciREG->PIO8; + } +} + + + +/* USER CODE BEGIN (37) */ +/* USER CODE END */ + Index: firmware/source/spi.c =================================================================== diff -u --- firmware/source/spi.c (revision 0) +++ firmware/source/spi.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,746 @@ +/** @file spi.c +* @brief SPI Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "spi.h" +#include "sys_vim.h" +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @struct g_spiPacket +* @brief globals +* +*/ +static volatile struct g_spiPacket +{ + spiDAT1_t g_spiDataFormat; + uint32 tx_length; + uint32 rx_length; + uint16 * txdata_ptr; + uint16 * rxdata_ptr; + SpiDataStatus_t tx_data_status; + SpiDataStatus_t rx_data_status; +} g_spiPacket_t[5U]; + +/** @fn void spiInit(void) +* @brief Initializes the SPI Driver +* +* This function initializes the SPI module. +*/ +/* SourceId : SPI_SourceId_001 */ +/* DesignId : SPI_DesignId_001 */ +/* Requirements : HL_SR126 */ +void spiInit(void) +{ +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + + + + + + /** @b initialize @b SPI4 */ + + /** bring SPI out of reset */ + spiREG4->GCR0 = 0U; + spiREG4->GCR0 = 1U; + + /** SPI4 master mode and clock configuration */ + spiREG4->GCR1 = (spiREG4->GCR1 & 0xFFFFFFFCU) | ((uint32)((uint32)1U << 1U) /* CLOKMOD */ + | 1U); /* MASTER */ + + /** SPI4 enable pin configuration */ + spiREG4->INT0 = (spiREG4->INT0 & 0xFEFFFFFFU) | (uint32)((uint32)0U << 24U); /* ENABLE HIGHZ */ + + /** - Delays */ + spiREG4->DELAY = (uint32)((uint32)0U << 24U) /* C2TDELAY */ + | (uint32)((uint32)0U << 16U) /* T2CDELAY */ + | (uint32)((uint32)0U << 8U) /* T2EDELAY */ + | (uint32)((uint32)0U << 0U); /* C2EDELAY */ + + /** - Data Format 0 */ + spiREG4->FMT0 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 1 */ + spiREG4->FMT1 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 2 */ + spiREG4->FMT2 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 3 */ + spiREG4->FMT3 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)109U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - set interrupt levels */ + spiREG4->LVL = (uint32)((uint32)0U << 9U) /* TXINT */ + | (uint32)((uint32)0U << 8U) /* RXINT */ + | (uint32)((uint32)0U << 6U) /* OVRNINT */ + | (uint32)((uint32)0U << 4U) /* BITERR */ + | (uint32)((uint32)0U << 3U) /* DESYNC */ + | (uint32)((uint32)0U << 2U) /* PARERR */ + | (uint32)((uint32)0U << 1U) /* TIMEOUT */ + | (uint32)((uint32)0U << 0U); /* DLENERR */ + + /** - clear any pending interrupts */ + spiREG4->FLG |= 0xFFFFU; + + /** - enable interrupts */ + spiREG4->INT0 = (spiREG4->INT0 & 0xFFFF0000U) + | (uint32)((uint32)0U << 9U) /* TXINT */ + | (uint32)((uint32)0U << 8U) /* RXINT */ + | (uint32)((uint32)0U << 6U) /* OVRNINT */ + | (uint32)((uint32)0U << 4U) /* BITERR */ + | (uint32)((uint32)0U << 3U) /* DESYNC */ + | (uint32)((uint32)0U << 2U) /* PARERR */ + | (uint32)((uint32)0U << 1U) /* TIMEOUT */ + | (uint32)((uint32)0U << 0U); /* DLENERR */ + + /** @b initialize @b SPI4 @b Port */ + + /** - SPI4 Port output values */ + spiREG4->PC3 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO */ + | (uint32)((uint32)0U << 11U); /* SOMI */ + + /** - SPI4 Port direction */ + spiREG4->PC1 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO */ + | (uint32)((uint32)0U << 11U); /* SOMI */ + + /** - SPI4 Port open drain enable */ + spiREG4->PC6 = (uint32)((uint32)0U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO */ + | (uint32)((uint32)0U << 11U); /* SOMI */ + + /** - SPI4 Port pullup / pulldown selection */ + spiREG4->PC8 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO */ + | (uint32)((uint32)1U << 11U); /* SOMI */ + + /** - SPI4 Port pullup / pulldown enable*/ + spiREG4->PC7 = (uint32)((uint32)0U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO */ + | (uint32)((uint32)0U << 11U); /* SOMI */ + + /* SPI4 set all pins to functional */ + spiREG4->PC0 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO */ + | (uint32)((uint32)1U << 11U); /* SOMI */ + + /** - Initialize TX and RX data buffer Status */ + g_spiPacket_t[3U].tx_data_status = SPI_READY; + g_spiPacket_t[3U].rx_data_status = SPI_READY; + + /** - Finally start SPI4 */ + spiREG4->GCR1 = (spiREG4->GCR1 & 0xFEFFFFFFU) | 0x01000000U; + + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ +} + + +/** @fn void spiSetFunctional(spiBASE_t *spi, uint32 port) +* @brief Change functional behavior of pins at runtime. +* @param[in] spi - Spi module base address +* @param[in] port - Value to write to PC0 register +* +* Change the value of the PC0 register at runtime, this allows to +* dynamically change the functionality of the SPI pins between functional +* and GIO mode. +*/ +/* SourceId : SPI_SourceId_002 */ +/* DesignId : SPI_DesignId_002 */ +/* Requirements : HL_SR128 */ +void spiSetFunctional(spiBASE_t *spi, uint32 port) +{ +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + + spi->PC0 = port; + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ +} + + +/** @fn uint32 spiReceiveData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * destbuff) +* @brief Receives Data using polling method +* @param[in] spi - Spi module base address +* @param[in] dataconfig_t - Spi DAT1 register configuration +* @param[in] blocksize - number of data +* @param[in] destbuff - Pointer to the destination data (16 bit). +* +* @return flag register value. +* +* This function transmits blocksize number of data from source buffer using polling method. +*/ +/* SourceId : SPI_SourceId_003 */ +/* DesignId : SPI_DesignId_007 */ +/* Requirements : HL_SR133 */ +uint32 spiReceiveData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * destbuff) +{ +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + uint32 Chip_Select_Hold = (dataconfig_t->CS_HOLD) ? 0x10000000U : 0U; + uint32 WDelay = (dataconfig_t->WDEL) ? 0x04000000U : 0U; + SPIDATAFMT_t DataFormat = dataconfig_t->DFSEL; + uint8 ChipSelect = dataconfig_t->CSNR; + + while(blocksize != 0U) + { + if((spi->FLG & 0x000000FFU) !=0U) + { + break; + } + if(blocksize == 1U) + { + Chip_Select_Hold = 0U; + } + + /*SAFETYMCUSW 51 S MR:12.3 "Needs shifting for 32-bit value" */ + spi->DAT1 = ((uint32)DataFormat << 24U) | + ((uint32)ChipSelect << 16U) | + (WDelay) | + (Chip_Select_Hold) | + (0x00000000U); + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((spi->FLG & 0x00000100U) != 0x00000100U) + { + } /* Wait */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + *destbuff = (uint16)spi->BUF; + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + destbuff++; + blocksize--; + } + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + + return (spi->FLG & 0xFFU); +} + + +/** @fn uint32 spiGetData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * destbuff) +* @brief Receives Data using interrupt method +* @param[in] spi - Spi module base address +* @param[in] dataconfig_t - Spi DAT1 register configuration +* @param[in] blocksize - number of data +* @param[in] destbuff - Pointer to the destination data (16 bit). +* +* @return flag register value. +* +* This function transmits blocksize number of data from source buffer using interrupt method. +*/ +/* SourceId : SPI_SourceId_004 */ +/* DesignId : SPI_DesignId_008 */ +/* Requirements : HL_SR134 */ +void spiGetData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * destbuff) +{ + uint32 index = (spi == spiREG1) ? 0U :((spi==spiREG2) ? 1U : ((spi==spiREG3) ? 2U:((spi==spiREG4) ? 3U:4U))); + +/* USER CODE BEGIN (8) */ +/* USER CODE END */ + + g_spiPacket_t[index].rx_length = blocksize; + g_spiPacket_t[index].rxdata_ptr = destbuff; + g_spiPacket_t[index].g_spiDataFormat = *dataconfig_t; + g_spiPacket_t[index].rx_data_status = SPI_PENDING; + + spi->INT0 |= 0x0100U; + +/* USER CODE BEGIN (9) */ +/* USER CODE END */ +} + + +/** @fn uint32 spiTransmitData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff) +* @brief Transmits Data using polling method +* @param[in] spi - Spi module base address +* @param[in] dataconfig_t - Spi DAT1 register configuration +* @param[in] blocksize - number of data +* @param[in] srcbuff - Pointer to the source data ( 16 bit). +* +* @return flag register value. +* +* This function transmits blocksize number of data from source buffer using polling method. +*/ +/* SourceId : SPI_SourceId_005 */ +/* DesignId : SPI_DesignId_005 */ +/* Requirements : HL_SR131 */ +uint32 spiTransmitData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff) +{ + volatile uint32 SpiBuf; + uint16 Tx_Data; + uint32 Chip_Select_Hold = (dataconfig_t->CS_HOLD) ? 0x10000000U : 0U; + uint32 WDelay = (dataconfig_t->WDEL) ? 0x04000000U : 0U; + SPIDATAFMT_t DataFormat = dataconfig_t->DFSEL; + uint8 ChipSelect = dataconfig_t->CSNR; + +/* USER CODE BEGIN (10) */ +/* USER CODE END */ + while(blocksize != 0U) + { + if((spi->FLG & 0x000000FFU) !=0U) + { + break; + } + + if(blocksize == 1U) + { + Chip_Select_Hold = 0U; + } + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + Tx_Data = *srcbuff; + + spi->DAT1 = ((uint32)DataFormat << 24U) | + ((uint32)ChipSelect << 16U) | + (WDelay) | + (Chip_Select_Hold) | + (uint32)Tx_Data; + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + srcbuff++; + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((spi->FLG & 0x00000100U) != 0x00000100U) + { + } /* Wait */ + SpiBuf = spi->BUF; + + blocksize--; + } + +/* USER CODE BEGIN (11) */ +/* USER CODE END */ + + return (spi->FLG & 0xFFU); +} + + +/** @fn void spiSendData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff) +* @brief Transmits Data using interrupt method +* @param[in] spi - Spi module base address +* @param[in] dataconfig_t - Spi DAT1 register configuration +* @param[in] blocksize - number of data +* @param[in] srcbuff - Pointer to the source data ( 16 bit). +* +* @return flag register value. +* +* This function transmits blocksize number of data from source buffer using interrupt method. +*/ +/* SourceId : SPI_SourceId_006 */ +/* DesignId : SPI_DesignId_006 */ +/* Requirements : HL_SR132 */ +void spiSendData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff) +{ + uint32 index = (spi == spiREG1) ? 0U :((spi==spiREG2) ? 1U : ((spi==spiREG3) ? 2U:((spi==spiREG4) ? 3U:4U))); + +/* USER CODE BEGIN (12) */ +/* USER CODE END */ + + g_spiPacket_t[index].tx_length = blocksize; + g_spiPacket_t[index].txdata_ptr = srcbuff; + g_spiPacket_t[index].g_spiDataFormat = *dataconfig_t; + g_spiPacket_t[index].tx_data_status = SPI_PENDING; + + spi->INT0 |= 0x0200U; + +/* USER CODE BEGIN (13) */ +/* USER CODE END */ +} + + +/** @fn uint32 spiTransmitAndReceiveData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff, uint16 * destbuff) +* @brief Transmits and Receive Data using polling method +* @param[in] spi - Spi module base address +* @param[in] dataconfig_t - Spi DAT1 register configuration +* @param[in] blocksize - number of data +* @param[in] srcbuff - Pointer to the source data ( 16 bit). +* @param[in] destbuff - Pointer to the destination data ( 16 bit). +* +* @return flag register value. +* +* This function transmits and receives blocksize number of data from source buffer using polling method. +*/ +/* SourceId : SPI_SourceId_007 */ +/* DesignId : SPI_DesignId_009 */ +/* Requirements : HL_SR135 */ +uint32 spiTransmitAndReceiveData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff, uint16 * destbuff) +{ + uint16 Tx_Data; + uint32 Chip_Select_Hold = (dataconfig_t->CS_HOLD) ? 0x10000000U : 0U; + uint32 WDelay = (dataconfig_t->WDEL) ? 0x04000000U : 0U; + SPIDATAFMT_t DataFormat = dataconfig_t->DFSEL; + uint8 ChipSelect = dataconfig_t->CSNR; + +/* USER CODE BEGIN (14) */ +/* USER CODE END */ + while(blocksize != 0U) + { + if((spi->FLG & 0x000000FFU) != 0U) + { + break; + } + + if(blocksize == 1U) + { + Chip_Select_Hold = 0U; + } + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + Tx_Data = *srcbuff; + + spi->DAT1 =((uint32)DataFormat << 24U) | + ((uint32)ChipSelect << 16U) | + (WDelay) | + (Chip_Select_Hold) | + (uint32)Tx_Data; + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + srcbuff++; + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((spi->FLG & 0x00000100U) != 0x00000100U) + { + } /* Wait */ + /*SAFETYMCUSW 45 D MR:21.1 "Valid non NULL input parameters are only allowed in this driver" */ + *destbuff = (uint16)spi->BUF; + /*SAFETYMCUSW 567 S MR:17.1,17.4 "Pointer increment needed" */ + destbuff++; + + blocksize--; + } + +/* USER CODE BEGIN (15) */ +/* USER CODE END */ + + return (spi->FLG & 0xFFU); +} + +/* USER CODE BEGIN (16) */ +/* USER CODE END */ + +/** @fn void spiSendAndGetData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff, uint16 * destbuff) +* @brief Initiate SPI Transmits and receive Data using Interrupt mode. +* @param[in] spi - Spi module base address +* @param[in] dataconfig_t - Spi DAT1 register configuration +* @param[in] blocksize - number of data +* @param[in] srcbuff - Pointer to the source data ( 16 bit). +* @param[in] destbuff - Pointer to the destination data ( 16 bit). +* +* Initiate SPI Transmits and receive Data using Interrupt mode.. +*/ +/* SourceId : SPI_SourceId_008 */ +/* DesignId : SPI_DesignId_010 */ +/* Requirements : HL_SR136 */ +void spiSendAndGetData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff, uint16 * destbuff) +{ + +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + + uint32 index = (spi == spiREG1) ? 0U :((spi==spiREG2) ? 1U : ((spi==spiREG3) ? 2U:((spi==spiREG4) ? 3U:4U))); + + g_spiPacket_t[index].tx_length = blocksize; + g_spiPacket_t[index].rx_length = blocksize; + g_spiPacket_t[index].txdata_ptr = srcbuff; + g_spiPacket_t[index].rxdata_ptr = destbuff; + g_spiPacket_t[index].g_spiDataFormat = *dataconfig_t; + g_spiPacket_t[index].tx_data_status = SPI_PENDING; + g_spiPacket_t[index].rx_data_status = SPI_PENDING; + + spi->INT0 |= 0x0300U; + +/* USER CODE BEGIN (18) */ +/* USER CODE END */ +} + +/** @fn SpiDataStatus_t SpiTxStatus(spiBASE_t *spi) +* @brief Get the status of the SPI Transmit data block. +* @param[in] spi - Spi module base address +* +* @return Spi Transmit block data status. +* +* Get the status of the SPI Transmit data block. +*/ +/* SourceId : SPI_SourceId_009 */ +/* DesignId : SPI_DesignId_013 */ +/* Requirements : HL_SR139 */ +SpiDataStatus_t SpiTxStatus(spiBASE_t *spi) +{ + +/* USER CODE BEGIN (19) */ +/* USER CODE END */ + + uint32 index = (spi == spiREG1) ? 0U :((spi==spiREG2) ? 1U : ((spi==spiREG3) ? 2U:((spi==spiREG4) ? 3U:4U))); + return(g_spiPacket_t[index].tx_data_status); +} + +/* USER CODE BEGIN (20) */ +/* USER CODE END */ + +/** @fn SpiDataStatus_t SpiRxStatus(spiBASE_t *spi) +* @brief Get the status of the SPI Receive data block. +* @param[in] spi - Spi module base address +* +* @return Spi Receive block data status. +* +* Get the status of the SPI Receive data block. +*/ +/* SourceId : SPI_SourceId_010 */ +/* DesignId : SPI_DesignId_014 */ +/* Requirements : HL_SR140 */ +SpiDataStatus_t SpiRxStatus(spiBASE_t *spi) +{ + +/* USER CODE BEGIN (21) */ +/* USER CODE END */ + + uint32 index = (spi == spiREG1) ? 0U :((spi==spiREG2) ? 1U : ((spi==spiREG3) ? 2U:((spi==spiREG4) ? 3U:4U))); + return(g_spiPacket_t[index].rx_data_status); +} + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ + +/** @fn void spiEnableLoopback(spiBASE_t *spi, loopBackType_t Loopbacktype) +* @brief Enable Loopback mode for self test +* @param[in] spi - spi module base address +* @param[in] Loopbacktype - Digital or Analog +* +* This function enables the Loopback mode for self test. +*/ +/* SourceId : SPI_SourceId_011 */ +/* DesignId : SPI_DesignId_011 */ +/* Requirements : HL_SR137 */ +void spiEnableLoopback(spiBASE_t *spi, loopBackType_t Loopbacktype) +{ +/* USER CODE BEGIN (23) */ +/* USER CODE END */ + + /* Clear Loopback incase enabled already */ + spi->IOLPKTSTCR = 0U; + + /* Enable Loopback either in Analog or Digital Mode */ + spi->IOLPKTSTCR = (uint32)0x00000A00U + | (uint32)((uint32)Loopbacktype << 1U); + +/* USER CODE BEGIN (24) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (25) */ +/* USER CODE END */ + +/** @fn void spiDisableLoopback(spiBASE_t *spi) +* @brief Enable Loopback mode for self test +* @param[in] spi - spi module base address +* +* This function disable the Loopback mode. +*/ +/* SourceId : SPI_SourceId_012 */ +/* DesignId : SPI_DesignId_012 */ +/* Requirements : HL_SR138 */ +void spiDisableLoopback(spiBASE_t *spi) +{ +/* USER CODE BEGIN (26) */ +/* USER CODE END */ + + /* Disable Loopback Mode */ + spi->IOLPKTSTCR = 0x00000500U; + +/* USER CODE BEGIN (27) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (28) */ +/* USER CODE END */ + +/** @fn spiEnableNotification(spiBASE_t *spi, uint32 flags) +* @brief Enable interrupts +* @param[in] spi - spi module base address +* @param[in] flags - Interrupts to be enabled, can be ored value of: +*/ +/* SourceId : SPI_SourceId_013 */ +/* DesignId : SPI_DesignId_003 */ +/* Requirements : HL_SR129 */ +void spiEnableNotification(spiBASE_t *spi, uint32 flags) +{ +/* USER CODE BEGIN (29) */ +/* USER CODE END */ + + spi->INT0 = (spi->INT0 & 0xFFFF0000U) | flags; + +/* USER CODE BEGIN (30) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (31) */ +/* USER CODE END */ + +/** @fn spiDisableNotification(spiBASE_t *spi, uint32 flags) +* @brief Enable interrupts +* @param[in] spi - spi module base address +* @param[in] flags - Interrupts to be enabled, can be ored value of: +*/ +/* SourceId : SPI_SourceId_014 */ +/* DesignId : SPI_DesignId_004 */ +/* Requirements : HL_SR130 */ +void spiDisableNotification(spiBASE_t *spi, uint32 flags) +{ +/* USER CODE BEGIN (32) */ +/* USER CODE END */ + + spi->INT0 = (spi->INT0 & (~(flags))); + +/* USER CODE BEGIN (33) */ +/* USER CODE END */ +} + + + + +/** @fn void spi4GetConfigValue(spi_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : SPI_SourceId_018 */ +/* DesignId : SPI_DesignId_015 */ +/* Requirements : HL_SR144 */ +void spi4GetConfigValue(spi_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_GCR1 = SPI4_GCR1_CONFIGVALUE; + config_reg->CONFIG_INT0 = SPI4_INT0_CONFIGVALUE; + config_reg->CONFIG_LVL = SPI4_LVL_CONFIGVALUE; + config_reg->CONFIG_PC0 = SPI4_PC0_CONFIGVALUE; + config_reg->CONFIG_PC1 = SPI4_PC1_CONFIGVALUE; + config_reg->CONFIG_PC6 = SPI4_PC6_CONFIGVALUE; + config_reg->CONFIG_PC7 = SPI4_PC7_CONFIGVALUE; + config_reg->CONFIG_PC8 = SPI4_PC8_CONFIGVALUE; + config_reg->CONFIG_DELAY = SPI4_DELAY_CONFIGVALUE; + config_reg->CONFIG_FMT0 = SPI4_FMT0_CONFIGVALUE; + config_reg->CONFIG_FMT1 = SPI4_FMT1_CONFIGVALUE; + config_reg->CONFIG_FMT2 = SPI4_FMT2_CONFIGVALUE; + config_reg->CONFIG_FMT3 = SPI4_FMT3_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_GCR1 = spiREG4->GCR1; + config_reg->CONFIG_INT0 = spiREG4->INT0; + config_reg->CONFIG_LVL = spiREG4->LVL; + config_reg->CONFIG_PC0 = spiREG4->PC0; + config_reg->CONFIG_PC1 = spiREG4->PC1; + config_reg->CONFIG_PC6 = spiREG4->PC6; + config_reg->CONFIG_PC7 = spiREG4->PC7; + config_reg->CONFIG_PC8 = spiREG4->PC8; + config_reg->CONFIG_DELAY = spiREG4->DELAY ; + config_reg->CONFIG_FMT0 = spiREG4->FMT0; + config_reg->CONFIG_FMT1 = spiREG4->FMT1; + config_reg->CONFIG_FMT2 = spiREG4->FMT2; + config_reg->CONFIG_FMT3 = spiREG4->FMT3; + } +} + + + + + + + + + + Index: firmware/source/sys_core.asm =================================================================== diff -u --- firmware/source/sys_core.asm (revision 0) +++ firmware/source/sys_core.asm (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,734 @@ +;------------------------------------------------------------------------------- +; sys_core.asm +; +; Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +; +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions +; are met: +; +; Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; +; Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the +; distribution. +; +; Neither the name of Texas Instruments Incorporated nor the names of +; its contributors may be used to endorse or promote products derived +; from this software without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +; +; +; + + .text + .arm + +;------------------------------------------------------------------------------- +; Initialize CPU Registers +; SourceId : CORE_SourceId_001 +; DesignId : CORE_DesignId_001 +; Requirements: HL_SR477, HL_SR476, HL_SR492 + + .def _coreInitRegisters_ + .asmfunc + + +_coreInitRegisters_ + + + ; After reset, the CPU is in the Supervisor mode (M = 10011) + mov r0, lr + mov r1, #0x0000 + mov r2, #0x0000 + mov r3, #0x0000 + mov r4, #0x0000 + mov r5, #0x0000 + mov r6, #0x0000 + mov r7, #0x0000 + mov r8, #0x0000 + mov r9, #0x0000 + mov r10, #0x0000 + mov r11, #0x0000 + mov r12, #0x0000 + mov r13, #0x0000 + mrs r1, cpsr + msr spsr_cxsf, r1 + ; Switch to FIQ mode (M = 10001) + cps #17 + mov lr, r0 + mov r8, #0x0000 + mov r9, #0x0000 + mov r10, #0x0000 + mov r11, #0x0000 + mov r12, #0x0000 + mrs r1, cpsr + msr spsr_cxsf, r1 + ; Switch to IRQ mode (M = 10010) + cps #18 + mov lr, r0 + mrs r1,cpsr + msr spsr_cxsf, r1 + ; Switch to Abort mode (M = 10111) + cps #23 + mov lr, r0 + mrs r1,cpsr + msr spsr_cxsf, r1 + ; Switch to Undefined Instruction Mode (M = 11011) + cps #27 + mov lr, r0 + mrs r1,cpsr + msr spsr_cxsf, r1 + ; Switch to System Mode ( Shares User Mode registers ) (M = 11111) + cps #31 + mov lr, r0 + mrs r1,cpsr + msr spsr_cxsf, r1 + + + mrc p15, #0x00, r2, c1, c0, #0x02 + orr r2, r2, #0xF00000 + mcr p15, #0x00, r2, c1, c0, #0x02 + mov r2, #0x40000000 + fmxr fpexc, r2 + + fmdrr d0, r1, r1 + fmdrr d1, r1, r1 + fmdrr d2, r1, r1 + fmdrr d3, r1, r1 + fmdrr d4, r1, r1 + fmdrr d5, r1, r1 + fmdrr d6, r1, r1 + fmdrr d7, r1, r1 + fmdrr d8, r1, r1 + fmdrr d9, r1, r1 + fmdrr d10, r1, r1 + fmdrr d11, r1, r1 + fmdrr d12, r1, r1 + fmdrr d13, r1, r1 + fmdrr d14, r1, r1 + fmdrr d15, r1, r1 + bl next1 +next1 + bl next2 +next2 + bl next3 +next3 + bl next4 +next4 + bx r0 + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Initialize Stack Pointers +; SourceId : CORE_SourceId_002 +; DesignId : CORE_DesignId_002 +; Requirements: HL_SR478 + + .def _coreInitStackPointer_ + .asmfunc + +_coreInitStackPointer_ + + cps #17 + ldr sp, fiqSp + cps #18 + ldr sp, irqSp + cps #19 + ldr sp, svcSp + cps #23 + ldr sp, abortSp + cps #27 + ldr sp, undefSp + cps #31 + ldr sp, userSp + bx lr + +userSp .word 0x08000000+0x00001000 +svcSp .word 0x08000000+0x00001000+0x00000100 +fiqSp .word 0x08000000+0x00001000+0x00000100+0x00000100 +irqSp .word 0x08000000+0x00001000+0x00000100+0x00000100+0x00000100 +abortSp .word 0x08000000+0x00001000+0x00000100+0x00000100+0x00000100+0x00000100 +undefSp .word 0x08000000+0x00001000+0x00000100+0x00000100+0x00000100+0x00000100+0x00000100 + + .endasmfunc + +;------------------------------------------------------------------------------- +; Get CPSR Value +; SourceId : CORE_SourceId_003 +; DesignId : CORE_DesignId_003 +; Requirements: + + .def _getCPSRValue_ + .asmfunc + +_getCPSRValue_ + + mrs r0, CPSR + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Take CPU to IDLE state +; SourceId : CORE_SourceId_004 +; DesignId : CORE_DesignId_004 +; Requirements: HL_SR493 + + .def _gotoCPUIdle_ + .asmfunc + +_gotoCPUIdle_ + + WFI + nop + nop + nop + nop + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Enable VFP Unit +; SourceId : CORE_SourceId_005 +; DesignId : CORE_DesignId_006 +; Requirements: HL_SR492, HL_SR476 + + .def _coreEnableVfp_ + .asmfunc + +_coreEnableVfp_ + + mrc p15, #0x00, r0, c1, c0, #0x02 + orr r0, r0, #0xF00000 + mcr p15, #0x00, r0, c1, c0, #0x02 + mov r0, #0x40000000 + fmxr fpexc, r0 + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Enable Event Bus Export +; SourceId : CORE_SourceId_006 +; DesignId : CORE_DesignId_007 +; Requirements: HL_SR479 + + .def _coreEnableEventBusExport_ + .asmfunc + +_coreEnableEventBusExport_ + + mrc p15, #0x00, r0, c9, c12, #0x00 + orr r0, r0, #0x10 + mcr p15, #0x00, r0, c9, c12, #0x00 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Disable Event Bus Export +; SourceId : CORE_SourceId_007 +; DesignId : CORE_DesignId_008 +; Requirements: HL_SR481 + + + .def _coreDisableEventBusExport_ + .asmfunc + +_coreDisableEventBusExport_ + + mrc p15, #0x00, r0, c9, c12, #0x00 + bic r0, r0, #0x10 + mcr p15, #0x00, r0, c9, c12, #0x00 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Enable RAM ECC Support +; SourceId : CORE_SourceId_008 +; DesignId : CORE_DesignId_009 +; Requirements: HL_SR480 + + .def _coreEnableRamEcc_ + .asmfunc + +_coreEnableRamEcc_ + + mrc p15, #0x00, r0, c1, c0, #0x01 + orr r0, r0, #0x0C000000 + mcr p15, #0x00, r0, c1, c0, #0x01 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Disable RAM ECC Support +; SourceId : CORE_SourceId_009 +; DesignId : CORE_DesignId_010 +; Requirements: HL_SR482 + + .def _coreDisableRamEcc_ + .asmfunc + +_coreDisableRamEcc_ + + mrc p15, #0x00, r0, c1, c0, #0x01 + bic r0, r0, #0x0C000000 + mcr p15, #0x00, r0, c1, c0, #0x01 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Enable Flash ECC Support +; SourceId : CORE_SourceId_010 +; DesignId : CORE_DesignId_011 +; Requirements: HL_SR480, HL_SR458 + + .def _coreEnableFlashEcc_ + .asmfunc + +_coreEnableFlashEcc_ + + mrc p15, #0x00, r0, c1, c0, #0x01 + orr r0, r0, #0x02000000 + dmb + mcr p15, #0x00, r0, c1, c0, #0x01 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Disable Flash ECC Support +; SourceId : CORE_SourceId_011 +; DesignId : CORE_DesignId_012 +; Requirements: HL_SR482 + + .def _coreDisableFlashEcc_ + .asmfunc + +_coreDisableFlashEcc_ + + mrc p15, #0x00, r0, c1, c0, #0x01 + bic r0, r0, #0x02000000 + mcr p15, #0x00, r0, c1, c0, #0x01 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Enable Offset via Vic controller +; SourceId : CORE_SourceId_012 +; DesignId : CORE_DesignId_005 +; Requirements: HL_SR483, HL_SR491 + + .def _coreEnableIrqVicOffset_ + .asmfunc + +_coreEnableIrqVicOffset_ + + mrc p15, #0, r0, c1, c0, #0 + orr r0, r0, #0x01000000 + mcr p15, #0, r0, c1, c0, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get data fault status register +; SourceId : CORE_SourceId_013 +; DesignId : CORE_DesignId_013 +; Requirements: HL_SR495 + + .def _coreGetDataFault_ + .asmfunc + +_coreGetDataFault_ + + mrc p15, #0, r0, c5, c0, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Clear data fault status register +; SourceId : CORE_SourceId_014 +; DesignId : CORE_DesignId_014 +; Requirements: HL_SR495 + + .def _coreClearDataFault_ + .asmfunc + +_coreClearDataFault_ + + mov r0, #0 + mcr p15, #0, r0, c5, c0, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get instruction fault status register +; SourceId : CORE_SourceId_015 +; DesignId : CORE_DesignId_015 +; Requirements: HL_SR495 + + .def _coreGetInstructionFault_ + .asmfunc + +_coreGetInstructionFault_ + + mrc p15, #0, r0, c5, c0, #1 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Clear instruction fault status register +; SourceId : CORE_SourceId_016 +; DesignId : CORE_DesignId_016 +; Requirements: HL_SR495 + + .def _coreClearInstructionFault_ + .asmfunc + +_coreClearInstructionFault_ + + mov r0, #0 + mcr p15, #0, r0, c5, c0, #1 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get data fault address register +; SourceId : CORE_SourceId_017 +; DesignId : CORE_DesignId_017 +; Requirements: HL_SR495 + + .def _coreGetDataFaultAddress_ + .asmfunc + +_coreGetDataFaultAddress_ + + mrc p15, #0, r0, c6, c0, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Clear data fault address register +; SourceId : CORE_SourceId_018 +; DesignId : CORE_DesignId_018 +; Requirements: HL_SR495 + + .def _coreClearDataFaultAddress_ + .asmfunc + +_coreClearDataFaultAddress_ + + mov r0, #0 + mcr p15, #0, r0, c6, c0, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get instruction fault address register +; SourceId : CORE_SourceId_019 +; DesignId : CORE_DesignId_019 +; Requirements: HL_SR495 + + .def _coreGetInstructionFaultAddress_ + .asmfunc + +_coreGetInstructionFaultAddress_ + + mrc p15, #0, r0, c6, c0, #2 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Clear instruction fault address register +; SourceId : CORE_SourceId_020 +; DesignId : CORE_DesignId_020 +; Requirements: HL_SR495 + + .def _coreClearInstructionFaultAddress_ + .asmfunc + +_coreClearInstructionFaultAddress_ + + mov r0, #0 + mcr p15, #0, r0, c6, c0, #2 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get auxiliary data fault status register +; SourceId : CORE_SourceId_021 +; DesignId : CORE_DesignId_021 +; Requirements: HL_SR496 + + .def _coreGetAuxiliaryDataFault_ + .asmfunc + +_coreGetAuxiliaryDataFault_ + + mrc p15, #0, r0, c5, c1, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Clear auxiliary data fault status register +; SourceId : CORE_SourceId_022 +; DesignId : CORE_DesignId_022 +; Requirements: HL_SR496 + + .def _coreClearAuxiliaryDataFault_ + .asmfunc + +_coreClearAuxiliaryDataFault_ + + mov r0, #0 + mcr p15, #0, r0, c5, c1, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get auxiliary instruction fault status register +; SourceId : CORE_SourceId_023 +; DesignId : CORE_DesignId_023 +; Requirements: HL_SR496 + + .def _coreGetAuxiliaryInstructionFault_ + .asmfunc + +_coreGetAuxiliaryInstructionFault_ + + mrc p15, #0, r0, c5, c1, #1 + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Clear auxiliary instruction fault status register +; SourceId : CORE_SourceId_024 +; DesignId : CORE_DesignId_024 +; Requirements: HL_SR496 + + .def _coreClearAuxiliaryInstructionFault_ + .asmfunc + +_coreClearAuxiliaryInstructionFault_ + + mov r0, #0 + mrc p15, #0, r0, c5, c1, #1 + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Disable interrupts - R4 IRQ & FIQ +; SourceId : CORE_SourceId_025 +; DesignId : CORE_DesignId_025 +; Requirements: HL_SR494 + + .def _disable_interrupt_ + .asmfunc + +_disable_interrupt_ + + cpsid if + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Disable FIQ interrupt +; SourceId : CORE_SourceId_026 +; DesignId : CORE_DesignId_026 +; Requirements: HL_SR494 + + .def _disable_FIQ_interrupt_ + .asmfunc + +_disable_FIQ_interrupt_ + + cpsid f + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Disable FIQ interrupt + + .def _disable_IRQ_interrupt_ + .asmfunc + +_disable_IRQ_interrupt_ + + cpsid i + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Enable interrupts - R4 IRQ & FIQ + + .def _enable_interrupt_ + .asmfunc + +_enable_interrupt_ + + cpsie if + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Clear ESM CCM errorss + + .def _esmCcmErrorsClear_ + .asmfunc + +_esmCcmErrorsClear_ + + stmfd sp!, {r0-r2} + ldr r0, ESMSR1_REG ; load the ESMSR1 status register address + ldr r2, ESMSR1_ERR_CLR + str r2, [r0] ; clear the ESMSR1 register + + ldr r0, ESMSR2_REG ; load the ESMSR2 status register address + ldr r2, ESMSR2_ERR_CLR + str r2, [r0] ; clear the ESMSR2 register + + ldr r0, ESMSSR2_REG ; load the ESMSSR2 status register address + ldr r2, ESMSSR2_ERR_CLR + str r2, [r0] ; clear the ESMSSR2 register + + ldr r0, ESMKEY_REG ; load the ESMKEY register address + mov r2, #0x5 ; load R2 with 0x5 + str r2, [r0] ; clear the ESMKEY register + + ldr r0, VIM_INTREQ ; load the INTREQ register address + ldr r2, VIM_INT_CLR + str r2, [r0] ; clear the INTREQ register + ldr r0, CCMR4_STAT_REG ; load the CCMR4 status register address + ldr r2, CCMR4_ERR_CLR + str r2, [r0] ; clear the CCMR4 status register + ldmfd sp!, {r0-r2} + bx lr + +ESMSR1_REG .word 0xFFFFF518 +ESMSR2_REG .word 0xFFFFF51C +ESMSR3_REG .word 0xFFFFF520 +ESMKEY_REG .word 0xFFFFF538 +ESMSSR2_REG .word 0xFFFFF53C +CCMR4_STAT_REG .word 0xFFFFF600 +ERR_CLR_WRD .word 0xFFFFFFFF +CCMR4_ERR_CLR .word 0x00010000 +ESMSR1_ERR_CLR .word 0x80000000 +ESMSR2_ERR_CLR .word 0x00000004 +ESMSSR2_ERR_CLR .word 0x00000004 +VIM_INT_CLR .word 0x00000001 +VIM_INTREQ .word 0xFFFFFE20 + + .endasmfunc + +;------------------------------------------------------------------------------- +; Work Around for Errata CORTEX-R4#57: +; +; Errata Description: +; Conditional VMRS APSR_Nzcv, FPSCR May Evaluate With Incorrect Flags +; Workaround: +; Disable out-of-order single-precision floating point +; multiply-accumulate instruction completion + + .def _errata_CORTEXR4_57_ + .asmfunc + +_errata_CORTEXR4_57_ + + mrc p15, #0, r0, c15, c0, #0 ; Read Secondary Auxiliary Control Register + orr r0, r0, #0x10000 ; Set BIT 16 (Set DOOFMACS) + mcr p15, #0, r0, c15, c0, #0 ; Write Secondary Auxiliary Control Register + bx lr + .endasmfunc + +;------------------------------------------------------------------------------- +; Work Around for Errata CORTEX-R4#66: +; +; Errata Description: +; Register Corruption During A Load-Multiple Instruction At +; an Exception Vector +; Workaround: +; Disable out-of-order completion for divide instructions in +; Auxiliary Control register + + .def _errata_CORTEXR4_66_ + .asmfunc + +_errata_CORTEXR4_66_ + + mrc p15, #0, r0, c1, c0, #1 ; Read Auxiliary Control register + orr r0, r0, #0x80 ; Set BIT 7 (Disable out-of-order completion + ; for divide instructions.) + mcr p15, #0, r0, c1, c0, #1 ; Write Auxiliary Control register + bx lr + .endasmfunc +;------------------------------------------------------------------------------- +; C++ construct table pointers + + .def __TI_PINIT_Base, __TI_PINIT_Limit + .weak SHT$$INIT_ARRAY$$Base, SHT$$INIT_ARRAY$$Limit + +__TI_PINIT_Base .long SHT$$INIT_ARRAY$$Base +__TI_PINIT_Limit .long SHT$$INIT_ARRAY$$Limit + + + +;------------------------------------------------------------------------------- + Index: firmware/source/sys_dma.c =================================================================== diff -u --- firmware/source/sys_dma.c (revision 0) +++ firmware/source/sys_dma.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,449 @@ +/** @file dma.c +* @brief DMA Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +#include "sys_dma.h" +#include "sys_vim.h" + +/** @fn void dmaEnable(void) +* @brief enables DMA module +* +* This function brings DMA out of reset +*/ +/* SourceId : DMA_SourceId_001 */ +/* DesignId : DMA_DesignId_001 */ +/* Requirements: HL_SR167 */ +void dmaEnable(void) +{ + dmaREG->GCTRL = 0x00010000U; /* enable dma */ + dmaREG->GCTRL |= 0x00000300U; /* stop at suspend */ +} + +/** @fn void dmaDisable(void) +* @brief disables DMA module +* +* This function disables DMA module +*/ +/* SourceId : DMA_SourceId_002 */ +/* DesignId : DMA_DesignId_002 */ +/* Requirements: HL_SR168 */ +void dmaDisable(void) +{ + /* Wait until DMA's external bus has completed data transfer */ + /*SAFETYMCUSW 134 S MR: 12.2 "Tool issue" */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((dmaREG->GCTRL & DMA_GCTRL_BUSBUSY) != 0U) + { + } /* Wait */ + /* Disable DMA module */ + dmaREG->GCTRL = 0U; +} + + +/** @fn void dmaReqAssign(uint32 channel,uint32 reqline) +* @brief Assign DMA request lines to channels +* @param[in] channel DMA channel +* @param[in] reqline DMA request line +* +* This function assigns DMA request lines to channels +*/ +/* SourceId : DMA_SourceId_003 */ +/* DesignId : DMA_DesignId_005 */ +/* Requirements: HL_SR169 */ +void dmaReqAssign(uint32 channel,uint32 reqline) +{ + register uint32 i=0U,j=0U; + + i = channel >> 2U; /* Find the register to configure */ + j = channel - (i << 2U); /* Find the offset of the type */ + j = 3U - j; /* reverse the byte order */ + j = j << 3U; /* find the bit location */ + + /* mapping channel 'i' to request line 'j' */ + dmaREG->DREQASI[i] &= ~(uint32)((uint32)0xFFU << j); + dmaREG->DREQASI[i] |= (reqline << j); +} + + +/** @fn uint32 dmaGetReq(uint32 channel) +* @brief Gets the request line number mapped to the selected channel +* @param[in] channel DMA channel +* +* This function returns the request line number mapped to the selected channel +*/ +/* SourceId : DMA_SourceId_004 */ +/* DesignId : DMA_DesignId_006 */ +/* Requirements: HL_SR170 */ +uint32 dmaGetReq(uint32 channel) +{ + register uint32 i=0U,j=0U; + + i = channel >> 2U; /* Find the register to configure */ + j = channel - (i << 2U); /* Find the offset of the type */ + j = 3U - j; /* reverse the byte order */ + j = j << 3U; /* find the bit location */ + return ((dmaREG->DREQASI[i] >> j) & 0xFFU); +} + + +/** @fn void dmaSetCtrlPacket(uint32 channel) +* @brief Set control packet +* +* This function sets control packet +*/ +/* SourceId : DMA_SourceId_005 */ +/* DesignId : DMA_DesignId_003 */ +/* Requirements: HL_SR171 */ +void dmaSetCtrlPacket(uint32 channel, g_dmaCTRL g_dmaCTRLPKT) +{ + register uint32 i=0U,j=0U; + + dmaRAMREG->PCP[channel].ISADDR = g_dmaCTRLPKT.SADD; + + dmaRAMREG->PCP[channel].IDADDR = g_dmaCTRLPKT.DADD; + + dmaRAMREG->PCP[channel].ITCOUNT = (g_dmaCTRLPKT.FRCNT << 16U) | g_dmaCTRLPKT.ELCNT; + + dmaRAMREG->PCP[channel].CHCTRL = (g_dmaCTRLPKT.RDSIZE << 14U) | (g_dmaCTRLPKT.WRSIZE << 12U) | (g_dmaCTRLPKT.TTYPE << 8U)| \ + (g_dmaCTRLPKT.ADDMODERD << 3U ) | (g_dmaCTRLPKT.ADDMODEWR << 1U ) | (g_dmaCTRLPKT.AUTOINIT); + + dmaRAMREG->PCP[channel].CHCTRL |= (g_dmaCTRLPKT.CHCTRL << 16U); + + dmaRAMREG->PCP[channel].EIOFF = (g_dmaCTRLPKT.ELDOFFSET << 16U) | (g_dmaCTRLPKT.ELSOFFSET); + + dmaRAMREG->PCP[channel].FIOFF = (g_dmaCTRLPKT.FRDOFFSET << 16U) | (g_dmaCTRLPKT.FRSOFFSET); + + i = channel >> 3U; /* Find the register to write */ + j = channel - (i << 3U); /* Find the offset of the 4th bit */ + j = 7U - j; /* Reverse the order of the 4th bit offset */ + j = j << 2U; /* Find the bit location of the 4th bit to write */ + + dmaREG->PAR[i] &= ~(uint32)((uint32)0xFU << j); + dmaREG->PAR[i] |= (g_dmaCTRLPKT.PORTASGN << j); +} + + + +/** @fn void dmaSetChEnable(uint32 channel,uint32 type) +* @brief Enable channel +* @param[in] channel DMA channel +* @param[in] type Type of triggering +* - DMA_HW: Enables the selected DMA channel for hardware triggering +* - DMA_SW: Enables the selected DMA channel for software triggering +* +* This function enables the DMA channel for hardware or software triggering +*/ +/* SourceId : DMA_SourceId_006 */ +/* DesignId : DMA_DesignId_004 */ +/* Requirements: HL_SR172 */ +void dmaSetChEnable(uint32 channel,uint32 type) +{ + if(type == (uint32)DMA_HW) + { + dmaREG->HWCHENAS = (uint32)1U << channel; + } + else if(type == (uint32)DMA_SW) + { + dmaREG->SWCHENAS = (uint32)1U << channel; + } + else + { + /* Empty */ + } +} + + + +/** @fn void dmaSetPriority(uint32 channel, dmaPRIORITY_t priority) +* @brief Assign Priority to the channel +* @param[in] channel DMA channel +* @param[in] priority Priority queue to which channel needs to be assigned +* - LOWPRIORITY : The selected channel will be assigned to low priority queue +* - HIGHPRIORITY: The selected channel will be assigned to high priority queue +* +* This function assigns the selected priority to the selected channel +*/ +/* SourceId : DMA_SourceId_007 */ +/* DesignId : DMA_DesignId_007 */ +/* Requirements: HL_SR173 */ +void dmaSetPriority(uint32 channel, dmaPRIORITY_t priority) +{ + if (priority == LOWPRIORITY) + { + dmaREG->CHPRIOR = (uint32)1U << channel; + } + else + { + dmaREG->CHPRIOS = (uint32)1U << channel; + } +} + + +/** @fn void dmaEnableInterrupt(uint32 channel, dmaInterrupt_t inttype) +* @brief Enable selected interrupt +* @param[in] channel DMA channel +* @param[in] inttype Interrupt to be enabled +* - FTC: Frame Transfer Complete Interrupt will be disabled for the selected channel +* - LFS: Last Frame Transfer Started Interrupt will be disabled for the selected channel +* - HBC: First Half Of Block Complete Interrupt will be disabled for the selected channel +* - BTC: Block transfer complete Interrupt will be disabled for the selected channel +* - BER: Bus Error Interrupt will be disabled for the selected channel +* +* This function enables the selected interrupt for the selected channel +*/ +/* SourceId : DMA_SourceId_008 */ +/* DesignId : DMA_DesignId_008 */ +/* Requirements: HL_SR174 */ +void dmaEnableInterrupt(uint32 channel, dmaInterrupt_t inttype) +{ + dmaREG->GCHIENAS = (uint32)1U << channel; + + switch (inttype) + { + case FTC: dmaREG->FTCINTENAS = (uint32)1U << channel; + break; + case LFS: dmaREG->LFSINTENAS = (uint32)1U << channel; + break; + case HBC: dmaREG->HBCINTENAS = (uint32)1U << channel; + break; + case BTC: dmaREG->BTCINTENAS = (uint32)1U << channel; + break; + default : + break; + } +} + + + +/** @fn void dmaDisableInterrupt(uint32 channel, dmaInterrupt_t inttype) +* @brief Disable selected interrupt +* @param[in] channel DMA channel +* @param[in] inttype Interrupt to be disabled +* - FTC: Frame Transfer Complete Interrupt will be disabled for the selected channel +* - LFS: Last Frame Transfer Started Interrupt will be disabled for the selected channel +* - HBC: First Half Of Block Complete Interrupt will be disabled for the selected channel +* - BTC: Block transfer complete Interrupt will be disabled for the selected channel +* - BER: Bus Error Interrupt will be disabled for the selected channel +* +* This function disables the selected interrupt for the selected channel +*/ +/* SourceId : DMA_SourceId_009 */ +/* DesignId : DMA_DesignId_009 */ +/* Requirements: HL_SR175 */ +void dmaDisableInterrupt(uint32 channel, dmaInterrupt_t inttype) +{ + switch (inttype) + { + case FTC: dmaREG->FTCINTENAR = (uint32)1U << channel; + break; + case LFS: dmaREG->LFSINTENAR = (uint32)1U << channel; + break; + case HBC: dmaREG->HBCINTENAR = (uint32)1U << channel; + break; + case BTC: dmaREG->BTCINTENAR = (uint32)1U << channel; + break; + default : + break; + } +} + + + +/** @fn void dmaDefineRegion(dmaREGION_t region, uint32 start_add, uint32 end_add) +* @brief Configure start and end address of the region +* @param[in] region Memory Region +* - DMA_REGION0 +* - DMA_REGION1 +* - DMA_REGION2 +* - DMA_REGION3 +* @param[in] start_add Start address of the the region +* @param[in] end_add End address of the region +* +* This function configure start and end address of the selected region +*/ +/* SourceId : DMA_SourceId_010 */ +/* DesignId : DMA_DesignId_010 */ +/* Requirements: HL_SR176 */ +void dmaDefineRegion(dmaREGION_t region, uint32 start_add, uint32 end_add) +{ + dmaREG->DMAMPR[region].STARTADD = start_add; + dmaREG->DMAMPR[region].ENDADD = end_add; +} + + + +/** @fn void dmaEnableRegion(dmaREGION_t region, dmaRegionAccess_t access, boolean intenable) +* @brief Enable the selected region +* @param[in] region Memory Region +* - DMA_REGION0 +* - DMA_REGION1 +* - DMA_REGION2 +* - DMA_REGION3 +* @param[in] access Access permission of the selected region +* - FULLACCESS +* - READONLY +* - WRITEONLY +* - NOACCESS +* @param[in] intenable Interrupt to be enabled or not +* - INTERRUPT_ENABLE : Enable interrupt for the selected region +* - INTERRUPT_DISABLE: Disable interrupt for the selected region +* +* This function enables the selected region with selected access permission with or without interrupt enable +*/ +/* SourceId : DMA_SourceId_011 */ +/* DesignId : DMA_DesignId_011 */ +/* Requirements: HL_SR177 */ +void dmaEnableRegion(dmaREGION_t region, dmaRegionAccess_t access, boolean intenable) +{ + dmaREG->DMAMPCTRL &= ~(uint32)((uint32)0xFFU << (region*8U)); + + /* Enable the region */ + dmaREG->DMAMPCTRL |= (uint32)1U << (region*8U); + + /* Set access permission for the region */ + dmaREG->DMAMPCTRL |= (uint32)access << ((region*8U) + 1U); + + if(intenable) + { + /* Enable interrupt */ + dmaREG->DMAMPCTRL |= (uint32)1U << ((region*8U) + 3U); + } +} + + + +/** @fn void dmaDisableRegion(dmaREGION_t region) +* @brief Disable the selected region +* @param[in] region Memory Region +* - DMA_REGION0 +* - DMA_REGION1 +* - DMA_REGION2 +* - DMA_REGION3 +* +* This function disables the selected region(no address checking done). +*/ +/* SourceId : DMA_SourceId_012 */ +/* DesignId : DMA_DesignId_012 */ +/* Requirements: HL_SR178 */ +void dmaDisableRegion(dmaREGION_t region) +{ + dmaREG->DMAMPCTRL &= ~(uint32)((uint32)1U << ((uint32)region*8U)); +} + + + +/** @fn void dmaEnableParityCheck(void) +* @brief Enable Parity Check +* +* This function enables parity check +*/ +/* SourceId : DMA_SourceId_013 */ +/* DesignId : DMA_DesignId_013 */ +/* Requirements: HL_SR179 */ +void dmaEnableParityCheck(void) +{ + dmaREG->DMAPCR = 0xAU; +} + + + +/** @fn void dmaDisableParityCheck(void) +* @brief Disable Parity Check +* +* This function disables parity check +*/ +/* SourceId : DMA_SourceId_014 */ +/* DesignId : DMA_DesignId_014 */ +/* Requirements: HL_SR180 */ +void dmaDisableParityCheck(void) +{ + dmaREG->DMAPCR = 0x5U; +} + +/** @fn void dmaGetConfigValue(dma_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : DMA_SourceId_015 */ +/* DesignId : DMA_DesignId_015 */ +/* Requirements: HL_SR183 */ +void dmaGetConfigValue(dma_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + {/* Do not pass Initial value as parameter as there is no DMA initialization API */ + } + else + { + config_reg->CONFIG_CHPRIOS = dmaREG->CHPRIOS; + config_reg->CONFIG_GCHIENAS = dmaREG->GCHIENAS; + config_reg->CONFIG_DREQASI[0U] = dmaREG->DREQASI[0U]; + config_reg->CONFIG_DREQASI[1U] = dmaREG->DREQASI[1U]; + config_reg->CONFIG_DREQASI[2U] = dmaREG->DREQASI[2U]; + config_reg->CONFIG_DREQASI[3U] = dmaREG->DREQASI[3U]; + config_reg->CONFIG_DREQASI[4U] = dmaREG->DREQASI[4U]; + config_reg->CONFIG_DREQASI[5U] = dmaREG->DREQASI[5U]; + config_reg->CONFIG_DREQASI[6U] = dmaREG->DREQASI[6U]; + config_reg->CONFIG_DREQASI[7U] = dmaREG->DREQASI[7U]; + config_reg->CONFIG_FTCINTENAS = dmaREG->FTCINTENAS; + config_reg->CONFIG_LFSINTENAS = dmaREG->LFSINTENAS; + config_reg->CONFIG_HBCINTENAS = dmaREG->HBCINTENAS; + config_reg->CONFIG_BTCINTENAS = dmaREG->BTCINTENAS; + config_reg->CONFIG_DMAPCR = dmaREG->DMAPCR; + config_reg->CONFIG_DMAMPCTRL = dmaREG->DMAMPCTRL; + } +} + + + + + Index: firmware/source/sys_intvecs.asm =================================================================== diff -u --- firmware/source/sys_intvecs.asm (revision 0) +++ firmware/source/sys_intvecs.asm (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,66 @@ +;------------------------------------------------------------------------------- +; sys_intvecs.asm +; +; Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +; +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions +; are met: +; +; Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; +; Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the +; distribution. +; +; Neither the name of Texas Instruments Incorporated nor the names of +; its contributors may be used to endorse or promote products derived +; from this software without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +; +; +; + + .sect ".intvecs" + .arm + +;------------------------------------------------------------------------------- +; import reference for interrupt routines + + .ref _c_int00 + .ref _dabort + .ref phantomInterrupt + .def resetEntry + +;------------------------------------------------------------------------------- +; interrupt vectors + +resetEntry + b _c_int00 +undefEntry + b undefEntry +svcEntry + b svcEntry +prefetchEntry + b prefetchEntry + b _dabort + b phantomInterrupt + ldr pc,[pc,#-0x1b0] + ldr pc,[pc,#-0x1b0] + + +;------------------------------------------------------------------------------- Index: firmware/source/sys_link.cmd =================================================================== diff -u --- firmware/source/sys_link.cmd (revision 0) +++ firmware/source/sys_link.cmd (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,97 @@ +/*----------------------------------------------------------------------------*/ +/* sys_link.cmd */ +/* */ +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +/* */ +/*----------------------------------------------------------------------------*/ +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + + +/*----------------------------------------------------------------------------*/ +/* Linker Settings */ + +--retain="*(.intvecs)" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/*----------------------------------------------------------------------------*/ +/* Memory Map */ + +MEMORY +{ + VECTORS (X) : origin=0x00000000 length=0x00000020 + FLASH0 (RX) : origin=0x00000020 length=0x0013FFE0 + STACKS (RW) : origin=0x08000000 length=0x00001500 + RAM (RW) : origin=0x08001500 length=0x0002EB00 + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + +/*----------------------------------------------------------------------------*/ +/* Section Configuration */ + +SECTIONS +{ + .intvecs : {} > VECTORS + .text : {} > FLASH0 + .const : {} > FLASH0 + .cinit : {} > FLASH0 + .pinit : {} > FLASH0 + .bss : {} > RAM + .data : {} > RAM + .sysmem : {} > RAM + + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + + +/*----------------------------------------------------------------------------*/ +/* Misc */ + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ +/*----------------------------------------------------------------------------*/ Index: firmware/source/sys_main.c =================================================================== diff -u --- firmware/source/sys_main.c (revision 0) +++ firmware/source/sys_main.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,79 @@ +/** @file sys_main.c +* @brief Application main file +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains an empty main function, +* which can be used for the application. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Include Files */ + +#include "sys_common.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @fn void main(void) +* @brief Application main function +* @note This function is empty by default. +* +* This function is called after startup. +* The user can use this function to implement the application. +*/ + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +uint8 emacAddress[6U] = {0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU}; +uint32 emacPhyAddress = 0U; + +int main(void) +{ +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + + return 0; +} + + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ Index: firmware/source/sys_mpu.asm =================================================================== diff -u --- firmware/source/sys_mpu.asm (revision 0) +++ firmware/source/sys_mpu.asm (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,470 @@ +;------------------------------------------------------------------------------- +; sys_mpu.asm +; +; Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +; +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions +; are met: +; +; Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; +; Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the +; distribution. +; +; Neither the name of Texas Instruments Incorporated nor the names of +; its contributors may be used to endorse or promote products derived +; from this software without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +; +; +; + + .text + .arm + + +;------------------------------------------------------------------------------- +; Initalize Mpu +; SourceId : MPU_SourceId_001 +; DesignId : MPU_DesignId_001 +; Requirements : HL_SR487 + + .def _mpuInit_ + .asmfunc + +_mpuInit_ + ; Disable mpu + mrc p15, #0, r0, c1, c0, #0 + bic r0, r0, #1 + dsb + mcr p15, #0, r0, c1, c0, #0 + isb + ; Disable background region + mrc p15, #0, r0, c1, c0, #0 + bic r0, r0, #0x20000 + mcr p15, #0, r0, c1, c0, #0 + ; Setup region 1 + mov r0, #0 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, r1Base + mcr p15, #0, r0, c6, c1, #0 + mov r0, #0x0008 + orr r0, r0, #0x1000 + mcr p15, #0, r0, c6, c1, #4 + movw r0, #((1 << 15) + (1 << 14) + (1 << 13) + (1 << 12) + (1 << 11) + (1 << 10) + (1 << 9) + (1 << 8) + (0x1F << 1) + (1)) + mcr p15, #0, r0, c6, c1, #2 + ; Setup region 2 + mov r0, #1 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, r2Base + mcr p15, #0, r0, c6, c1, #0 + mov r0, #0x0008 + orr r0, r0, #0x0600 + mcr p15, #0, r0, c6, c1, #4 + movw r0, #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 << 9) + (0 << 8) + (0x15 << 1) + (1)) + mcr p15, #0, r0, c6, c1, #2 + ; Setup region + mov r0, #2 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, r3Base + mcr p15, #0, r0, c6, c1, #0 + mov r0, #0x0008 + orr r0, r0, #0x0300 + mcr p15, #0, r0, c6, c1, #4 + movw r0, #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 << 9) + (0 << 8) + (0x11 << 1) + (1)) + mcr p15, #0, r0, c6, c1, #2 + ; Setup region 4 + mov r0, #3 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, r4Base + mcr p15, #0, r0, c6, c1, #0 + mov r0, #0x0008 + orr r0, r0, #0x0300 + mcr p15, #0, r0, c6, c1, #4 + movw r0, #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 << 9) + (0 << 8) + (0x11 << 1) + (1)) + mcr p15, #0, r0, c6, c1, #2 + ; Setup region 5 + mov r0, #4 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, r5Base + mcr p15, #0, r0, c6, c1, #0 + mov r0, #0x0000 + orr r0, r0, #0x0300 + mcr p15, #0, r0, c6, c1, #4 + movw r0, #((1 << 15) + (1 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 << 9) + (0 << 8) + (0x19 << 1) + (1)) + mcr p15, #0, r0, c6, c1, #2 + ; Setup region 6 + mov r0, #5 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, r6Base + mcr p15, #0, r0, c6, c1, #0 + mov r0, #0x0000 + orr r0, r0, #0x0300 + mcr p15, #0, r0, c6, c1, #4 + movw r0, #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 << 9) + (0 << 8) + (0x1A << 1) + (1)) + mcr p15, #0, r0, c6, c1, #2 + ; Setup region 7 + mov r0, #6 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, r7Base + mcr p15, #0, r0, c6, c1, #0 + mov r0, #0x0008 + orr r0, r0, #0x1200 + mcr p15, #0, r0, c6, c1, #4 + movw r0, #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 << 9) + (0 << 8) + (0x16 << 1) + (1)) + mcr p15, #0, r0, c6, c1, #2 + ; Setup region 8 + mov r0, #7 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, r8Base + mcr p15, #0, r0, c6, c1, #0 + mov r0, #0x0010 + orr r0, r0, #0x1300 + mcr p15, #0, r0, c6, c1, #4 + movw r0, #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 << 9) + (0 << 8) + (0x17 << 1) + (1)) + mcr p15, #0, r0, c6, c1, #2 + ; Setup region 9 + mov r0, #8 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, r9Base + mcr p15, #0, r0, c6, c1, #0 + mov r0, #0x0010 + orr r0, r0, #0x1300 + mcr p15, #0, r0, c6, c1, #4 + movw r0, #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 << 9) + (0 << 8) + (0x08 << 1) + (1)) + mcr p15, #0, r0, c6, c1, #2 + ; Setup region 10 + mov r0, #9 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, r10Base + mcr p15, #0, r0, c6, c1, #0 + mov r0, #0x0010 + orr r0, r0, #0x1300 + mcr p15, #0, r0, c6, c1, #4 + movw r0, #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 << 9) + (0 << 8) + (0x17 << 1) + (1)) + mcr p15, #0, r0, c6, c1, #2 + ; Setup region 11 + mov r0, #10 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, r11Base + mcr p15, #0, r0, c6, c1, #0 + mov r0, #0x0008 + orr r0, r0, #0x1100 + mcr p15, #0, r0, c6, c1, #4 + movw r0, #((1 << 15) + (1 << 14) + (1 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 << 9) + (0 << 8) + (0x0A << 1) + (0)) + mcr p15, #0, r0, c6, c1, #2 + ; Setup region 12 + mov r0, #11 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, r12Base + mcr p15, #0, r0, c6, c1, #0 + mov r0, #0x0008 + orr r0, r0, #0x1300 + mcr p15, #0, r0, c6, c1, #4 + movw r0, #((1 << 15) + (1 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 << 9) + (0 << 8) + (0x15 << 1) + (0)) + mcr p15, #0, r0, c6, c1, #2 + + + ; Enable mpu background region + mrc p15, #0, r0, c1, c0, #0 + orr r0, r0, #0x20000 + mcr p15, #0, r0, c1, c0, #0 + ; Enable mpu + mrc p15, #0, r0, c1, c0, #0 + orr r0, r0, #1 + dsb + mcr p15, #0, r0, c1, c0, #0 + isb + bx lr + +r1Base .word 0x00000000 +r2Base .word 0x00000000 +r3Base .word 0x08000000 +r4Base .word 0x08400000 +r5Base .word 0x60000000 +r6Base .word 0x80000000 +r7Base .word 0xF0000000 +r8Base .word 0xFC000000 +r9Base .word 0xFE000000 +r10Base .word 0xFF000000 +r11Base .word 0x08001000 +r12Base .word 0x20000000 + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Enable Mpu +; SourceId : MPU_SourceId_002 +; DesignId : MPU_DesignId_002 +; Requirements : HL_SR488 + + .def _mpuEnable_ + .asmfunc + +_mpuEnable_ + + mrc p15, #0, r0, c1, c0, #0 + orr r0, r0, #1 + dsb + mcr p15, #0, r0, c1, c0, #0 + isb + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Disable Mpu +; SourceId : MPU_SourceId_003 +; DesignId : MPU_DesignId_003 +; Requirements : HL_SR488 + + .def _mpuDisable_ + .asmfunc + +_mpuDisable_ + + mrc p15, #0, r0, c1, c0, #0 + bic r0, r0, #1 + dsb + mcr p15, #0, r0, c1, c0, #0 + isb + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Enable Mpu background region +; SourceId : MPU_SourceId_004 +; DesignId : MPU_DesignId_004 +; Requirements : HL_SR488 + + .def _mpuEnableBackgroundRegion_ + .asmfunc + +_mpuEnableBackgroundRegion_ + + mrc p15, #0, r0, c1, c0, #0 + orr r0, r0, #0x20000 + mcr p15, #0, r0, c1, c0, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Disable Mpu background region +; SourceId : MPU_SourceId_005 +; DesignId : MPU_DesignId_005 +; Requirements : HL_SR488 + + .def _mpuDisableBackgroundRegion_ + .asmfunc + +_mpuDisableBackgroundRegion_ + + mrc p15, #0, r0, c1, c0, #0 + bic r0, r0, #0x20000 + mcr p15, #0, r0, c1, c0, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Returns number of implemented Mpu regions +; SourceId : MPU_SourceId_006 +; DesignId : MPU_DesignId_006 +; Requirements : HL_SR490 + + .def _mpuGetNumberOfRegions_ + .asmfunc + +_mpuGetNumberOfRegions_ + + mrc p15, #0, r0, c0, c0, #4 + uxtb r0, r0, ROR #8 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Returns the type of the implemented mpu regions +; SourceId : MPU_SourceId_007 +; DesignId : MPU_DesignId_007 +; Requirements : HL_SR490 + + .def _mpuAreRegionsSeparate_ + .asmfunc + +_mpuAreRegionsSeparate_ + + mrc p15, #0, r0, c0, c0, #4 + uxtb r0, r0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Set mpu region number +; SourceId : MPU_SourceId_008 +; DesignId : MPU_DesignId_008 +; Requirements : HL_SR489 + + .def _mpuSetRegion_ + .asmfunc + +_mpuSetRegion_ + + mcr p15, #0, r0, c6, c2, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get mpu region number +; SourceId : MPU_SourceId_009 +; DesignId : MPU_DesignId_009 +; Requirements : HL_SR490 + + .def _mpuGetRegion_ + .asmfunc + +_mpuGetRegion_ + + mrc p15, #0, r0, c6, c2, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Set base address +; SourceId : MPU_SourceId_010 +; DesignId : MPU_DesignId_010 +; Requirements : HL_SR489 + + .def _mpuSetRegionBaseAddress_ + .asmfunc + +_mpuSetRegionBaseAddress_ + + mcr p15, #0, r0, c6, c1, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get base address +; SourceId : MPU_SourceId_011 +; DesignId : MPU_DesignId_011 +; Requirements : HL_SR490 + + .def _mpuGetRegionBaseAddress_ + .asmfunc + +_mpuGetRegionBaseAddress_ + + mrc p15, #0, r0, c6, c1, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Set type and permission +; SourceId : MPU_SourceId_012 +; DesignId : MPU_DesignId_012 +; Requirements : HL_SR489 + + .def _mpuSetRegionTypeAndPermission_ + .asmfunc + +_mpuSetRegionTypeAndPermission_ + + orr r0, r0, r1 + mcr p15, #0, r0, c6, c1, #4 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get type +; SourceId : MPU_SourceId_013 +; DesignId : MPU_DesignId_013 +; Requirements : HL_SR490 + + .def _mpuGetRegionType_ + .asmfunc + +_mpuGetRegionType_ + + mrc p15, #0, r0, c6, c1, #4 + bic r0, r0, #0xFF00 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get permission +; SourceId : MPU_SourceId_014 +; DesignId : MPU_DesignId_014 +; Requirements : HL_SR490 + + .def _mpuGetRegionPermission_ + .asmfunc + +_mpuGetRegionPermission_ + + mrc p15, #0, r0, c6, c1, #4 + bic r0, r0, #0xFF + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Set region size register value +; SourceId : MPU_SourceId_015 +; DesignId : MPU_DesignId_015 +; Requirements : HL_SR489 + + .def _mpuSetRegionSizeRegister_ + .asmfunc + +_mpuSetRegionSizeRegister_ + + + mcr p15, #0, r0, c6, c1, #2 + bx lr + + .endasmfunc + + + +;------------------------------------------------------------------------------- + Index: firmware/source/sys_pcr.c =================================================================== diff -u --- firmware/source/sys_pcr.c (revision 0) +++ firmware/source/sys_pcr.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,725 @@ +/** @file sys_pcr.c +* @brief PCR Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#include "sys_pcr.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @fn void peripheral_Frame_Protection_Set(peripheral_Frame_Select_t peripheral_Frame) +* @brief Set the peripheral protection of the selected frame +* @param[in] peripheral_Frame - Peripheral frame to be protected +* +* This function sets the protection for the selected frame. +*/ +/* SourceId : PCR_SourceId_001 */ +/* DesignId : PCR_DesignId_001 */ +/* Requirements : HL_SR41 */ +void peripheral_Frame_Protection_Set(peripheral_Frame_Select_t peripheral_Frame) +{ + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + uint32 chip_select_grp; + uint32 Quarant_selct; + + chip_select_grp = (peripheral_Frame.Peripheral_CS >> 3U); + Quarant_selct = (uint32)(peripheral_Frame.Peripheral_Quadrant << ((peripheral_Frame.Peripheral_CS & 7U) << 2U)); + + if (chip_select_grp >= 3U) + { + pcrREG->PPROTSET3 = Quarant_selct; + } + else if (chip_select_grp >= 2U) + { + pcrREG->PPROTSET2 = Quarant_selct; + } + else if (chip_select_grp >= 1U) + { + pcrREG->PPROTSET1 = Quarant_selct; + } + else + { + pcrREG->PPROTSET0 = Quarant_selct; + } + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + +/** @fn void peripheral_Frame_Protection_Clr(peripheral_Frame_Select_t peripheral_Frame) +* @brief Clear the peripheral protection of the selected frame +* @param[in] peripheral_Frame - Peripheral frame to be out of protection +* +* This function clears the protection set for the selected frame. +*/ +/* SourceId : PCR_SourceId_002 */ +/* DesignId : PCR_DesignId_002 */ +/* Requirements : HL_SR42 */ +void peripheral_Frame_Protection_Clr(peripheral_Frame_Select_t peripheral_Frame) +{ + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + + uint32 chip_select_grp; + uint32 Quarant_selct; + + chip_select_grp = (peripheral_Frame.Peripheral_CS >> 3U); + Quarant_selct = (uint32)(peripheral_Frame.Peripheral_Quadrant << ((peripheral_Frame.Peripheral_CS & 7U) << 2U)); + + if (chip_select_grp >= 3U) + { + pcrREG->PPROTCLR3 = Quarant_selct; + } + else if (chip_select_grp >= 2U) + { + pcrREG->PPROTCLR2 = Quarant_selct; + } + else if (chip_select_grp >= 1U) + { + pcrREG->PPROTCLR1 = Quarant_selct; + } + else + { + pcrREG->PPROTCLR0 = Quarant_selct; + } + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + +/** @fn void peripheral_Frame_Powerdown_Set(peripheral_Frame_Select_t peripheral_Frame) +* @brief Take the selected peripheral to powerdown +* @param[in] peripheral_Frame - Peripheral frame to be taken to powerdown +* +* This function will set the selected peripheral frame to powerdown. +*/ +/* SourceId : PCR_SourceId_003 */ +/* DesignId : PCR_DesignId_003 */ +/* Requirements : HL_SR43 */ +void peripheral_Frame_Powerdown_Set(peripheral_Frame_Select_t peripheral_Frame) +{ + +/* USER CODE BEGIN (8) */ +/* USER CODE END */ + + uint32 chip_select_grp; + uint32 Quarant_selct; + + chip_select_grp = (peripheral_Frame.Peripheral_CS >> 3U); + Quarant_selct = (uint32)(peripheral_Frame.Peripheral_Quadrant << ((peripheral_Frame.Peripheral_CS & 7U) << 2U)); + + if (chip_select_grp >= 3U) + { + pcrREG->PSPWRDWNSET3 = Quarant_selct; + } + else if (chip_select_grp >= 2U) + { + pcrREG->PSPWRDWNSET2 = Quarant_selct; + } + else if (chip_select_grp >= 1U) + { + pcrREG->PSPWRDWNSET1 = Quarant_selct; + } + else + { + pcrREG->PSPWRDWNSET0 = Quarant_selct; + } + +/* USER CODE BEGIN (9) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (10) */ +/* USER CODE END */ + +/** @fn void peripheral_Frame_Powerdown_Clr(peripheral_Frame_Select_t peripheral_Frame) +* @brief Bring the selected peripheral frame out of powerdown +* @param[in] peripheral_Frame - Peripheral frame to be taken out of powerdown +* +* This function will bring the selected peripheral frame out of powerdown. +*/ +/* SourceId : PCR_SourceId_004 */ +/* DesignId : PCR_DesignId_004 */ +/* Requirements : HL_SR44 */ +void peripheral_Frame_Powerdown_Clr(peripheral_Frame_Select_t peripheral_Frame) +{ + +/* USER CODE BEGIN (11) */ +/* USER CODE END */ + + uint32 chip_select_grp; + uint32 Quarant_selct; + + chip_select_grp = (peripheral_Frame.Peripheral_CS >> 3U); + Quarant_selct = (uint32)(peripheral_Frame.Peripheral_Quadrant << ((peripheral_Frame.Peripheral_CS & 7U) << 2U)); + + if (chip_select_grp >= 3U) + { + pcrREG->PSPWRDWNCLR3 = Quarant_selct; + } + else if (chip_select_grp >= 2U) + { + pcrREG->PSPWRDWNCLR2 = Quarant_selct; + } + else if (chip_select_grp >= 1U) + { + pcrREG->PSPWRDWNCLR1 = Quarant_selct; + } + else + { + pcrREG->PSPWRDWNCLR0 = Quarant_selct; + } +/* USER CODE BEGIN (12) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (13) */ +/* USER CODE END */ + +/** @fn void peripheral_Mem_Frame_Prot_Set(peripheral_MemoryFrame_CS_t peripheral_Memory_Frame_CS) +* @brief Set the peripheral memory protection of the selected frame +* @param[in] peripheral_Memory_Frame_CS - Peripheral memory frame to be protected +* +* This function sets the protection for the selected peripheral memory frame. +*/ +/* SourceId : PCR_SourceId_005 */ +/* DesignId : PCR_DesignId_017 */ +/* Requirements : HL_SR57 */ +void peripheral_Mem_Frame_Prot_Set(peripheral_MemoryFrame_CS_t peripheral_Memory_Frame_CS) +{ + +/* USER CODE BEGIN (14) */ +/* USER CODE END */ + + uint32 chip_select_grp; + + chip_select_grp = (peripheral_Memory_Frame_CS >> 5U); + + if (chip_select_grp >= 1U) + { + pcrREG->PMPROTSET1 = (uint32)1U << (peripheral_Memory_Frame_CS & 0xFU); + } + else + { + pcrREG->PMPROTSET0 = (uint32)1U << peripheral_Memory_Frame_CS; + } + +/* USER CODE BEGIN (15) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (16) */ +/* USER CODE END */ + +/** @fn void peripheral_Mem_Frame_Prot_Clr(peripheral_MemoryFrame_CS_t peripheral_Memory_Frame_CS) +* @brief Clear the peripheral memory protection of the selected frame +* @param[in] peripheral_Memory_Frame_CS - Peripheral memory frame to be cleared from protection +* +* This function clears the protection set for the selected peripheral memory frame. +*/ +/* SourceId : PCR_SourceId_006 */ +/* DesignId : PCR_DesignId_018 */ +/* Requirements : HL_SR58 */ +void peripheral_Mem_Frame_Prot_Clr(peripheral_MemoryFrame_CS_t peripheral_Memory_Frame_CS) +{ + +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + + uint32 chip_select_grp; + + chip_select_grp = (peripheral_Memory_Frame_CS >> 5U); + + if (chip_select_grp >= 1U) + { + pcrREG->PMPROTCLR1 = (uint32)1U << (peripheral_Memory_Frame_CS & 0xFU); + } + else + { + pcrREG->PMPROTCLR0 = (uint32)1U << peripheral_Memory_Frame_CS; + } + +/* USER CODE BEGIN (18) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (19) */ +/* USER CODE END */ + +/** @fn void peripheral_Mem_Frame_Pwrdwn_Set(peripheral_MemoryFrame_CS_t peripheral_Memory_Frame_CS) +* @brief Take the selected peripheral memory frame to powerdown +* @param[in] peripheral_Memory_Frame_CS - Peripheral memory frame to be taken to powerdown +* +* This function will set the selected peripheral memory frame to powerdown. +*/ +/* SourceId : PCR_SourceId_007 */ +/* DesignId : PCR_DesignId_019 */ +/* Requirements : HL_SR59 */ +void peripheral_Mem_Frame_Pwrdwn_Set(peripheral_MemoryFrame_CS_t peripheral_Memory_Frame_CS) +{ + +/* USER CODE BEGIN (20) */ +/* USER CODE END */ + + uint32 chip_select_grp; + + chip_select_grp = (peripheral_Memory_Frame_CS >> 5U); + + if (chip_select_grp >= 1U) + { + pcrREG->PCSPWRDWNSET0 = (uint32)1U << (peripheral_Memory_Frame_CS & 0xFU); + } + else + { + pcrREG->PCSPWRDWNSET1 = (uint32)1U << peripheral_Memory_Frame_CS; + } + +/* USER CODE BEGIN (21) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ + +/** @fn void peripheral_Mem_Frame_Pwrdwn_Clr (peripheral_MemoryFrame_CS_t peripheral_Memory_Frame_CS) +* @brief Bring the selected peripheral Memory frame out of powerdown +* @param[in] peripheral_Memory_Frame_CS - Peripheral memory frame to be taken out of powerdown +* +* This function will bring the selected peripheral memory frame out of powerdown. +*/ +/* SourceId : PCR_SourceId_008 */ +/* DesignId : PCR_DesignId_020 */ +/* Requirements : HL_SR60 */ +void peripheral_Mem_Frame_Pwrdwn_Clr (peripheral_MemoryFrame_CS_t peripheral_Memory_Frame_CS) +{ + +/* USER CODE BEGIN (23) */ +/* USER CODE END */ + + uint32 chip_select_grp; + + chip_select_grp = (peripheral_Memory_Frame_CS >> 5U); + + if (chip_select_grp >= 1U) + { + pcrREG->PCSPWRDWNCLR0 = (uint32)1U << (peripheral_Memory_Frame_CS & 0xFU); + } + else + { + pcrREG->PCSPWRDWNCLR1 = (uint32)1U << peripheral_Memory_Frame_CS; + } + +/* USER CODE BEGIN (24) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (25) */ +/* USER CODE END */ + +/** @fn void peripheral_Protection_Set(peripheral_Quad_ChipSelect_t peripheral_Quad_CS) +* @brief Set the peripheral protection of all the selected frames +* @param[in] peripheral_Quad_CS - All Peripheral frames to be protected +* +* This function sets the protection for all the selected frames. +*/ +/* SourceId : PCR_SourceId_009 */ +/* DesignId : PCR_DesignId_005 */ +/* Requirements : HL_SR45 */ +void peripheral_Protection_Set(peripheral_Quad_ChipSelect_t peripheral_Quad_CS) +{ + +/* USER CODE BEGIN (26) */ +/* USER CODE END */ + + pcrREG->PPROTSET0 = peripheral_Quad_CS.Peripheral_Quad0_3_CS0_7; + pcrREG->PPROTSET1 = peripheral_Quad_CS.Peripheral_Quad4_7_CS8_15; + pcrREG->PPROTSET2 = peripheral_Quad_CS.Peripheral_Quad8_11_CS16_23; + pcrREG->PPROTSET3 = peripheral_Quad_CS.Peripheral_Quad12_15_CS24_31; + +/* USER CODE BEGIN (27) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (28) */ +/* USER CODE END */ + +/** @fn void peripheral_Protection_Clr(peripheral_Quad_ChipSelect_t peripheral_Quad_CS) +* @brief Clear the peripheral protection of all the selected frames +* @param[in] peripheral_Quad_CS - All Peripheral frames to be out of protection. +* +* This function clears the protection set for all the selected frame. +*/ +/* SourceId : PCR_SourceId_010 */ +/* DesignId : PCR_DesignId_006 */ +/* Requirements : HL_SR46 */ +void peripheral_Protection_Clr(peripheral_Quad_ChipSelect_t peripheral_Quad_CS) +{ + +/* USER CODE BEGIN (29) */ +/* USER CODE END */ + + pcrREG->PPROTCLR0 = peripheral_Quad_CS.Peripheral_Quad0_3_CS0_7; + pcrREG->PPROTCLR1 = peripheral_Quad_CS.Peripheral_Quad4_7_CS8_15; + pcrREG->PPROTCLR2 = peripheral_Quad_CS.Peripheral_Quad8_11_CS16_23; + pcrREG->PPROTCLR3 = peripheral_Quad_CS.Peripheral_Quad12_15_CS24_31; + +/* USER CODE BEGIN (30) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (31) */ +/* USER CODE END */ + +/** @fn void peripheral_Powerdown_Set(peripheral_Quad_ChipSelect_t peripheral_Quad_CS) +* @brief Take all the selected peripheral frame to powerdown +* @param[in] peripheral_Quad_CS - Peripheral frames to be taken to powerdown +* +* This function will set all the selected peripheral frame to powerdown. +*/ +/* SourceId : PCR_SourceId_011 */ +/* DesignId : PCR_DesignId_008 */ +/* Requirements : HL_SR48 */ +void peripheral_Powerdown_Set(peripheral_Quad_ChipSelect_t peripheral_Quad_CS) +{ + +/* USER CODE BEGIN (32) */ +/* USER CODE END */ + + pcrREG->PSPWRDWNSET0 = peripheral_Quad_CS.Peripheral_Quad0_3_CS0_7; + pcrREG->PSPWRDWNSET1 = peripheral_Quad_CS.Peripheral_Quad4_7_CS8_15; + pcrREG->PSPWRDWNSET2 = peripheral_Quad_CS.Peripheral_Quad8_11_CS16_23; + pcrREG->PSPWRDWNSET3 = peripheral_Quad_CS.Peripheral_Quad12_15_CS24_31; + +/* USER CODE BEGIN (33) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (34) */ +/* USER CODE END */ + +/** @fn void peripheral_Powerdown_Clr(peripheral_Quad_ChipSelect_t peripheral_Quad_CS) +* @brief Bring all the selected peripheral frame out of powerdown +* @param[in] peripheral_Quad_CS - Peripheral frames to be taken out of powerdown +* +* This function will bring all the selected peripheral frame out of powerdown. +*/ +/* SourceId : PCR_SourceId_012 */ +/* DesignId : PCR_DesignId_009 */ +/* Requirements : HL_SR49 */ +void peripheral_Powerdown_Clr(peripheral_Quad_ChipSelect_t peripheral_Quad_CS) +{ + +/* USER CODE BEGIN (35) */ +/* USER CODE END */ + + pcrREG->PSPWRDWNCLR0 = peripheral_Quad_CS.Peripheral_Quad0_3_CS0_7; + pcrREG->PSPWRDWNCLR1 = peripheral_Quad_CS.Peripheral_Quad4_7_CS8_15; + pcrREG->PSPWRDWNCLR2 = peripheral_Quad_CS.Peripheral_Quad8_11_CS16_23; + pcrREG->PSPWRDWNCLR3 = peripheral_Quad_CS.Peripheral_Quad12_15_CS24_31; + +/* USER CODE BEGIN (36) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (37) */ +/* USER CODE END */ + +/** @fn void peripheral_Memory_Protection_Set(peripheral_Memory_ChipSelect_t peripheral_Memory_CS) +* @brief Set the peripheral memory protection of all the selected frame +* @param[in] peripheral_Memory_CS - Peripheral memory frames to be protected +* +* This function sets the protection for all the selected peripheral memory frame. +*/ +/* SourceId : PCR_SourceId_013 */ +/* DesignId : PCR_DesignId_011 */ +/* Requirements : HL_SR51 */ +void peripheral_Memory_Protection_Set(peripheral_Memory_ChipSelect_t peripheral_Memory_CS) +{ + +/* USER CODE BEGIN (38) */ +/* USER CODE END */ + + pcrREG->PMPROTSET0 = peripheral_Memory_CS.Peripheral_Mem_CS0_31; + pcrREG->PMPROTSET1 = peripheral_Memory_CS.Peripheral_Mem_CS32_63; + +/* USER CODE BEGIN (39) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (40) */ +/* USER CODE END */ + +/** @fn void peripheral_Memory_Protection_Clr(peripheral_Memory_ChipSelect_t peripheral_Memory_CS) +* @brief Clear the peripheral memory protection of all the selected frame +* @param[in] peripheral_Memory_CS - Peripheral memory frames to be cleared from protection +* +* This function clears the protection set for all the selected peripheral memory frame. +*/ +/* SourceId : PCR_SourceId_014 */ +/* DesignId : PCR_DesignId_012 */ +/* Requirements : HL_SR52 */ +void peripheral_Memory_Protection_Clr(peripheral_Memory_ChipSelect_t peripheral_Memory_CS) +{ + +/* USER CODE BEGIN (41) */ +/* USER CODE END */ + + pcrREG->PMPROTCLR0 = peripheral_Memory_CS.Peripheral_Mem_CS0_31; + pcrREG->PMPROTCLR1 = peripheral_Memory_CS.Peripheral_Mem_CS32_63; + +/* USER CODE BEGIN (42) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (43) */ +/* USER CODE END */ + +/** @fn void peripheral_Memory_Powerdown_Set(peripheral_Memory_ChipSelect_t peripheral_Memory_CS) +* @brief Take all the selected peripheral memory frame to powerdown +* @param[in] peripheral_Memory_CS - Peripheral memory frames to be taken to powerdown +* +* This function will set all the selected peripheral memory frame to powerdown. +*/ +/* SourceId : PCR_SourceId_015 */ +/* DesignId : PCR_DesignId_014 */ +/* Requirements : HL_SR54 */ +void peripheral_Memory_Powerdown_Set(peripheral_Memory_ChipSelect_t peripheral_Memory_CS) +{ + +/* USER CODE BEGIN (44) */ +/* USER CODE END */ + + pcrREG->PCSPWRDWNSET0 = peripheral_Memory_CS.Peripheral_Mem_CS0_31; + pcrREG->PCSPWRDWNSET1 = peripheral_Memory_CS.Peripheral_Mem_CS32_63; + +/* USER CODE BEGIN (45) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (46) */ +/* USER CODE END */ + +/** @fn void peripheral_Memory_Powerdown_Clr(peripheral_Memory_ChipSelect_t peripheral_Memory_CS) +* @brief Bring all the selected peripheral Memory frame out of powerdown +* @param[in] peripheral_Memory_CS - Peripheral memory frames to be taken out of powerdown +* +* This function will bring all the selected peripheral memory frame out of powerdown. +*/ +/* SourceId : PCR_SourceId_016 */ +/* DesignId : PCR_DesignId_015 */ +/* Requirements : HL_SR55 */ +void peripheral_Memory_Powerdown_Clr(peripheral_Memory_ChipSelect_t peripheral_Memory_CS) +{ + +/* USER CODE BEGIN (47) */ +/* USER CODE END */ + + pcrREG->PCSPWRDWNSET0 = peripheral_Memory_CS.Peripheral_Mem_CS0_31; + pcrREG->PCSPWRDWNCLR0 = peripheral_Memory_CS.Peripheral_Mem_CS32_63; + +/* USER CODE BEGIN (48) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (49) */ +/* USER CODE END */ + +/** @fn void peripheral_Powerdown_Status(peripheral_Quad_ChipSelect_t* peripheral_Quad_CS) +* @brief Get the powerdown status of the peripheral frames. +* @param[out] peripheral_Quad_CS Peripheral frames power down status +* +* This function gets the powerdown status of the peripheral frames. +*/ +/* SourceId : PCR_SourceId_017 */ +/* DesignId : PCR_DesignId_010 */ +/* Requirements : HL_SR50 */ +void peripheral_Powerdown_Status(peripheral_Quad_ChipSelect_t* peripheral_Quad_CS) +{ + +/* USER CODE BEGIN (50) */ +/* USER CODE END */ + + peripheral_Quad_CS->Peripheral_Quad0_3_CS0_7 = pcrREG->PSPWRDWNSET0; + peripheral_Quad_CS->Peripheral_Quad4_7_CS8_15 = pcrREG->PSPWRDWNSET1; + peripheral_Quad_CS->Peripheral_Quad8_11_CS16_23 = pcrREG->PSPWRDWNSET2; + peripheral_Quad_CS->Peripheral_Quad12_15_CS24_31 = pcrREG->PSPWRDWNSET3; + +/* USER CODE BEGIN (51) */ +/* USER CODE END */ + +} + +/* USER CODE BEGIN (52) */ +/* USER CODE END */ + +/** @fn void peripheral_Protection_Status(peripheral_Quad_ChipSelect_t* peripheral_Quad_CS ) +* @brief Get the protection status of the peripheral frames +* @param[out] peripheral_Quad_CS Peripheral frames protection status +* +* This function gets the protection status of the peripheral frames. +*/ +/* SourceId : PCR_SourceId_018 */ +/* DesignId : PCR_DesignId_007 */ +/* Requirements : HL_SR47 */ +void peripheral_Protection_Status(peripheral_Quad_ChipSelect_t* peripheral_Quad_CS) +{ + +/* USER CODE BEGIN (53) */ +/* USER CODE END */ + + peripheral_Quad_CS->Peripheral_Quad0_3_CS0_7 = pcrREG->PPROTSET0; + peripheral_Quad_CS->Peripheral_Quad4_7_CS8_15 = pcrREG->PPROTSET1; + peripheral_Quad_CS->Peripheral_Quad8_11_CS16_23 = pcrREG->PPROTSET2; + peripheral_Quad_CS->Peripheral_Quad12_15_CS24_31 = pcrREG->PPROTSET3; + +/* USER CODE BEGIN (54) */ +/* USER CODE END */ + +} + +/* USER CODE BEGIN (55) */ +/* USER CODE END */ + +/** @fn void peripheral_Memory_Protection_Status(peripheral_Memory_ChipSelect_t* peripheral_Memory_CS) +* @brief Get the protection set of all the peripheral Memory frame +* @param[out] peripheral_Memory_CS Peripheral memory frames protection status +* +* This function gets the protection status of all the peripheral Memory frame. +*/ +/* SourceId : PCR_SourceId_019 */ +/* DesignId : PCR_DesignId_013 */ +/* Requirements : HL_SR53 */ +void peripheral_Memory_Protection_Status(peripheral_Memory_ChipSelect_t* peripheral_Memory_CS) +{ + +/* USER CODE BEGIN (56) */ +/* USER CODE END */ + + /*SAFETYMCUSW 134 S MR:12.2 "Hardware status bit read" */ + peripheral_Memory_CS->Peripheral_Mem_CS0_31 = pcrREG->PMPROTSET0; + peripheral_Memory_CS->Peripheral_Mem_CS32_63 = pcrREG->PMPROTSET1; + +/* USER CODE BEGIN (57) */ +/* USER CODE END */ + +} + +/* USER CODE BEGIN (58) */ +/* USER CODE END */ + +/** @fn void peripheral_Memory_Powerdown_Status(peripheral_Memory_ChipSelect_t* peripheral_Memory_CS) +* @brief Get the powerdown status of all the peripheral Memory frame +* @param[out] peripheral_Memory_CS Peripheral memory frames powerdown status +* +* This function gets the powerdown status of all the peripheral Memory frame. +*/ +/* SourceId : PCR_SourceId_020 */ +/* DesignId : PCR_DesignId_016 */ +/* Requirements : HL_SR56 */ +void peripheral_Memory_Powerdown_Status(peripheral_Memory_ChipSelect_t* peripheral_Memory_CS) +{ + +/* USER CODE BEGIN (59) */ +/* USER CODE END */ + + peripheral_Memory_CS->Peripheral_Mem_CS0_31 = pcrREG->PCSPWRDWNSET0; + peripheral_Memory_CS->Peripheral_Mem_CS32_63 = pcrREG->PCSPWRDWNSET1; + +/* USER CODE BEGIN (60) */ +/* USER CODE END */ + +} + +/* USER CODE BEGIN (61) */ +/* USER CODE END */ + +/** @fn void pcrGetConfigValue(pcr_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : PCR_SourceId_021 */ +/* DesignId : PCR_DesignId_021 */ +/* Requirements : HL_SR61 */ +void pcrGetConfigValue(pcr_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + {/* Do not pass Initial value as parameter as there is no PCR initialization API */ + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_PMPROTSET0 = pcrREG->PMPROTSET0; + config_reg->CONFIG_PMPROTSET1 = pcrREG->PMPROTSET1; + config_reg->CONFIG_PPROTSET0 = pcrREG->PPROTSET0; + config_reg->CONFIG_PPROTSET1 = pcrREG->PPROTSET1; + config_reg->CONFIG_PPROTSET2 = pcrREG->PPROTSET2; + config_reg->CONFIG_PPROTSET3 = pcrREG->PPROTSET3; + config_reg->CONFIG_PCSPWRDWNSET0 = pcrREG->PCSPWRDWNSET0; + config_reg->CONFIG_PCSPWRDWNSET1 = pcrREG->PCSPWRDWNSET1; + config_reg->CONFIG_PSPWRDWNSET0 = pcrREG->PSPWRDWNSET0; + config_reg->CONFIG_PSPWRDWNSET1 = pcrREG->PSPWRDWNSET1; + config_reg->CONFIG_PSPWRDWNSET2 = pcrREG->PSPWRDWNSET2; + config_reg->CONFIG_PSPWRDWNSET3 = pcrREG->PSPWRDWNSET3; + } +} Index: firmware/source/sys_phantom.c =================================================================== diff -u --- firmware/source/sys_phantom.c (revision 0) +++ firmware/source/sys_phantom.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,67 @@ +/** @file sys_phantom.c +* @brief Phantom Interrupt Source File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Phantom Interrupt Handler +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#include "sys_common.h" +#include "sys_vim.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Phantom Interrupt Handler */ + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +#pragma CODE_STATE(phantomInterrupt, 32) +#pragma INTERRUPT(phantomInterrupt, IRQ) +#pragma WEAK(phantomInterrupt) + +void phantomInterrupt(void) +{ +/* USER CODE BEGIN (2) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ Index: firmware/source/sys_pmm.c =================================================================== diff -u --- firmware/source/sys_pmm.c (revision 0) +++ firmware/source/sys_pmm.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,429 @@ +/** @file sys_pmm.c +* @brief PCR Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +#include "sys_pmm.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/** @fn void pmmInit(void) +* @brief Initializes the PMM Driver +* +* This function initializes the PMM module. +*/ +/* SourceId : PMM_SourceId_001 */ +/* DesignId : PMM_DesignId_001 */ +/* Requirements : HL_SR63 */ +void pmmInit(void) +{ + /*Disable clocks to all logic domains*/ + pmmREG->PDCLKDISREG = 0xFU; + /*Enable or disable clock to pmctrl_wakeup block and automatic clock wake up*/ + pmmREG->GLOBALCTRL1 = (uint32)((uint32)0U << 8U) | (uint32)0U; /*from GUI*/ + /*Power on the logic power domains*/ + pmmREG->LOGICPDPWRCTRL0 = PMM_LOGICPDPWRCTRL0_CONFIGVALUE; + /*Power on the memory-only power domains*/ + pmmREG->MEMPDPWRCTRL0 = PMM_MEMPDPWRCTRL0_CONFIGVALUE; + + /*wait till Logic Power Domain PD2 turns ON*/ + /*SAFETYMCUSW 28 D MR:NA "Wait for hardware status bit" */ + while((pmmREG->LOGICPDPWRSTAT[PMM_LOGICPD2] & PMM_LOGICPDPWRSTAT_DOMAINON) == 0U) + { + }/* Wait */ + /*wait till Logic Power Domain PD3 turns ON*/ + /*SAFETYMCUSW 28 D MR:NA "Wait for hardware status bit" */ + while((pmmREG->LOGICPDPWRSTAT[PMM_LOGICPD3] & PMM_LOGICPDPWRSTAT_DOMAINON) == 0U) + { + }/* Wait */ + /*wait till Logic Power Domain PD5 turns ON*/ + /*SAFETYMCUSW 28 D MR:NA "Wait for hardware status bit" */ + while((pmmREG->LOGICPDPWRSTAT[PMM_LOGICPD5] & PMM_LOGICPDPWRSTAT_DOMAINON) == 0U) + { + }/* Wait */ + + /*wait till Memory Only Power Domain RAM_PD1 turns ON*/ + /*SAFETYMCUSW 28 D MR:NA "Wait for hardware status bit" */ + while((pmmREG->MEMPDPWRSTAT[PMM_MEMPD1] & PMM_MEMPDPWRSTAT_DOMAINON) == 0U) + { + }/* Wait */ + /*wait till Memory Only Power Domain RAM_PD2 turns ON*/ + /*SAFETYMCUSW 28 D MR:NA "Wait for hardware status bit" */ + while((pmmREG->MEMPDPWRSTAT[PMM_MEMPD2] & PMM_MEMPDPWRSTAT_DOMAINON) == 0U) + { + }/* Wait */ + if ((pmmREG->GLOBALCTRL1 & PMM_GLOBALCTRL1_AUTOCLKWAKEENA) == 0U) + { + /* Enable clocks for the selected logic domain */ + pmmREG->PDCLKDISREG = PMM_PDCLKDISREG_CONFIGVALUE; + } + +} + + +/** @fn void pmmTurnONLogicPowerDomain(pmm_LogicPD_t logicPD) +* @brief Turns on Logic Power Domain +* @param[in] logicPD - Power Domain to be turned on +* - PMM_LOGICPD2: Power domain PD2 will be turned on +* - PMM_LOGICPD3: Power domain PD3 will be turned on +* - PMM_LOGICPD4: Power domain PD4 will be turned on +* - PMM_LOGICPD5: Power domain PD5 will be turned on +* +* This function turns on the selected Logic Power Domain +* +*/ +/* SourceId : PMM_SourceId_002 */ +/* DesignId : PMM_DesignId_002 */ +/* Requirements : HL_SR67 */ +void pmmTurnONLogicPowerDomain(pmm_LogicPD_t logicPD) +{ + if (logicPD != PMM_LOGICPD1) + { + /* Power on the domain */ + if (logicPD == PMM_LOGICPD2) + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + pmmREG->LOGICPDPWRCTRL0 = (pmmREG->LOGICPDPWRCTRL0 & 0xF0FFFFFFU) | 0x05000000U; + } + else if (logicPD == PMM_LOGICPD3) + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + pmmREG->LOGICPDPWRCTRL0 = (pmmREG->LOGICPDPWRCTRL0 & 0xFFF0FFFFU) | 0x00050000U; + } + else if (logicPD == PMM_LOGICPD4) + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + pmmREG->LOGICPDPWRCTRL0 = (pmmREG->LOGICPDPWRCTRL0 & 0xFFFFF0FFU) | 0x00000500U; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + pmmREG->LOGICPDPWRCTRL0 = (pmmREG->LOGICPDPWRCTRL0 & 0xFFFFFFF0U) | 0x00000005U; + } + /* Wait until the power domain turns on */ + /*SAFETYMCUSW 28 D MR:NA "Wait for hardware status bit" */ + while((pmmREG->LOGICPDPWRSTAT[logicPD] & PMM_LOGICPDPWRSTAT_DOMAINON) == 0U) + { + }/* Wait */ + if ((pmmREG->GLOBALCTRL1 & PMM_GLOBALCTRL1_AUTOCLKWAKEENA) == 0U) + { + /* Enable clocks to the power domain */ + pmmREG->PDCLKDISCLRREG = (uint32)1U << (uint32)logicPD; + } + } +} + +/** @fn void pmmTurnONMemPowerDomain(pmm_MemPD_t memPD) +* @brief Turns on Memory Power Domain +* @param[in] memPD - Power Domain to be tured on +* - PMM_MEMPD1: Power domain RAM_PD1 will be turned on +* - PMM_MEMPD2: Power domain RAM_PD2 will be turned on +* - PMM_MEMPD3: Power domain RAM_PD3 will be turned on +* +* This function turns on the selected Memory Power Domain +* +*/ +/* SourceId : PMM_SourceId_003 */ +/* DesignId : PMM_DesignId_003 */ +/* Requirements : HL_SR66 */ +void pmmTurnONMemPowerDomain(pmm_MemPD_t memPD) +{ + /* Power on the domain */ + if (memPD == PMM_MEMPD1) + { + pmmREG->MEMPDPWRCTRL0 = (pmmREG->MEMPDPWRCTRL0 & 0xF0FFFFFFU) | 0x05000000U; + } + else if (memPD == PMM_MEMPD2) + { + pmmREG->MEMPDPWRCTRL0 = (pmmREG->MEMPDPWRCTRL0 & 0xFFF0FFFFU) | 0x00050000U; + } + else + { + pmmREG->MEMPDPWRCTRL0 = (pmmREG->MEMPDPWRCTRL0 & 0xFFFFF0FFU) | 0x00000500U; + } + /*Wait until the power domain turns on*/ + /*SAFETYMCUSW 28 D MR:NA "Wait for hardware status bit" */ + while((pmmREG->MEMPDPWRSTAT[memPD] & PMM_MEMPDPWRSTAT_DOMAINON) == 0U) + { + }/* Wait */ +} + +/** @fn void pmmTurnOFFLogicPowerDomain(pmm_LogicPD_t logicPD) +* @brief Turns off Logic Power Domain +* @param[in] logicPD - Power Domain to be tured off +* - PMM_LOGICPD2: Power domain PD2 will be turned off +* - PMM_LOGICPD3: Power domain PD3 will be turned off +* - PMM_LOGICPD4: Power domain PD4 will be turned off +* - PMM_LOGICPD5: Power doamin PD5 will be turned off +* +* This function turns off the selected Logic Power Domain +* +*/ +/* SourceId : PMM_SourceId_004 */ +/* DesignId : PMM_DesignId_004 */ +/* Requirements : HL_SR67 */ +void pmmTurnOFFLogicPowerDomain(pmm_LogicPD_t logicPD) +{ + if (logicPD != PMM_LOGICPD1) + { + /* Disable all clocks to the power domain */ + pmmREG->PDCLKDISSETREG = (uint32)1U << (uint32)logicPD; + + /* Power down the domain */ + if (logicPD == PMM_LOGICPD2) + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue*/ + pmmREG->LOGICPDPWRCTRL0 = (pmmREG->LOGICPDPWRCTRL0 & 0xF0FFFFFFU) | 0x0A000000U; + } + else if (logicPD == PMM_LOGICPD3) + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + pmmREG->LOGICPDPWRCTRL0 = (pmmREG->LOGICPDPWRCTRL0 & 0xFFF0FFFFU) | 0x000A0000U; + } + else if (logicPD == PMM_LOGICPD4) + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + pmmREG->LOGICPDPWRCTRL0 = (pmmREG->LOGICPDPWRCTRL0 & 0xFFFFF0FFU) | 0x00000A00U; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + pmmREG->LOGICPDPWRCTRL0 = (pmmREG->LOGICPDPWRCTRL0 & 0xFFFFFFF0U) | 0x0000000AU; + } + /* Wait until the power domain turns off */ + /*SAFETYMCUSW 28 D MR:NA "Wait for hardware status bit" */ + while((pmmREG->LOGICPDPWRSTAT[logicPD] & PMM_LOGICPDPWRSTAT_LOGICPDPWRSTAT) != 0U) + { + }/* Wait */ + } +} + +/** @fn void pmmTurnOFFMemPowerDomain(pmm_MemPD_t memPD) +* @brief Turns off Memory Power Domain +* @param[in] memPD - Power Domain to be tured off +* - PMM_MEMPD1: Power domain RAM_PD1 will be turned off +* - PMM_MEMPD2: Power domain RAM_PD2 will be turned off +* - PMM_MEMPD3: Power domain RAM_PD3 will be turned off +* +* This function turns off the selected Memory Power Domain +* +*/ +/* SourceId : PMM_SourceId_005 */ +/* DesignId : PMM_DesignId_005 */ +/* Requirements : HL_SR66 */ +void pmmTurnOFFMemPowerDomain(pmm_MemPD_t memPD) +{ + /* Power down the domain */ + if (memPD == PMM_MEMPD1) + { + pmmREG->MEMPDPWRCTRL0 = (pmmREG->MEMPDPWRCTRL0 & 0xF0FFFFFFU) | 0x0A000000U; + } + else if (memPD == PMM_MEMPD2) + { + pmmREG->MEMPDPWRCTRL0 = (pmmREG->MEMPDPWRCTRL0 & 0xFFF0FFFFU) | 0x000A0000U; + } + else + { + pmmREG->MEMPDPWRCTRL0 = (pmmREG->MEMPDPWRCTRL0 & 0xFFFFF0FFU) | 0x00000A00U; + } + /*Wait until the power domain turns off*/ + /*SAFETYMCUSW 28 D MR:NA "Wait for hardware status bit" */ + while((pmmREG->MEMPDPWRSTAT[memPD] & PMM_MEMPDPWRSTAT_MEMPDPWRSTAT) != 0U) + { + }/* Wait */ +} + +/** @fn boolean pmmIsLogicPowerDomainActive(pmm_LogicPD_t logicPD) +* @brief Check if the power domain is active or not +* @param[in] logicPD - Power Domain to be be checked +* - PMM_LOGICPD2: Checks whether Power domain PD2 is active or not +* - PMM_LOGICPD3: Checks whether Power domain PD3 is active or not +* - PMM_LOGICPD4: Checks whether Power domain PD4 is active or not +* - PMM_LOGICPD5: Checks whether Power domain PD5 is active or not +* @return The function will return: +* - TRUE : When the selected power domain is in Active state. +* - FALSE: When the selected power domain is in OFF state. +* +* This function checks whether the selected power domain is active or not. +* +*/ +/* SourceId : PMM_SourceId_006 */ +/* DesignId : PMM_DesignId_006 */ +/* Requirements : HL_SR62 */ +boolean pmmIsLogicPowerDomainActive(pmm_LogicPD_t logicPD) +{ + boolean status; + if ((pmmREG->LOGICPDPWRSTAT[logicPD] & PMM_LOGICPDPWRSTAT_DOMAINON) == 0U) + { + status = FALSE; + } + else + { + status = TRUE; + } + return status; +} + +/** @fn boolean pmmIsMemPowerDomainActive(pmm_MemPD_t memPD) +* @brief Check if the power domain is active or not +* @param[in] memPD - Power Domain to be tured off +* - PMM_MEMPD1: Checks whether Power domain RAM_PD1 is active or not +* - PMM_MEMPD2: Checks whether Power domain RAM_PD2 is active or not +* - PMM_MEMPD3: Checks whether Power domain RAM_PD3 is active or not +* @return The function will return: +* - TRUE : When the selected power domain is in Active state. +* - FALSE: When the selected power domain is in OFF state. +* +* This function checks whether the selected power domain is active or not. +* +*/ +/* SourceId : PMM_SourceId_007 */ +/* DesignId : PMM_DesignId_007 */ +/* Requirements : HL_SR65 */ +boolean pmmIsMemPowerDomainActive(pmm_MemPD_t memPD) +{ + boolean status; + if ((pmmREG->MEMPDPWRSTAT[memPD] & PMM_MEMPDPWRSTAT_DOMAINON) == 0U) + { + status = FALSE; + } + else + { + status = TRUE; + } + return status; +} + +/** @fn void pmmGetConfigValue(pmm_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration register +* @param[in] *config_reg - pointer to the struct to which the initial or current value of the configuration registers need to be stored +* @param[in] type - whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* This function will copy the initial or current value (depending on the parameter 'type') of the configuration registers to the struct pointed by config_reg +*/ +/* SourceId : PMM_SourceId_008 */ +/* DesignId : PMM_DesignId_008 */ +/* Requirements : HL_SR64 */ +void pmmGetConfigValue(pmm_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_LOGICPDPWRCTRL0 = PMM_LOGICPDPWRCTRL0_CONFIGVALUE; + config_reg->CONFIG_MEMPDPWRCTRL0 = PMM_MEMPDPWRCTRL0_CONFIGVALUE; + config_reg->CONFIG_PDCLKDISREG = PMM_PDCLKDISREG_CONFIGVALUE; + config_reg->CONFIG_GLOBALCTRL1 = PMM_GLOBALCTRL1_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_LOGICPDPWRCTRL0 = pmmREG->LOGICPDPWRCTRL0; + config_reg->CONFIG_MEMPDPWRCTRL0 = pmmREG->MEMPDPWRCTRL0; + config_reg->CONFIG_PDCLKDISREG = pmmREG->PDCLKDISREG; + config_reg->CONFIG_GLOBALCTRL1 = pmmREG->GLOBALCTRL1; + } +} + +/** @fn void pmmSetMode(pmm_Mode_t mode) +* @brief Set PSCON Compare Block Mode +* @param[in] mode - PSCON Compare Block mode +* - LockStep : PSCON compare block is set to Lock-Step mode +* - SelfTest : PSCON compare block is set to Self-Test mode +* - ErrorForcing : PSCON compare block is set to Error-Forcing mode +* - SelfTestErrorForcing : PSCON compare block is set to Self-Test-Error-Forcing mode +* +* This function sets the PSCON Compare block to the selected mode +* +*/ +/* SourceId : PMM_SourceId_009 */ +/* DesignId : PMM_DesignId_009 */ +/* Requirements : HL_SR68 */ +void pmmSetMode(pmm_Mode_t mode) +{ + /* Set PSCON Compare Block Mode */ + pmmREG->PRCKEYREG = mode; +} + +/** @fn boolean pmmPerformSelfTest(void) +* @brief Perform self test and return the result +* +* @return The function will return +* - TRUE if PSCON compare block passed self-test +* - FALSE if PSCON compare block failed in self-test +* +* This function checks whether PSCON compare block passed the self-test or not. +* +*/ +/* SourceId : PMM_SourceId_010 */ +/* DesignId : PMM_DesignId_010 */ +/* Requirements : HL_SR72 */ +boolean pmmPerformSelfTest(void) +{ + boolean status = TRUE; + /*Enter self-test mode*/ + pmmREG->PRCKEYREG = (uint32)SelfTest; + /*Wait till self test is completed*/ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while ((pmmREG->LPDDCSTAT1 & 0xFU) != 0xFU) + { + }/* Wait */ + + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while ((pmmREG->MPDDCSTAT1 & 0x3U) != 0x3U) + { + }/* Wait */ + + /*Check whether self-test passed or not*/ + if ((pmmREG->LPDDCSTAT2 & 0xFU) != 0U) + { + status = FALSE; + } + if ((pmmREG->MPDDCSTAT2 & 0x7U) != 0U) + { + status = FALSE; + } + /*Enter lock-step mode*/ + pmmREG->PRCKEYREG = (uint32)LockStep; + + return status; +} + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ Index: firmware/source/sys_pmu.asm =================================================================== diff -u --- firmware/source/sys_pmu.asm (revision 0) +++ firmware/source/sys_pmu.asm (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,277 @@ +;------------------------------------------------------------------------------- +; sys_pmu.asm +; +; Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +; +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions +; are met: +; +; Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; +; Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the +; distribution. +; +; Neither the name of Texas Instruments Incorporated nor the names of +; its contributors may be used to endorse or promote products derived +; from this software without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +; +; +; + + .text + .arm + + +;------------------------------------------------------------------------------- +; Initialize Pmu +; Note: It will reset all counters +; SourceId : PMU_SourceId_001 +; DesignId : PMU_DesignId_001 +; Requirements : HL_SR484 + + .def _pmuInit_ + .asmfunc + +_pmuInit_ + + ; set control register + mrc p15, #0, r0, c9, c12, #0 + orr r0, r0, #(1 << 4) + 6 + 1 + mcr p15, #0, r0, c9, c12, #0 + ; clear flags + mov r0, #0 + sub r0, r0, #1 + mcr p15, #0, r0, c9, c12, #3 + ; select counter 0 event + mov r0, #0 + mcr p15, #0, r0, c9, c12, #5 ; select counter + mov r0, #0x11 + mcr p15, #0, r0, c9, c13, #1 ; select event + ; select counter 1 event + mov r0, #1 + mcr p15, #0, r0, c9, c12, #5 ; select counter + mov r0, #0x11 + mcr p15, #0, r0, c9, c13, #1 ; select event + ; select counter 2 event + mov r0, #2 + mcr p15, #0, r0, c9, c12, #5 ; select counter + mov r0, #0x11 + mcr p15, #0, r0, c9, c13, #1 ; select event + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Enable Counters Global [Cycle, Event [0..2]] +; Note: It will reset all counters +; SourceId : PMU_SourceId_002 +; DesignId : PMU_DesignId_002 +; Requirements : HL_SR485 + + .def _pmuEnableCountersGlobal_ + .asmfunc + +_pmuEnableCountersGlobal_ + + mrc p15, #0, r0, c9, c12, #0 + orr r0, r0, #7 + mcr p15, #0, r0, c9, c12, #0 + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Disable Counters Global [Cycle, Event [0..2]] +; SourceId : PMU_SourceId_003 +; DesignId : PMU_DesignId_003 +; Requirements : HL_SR485 + + .def _pmuDisableCountersGlobal_ + .asmfunc + +_pmuDisableCountersGlobal_ + + mrc p15, #0, r0, c9, c12, #0 + bic r0, r0, #1 + mcr p15, #0, r0, c9, c12, #0 + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Reset Cycle Counter +; SourceId : PMU_SourceId_004 +; DesignId : PMU_DesignId_004 +; Requirements : HL_SR485 + + .def _pmuResetCycleCounter_ + .asmfunc + +_pmuResetCycleCounter_ + + mrc p15, #0, r0, c9, c12, #0 + orr r0, r0, #4 + mcr p15, #0, r0, c9, c12, #0 + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Reset Event Counters [0..2] +; SourceId : PMU_SourceId_005 +; DesignId : PMU_DesignId_005 +; Requirements : HL_SR485 + + .def _pmuResetEventCounters_ + .asmfunc + +_pmuResetEventCounters_ + + mrc p15, #0, r0, c9, c12, #0 + orr r0, r0, #2 + mcr p15, #0, r0, c9, c12, #0 + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Reset Cycle Counter abd Event Counters [0..2] +; SourceId : PMU_SourceId_006 +; DesignId : PMU_DesignId_006 +; Requirements : HL_SR485 + + .def _pmuResetCounters_ + .asmfunc + +_pmuResetCounters_ + + mrc p15, #0, r0, c9, c12, #0 + orr r0, r0, #6 + mcr p15, #0, r0, c9, c12, #0 + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Start Counters [Cycle, 0..2] +; SourceId : PMU_SourceId_007 +; DesignId : PMU_DesignId_007 +; Requirements : HL_SR485 + + .def _pmuStartCounters_ + .asmfunc + +_pmuStartCounters_ + + mcr p15, #0, r0, c9, c12, #1 + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Stop Counters [Cycle, 0..2] +; SourceId : PMU_SourceId_008 +; DesignId : PMU_DesignId_008 +; Requirements : HL_SR485 + + .def _pmuStopCounters_ + .asmfunc + +_pmuStopCounters_ + + mcr p15, #0, r0, c9, c12, #2 + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Set Count event +; SourceId : PMU_SourceId_009 +; DesignId : PMU_DesignId_009 +; Requirements : HL_SR485 + + .def _pmuSetCountEvent_ + .asmfunc + +_pmuSetCountEvent_ + + mcr p15, #0, r0, c9, c12, #5 ; select counter + mcr p15, #0, r1, c9, c13, #1 ; select event + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Get Cycle Count +; SourceId : PMU_SourceId_010 +; DesignId : PMU_DesignId_010 +; Requirements : HL_SR486 + + .def _pmuGetCycleCount_ + .asmfunc + +_pmuGetCycleCount_ + + mrc p15, #0, r0, c9, c13, #0 + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Get Event Counter Count Value +; SourceId : PMU_SourceId_011 +; DesignId : PMU_DesignId_011 +; Requirements : HL_SR486 + + .def _pmuGetEventCount_ + .asmfunc + +_pmuGetEventCount_ + + mcr p15, #0, r0, c9, c12, #5 ; select counter + mrc p15, #0, r0, c9, c13, #2 ; read event counter + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Get Overflow Flags +; SourceId : PMU_SourceId_012 +; DesignId : PMU_DesignId_012 +; Requirements : HL_SR486 + + .def _pmuGetOverflow_ + .asmfunc + +_pmuGetOverflow_ + + mrc p15, #0, r0, c9, c12, #3 ; read overflow + mov r1, #0 + sub r1, r1, #1 + mcr p15, #0, r1, c9, c12, #3 ; clear flags + bx lr + + .endasmfunc + + + +;------------------------------------------------------------------------------- + Index: firmware/source/sys_selftest.c =================================================================== diff -u --- firmware/source/sys_selftest.c (revision 0) +++ firmware/source/sys_selftest.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,2985 @@ +/** @file sys_selftest.c +* @brief Selftest Source File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Selftest API's +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +#include "sys_selftest.h" +#include "sys_core.h" +#include "sys_pmu.h" + +/** @fn void selftestFailNotification(uint32 flag) +* @brief Self test fail service routine +* +* This function is called if there is a self test fail with appropriate flag +*/ +#pragma WEAK(selftestFailNotification) +void selftestFailNotification(uint32 flag) +{ + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +} + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/** @fn void ccmSelfCheck(void) +* @brief CCM module self check Driver +* +* This function self checks the CCM module. +*/ +/* SourceId : SELFTEST_SourceId_001 */ +/* DesignId : SELFTEST_DesignId_001 */ +/* Requirements : HL_SR395 */ +void ccmSelfCheck(void) +{ +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + + /* Run a diagnostic check on the CCM-R4F module */ + /* This step ensures that the CCM-R4F can actually indicate an error */ + + /* Configure CCM in self-test mode */ + CCMKEYR = 0x6U; + /* Wait for CCM self-test to complete */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while ((CCMSR & 0x100U) != 0x100U) + { + }/* Wait */ + +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + + /* Check if there was an error during the self-test */ + if ((CCMSR & 0x1U) == 0x1U) + { + /* STE is set */ + selftestFailNotification(CCMSELFCHECK_FAIL1); + } + else + { + /* Check CCM-R4 self-test error flag by itself (without compare error) */ + if ((esmREG->SR1[0U] & 0x80000000U) == 0x80000000U) + { + /* ESM flag is not set */ + selftestFailNotification(CCMSELFCHECK_FAIL2); + } + else + { + /* Configure CCM in error-forcing mode */ + CCMKEYR = 0x9U; + + /* Wait till error-forcing is completed. */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while (CCMKEYR != 0U) + { + }/* Wait */ + + /* check if compare error flag is set */ + if ((esmREG->SR1[1U] & 0x4U) != 0x4U) + { + /* ESM flag is not set */ + selftestFailNotification(CCMSELFCHECK_FAIL3); + } + else + { + /* Check FIQIVEC to ESM High Interrupt flag is set */ + if((vimREG->FIQINDEX & 0x000000FFU) != 1U) + { + /* ESM High Interrupt flag is not set in VIM*/ + selftestFailNotification(CCMSELFCHECK_FAIL4); + } + + /* clear ESM group2 channel 2 flag */ + esmREG->SR1[1U] = 0x4U; + + /* clear ESM group2 shadow status flag */ + esmREG->SSR2 = 0x4U; + + /* ESM self-test error needs to also be cleared */ + esmREG->SR1[0U] = 0x80000000U; + + /* The nERROR pin will become inactive once the LTC counter expires */ + esmREG->EKR = 0x5U; + + /* Configure CCM in selftest error-forcing mode */ + CCMKEYR = 0xFU; + + /* Wait till selftest error-forcing is completed. */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while (CCMKEYR != 0U) + { + }/* Wait */ + + if((esmREG->SR1[0U] & 0x80000000U) != 0x80000000U) + { + /* ESM flag not set */ + selftestFailNotification(CCMSELFCHECK_FAIL2); + } + else + { + /* clear ESM flag */ + esmREG->SR1[0U] = 0x80000000U; + } + } + } + } +} + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + + +/** @fn void memoryInit(uint32 ram) +* @brief Memory Initialization Driver +* +* This function is called to perform Memory initialization of selected RAM's. +*/ +/* SourceId : SELFTEST_SourceId_002 */ +/* DesignId : SELFTEST_DesignId_004 */ +/* Requirements : HL_SR396 */ +void memoryInit(uint32 ram) +{ +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + + /* Enable Memory Hardware Initialization */ + systemREG1->MINITGCR = 0xAU; + + /* Enable Memory Hardware Initialization for selected RAM's */ + systemREG1->MSINENA = ram; + + /* Wait until Memory Hardware Initialization complete */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((systemREG1->MSTCGSTAT & 0x00000100U) != 0x00000100U) + { + }/* Wait */ + + /* Disable Memory Hardware Initialization */ + systemREG1->MINITGCR = 0x5U; + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ +} + +/** @fn void stcSelfCheck(void) +* @brief STC module self check Driver +* +* This function is called to perform STC module self check. +*/ +/* SourceId : SELFTEST_SourceId_003 */ +/* DesignId : SELFTEST_DesignId_002 */ +/* Requirements : HL_SR397 */ +void stcSelfCheck(void) +{ +/* USER CODE BEGIN (8) */ +/* USER CODE END */ + volatile uint32 i = 0U; + + /* Run a diagnostic check on the CPU self-test controller */ + /* First set up the STC clock divider as STC is only supported up to 90MHz */ + + /* STC clock is now normal mode CPU clock frequency/2 = 180MHz/2 */ + systemREG2->STCCLKDIV = 0x01000000U; + + /* Select one test interval, restart self-test next time, 0x00010001 */ + stcREG->STCGCR0 = 0x00010001U; + + /* Enable comparator self-check and stuck-at-0 fault insertion in CPU, 0x1A */ + stcREG->STCSCSCR = 0x1AU; + + /* Maximum time-out period */ + stcREG->STCTPR = 0xFFFFFFFFU; + + /* wait for 16 VBUS clock cycles at least, based on HCLK to VCLK ratio */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + for (i=0U; i<(16U + (16U * 1U)); i++){ /* Wait */ } + + /* Enable self-test */ + stcREG->STCGCR1 = 0xAU; + +/* USER CODE BEGIN (9) */ +/* USER CODE END */ + + /* Idle the CPU so that the self-test can start */ + _gotoCPUIdle_(); + +/* USER CODE BEGIN (10) */ +/* USER CODE END */ +} + +/** @fn void cpuSelfTest(uint32 no_of_intervals, uint32 max_timeout, boolean restart_test) +* @brief CPU self test Driver +* @param[in] no_of_intervals - Number of Test Intervals to be +* @param[in] max_timeout - Maximum Timeout to complete selected test Intervals +* @param[in] restart_test - Restart the test from Interval 0 or Continue from where it stopped. +* +* This function is called to perform CPU self test using STC module. +*/ +/* SourceId : SELFTEST_SourceId_004 */ +/* DesignId : SELFTEST_DesignId_003 */ +/* Requirements : HL_SR398 */ +void cpuSelfTest(uint32 no_of_intervals, uint32 max_timeout, boolean restart_test) +{ + volatile uint32 i = 0U; + +/* USER CODE BEGIN (11) */ +/* USER CODE END */ + + /* Run specified no of test intervals starting from interval 0 */ + /* Start test from interval 0 or continue the test. */ + stcREG->STCGCR0 = no_of_intervals << 16U; + if(restart_test) + { + stcREG->STCGCR0 |= 0x00000001U; + } + + /* Configure Maximum time-out period */ + stcREG->STCTPR = max_timeout; + + /* wait for 16 VBUS clock cycles at least, based on HCLK to VCLK ratio */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + for (i=0U; i<(16U + (16U * 1U)); i++){ /* Wait */ } + + /* Enable self-test */ + stcREG->STCGCR1 = 0xAU; + +/* USER CODE BEGIN (12) */ +/* USER CODE END */ + /* Idle the CPU so that the self-test can start */ + + _gotoCPUIdle_(); + +} + +/** @fn void pbistSelfCheck(void) +* @brief PBIST self test Driver +* +* This function is called to perform PBIST self test. +* +* @note This Function uses register's which are not exposed to users through +* TRM , to run custom algorithm to make PBIST Fail. Users can use this function as Black box. +* +*/ +/* SourceId : SELFTEST_SourceId_005 */ +/* DesignId : SELFTEST_DesignId_005 */ +/* Requirements : HL_SR399 */ +void pbistSelfCheck(void) +{ + volatile uint32 i = 0U; + uint32 PBIST_wait_done_loop = 0U; +/* USER CODE BEGIN (13) */ +/* USER CODE END */ + /* Run a diagnostic check on the memory self-test controller */ + /* First set up the PBIST ROM clock as this clock frequency is limited to 90MHz */ + + /* Disable PBIST clocks and ROM clock */ + pbistREG->PACT = 0x0U; + + /* PBIST ROM clock frequency = HCLK frequency /2 */ + /* Disable memory self controller */ + systemREG1->MSTGCR = 0x00000105U; + + /* Disable Memory Initialization controller */ + systemREG1->MINITGCR = 0x5U; + + /* Enable memory self controller */ + systemREG1->MSTGCR = 0x0000010AU; + + /* Clear PBIST Done */ + systemREG1->MSTCGSTAT = 0x1U; + + /* Enable PBIST controller */ + systemREG1->MSINENA = 0x1U; + + /* wait for 32 VBUS clock cycles at least, based on HCLK to VCLK ratio */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + for (i=0U; i<(32U + (32U * 1U)); i++){ /* Wait */ } + +/* USER CODE BEGIN (14) */ +/* USER CODE END */ + + /* Enable PBIST clocks and ROM clock */ + pbistREG->PACT = 0x3U; + + /* CPU control of PBIST */ + pbistREG->DLR = 0x10U; + + /* Custom always fail algo, this will not use the ROM and just set a fail */ + pbistREG->RAMT = 0x00002000U; + *(volatile uint32 *)0xFFFFE400U = 0x4C000001U; + *(volatile uint32 *)0xFFFFE440U = 0x00000075U; + *(volatile uint32 *)0xFFFFE404U = 0x4C000002U; + *(volatile uint32 *)0xFFFFE444U = 0x00000075U; + *(volatile uint32 *)0xFFFFE408U = 0x4C000003U; + *(volatile uint32 *)0xFFFFE448U = 0x00000075U; + *(volatile uint32 *)0xFFFFE40CU = 0x4C000004U; + *(volatile uint32 *)0xFFFFE44CU = 0x00000075U; + *(volatile uint32 *)0xFFFFE410U = 0x4C000005U; + *(volatile uint32 *)0xFFFFE450U = 0x00000075U; + *(volatile uint32 *)0xFFFFE414U = 0x4C000006U; + *(volatile uint32 *)0xFFFFE454U = 0x00000075U; + *(volatile uint32 *)0xFFFFE418U = 0x00000000U; + *(volatile uint32 *)0xFFFFE458U = 0x00000001U; + + /* PBIST_RUN */ + pbistREG->rsvd1[1U] = 1U; + + /* wait until memory self-test done is indicated */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while ((systemREG1->MSTCGSTAT & 0x1U) != 0x1U) + { + PBIST_wait_done_loop++; + }/* Wait */ + + /* Check for the failure */ + if ((pbistREG->FSRF0 & 0x1U) != 0x1U) + { + /* No failure was indicated even if the always fail algorithm was run*/ + selftestFailNotification(PBISTSELFCHECK_FAIL1); + +/* USER CODE BEGIN (15) */ +/* USER CODE END */ + } + else + { + /* Check that the algorithm executed in the expected amount of time. */ + /* This time is dependent on the ROMCLKDIV selected above */ + if (PBIST_wait_done_loop >= 2U) + { + selftestFailNotification(PBISTSELFCHECK_FAIL2); + } + + /* Disable PBIST clocks and ROM clock */ + pbistREG->PACT = 0x0U; + + /* Disable PBIST */ + systemREG1->MSTGCR &= 0xFFFFFFF0U; + systemREG1->MSTGCR |= 0x5U; + +/* USER CODE BEGIN (16) */ +/* USER CODE END */ + } +} + +/** @fn void pbistRun(uint32 raminfoL, uint32 algomask) +* @brief CPU self test Driver +* @param[in] raminfoL - Select the list of RAM to be tested. +* @param[in] algomask - Select the list of Algorithm to be run. +* +* This function performs Memory Built-in Self test using PBIST module. +*/ +/* SourceId : SELFTEST_SourceId_006 */ +/* DesignId : SELFTEST_DesignId_006 */ +/* Requirements : HL_SR400 */ +void pbistRun(uint32 raminfoL, uint32 algomask) +{ + volatile uint32 i = 0U; + +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + + /* PBIST ROM clock frequency = HCLK frequency /2 */ + /* Disable memory self controller */ + systemREG1->MSTGCR = 0x00000105U; + + /* Disable Memory Initialization controller */ + systemREG1->MINITGCR = 0x5U; + + /* Enable PBIST controller */ + systemREG1->MSINENA = 0x1U; + + /* Enable memory self controller */ + systemREG1->MSTGCR = 0x0000010AU; + + /* wait for 32 VBUS clock cycles at least, based on HCLK to VCLK ratio */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + for (i=0U; i<(32U + (32U * 1U)); i++){ /* Wait */ } + +/* USER CODE BEGIN (18) */ +/* USER CODE END */ + + /* Enable PBIST clocks and ROM clock */ + pbistREG->PACT = 0x3U; + + /* Select all algorithms to be tested */ + pbistREG->ALGO = algomask; + + /* Select RAM groups */ + pbistREG->RINFOL = raminfoL; + + /* Select all RAM groups */ + pbistREG->RINFOU = 0x00000000U; + + /* ROM contents will not override RINFOx settings */ + pbistREG->OVER = 0x0U; + + /* Algorithm code is loaded from ROM */ + pbistREG->ROM = 0x3U; + + /* Start PBIST */ + pbistREG->DLR = 0x14U; + +/* USER CODE BEGIN (19) */ +/* USER CODE END */ +} + +/** @fn void pbistStop(void) +* @brief Routine to stop PBIST test enabled. +* +* This function is called to stop PBIST after test is performed. +*/ +/* SourceId : SELFTEST_SourceId_007 */ +/* DesignId : SELFTEST_DesignId_007 */ +/* Requirements : HL_SR523 */ +void pbistStop(void) +{ +/* USER CODE BEGIN (20) */ +/* USER CODE END */ + /* disable pbist clocks and ROM clock */ + pbistREG->PACT = 0x0U; + systemREG1->MSTGCR &= 0xFFFFFFF0U; + systemREG1->MSTGCR |= 0x5U; +/* USER CODE BEGIN (21) */ +/* USER CODE END */ +} + +/** @fn boolean pbistIsTestCompleted(void) +* @brief Checks to see if the PBIST test is completed. +* @return 1 if PBIST test completed, otherwise 0. +* +* Checks to see if the PBIST test is completed. +*/ +/* SourceId : SELFTEST_SourceId_008 */ +/* DesignId : SELFTEST_DesignId_008 */ +/* Requirements : HL_SR401 */ +boolean pbistIsTestCompleted(void) +{ +/* USER CODE BEGIN (22) */ +/* USER CODE END */ + + return ((systemREG1->MSTCGSTAT & 0x1U) != 0U); +/* USER CODE BEGIN (23) */ +/* USER CODE END */ +} + +/** @fn boolean pbistIsTestPassed(void) +* @brief Checks to see if the PBIST test is completed successfully. +* @return 1 if PBIST test passed, otherwise 0. +* +* Checks to see if the PBIST test is completed successfully. +*/ +/* SourceId : SELFTEST_SourceId_009 */ +/* DesignId : SELFTEST_DesignId_009 */ +/* Requirements : HL_SR401 */ +boolean pbistIsTestPassed(void) +{ +/* USER CODE BEGIN (24) */ +/* USER CODE END */ + boolean status; + + if (pbistREG->FSRF0 == 0U) + { + status = TRUE; + } + else + { + status = FALSE; + } +/* USER CODE BEGIN (25) */ +/* USER CODE END */ + return status; +} + +/** @fn boolean pbistPortTestStatus(uint32 port) +* @brief Checks to see if the PBIST Port test is completed successfully. +* @param[in] port - Select the port to get the status. +* @return 1 if PBIST Port test completed successfully, otherwise 0. +* +* Checks to see if the selected PBIST Port test is completed successfully. +*/ +/* SourceId : SELFTEST_SourceId_010 */ +/* DesignId : SELFTEST_DesignId_010 */ +/* Requirements : HL_SR401 */ +boolean pbistPortTestStatus(uint32 port) +{ + boolean status; +/* USER CODE BEGIN (26) */ +/* USER CODE END */ + + if(port == (uint32)PBIST_PORT0) + { + status = (pbistREG->FSRF0 == 0U); + } + else + { + /* Invalid Input */ + status = FALSE; + } + + return status; +} + +/** @fn uint32 efcCheck(void) +* @brief EFUSE module self check Driver +* @return Returns 0 if no error was detected during autoload and Stuck At Zero Test passed +* 1 if no error was detected during autoload but Stuck At Zero Test failed +* 2 if there was a single-bit error detected during autoload +* 3 if some other error occurred during autoload +* +* This function self checks the EFUSE module. +*/ +/* SourceId : SELFTEST_SourceId_011 */ +/* DesignId : SELFTEST_DesignId_012 */ +/* Requirements : HL_SR402 */ +uint32 efcCheck(void) +{ + uint32 efcStatus = 0U; + uint32 status; + +/* USER CODE BEGIN (27) */ +/* USER CODE END */ + + /* read the EFC Error Status Register */ + efcStatus = efcREG->ERROR; + +/* USER CODE BEGIN (28) */ +/* USER CODE END */ + + if (efcStatus == 0x0U) + { + /* run stuck-at-zero test and check if it passed */ + if (efcStuckZeroTest()== TRUE) + { + /* start EFC ECC logic self-test */ + efcSelfTest(); + status = 0U; + } + else + { + /* EFC output is stuck-at-zero, device operation unreliable */ + selftestFailNotification(EFCCHECK_FAIL1); + status = 1U; + } + } + /* EFC Error Register is not zero */ + else + { + /* one-bit error detected during autoload */ + if (efcStatus == 0x15U) + { + /* start EFC ECC logic self-test */ + efcSelfTest(); + status = 2U; + } + else + { + /* Some other EFC error was detected */ + selftestFailNotification(EFCCHECK_FAIL1); + status = 3U; + } + } + return status; +} + +/** @fn boolean efcStuckZeroTest(void) +* @brief Checks to see if the EFUSE Stuck at zero test is completed successfully. +* @return 1 if EFUSE Stuck at zero test completed, otherwise 0. +* +* Checks to see if the EFUSE Stuck at zero test is completed successfully. +*/ +/* SourceId : SELFTEST_SourceId_012 */ +/* DesignId : SELFTEST_DesignId_014 */ +/* Requirements : HL_SR402 */ +boolean efcStuckZeroTest(void) +{ +/* USER CODE BEGIN (29) */ +/* USER CODE END */ + + uint32 ESM_ESTATUS4, ESM_ESTATUS1; + + boolean result = FALSE; + uint32 error_checks = EFC_INSTRUCTION_INFO_EN | + EFC_INSTRUCTION_ERROR_EN | + EFC_AUTOLOAD_ERROR_EN | + EFC_SELF_TEST_ERROR_EN ; + + /* configure the output enable for auto load error , instruction info, + instruction error, and self test error using boundary register + and drive values one across all the errors */ + efcREG->BOUNDARY = ((uint32)OUTPUT_ENABLE | error_checks); + + /* Read from the pin register. This register holds the current values + of above errors. This value should be 0x5c00.If not at least one of + the above errors is stuck at 0. */ + if ((efcREG->PINS & 0x5C00U) == 0x5C00U) + { + ESM_ESTATUS4 = esmREG->SR4[0U]; + ESM_ESTATUS1 = esmREG->SR1[2U]; + /* check if the ESM group1 channel 41 is set and group3 channel 1 is set */ + if (((ESM_ESTATUS4 & 0x200U) == 0x200U) && ((ESM_ESTATUS1 & 0x2U) == 0x2U)) + { + /* stuck-at-zero test passed */ + result = TRUE; + } + } + + /* put the pins back low */ + efcREG->BOUNDARY = OUTPUT_ENABLE; + + /* clear group1 flag */ + esmREG->SR4[0U] = 0x200U; + + /* clear group3 flag */ + esmREG->SR1[2U] = 0x2U; + + /* The nERROR pin will become inactive once the LTC counter expires */ + esmREG->EKR = 0x5U; + + return result; +} + +/** @fn void efcSelfTest(void) +* @brief EFUSE module self check Driver +* +* This function self checks the EFSUE module. +*/ +/* SourceId : SELFTEST_SourceId_013 */ +/* DesignId : SELFTEST_DesignId_013 */ +/* Requirements : HL_SR402 */ +void efcSelfTest(void) +{ +/* USER CODE BEGIN (30) */ +/* USER CODE END */ + /* configure self-test cycles */ + efcREG->SELF_TEST_CYCLES = 0x258U; + + /* configure self-test signature */ + efcREG->SELF_TEST_SIGN = 0x5362F97FU; + + /* configure boundary register to start ECC self-test */ + efcREG->BOUNDARY = 0x0000200FU; +} + +/** @fn boolean checkefcSelfTest(void) +* @brief EFUSE module self check Driver +* @return Returns TRUE if EFC Selftest was a PASS, else FALSE +* +* This function returns the status of efcSelfTest. +* Note: This function can be called only after calling efcSelfTest +*/ +/* SourceId : SELFTEST_SourceId_014 */ +/* DesignId : SELFTEST_DesignId_015 */ +/* Requirements : HL_SR403 */ +boolean checkefcSelfTest(void) +{ +/* USER CODE BEGIN (31) */ +/* USER CODE END */ + boolean result = FALSE; + + uint32 EFC_PINS, EFC_ERROR; + uint32 esmCh40Stat, esmCh41Stat = 0U; + + /* wait until EFC self-test is done */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((efcREG->PINS & EFC_SELF_TEST_DONE) == 0U) + { + }/* Wait */ + + /* check if EFC self-test error occurred */ + EFC_PINS = efcREG->PINS; + EFC_ERROR = efcREG->ERROR; + if(((EFC_PINS & EFC_SELF_TEST_ERROR) == 0U) && ((EFC_ERROR & 0x1FU) == 0U)) + { + /* check if EFC self-test error is set */ + esmCh40Stat = esmREG->SR4[0U] & 0x100U; + esmCh41Stat = esmREG->SR4[0U] & 0x200U; + if ((esmCh40Stat == 0U) && (esmCh41Stat == 0U)) + { + result = TRUE; + } + } + return result; +} + +/** @fn void fmcBus2Check(void) +* @brief Self Check Flash Bus2 Interface +* +* This function self checks Flash Bus2 Interface +*/ +/* SourceId : SELFTEST_SourceId_015 */ +/* DesignId : SELFTEST_DesignId_016 */ +/* Requirements : HL_SR404, HL_SR405 */ +void fmcBus2Check(void) +{ +/* USER CODE BEGIN (32) */ +/* USER CODE END */ + /* enable ECC logic inside FMC */ + flashWREG->FEDACCTRL1 = 0x000A060AU; + + if ((esmREG->SR1[0U] & 0x40U) == 0x40U) + { + /* a 1-bit error was detected during flash OTP read by flash module + run a self-check on ECC logic inside FMC */ + + /* clear ESM group1 channel 6 flag */ + esmREG->SR1[0U] = 0x40U; + + fmcECCcheck(); + } + + /* no 2-bit or 1-bit error detected during power-up */ + else + { + fmcECCcheck(); + } +/* USER CODE BEGIN (33) */ +/* USER CODE END */ +} + +/** @fn void fmcECCcheck(void) +* @brief Check Flash ECC Single Bit and multi Bit errors detection logic. +* +* This function Checks Flash ECC Single Bit and multi Bit errors detection logic. +*/ +/* SourceId : SELFTEST_SourceId_016 */ +/* DesignId : SELFTEST_DesignId_017 */ +/* Requirements : HL_SR404, HL_SR405 */ +void fmcECCcheck(void) +{ + volatile uint32 otpread; + volatile uint32 temp; + +/* USER CODE BEGIN (34) */ +/* USER CODE END */ + + /* read location with deliberate 1-bit error */ + otpread = flash1bitError; + if ((esmREG->SR1[0U] & 0x40U) == 0x40U) + { + /* 1-bit failure was indicated and corrected */ + flashWREG->FEDACSTATUS = 0x00010006U; + + /* clear ESM group1 channel 6 flag */ + esmREG->SR1[0U] = 0x40U; + + /* read location with deliberate 2-bit error */ + otpread = flash2bitError; + if ((esmREG->SR1[2U] & 0x80U) == 0x80U) + { + /* 2-bit failure was detected correctly */ + temp = flashWREG->FUNCERRADD; + flashWREG->FEDACSTATUS = 0x00020100U; + + /* clear ESM group3 channel 7 */ + esmREG->SR1[2U] = 0x80U; + + /* The nERROR pin will become inactive once the LTC counter expires */ + esmREG->EKR = 0x5U; + + } + else + { + /* ECC logic inside FMC cannot detect 2-bit error */ + selftestFailNotification(FMCECCCHECK_FAIL1); + } + } + else + { + /* ECC logic inside FMC cannot detect 1-bit error */ + selftestFailNotification(FMCECCCHECK_FAIL1); + } +/* USER CODE BEGIN (35) */ +/* USER CODE END */ +} + +/** @fn void checkB0RAMECC(void) +* @brief Check TCRAM1 ECC error detection logic. +* +* This function checks TCRAM1 ECC error detection logic. +*/ +/* SourceId : SELFTEST_SourceId_017 */ +/* DesignId : SELFTEST_DesignId_019 */ +/* Requirements : HL_SR408 */ +void checkB0RAMECC(void) +{ + volatile uint64 ramread = 0U; + volatile uint32 regread = 0U; + uint32 tcram1ErrStat, tcram2ErrStat = 0U; + + uint64 tcramA1_bk = tcramA1bit; + uint64 tcramA2_bk = tcramA2bit; + volatile uint32 i; +/* USER CODE BEGIN (36) */ +/* USER CODE END */ + + /* enable writes to ECC RAM, enable ECC error response */ + tcram1REG->RAMCTRL = 0x0005010AU; + tcram2REG->RAMCTRL = 0x0005010AU; + + /* the first 1-bit error will cause an error response */ + tcram1REG->RAMTHRESHOLD = 0x1U; + tcram2REG->RAMTHRESHOLD = 0x1U; + + /* allow SERR to be reported to ESM */ + tcram1REG->RAMINTCTRL = 0x1U; + tcram2REG->RAMINTCTRL = 0x1U; + + /* cause a 1-bit ECC error */ + _coreDisableRamEcc_(); + tcramA1bitError ^= 0x1U; + _coreEnableRamEcc_(); + + /* disable writes to ECC RAM */ + tcram1REG->RAMCTRL = 0x0005000AU; + tcram2REG->RAMCTRL = 0x0005000AU; + + /* read from location with 1-bit ECC error */ + ramread = tcramA1bit; + + /* Check for error status */ + tcram1ErrStat = tcram1REG->RAMERRSTATUS & 0x1U; + tcram2ErrStat = tcram2REG->RAMERRSTATUS & 0x1U; + /*SAFETYMCUSW 139 S MR:13.7 "LDRA Tool issue" */ + /*SAFETYMCUSW 139 S MR:13.7 "LDRA Tool issue" */ + if((tcram1ErrStat == 0U) && (tcram2ErrStat == 0U)) + { + /* TCRAM module does not reflect 1-bit error reported by CPU */ + selftestFailNotification(CHECKB0RAMECC_FAIL1); + } + else + { + /* clear SERR flag */ + tcram1REG->RAMERRSTATUS = 0x1U; + tcram2REG->RAMERRSTATUS = 0x1U; + + /* clear status flags for ESM group1 channels 26 and 28 */ + esmREG->SR1[0U] = 0x14000000U; + } + + /* enable writes to ECC RAM, enable ECC error response */ + tcram1REG->RAMCTRL = 0x0005010AU; + tcram2REG->RAMCTRL = 0x0005010AU; + + /* cause a 2-bit ECC error */ + _coreDisableRamEcc_(); + tcramA2bitError ^= 0x3U; + _coreEnableRamEcc_(); + + /* read from location with 2-bit ECC error this will cause a data abort to be generated */ + ramread = tcramA2bit; + + /* delay before restoring the ram value */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + for(i=0U;i<10U;i++) + { + }/* Wait */ + + regread = tcram1REG->RAMUERRADDR; + regread = tcram2REG->RAMUERRADDR; + + /* disable writes to ECC RAM */ + tcram1REG->RAMCTRL = 0x0005000AU; + tcram2REG->RAMCTRL = 0x0005000AU; + + /* Compute correct ECC */ + tcramA1bit = tcramA1_bk; + tcramA2bit = tcramA2_bk; + +/* USER CODE BEGIN (37) */ +/* USER CODE END */ +} + +/** @fn void checkB1RAMECC(void) +* @brief Check TCRAM2 ECC error detection logic. +* +* This function checks TCRAM2 ECC error detection logic. +*/ +/* SourceId : SELFTEST_SourceId_018 */ +/* DesignId : SELFTEST_DesignId_019 */ +/* Requirements : HL_SR408 */ +void checkB1RAMECC(void) +{ + volatile uint64 ramread = 0U; + volatile uint32 regread = 0U; + uint32 tcram1ErrStat, tcram2ErrStat = 0U; + + uint64 tcramB1_bk = tcramB1bit; + uint64 tcramB2_bk = tcramB2bit; + volatile uint32 i; +/* USER CODE BEGIN (38) */ +/* USER CODE END */ + + /* enable writes to ECC RAM, enable ECC error response */ + tcram1REG->RAMCTRL = 0x0005010AU; + tcram2REG->RAMCTRL = 0x0005010AU; + + /* the first 1-bit error will cause an error response */ + tcram1REG->RAMTHRESHOLD = 0x1U; + tcram2REG->RAMTHRESHOLD = 0x1U; + + /* allow SERR to be reported to ESM */ + tcram1REG->RAMINTCTRL = 0x1U; + tcram2REG->RAMINTCTRL = 0x1U; + + /* cause a 1-bit ECC error */ + _coreDisableRamEcc_(); + tcramB1bitError ^= 0x1U; + _coreEnableRamEcc_(); + + /* disable writes to ECC RAM */ + tcram1REG->RAMCTRL = 0x0005000AU; + tcram2REG->RAMCTRL = 0x0005000AU; + + /* read from location with 1-bit ECC error */ + ramread = tcramB1bit; + + /* Check for error status */ + tcram1ErrStat = tcram1REG->RAMERRSTATUS & 0x1U; + tcram2ErrStat = tcram2REG->RAMERRSTATUS & 0x1U; + /*SAFETYMCUSW 139 S MR:13.7 "LDRA Tool issue" */ + /*SAFETYMCUSW 139 S MR:13.7 "LDRA Tool issue" */ + if((tcram1ErrStat == 0U) && (tcram2ErrStat == 0U)) + { + /* TCRAM module does not reflect 1-bit error reported by CPU */ + selftestFailNotification(CHECKB1RAMECC_FAIL1); + } + else + { + /* clear SERR flag */ + tcram1REG->RAMERRSTATUS = 0x1U; + tcram2REG->RAMERRSTATUS = 0x1U; + + /* clear status flags for ESM group1 channels 26 and 28 */ + esmREG->SR1[0U] = 0x14000000U; + } + + /* enable writes to ECC RAM, enable ECC error response */ + tcram1REG->RAMCTRL = 0x0005010AU; + tcram2REG->RAMCTRL = 0x0005010AU; + + /* cause a 2-bit ECC error */ + _coreDisableRamEcc_(); + tcramB2bitError ^= 0x3U; + _coreEnableRamEcc_(); + + /* read from location with 2-bit ECC error this will cause a data abort to be generated */ + ramread = tcramB2bit; + + /* delay before restoring the ram value */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + for(i=0U;i<10U;i++) + { + }/* Wait */ + + regread = tcram1REG->RAMUERRADDR; + regread = tcram2REG->RAMUERRADDR; + + /* disable writes to ECC RAM */ + tcram1REG->RAMCTRL = 0x0005000AU; + tcram2REG->RAMCTRL = 0x0005000AU; + + /* Compute correct ECC */ + tcramB1bit = tcramB1_bk; + tcramB2bit = tcramB2_bk; + +/* USER CODE BEGIN (39) */ +/* USER CODE END */ +} + +/** @fn void checkFlashECC(void) +* @brief Check Flash ECC error detection logic. +* +* This function checks Flash ECC error detection logic. +*/ +/* SourceId : SELFTEST_SourceId_019 */ +/* DesignId : SELFTEST_DesignId_020 */ +/* Requirements : HL_SR405 */ +void checkFlashECC(void) +{ + /* Routine to check operation of ECC logic inside CPU for accesses to program flash */ + volatile uint32 flashread = 0U; + +/* USER CODE BEGIN (40) */ +/* USER CODE END */ + + /* Flash Module ECC Response enabled */ + flashWREG->FEDACCTRL1 = 0x000A060AU; + + /* Enable diagnostic mode and select diag mode 7 */ + flashWREG->FDIAGCTRL = 0x00050007U; + + /* Select ECC diagnostic mode, single-bit to be corrupted */ + flashWREG->FPAROVR = 0x00005A01U; + + /* Set the trigger for the diagnostic mode */ + flashWREG->FDIAGCTRL |= 0x01000000U; + + /* read a flash location from the mirrored memory map */ + flashread = flashBadECC1; + + /* disable diagnostic mode */ + flashWREG->FDIAGCTRL = 0x000A0007U; + + /* this will have caused a single-bit error to be generated and corrected by CPU */ + /* single-bit error not captured in flash module */ + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + if ((flashWREG->FEDACSTATUS & 0x2U) == 0U) + { + selftestFailNotification(CHECKFLASHECC_FAIL1); + } + else + { + /* clear single-bit error flag */ + flashWREG->FEDACSTATUS = 0x2U; + + /* clear ESM flag */ + esmREG->SR1[0U] = 0x40U; + + /* Enable diagnostic mode and select diag mode 7 */ + flashWREG->FDIAGCTRL = 0x00050007U; + + /* Select ECC diagnostic mode, two bits of ECC to be corrupted */ + flashWREG->FPAROVR = 0x00005A03U; + + /* Set the trigger for the diagnostic mode */ + flashWREG->FDIAGCTRL |= 0x01000000U; + + /* read from flash location from mirrored memory map this will cause a data abort */ + flashread = flashBadECC2; + + /* Read FUNCERRADD register */ + flashread = flashWREG->FUNCERRADD; + + /* disable diagnostic mode */ + flashWREG->FDIAGCTRL = 0x000A0007U; + } + +/* USER CODE BEGIN (41) */ +/* USER CODE END */ +} + +/** @fn void custom_dabort(void) +* @brief Custom Data abort routine for the application. +* +* Custom Data abort routine for the application. +*/ +void custom_dabort(void) +{ + /* Need custom data abort handler here. + * This data abort is not caused due to diagnostic checks of flash and TCRAM ECC logic. + */ +/* USER CODE BEGIN (42) */ +/* USER CODE END */ +} + +/** @fn void stcSelfCheckFail(void) +* @brief STC Self test check fail service routine +* +* This function is called if STC Self test check fail. +*/ +void stcSelfCheckFail(void) +{ +/* USER CODE BEGIN (43) */ +/* USER CODE END */ + /* CPU self-test controller's own self-test failed. + * It is not possible to verify that STC is capable of indicating a CPU self-test error. + * It is not recommended to continue operation. + */ + + /* User can add small piece of code to take system to Safe state using user code section. + * Note: Just removing the for(;;) will take the system to unknown state under ST failure, + * since it is not handled by HALCoGen driver */ +/* USER CODE BEGIN (44) */ +/* USER CODE END */ + /*SAFETYMCUSW 5 C MR:NA "for(;;) can be removed by adding "# if 0" and "# endif" in the user codes above and below" */ + /*SAFETYMCUSW 26 S MR:NA "for(;;) can be removed by adding "# if 0" and "# endif" in the user codes above and below" */ + /*SAFETYMCUSW 28 D MR:NA "for(;;) can be removed by adding "# if 0" and "# endif" in the user codes above and below" */ + for(;;) + { + }/* Wait */ +/* USER CODE BEGIN (45) */ +/* USER CODE END */ +} + +/** @fn void cpuSelfTestFail(void) +* @brief CPU Self test check fail service routine +* +* This function is called if CPU Self test check fail. +*/ +void cpuSelfTestFail(void) +{ +/* USER CODE BEGIN (46) */ +/* USER CODE END */ + /* CPU self-test has failed. + * CPU operation is not reliable. + */ +/* USER CODE BEGIN (47) */ +/* USER CODE END */ + /*SAFETYMCUSW 5 C MR:NA "for(;;) can be removed by adding "# if 0" and "# endif" in the user codes above and below" */ + /*SAFETYMCUSW 26 S MR:NA "for(;;) can be removed by adding "# if 0" and "# endif" in the user codes above and below" */ + /*SAFETYMCUSW 28 D MR:NA "for(;;) can be removed by adding "# if 0" and "# endif" in the user codes above and below" */ + for(;;) + { + }/* Wait */ +/* USER CODE BEGIN (48) */ +/* USER CODE END */ +} + + +/** @fn void vimParityCheck(void) +* @brief Routine to check VIM RAM parity error detection and signaling mechanism +* +* Routine to check VIM RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_020 */ +/* DesignId : SELFTEST_DesignId_021 */ +/* Requirements : HL_SR385 */ +void vimParityCheck(void) +{ + volatile uint32 vimramread = 0U; + uint32 vimparctl_bk = VIM_PARCTL; + +/* USER CODE BEGIN (49) */ +/* USER CODE END */ + + /* Enable parity checking and parity test mode */ + VIM_PARCTL = 0x0000010AU; + + /* flip a bit in the VIM RAM parity location */ + VIMRAMPARLOC ^= 0x1U; + + /* disable parity test mode */ + VIM_PARCTL = 0x0000000AU; + + /* cause parity error */ + vimramread = VIMRAMLOC; + + /* check if ESM group1 channel 15 is flagged */ + if ((esmREG->SR1[0U] & 0x8000U) ==0U) + { + /* VIM RAM parity error was not flagged to ESM. */ + selftestFailNotification(VIMPARITYCHECK_FAIL1); + } + else + { + /* clear VIM RAM parity error flag in VIM */ + VIM_PARFLG = 0x1U; + + /* clear ESM group1 channel 15 flag */ + esmREG->SR1[0U] = 0x8000U; + + /* Enable parity checking and parity test mode */ + VIM_PARCTL = 0x0000010AU; + + /* Revert back to correct data, flip bit 0 of the parity location */ + VIMRAMPARLOC ^= 0x1U; + } + + /* Restore Parity Control register */ + VIM_PARCTL = vimparctl_bk; + +/* USER CODE BEGIN (50) */ +/* USER CODE END */ +} + + +/** @fn void dmaParityCheck(void) +* @brief Routine to check DMA control packet RAM parity error detection and signaling mechanism +* +* Routine to check DMA control packet RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_021 */ +/* DesignId : SELFTEST_DesignId_022 */ +/* Requirements : HL_SR388 */ +void dmaParityCheck(void) +{ + volatile uint32 dmaread = 0U; + uint32 dmaparcr_bk = DMA_PARCR; + +/* USER CODE BEGIN (51) */ +/* USER CODE END */ + + /* Enable parity checking and parity test mode */ + DMA_PARCR = 0x0000010AU; + + /* Flip a bit in DMA RAM parity location */ + DMARAMPARLOC ^= 0x1U; + + /* Disable parity test mode */ + DMA_PARCR = 0x0000000AU; + + /* Cause parity error */ + dmaread = DMARAMLOC; + + /* Check if ESM group1 channel 3 is flagged */ + if ((esmREG->SR1[0U] & 0x8U) == 0U) + { + /* DMA RAM parity error was not flagged to ESM. */ + selftestFailNotification(DMAPARITYCHECK_FAIL1); + } + else + { + /* clear DMA parity error flag in DMA */ + DMA_PARADDR = 0x01000000U; + + /* clear ESM group1 channel 3 flag */ + esmREG->SR1[0U] = 0x8U; + + /* Enable parity checking and parity test mode */ + DMA_PARCR = 0x0000010AU; + + /* Revert back to correct data, flip bit 0 of the parity location */ + DMARAMPARLOC ^= 0x1U; + } + + /* Restrore Parity Control register */ + DMA_PARCR = dmaparcr_bk; + +/* USER CODE BEGIN (52) */ +/* USER CODE END */ +} + + +/** @fn void het1ParityCheck(void) +* @brief Routine to check HET1 RAM parity error detection and signaling mechanism +* +* Routine to check HET1 RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_022 */ +/* DesignId : SELFTEST_DesignId_024 */ +/* Requirements : HL_SR389 */ +void het1ParityCheck(void) +{ + volatile uint32 nhetread = 0U; + uint32 hetpcr_bk = hetREG1->PCR; + +/* USER CODE BEGIN (53) */ +/* USER CODE END */ + + /* Set TEST mode and enable parity checking */ + hetREG1->PCR = 0x0000010AU; + + /* flip parity bit */ + NHET1RAMPARLOC ^= 0x1U; + + /* Disable TEST mode */ + hetREG1->PCR = 0x0000000AU; + + /* read to cause parity error */ + nhetread = NHET1RAMLOC; + + /* check if ESM group1 channel 7 is flagged */ + if ((esmREG->SR1[0U] & 0x80U) ==0U) + { + /* NHET1 RAM parity error was not flagged to ESM. */ + selftestFailNotification(HET1PARITYCHECK_FAIL1); + } + else + { + /* clear ESM group1 channel 7 flag */ + esmREG->SR1[0U] = 0x80U; + + /* Set TEST mode and enable parity checking */ + hetREG1->PCR = 0x0000010AU; + + /* Revert back to correct data, flip bit 0 of the parity location */ + NHET1RAMPARLOC ^= 0x1U; + } + + /* Restore Parity comtrol register */ + hetREG1->PCR = hetpcr_bk; + +/* USER CODE BEGIN (54) */ +/* USER CODE END */ +} + + +/** @fn void htu1ParityCheck(void) +* @brief Routine to check HTU1 RAM parity error detection and signaling mechanism +* +* Routine to check HTU1 RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_023 */ +/* DesignId : SELFTEST_DesignId_025 */ +/* Requirements : HL_SR390 */ +void htu1ParityCheck(void) +{ + volatile uint32 hturead = 0U; + uint32 htupcr_bk = htuREG1->PCR; + +/* USER CODE BEGIN (55) */ +/* USER CODE END */ + + /* Enable parity and TEST mode */ + htuREG1->PCR = 0x0000010AU; + + /* flip parity bit */ + HTU1PARLOC ^= 0x1U; + + /* Disable parity RAM test mode */ + htuREG1->PCR = 0x0000000AU; + + /* read to cause parity error */ + hturead = HTU1RAMLOC; + + /* check if ESM group1 channel 8 is flagged */ + if ((esmREG->SR1[0U] & 0x100U) == 0U) + { + /* HTU1 RAM parity error was not flagged to ESM. */ + selftestFailNotification(HTU1PARITYCHECK_FAIL1); + } + else + { + /* Clear HTU parity error flag */ + htuREG1->PAR = 0x00010000U; + esmREG->SR1[0U] = 0x100U; + + /* Enable parity and TEST mode */ + htuREG1->PCR = 0x0000010AU; + + /* Revert back to correct data, flip bit 0 of the parity location */ + HTU1PARLOC ^= 0x1U; + } + + /* Restore Parity control register */ + htuREG1->PCR = htupcr_bk; + +/* USER CODE BEGIN (56) */ +/* USER CODE END */ + +} + + +/** @fn void het2ParityCheck(void) +* @brief Routine to check HET2 RAM parity error detection and signaling mechanism +* +* Routine to check HET2 RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_024 */ +/* DesignId : SELFTEST_DesignId_024 */ +/* Requirements : HL_SR389 */ +void het2ParityCheck(void) +{ + volatile uint32 nhetread = 0U; + uint32 hetpcr_bk = hetREG2->PCR; + uint32 esmCh7Stat, esmCh34Stat = 0U; + +/* USER CODE BEGIN (57) */ +/* USER CODE END */ + + /* Set TEST mode and enable parity checking */ + hetREG2->PCR = 0x0000010AU; + + /* flip parity bit */ + NHET2RAMPARLOC ^= 0x1U; + + /* Disable TEST mode */ + hetREG2->PCR = 0x0000000AU; + + /* read to cause parity error */ + nhetread = NHET2RAMLOC; + + /* check if ESM group1 channel 7 or 34 (If not reserved) is flagged */ + esmCh7Stat = esmREG->SR1[0U] & 0x80U; + esmCh34Stat = esmREG->SR4[0U] & 0x4U; + if ((esmCh7Stat == 0U) && (esmCh34Stat ==0U)) + { + /* NHET2 RAM parity error was not flagged to ESM. */ + selftestFailNotification(HET2PARITYCHECK_FAIL1); + } + else + { + /* clear ESM group1 channel 7 flag */ + esmREG->SR1[0U] = 0x80U; + + /* clear ESM group1 channel 34 flag */ + esmREG->SR4[0U] = 0x4U; + + /* Set TEST mode and enable parity checking */ + hetREG2->PCR = 0x0000010AU; + + /* Revert back to correct data, flip bit 0 of the parity location */ + NHET2RAMPARLOC ^= 0x1U; + } + + /* Restore parity control register */ + hetREG2->PCR = hetpcr_bk; + +/* USER CODE BEGIN (58) */ +/* USER CODE END */ +} + + +/** @fn void htu2ParityCheck(void) +* @brief Routine to check HTU2 RAM parity error detection and signaling mechanism +* +* Routine to check HTU2 RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_025 */ +/* DesignId : SELFTEST_DesignId_025 */ +/* Requirements : HL_SR390 */ +void htu2ParityCheck(void) +{ + volatile uint32 hturead = 0U; + uint32 htupcr_bk = htuREG2->PCR; + +/* USER CODE BEGIN (59) */ +/* USER CODE END */ + + /* Enable parity and TEST mode */ + htuREG2->PCR = 0x0000010AU; + + /* flip parity bit */ + HTU2PARLOC ^= 0x1U; + + /* Disable parity RAM test mode */ + htuREG2->PCR = 0x0000000AU; + + /* read to cause parity error */ + hturead = HTU2RAMLOC; + + /* check if ESM group1 channel 8 is flagged */ + if ((esmREG->SR1[0U] & 0x100U) == 0U) + { + /* HTU2 RAM parity error was not flagged to ESM. */ + selftestFailNotification(HTU2PARITYCHECK_FAIL1); + } + else + { + /* Clear HTU parity error flag */ + htuREG2->PAR = 0x00010000U; + esmREG->SR1[0U] = 0x100U; + + /* Enable parity and TEST mode */ + htuREG2->PCR = 0x0000010AU; + + /* Revert back to correct data, flip bit 0 of the parity location */ + HTU2PARLOC ^= 0x1U; + } + + /* Restore parity control register*/ + htuREG2->PCR = htupcr_bk; + +/* USER CODE BEGIN (60) */ +/* USER CODE END */ +} + + +/** @fn void adc1ParityCheck(void) +* @brief Routine to check ADC1 RAM parity error detection and signaling mechanism +* +* Routine to check ADC1 RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_026 */ +/* DesignId : SELFTEST_DesignId_023 */ +/* Requirements : HL_SR387 */ +void adc1ParityCheck(void) +{ + volatile uint32 adcramread = 0U; + uint32 adcparcr_bk = adcREG1->PARCR; + +/* USER CODE BEGIN (61) */ +/* USER CODE END */ + + /* Set the TEST bit in the PARCR and enable parity checking */ + adcREG1->PARCR = 0x10AU; + + /* Invert the parity bits inside the ADC1 RAM's first location */ + adcPARRAM1 = ~(adcPARRAM1); + + /* clear the TEST bit */ + adcREG1->PARCR = 0x00AU; + + /* This read is expected to trigger a parity error */ + adcramread = adcRAM1; + + /* Check for ESM group1 channel 19 to be flagged */ + if ((esmREG->SR1[0U] & 0x80000U) ==0U) + { + /* no ADC1 RAM parity error was flagged to ESM */ + selftestFailNotification(ADC1PARITYCHECK_FAIL1); + } + else + { + /* clear ADC1 RAM parity error flag */ + esmREG->SR1[0U] = 0x80000U; + + /* Set the TEST bit in the PARCR and enable parity checking */ + adcREG1->PARCR = 0x10AU; + + /* Revert back the parity bits to correct data */ + adcPARRAM1 = ~(adcPARRAM1); + } + + /* Restore parity control register */ + adcREG1->PARCR = adcparcr_bk; + +/* USER CODE BEGIN (62) */ +/* USER CODE END */ +} + + +/** @fn void adc2ParityCheck(void) +* @brief Routine to check ADC2 RAM parity error detection and signaling mechanism +* +* Routine to check ADC2 RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_027 */ +/* DesignId : SELFTEST_DesignId_023 */ +/* Requirements : HL_SR387 */ +void adc2ParityCheck(void) +{ + volatile uint32 adcramread = 0U; + uint32 adcparcr_bk = adcREG2->PARCR; + +/* USER CODE BEGIN (63) */ +/* USER CODE END */ + + /* Set the TEST bit in the PARCR and enable parity checking */ + adcREG2->PARCR = 0x10AU; + + /* Invert the parity bits inside the ADC2 RAM's first location */ + adcPARRAM2 = ~(adcPARRAM2); + + /* clear the TEST bit */ + adcREG2->PARCR = 0x00AU; + + /* This read is expected to trigger a parity error */ + adcramread = adcRAM2; + + /* Check for ESM group1 channel 1 to be flagged */ + if ((esmREG->SR1[0U] & 0x2U) == 0U) + { + /* no ADC2 RAM parity error was flagged to ESM */ + selftestFailNotification(ADC2PARITYCHECK_FAIL1); + } + else + { + /* clear ADC2 RAM parity error flag */ + esmREG->SR1[0U] = 0x2U; + + /* Set the TEST bit in the PARCR and enable parity checking */ + adcREG2->PARCR = 0x10AU; + + /* Revert back the parity bits to correct data */ + adcPARRAM2 = ~(adcPARRAM2); + } + + /* Restore parity control register*/ + adcREG2->PARCR = adcparcr_bk; + +/* USER CODE BEGIN (64) */ +/* USER CODE END */ +} + +/** @fn void can1ParityCheck(void) +* @brief Routine to check CAN1 RAM parity error detection and signaling mechanism +* +* Routine to check CAN1 RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_028 */ +/* DesignId : SELFTEST_DesignId_026 */ +/* Requirements : HL_SR393 */ +void can1ParityCheck(void) +{ + volatile uint32 canread = 0U; + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + uint32 canctl_bk = canREG1->CTL; + +/* USER CODE BEGIN (65) */ +/* USER CODE END */ + + /* Disable parity, init mode, TEST mode */ + canREG1->CTL = 0x00001481U; + + /* Enable RAM Direct Access mode */ + canREG1->TEST = 0x00000200U; + + /* flip the parity bit */ + canPARRAM1 ^= 0x00001000U; + + /* Enable parity, disable init, still TEST mode */ + canREG1->CTL = 0x00002880U; + + /* Read location with parity error */ + canread = canRAM1; + + /* check if ESM group1 channel 21 is flagged */ + if ((esmREG->SR1[0U] & 0x00200000U) == 0U) + { + /* No DCAN1 RAM parity error was flagged to ESM */ + selftestFailNotification(CAN1PARITYCHECK_FAIL1); + } + else + { + /* clear ESM group1 channel 21 flag */ + esmREG->SR1[0U] = 0x00200000U; + + /* Disable parity, init mode, TEST mode */ + canREG1->CTL = 0x00001481U; + + /* Revert back to correct data, flip bit 0 of the parity location */ + canPARRAM1 ^= 0x00001000U; + } + + /* Disable RAM Direct Access mode */ + canREG1->TEST = 0x00000000U; + + /* Restore CTL register */ + canREG1->CTL = canctl_bk; + + /* Read Error and Status register to clear Parity Error bit */ + canread = canREG1->ES; + +/* USER CODE BEGIN (66) */ +/* USER CODE END */ +} + + +/** @fn void can2ParityCheck(void) +* @brief Routine to check CAN2 RAM parity error detection and signaling mechanism +* +* Routine to check CAN2 RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_029 */ +/* DesignId : SELFTEST_DesignId_026 */ +/* Requirements : HL_SR393 */ +void can2ParityCheck(void) +{ + volatile uint32 canread = 0U; + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + uint32 canctl_bk = canREG2->CTL; + +/* USER CODE BEGIN (67) */ +/* USER CODE END */ + + /* Disable parity, init mode, TEST mode */ + canREG2->CTL = 0x00001481U; + + /* Enable RAM Direct Access mode */ + canREG2->TEST = 0x00000200U; + + /* flip the parity bit */ + canPARRAM2 ^= 0x00001000U; + + /* Enable parity, disable init, still TEST mode */ + canREG2->CTL = 0x00002880U; + + /* Read location with parity error */ + canread = canRAM2; + + /* check if ESM group1 channel 23 is flagged */ + if ((esmREG->SR1[0U] & 0x00800000U) == 0U) + { + /* No DCAN2 RAM parity error was flagged to ESM */ + selftestFailNotification(CAN2PARITYCHECK_FAIL1); + } + else + { + /* clear ESM group1 channel 23 flag */ + esmREG->SR1[0U] = 0x00800000U; + + /* Disable parity, init mode, TEST mode */ + canREG2->CTL = 0x00001481U; + + /* Revert back to correct data, flip bit 0 of the parity location */ + canPARRAM2 ^= 0x00001000U; + } + + /* Disable RAM Direct Access mode */ + canREG2->TEST = 0x00000000U; + + /* disable TEST mode */ + canREG2->CTL = canctl_bk; + + /* Read Error and Status register to clear Parity Error bit */ + canread = canREG2->ES; + +/* USER CODE BEGIN (68) */ +/* USER CODE END */ +} + + +/** @fn void can3ParityCheck(void) +* @brief Routine to check CAN3 RAM parity error detection and signaling mechanism +* +* Routine to check CAN3 RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_030 */ +/* DesignId : SELFTEST_DesignId_026 */ +/* Requirements : HL_SR393 */ +void can3ParityCheck(void) +{ + volatile uint32 canread = 0U; + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + uint32 canctl_bk = canREG3->CTL; + +/* USER CODE BEGIN (69) */ +/* USER CODE END */ + + /* Disable parity, init mode, TEST mode */ + canREG3->CTL = 0x00001481U; + + /* Enable RAM Direct Access mode */ + canREG3->TEST = 0x00000200U; + + /* flip the parity bit */ + canPARRAM3 ^= 0x00001000U; + + /* Enable parity, disable init, still TEST mode */ + canREG3->CTL = 0x00002880U; + + /* Read location with parity error */ + canread = canRAM3; + + /* check if ESM group1 channel 22 is flagged */ + if ((esmREG->SR1[0U] & 0x00400000U) == 0U) + { + /* No DCAN3 RAM parity error was flagged to ESM */ + selftestFailNotification(CAN3PARITYCHECK_FAIL1); + } + else + { + /* clear ESM group1 channel 22 flag */ + esmREG->SR1[0U] = 0x00400000U; + + /* Disable parity, init mode, TEST mode */ + canREG3->CTL = 0x00001481U; + + /* Revert back to correct data, flip bit 0 of the parity location */ + canPARRAM3 ^= 0x00001000U; + } + + /* Disable RAM Direct Access mode */ + canREG3->TEST = 0x00000000U; + + /* disable TEST mode */ + canREG3->CTL = canctl_bk; + + /* Read Error and Status register to clear Parity Error bit */ + canread = canREG3->ES; + +/* USER CODE BEGIN (70) */ +/* USER CODE END */ +} + + +/** @fn void mibspi1ParityCheck(void) +* @brief Routine to check MIBSPI1 RAM parity error detection and signaling mechanism +* +* Routine to check MIBSPI1 RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_031 */ +/* DesignId : SELFTEST_DesignId_027 */ +/* Requirements : HL_SR386 */ +void mibspi1ParityCheck(void) +{ + volatile uint32 spiread = 0U; + uint32 mibspie_bk = mibspiREG1->MIBSPIE; + uint32 mibspictl_bk = mibspiREG1->UERRCTRL; + +/* USER CODE BEGIN (71) */ +/* USER CODE END */ + + /* enable multi-buffered mode */ + mibspiREG1->MIBSPIE = 0x1U; + + /* enable parity error detection */ + mibspiREG1->UERRCTRL = (mibspiREG1->UERRCTRL & 0xFFFFFFF0U) | (0xAU); + + /* enable parity test mode */ + mibspiREG1->UERRCTRL |= 0x00000100U; + + /* flip bit 0 of the parity location */ + mibspiPARRAM1 ^= 0x1U; + + /* disable parity test mode */ + mibspiREG1->UERRCTRL &= 0xFFFFFEFFU; + + /* read from MibSPI1 RAM to cause parity error */ + spiread = MIBSPI1RAMLOC; + + /* check if ESM group1 channel 17 is flagged */ + if ((esmREG->SR1[0U] & 0x20000U) == 0U) + { + /* No MibSPI1 RAM parity error was flagged to ESM. */ + selftestFailNotification(MIBSPI1PARITYCHECK_FAIL1); + } + else + { + /* clear parity error flags */ + mibspiREG1->UERRSTAT = 0x3U; + + /* clear ESM group1 channel 17 flag */ + esmREG->SR1[0U] = 0x20000U; + + /* enable parity test mode */ + mibspiREG1->UERRCTRL |= 0x00000100U; + + /* Revert back to correct data, flip bit 0 of the parity location */ + mibspiPARRAM1 ^= 0x1U; + } + + /* Restore MIBSPI control registers */ + mibspiREG1->UERRCTRL = mibspictl_bk; + mibspiREG1->MIBSPIE = mibspie_bk; + +/* USER CODE BEGIN (72) */ +/* USER CODE END */ +} + +/** @fn void mibspi3ParityCheck(void) +* @brief Routine to check MIBSPI3 RAM parity error detection and signaling mechanism +* +* Routine to check MIBSPI3 RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_032 */ +/* DesignId : SELFTEST_DesignId_027 */ +/* Requirements : HL_SR386 */ +void mibspi3ParityCheck(void) +{ + volatile uint32 spiread = 0U; + uint32 mibspie_bk = mibspiREG3->MIBSPIE; + uint32 mibspictl_bk = mibspiREG3->UERRCTRL; + +/* USER CODE BEGIN (73) */ +/* USER CODE END */ + + /* enable multi-buffered mode */ + mibspiREG3->MIBSPIE = 0x1U; + + /* enable parity test mode */ + mibspiREG3->UERRCTRL |= 0x00000100U; + + /* flip bit 0 of the parity location */ + mibspiPARRAM3 ^= 0x1U; + + /* enable parity error detection */ + mibspiREG3->UERRCTRL = (mibspiREG3->UERRCTRL & 0xFFFFFFF0U) | (0xAU); + + /* disable parity test mode */ + mibspiREG3->UERRCTRL &= 0xFFFFFEFFU; + + /* read from MibSPI3 RAM to cause parity error */ + spiread = MIBSPI3RAMLOC; + + /* check if ESM group1 channel 18 is flagged */ + if ((esmREG->SR1[0U] & 0x40000U) == 0U) + { + /* No MibSPI3 RAM parity error was flagged to ESM. */ + selftestFailNotification(MIBSPI3PARITYCHECK_FAIL1); + } + else + { + /* clear parity error flags */ + mibspiREG3->UERRSTAT = 0x3U; + + /* clear ESM group1 channel 18 flag */ + esmREG->SR1[0U] = 0x40000U; + + /* enable parity test mode */ + mibspiREG3->UERRCTRL |= 0x00000100U; + + /* Revert back to correct data, flip bit 0 of the parity location */ + mibspiPARRAM3 ^= 0x1U; + } + + /* Restore MIBSPI control registers */ + mibspiREG3->UERRCTRL = mibspictl_bk; + mibspiREG3->MIBSPIE = mibspie_bk; + +/* USER CODE BEGIN (74) */ +/* USER CODE END */ +} + +/** @fn void mibspi5ParityCheck(void) +* @brief Routine to check MIBSPI5 RAM parity error detection and signaling mechanism +* +* Routine to check MIBSPI5 RAM parity error detection and signaling mechanism +*/ +/* SourceId : SELFTEST_SourceId_033 */ +/* DesignId : SELFTEST_DesignId_027 */ +/* Requirements : HL_SR386 */ +void mibspi5ParityCheck(void) +{ + volatile uint32 spiread = 0U; + uint32 mibspie_bk = mibspiREG5->MIBSPIE; + uint32 mibspictl_bk = mibspiREG5->UERRCTRL; + +/* USER CODE BEGIN (75) */ +/* USER CODE END */ + + /* enable multi-buffered mode */ + mibspiREG5->MIBSPIE = 0x1U; + + /* enable parity test mode */ + mibspiREG5->UERRCTRL |= 0x00000100U; + + /* flip bit 0 of the parity location */ + mibspiPARRAM5 ^= 0x1U; + + /* enable parity error detection */ + mibspiREG5->UERRCTRL = (mibspiREG5->UERRCTRL & 0xFFFFFFF0U) | (0xAU); + + /* disable parity test mode */ + mibspiREG5->UERRCTRL &= 0xFFFFFEFFU; + + /* read from MibSPI5 RAM to cause parity error */ + spiread = MIBSPI5RAMLOC; + + /* check if ESM group1 channel 24 is flagged */ + if ((esmREG->SR1[0U] & 0x01000000U) == 0U) + { + /* No MibSPI5 RAM parity error was flagged to ESM. */ + selftestFailNotification(MIBSPI5PARITYCHECK_FAIL1); + } + else + { + /* clear parity error flags */ + mibspiREG5->UERRSTAT = 0x3U; + + /* clear ESM group1 channel 24 flag */ + esmREG->SR1[0U] = 0x01000000U; + + /* enable parity test mode */ + mibspiREG5->UERRCTRL |= 0x00000100U; + + /* Revert back to correct data, flip bit 0 of the parity location */ + mibspiPARRAM5 ^= 0x1U; + } + + /* Restore MIBSPI control registers */ + mibspiREG5->UERRCTRL = mibspictl_bk; + mibspiREG5->MIBSPIE = mibspie_bk; + +/* USER CODE BEGIN (76) */ +/* USER CODE END */ +} + +/** @fn void checkRAMECC(void) +* @brief Check TCRAM ECC error detection logic. +* +* This function checks TCRAM ECC error detection logic. +*/ +/* SourceId : SELFTEST_SourceId_034 */ +/* DesignId : SELFTEST_DesignId_019 */ +/* Requirements : HL_SR408 */ +void checkRAMECC(void) +{ + volatile uint64 ramread = 0U; + volatile uint32 regread = 0U; + uint32 tcram1ErrStat, tcram2ErrStat = 0U; + + uint64 tcramA1_bk = tcramA1bit; + uint64 tcramB1_bk = tcramB1bit; + uint64 tcramA2_bk = tcramA2bit; + uint64 tcramB2_bk = tcramB2bit; + + /* Clear RAMOCUUR before setting RAMTHRESHOLD register */ + tcram1REG->RAMOCCUR = 0U; + tcram2REG->RAMOCCUR = 0U; + + /* Set Single-bit Error Threshold Count as 1 */ + tcram1REG->RAMTHRESHOLD = 1U; + tcram2REG->RAMTHRESHOLD = 1U; + + /* Enable single bit error generation */ + tcram1REG->RAMINTCTRL = 1U; + tcram2REG->RAMINTCTRL = 1U; + + /* Enable writes to ECC RAM, enable ECC error response */ + tcram1REG->RAMCTRL = 0x0005010AU; + tcram2REG->RAMCTRL = 0x0005010AU; + + /* Force a single bit error in both the banks */ + _coreDisableRamEcc_(); + tcramA1bitError ^= 1U; + tcramB1bitError ^= 1U; + _coreEnableRamEcc_(); + + /* Read the corrupted data to generate single bit error */ + ramread = tcramA1bit; + ramread = tcramB1bit; + + /* Check for error status */ + tcram1ErrStat = tcram1REG->RAMERRSTATUS & 0x1U; + tcram2ErrStat = tcram2REG->RAMERRSTATUS & 0x1U; + /*SAFETYMCUSW 139 S MR:13.7 "LDRA Tool issue" */ + /*SAFETYMCUSW 139 S MR:13.7 "LDRA Tool issue" */ + if((tcram1ErrStat == 0U) || (tcram2ErrStat == 0U)) + { + /* TCRAM module does not reflect 1-bit error reported by CPU */ + selftestFailNotification(CHECKRAMECC_FAIL1); + } + else + { + if((esmREG->SR1[0U] & 0x14000000U) != 0x14000000U) + { + /* TCRAM 1-bit error not flagged in ESM */ + selftestFailNotification(CHECKRAMECC_FAIL2); + } + else + { + /* Clear single bit error flag in TCRAM module */ + tcram1REG->RAMERRSTATUS = 0x1U; + tcram2REG->RAMERRSTATUS = 0x1U; + + /* Clear ESM status */ + esmREG->SR1[0U] = 0x14000000U; + } + } + + /* Force a double bit error in both the banks */ + _coreDisableRamEcc_(); + tcramA2bitError ^= 3U; + tcramB2bitError ^= 3U; + _coreEnableRamEcc_(); + + /* Read the corrupted data to generate double bit error */ + ramread = tcramA2bit; + ramread = tcramB2bit; + + regread = tcram1REG->RAMUERRADDR; + regread = tcram2REG->RAMUERRADDR; + + /* disable writes to ECC RAM */ + tcram1REG->RAMCTRL = 0x0005000AU; + tcram2REG->RAMCTRL = 0x0005000AU; + + /* Compute correct ECC */ + tcramA1bit = tcramA1_bk; + tcramB1bit = tcramB1_bk; + tcramA2bit = tcramA2_bk; + tcramB2bit = tcramB2_bk; +} + +/** @fn void checkClockMonitor(void) +* @brief Check clock monitor failure detection logic. +* +* This function checks clock monitor failure detection logic. +*/ +/* SourceId : SELFTEST_SourceId_035 */ +/* DesignId : SELFTEST_DesignId_028 */ +/* Requirements : HL_SR394 */ +void checkClockMonitor(void) +{ + uint32 ghvsrc_bk; + + /* Enable clock monitor range detection circuitry */ + systemREG1->CLKTEST |= 0x03000000U; + + /* Backup register GHVSRC */ + ghvsrc_bk = systemREG1->GHVSRC; + + /* Switch all clock domains to HF LPO */ + systemREG1->GHVSRC = 0x05050005U; + + /* Disable oscillator to cause a oscillator fail */ + systemREG1->CSDISSET = 0x1U; + + /* Wait till oscillator fail flag is set */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((systemREG1->GBLSTAT & 0x1U) == 0U) + { + } /* Wait */ + + if((esmREG->SR1[0U] & 0x800U) != 0x800U) + { + selftestFailNotification(CHECKCLOCKMONITOR_FAIL1); + } + else + { + /* Clear ESM flag */ + esmREG->SR1[0U] = 0x800U; + + /* Disable clock monitor range detection circuitry */ + systemREG1->CLKTEST &= ~(0x03000000U); + + /* Enable oscillator */ + systemREG1->CSDISCLR = 0x1U; + + /* Wait until oscillator is enabled */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((systemREG1->CSVSTAT & 0x3U) == 0U) + { + } /* Wait */ + + /* Clear oscillator fail flag and PLL slip flag if any*/ + systemREG1->GBLSTAT = 0x301U; + + /* Switch back all clock domains */ + systemREG1->GHVSRC = ghvsrc_bk; + } +} + +/** @fn void checkFlashEEPROMECC(void) +* @brief Check Flash EEPROM ECC error detection logic. +* +* This function checks Flash EEPROM ECC error detection logic. +*/ +/* SourceId : SELFTEST_SourceId_036 */ +/* DesignId : SELFTEST_DesignId_029 */ +/* Requirements : HL_SR406 */ +void checkFlashEEPROMECC(void) +{ + uint32 ecc; + volatile uint32 regread; + + /* Set Single Error Correction Threshold as 1 */ + flashWREG->EECTRL2 |= 1U; + + /* Enable EEPROM Emulation Error Profiling */ + flashWREG->EECTRL1 |= 0x00000100U; + + /* Load FEMU_XX regs in order to generate ECC */ + flashWREG->FEMUADDR = 0xF0200000U; + flashWREG->FEMUDMSW = 0U; + flashWREG->FEMUDLSW = 0U; + + /* ECC for the correct data*/ + ecc = flashWREG->FEMUECC; + + /* Load data with 1 bit error */ + flashWREG->FEMUDMSW = 0U; + flashWREG->FEMUDLSW = 1U; + + /* Enable Diagnostic ECC data correction mode and select FEE SECDED for diagnostic testing */ + flashWREG->FDIAGCTRL = 0x00055001U; + + flashWREG->FEMUECC = ecc; + + /* Diagnostic trigger */ + flashWREG->FDIAGCTRL |= 0x01000000U; + + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + if((flashWREG->EESTATUS & 0x1U) != 0x1U) + { + /* No single bit error was detected */ + selftestFailNotification(CHECKFLASHEEPROMECC_FAIL1); + } + else + { + if((esmREG->SR4[0U] & 0x8U) != 0x8U) + { + /* EEPROM single bit error not captured in ESM */ + selftestFailNotification(CHECKFLASHEEPROMECC_FAIL2); + } + else + { + /* Clear single bit error flag in flash wrapper */ + flashWREG->EESTATUS = 0xFU; + + /* Clear ESM flag */ + esmREG->SR4[0U] = 0x8U; + } + } + + /* Load data with 2 bit error */ + flashWREG->FEMUDMSW = 0U; + flashWREG->FEMUDLSW = 3U; + + /* Enable Diagnostic ECC data correction mode and select FEE SECDED for diagnostic testing */ + flashWREG->FDIAGCTRL = 0x00055001U; + + flashWREG->FEMUECC = ecc; + + /* Diagnostic trigger */ + flashWREG->FDIAGCTRL |= 0x01000000U; + + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + if((flashWREG->EESTATUS & 0x100U) != 0x100U) + { + /* No double bit error was detected */ + selftestFailNotification(CHECKFLASHEEPROMECC_FAIL3); + } + else + { + if((esmREG->SR4[0U] & 0x10U) != 0x10U) + { + /* EEPROM double bit error not captured in ESM */ + selftestFailNotification(CHECKFLASHEEPROMECC_FAIL4); + } + else + { + /* Clear uncorrectable error flag in flash wrapper */ + flashWREG->EESTATUS = 0x1100U; + + /* Read EEUNCERRADD register */ + regread = flashWREG->EEUNCERRADD; + + /* Clear ESM flag */ + esmREG->SR4[0U] = 0x10U; + + + } + } +} + +/** @fn void checkPLL1Slip(void) +* @brief Check PLL1 Slip detection logic. +* +* This function checks PLL1 Slip detection logic. +*/ +/* SourceId : SELFTEST_SourceId_037 */ +/* DesignId : SELFTEST_DesignId_030 */ +/* Requirements : HL_SR384 */ +void checkPLL1Slip(void) +{ + uint32 ghvsrc_bk, pllctl1_bk; + + /* Back up the the registers GHVSRC and PLLCTRL1 */ + ghvsrc_bk = systemREG1->GHVSRC; + pllctl1_bk = systemREG1->PLLCTL1; + + /* Switch all clock domains to oscillator */ + systemREG1->GHVSRC = 0x00000000U; + + /* Disable Reset on PLL Slip and enable Bypass on PLL slip */ + systemREG1->PLLCTL1 &= 0x1FFFFFFFU; + + /* Force a PLL Slip */ + systemREG1->PLLCTL1 ^= 0x8000U; + + /* Wait till PLL slip flag is set */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((systemREG1->GBLSTAT & 0x300U) == 0U) + { + } /* Wait */ + + if((esmREG->SR1[0U] & 0x400U) != 0x400U) + { + /* ESM flag not set */ + selftestFailNotification(CHECKPLL1SLIP_FAIL1); + } + else + { + /* Disable PLL1 */ + systemREG1->CSDISSET = 0x2U; + + /* Wait till PLL1 is disabled */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((systemREG1->CSDIS & 0x2U) == 0U) + { + } /* Wait */ + + /* Restore the PLL multiplier value */ + systemREG1->PLLCTL1 ^= 0x8000U; + + /* Enable PLL1 */ + systemREG1->CSDISCLR = 0x2U; + + /* Wait till PLL1 is disabled */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((systemREG1->CSDIS & 0x2U) != 0U) + { + } /* Wait */ + + /* Switch back to the initial clock source */ + systemREG1->GHVSRC = ghvsrc_bk; + + /* Clear PLL slip flag */ + systemREG1->GBLSTAT = 0x300U; + + /* Clear ESM flag */ + esmREG->SR1[0U] = 0x400U; + + /* Restore the PLLCTL1 register */ + systemREG1->PLLCTL1 = pllctl1_bk; + } +} + +/** @fn void checkPLL2Slip(void) +* @brief Check PLL2 Slip detection logic. +* +* This function checks PLL2 Slip detection logic. +*/ +/* SourceId : SELFTEST_SourceId_038 */ +/* DesignId : SELFTEST_DesignId_031 */ +/* Requirements : HL_SR384 */ +void checkPLL2Slip(void) +{ + uint32 ghvsrc_bk; + + /* Back up the the register GHVSRC */ + ghvsrc_bk = systemREG1->GHVSRC; + + /* Switch all clock domains to oscillator */ + systemREG1->GHVSRC = 0x00000000U; + + /* Force a PLL2 Slip */ + systemREG2->PLLCTL3 ^= 0x8000U; + + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((esmREG->SR4[0U] & 0x400U) != 0x400U) + { + /* Wait till ESM flag is set */ + } + + /* Disable PLL2 */ + systemREG1->CSDISSET = 0x40U; + + /* Wait till PLL2 is disabled */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((systemREG1->CSDIS & 0x40U) == 0U) + { + } /* Wait */ + + /* Restore the PLL 2 multiplier value */ + systemREG2->PLLCTL3 ^= 0x8000U; + + /* Enable PLL2 */ + systemREG1->CSDISCLR = 0x40U; + + /* Wait till PLL2 is disabled */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((systemREG1->CSDIS & 0x40U) != 0U) + { + } /* Wait */ + + /* Switch back to the initial clock source */ + systemREG1->GHVSRC = ghvsrc_bk; + + /* Clear PLL slip flag */ + systemREG1->GBLSTAT = 0x300U; + + /* Clear ESM flag */ + esmREG->SR4[0U] = 0x400U; +} + + +/** @fn void checkRAMAddrParity(void) +* @brief Check TCRAM Address parity error detection and signaling mechanism. +* +* This function TCRAM Address parity error detection and signaling mechanism. +*/ +/* SourceId : SELFTEST_SourceId_039 */ +/* DesignId : SELFTEST_DesignId_032 */ +/* Requirements : HL_SR409 */ +void checkRAMAddrParity(void) +{ + register uint64 ramread; + volatile uint32 regread; + uint32 tcram1ErrStat, tcram2ErrStat; + + /* Invert Address parity scheme */ + tcram1REG->RAMCTRL = 0x0D05000AU; + tcram2REG->RAMCTRL = 0x0D05000AU; + + /* Read from both RAM banks */ + ramread = tcramA1bit; + ramread = ramread | tcramB1bit; /* XOR-ing with ramread to avoid warnings */ + + /* Switch back to Address parity scheme */ + tcram1REG->RAMCTRL = 0x0005000AU; + tcram2REG->RAMCTRL = 0x0005000AU; + + /* Check for error status */ + tcram1ErrStat = tcram1REG->RAMERRSTATUS & 0x100U; + tcram2ErrStat = tcram2REG->RAMERRSTATUS & 0x100U; + /*SAFETYMCUSW 139 S MR:13.7 "LDRA Tool issue" */ + /*SAFETYMCUSW 139 S MR:13.7 "LDRA Tool issue" */ + if((tcram1ErrStat == 0U) || (tcram2ErrStat == 0U)) + { + /* No Address parity error detected */ + selftestFailNotification(CHECKRAMADDRPARITY_FAIL1); + } + else + { + if((esmREG->SR1[1U] & 0x1400U) != 0x1400U) + { + /* Address parity error not reported to ESM */ + selftestFailNotification(CHECKRAMADDRPARITY_FAIL2); + } + else + { + /* Clear Address parity error flag */ + tcram1REG->RAMERRSTATUS = 0x300U; + tcram2REG->RAMERRSTATUS = 0x300U; + + /* Clear ESM flag */ + esmREG->SR1[1U] = 0x1400U; + + /* The nERROR pin will become inactive once the LTC counter expires */ + esmREG->EKR = 0x5U; + + regread = tcram1REG->RAMPERADDR; + regread = tcram2REG->RAMPERADDR; + } + } +} + +/** @fn void checkRAMUERRTest(void) +* @brief Run RAM test +* +* This function runs RAM test to test the redundant address decode and compare logic. +*/ +/* SourceId : SELFTEST_SourceId_040 */ +/* DesignId : SELFTEST_DesignId_033 */ +/* Requirements : HL_SR410 */ +void checkRAMUERRTest(void) +{ + uint32 tcram1ErrStat, tcram2ErrStat = 0U; + + /* Trigger equality check */ + tcram1REG->RAMTEST = 0x018AU; + tcram2REG->RAMTEST = 0x018AU; + + /* Wait till test is completed */ + while(tcram1REG->RAMTEST != 0x008AU) + { + } /* Wait */ + while(tcram2REG->RAMTEST != 0x008AU) + { + } /* Wait */ + + /* Check for error status */ + tcram1ErrStat = tcram1REG->RAMERRSTATUS & 0x10U; + tcram2ErrStat = tcram2REG->RAMERRSTATUS & 0x10U; + if((tcram1ErrStat == 0x10U) || (tcram2ErrStat == 0x10U)) + { + /* test failed */ + selftestFailNotification(CHECKRAMUERRTEST_FAIL1); + } + + /* Trigger inequality check */ + tcram1REG->RAMTEST = 0x014AU; + tcram2REG->RAMTEST = 0x014AU; + + /* Wait till test is completed */ + while(tcram1REG->RAMTEST != 0x004AU) + { + }/* Wait */ + while(tcram2REG->RAMTEST != 0x004AU) + { + }/* Wait */ + + tcram1ErrStat = tcram1REG->RAMERRSTATUS & 0x10U; + tcram2ErrStat = tcram2REG->RAMERRSTATUS & 0x10U; + if((tcram1ErrStat == 0x10U) || (tcram2ErrStat == 0x10U)) + { + /* test failed */ + selftestFailNotification(CHECKRAMUERRTEST_FAIL2); + } + else + { + tcram1REG->RAMERRSTATUS = 0x4U; + tcram2REG->RAMERRSTATUS = 0x4U; + + /* Clear ESM flag */ + esmREG->SR1[1U] = 0x140U; + esmREG->SSR2 = 0x140U; + esmREG->EKR = 0x5U; + } + + /* Disable RAM test mode */ + tcram1REG->RAMTEST = 0x5U; + tcram2REG->RAMTEST = 0x5U; +} + +/* SourceId : SELFTEST_SourceId_041 */ +/* DesignId : SELFTEST_DesignId_018 */ +/* Requirements : HL_SR407 */ +void fmcBus1ParityCheck(void) +{ + uint32 regBkupFparOvr,regBckupFdiagctrl; + volatile uint32 flashread = 0U; + + /* Backup registers */ + regBkupFparOvr = flashWREG->FPAROVR; + regBckupFdiagctrl = flashWREG->FDIAGCTRL; + + /* Read to unfreeze the error address registers */ + flashread = flashWREG->FUNCERRADD; + + /* clear status register */ + flashWREG->FEDACSTATUS = 0x400U; + + /* Enable Parity Error */ + flashWREG->FPAROVR = (uint32)((uint32)0x5U << 9U) + | (uint32)((uint32)0x5U << 12U); + + /* set Diag test mode */ + flashWREG->FDIAGCTRL = 0x00050000U | 0x00000007U; + + /* Add parity */ + flashWREG->FPAROVR |= 0x00000100U; + + /* Start Test */ + flashWREG->FDIAGCTRL |= 0x1000000U; + + /* Wait until test done */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + while((flashWREG->FDIAGCTRL & 0x1000000U) == 0x1000000U) + { + }/* Wait */ + + /* Check address Error */ + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + if((flashWREG->FEDACSTATUS & 0x400U) != 0x400U) + { + selftestFailNotification(FMCBUS1PARITYCHECK_FAIL1); + } + else + { + /* clear status register */ + flashWREG->FEDACSTATUS = 0x400U; + + /* check if ESM is flagged */ + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + if((esmREG->SR1[1U] & 0x0000010U) == 0U) + { + selftestFailNotification(FMCBUS1PARITYCHECK_FAIL2); + } + else + { + /* clear ESM flag */ + esmREG->SR1[1U] |= 0x0000010U; + esmREG->SSR2 |= 0x0000010U; + esmREG->EKR = 0x5U; + + /* Stop Diag test mode */ + flashWREG->FDIAGCTRL = regBckupFdiagctrl; + flashWREG->FPAROVR = regBkupFparOvr; + } + } + + /* Read to unfreeze the error address registers */ + flashread = flashWREG->FUNCERRADD; +} + +/* SourceId : SELFTEST_SourceId_042 */ +/* DesignId : SELFTEST_DesignId_011 */ +/* Requirements : HL_SR401 */ +void pbistFail(void) +{ + uint32 PBIST_RAMT, PBIST_FSRA0, PBIST_FSRDL0; + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + PBIST_RAMT = pbistREG->RAMT; + PBIST_FSRA0 = pbistREG->FSRA0; + PBIST_FSRDL0 = pbistREG->FSRDL0; + + if(pbistPortTestStatus((uint32)PBIST_PORT0) != TRUE) + { + memoryPort0TestFailNotification((uint32)((PBIST_RAMT & 0xFF000000U) >> 24U), (uint32)((PBIST_RAMT & 0x00FF0000U) >> 16U),(uint32)PBIST_FSRA0, (uint32)PBIST_FSRDL0); + } + else + { +/* USER CODE BEGIN (77) */ +/* USER CODE END */ +/*SAFETYMCUSW 5 C MR:NA "for(;;) can be removed by adding "# if 0" and "# endif" in the user codes above and below" */ +/*SAFETYMCUSW 26 S MR:NA "for(;;) can be removed by adding "# if 0" and "# endif" in the user codes above and below" */ +/*SAFETYMCUSW 28 D MR:NA "for(;;) can be removed by adding "# if 0" and "# endif" in the user codes above and below" */ + for(;;) + { + }/* Wait */ + +/* USER CODE BEGIN (78) */ +/* USER CODE END */ + } +} + +/** @fn void pbistGetConfigValue(pbist_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : SELFTEST_SourceId_043 */ +/* DesignId : SELFTEST_DesignId_034 */ +/* Requirements : HL_SR506 */ +void pbistGetConfigValue(pbist_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_RAMT = PBIST_RAMT_CONFIGVALUE; + config_reg->CONFIG_DLR = PBIST_DLR_CONFIGVALUE; + config_reg->CONFIG_PACT = PBIST_PACT_CONFIGVALUE; + config_reg->CONFIG_PBISTID = PBIST_PBISTID_CONFIGVALUE; + config_reg->CONFIG_OVER = PBIST_OVER_CONFIGVALUE; + config_reg->CONFIG_FSRDL1 = PBIST_FSRDL1_CONFIGVALUE; + config_reg->CONFIG_ROM = PBIST_ROM_CONFIGVALUE; + config_reg->CONFIG_ALGO = PBIST_ALGO_CONFIGVALUE; + config_reg->CONFIG_RINFOL = PBIST_RINFOL_CONFIGVALUE; + config_reg->CONFIG_RINFOU = PBIST_RINFOU_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_RAMT = pbistREG->RAMT; + config_reg->CONFIG_DLR = pbistREG->DLR; + config_reg->CONFIG_PACT = pbistREG->PACT; + config_reg->CONFIG_PBISTID = pbistREG->PBISTID; + config_reg->CONFIG_OVER = pbistREG->OVER; + config_reg->CONFIG_FSRDL1 = pbistREG->FSRDL1; + config_reg->CONFIG_ROM = pbistREG->ROM; + config_reg->CONFIG_ALGO = pbistREG->ALGO; + config_reg->CONFIG_RINFOL = pbistREG->RINFOL; + config_reg->CONFIG_RINFOU = pbistREG->RINFOU; + } +} + +/** @fn void stcGetConfigValue(stc_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : SELFTEST_SourceId_044 */ +/* DesignId : SELFTEST_DesignId_035 */ +/* Requirements : HL_SR506 */ +void stcGetConfigValue(stc_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_STCGCR0 = STC_STCGCR0_CONFIGVALUE; + config_reg->CONFIG_STCGCR1 = STC_STCGCR1_CONFIGVALUE; + config_reg->CONFIG_STCTPR = STC_STCTPR_CONFIGVALUE; + config_reg->CONFIG_STCSCSCR = STC_STCSCSCR_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_STCGCR0 = stcREG->STCGCR0; + config_reg->CONFIG_STCGCR1 = stcREG->STCGCR1; + config_reg->CONFIG_STCTPR = stcREG->STCTPR; + config_reg->CONFIG_STCSCSCR = stcREG->STCSCSCR; + } +} + + +/** @fn void efcGetConfigValue(efc_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : SELFTEST_SourceId_045 */ +/* DesignId : SELFTEST_DesignId_036 */ +/* Requirements : HL_SR506 */ +void efcGetConfigValue(efc_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_BOUNDARY = EFC_BOUNDARY_CONFIGVALUE; + config_reg->CONFIG_PINS = EFC_PINS_CONFIGVALUE; + config_reg->CONFIG_SELFTESTCYCLES = EFC_SELFTESTCYCLES_CONFIGVALUE; + config_reg->CONFIG_SELFTESTSIGN = EFC_SELFTESTSIGN_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_BOUNDARY = efcREG->BOUNDARY; + config_reg->CONFIG_PINS = efcREG->PINS; + config_reg->CONFIG_SELFTESTCYCLES = efcREG->SELF_TEST_CYCLES; + config_reg->CONFIG_SELFTESTSIGN = efcREG->SELF_TEST_SIGN; + } +} + + +/** @fn void ccmr4GetConfigValue(ccmr4_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : SELFTEST_SourceId_046 */ +/* DesignId : SELFTEST_DesignId_037 */ +/* Requirements : HL_SR506 */ +void ccmr4GetConfigValue(ccmr4_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_CCMKEYR = CCMR4_CCMKEYR_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_CCMKEYR = CCMKEYR; + } +} + + +/** @fn void errata_PBIST_4(void) +* @brief Workaround for the Errata PBIST#4. +* +* This function is workaround for Errata PBIST#4. +* This function is designed to initialize the ROMs using the PBIST controller. +* The CPU will configure the PBIST controller to test the PBIST ROM and STC ROM. +* This function should be called at startup after system init before using the ROMs. +* +* @note : This Function uses register's which are not exposed to users through +* TRM , to run custom algorithm. User can use this function as Black box. +* +*/ +void errata_PBIST_4(void) +{ + volatile uint32 i = 0U; + uint8 ROM_count; + sint32 PBIST_wait_done_loop; + uint32 pmuCalibration, pmuCount; + + /* PMU calibration */ + _pmuEnableCountersGlobal_(); + _pmuResetCounters_(); + _pmuStartCounters_(pmuCYCLE_COUNTER); + _pmuStopCounters_(pmuCYCLE_COUNTER); + pmuCalibration=_pmuGetCycleCount_(); + + /* ROM_init Setup using special reserved registers as part of errata fix */ + /* (Only to be used in this function) */ + *(volatile uint32 *)0xFFFF0400U = 0x0000000AU; + *(volatile uint32 *)0xFFFF040CU = 0x0000EE0AU; + + /* Loop for Executing PBIST ROM and STC ROM */ + for (ROM_count = 0U; ROM_count < 2U; ROM_count++) + { + PBIST_wait_done_loop = 0; + + /* Disable PBIST clocks and ROM clock */ + pbistREG->PACT = 0x0U; + + /* PBIST Clocks did not disable */ + if(pbistREG->PACT != 0x0U ) + { + selftestFailNotification(PBISTSELFCHECK_FAIL3); + } + else + { + /* PBIST ROM clock frequency = HCLK frequency /2 */ + /* Disable memory self controller */ + systemREG1->MSTGCR = 0x00000105U; + + /* Disable Memory Initialization controller */ + systemREG1->MINITGCR = 0x5U; + + /* Enable memory self controller */ + systemREG1->MSTGCR = 0x0000010AU; + + /* Clear PBIST Done */ + systemREG1->MSTCGSTAT = 0x1U; + + /* Enable PBIST controller */ + systemREG1->MSINENA = 0x1U; + + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + /*SAFETYMCUSW 134 S MR:12.2 "Wait for few clock cycles (Value of i not used)" */ + /* wait for 32 VBUS clock cycles at least, based on HCLK to VCLK ratio */ + for (i=0U; i<(32U + (32U * 1U)); i++){ /* Wait */ } + + /* Enable PBIST clocks and ROM clock */ + pbistREG->PACT = 0x3U; + + /* CPU control of PBIST */ + pbistREG->DLR = 0x10U; + + /* Load PBIST ALGO to initialize the ROMs */ + *(volatile uint32 *)0xFFFFE400U = 0x00000001U; + *(volatile uint32 *)0xFFFFE440U = 0x00000025U; + *(volatile uint32 *)0xFFFFE404U = 0x62400001U; + *(volatile uint32 *)0xFFFFE444U = 0x00000004U; + *(volatile uint32 *)0xFFFFE408U = 0x00068003U; + *(volatile uint32 *)0xFFFFE448U = 0x00000000U; + *(volatile uint32 *)0xFFFFE40CU = 0x00000004U; + *(volatile uint32 *)0xFFFFE44CU = 0x00006860U; + *(volatile uint32 *)0xFFFFE410U = 0x00000000U; + *(volatile uint32 *)0xFFFFE450U = 0x00000001U; + *(volatile uint32 *)0xFFFFE540U = 0x000003E8U; + *(volatile uint32 *)0xFFFFE550U = 0x00000001U; + *(volatile uint32 *)0xFFFFE530U = 0x00000000U; + + /* SELECT ROM */ + if (ROM_count == 1U) + { + /* SELECT PBIST ROM */ + *(volatile uint32 *)0xFFFFE520U = 0x00000002U; + *(volatile uint32 *)0xFFFFE524U = 0x00000000U; + pbistREG->RAMT = 0x01002008U; + } + else + { + /* SELECT STC ROM */ + *(volatile uint32 *)0xFFFFE520U = 0xFFF0007CU; + *(volatile uint32 *)0xFFFFE524U = 0x0A63FFFFU; + pbistREG->RAMT = 0x02002008U; + } + + /* Setup using special reserved registers as part of errata fix */ + /* (Only to be used in this function) */ + pbistREG->rsvd1[4U] = 1U; + pbistREG->rsvd1[0U] = 3U; + + /* Start PMU counter */ + _pmuResetCounters_(); + _pmuStartCounters_(pmuCYCLE_COUNTER); + + /* PBIST_RUN */ + pbistREG->rsvd1[1U] = 1U; + + /* wait until memory self-test done is indicated */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while ((systemREG1->MSTCGSTAT & 0x1U) != 0x1U) + { + }/* Wait */ + + /* Stop PMU counter */ + _pmuStopCounters_(pmuCYCLE_COUNTER); + + /* Get CPU cycle count */ + pmuCount =_pmuGetCycleCount_(); + + /* Calculate PBIST test complete time in ROM Clock */ + /* 2 - Divide value ( Default is 2 in HALCoGen) */ + /* 1000 = 0x3E8 - Test Loop count in ROM Algorithm */ + pmuCount = pmuCount - pmuCalibration; + PBIST_wait_done_loop = ((sint32)pmuCount/2) - 1000; + + /* Check PBIST status results (Address, Status, Count, etc...) */ + if ((pbistREG->FSRA0 | pbistREG->FSRA1 | pbistREG->FSRDL0 | pbistREG->rsvd3 | + pbistREG->FSRDL1 | pbistREG->rsvd4[0U] | pbistREG->rsvd4[1U]) != 0U) + { + /* PBIST Failure for the Algorithm chosen above */ + selftestFailNotification(PBISTSELFCHECK_FAIL1); + } + + /* Check that the algorithm executed in the expected amount of time. */ + /* This time is dependent on the ROMCLKDIV selected */ + if ((PBIST_wait_done_loop <= 20) || (PBIST_wait_done_loop >= 200) ) + { + selftestFailNotification(PBISTSELFCHECK_FAIL2); + } + + /* Disable PBIST clocks and ROM clock */ + pbistREG->PACT = 0x0U; + + /* Disable PBIST */ + systemREG1->MSTGCR &= 0xFFFFFFF0U; + systemREG1->MSTGCR |= 0x5U; + } + } /* ROM Loop */ + + /* ROM restore default setup */ + /* (must be completed before continuing) */ + *(volatile uint32 *)0xFFFF040CU = 0x0000AA0AU; + *(volatile uint32 *)0xFFFF040CU = 0x0000AA05U; + *(volatile uint32 *)0xFFFF0400U = 0x00000005U; + + _pmuDisableCountersGlobal_(); +} + + +/** @fn void enableParity(void) +* @brief Enable peripheral RAM parity +* +* This function enables RAM parity for all peripherals for which RAM parity check is enabled. +* This function is called before memoryInit in the startup +* +*/ +#pragma WEAK(enableParity) +void enableParity(void) +{ + DMA_PARCR = 0xAU; /* Enable DMA RAM parity */ + VIM_PARCTL = 0xAU; /* Enable VIM RAM parity */ + canREG1->CTL = ((uint32)0xAU << 10U) | 1U; /* Enable CAN1 RAM parity */ + canREG2->CTL = ((uint32)0xAU << 10U) | 1U; /* Enable CAN2 RAM parity */ + canREG3->CTL = ((uint32)0xAU << 10U) | 1U; /* Enable CAN3 RAM parity */ + adcREG1->PARCR = 0xAU; /* Enable ADC1 RAM parity */ + adcREG2->PARCR = 0xAU; /* Enable ADC2 RAM parity */ + hetREG1->PCR = 0xAU; /* Enable HET1 RAM parity */ + htuREG1->PCR = 0xAU; /* Enable HTU1 RAM parity */ + hetREG2->PCR = 0xAU; /* Enable HET2 RAM parity */ + htuREG2->PCR = 0xAU; /* Enable HTU2 RAM parity */ +} + +/** @fn void disableParity(void) +* @brief Disable peripheral RAM parity +* +* This function disables RAM parity for all peripherals for which RAM parity check is enabled. +* This function is called after memoryInit in the startup +* +*/ +#pragma WEAK(disableParity) +void disableParity(void) +{ + DMA_PARCR = 0x5U; /* Disable DMA RAM parity */ + VIM_PARCTL = 0x5U; /* Disable VIM RAM parity */ + canREG1->CTL = ((uint32)0x5U << 10U) | 1U; /* Disable CAN1 RAM parity */ + canREG2->CTL = ((uint32)0x5U << 10U) | 1U; /* Disable CAN2 RAM parity */ + canREG3->CTL = ((uint32)0x5U << 10U) | 1U; /* Disable CAN3 RAM parity */ + adcREG1->PARCR = 0x5U; /* Disable ADC1 RAM parity */ + adcREG2->PARCR = 0x5U; /* Disable ADC2 RAM parity */ + hetREG1->PCR = 0x5U; /* Disable HET1 RAM parity */ + htuREG1->PCR = 0x5U; /* Disable HTU1 RAM parity */ + hetREG2->PCR = 0x5U; /* Disable HET2 RAM parity */ + htuREG2->PCR = 0x5U; /* Disable HTU2 RAM parity */ +} Index: firmware/source/sys_startup.c =================================================================== diff -u --- firmware/source/sys_startup.c (revision 0) +++ firmware/source/sys_startup.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,672 @@ +/** @file sys_startup.c +* @brief Startup Source File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Include Files +* - Type Definitions +* - External Functions +* - VIM RAM Setup +* - Startup Routine +* . +* which are relevant for the Startup. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + + +/* Include Files */ + +#include "sys_common.h" +#include "system.h" +#include "sys_vim.h" +#include "sys_core.h" +#include "sys_selftest.h" +#include "esm.h" +#include "mibspi.h" + +#include "errata_SSWF021_45.h" +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + + +/* External Functions */ +/*SAFETYMCUSW 218 S MR:20.2 "Functions from library" */ +extern void __TI_auto_init(void); +/*SAFETYMCUSW 354 S MR:NA " Startup code(main should be declared by the user)" */ +extern int main(void); +/*SAFETYMCUSW 122 S MR:20.11 "Startup code(exit and abort need to be present)" */ +/*SAFETYMCUSW 354 S MR:NA " Startup code(Extern declaration present in the library)" */ +extern void exit(int _status); + + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ +void handlePLLLockFail(void); +/* Startup Routine */ +void _c_int00(void); +#define PLL_RETRIES 5U +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + +#pragma CODE_STATE(_c_int00, 32) +#pragma INTERRUPT(_c_int00, RESET) +#pragma WEAK(_c_int00) + +/* SourceId : STARTUP_SourceId_001 */ +/* DesignId : STARTUP_DesignId_001 */ +/* Requirements : HL_SR508 */ +void _c_int00(void) +{ +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + + /* Initialize Core Registers to avoid CCM Error */ + _coreInitRegisters_(); + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + + /* Initialize Stack Pointers */ + _coreInitStackPointer_(); + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + + /* Enable CPU Event Export */ + /* This allows the CPU to signal any single-bit or double-bit errors detected + * by its ECC logic for accesses to program flash or data RAM. + */ + _coreEnableEventBusExport_(); + +/* USER CODE BEGIN (11) */ +/* USER CODE END */ + + /* Workaround for Errata CORTEXR4 66 */ + _errata_CORTEXR4_66_(); + + /* Workaround for Errata CORTEXR4 57 */ + _errata_CORTEXR4_57_(); + + /* Reset handler: the following instructions read from the system exception status register + * to identify the cause of the CPU reset. + */ + + /* check for power-on reset condition */ + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + if ((SYS_EXCEPTION & POWERON_RESET) != 0U) + { +/* USER CODE BEGIN (12) */ +/* USER CODE END */ + /* Add condition to check whether PLL can be started successfully */ + if (_errata_SSWF021_45_both_plls(PLL_RETRIES) != 0U) + { + /* Put system in a safe state */ + handlePLLLockFail(); + } + /* clear all reset status flags */ + SYS_EXCEPTION = 0xFFFFU; + +/* USER CODE BEGIN (13) */ +/* USER CODE END */ +/* USER CODE BEGIN (14) */ +/* USER CODE END */ +/* USER CODE BEGIN (15) */ +/* USER CODE END */ + /* continue with normal start-up sequence */ + } + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + else if ((SYS_EXCEPTION & OSC_FAILURE_RESET) != 0U) + { + /* Reset caused due to oscillator failure. + Add user code here to handle oscillator failure */ + +/* USER CODE BEGIN (16) */ +/* USER CODE END */ + } + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + else if ((SYS_EXCEPTION & WATCHDOG_RESET) !=0U) + { + /* Reset caused due + * 1) windowed watchdog violation - Add user code here to handle watchdog violation. + * 2) ICEPICK Reset - After loading code via CCS / System Reset through CCS + */ + /* Check the WatchDog Status register */ + if(WATCHDOG_STATUS != 0U) + { + /* Add user code here to handle watchdog violation. */ +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + + /* Clear the Watchdog reset flag in Exception Status register */ + SYS_EXCEPTION = WATCHDOG_RESET; + +/* USER CODE BEGIN (18) */ +/* USER CODE END */ + } + else + { + /* Clear the ICEPICK reset flag in Exception Status register */ + SYS_EXCEPTION = ICEPICK_RESET; +/* USER CODE BEGIN (19) */ +/* USER CODE END */ + } + } + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + else if ((SYS_EXCEPTION & CPU_RESET) !=0U) + { + /* Reset caused due to CPU reset. + CPU reset can be caused by CPU self-test completion, or + by toggling the "CPU RESET" bit of the CPU Reset Control Register. */ + +/* USER CODE BEGIN (20) */ +/* USER CODE END */ + + /* clear all reset status flags */ + SYS_EXCEPTION = CPU_RESET; + +/* USER CODE BEGIN (21) */ +/* USER CODE END */ + + } + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + else if ((SYS_EXCEPTION & SW_RESET) != 0U) + { + /* Reset caused due to software reset. + Add user code to handle software reset. */ + +/* USER CODE BEGIN (22) */ +/* USER CODE END */ + } + else + { + /* Reset caused by nRST being driven low externally. + Add user code to handle external reset. */ + +/* USER CODE BEGIN (23) */ +/* USER CODE END */ + } + + /* Check if there were ESM group3 errors during power-up. + * These could occur during eFuse auto-load or during reads from flash OTP + * during power-up. Device operation is not reliable and not recommended + * in this case. + * An ESM group3 error only drives the nERROR pin low. An external circuit + * that monitors the nERROR pin must take the appropriate action to ensure that + * the system is placed in a safe state, as determined by the application. + */ + if ((esmREG->SR1[2]) != 0U) + { +/* USER CODE BEGIN (24) */ +/* USER CODE END */ + /*SAFETYMCUSW 5 C MR:NA "for(;;) can be removed by adding "# if 0" and "# endif" in the user codes above and below" */ + /*SAFETYMCUSW 26 S MR:NA "for(;;) can be removed by adding "# if 0" and "# endif" in the user codes above and below" */ + /*SAFETYMCUSW 28 D MR:NA "for(;;) can be removed by adding "# if 0" and "# endif" in the user codes above and below" */ + for(;;) + { + }/* Wait */ +/* USER CODE BEGIN (25) */ +/* USER CODE END */ + } + +/* USER CODE BEGIN (26) */ +/* USER CODE END */ + + /* Initialize System - Clock, Flash settings with Efuse self check */ + systemInit(); + + /* Workaround for Errata PBIST#4 */ + errata_PBIST_4(); + + /* Run a diagnostic check on the memory self-test controller. + * This function chooses a RAM test algorithm and runs it on an on-chip ROM. + * The memory self-test is expected to fail. The function ensures that the PBIST controller + * is capable of detecting and indicating a memory self-test failure. + */ + pbistSelfCheck(); + + /* Run PBIST on STC ROM */ + pbistRun((uint32)STC_ROM_PBIST_RAM_GROUP, + ((uint32)PBIST_TripleReadSlow | (uint32)PBIST_TripleReadFast)); + + /* Wait for PBIST for STC ROM to be completed */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while(pbistIsTestCompleted() != TRUE) + { + }/* Wait */ + + /* Check if PBIST on STC ROM passed the self-test */ + if( pbistIsTestPassed() != TRUE) + { + /* PBIST and STC ROM failed the self-test. + * Need custom handler to check the memory failure + * and to take the appropriate next step. + */ + + pbistFail(); + + } + + /* Disable PBIST clocks and disable memory self-test mode */ + pbistStop(); + + /* Run PBIST on PBIST ROM */ + pbistRun((uint32)PBIST_ROM_PBIST_RAM_GROUP, + ((uint32)PBIST_TripleReadSlow | (uint32)PBIST_TripleReadFast)); + + /* Wait for PBIST for PBIST ROM to be completed */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while(pbistIsTestCompleted() != TRUE) + { + }/* Wait */ + + /* Check if PBIST ROM passed the self-test */ + if( pbistIsTestPassed() != TRUE) + { + /* PBIST and STC ROM failed the self-test. + * Need custom handler to check the memory failure + * and to take the appropriate next step. + */ + + pbistFail(); + + } + + /* Disable PBIST clocks and disable memory self-test mode */ + pbistStop(); +/* USER CODE BEGIN (29) */ +/* USER CODE END */ + +/* USER CODE BEGIN (31) */ +/* USER CODE END */ + + /* Disable RAM ECC before doing PBIST for Main RAM */ + _coreDisableRamEcc_(); + + /* Run PBIST on CPU RAM. + * The PBIST controller needs to be configured separately for single-port and dual-port SRAMs. + * The CPU RAM is a single-port memory. The actual "RAM Group" for all on-chip SRAMs is defined in the + * device datasheet. + */ + pbistRun(0x00300020U, /* ESRAM Single Port PBIST */ + (uint32)PBIST_March13N_SP); + +/* USER CODE BEGIN (32) */ +/* USER CODE END */ + + /* Wait for PBIST for CPU RAM to be completed */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while(pbistIsTestCompleted() != TRUE) + { + }/* Wait */ + + +/* USER CODE BEGIN (33) */ +/* USER CODE END */ + + /* Check if CPU RAM passed the self-test */ + if( pbistIsTestPassed() != TRUE) + { + /* CPU RAM failed the self-test. + * Need custom handler to check the memory failure + * and to take the appropriate next step. + */ +/* USER CODE BEGIN (34) */ +/* USER CODE END */ + + pbistFail(); + +/* USER CODE BEGIN (35) */ +/* USER CODE END */ + } + +/* USER CODE BEGIN (36) */ +/* USER CODE END */ + + /* Disable PBIST clocks and disable memory self-test mode */ + pbistStop(); + + +/* USER CODE BEGIN (37) */ +/* USER CODE END */ + + + /* Initialize CPU RAM. + * This function uses the system module's hardware for auto-initialization of memories and their + * associated protection schemes. The CPU RAM is initialized by setting bit 0 of the MSIENA register. + * Hence the value 0x1 passed to the function. + * This function will initialize the entire CPU RAM and the corresponding ECC locations. + */ + memoryInit(0x1U); + +/* USER CODE BEGIN (38) */ +/* USER CODE END */ + + /* Enable ECC checking for TCRAM accesses. + * This function enables the CPU's ECC logic for accesses to B0TCM and B1TCM. + */ + _coreEnableRamEcc_(); + +/* USER CODE BEGIN (39) */ +/* USER CODE END */ + + /* Start PBIST on all dual-port memories */ + /* NOTE : Please Refer DEVICE DATASHEET for the list of Supported Dual port Memories. + PBIST test performed only on the user selected memories in HALCoGen's GUI SAFETY INIT tab. + */ + pbistRun( (uint32)0x00000000U /* EMAC RAM */ + | (uint32)0x00000000U /* USB RAM */ + | (uint32)0x00000800U /* DMA RAM */ + | (uint32)0x00000200U /* VIM RAM */ + | (uint32)0x00000040U /* MIBSPI1 RAM */ + | (uint32)0x00000080U /* MIBSPI3 RAM */ + | (uint32)0x00000100U /* MIBSPI5 RAM */ + | (uint32)0x00000004U /* CAN1 RAM */ + | (uint32)0x00000008U /* CAN2 RAM */ + | (uint32)0x00000010U /* CAN3 RAM */ + | (uint32)0x00000400U /* ADC1 RAM */ + | (uint32)0x00020000U /* ADC2 RAM */ + | (uint32)0x00001000U /* HET1 RAM */ + | (uint32)0x00040000U /* HET2 RAM */ + | (uint32)0x00002000U /* HTU1 RAM */ + | (uint32)0x00080000U /* HTU2 RAM */ + | (uint32)0x00000000U /* RTP RAM */ + | (uint32)0x00000000U /* FRAY RAM */ + ,(uint32) PBIST_March13N_DP); + +/* USER CODE BEGIN (40) */ +/* USER CODE END */ + + /* Test the CPU ECC mechanism for RAM accesses. + * The checkBxRAMECC functions cause deliberate single-bit and double-bit errors in TCRAM accesses + * by corrupting 1 or 2 bits in the ECC. Reading from the TCRAM location with a 2-bit error + * in the ECC causes a data abort exception. The data abort handler is written to look for + * deliberately caused exception and to return the code execution to the instruction + * following the one that caused the abort. + */ + checkRAMECC(); + +/* USER CODE BEGIN (41) */ +/* USER CODE END */ +/* USER CODE BEGIN (43) */ +/* USER CODE END */ + + /* Wait for PBIST for CPU RAM to be completed */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while(pbistIsTestCompleted() != TRUE) + { + }/* Wait */ + + +/* USER CODE BEGIN (44) */ +/* USER CODE END */ + + /* Check if CPU RAM passed the self-test */ + if( pbistIsTestPassed() != TRUE) + { + +/* USER CODE BEGIN (45) */ +/* USER CODE END */ + + /* CPU RAM failed the self-test. + * Need custom handler to check the memory failure + * and to take the appropriate next step. + */ +/* USER CODE BEGIN (46) */ +/* USER CODE END */ + + pbistFail(); + +/* USER CODE BEGIN (47) */ +/* USER CODE END */ + } + +/* USER CODE BEGIN (48) */ +/* USER CODE END */ + + /* Disable PBIST clocks and disable memory self-test mode */ + pbistStop(); + +/* USER CODE BEGIN (55) */ +/* USER CODE END */ + + /* Release the MibSPI1 modules from local reset. + * This will cause the MibSPI1 RAMs to get initialized along with the parity memory. + */ + mibspiREG1->GCR0 = 0x1U; + + /* Release the MibSPI3 modules from local reset. + * This will cause the MibSPI3 RAMs to get initialized along with the parity memory. + */ + mibspiREG3->GCR0 = 0x1U; + + /* Release the MibSPI5 modules from local reset. + * This will cause the MibSPI5 RAMs to get initialized along with the parity memory. + */ + mibspiREG5->GCR0 = 0x1U; + +/* USER CODE BEGIN (56) */ +/* USER CODE END */ + + /* Enable parity on selected RAMs */ + enableParity(); + + /* Initialize all on-chip SRAMs except for MibSPIx RAMs + * The MibSPIx modules have their own auto-initialization mechanism which is triggered + * as soon as the modules are brought out of local reset. + */ + /* The system module auto-init will hang on the MibSPI RAM if the module is still in local reset. + */ + /* NOTE : Please Refer DEVICE DATASHEET for the list of Supported Memories and their channel numbers. + Memory Initialization is perfomed only on the user selected memories in HALCoGen's GUI SAFETY INIT tab. + */ + memoryInit( (uint32)((uint32)1U << 1U) /* DMA RAM */ + | (uint32)((uint32)1U << 2U) /* VIM RAM */ + | (uint32)((uint32)1U << 5U) /* CAN1 RAM */ + | (uint32)((uint32)1U << 6U) /* CAN2 RAM */ + | (uint32)((uint32)1U << 10U) /* CAN3 RAM */ + | (uint32)((uint32)1U << 8U) /* ADC1 RAM */ + | (uint32)((uint32)1U << 14U) /* ADC2 RAM */ + | (uint32)((uint32)1U << 3U) /* HET1 RAM */ + | (uint32)((uint32)1U << 4U) /* HTU1 RAM */ + | (uint32)((uint32)1U << 15U) /* HET2 RAM */ + | (uint32)((uint32)1U << 16U) /* HTU2 RAM */ + ); + + /* Disable parity */ + disableParity(); + + /* Test the parity protection mechanism for peripheral RAMs + NOTE : Please Refer DEVICE DATASHEET for the list of Supported Memories with parity. + Parity Self check is perfomed only on the user selected memories in HALCoGen's GUI SAFETY INIT tab. + */ + +/* USER CODE BEGIN (57) */ +/* USER CODE END */ + + het1ParityCheck(); + +/* USER CODE BEGIN (58) */ +/* USER CODE END */ + + htu1ParityCheck(); + +/* USER CODE BEGIN (59) */ +/* USER CODE END */ + + het2ParityCheck(); + +/* USER CODE BEGIN (60) */ +/* USER CODE END */ + + htu2ParityCheck(); + +/* USER CODE BEGIN (61) */ +/* USER CODE END */ + + adc1ParityCheck(); + +/* USER CODE BEGIN (62) */ +/* USER CODE END */ + + adc2ParityCheck(); + +/* USER CODE BEGIN (63) */ +/* USER CODE END */ + + can1ParityCheck(); + +/* USER CODE BEGIN (64) */ +/* USER CODE END */ + + can2ParityCheck(); + +/* USER CODE BEGIN (65) */ +/* USER CODE END */ + + can3ParityCheck(); + +/* USER CODE BEGIN (66) */ +/* USER CODE END */ + + vimParityCheck(); + +/* USER CODE BEGIN (67) */ +/* USER CODE END */ + + dmaParityCheck(); + + +/* USER CODE BEGIN (68) */ +/* USER CODE END */ + +/*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while ((mibspiREG1->FLG & 0x01000000U) == 0x01000000U) + { + }/* Wait */ + /* wait for MibSPI1 RAM to complete initialization */ +/*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while ((mibspiREG3->FLG & 0x01000000U) == 0x01000000U) + { + }/* Wait */ + /* wait for MibSPI3 RAM to complete initialization */ +/*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while ((mibspiREG5->FLG & 0x01000000U) == 0x01000000U) + { + }/* Wait */ + /* wait for MibSPI5 RAM to complete initialization */ + +/* USER CODE BEGIN (69) */ +/* USER CODE END */ + + mibspi1ParityCheck(); + +/* USER CODE BEGIN (70) */ +/* USER CODE END */ + + mibspi3ParityCheck(); + +/* USER CODE BEGIN (71) */ +/* USER CODE END */ + + mibspi5ParityCheck(); + + +/* USER CODE BEGIN (72) */ +/* USER CODE END */ + + /* Enable IRQ offset via Vic controller */ + _coreEnableIrqVicOffset_(); + + +/* USER CODE BEGIN (73) */ +/* USER CODE END */ + + /* Initialize VIM table */ + vimInit(); + +/* USER CODE BEGIN (74) */ +/* USER CODE END */ + + /* Configure system response to error conditions signaled to the ESM group1 */ + /* This function can be configured from the ESM tab of HALCoGen */ + esmInit(); + /* initialize copy table */ + __TI_auto_init(); +/* USER CODE BEGIN (75) */ +/* USER CODE END */ + + /* call the application */ +/*SAFETYMCUSW 296 S MR:8.6 "Startup code(library functions at block scope)" */ +/*SAFETYMCUSW 326 S MR:8.2 "Startup code(Declaration for main in library)" */ +/*SAFETYMCUSW 60 D MR:8.8 "Startup code(Declaration for main in library;Only doing an extern for the same)" */ + main(); + +/* USER CODE BEGIN (76) */ +/* USER CODE END */ +/*SAFETYMCUSW 122 S MR:20.11 "Startup code(exit and abort need to be present)" */ + exit(0); + +/* USER CODE BEGIN (77) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (78) */ +/* USER CODE END */ +/** @fn void handlePLLLockFail(void) +* @brief This function handles PLL lock fail. +*/ +void handlePLLLockFail(void) +{ +/* USER CODE BEGIN (79) */ +/* USER CODE END */ + while(1) + { + + } +/* USER CODE BEGIN (80) */ +/* USER CODE END */ +} +/* USER CODE BEGIN (81) */ +/* USER CODE END */ Index: firmware/source/sys_vim.c =================================================================== diff -u --- firmware/source/sys_vim.c (revision 0) +++ firmware/source/sys_vim.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,835 @@ +/** @file sys_vim.c +* @brief VIM Driver Implementation File +* @date 11-Dec-2018 +* @version 04.07.01 +* +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + + +#include "sys_vim.h" +#include "system.h" +#include "esm.h" + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + +/* Vim Ram Definition */ +/** @struct vimRam +* @brief Vim Ram Definition +* +* This type is used to access the Vim Ram. +*/ +/** @typedef vimRAM_t +* @brief Vim Ram Type Definition +* +* This type is used to access the Vim Ram. +*/ +typedef volatile struct vimRam +{ + t_isrFuncPTR ISR[VIM_CHANNELS]; +} vimRAM_t; + +#define vimRAM ((vimRAM_t *)0xFFF82000U) + +static const t_isrFuncPTR s_vim_init[128U] = +{ + &phantomInterrupt, + &esmHighInterrupt, /* Channel 0 */ + &phantomInterrupt, /* Channel 1 */ + &phantomInterrupt, /* Channel 2 */ + &phantomInterrupt, /* Channel 3 */ + &phantomInterrupt, /* Channel 4 */ + &phantomInterrupt, /* Channel 5 */ + &phantomInterrupt, /* Channel 6 */ + &phantomInterrupt, /* Channel 7 */ + &phantomInterrupt, /* Channel 8 */ + &phantomInterrupt, /* Channel 9 */ + &phantomInterrupt, /* Channel 10 */ + &phantomInterrupt, /* Channel 11 */ + &phantomInterrupt, /* Channel 12 */ + &phantomInterrupt, /* Channel 13 */ + &phantomInterrupt, /* Channel 14 */ + &phantomInterrupt, /* Channel 15 */ + &phantomInterrupt, /* Channel 16 */ + &phantomInterrupt, /* Channel 17 */ + &phantomInterrupt, /* Channel 18 */ + &phantomInterrupt, /* Channel 19 */ + &phantomInterrupt, /* Channel 20 */ + &phantomInterrupt, /* Channel 21 */ + &phantomInterrupt, /* Channel 22 */ + &phantomInterrupt, /* Channel 23 */ + &phantomInterrupt, /* Channel 24 */ + &phantomInterrupt, /* Channel 25 */ + &phantomInterrupt, /* Channel 26 */ + &phantomInterrupt, /* Channel 27 */ + &phantomInterrupt, /* Channel 28 */ + &phantomInterrupt, /* Channel 29 */ + &phantomInterrupt, /* Channel 30 */ + &phantomInterrupt, /* Channel 31 */ + &phantomInterrupt, /* Channel 32 */ + &phantomInterrupt, /* Channel 33 */ + &phantomInterrupt, /* Channel 34 */ + &phantomInterrupt, /* Channel 35 */ + &phantomInterrupt, /* Channel 36 */ + &phantomInterrupt, /* Channel 37 */ + &phantomInterrupt, /* Channel 38 */ + &phantomInterrupt, /* Channel 39 */ + &phantomInterrupt, /* Channel 40 */ + &phantomInterrupt, /* Channel 41 */ + &phantomInterrupt, /* Channel 42 */ + &phantomInterrupt, /* Channel 43 */ + &phantomInterrupt, /* Channel 44 */ + &phantomInterrupt, /* Channel 45 */ + &phantomInterrupt, /* Channel 46 */ + &phantomInterrupt, /* Channel 47 */ + &phantomInterrupt, /* Channel 48 */ + &phantomInterrupt, /* Channel 49 */ + &phantomInterrupt, /* Channel 50 */ + &phantomInterrupt, /* Channel 51 */ + &phantomInterrupt, /* Channel 52 */ + &phantomInterrupt, /* Channel 53 */ + &phantomInterrupt, /* Channel 54 */ + &phantomInterrupt, /* Channel 55 */ + &phantomInterrupt, /* Channel 56 */ + &phantomInterrupt, /* Channel 57 */ + &phantomInterrupt, /* Channel 58 */ + &phantomInterrupt, /* Channel 59 */ + &phantomInterrupt, /* Channel 60 */ + &phantomInterrupt, /* Channel 61 */ + &phantomInterrupt, /* Channel 62 */ + &phantomInterrupt, /* Channel 63 */ + &phantomInterrupt, /* Channel 64 */ + &phantomInterrupt, /* Channel 65 */ + &phantomInterrupt, /* Channel 66 */ + &phantomInterrupt, /* Channel 67 */ + &phantomInterrupt, /* Channel 68 */ + &phantomInterrupt, /* Channel 69 */ + &phantomInterrupt, /* Channel 70 */ + &phantomInterrupt, /* Channel 71 */ + &phantomInterrupt, /* Channel 72 */ + &phantomInterrupt, /* Channel 73 */ + &phantomInterrupt, /* Channel 74 */ + &phantomInterrupt, /* Channel 75 */ + &phantomInterrupt, /* Channel 76 */ + &phantomInterrupt, /* Channel 77 */ + &phantomInterrupt, /* Channel 78 */ + &phantomInterrupt, /* Channel 79 */ + &phantomInterrupt, /* Channel 80 */ + &phantomInterrupt, /* Channel 81 */ + &phantomInterrupt, /* Channel 82 */ + &phantomInterrupt, /* Channel 83 */ + &phantomInterrupt, /* Channel 84 */ + &phantomInterrupt, /* Channel 85 */ + &phantomInterrupt, /* Channel 86 */ + &phantomInterrupt, /* Channel 87 */ + &phantomInterrupt, /* Channel 88 */ + &phantomInterrupt, /* Channel 89 */ + &phantomInterrupt, /* Channel 90 */ + &phantomInterrupt, /* Channel 91 */ + &phantomInterrupt, /* Channel 92 */ + &phantomInterrupt, /* Channel 93 */ + &phantomInterrupt, /* Channel 94 */ + &phantomInterrupt, /* Channel 95 */ + &phantomInterrupt, /* Channel 96 */ + &phantomInterrupt, /* Channel 97 */ + &phantomInterrupt, /* Channel 98 */ + &phantomInterrupt, /* Channel 99 */ + &phantomInterrupt, /* Channel 100 */ + &phantomInterrupt, /* Channel 101 */ + &phantomInterrupt, /* Channel 102 */ + &phantomInterrupt, /* Channel 103 */ + &phantomInterrupt, /* Channel 104 */ + &phantomInterrupt, /* Channel 105 */ + &phantomInterrupt, /* Channel 106 */ + &phantomInterrupt, /* Channel 107 */ + &phantomInterrupt, /* Channel 108 */ + &phantomInterrupt, /* Channel 109 */ + &phantomInterrupt, /* Channel 110 */ + &phantomInterrupt, /* Channel 111 */ + &phantomInterrupt, /* Channel 112 */ + &phantomInterrupt, /* Channel 113 */ + &phantomInterrupt, /* Channel 114 */ + &phantomInterrupt, /* Channel 115 */ + &phantomInterrupt, /* Channel 116 */ + &phantomInterrupt, /* Channel 117 */ + &phantomInterrupt, /* Channel 118 */ + &phantomInterrupt, /* Channel 119 */ + &phantomInterrupt, /* Channel 120 */ + &phantomInterrupt, /* Channel 121 */ + &phantomInterrupt, /* Channel 122 */ + &phantomInterrupt, /* Channel 123 */ + &phantomInterrupt, /* Channel 124 */ + &phantomInterrupt, /* Channel 125 */ + &phantomInterrupt, /* Channel 126 */ +}; +void vimParityErrorHandler(void); + +/** @fn void vimInit(void) +* @brief Initializes VIM module +* +* This function initializes VIM RAM and registers +*/ +/* SourceId : VIM_SourceId_001 */ +/* DesignId : VIM_DesignId_001 */ +/* Requirements : HL_SR100 */ +void vimInit(void) +{ + /* VIM RAM Parity Enable */ + VIM_PARCTL = 0xAU; + + /* Initialize VIM table */ + { + uint32 i; + + for (i = 0U; i < VIM_CHANNELS; i++) + { + vimRAM->ISR[i] = s_vim_init[i]; + } + } + + /* Set Fall-Back Address Parity Error Register */ + /*SAFETYMCUSW 439 S MR:11.3 " Need to store the address of a function in a 32 bit register - Advisory as per MISRA" */ + VIM_FBPARERR = (uint32)&vimParityErrorHandler; + + /* set IRQ/FIQ priorities */ + vimREG->FIRQPR0 = (uint32)((uint32)SYS_FIQ << 0U) + | (uint32)((uint32)SYS_FIQ << 1U) + | (uint32)((uint32)SYS_IRQ << 2U) + | (uint32)((uint32)SYS_IRQ << 3U) + | (uint32)((uint32)SYS_IRQ << 4U) + | (uint32)((uint32)SYS_IRQ << 5U) + | (uint32)((uint32)SYS_IRQ << 6U) + | (uint32)((uint32)SYS_IRQ << 7U) + | (uint32)((uint32)SYS_IRQ << 8U) + | (uint32)((uint32)SYS_IRQ << 9U) + | (uint32)((uint32)SYS_IRQ << 10U) + | (uint32)((uint32)SYS_IRQ << 11U) + | (uint32)((uint32)SYS_IRQ << 12U) + | (uint32)((uint32)SYS_IRQ << 13U) + | (uint32)((uint32)SYS_IRQ << 14U) + | (uint32)((uint32)SYS_IRQ << 15U) + | (uint32)((uint32)SYS_IRQ << 16U) + | (uint32)((uint32)SYS_IRQ << 17U) + | (uint32)((uint32)SYS_IRQ << 18U) + | (uint32)((uint32)SYS_IRQ << 19U) + | (uint32)((uint32)SYS_IRQ << 20U) + | (uint32)((uint32)SYS_IRQ << 21U) + | (uint32)((uint32)SYS_IRQ << 22U) + | (uint32)((uint32)SYS_IRQ << 23U) + | (uint32)((uint32)SYS_IRQ << 24U) + | (uint32)((uint32)SYS_IRQ << 25U) + | (uint32)((uint32)SYS_IRQ << 26U) + | (uint32)((uint32)SYS_IRQ << 27U) + | (uint32)((uint32)SYS_IRQ << 28U) + | (uint32)((uint32)SYS_IRQ << 29U) + | (uint32)((uint32)SYS_IRQ << 30U) + | (uint32)((uint32)SYS_IRQ << 31U); + + vimREG->FIRQPR1 = (uint32)((uint32)SYS_IRQ << 0U) + | (uint32)((uint32)SYS_IRQ << 1U) + | (uint32)((uint32)SYS_IRQ << 2U) + | (uint32)((uint32)SYS_IRQ << 3U) + | (uint32)((uint32)SYS_IRQ << 4U) + | (uint32)((uint32)SYS_IRQ << 5U) + | (uint32)((uint32)SYS_IRQ << 6U) + | (uint32)((uint32)SYS_IRQ << 7U) + | (uint32)((uint32)SYS_IRQ << 8U) + | (uint32)((uint32)SYS_IRQ << 9U) + | (uint32)((uint32)SYS_IRQ << 10U) + | (uint32)((uint32)SYS_IRQ << 11U) + | (uint32)((uint32)SYS_IRQ << 12U) + | (uint32)((uint32)SYS_IRQ << 13U) + | (uint32)((uint32)SYS_IRQ << 14U) + | (uint32)((uint32)SYS_IRQ << 15U) + | (uint32)((uint32)SYS_IRQ << 16U) + | (uint32)((uint32)SYS_IRQ << 17U) + | (uint32)((uint32)SYS_IRQ << 18U) + | (uint32)((uint32)SYS_IRQ << 19U) + | (uint32)((uint32)SYS_IRQ << 20U) + | (uint32)((uint32)SYS_IRQ << 21U) + | (uint32)((uint32)SYS_IRQ << 22U) + | (uint32)((uint32)SYS_IRQ << 23U) + | (uint32)((uint32)SYS_IRQ << 24U) + | (uint32)((uint32)SYS_IRQ << 25U) + | (uint32)((uint32)SYS_IRQ << 26U) + | (uint32)((uint32)SYS_IRQ << 27U) + | (uint32)((uint32)SYS_IRQ << 28U) + | (uint32)((uint32)SYS_IRQ << 29U) + | (uint32)((uint32)SYS_IRQ << 30U) + | (uint32)((uint32)SYS_IRQ << 31U); + + + vimREG->FIRQPR2 = (uint32)((uint32)SYS_IRQ << 0U) + | (uint32)((uint32)SYS_IRQ << 1U) + | (uint32)((uint32)SYS_IRQ << 2U) + | (uint32)((uint32)SYS_IRQ << 3U) + | (uint32)((uint32)SYS_IRQ << 4U) + | (uint32)((uint32)SYS_IRQ << 5U) + | (uint32)((uint32)SYS_IRQ << 6U) + | (uint32)((uint32)SYS_IRQ << 7U) + | (uint32)((uint32)SYS_IRQ << 8U) + | (uint32)((uint32)SYS_IRQ << 9U) + | (uint32)((uint32)SYS_IRQ << 10U) + | (uint32)((uint32)SYS_IRQ << 11U) + | (uint32)((uint32)SYS_IRQ << 12U) + | (uint32)((uint32)SYS_IRQ << 13U) + | (uint32)((uint32)SYS_IRQ << 14U) + | (uint32)((uint32)SYS_IRQ << 15U) + | (uint32)((uint32)SYS_IRQ << 16U) + | (uint32)((uint32)SYS_IRQ << 17U) + | (uint32)((uint32)SYS_IRQ << 18U) + | (uint32)((uint32)SYS_IRQ << 19U) + | (uint32)((uint32)SYS_IRQ << 20U) + | (uint32)((uint32)SYS_IRQ << 21U) + | (uint32)((uint32)SYS_IRQ << 22U) + | (uint32)((uint32)SYS_IRQ << 23U) + | (uint32)((uint32)SYS_IRQ << 24U) + | (uint32)((uint32)SYS_IRQ << 25U) + | (uint32)((uint32)SYS_IRQ << 26U) + | (uint32)((uint32)SYS_IRQ << 27U) + | (uint32)((uint32)SYS_IRQ << 28U) + | (uint32)((uint32)SYS_IRQ << 29U) + | (uint32)((uint32)SYS_IRQ << 30U) + | (uint32)((uint32)SYS_IRQ << 31U); + + vimREG->FIRQPR3 = (uint32)((uint32)SYS_IRQ << 0U) + | (uint32)((uint32)SYS_IRQ << 1U) + | (uint32)((uint32)SYS_IRQ << 2U) + | (uint32)((uint32)SYS_IRQ << 3U) + | (uint32)((uint32)SYS_IRQ << 4U) + | (uint32)((uint32)SYS_IRQ << 5U) + | (uint32)((uint32)SYS_IRQ << 6U) + | (uint32)((uint32)SYS_IRQ << 7U) + | (uint32)((uint32)SYS_IRQ << 8U) + | (uint32)((uint32)SYS_IRQ << 9U) + | (uint32)((uint32)SYS_IRQ << 10U) + | (uint32)((uint32)SYS_IRQ << 11U) + | (uint32)((uint32)SYS_IRQ << 12U) + | (uint32)((uint32)SYS_IRQ << 13U) + | (uint32)((uint32)SYS_IRQ << 14U) + | (uint32)((uint32)SYS_IRQ << 15U) + | (uint32)((uint32)SYS_IRQ << 16U) + | (uint32)((uint32)SYS_IRQ << 17U) + | (uint32)((uint32)SYS_IRQ << 18U) + | (uint32)((uint32)SYS_IRQ << 19U) + | (uint32)((uint32)SYS_IRQ << 20U) + | (uint32)((uint32)SYS_IRQ << 21U) + | (uint32)((uint32)SYS_IRQ << 22U) + | (uint32)((uint32)SYS_IRQ << 23U) + | (uint32)((uint32)SYS_IRQ << 24U) + | (uint32)((uint32)SYS_IRQ << 25U) + | (uint32)((uint32)SYS_IRQ << 26U) + | (uint32)((uint32)SYS_IRQ << 27U) + | (uint32)((uint32)SYS_IRQ << 28U) + | (uint32)((uint32)SYS_IRQ << 29U) + | (uint32)((uint32)SYS_IRQ << 30U) + | (uint32)((uint32)SYS_IRQ << 31U); + + + /* enable interrupts */ + vimREG->REQMASKSET0 = (uint32)((uint32)1U << 0U) + | (uint32)((uint32)1U << 1U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)0U << 3U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)0U << 5U) + | (uint32)((uint32)0U << 6U) + | (uint32)((uint32)0U << 7U) + | (uint32)((uint32)0U << 8U) + | (uint32)((uint32)0U << 9U) + | (uint32)((uint32)0U << 10U) + | (uint32)((uint32)0U << 11U) + | (uint32)((uint32)0U << 12U) + | (uint32)((uint32)0U << 13U) + | (uint32)((uint32)0U << 14U) + | (uint32)((uint32)0U << 15U) + | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)0U << 17U) + | (uint32)((uint32)0U << 18U) + | (uint32)((uint32)0U << 19U) + | (uint32)((uint32)0U << 20U) + | (uint32)((uint32)0U << 21U) + | (uint32)((uint32)0U << 22U) + | (uint32)((uint32)0U << 23U) + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)0U << 25U) + | (uint32)((uint32)0U << 26U) + | (uint32)((uint32)0U << 27U) + | (uint32)((uint32)0U << 28U) + | (uint32)((uint32)0U << 29U) + | (uint32)((uint32)0U << 30U) + | (uint32)((uint32)0U << 31U); + + vimREG->REQMASKSET1 = (uint32)((uint32)0U << 0U) + | (uint32)((uint32)0U << 1U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)0U << 3U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)0U << 5U) + | (uint32)((uint32)0U << 6U) + | (uint32)((uint32)0U << 7U) + | (uint32)((uint32)0U << 8U) + | (uint32)((uint32)0U << 9U) + | (uint32)((uint32)0U << 10U) + | (uint32)((uint32)0U << 11U) + | (uint32)((uint32)0U << 12U) + | (uint32)((uint32)0U << 13U) + | (uint32)((uint32)0U << 14U) + | (uint32)((uint32)0U << 15U) + | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)0U << 17U) + | (uint32)((uint32)0U << 18U) + | (uint32)((uint32)0U << 19U) + | (uint32)((uint32)0U << 20U) + | (uint32)((uint32)0U << 21U) + | (uint32)((uint32)0U << 22U) + | (uint32)((uint32)0U << 23U) + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)0U << 25U) + | (uint32)((uint32)0U << 26U) + | (uint32)((uint32)0U << 27U) + | (uint32)((uint32)0U << 28U) + | (uint32)((uint32)0U << 29U) + | (uint32)((uint32)0U << 30U) + | (uint32)((uint32)0U << 31U); + + vimREG->REQMASKSET2 = (uint32)((uint32)0U << 0U) + | (uint32)((uint32)0U << 1U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)0U << 3U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)0U << 5U) + | (uint32)((uint32)0U << 6U) + | (uint32)((uint32)0U << 7U) + | (uint32)((uint32)0U << 8U) + | (uint32)((uint32)0U << 9U) + | (uint32)((uint32)0U << 10U) + | (uint32)((uint32)0U << 11U) + | (uint32)((uint32)0U << 12U) + | (uint32)((uint32)0U << 13U) + | (uint32)((uint32)0U << 14U) + | (uint32)((uint32)0U << 15U) + | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)0U << 17U) + | (uint32)((uint32)0U << 18U) + | (uint32)((uint32)0U << 19U) + | (uint32)((uint32)0U << 20U) + | (uint32)((uint32)0U << 21U) + | (uint32)((uint32)0U << 22U) + | (uint32)((uint32)0U << 23U) + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)0U << 25U) + | (uint32)((uint32)0U << 26U) + | (uint32)((uint32)0U << 27U) + | (uint32)((uint32)0U << 28U) + | (uint32)((uint32)0U << 29U) + | (uint32)((uint32)0U << 30U) + | (uint32)((uint32)0U << 31U); + + vimREG->REQMASKSET3 = (uint32)((uint32)0U << 0U) + | (uint32)((uint32)0U << 1U) + | (uint32)((uint32)0U << 2U) + | (uint32)((uint32)0U << 3U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)0U << 5U) + | (uint32)((uint32)0U << 6U) + | (uint32)((uint32)0U << 7U) + | (uint32)((uint32)0U << 8U) + | (uint32)((uint32)0U << 9U) + | (uint32)((uint32)0U << 10U) + | (uint32)((uint32)0U << 11U) + | (uint32)((uint32)0U << 12U) + | (uint32)((uint32)0U << 13U) + | (uint32)((uint32)0U << 14U) + | (uint32)((uint32)0U << 15U) + | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)0U << 17U) + | (uint32)((uint32)0U << 18U) + | (uint32)((uint32)0U << 19U) + | (uint32)((uint32)0U << 20U) + | (uint32)((uint32)0U << 21U) + | (uint32)((uint32)0U << 22U) + | (uint32)((uint32)0U << 23U) + | (uint32)((uint32)0U << 24U) + | (uint32)((uint32)0U << 25U) + | (uint32)((uint32)0U << 26U) + | (uint32)((uint32)0U << 27U) + | (uint32)((uint32)0U << 28U) + | (uint32)((uint32)0U << 29U) + | (uint32)((uint32)0U << 30U) + | (uint32)((uint32)0U << 31U); + + /* Set Capture event sources */ + vimREG->CAPEVT = ((uint32)((uint32)0U << 0U) + |(uint32)((uint32)0U << 16U)); +} + +/** @fn void vimChannelMap(uint32 request, uint32 channel, t_isrFuncPTR handler) +* @brief Map selected interrupt request to the selected channel +* +* @param[in] request: Interrupt request number 2..127 +* @param[in] channel: VIM Channel number 2..127 +* @param[in] handler: Address of the interrupt handler +* +* This function will map selected interrupt request to the selected channel. +* +*/ +/* SourceId : VIM_SourceId_002 */ +/* DesignId : VIM_DesignId_002 */ +/* Requirements : HL_SR101 */ +void vimChannelMap(uint32 request, uint32 channel, t_isrFuncPTR handler) +{ + uint32 i,j; + i = channel >> 2U; /* Find the register to configure */ + j = channel - (i << 2U); /* Find the offset of the type */ + j = 3U - j; /* reverse the byte order */ + j = j << 3U; /* find the bit location */ + + /*Mapping the required interrupt request to the required channel*/ + vimREG->CHANCTRL[i] &= ~(uint32)((uint32)0xFFU << j); + vimREG->CHANCTRL[i] |= (request << j); + + /*Updating VIMRAM*/ + vimRAM->ISR[channel + 1U] = handler; +} + +/** @fn void vimEnableInterrupt(uint32 channel, boolean inttype) +* @brief Enable interrupt for the the selected channel +* +* @param[in] channel: VIM Channel number 2..127 +* @param[in] inttype: Interrupt type +* - SYS_IRQ: Selected channel will be enabled as IRQ +* - SYS_FIQ: Selected channel will be enabled as FIQ +* +* This function will enable interrupt for the selected channel. +* +*/ +/* SourceId : VIM_SourceId_003 */ +/* DesignId : VIM_DesignId_003 */ +/* Requirements : HL_SR102 */ +void vimEnableInterrupt(uint32 channel, systemInterrupt_t inttype) +{ + if (channel >= 96U) + { + if(inttype == SYS_IRQ) + { + vimREG->FIRQPR3 &= ~(uint32)((uint32)1U << (channel-96U)); + } + else + { + vimREG->FIRQPR3 |= ((uint32)1U << (channel-96U)); + } + vimREG->REQMASKSET3 = (uint32)1U << (channel-96U); + } + else if (channel >= 64U) + { + if(inttype == SYS_IRQ) + { + vimREG->FIRQPR2 &= ~(uint32)((uint32)1U << (channel-64U)); + } + else + { + vimREG->FIRQPR2 |= ((uint32)1U << (channel-64U)); + } + vimREG->REQMASKSET2 = (uint32)1U << (channel-64U); + } + else if (channel >= 32U) + { + if(inttype == SYS_IRQ) + { + vimREG->FIRQPR1 &= ~(uint32)((uint32)1U << (channel-32U)); + } + else + { + vimREG->FIRQPR1 |= ((uint32)1U << (channel-32U)); + } + vimREG->REQMASKSET1 = (uint32)1U << (channel-32U); + } + else if (channel >= 2U) + { + if(inttype == SYS_IRQ) + { + vimREG->FIRQPR0 &= ~(uint32)((uint32)1U << channel); + } + else + { + vimREG->FIRQPR0 |= ((uint32)1U << channel); + } + vimREG->REQMASKSET0 = (uint32)1U << channel; + } + else + { + /* Empty */ + } +} + +/** @fn void vimDisableInterrupt(uint32 channel) +* @brief Disable interrupt for the the selected channel +* +* @param[in] channel: VIM Channel number 2..127 +* +* This function will disable interrupt for the selected channel. +* +*/ +/* SourceId : VIM_SourceId_004 */ +/* DesignId : VIM_DesignId_004 */ +/* Requirements : HL_SR103 */ +void vimDisableInterrupt(uint32 channel) +{ + if (channel >= 96U) + { + vimREG->REQMASKCLR3 = (uint32)1U << (channel-96U); + } + else if (channel >= 64U) + { + vimREG->REQMASKCLR2 = (uint32)1U << (channel-64U); + } + else if (channel >=32U) + { + vimREG->REQMASKCLR1 = (uint32)1U << (channel-32U); + } + else if (channel >= 2U) + { + vimREG->REQMASKCLR0 = (uint32)1U << channel; + } + else + { + /* Empty */ + } +} + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @fn void vimGetConfigValue(vim_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') of the configuration +* registers to the struct pointed by config_reg +* +*/ +/* SourceId : VIM_SourceId_005 */ +/* DesignId : VIM_DesignId_005 */ +/* Requirements : HL_SR104 */ +void vimGetConfigValue(vim_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_FIRQPR0 = VIM_FIRQPR0_CONFIGVALUE; + config_reg->CONFIG_FIRQPR1 = VIM_FIRQPR1_CONFIGVALUE; + config_reg->CONFIG_FIRQPR2 = VIM_FIRQPR2_CONFIGVALUE; + config_reg->CONFIG_FIRQPR3 = VIM_FIRQPR3_CONFIGVALUE; + config_reg->CONFIG_REQMASKSET0 = VIM_REQMASKSET0_CONFIGVALUE; + config_reg->CONFIG_REQMASKSET1 = VIM_REQMASKSET1_CONFIGVALUE; + config_reg->CONFIG_REQMASKSET2 = VIM_REQMASKSET2_CONFIGVALUE; + config_reg->CONFIG_REQMASKSET3 = VIM_REQMASKSET3_CONFIGVALUE; + config_reg->CONFIG_WAKEMASKSET0 = VIM_WAKEMASKSET0_CONFIGVALUE; + config_reg->CONFIG_WAKEMASKSET1 = VIM_WAKEMASKSET1_CONFIGVALUE; + config_reg->CONFIG_WAKEMASKSET2 = VIM_WAKEMASKSET2_CONFIGVALUE; + config_reg->CONFIG_WAKEMASKSET3 = VIM_WAKEMASKSET3_CONFIGVALUE; + config_reg->CONFIG_CAPEVT = VIM_CAPEVT_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[0U] = VIM_CHANCTRL0_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[1U] = VIM_CHANCTRL1_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[2U] = VIM_CHANCTRL2_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[3U] = VIM_CHANCTRL3_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[4U] = VIM_CHANCTRL4_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[5U] = VIM_CHANCTRL5_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[6U] = VIM_CHANCTRL6_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[7U] = VIM_CHANCTRL7_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[8U] = VIM_CHANCTRL8_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[9U] = VIM_CHANCTRL9_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[10U] = VIM_CHANCTRL10_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[11U] = VIM_CHANCTRL11_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[12U] = VIM_CHANCTRL12_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[13U] = VIM_CHANCTRL13_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[14U] = VIM_CHANCTRL14_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[15U] = VIM_CHANCTRL15_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[16U] = VIM_CHANCTRL16_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[17U] = VIM_CHANCTRL17_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[18U] = VIM_CHANCTRL18_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[19U] = VIM_CHANCTRL19_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[20U] = VIM_CHANCTRL20_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[21U] = VIM_CHANCTRL21_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[22U] = VIM_CHANCTRL22_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[23U] = VIM_CHANCTRL23_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[24U] = VIM_CHANCTRL24_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[25U] = VIM_CHANCTRL25_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[26U] = VIM_CHANCTRL26_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[27U] = VIM_CHANCTRL27_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[28U] = VIM_CHANCTRL28_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[29U] = VIM_CHANCTRL29_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[30U] = VIM_CHANCTRL30_CONFIGVALUE; + config_reg->CONFIG_CHANCTRL[31U] = VIM_CHANCTRL31_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_FIRQPR0 = vimREG->FIRQPR0; + config_reg->CONFIG_FIRQPR1 = vimREG->FIRQPR1; + config_reg->CONFIG_FIRQPR2 = vimREG->FIRQPR2; + config_reg->CONFIG_FIRQPR3 = vimREG->FIRQPR3; + config_reg->CONFIG_REQMASKSET0 = vimREG->REQMASKSET0; + config_reg->CONFIG_REQMASKSET1 = vimREG->REQMASKSET1; + config_reg->CONFIG_REQMASKSET2 = vimREG->REQMASKSET2; + config_reg->CONFIG_REQMASKSET3 = vimREG->REQMASKSET3; + config_reg->CONFIG_WAKEMASKSET0 = vimREG->WAKEMASKSET0; + config_reg->CONFIG_WAKEMASKSET1 = vimREG->WAKEMASKSET1; + config_reg->CONFIG_WAKEMASKSET2 = vimREG->WAKEMASKSET2; + config_reg->CONFIG_WAKEMASKSET3 = vimREG->WAKEMASKSET3; + config_reg->CONFIG_CAPEVT = vimREG->CAPEVT; + config_reg->CONFIG_CHANCTRL[0U] = vimREG->CHANCTRL[0U]; + config_reg->CONFIG_CHANCTRL[1U] = vimREG->CHANCTRL[1U]; + config_reg->CONFIG_CHANCTRL[2U] = vimREG->CHANCTRL[2U]; + config_reg->CONFIG_CHANCTRL[3U] = vimREG->CHANCTRL[3U]; + config_reg->CONFIG_CHANCTRL[4U] = vimREG->CHANCTRL[4U]; + config_reg->CONFIG_CHANCTRL[5U] = vimREG->CHANCTRL[5U]; + config_reg->CONFIG_CHANCTRL[6U] = vimREG->CHANCTRL[6U]; + config_reg->CONFIG_CHANCTRL[7U] = vimREG->CHANCTRL[7U]; + config_reg->CONFIG_CHANCTRL[8U] = vimREG->CHANCTRL[8U]; + config_reg->CONFIG_CHANCTRL[9U] = vimREG->CHANCTRL[9U]; + config_reg->CONFIG_CHANCTRL[10U] = vimREG->CHANCTRL[10U]; + config_reg->CONFIG_CHANCTRL[11U] = vimREG->CHANCTRL[11U]; + config_reg->CONFIG_CHANCTRL[12U] = vimREG->CHANCTRL[12U]; + config_reg->CONFIG_CHANCTRL[13U] = vimREG->CHANCTRL[13U]; + config_reg->CONFIG_CHANCTRL[14U] = vimREG->CHANCTRL[14U]; + config_reg->CONFIG_CHANCTRL[15U] = vimREG->CHANCTRL[15U]; + config_reg->CONFIG_CHANCTRL[16U] = vimREG->CHANCTRL[16U]; + config_reg->CONFIG_CHANCTRL[17U] = vimREG->CHANCTRL[17U]; + config_reg->CONFIG_CHANCTRL[18U] = vimREG->CHANCTRL[18U]; + config_reg->CONFIG_CHANCTRL[19U] = vimREG->CHANCTRL[19U]; + config_reg->CONFIG_CHANCTRL[20U] = vimREG->CHANCTRL[20U]; + config_reg->CONFIG_CHANCTRL[21U] = vimREG->CHANCTRL[21U]; + config_reg->CONFIG_CHANCTRL[22U] = vimREG->CHANCTRL[22U]; + config_reg->CONFIG_CHANCTRL[23U] = vimREG->CHANCTRL[23U]; + config_reg->CONFIG_CHANCTRL[24U] = vimREG->CHANCTRL[24U]; + config_reg->CONFIG_CHANCTRL[25U] = vimREG->CHANCTRL[25U]; + config_reg->CONFIG_CHANCTRL[26U] = vimREG->CHANCTRL[26U]; + config_reg->CONFIG_CHANCTRL[27U] = vimREG->CHANCTRL[27U]; + config_reg->CONFIG_CHANCTRL[28U] = vimREG->CHANCTRL[28U]; + config_reg->CONFIG_CHANCTRL[29U] = vimREG->CHANCTRL[29U]; + config_reg->CONFIG_CHANCTRL[30U] = vimREG->CHANCTRL[30U]; + config_reg->CONFIG_CHANCTRL[31U] = vimREG->CHANCTRL[31U]; + } +} + + +#pragma CODE_STATE(vimParityErrorHandler, 32) +#pragma INTERRUPT(vimParityErrorHandler, IRQ) +#pragma WEAK(vimParityErrorHandler) + +/* SourceId : VIM_SourceId_006 */ +/* DesignId : VIM_DesignId_006 */ +/* Requirements : HL_SR105 */ +void vimParityErrorHandler(void) +{ + uint32 vec; + + /* Identify the corrupted address */ + uint32 error_addr = VIM_ADDERR; + + /* Identify the channel number */ + uint32 error_channel = ((error_addr & 0x1FFU) >> 2U); + + /* Correct the corrupted location */ + vimRAM->ISR[error_channel] = s_vim_init[error_channel]; + + /* Clear Parity Error Flag */ + VIM_PARFLG = 1U; + + /* Disable and enable the highest priority pending channel */ + if (vimREG->FIQINDEX != 0U) + { + vec = vimREG->FIQINDEX - 1U; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "Read 32 bit volatile register" */ + vec = vimREG->IRQINDEX - 1U; + } + if(vec == 0U) + { + vimREG->INTREQ0 = 1U; + vec = esmREG->IOFFHR - 1U; + + if (vec < 32U) + { + esmREG->SR1[0U] = (uint32)1U << vec; + esmGroup1Notification(vec); + } + else if (vec < 64U) + { + esmREG->SR1[1U] = (uint32)1U << (vec-32U); + esmGroup2Notification(vec-32U); + } + else if (vec < 96U) + { + esmREG->SR4[0U] = (uint32)1U << (vec-64U); + esmGroup1Notification(vec-32U); + } + else + { + esmREG->SR4[1U] = (uint32)1U << (vec-96U); + esmGroup2Notification(vec-64U); + } + } + else if (vec < 32U) + { + vimREG->REQMASKCLR0 = (uint32)1U << vec; + vimREG->REQMASKSET0 = (uint32)1U << vec; + } + else if (vec < 64U) + { + vimREG->REQMASKCLR1 = (uint32)1U << (vec-32U); + vimREG->REQMASKSET1 = (uint32)1U << (vec-32U); + } + else if(vec < 96U) + { + vimREG->REQMASKCLR2 = (uint32)1U << (vec-64U); + vimREG->REQMASKSET2 = (uint32)1U << (vec-64U); + } + else + { + vimREG->REQMASKCLR3 = (uint32)1U << (vec-96U); + vimREG->REQMASKSET3 = (uint32)1U << (vec-96U); + } +} Index: firmware/source/system.c =================================================================== diff -u --- firmware/source/system.c (revision 0) +++ firmware/source/system.c (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,714 @@ +/** @file system.c +* @brief System Driver Source File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - API Functions +* . +* which are relevant for the System driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ + + +/* Include Files */ + +#include "system.h" +#include "sys_selftest.h" +#include "sys_pcr.h" +#include "pinmux.h" + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ + +/** @fn void systemInit(void) +* @brief Initializes System Driver +* +* This function initializes the System driver. +* +*/ + +/* USER CODE BEGIN (2) */ +/* USER CODE END */ + +/* SourceId : SYSTEM_SourceId_001 */ +/* DesignId : SYSTEM_DesignId_001 */ +/* Requirements : HL_SR451 */ +void setupPLL(void) +{ + +/* USER CODE BEGIN (3) */ +/* USER CODE END */ + + /* Disable PLL1 and PLL2 */ + systemREG1->CSDISSET = 0x00000002U | 0x00000040U; + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while((systemREG1->CSDIS & 0x42U) != 0x42U) + { + /* Wait */ + } + + /* Clear Global Status Register */ + systemREG1->GBLSTAT = 0x301U; + + /** - Configure PLL control registers */ + /** @b Initialize @b Pll1: */ + + /** - Setup pll control register 1: + * - Setup reset on oscillator slip + * - Setup bypass on pll slip + * - setup Pll output clock divider to max before Lock + * - Setup reset on oscillator fail + * - Setup reference clock divider + * - Setup Pll multiplier + */ + systemREG1->PLLCTL1 = (uint32)0x00000000U + | (uint32)0x20000000U + | (uint32)((uint32)0x1FU << 24U) + | (uint32)0x00000000U + | (uint32)((uint32)(6U - 1U)<< 16U) + | (uint32)(0xA400U); + + /** - Setup pll control register 2 + * - Setup spreading rate + * - Setup bandwidth adjustment + * - Setup internal Pll output divider + * - Setup spreading amount + */ + systemREG1->PLLCTL2 = (uint32)((uint32)255U << 22U) + | (uint32)((uint32)7U << 12U) + | (uint32)((uint32)(2U - 1U) << 9U) + | (uint32)61U; + + /** @b Initialize @b Pll2: */ + + /** - Setup pll2 control register : + * - setup Pll output clock divider to max before Lock + * - Setup reference clock divider + * - Setup internal Pll output divider + * - Setup Pll multiplier + */ + systemREG2->PLLCTL3 = (uint32)((uint32)(2U - 1U) << 29U) + | (uint32)((uint32)0x1FU << 24U) + | (uint32)((uint32)(6U - 1U)<< 16U) + | (uint32)(0xA400U); + + /** - Enable PLL(s) to start up or Lock */ + systemREG1->CSDIS = 0x00000000U + | 0x00000000U + | 0x00000008U + | 0x00000080U + | 0x00000000U + | 0x00000000U + | 0x00000000U; +} + +/** @fn void trimLPO(void) +* @brief Initialize LPO trim values +* +* Load TRIM values from OTP if present else call customTrimLPO() function +* +*/ +/* SourceId : SYSTEM_SourceId_002 */ +/* DesignId : SYSTEM_DesignId_002 */ +/* Requirements : HL_SR468 */ +void trimLPO(void) +{ + uint32 u32clocktestConfig; + /* Save user clocktest register configuration */ + u32clocktestConfig = systemREG1->CLKTEST; +/* USER CODE BEGIN (4) */ +/* USER CODE END */ + /*The TRM states OTP TRIM value should be stepped to avoid large changes in the HF LPO clock that would result in a LPOCLKMON fault. At issue is the TRM does not specify what the maximum step is so there is no metric to use for the SW implementation - the routine can temporarily disable the LPOCLKMON range check so the sudden change will not cause a fault.*/ + /* Disable clock range detection*/ + systemREG1->CLKTEST = (systemREG1->CLKTEST + | (uint32)((uint32)0x1U << 24U)) + & (uint32)(~((uint32)0x1U << 25U)); + + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + if(LPO_TRIM_VALUE != 0xFFFFU) + { + + systemREG1->LPOMONCTL = (uint32)((uint32)1U << 24U) + | (uint32)((uint32)LPO_TRIM_VALUE); + } + else + { + + customTrimLPO(); + + } + + /* Restore the user clocktest register value configuration */ + systemREG1->CLKTEST = u32clocktestConfig; + +/* USER CODE BEGIN (5) */ +/* USER CODE END */ + +} + +/* SourceId : SYSTEM_SourceId_003 */ +/* DesignId : SYSTEM_DesignId_003 */ +/* Requirements : HL_SR457 */ +void setupFlash(void) +{ + +/* USER CODE BEGIN (6) */ +/* USER CODE END */ + + /** - Setup flash read mode, address wait states and data wait states */ + flashWREG->FRDCNTL = 0x00000000U + | (uint32)((uint32)3U << 8U) + | (uint32)((uint32)1U << 4U) + | 1U; + + /** - Setup flash access wait states for bank 7 */ + FSM_WR_ENA_HL = 0x5U; + EEPROM_CONFIG_HL = 0x00000002U + | (uint32)((uint32)3U << 16U) ; + +/* USER CODE BEGIN (7) */ +/* USER CODE END */ + + /** - Disable write access to flash state machine registers */ + FSM_WR_ENA_HL = 0xAU; + + /** - Setup flash bank power modes */ + flashWREG->FBFALLBACK = 0x00000000U + | (uint32)((uint32)SYS_ACTIVE << 14U) /* BANK 7 */ + | (uint32)((uint32)SYS_ACTIVE << 2U) /* BANK 1 */ + | (uint32)((uint32)SYS_ACTIVE << 0U); /* BANK 0 */ + +/* USER CODE BEGIN (8) */ +/* USER CODE END */ + +} + +/* SourceId : SYSTEM_SourceId_004 */ +/* DesignId : SYSTEM_DesignId_004 */ +/* Requirements : HL_SR470 */ +void periphInit(void) +{ + +/* USER CODE BEGIN (9) */ +/* USER CODE END */ + + /** - Disable Peripherals before peripheral powerup*/ + systemREG1->CLKCNTL &= 0xFFFFFEFFU; + + /** - Release peripherals from reset and enable clocks to all peripherals */ + /** - Power-up all peripherals */ + pcrREG->PSPWRDWNCLR0 = 0xFFFFFFFFU; + pcrREG->PSPWRDWNCLR1 = 0xFFFFFFFFU; + pcrREG->PSPWRDWNCLR2 = 0xFFFFFFFFU; + pcrREG->PSPWRDWNCLR3 = 0xFFFFFFFFU; + + /** - Enable Peripherals */ + systemREG1->CLKCNTL |= 0x00000100U; + +/* USER CODE BEGIN (10) */ +/* USER CODE END */ + +} + +/* SourceId : SYSTEM_SourceId_005 */ +/* DesignId : SYSTEM_DesignId_005 */ +/* Requirements : HL_SR469 */ +void mapClocks(void) +{ + uint32 SYS_CSVSTAT, SYS_CSDIS; + +/* USER CODE BEGIN (11) */ +/* USER CODE END */ + + /** @b Initialize @b Clock @b Tree: */ + /** - Disable / Enable clock domain */ + systemREG1->CDDIS = (uint32)((uint32)0U << 4U ) /* AVCLK1 , 1 - OFF, 0 - ON */ + | (uint32)((uint32)1U << 5U ) /* AVCLK2 , 1 - OFF, 0 - ON */ + | (uint32)((uint32)0U << 8U ) /* VCLK3 , 1 - OFF, 0 - ON */ + | (uint32)((uint32)0U << 9U ) /* VCLK4 , 1 - OFF, 0 - ON */ + | (uint32)((uint32)0U << 10U) /* AVCLK3 , 1 - OFF, 0 - ON */ + | (uint32)((uint32)0U << 11U); /* AVCLK4 , 1 - OFF, 0 - ON */ + + + /* Work Around for Errata SYS#46: + * + * Errata Description: + * Clock Source Switching Not Qualified with Clock Source Enable And Clock Source Valid + * Workaround: + * Always check the CSDIS register to make sure the clock source is turned on and check + * the CSVSTAT register to make sure the clock source is valid. Then write to GHVSRC to switch the clock. + */ + /** - Wait for until clocks are locked */ + SYS_CSVSTAT = systemREG1->CSVSTAT; + SYS_CSDIS = systemREG1->CSDIS; + while ((SYS_CSVSTAT & ((SYS_CSDIS ^ 0xFFU) & 0xFFU)) != ((SYS_CSDIS ^ 0xFFU) & 0xFFU)) + { + SYS_CSVSTAT = systemREG1->CSVSTAT; + SYS_CSDIS = systemREG1->CSDIS; + } /* Wait */ + +/* USER CODE BEGIN (12) */ +/* USER CODE END */ + + /** - Map device clock domains to desired sources and configure top-level dividers */ + /** - All clock domains are working off the default clock sources until now */ + /** - The below assignments can be easily modified using the HALCoGen GUI */ + + /** - Setup GCLK, HCLK and VCLK clock source for normal operation, power down mode and after wakeup */ + systemREG1->GHVSRC = (uint32)((uint32)SYS_OSC << 24U) + | (uint32)((uint32)SYS_OSC << 16U) + | (uint32)((uint32)SYS_PLL1 << 0U); + + /** - Setup RTICLK1 and RTICLK2 clocks */ + systemREG1->RCLKSRC = (uint32)((uint32)1U << 24U) + | (uint32)((uint32)SYS_VCLK << 16U) + | (uint32)((uint32)1U << 8U) + | (uint32)((uint32)SYS_VCLK << 0U); + + /** - Setup asynchronous peripheral clock sources for AVCLK1 and AVCLK2 */ + systemREG1->VCLKASRC = (uint32)((uint32)SYS_VCLK << 8U) + | (uint32)((uint32)SYS_VCLK << 0U); + + /** - Setup synchronous peripheral clock dividers for VCLK1, VCLK2, VCLK3 */ + systemREG1->CLKCNTL = (systemREG1->CLKCNTL & 0xF0FFFFFFU) + | (uint32)((uint32)1U << 24U); + systemREG1->CLKCNTL = (systemREG1->CLKCNTL & 0xFFF0FFFFU) + | (uint32)((uint32)1U << 16U); + + systemREG2->CLK2CNTL = (systemREG2->CLK2CNTL & 0xFFFFF0F0U) + | (uint32)((uint32)1U << 8U) + | (uint32)((uint32)1U << 0U); + + systemREG2->VCLKACON1 = (uint32)((uint32)(1U - 1U) << 24U) + | (uint32)((uint32)0U << 20U) + | (uint32)((uint32)SYS_VCLK << 16U) + | (uint32)((uint32)(1U - 1U) << 8U) + | (uint32)((uint32)0U << 4U) + | (uint32)((uint32)SYS_VCLK << 0U); + +/* USER CODE BEGIN (13) */ +/* USER CODE END */ + + /* Now the PLLs are locked and the PLL outputs can be sped up */ + /* The R-divider was programmed to be 0xF. Now this divider is changed to programmed value */ + systemREG1->PLLCTL1 = (systemREG1->PLLCTL1 & 0xE0FFFFFFU) | (uint32)((uint32)(1U - 1U) << 24U); + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + systemREG2->PLLCTL3 = (systemREG2->PLLCTL3 & 0xE0FFFFFFU) | (uint32)((uint32)(1U - 1U) << 24U); + + /* Enable/Disable Frequency modulation */ + systemREG1->PLLCTL2 |= 0x00000000U; + +/* USER CODE BEGIN (14) */ +/* USER CODE END */ + +} + +/* SourceId : SYSTEM_SourceId_006 */ +/* DesignId : SYSTEM_DesignId_006 */ +/* Requirements : HL_SR471 */ +void systemInit(void) +{ + uint32 efcCheckStatus; + +/* USER CODE BEGIN (15) */ +/* USER CODE END */ + + /* Configure PLL control registers and enable PLLs. + * The PLL takes (127 + 1024 * NR) oscillator cycles to acquire lock. + * This initialization sequence performs all the tasks that are not + * required to be done at full application speed while the PLL locks. + */ + setupPLL(); + +/* USER CODE BEGIN (16) */ +/* USER CODE END */ + + /* Run eFuse controller start-up checks and start eFuse controller ECC self-test. + * This includes a check for the eFuse controller error outputs to be stuck-at-zero. + */ + efcCheckStatus = efcCheck(); + +/* USER CODE BEGIN (17) */ +/* USER CODE END */ + + /* Enable clocks to peripherals and release peripheral reset */ + periphInit(); + +/* USER CODE BEGIN (18) */ +/* USER CODE END */ + + /* Configure device-level multiplexing and I/O multiplexing */ + muxInit(); + +/* USER CODE BEGIN (19) */ +/* USER CODE END */ + + if(efcCheckStatus == 0U) + { + /* Wait for eFuse controller self-test to complete and check results */ + if (checkefcSelfTest() == FALSE) /* eFuse controller ECC logic self-test failed */ + { + selftestFailNotification(EFCCHECK_FAIL1); /* device operation is not reliable */ + } + } + else if(efcCheckStatus == 2U) + { + /* Wait for eFuse controller self-test to complete and check results */ + if (checkefcSelfTest() == FALSE) /* eFuse controller ECC logic self-test failed */ + { + selftestFailNotification(EFCCHECK_FAIL1); /* device operation is not reliable */ + } + else + { + selftestFailNotification(EFCCHECK_FAIL2); + } + } + else + { + /* Empty */ + } +/* USER CODE BEGIN (20) */ +/* USER CODE END */ + + /** - Set up flash address and data wait states based on the target CPU clock frequency + * The number of address and data wait states for the target CPU clock frequency are specified + * in the specific part's datasheet. + */ + setupFlash(); + +/* USER CODE BEGIN (21) */ +/* USER CODE END */ + + /** - Configure the LPO such that HF LPO is as close to 10MHz as possible */ + trimLPO(); + + + +/* USER CODE BEGIN (23) */ +/* USER CODE END */ + + /** - Wait for PLLs to start up and map clock domains to desired clock sources */ + mapClocks(); + +/* USER CODE BEGIN (24) */ +/* USER CODE END */ + + /** - set ECLK pins functional mode */ + systemREG1->SYSPC1 = 0U; + + /** - set ECLK pins default output value */ + systemREG1->SYSPC4 = 0U; + + /** - set ECLK pins output direction */ + systemREG1->SYSPC2 = 1U; + + /** - set ECLK pins open drain enable */ + systemREG1->SYSPC7 = 0U; + + /** - set ECLK pins pullup/pulldown enable */ + systemREG1->SYSPC8 = 0U; + + /** - set ECLK pins pullup/pulldown select */ + systemREG1->SYSPC9 = 1U; + + /** - Setup ECLK */ + systemREG1->ECPCNTL = (uint32)((uint32)0U << 24U) + | (uint32)((uint32)0U << 23U) + | (uint32)((uint32)(8U - 1U) & 0xFFFFU); + +/* USER CODE BEGIN (25) */ +/* USER CODE END */ +} + +/* SourceId : SYSTEM_SourceId_007 */ +/* DesignId : SYSTEM_DesignId_007 */ +/* Requirements : HL_SR493 */ +void systemPowerDown(uint32 mode) +{ + +/* USER CODE BEGIN (26) */ +/* USER CODE END */ + + /* Disable clock sources */ + systemREG1->CSDISSET = mode & 0x000000FFU; + + /* Disable clock domains */ + systemREG1->CDDIS = (mode >> 8U) & 0x00000FFFU; + + /* Idle CPU */ + _gotoCPUIdle_(); + +/* USER CODE BEGIN (27) */ +/* USER CODE END */ + +} + +/* USER CODE BEGIN (28) */ +/* USER CODE END */ + +/** @fn void systemGetConfigValue(system_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : SYSTEM_SourceId_008 */ +/* DesignId : SYSTEM_DesignId_008 */ +/* Requirements : HL_SR506 */ +void systemGetConfigValue(system_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_SYSPC1 = SYS_SYSPC1_CONFIGVALUE; + config_reg->CONFIG_SYSPC2 = SYS_SYSPC2_CONFIGVALUE; + config_reg->CONFIG_SYSPC7 = SYS_SYSPC7_CONFIGVALUE; + config_reg->CONFIG_SYSPC8 = SYS_SYSPC8_CONFIGVALUE; + config_reg->CONFIG_SYSPC9 = SYS_SYSPC9_CONFIGVALUE; + config_reg->CONFIG_CSDIS = SYS_CSDIS_CONFIGVALUE; + config_reg->CONFIG_CDDIS = SYS_CDDIS_CONFIGVALUE; + config_reg->CONFIG_GHVSRC = SYS_GHVSRC_CONFIGVALUE; + config_reg->CONFIG_VCLKASRC = SYS_VCLKASRC_CONFIGVALUE; + config_reg->CONFIG_RCLKSRC = SYS_RCLKSRC_CONFIGVALUE; + config_reg->CONFIG_MSTGCR = SYS_MSTGCR_CONFIGVALUE; + config_reg->CONFIG_MINITGCR = SYS_MINITGCR_CONFIGVALUE; + config_reg->CONFIG_MSINENA = SYS_MSINENA_CONFIGVALUE; + config_reg->CONFIG_PLLCTL1 = SYS_PLLCTL1_CONFIGVALUE_2; + config_reg->CONFIG_PLLCTL2 = SYS_PLLCTL2_CONFIGVALUE; + config_reg->CONFIG_UERFLAG = SYS_UERFLAG_CONFIGVALUE; + /*SAFETYMCUSW 139 S MR:13.7 "Hardware status bit read check" */ + if(LPO_TRIM_VALUE != 0xFFFFU) + { + config_reg->CONFIG_LPOMONCTL = SYS_LPOMONCTL_CONFIGVALUE_1; + } + else + { + config_reg->CONFIG_LPOMONCTL = SYS_LPOMONCTL_CONFIGVALUE_2; + } + config_reg->CONFIG_CLKTEST = SYS_CLKTEST_CONFIGVALUE; + config_reg->CONFIG_DFTCTRLREG1 = SYS_DFTCTRLREG1_CONFIGVALUE; + config_reg->CONFIG_DFTCTRLREG2 = SYS_DFTCTRLREG2_CONFIGVALUE; + config_reg->CONFIG_GPREG1 = SYS_GPREG1_CONFIGVALUE; + config_reg->CONFIG_RAMGCR = SYS_RAMGCR_CONFIGVALUE; + config_reg->CONFIG_BMMCR1 = SYS_BMMCR1_CONFIGVALUE; + config_reg->CONFIG_MMUGCR = SYS_MMUGCR_CONFIGVALUE; + config_reg->CONFIG_CLKCNTL = SYS_CLKCNTL_CONFIGVALUE; + config_reg->CONFIG_ECPCNTL = SYS_ECPCNTL_CONFIGVALUE; + config_reg->CONFIG_DEVCR1 = SYS_DEVCR1_CONFIGVALUE; + config_reg->CONFIG_SYSECR = SYS_SYSECR_CONFIGVALUE; + + config_reg->CONFIG_PLLCTL3 = SYS2_PLLCTL3_CONFIGVALUE_2; + config_reg->CONFIG_STCCLKDIV = SYS2_STCCLKDIV_CONFIGVALUE; + config_reg->CONFIG_CLK2CNTL = SYS2_CLK2CNTL_CONFIGVALUE; + config_reg->CONFIG_VCLKACON1 = SYS2_VCLKACON1_CONFIGVALUE; + config_reg->CONFIG_CLKSLIP = SYS2_CLKSLIP_CONFIGVALUE; + config_reg->CONFIG_EFC_CTLEN = SYS2_EFC_CTLEN_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_SYSPC1 = systemREG1->SYSPC1; + config_reg->CONFIG_SYSPC2 = systemREG1->SYSPC2; + config_reg->CONFIG_SYSPC7 = systemREG1->SYSPC7; + config_reg->CONFIG_SYSPC8 = systemREG1->SYSPC8; + config_reg->CONFIG_SYSPC9 = systemREG1->SYSPC9; + config_reg->CONFIG_CSDIS = systemREG1->CSDIS; + config_reg->CONFIG_CDDIS = systemREG1->CDDIS; + config_reg->CONFIG_GHVSRC = systemREG1->GHVSRC; + config_reg->CONFIG_VCLKASRC = systemREG1->VCLKASRC; + config_reg->CONFIG_RCLKSRC = systemREG1->RCLKSRC; + config_reg->CONFIG_MSTGCR = systemREG1->MSTGCR; + config_reg->CONFIG_MINITGCR = systemREG1->MINITGCR; + config_reg->CONFIG_MSINENA = systemREG1->MSINENA; + config_reg->CONFIG_PLLCTL1 = systemREG1->PLLCTL1; + config_reg->CONFIG_PLLCTL2 = systemREG1->PLLCTL2; + config_reg->CONFIG_UERFLAG = systemREG1->SYSPC10; + config_reg->CONFIG_LPOMONCTL = systemREG1->LPOMONCTL; + config_reg->CONFIG_CLKTEST = systemREG1->CLKTEST; + config_reg->CONFIG_DFTCTRLREG1 = systemREG1->DFTCTRLREG1; + config_reg->CONFIG_DFTCTRLREG2 = systemREG1->DFTCTRLREG2; + config_reg->CONFIG_GPREG1 = systemREG1->GPREG1; + config_reg->CONFIG_RAMGCR = systemREG1->RAMGCR; + config_reg->CONFIG_BMMCR1 = systemREG1->BMMCR1; + config_reg->CONFIG_MMUGCR = systemREG1->CPURSTCR; + config_reg->CONFIG_CLKCNTL = systemREG1->CLKCNTL; + config_reg->CONFIG_ECPCNTL = systemREG1->ECPCNTL; + config_reg->CONFIG_DEVCR1 = systemREG1->DEVCR1; + config_reg->CONFIG_SYSECR = systemREG1->SYSECR; + + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_PLLCTL3 = systemREG2->PLLCTL3; + config_reg->CONFIG_STCCLKDIV = systemREG2->STCCLKDIV; + config_reg->CONFIG_CLK2CNTL = systemREG2->CLK2CNTL; + config_reg->CONFIG_VCLKACON1 = systemREG2->VCLKACON1; + config_reg->CONFIG_CLKSLIP = systemREG2->CLKSLIP; + config_reg->CONFIG_EFC_CTLEN = systemREG2->EFC_CTLEN; + } +} + +/** @fn void tcmflashGetConfigValue(tcmflash_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : SYSTEM_SourceId_009 */ +/* DesignId : SYSTEM_DesignId_009 */ +/* Requirements : HL_SR506 */ +void tcmflashGetConfigValue(tcmflash_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_FRDCNTL = TCMFLASH_FRDCNTL_CONFIGVALUE; + config_reg->CONFIG_FEDACCTRL1 = TCMFLASH_FEDACCTRL1_CONFIGVALUE; + config_reg->CONFIG_FEDACCTRL2 = TCMFLASH_FEDACCTRL2_CONFIGVALUE; + config_reg->CONFIG_FEDACSDIS = TCMFLASH_FEDACSDIS_CONFIGVALUE; + config_reg->CONFIG_FBPROT = TCMFLASH_FBPROT_CONFIGVALUE; + config_reg->CONFIG_FBSE = TCMFLASH_FBSE_CONFIGVALUE; + config_reg->CONFIG_FBAC = TCMFLASH_FBAC_CONFIGVALUE; + config_reg->CONFIG_FBFALLBACK = TCMFLASH_FBFALLBACK_CONFIGVALUE; + config_reg->CONFIG_FPAC1 = TCMFLASH_FPAC1_CONFIGVALUE; + config_reg->CONFIG_FPAC2 = TCMFLASH_FPAC2_CONFIGVALUE; + config_reg->CONFIG_FMAC = TCMFLASH_FMAC_CONFIGVALUE; + config_reg->CONFIG_FLOCK = TCMFLASH_FLOCK_CONFIGVALUE; + config_reg->CONFIG_FDIAGCTRL = TCMFLASH_FDIAGCTRL_CONFIGVALUE; + config_reg->CONFIG_FEDACSDIS2 = TCMFLASH_FEDACSDIS2_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_FRDCNTL = flashWREG->FRDCNTL; + config_reg->CONFIG_FEDACCTRL1 = flashWREG->FEDACCTRL1; + config_reg->CONFIG_FEDACCTRL2 = flashWREG->FEDACCTRL2; + config_reg->CONFIG_FEDACSDIS = flashWREG->FEDACSDIS; + config_reg->CONFIG_FBPROT = flashWREG->FBPROT; + config_reg->CONFIG_FBSE = flashWREG->FBSE; + config_reg->CONFIG_FBAC = flashWREG->FBAC; + config_reg->CONFIG_FBFALLBACK = flashWREG->FBFALLBACK; + config_reg->CONFIG_FPAC1 = flashWREG->FPAC1; + config_reg->CONFIG_FPAC2 = flashWREG->FPAC2; + config_reg->CONFIG_FMAC = flashWREG->FMAC; + config_reg->CONFIG_FLOCK = flashWREG->FLOCK; + config_reg->CONFIG_FDIAGCTRL = flashWREG->FDIAGCTRL; + config_reg->CONFIG_FEDACSDIS2 = flashWREG->FEDACSDIS2; + } +} + + + +/** @fn void sramGetConfigValue(sram_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : SYSTEM_SourceId_010 */ +/* DesignId : SYSTEM_DesignId_010 */ +/* Requirements : HL_SR506 */ +void sramGetConfigValue(sram_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_RAMCTRL[0U] = SRAM_RAMCTRL_CONFIGVALUE; + config_reg->CONFIG_RAMTHRESHOLD[0U] = SRAM_RAMTHRESHOLD_CONFIGVALUE; + config_reg->CONFIG_RAMINTCTRL[0U] = SRAM_RAMINTCTRL_CONFIGVALUE; + config_reg->CONFIG_RAMTEST[0U] = SRAM_RAMTEST_CONFIGVALUE; + config_reg->CONFIG_RAMADDRDECVECT[0U] = SRAM_RAMADDRDECVECT_CONFIGVALUE; + + config_reg->CONFIG_RAMCTRL[1U] = SRAM_RAMCTRL_CONFIGVALUE; + config_reg->CONFIG_RAMTHRESHOLD[1U] = SRAM_RAMTHRESHOLD_CONFIGVALUE; + config_reg->CONFIG_RAMINTCTRL[1U] = SRAM_RAMINTCTRL_CONFIGVALUE; + config_reg->CONFIG_RAMTEST[1U] = SRAM_RAMTEST_CONFIGVALUE; + config_reg->CONFIG_RAMADDRDECVECT[1U] = SRAM_RAMADDRDECVECT_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_RAMCTRL[0U] = tcram1REG->RAMCTRL; + config_reg->CONFIG_RAMTHRESHOLD[0U] = tcram1REG->RAMTHRESHOLD; + config_reg->CONFIG_RAMINTCTRL[0U] = tcram1REG->RAMINTCTRL; + config_reg->CONFIG_RAMTEST[0U] = tcram1REG->RAMTEST; + config_reg->CONFIG_RAMADDRDECVECT[0U] = tcram1REG->RAMADDRDECVECT; + + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_RAMCTRL[1U] = tcram2REG->RAMCTRL; + config_reg->CONFIG_RAMTHRESHOLD[1U] = tcram2REG->RAMTHRESHOLD; + config_reg->CONFIG_RAMINTCTRL[1U] = tcram2REG->RAMINTCTRL; + config_reg->CONFIG_RAMTEST[1U] = tcram2REG->RAMTEST; + config_reg->CONFIG_RAMADDRDECVECT[1U] = tcram2REG->RAMADDRDECVECT; + } +} + +/** @fn customTrimLPO(void) +* @brief custom function to initilize LPO trim values +* +* This function initializes default LPO trim values if OTP value is 0XFFFF, +* user can also write their own code to handle this case . +* +*/ +void customTrimLPO(void) +{ + /* User can write logic to handle the case where LPO trim is set to 0xFFFFu */ +/* USER CODE BEGIN (29) */ +/* USER CODE END */ + + /* Load default trimLPO value */ + systemREG1->LPOMONCTL = (uint32)((uint32)1U << 24U) + | (uint32)((uint32)16U << 8U) + | (uint32)((uint32)16U); + +/* USER CODE BEGIN (30) */ +/* USER CODE END */ +} Index: firmware/targetConfigs/RM46L852.ccxml =================================================================== diff -u --- firmware/targetConfigs/RM46L852.ccxml (revision 0) +++ firmware/targetConfigs/RM46L852.ccxml (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + Index: firmware/targetConfigs/readme.txt =================================================================== diff -u --- firmware/targetConfigs/readme.txt (revision 0) +++ firmware/targetConfigs/readme.txt (revision 792764062d7b7826af10e030277f18379af4fcd1) @@ -0,0 +1,9 @@ +The 'targetConfigs' folder contains target-configuration (.ccxml) files, automatically generated based +on the device and connection settings specified in your project on the Properties > General page. + +Please note that in automatic target-configuration management, changes to the project's device and/or +connection settings will either modify an existing or generate a new target-configuration file. Thus, +if you manually edit these auto-generated files, you may need to re-apply your changes. Alternatively, +you may create your own target-configuration file for this project and manage it manually. You can +always switch back to automatic target-configuration management by checking the "Manage the project's +target-configuration automatically" checkbox on the project's Properties > General page. \ No newline at end of file